diff --git a/.gitignore b/.gitignore index 783a4aee..5d23856f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ -*~ -*.sw[op] +/* +!/pages +!/images +!/themes \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index 18a27402..38a1a730 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,5 +2,3 @@ language: bash script: - bash tests/dead_links.sh - - bash tests/unreferenced_pages.sh - - bash tests/check_code_block_syntax.sh diff --git a/README.md b/README.md index ed5d3ad2..31d94298 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,26 @@ # YunoHost Documentation * [Web Site](https://yunohost.org) -* Based on [Simone](https://github.com/YunoHost/Simone) +* Based on [Grav](https://getgrav.org/) Please report [issues on YunoHost bugtracker](https://github.com/YunoHost/issues/issues). -You can live test any changes by adding `/edit` to the URL on -[yunohost.org](https://yunohost.org). For example, if you make changes to -[apps.md](./apps.md), you can test them on [yunohost.org/#/apps/edit](https://yunohost.org/#/apps/edit). +# Contributing + +You can refer to the page on [writing documentation](https://yunohost.org/write_documentation). + +## Regenerate the css + +We use scss to manage the css. If you want to change it, you must rebuild it. + +First install npm, then in the root folder of this repo, install sass: `npm install sass` + +Finally you can rebuild the css with (You can replace `expanded` by `compressed` if you want): + +```bash +./node_modules/sass/sass.js themes/yunohost-docs/scss:themes/yunohost-docs/css --style expanded +``` + +Source: +https://sass-lang.com/guide + diff --git a/XMPP.md b/XMPP.md deleted file mode 100644 index 8355f87a..00000000 --- a/XMPP.md +++ /dev/null @@ -1,60 +0,0 @@ -# Chat, VoIP and social network with <img src="/images/XMPP_logo.png" width=100> - -YunoHost comes installed by default with an instant messaging server Metronome which implements the [XMPP protocol](https://en.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol) (previously known as Jabber). - -This protocol is already used by millions of people around the world - it is an open protocol. All applications based on XMPP are compatible with each other: when using an XMPP client, you can interact with anybody who has an XMPP account. - -XMPP is an extensible protocol - this means users can configure "extensions" to chatrooms, to share messages and files, and to make voice and video calls using XMPP. - -## XMPP account - -To use an XMPP account you need a username, which takes the format: `user@domain.tld`, and a password. - -With YunoHost, an XMPP account is created for all YunoHost users automatically. The XMPP account credentials corresponds to the user's main email address and password. - -## Connecting to your YunoHost XMPP account - -You can connect to your YunoHost XMPP account in different ways. - -### Web clients - -- [Movim](https://movim.eu) -- [ConverseJS](https://conversejs.org/) -- [Libervia/Salut à Toi](https://salut-a-toi.org/) - -### Desktop clients - -- [Gajim](http://gajim.org/) (Linux,Windows) -- [Dino](https://dino.im) (Linux) -- [Thunderbird](https://www.thunderbird.net/fr/) (multiplatform) -- [Beagle IM](https://beagle.im/) (Mac OS) -- [Profanity](https://profanity-im.github.io/) (Linux) - -### Mobile clients - -- [Conversations](https://conversations.im/) (Android) -- [Xabber](http://xabber.com) (Android) -- [Movim under Android](https://movim.eu) -- [Monal](https://monal.im/) (iOS) -- [Siskin IM](https://siskin.im/) (iOS) -- [Kaidan](https://www.kaidan.im/) (Ubuntu Touch / Plasma Mobile) - -Here is an exhaustive list of XMPP clients : https://xmpp.org/software/clients.html - -## Encrypt conversations with OMEMO - -XMPP chats can be made secure and private using [OMEMO] encryption (https://xmpp.org/extensions/xep-0384.html), for instance using Gajim: -- Install `gajim` and the plugin `gajim-omemo` -- Enable the plugin in `Tools > Plugins` -- Enable it -- Enable the encryption in the chat with somebody who also has OMEMO - -## Chatrooms - -To create a chatroom (multi-user chat) on your YunoHost server, use the identifier `chatroomname@muc.yourdomain.tld`. - -For this to work you need to [add the corresponding `muc.` DNS record](/dns_config) in the DNS configuration. - -## VoIP and videoconferences - -A practical tool to call an XMPP client, either with voice or voice+video, is to use the client [Jitsi](http://jitsi.org/). diff --git a/admin.md b/admin.md deleted file mode 100644 index 288471af..00000000 --- a/admin.md +++ /dev/null @@ -1,37 +0,0 @@ -# Administrator web interface - -Yunohost has an administrator web interface. The other way to administrate your Yunohost install is through the [command line](/commandline). - -### Access - -You can access your administrator web interface at this address: https://example.org/yunohost/admin (replace 'example.org' with your own domain name) - -<div class="text-center" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> -<img src="/images/webadmin.png" style="max-width:100%;"> -</div> - - -### Reset admin password - -To reset the admin password (as root) : - -```bash -$ yunohost-reset-ldap-password -``` - -A temporary password will be created, which you can use to define the new password. - - -### How to move application folder - -To change an application folder, only a few commands are needed: move content, create a symlink and set access rights. - -Sample with WordPress: -```bash -# Move wordpress folder to an external hard drive -$ sudo mv /var/www/wordpress /media/externalharddrive -# Symbolic link -$ sudo ln -s /media/externalharddrive/wordpress /var/www/wordpress -# Folder must belong to www-data -$ sudo chown -R www-data:www-data /media/externalharddrive/wordpress -``` diff --git a/admin_es.md b/admin_es.md deleted file mode 100644 index 573adb3b..00000000 --- a/admin_es.md +++ /dev/null @@ -1,37 +0,0 @@ -# La interfaz de administración web - -Yunohost tiene una interfaz gráfica de administración. El otro método consiste en utilizar la [linea de comando](/commandline). - -### Acceso - -La interfaz admin está accesible desde tu instancia Yunohost en esta dirección : https://ejemplo.org/yunohost/admin (reemplaza ejemplo.org por tu nombre de dominio) - -<div class="text-center" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> -<img src="/images/webadmin.png" style="max-width:100%;"> -</div> - - -### Reinicia la contraseña del administrador - -Para reiniciar la contraseña de administración de Yunohost (con el usuario root) : - -```bash -$ yunohost-reset-ldap-password -``` - -Una contraseña provisional será creada, podrás utilizarla para luego definir una nueva contraseña. - - -### Cómo mover la carpeta de una aplicación - -Para cambiar la carpeta donde está una aplicación, sólo algunos comandos son necesarios : desplazar el contenido, crear un vínculo simbólico y definir los derechos de acceso. - -Ejemplo con WordPress : -```bash -# Desplazamiento del wordpress hacia otro soporte -$ sudo mv /var/www/wordpress /mon/dossier/cible -# Creación del vínculo simbólico -$ sudo ln -s /media/disqueexterne/wordpress /var/www/wordpress -# El directorio debe pertenecer a www-data -sudo chown -R www-data:www-data /media/externalharddrive/wordpress -``` diff --git a/admin_fr.md b/admin_fr.md deleted file mode 100644 index 5601de0f..00000000 --- a/admin_fr.md +++ /dev/null @@ -1,37 +0,0 @@ -# L’interface d’administration web - -YunoHost est fourni avec une interface graphique d’administration. L’autre méthode est d’utiliser la [ligne de commande](/commandline). - -### Accès - -L’interface admin est accessible depuis votre instance YunoHost à l’adresse https://exemple.org/yunohost/admin (remplacez exemple.org par la bonne valeur) - -<div class="text-center" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> -<img src="/images/webadmin_fr.png" style="max-width:100%;"> -</div> - - -### Réinitialiser le mot de passe administrateur - -Pour réinitialiser le mot de passe administrateur de YunoHost (à partir de l'utilisateur root) : - -```bash -$ yunohost-reset-ldap-password -``` - -Un mot de passe temporaire sera créé, que vous pouvez utiliser pour ensuite définir un nouveau mot de passe. - - -### Comment déplacer le dossier d’une application - -Pour changer le dossier contenant une application, seules quelques commandes sont nécessaires : déplacer le contenu, créer un lien symbolique et définir les droits d’accès. - -Exemple avec WordPress : -```bash -# Deplacement du wordpress vers un autre support -$ sudo mv /var/www/wordpress /mon/dossier/cible -# Création du lien symbolique -$ sudo ln -s /media/disqueexterne/wordpress /var/www/wordpress -# Le répertoire doit appartenir à www-data -sudo chown -R www-data:www-data /media/externalharddrive/wordpress -``` diff --git a/admindoc.md b/admindoc.md deleted file mode 100644 index ce519fe5..00000000 --- a/admindoc.md +++ /dev/null @@ -1,51 +0,0 @@ -# Administrator documentation - -* Discovering self-hosting - * [What is Self-hosting](/selfhosting) - * [What is YunoHost](/whatsyunohost) - * [Try YunoHost](/try) - * [How to host yourself](howtohostyourself) - * [Choosing hardware](/hardware) - * [About the friendliness of internet service providers](/isp) -* [Installing YunoHost](/install) - * [On a regular computer](/install_iso) - * [On a dedicated or a virtual private server](/install_on_vps) - * [On a Raspberry Pi](/install_on_raspberry) - * [On an ARM board](/install_on_arm_board) - * [On Debian](/install_on_debian) - * [On VirtualBox](/install_on_virtualbox) -* Finalizing your setup - * [Post-installation](/postinstall) - * [Configuring port forwarding](/isp_box_config) - * [Configuring DNS records](/dns_config) - * [Installing an SSL certificate](/certificate) - * [Diagnose if your setup is working properly](/diagnostic) -* Getting to know YunoHost - * [Overview of YunoHost](/overview) - * [General advices and guidelines](/guidelines) - * [Web administration interface](/admin) - * [SSH](/ssh) and [command-line administration](/commandline) - * [Users and the SSO](/users) - * [Groups and permissions](/groups_and_permissions) - * [Applications](/apps_overview) - * [Domains, DNS and certificates](/domains) - * [Email](/email) - * [Forms to remove its IP address from the black lists](/blacklist_forms) - * [XMPP](/XMPP) - * [Backup](/backup) - * [Updating the system](/update) and [apps](/app_update) - * [Security](/security) -* Going further - * [Specific apps documentations](/appsdoc) - * [Noho.st / nohost.me / ynh.fr domain names](/dns_nohost_me) - * [Exchange files with your server using a graphical interface](/filezilla) - * [Customize the appearance of the YunoHost portal](/theming) - * [Adding an external storage](/external_storage) - * [Migrating emails to YunoHost](/email_migration) - * [Hide services with Tor](/torhiddenservice) - * [A discussion about the advantages of using a VPN](/vpn_advantage) - * [(old) Jessie->Stretch migration procedure](jessie_stretch_migration) -* Troubleshooting - * [Changing the administration password](/change_admin_password) - * [Recover access to your server](/noaccess) - * [Unban IPs in iptables/fail2ban](/fail2ban) diff --git a/admindoc_de.md b/admindoc_de.md deleted file mode 100644 index ee77f645..00000000 --- a/admindoc_de.md +++ /dev/null @@ -1,45 +0,0 @@ -# Administrator-Dokumentation - -* Self-Hosting entdecken - * [Was ist Self-Hosting](/selfhosting) - * [Was ist YunoHost](/whatsyunohost) - * [Probiere YunoHost aus](/try) - * [Wie du selber hostest](howtohostyourself) - * [Wähle die Hardware](/hardware) - * [Über die Freundlichkeit von Internet-Service-Providern](/isp) -* [YunoHost installieren](/install) - * [Auf einem normalen Computer](/install_iso) - * [Auf einem eigenen oder virtuellen Server](/install_on_vps) - * [Auf einem Raspberry Pi](/install_on_raspberry) - * [Auf einem ARM-Board](/install_on_arm_board) - * [Auf Debian](/install_on_debian) - * [Auf VirtualBox](/install_on_virtualbox) -* Setup abschließen - * [Nach der Installation](/postinstall) - * [Port-Forwarding konfigurieren](/isp_box_config) - * [DNS-Einträge konfigurieren](/dns_config) - * [SSL-Zertifikate installieren](/certificate) - * [Diagnostiziere deine Installation](/diagnostic) -* YunoHost kennenlernen - * [Übersicht über YunoHost](/overview) - * [Allgemeine Hinweise und Hilfestellungen](/guidelines) - * [Web-Administrations-Interface](/admin) - * [SSH](/ssh) and [command-line administration](/commandline) - * [Benutzer und SSO (Single-Sign-On)](/users) - * [Applicationen](/apps_overview) - * [Domains, DNS und Zertifikate](/domains) - * [E-Mail](/email) - * [XMPP](/XMPP) - * [Datensicherung](/backup) - * [System-Update](/update) and [apps](/app_update) - * [Sicherheit](/security) -* Weiteres - * [Noho.st / nohost.me / ynh.fr Domain-Namen](/dns_nohost_me) - * [Grafischer Dateiaustausch mit deinem Server](/filezilla) - * [Passe das Aussehen vom Yunohost-Portal an](/theming) - * [Für externen Speicher hinzu](/external_storage) - * [Migriere E-Mails zu Yunohost](/email_migration) - * [Verstecke Services mit Tor](/torhiddenservice) -* Hinweise zur Fehlersuche - * [Entsperren von IPs in fail2ban](/fail2ban) - * [Administrator-Passwort ändern](/change_admin_password) diff --git a/admindoc_fr.md b/admindoc_fr.md deleted file mode 100644 index 8b76abd5..00000000 --- a/admindoc_fr.md +++ /dev/null @@ -1,62 +0,0 @@ -# Documentation pour les administrateurs YunoHost - -* Découvrir l'auto-hébergement - * [Qu'est-ce que l'auto-hébergement](/selfhosting) - * [Qu'est-ce que YunoHost](/whatsyunohost) - * [Essayer YunoHost](/try) - * [Choisir son mode d'hébergement](/howtohostyourself) - * [Matériel compatible](/hardware) - * [À propos des fournisseurs d'accès internet](/isp) -* [Guide d’installation](/install) - * [Sur un ordinateur "standard"](/install_iso) - * [Sur un serveur dédié ou virtuel (VPS)](/install_on_vps) - * [Sur un Raspberry Pi](/install_on_raspberry) - * [Sur une carte ARM](/install_on_arm_board) - * [Sur Debian](/install_on_debian) - * [Sur VirtualBox](/install_on_virtualbox) -* Finaliser son installation - * [Post-installation](/postinstall) - * [Configurer les redirections de port](/isp_box_config) - * [Configurer les enregistrements DNS](/dns_config) - * [Installer un certificat SSL](/certificate) - * [Diagnostic du bon fonctionnement du YunoHost](/diagnostic) -* Apprendre à connaitre YunoHost - * [Vue d'ensemble de YunoHost](/overview) - * [Conseil généraux](/guidelines) - * [L'interface d'administration web](/admin) - * [SSH](/ssh) et [l'administration en ligne de commande](/commandline) - * [Les utilisateurs et le SSO](/users) - * [Les groupes et les permissions](/groups_and_permissions) - * [Les applications](/apps_overview) - * [Les domaines, la configuration DNS et les certificats](/domains) - * [Les emails](/email) - * [Formulaires pour enlever son adresse IP des listes noires](/blacklist_forms) - * [XMPP](/XMPP) - * [Les sauvegardes](/backup) - * [Mettre à jour le système](/update) et [les applications](/app_update) - * [La sécurité](/security) -* Pour aller plus loin - * Noms de domaine - * [Nom de domaine en noho.st / nohost.me / ynh.fr](/dns_nohost_me) - * [Configurer un DNS dynamique avec une adresse IP dynamique](/dns_dynamicip) - * [DNS et installation d’une application sur un sous-domaine](/dns_subdomains) - * [Utiliser le résolveur DNS local](/dns_resolver) - * [Gérer les enregistrements DNS chez OVH](/OVH) - * Notes à propos de certains fournisseurs d'accès à Internet - * [SFR](/isp_sfr) - * [Orange](/isp_orange) - * [Free](/isp_free) - * [Documentation spécifique à certaines apps](/appsdoc) - * [Equivalence entre service framasoft et apps](/apps_framasoft) - * [Échanger des fichiers avec son serveur à l'aide d'une interface graphique](/filezilla) - * [Modifier l'apparence du portail utilisateur](/theming) - * [Ajouter un stockage externe](/external_storage) - * [Migrer ses emails vers YunoHost](/email_migration) - * [YunoHost avec un service caché Tor](/torhiddenservice) - * [Utilisation de certificats autres que Let's Encrypt](/certificate_custom) - * [Une discussion sur les avantages d'utiliser un VPN](/vpn_advantage) - * [(vieux) Procedure de Migration Jessie->Stretch](jessie_stretch_migration) -* Dépannage - * [Changer le mot de passe d’administration](/change_admin_password) - * [Récupérer l'accès à son serveur](/noaccess) - * [Débannir une IP dans Fail2ban/IPtables](/fail2ban) diff --git a/app_baikal.md b/app_baikal.md deleted file mode 100644 index 495e5535..00000000 --- a/app_baikal.md +++ /dev/null @@ -1,53 +0,0 @@ -#Baïkal - -Baïkal is a server for calendars and address book, which used CalDav and CardDav protocol. Baïkal can be synced with a lot of client like Thunderbird + Lightning. - -**WARNING**: Baikal will not work if you have installed a **Nextcloud** ( their cardav/caldav functions conflict). - -### Web admin connection -In SSO portal, click on "Baïkal", a link lead to a web page showing a message saying that the service is running. To acces the admin web page, add `/admin` to the URL. For example: - -https://domain.org/baikal/admin - -The user name specified is "admin" followed by the specific password choosen at Baïkal installation procedure. Please note, the password should not contain special characters. - -### Example of creating a new user: - -Add users to the "Users and resources" tab. - -## CalDAV Connection - -### Connection with Thunderbird + Lightning - -Add a new agenda with type "Network" and "CalDAV" - -The new URL to add is : - -https://domain.org/baikal/cal.php/calendars/username/default - -Be careful to replace "domain.org" by your own domain and the "username" by your user name. - -### Connection to AgenDAV - -AgenDAV is a web client for using your calendars. It's packaged for Yunohost and you can used it after installing Baïkal. - -AgenDAV is already connected to Baïkal, any other configuration is necessary. If you create a new entry in Thunderbird + Lightning calendar, refresh your AgenDAV page is enough to see your modifications. - -AgenDAV also allows you to create a new calendars very easily. - -## CardDAV Connection -### Roundcube Connection - -Add new adressbook by navigating to Parameters > Preferences > CardDAV. - -Make sure it is filled with: -* Addressbook name: `default` -* Username: `username` -* Password: `thePasswordAssociatedToUsername` -* URL : `https://example.com/baikal/card.php/addressbooks/username/default` - -* Make sure to replace "example.com" with your domain and "username" with your username* - -Save. - -Now, the adressbook is accessible. diff --git a/app_baikal_fr.md b/app_baikal_fr.md deleted file mode 100644 index 49fdb2ed..00000000 --- a/app_baikal_fr.md +++ /dev/null @@ -1,55 +0,0 @@ -#Baïkal - -Baïkal est un serveur de calendriers et de contacts accessible par les protocoles CalDAV (calendriers) et CardDAV (carnets d’adresses), autorisant ainsi la synchronisation avec de nombreux clients (Thunderbird + Lightning par exemple). - -**AVERTISSEMENT** : Baikal ne fonctionnera pas si vous avez installé un **Nextcloud** ( leurs fonctions cardav/caldav entrent en conflit). - -## Connexion à l’interface d’admin -Sur le portail SSO, si on clique sur la tuile « Baïkal », on tombe sur une page bien peu conviviale qui explique que le service fonctionne. Pour accéder à l’admin, il faut rajouter `/admin`. Par exemple : - -https://example.com/baikal/admin - -Le nom d’utilisateur à spécifier est « admin » suivi du mot de passe spécifique que vous avez choisi lors de l’installation de Baïkal. Attention, le mot de passe ne doit pas contenir de carractères spéciaux. - -### Exemple de création d'un nouvel utilisateur : - -Aller dans l'onglet « settings », sélectionner « Digest » dans « WebDAV authentication type ». -Ajouter les utilisateurs dans l'onglet « Users and resources ». - -## Connexion CalDAV - -### Connexion de Thunderbird + Lightning - -Ajoutez un nouvel agenda de type « Réseau » puis « CalDAV ». - -L’URL à entrer est la suivante : - -`https://example.com/baikal/cal.php/calendars/username/default` - -*En prenant soin de remplacer « example.com » par votre domaine puis « username » par votre nom d’utilisateur* - -### Connexion de AgenDAV - -AgenDAV est un client web permettant de manipuler vos calendriers. Il est packagé pour YunoHost et vous pouvez donc l’installer juste après avoir installé Baïkal. - -AgenDAV est déjà connecté à Baïkal, aucune manipulation n’est nécessaire. Si vous créez une entrée dans le calendrier Thunderbird + Lightning, il vous suffit d’actualiser votre page AgenDAV pour voir les modifications apparaître. - -AgenDAV vous permet également de créer de nouveaux calendriers très simplement. - -##Connexion CardDAV - -### Connexion de Roundcube - -Ajoutez un nouveau carnet d’adresses en allant dans Paramètres > Préférences > CardDAV. - -Renseigner : -* Nom du carnet d’adresses : `default` -* Nom d’utilisateur : `username` -* Mot de passe : `leMotDePasseAssociéAUusername` -* URL : `https://example.com/baikal/card.php/addressbooks/username/default` - -*En prenant soin de remplacer « example.com » par votre domaine et « username » par votre nom d’utilisateur* - -Enregistrer - -Le carnet d’adresses est maintenant accessible. diff --git a/app_blogotext.md b/app_blogotext.md deleted file mode 100644 index d60c73f9..00000000 --- a/app_blogotext.md +++ /dev/null @@ -1,11 +0,0 @@ -#BlogoText - -This is BlogoText, the lightweight SQLite Blog-Engine. -Features - - * Blog with comments and RSS feeds - * Links sharing - * RSS Reader - * Images/Files uploading and sharing - * JSON/ZIP/HTML import-export; WordPress import - * Support Addons diff --git a/app_blogotext_fr.md b/app_blogotext_fr.md deleted file mode 100644 index 00aa4782..00000000 --- a/app_blogotext_fr.md +++ /dev/null @@ -1,11 +0,0 @@ -#BlogoText - -Ceci est BlogoText, un moteur de blog léger. -Caractéristiques - - * Blog avec commentaires et flux RSS - * Partage de liens - * Lecteur RSS - * Téléversement et partage d'images/fichiers - * import-export au format JSON/ZIP/HTML; import WordPress - * Support Addons diff --git a/app_collaboradocker.md b/app_collaboradocker.md deleted file mode 100644 index 504fe174..00000000 --- a/app_collaboradocker.md +++ /dev/null @@ -1,28 +0,0 @@ -# Install Collabora with Nextcloud, using Docker -**Note :** This walkthrough is based on a Debian 8 instance, and has not been tested since version 3 upgrade of Yunohost. As a prerequisite, you must have configured your domains and sub-domains in the DNS, in compliance with : [DNS](/dns), [Sub-domain install of an app](/dns_subdomains), [DNS settings](/dns_config) and [noho.st / nohost.me / ynh.fr domains](/dns_nohost_me)). - -### 0. Install Nextcloud - -If Nextcloud is not already installed on your Yunohost instance, you may do so with this link : [Install Nextcloud](https://install-app.yunohost.org/?app=nextcloud) - -### 1. Install Collabora app within yunohost -**In the admin interface :** - -Applications > Install > at the bottom _Install a custom application_ > enter this url « https://github.com/aymhce/collaboradocker_ynh » > Enter the domain/subdomain name you wish for the Collabora application. - -### 2. Configuration within Nextcloud - - **Add the Collabora Online application in Nextcloud :** - -Click on the user icon (top right) > Applications > Desktop & Text > Under the « Collabora Online » tile, click on `Activate` . - -**Setup Collabora in Nextcloud :** - -Click on the user icon (top right) > Parametres > Under _Administration_, _Collabora Online_ . -Specify the « Online Collabora server » with the domain name chosen during the collabora install in Yunohost (full with « https:// »). - -### 3. Reboot -To allow all the pieces to work, system must be reboot. You can do so through the admin interface (Tools > Stop/reboot > `Reboot`) or via the command line interface : ``sudo reboot now``. - -## Debugging -Following some system, Yunohost or app updates, Collabora may display an error message such as "It's embarrassing...". To put things back in order, you just have to restart the docker machine, with the command ``systemctl restart docker``. diff --git a/app_dokuwiki.md b/app_dokuwiki.md deleted file mode 100644 index 84c2bc9b..00000000 --- a/app_dokuwiki.md +++ /dev/null @@ -1,13 +0,0 @@ -DokuWiki -======== - -Homepage: https://dokuwiki.org - -DokuWiki is a wiki application licensed under GPLv2 and written in the PHP programming language. It works on plain text files and thus does not need a database. Its syntax is similar to the one used by MediaWiki.More at Wikipedia - -Developer(s):Andreas Gohr, et al. - -Operating system:Cross-platform -Platform:PHP - -License:GNU General Public License diff --git a/app_dokuwiki_de.md b/app_dokuwiki_de.md deleted file mode 100644 index 9f997374..00000000 --- a/app_dokuwiki_de.md +++ /dev/null @@ -1,13 +0,0 @@ -#New DokuWiki -======== - -Homepage: https://dokuwiki.org - -DokuWiki ist eine Wiki Anwendung, lizensiert unter der GPLv2, geschrieben in der PHP Programmsprache, arbeitet mit einfachen Textdateien und braucht deshalb keine Datenbank. Die Syntax ähnelt der von Mediawiki. Mehr in der Wikipedia. - -Entwickler: Andreas Gohr, et al. - -Betriebssystem: Cross-platform -Plattform:PHP - -Lizenz: GNU General Public License diff --git a/app_ffsync.md b/app_ffsync.md deleted file mode 100644 index eba9979f..00000000 --- a/app_ffsync.md +++ /dev/null @@ -1,15 +0,0 @@ -# Firefox Sync -Firefox Sync permits synchronize plugins, tabs, bookmarks, favorites, history over many Firefox instances. - -### Firefox configuration -#### Firefox desktop -In Firefox URL bar put: `about:config`. - -Search for: `identity.sync.tokenserver.uri`. - -Replace the URL by: https://mydomain.tld/path/token/1.0/sync/1.5 - -Create an account at Mozilla: https://accounts.firefox.com/signup - -#### Firefox mobile -With the last version of firefox mobile it's same than for desktop. diff --git a/app_ffsync_fr.md b/app_ffsync_fr.md deleted file mode 100644 index 10eec07e..00000000 --- a/app_ffsync_fr.md +++ /dev/null @@ -1,17 +0,0 @@ -# Firefox Sync -Firefox Sync permet la synchronisation des favoris, des marques-pages, de l’historique, des onglets, des extensions entre plusieurs instances du navigateur web Firefox. - -### Configuration de Firefox -Configurer Firefox pour utiliser votre serveur pour la synchronisation. - -#### Firefox bureau -Tapez `about:config` dans la barre d’URL. - -Recherchez : `identity.sync.tokenserver.uri`. - -Remplacez l’URL par la vôtre : https://mondomaine.tld/adresse/token/1.0/sync/1.5 - -Créez un compte chez Mozilla : https://accounts.firefox.com/signup - -#### Firefox mobile -Avec la dernière version de firefox mobile c'est identique à firefox pour le bureau. diff --git a/app_firefly_iii.md b/app_firefly_iii.md deleted file mode 100644 index 389b8688..00000000 --- a/app_firefly_iii.md +++ /dev/null @@ -1,6 +0,0 @@ -# Firefly III - -For support and notes regarding the installation and use of Firefly III on YunoHost, please see these pages: - -* [The official documentation](http://firefly-iii.readthedocs.io/en/latest/) -* [The pages on YunoHost specifically](http://firefly-iii.readthedocs.io/en/latest/installation/yunohost.html) diff --git a/app_fluxbb.md b/app_fluxbb.md deleted file mode 100644 index 01ad77cc..00000000 --- a/app_fluxbb.md +++ /dev/null @@ -1,7 +0,0 @@ -#FluxBB - -FluxBB is fast, light, user-friendly forum software for your website. - -FluxBB is designed as a lighter, faster alternative to some of the traditional feature heavy forum applications. It is easy to use and has a proven track record of stability and security making it an ideal choice of forum for your website. - -[Website](https://fluxbb.org/) \ No newline at end of file diff --git a/app_fluxbb_fr.md b/app_fluxbb_fr.md deleted file mode 100644 index 2c20f2ae..00000000 --- a/app_fluxbb_fr.md +++ /dev/null @@ -1,5 +0,0 @@ -#FluxBB - -FluxBB est un forum de discussions écrit en PHP rapide et léger. - -[Site internet](https://fluxbb.org/) \ No newline at end of file diff --git a/app_gogs.md b/app_gogs.md deleted file mode 100644 index f2ee0bed..00000000 --- a/app_gogs.md +++ /dev/null @@ -1 +0,0 @@ -Unfortunately, this page only exists [in french here](app_gogs_fr) for now. diff --git a/app_gogs_fr.md b/app_gogs_fr.md deleted file mode 100644 index f793243e..00000000 --- a/app_gogs_fr.md +++ /dev/null @@ -1,12 +0,0 @@ -#  Gogs - -[](https://install-app.yunohost.org/?app=gogs) - -Gogs est une forge logiciel minimaliste utilisant git. Gogs a été conçu pour pouvoir fonctionner de manières optimale sur du matériel peu puissant type Raspberry Pi. -Il est donc adapté à l'auto-hébergement d'une forge git. -Pour utiliser pleinement la puissance de gogs vous devez avoir appréhender ce qu'est git et l'utilisation d'un [logiciel de gestion de versions](https://fr.wikipedia.org/wiki/Logiciel_de_gestion_de_versions). - -## Liens utiles - - [Site Officiel - gogs.io](https://gogs.io) - - [Dépot applications gogs pour YunoHost](https://github.com/YunoHost-Apps/gogs_ynh) - - [Site officiel de l'outils git - git-scm.com](https://git-scm.com/) diff --git a/app_hextris.md b/app_hextris.md deleted file mode 100644 index b938caed..00000000 --- a/app_hextris.md +++ /dev/null @@ -1,4 +0,0 @@ -#Hextris - -Because sometimes you have to know how to relax. Host your own fork of the famous Tetris and become the master of this infernal hexagon. -Who will tame this infernal hexagon? \ No newline at end of file diff --git a/app_hextris_fr.md b/app_hextris_fr.md deleted file mode 100644 index 3ed6c3e9..00000000 --- a/app_hextris_fr.md +++ /dev/null @@ -1,4 +0,0 @@ -#Hextris - -Car parfois il faut savoir se détendre. Hébergez votre propre fork du célèbre Tetris et devenez le maitre de cet hexagone infernal. -Qui domptera cet hexagone infernal ? \ No newline at end of file diff --git a/app_jappix.md b/app_jappix.md deleted file mode 100644 index 1b472707..00000000 --- a/app_jappix.md +++ /dev/null @@ -1,3 +0,0 @@ -#<img src="/images/jappix.png">Jappix - -Jappix is a web client for [XMPP](/XMPP). diff --git a/app_jappix_fr.md b/app_jappix_fr.md deleted file mode 100644 index aa044fe2..00000000 --- a/app_jappix_fr.md +++ /dev/null @@ -1,3 +0,0 @@ -#<img src="/images/jappix.png">Jappix - -Jappix est un client web [XMPP](/XMPP). diff --git a/app_limesurvey.md b/app_limesurvey.md deleted file mode 100644 index dbc94cd7..00000000 --- a/app_limesurvey.md +++ /dev/null @@ -1,12 +0,0 @@ -#<img src="/images/limesurvey.png">LimeSurvey - -LimeSurvey is used to create advanced poll/form. - -### How to create a poll -You need to access the admin interfaces. - -You can do it by adding /admin to the web address where the LimeSurvey is setup. - -For example, if it is install on : https://example.org/poll/ you can access it on https://example.org/poll/admin/ - -* [LimeSurvey Website](https://www.limesurvey.org/) diff --git a/app_limesurvey_fr.md b/app_limesurvey_fr.md deleted file mode 100644 index 18f8e909..00000000 --- a/app_limesurvey_fr.md +++ /dev/null @@ -1,12 +0,0 @@ -#<img src="/images/limesurvey.png">LimeSurvey - -LimeSurvey est un outil de création et diffusion de sondage/formulaire en ligne. - -### Comment créer un questionnaire -Pour créer un questionnaire, il faut accéder à l'interface d'administration. - -Pour l'atteindre, il faut ajouter /admin à l'adresse web sur laquelle est installée le LimeSurvey. - -Par exemple, si le LimeSurvey est installé sur https://example.org/poll/ il est possible d'accéder à l'interface d'administration via https://example.org/poll/admin/ - -* [LimeSurvey Website](https://www.limesurvey.org/) diff --git a/app_mediawiki.md b/app_mediawiki.md deleted file mode 100644 index ae080898..00000000 --- a/app_mediawiki.md +++ /dev/null @@ -1,15 +0,0 @@ -# Mediawiki - - - -MediaWiki is a free and open source software wiki package written in PHP, originally for use on Wikipedia. - -## Overview - - - -## Link - -Mediawiki : https://www.mediawiki.org/ -FAQ : https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ -Support Desk : https://www.mediawiki.org/wiki/Project:Support_desk \ No newline at end of file diff --git a/app_mediawiki_fr.md b/app_mediawiki_fr.md deleted file mode 100644 index 93e9c0e0..00000000 --- a/app_mediawiki_fr.md +++ /dev/null @@ -1,15 +0,0 @@ -# Mediawiki - - - -MediaWiki est un ensemble wiki à base de logiciels libres Open source, développé à l’origine pour Wikipédia. - -## Aperçu - - - -## Liens - -Mediawiki : https://www.mediawiki.org/ -FAQ : https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ -Support Desk : https://www.mediawiki.org/wiki/Project:Support_desk \ No newline at end of file diff --git a/app_minidlna.md b/app_minidlna.md deleted file mode 100644 index cd17abcf..00000000 --- a/app_minidlna.md +++ /dev/null @@ -1,25 +0,0 @@ -# Minidlna - -Minidlna is a lightweight [dlna](https://fr.wikipedia.org/wiki/Digital_Living_Network_Alliance) server. -It allows to easily share multimedia files with any compatible devices present on the LAN. - -Minidlna does not have a graphical interface, but it does not require any special configuration. - -### What multimedia files are shared? -Minidlna sharing the folder `/home/yunohost.multimedia/share`, which is common to each user in `/home/$USER/Multimedia/Share`. -[More information about multimedia files here.](Https://github.com/maniackcrudelis/yunohost.multimedia) - -~~If [transmission](https://github.com/Kloadut/transmission_ynh) is installed, the downloaded media will be available in dlna.~~ - -### How to view and play media files shared by minidlna? -To view and play media files, all you need is a compatible client DLNA/UPNP. - -The majority of set-top boxes provided by ISPs are DLNA compatible, simply look for sources of external media. -This is also true for the latest generation game consoles connected to internet. - -Some TV and blu-ray player is also DLNA compatible. - -In any case, it is generally sufficient to seek external sources, USB etc, to find the DLNA server, displayed under the name **YunoHost DLNA**. - -There are a multitude of DLNA client for all platforms, including the following [not exhaustive list](https://en.wikipedia.org/wiki/List_of_UPnP_AV_media_servers_and_clients#UPnP_AV_clients). -In general, a DLNA client does not require any special configuration to access the media sharing. diff --git a/app_minidlna_fr.md b/app_minidlna_fr.md deleted file mode 100644 index da1dee36..00000000 --- a/app_minidlna_fr.md +++ /dev/null @@ -1,25 +0,0 @@ -# Minidlna - -Minidlna est un serveur [dlna](https://fr.wikipedia.org/wiki/Digital_Living_Network_Alliance) ultra léger. -Il permet de partager très simplement les fichiers multimédias avec tous les appareils compatibles présents sur le réseau local. - -Minidlna ne dispose pas d’une interface graphique, mais ne nécessite pas de configuration particulière. - -### Quels fichiers multimédias sont partagés ? -Minidlna partage le dossier `/home/yunohost.multimedia/share`, qui est commun à chaque utilisateur dans le dossier `/home/$USER/Multimedia/Share`. -[Plus d’informations sur les dossiers multimédias](https://github.com/maniackcrudelis/yunohost.multimedia). - -~~Si [transmission](https://github.com/Kloadut/transmission_ynh) est installé, les médias téléchargés seront disponibles en dlna.~~ - -### Comment consulter et lire les fichiers multimédias partagés par minidlna ? -Pour voir et lire les fichiers multimédias, il suffit de disposer d’un client compatible DLNA/UPNP. - -La majorité des décodeurs TV fournis par les FAI sont compatibles DLNA, il suffit de chercher les sources de médias externes. -C’est le cas également pour les consoles de jeux dernière génération connectée à internet. - -Certaines TV et lecteur blu-ray sont également compatibles DLNA. - -Dans tous les cas, il suffit en général d’aller chercher les sources externes, USB etc., pour trouver le serveur DLNA, affiché sous le nom **YunoHost DLNA**. - -Il existe une multitude de clients DLNA pour toutes les plateformes, dont voici une [liste non exhaustive](https://en.wikipedia.org/wiki/List_of_UPnP_AV_media_servers_and_clients#UPnP_AV_clients). -De manière générale, un client DLNA ne nécessite pas de configuration particulière pour accéder au partage de fichiers multimédias. diff --git a/app_nextcloud_calendar.md b/app_nextcloud_calendar.md deleted file mode 120000 index 7800f978..00000000 --- a/app_nextcloud_calendar.md +++ /dev/null @@ -1 +0,0 @@ -default.md \ No newline at end of file diff --git a/app_nextcloud_carnet.md b/app_nextcloud_carnet.md deleted file mode 120000 index 7800f978..00000000 --- a/app_nextcloud_carnet.md +++ /dev/null @@ -1 +0,0 @@ -default.md \ No newline at end of file diff --git a/app_nextcloud_contact.md b/app_nextcloud_contact.md deleted file mode 120000 index 7800f978..00000000 --- a/app_nextcloud_contact.md +++ /dev/null @@ -1 +0,0 @@ -default.md \ No newline at end of file diff --git a/app_peertube.md b/app_peertube.md deleted file mode 100644 index 77984f62..00000000 --- a/app_peertube.md +++ /dev/null @@ -1,3 +0,0 @@ -# Peertube - -PeerTube is a federated (ActivityPub) video streaming platform using P2P (BitTorrent) directly in the web browser, using WebTorrent. \ No newline at end of file diff --git a/app_peertube_fr.md b/app_peertube_fr.md deleted file mode 100644 index e45454cd..00000000 --- a/app_peertube_fr.md +++ /dev/null @@ -1,16 +0,0 @@ -# <img src="/images/peertube_logo.png" alt="Logo de PeerTube"> PeerTube - -[](https://install-app.yunohost.org/?app=peertube) - -PeerTube est une plateforme de streaming vidéo fédérée (ActivityPub) utilisant P2P (BitTorrent) directement dans le navigateur web, en utilisant WebTorrent. - -## Découverte de l'environnement de PeerTube - -Pour comprendre en quoi PeerTube propose une alternative à youtube, vous êtes invité à regarder le clip réalisé par l'association Framasoft (ci-dessous). Elle est elle même hébergé sur [framatube.org](https://framatube.org) - -<iframe width="560" height="315" sandbox="allow-same-origin allow-scripts" src="https://framatube.org/videos/embed/9db9f3f1-9b54-44ed-9e91-461d262d2205" frameborder="0" allowfullscreen></iframe> - -## Quelques liens utiles - - - Site officiel de PeerTube - [joinpeertube.org](https://joinpeertube.org/fr/) - - Dépot application PeerTube Yunohost - [github.com/YunoHost-Apps/peertube_ynh](https://github.com/YunoHost-Apps/peertube_ynh) diff --git a/app_pihole.md b/app_pihole.md deleted file mode 100644 index 86ede826..00000000 --- a/app_pihole.md +++ /dev/null @@ -1,5 +0,0 @@ -===== Pihole ===== - -Homepage: https://pi-hole.net - -**Pi-hole®** Network-wide ad blocking via your own DNS server, with nice Performance And Statistics web page. diff --git a/app_pihole_fr.md b/app_pihole_fr.md deleted file mode 100644 index 4d2dbc39..00000000 --- a/app_pihole_fr.md +++ /dev/null @@ -1,5 +0,0 @@ -# Pihole - -Page d'accueil : https://pi-hole.net - -**Pi-hole®** Blocage des publicités à l'échelle du réseau via votre propre serveur DNS, avec une belle page web Performance And Statistics. \ No newline at end of file diff --git a/app_piwigo.md b/app_piwigo.md deleted file mode 100644 index 0ed09045..00000000 --- a/app_piwigo.md +++ /dev/null @@ -1,32 +0,0 @@ -## <img src="https://yunohost.org/images/piwigo.png"> - - - - -[Piwigo](http://piwigo.org) is a photo gallery software for the web, built by an active community of users and developers. - -Extensions make Piwigo easily customizable. Icing on the cake, Piwigo is free and opensource. - -[](https://install-app.yunohost.org/?app=piwigo) - - - -## Features - -In addition to Piwigo [core features](http://piwigo.org/basics/features), the following are made available with -this package: - - * Integrate with YunoHost users and SSO: - * private mode: limit access to Yunohost users - * public mode: - * SSO for YunoHost users - * allow other users management, and guest mode - * Allow one YunoHost user to be the administrator (set at the installation) - - -## Links - - * Report a bug: https://github.com/YunoHost-Apps/piwigo_ynh/issues - * Piwigo website: http://piwigo.org/ - - diff --git a/app_piwigo_fr.md b/app_piwigo_fr.md deleted file mode 100644 index 1c5b704a..00000000 --- a/app_piwigo_fr.md +++ /dev/null @@ -1,30 +0,0 @@ -## <img src="https://yunohost.org/images/piwigo.png"> - - - - -[Piwigo](http://piwigo.org) est un logiciel de galerie photo pour le web, bâti par une communauté active d'utilisateurs et de développeurs. - -Les extensions rendent Piwigo facilement personnalisable. Cerise sur le gâteau, Piwigo est libre et gratuit. - -[](https://install-app.yunohost.org/?app=piwigo) - - - -## Fonctionnalités - -En plus des [fonctionnalités principales](http://piwigo.org/basics/features) de Piwigo, ce paquet propose également: - - * une intégration avec le système de gestion des utilisateurs et le SSO de Yunohost : - * installation privée : limitée aux utilisateurs de YunoHost - * installation publique : - * SSO pour les utilisateurs YunoHost - * permet de gérer l'accès à d'autres utilisateurs, et mode invité possible - * de permettre à un utilisateur d'être administrateur (réglage lors de l'installation) - -## Liens - - * Rapport de bug: https://github.com/YunoHost-Apps/piwigo_ynh/issues - * Site web Piwigo : http://piwigo.org/ - - diff --git a/app_pleroma.md b/app_pleroma.md deleted file mode 100644 index 595e2038..00000000 --- a/app_pleroma.md +++ /dev/null @@ -1 +0,0 @@ -Unfortunately, this page only exists [in french here](app_pleroma_fr) for now. diff --git a/app_rainloop.md b/app_rainloop.md deleted file mode 100644 index 1e33f67d..00000000 --- a/app_rainloop.md +++ /dev/null @@ -1,19 +0,0 @@ -# Rainloop - -Rainloop is a lightweight webmail. - -To configure it, go to http://DOMAIN.TLD/rainloop/app/?admin - -- The default login is : admin -- The default password is : Password chosen during install -- If you lost the admin password, you can retrieve it using ``sudo yunohost app settings rainloop password`` - -Each user can add a remote carddav server from their own parameters interface. - -- If you use baikal, the CardDav address is: https://DOMAIN.TLD/baikal/card.php/addressbooks/USER/default/ -- If you use NextCloud, the CardDav address is: https://DOMAIN.TLD/nextcloud/remote.php/carddav/addressbooks/USER/contacts - -Rainloop saves your PGP private keys in the browser storage. This means that you will loose your private keys if you clear your browser storage (e.g., private browsing, different computer...). This packages integrates [PGPback by chtixof](https://github.com/chtixof/pgpback_ynh) so you can store your PGP private keys on the server securely. Go to **http://DOMAIN.TLD/rainloop/pgpback** to backup your PGP keys on the server or restore them. - -To upgrade the app once a new rainloop version is available, simply run in a local shell via ssh or otherwise : -``sudo yunohost app upgrade -u https://github.com/YunoHost-Apps/rainloop_ynh rainloop`` diff --git a/app_rainloop_fr.md b/app_rainloop_fr.md deleted file mode 100644 index 7229c4e6..00000000 --- a/app_rainloop_fr.md +++ /dev/null @@ -1,25 +0,0 @@ -# Rainloop - -Rainloop est un webmail simple et léger. - -Pour le configurer après l'installation, veuillez vous rendre sur http://DOMAIN.TLD/rainloop/app/?admin - -- Le nom d'utilisateur admin par défaut est : admin -- Le mot de passe admin par défaut est : Mot de passe choisi lors de l'installation -- Si vous avez oublié votre mot de passe, vous pouvez le retrouver avec ``sudo yunohost app settings rainloop password`` - -## Carnet d'adresses -Rainloop intègre par défaut un carnet d'adresse avec les utilisateurs du serveur yunohost. Chaque utilisateur peut ajouter un carnet d'adresse distant CardDav via leurs propres paramètres. -- Si vous utilisez Baikal, l'adresse à renseigner est du type : https://DOMAIN.TLD/baikal/card.php/addressbooks/UTILISATEUR/default/ -- Si vous utilisez NextCloud, l'adresse à renseigner est du type : https://DOMAIN.TLD/nextcloud/remote.php/carddav/addressbooks/USER/contacts - -## Gestion des domaines -Les utilisateurs peuvent se servir de Rainloop pour accéder à d'autres boites mail que celle fournie par yunohost (par exemple gmail.com ou laposte.net). L'option est disponible par le bouton "compte -> ajouter un compte". -L'administrateur doit pour cela autoriser la connexion à des domaines tiers, via une liste blanche dans l'interface administration. - -## Gestion des clés PGP -Rainloop stocke les clés PGP privées dans le stockage de navigateur. Cela implique que vos clés seront perdues quand vous videz le stockage de navigateur (navigation incognito, changement d'ordinateur, ...). Ce paquet intègre donc [PGPback de chtixof](https://github.com/chtixof/pgpback_ynh) pour que vous puissiez stocker vos clés privées PGP de manière sécurisée sur le serveur. Rendez-vous à l'adresse **http://DOMAIN.TLD/rainloop/pgpback** pour stocker vos clés privées PGP sur le serveur ou les restaurer dans un nouveau navigateur. - -## Mise à jour -Pour mettre à jour rainloop lorsqu'une nouvelle version est disponible, lancez en console locale (ssh ou autre) : -``sudo yunohost app upgrade -u https://github.com/YunoHost-Apps/rainloop_ynh rainloop`` diff --git a/app_roundcube.md b/app_roundcube.md deleted file mode 100644 index c38ae010..00000000 --- a/app_roundcube.md +++ /dev/null @@ -1,19 +0,0 @@ -#<img src="/images/roundcube.png">Roundcube - Webmail - -Roundcube is a web client for email messaging also called webmail. - -### Synchronize your contacts - -Roundcube offers you at the installation to synchronize your contacts with a CardDAV server, through a third party plugin. Using a CardDAV server like Baïkal or ownCloud's "Contacts" application, both available in YunoHost, allows you to centralize and manage your contacts. - -Similarly to IMAP that allows you to synchronize your emails with your mail server, CardDAV allows you to access your contacts through multiple clients, such as Roundcube. Thanks to CardDAV, you will not have to import your contacts in each of your devices. - -Note that addressbooks defined in Baïkal or ownCloud will be automatically added in Roundcube for each user if they are already installed. - ----- - -In case you've installed ownCloud after, here is how to add your addressbooks: - -* Go to "Contacts" section of your owncloud application and click on the gear wheel icon located at the bottom left. Then, click on "CardDAV link" and copy the URL that appeared. - -* Go to Roundcube's CardDAV section and type in "ownCloud" in "Label" field, paste the previously copied URL and type your username and password. Your contacts are now synchronized! diff --git a/app_roundcube_fr.md b/app_roundcube_fr.md deleted file mode 100644 index 7ef08451..00000000 --- a/app_roundcube_fr.md +++ /dev/null @@ -1,19 +0,0 @@ -#<img src="/images/roundcube.png">Roundcube - Webmail libre - -Roundcube est un client web de courrier électronique libre ou aussi appelé un webmail. - -### Synchronisation des contacts - -Roundcube vous propose à l'installation, via un greffon tiers, de pouvoir synchroniser vos contacts avec un serveur CardDAV. Utiliser un serveur CardDAV comme Baïkal ou l’application « Contacts » d’ownCloud, tous deux disponibles pour YunoHost, a l’avantage de permettre une gestion centralisée de vos contacts. - -De la même façon que le protocole IMAP vous permet de synchroniser vos courriels avec votre serveur mail, CardDAV vous permet d’avoir accès à vos contacts depuis une multitude de clients, dont Roundcube. Avec CardDAV, nous n’aurez donc plus besoin d’importer vos contacts dans chaque client. - -Notez que si Baïkal ou ownCloud sont déjà installés, les carnets d'adresses qui y sont définis seront automatiquement ajoutés pour chaque utilisateur dans Roundcube. - ----- - -Si vous avez installé ownCloud après, voici comment ajouter vos carnets d'adresses : - -* Rendez-vous dans la section « Contacts » de votre espace ownCloud et cliquez sur l’icône représentant une roue dentée en bas à gauche. Ensuite, cliquez sur l’icône « Lien CardDAV » et copiez l’URL qui s’affiche en dessous. - -* Rendez-vous ensuite dans la section CardDAV des paramètres de Roundcube et entrez « ownCloud » dans le champ « Label », collez l’URL que vous venez de copier et enfin entrez votre nom d’utilisateur et votre mot de passe. Vos contacts sont désormais synchronisés ! diff --git a/app_sogo.md b/app_sogo.md deleted file mode 100644 index 09a46e5f..00000000 --- a/app_sogo.md +++ /dev/null @@ -1 +0,0 @@ -Unfortunately, this page only exists [in french here](app_sogo_fr) for now. diff --git a/app_sogo_fr.md b/app_sogo_fr.md deleted file mode 100644 index 2ae3e848..00000000 --- a/app_sogo_fr.md +++ /dev/null @@ -1,8 +0,0 @@ -#  SOGo - -SOGo est un service de webmail pour votre serveur email, c'est une alternative à [RoundCube](app_roundcube). Il permet aussi la gestion des agendas et contacts présents sur le serveur. - -## Quelques liens utiles - - + Site officiel de SOGo : [sogo.nu](https://sogo.nu/a) - + Dépot de l'application pour Yunohost : [github.com/YunoHost-Apps/sogo_ynh](https://github.com/YunoHost-Apps/sogo_ynh) diff --git a/app_ttrss.md b/app_ttrss.md deleted file mode 100644 index 8ccedfa0..00000000 --- a/app_ttrss.md +++ /dev/null @@ -1,20 +0,0 @@ -# <img src="/images/ttrss.png">Tiny Tiny RSS - -Tiny Tiny RSS is a news feed reader using RSS and atom protocols. - -### Exporting/importing feeds -TTRSS allows you to save your feeds in opml format. -In order to do so, go to Actions -> Configuration -> feed tab -> OPML section -> Export/Import OPML. - -### Android Client - -You can read your feeds on Android using ttrss-reader application: - -**[ttrss-reader](https://f-droid.org/packages/org.ttrssreader/)** - -To use it, you need to go to Actions -> Configuration, in TTRSS web interface and select "Activate API". -Then, in your android ttrss-reader, fill the TTRSS server adress: "https://yourdomain.org/ttrss", username, password (no need to use HTTP authentification). - -**Note** : you may need to uninstall and reinstall the TTRSS application through the Yunohost admin panel in order to be able to connect. - -* [Tiny Tiny RSS Website](https://git.tt-rss.org/git/tt-rss/wiki) diff --git a/app_ttrss_fr.md b/app_ttrss_fr.md deleted file mode 100644 index be8b239c..00000000 --- a/app_ttrss_fr.md +++ /dev/null @@ -1,21 +0,0 @@ -# <img src="/images/ttrss.png">Tiny Tiny RSS - -Tiny Tiny RSS est un lecteur de flux d’actualité utilisant les protocoles RSS et atom. - -### Exportation/importation des flux -Il est possible de faire une sauvegarde de ces flux d’actualité en format opml. - -Pour cela, il faut aller dans Actions -> Configuration -> onglet flux -> chapitre OPML -> Exporter/Importer en OPML. - -### Client Android - -Il est possible d’utiliser le client Android ttrss-reader pour consulter ces flux : - -**[ttrss-reader](https://f-droid.org/packages/org.ttrssreader/)** - -Sur l’interface web, dans Actions -> Configuration, cochez « Activer l’accès par API » -puis dans ttrss-reader sur Android, l’adresse du serveur TTRSS : « https://votredomaine.org/ttrss », nom d’utilisateur, mot de passe. (pas besoin d’utiliser l’authentification HTTP) - -**Note** : vous pouvez avoir besoin de désinstaller, puis réinstaller entièrement l’app ttrss via l’administration de YunoHost pour que la connexion puisse se faire. - -* [Site de Tiny Tiny RSS](https://git.tt-rss.org/git/tt-rss/wiki) diff --git a/app_update.md b/app_update.md deleted file mode 100644 index da5a5b58..00000000 --- a/app_update.md +++ /dev/null @@ -1,38 +0,0 @@ -#Upgrade your applications - -Once you installed applications, you may need to upgrade them, sooner or later. - -** Caution: ** please be advised to backup your databases (using phpmyadmin application for example) and files before any upgrade. - -### Upgrade using the admin panel -Go to Tools > Update system - -Once the applications packages list is retrieved, you will be able to update official applications that have a pending upgrade. - -### Upgrade using command line -First, connect to your server through SSH and type in the following command (WordPress update): -```bash -yunohost app upgrade wordpress -``` -** Note: ** in case you have multiple instances of the same type (ex: 2 wordpress) installed, you will need to specify the instance name (ex: wordpress or wordpress__2). - -#### Upgrade an unofficial application -Specify the git repository containing the upgrade. - -For intance, to upgrade LimeSurvey: -```bash -yunohost app upgrade limesurvey -u https://github.com/zamentur/limesurvey_ynh -``` - -** Note: ** be cautious when installing unofficial applications and upgrades. Be sure that theses updates are stables and are not a step in the development process. There may be a good reason if an application is not listed in the official repository. - -** Caution: ** be sure to check the content of any update; installing or upgrading an unofficial application allows it to run scripts with the highest privileges. - -#### Command line options - -When upgrading apps from the command line, you can specify specific options to change the behaviour of the upgrade script. -To set those options, set the corresponding variable before the upgrade command: `sudo OPTION_TO_SET=1 yunohost app upgrade wordpress` - -Available options are: -- `NO_BACKUP_UPGRADE`: Do not perform the backup before the upgrade. Which means the upgrade will be operated without a security backup. -- `YNH_FORCE_UPGRADE`: Force the upgrade of the app and the package, even if the app is already up to date. diff --git a/app_update_fr.md b/app_update_fr.md deleted file mode 100644 index ee35db0b..00000000 --- a/app_update_fr.md +++ /dev/null @@ -1,39 +0,0 @@ -#Mettre à jour ses applications - -Une fois que vous avez installé des applications, il est nécessaire de les mettre à jour. Plusieurs méthodes existent et sont détaillées ci-dessous. - -** Attention : ** il est recommandé de faire une sauvegarde de la base de données (par exemple via l’application [phpmyadmin](https://github.com/YunoHost-apps/phpmyadmin_ynh) ([installer](https://install-app.yunohost.org/?app=phpmyadmin))) ainsi que des fichiers avant une opération de mise à jour. - -### Mise à jour par l’interface web -Pour cela, il faut aller dans l’onglet "Mettre à jour le système". - -Une fois la liste des paquets et des applications rafraîchie, il sera proposé de mettre à jour les applications et paquets qui peuvent l’être. - - -### Mise à jour en ligne de commande -Il faut d’abord se connecter sur le serveur en ssh, puis entrer la commande suivante (dans le cas d’une mise à jour WordPress) : -```bash -yunohost app upgrade wordpress -``` -** Note : ** dans le cas où plusieurs applications du même type (ex : deux WordPress) sont installées sur le serveur, il est nécessaire de spécifier le nom d’instance (ex : wordpress ou wordpress__2). - -#### Mise à jour d’une application non officielle -Il faut pour cela indiquer le dépôt git qui contient la mise à jour. - -Par exemple, pour mettre à jour LimeSurvey, entrer : -```bash -yunohost app upgrade limesurvey -u https://github.com/zamentur/limesurvey_ynh -``` - -** Note : ** faites attention aux applications/mises à jour non officielles que vous installez. Assurez-vous que ces mises à jour sont stables et ne constituent pas une étape de développement. Si une application ou une mise à jour n’est pas intégrée au dépôt officiel, il y a sûrement une raison. - -** Attention : ** assurez-vous du contenu de cette mise à jour ; l’installation ou la mise à jour d’une application non officielle permet à cette dernière d’exécuter des scripts avec les privilèges les plus élevés. Si le script est malicieux, il pourrait nuire à votre vie privée en communiquant à des tiers toute donnée présente sur le serveur, ou bien les détruire irrémédiablement. - -##### Options de ligne de commande - -Lorsque vous mettez à jour des applications à partir de la ligne de commande, vous pouvez spécifier des options spécifiques pour modifier le comportement du script d'upgrade. -Pour définir ces options, définissez la variable correspondante avant la commande d'upgrade: `sudo OPTION_TO_SET=1 yunohost app upgrade wordpress` - -Les options disponibles sont: -- `NO_BACKUP_UPGRADE`: Ne pas effectuer le backup avant la mise à jour. Ce qui veut dire que la mise à jour se fera sans sauvegarde de sécurité. -- `YNH_FORCE_UPGRADE`: Force la mise à jour de l'application et du package, même si l'application est déjà à jour. diff --git a/app_wallabag2.md b/app_wallabag2.md deleted file mode 100644 index 823bcd06..00000000 --- a/app_wallabag2.md +++ /dev/null @@ -1,33 +0,0 @@ -## <img src="https://yunohost.org/images/Logo-wallabag-svg.svg"> - -[Wallabag](https://www.wallabag.org/) is a self hostable Read-It-Later application allowing -you to not miss any content anymore. Click, save, read it when you can. -It extracts content so that you can read it when you have time. - -[](https://install-app.yunohost.org/?app=wallabag2) - -It provides a web interface, browser (Firefox / Chrome / Opera) add-ons, mobile apps (Android / iOS / Windows Phone) and even on e-reader (PocketBook / Kobo) - -### Features - -In addition to Wallabag core features, the following are made available with -this package: - - * Integrate with YunoHost users and SSO - i.e. logout button - * Allow one user to be the administrator (set at the installation) - * Asynchronous import using Redis (need to be enabled in the *Internal Settings*). RabbitMQ import not supported (yet ?) - -### Links - - * Report a bug: https://github.com/YunoHost-Apps/wallabag2_ynh/issues - * Wallabag website: https://www.wallabag.org/ - * Wallabag documentation: https://doc.wallabag.org/ (fr/en/it/de) - * [Video demo](https://vimeo.com/video/167435064) - ----- - -### Upgrade from v1.x - -No automatic upgrade process is available. You need a manual (but simple) migration from [Wallabag v1](https://github.com/YunoHost-Apps/wallabag_ynh). -Please take a look at the [official documentation](https://doc.wallabag.org/en/user/import/wallabagv1.html). diff --git a/app_wallabag2_fr.md b/app_wallabag2_fr.md deleted file mode 100644 index ba387f5c..00000000 --- a/app_wallabag2_fr.md +++ /dev/null @@ -1,30 +0,0 @@ -## <img src="https://yunohost.org/images/Logo-wallabag-svg.svg"> - - -[Wallabag](https://www.wallabag.org/) est une application de lecture différée : elle permet simplement d’archiver une page web en ne conservant que le contenu. Les éléments superflus (menus, publicités, etc.) sont supprimés. - -Sont disponibles: une interface web, des add-ons pour navigateurs (Firefox / Chrome / Opera), des applications pour mobile (Android / iOS / Windows Phone) et même sur liseuse (PocketBook / Kobo). - -[](https://install-app.yunohost.org/?app=wallabag2) - -### Fonctionnalités - -En plus des fonctionnalités principales de Wallabag, ce paquet propose également: - - * Une intégration avec le système de gestion des utilisateurs et le SSO de Yunohost - e.g. un bouton de déconnexion - * De permettre à un utilisateur d'être administrateur (réglage lors de l'installation) - * Un import asynchrone utilisant Redis (à activer dans les *Paramètres Internes*). L'import via RabbitMQ n'est pas (encore ?) supporté. - -### Liens - - * Rapport de bug: https://github.com/YunoHost-Apps/wallabag2_ynh/issues - * Site web de Wallabag: https://www.wallabag.org/ - * Documentation de Wallabag: https://doc.wallabag.org/ (fr/en/it/de) - * [Demo vidéo](https://player.vimeo.com/video/167435064) - - ---- - - ### Mettre à niveau depuis la v1.x - -La mise à niveau depuis le paquet Yunohost de [Wallabag v1](https://github.com/YunoHost-Apps/wallabag_ynh) demande une opération manuelle, c'est pourquoi un nouveau paquet est fournit. -Pour le processus de migration, merci de vous référer à [la documentation officiel de Wallabag](https://doc.wallabag.org/fr/user/import/wallabagv1.html). diff --git a/app_yunofav.md b/app_yunofav.md deleted file mode 100644 index 181abe8d..00000000 --- a/app_yunofav.md +++ /dev/null @@ -1,5 +0,0 @@ -#Yunofav : (unofficial) Page of favorite links for Yunohost - -homepage: https://github.com/YunoHost-Apps/yunofav_ynh - -Functionality: Creates a page for your favorite links, using the Yunohost tiles look and feel. \ No newline at end of file diff --git a/app_yunofav_fr.md b/app_yunofav_fr.md deleted file mode 100644 index fd312736..00000000 --- a/app_yunofav_fr.md +++ /dev/null @@ -1,6 +0,0 @@ -# Yunofav : (non officiel) Page de liens favoris pour Yunohost - -page d'accueil : https://github.com/YunoHost-Apps/yunofav_ynh - - -Fonctionnalité : Crée une page pour vos liens préférés, en utilisant le style et le fonctionnement des tuiles Yunohost. \ No newline at end of file diff --git a/apps.md b/apps.md deleted file mode 100644 index 7b5ff79b..00000000 --- a/apps.md +++ /dev/null @@ -1,368 +0,0 @@ -# Application catalog - -<span class="javascriptDisclaimer"> -This page requires Javascript enabled to display properly :s. -<br/> -<br/> -</span> - -<!-- -Search bar ---> - -<div class="input-group"> - <span id="basic-addon1" class="input-group-addon" ><span class="glyphicon glyphicon-search"></span></span> - <input id="filter-app-cards" type="text" class="form-control" placeholder="Search for apps..." aria-describedby="basic-addon1"/> - <div class="input-group-btn"> - <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> - <span id="current-quality-filter" data-filter="decent">Only decent quality apps</span> <span class="caret"></span> - </button> - - <ul class="dropdown-menu"> - <li><a href="#" data-quality-filter="high">Only high quality apps</a></li> - <li><a href="#" data-quality-filter="decent">Only decent quality apps</a></li> - <li><a href="#" data-quality-filter="working">Only working apps</a></li> - <li><a href="#" data-quality-filter="none">All apps</a></li> - </ul> - </div> -</div> -<br /> - -<!-- -Disclaimers ---> - -<div class="alert alert-info">The application packaging team will welcome your feedback! If you install an app and find issues or possible improvements, do not hesitate to contribute by reporting your issues directly on the code repositories.</div> - -<div id="bad-quality-apps-disclaimer" class="alert alert-warning"> - Applications with a level below or equal to 4 may be working, but they might be not well-integrated with YunoHost, or they do not respect the recommended packaging practices. -</div> - -<div id="broken-apps-disclaimer" class="alert alert-danger"> - Applications with level 0, or flagged as <span class="label label-warning label-as-badge">inprogress</span>, <span class="label label-danger label-as-badge">notworking</span> are still in development or are know to not be working. **Do not install them** in a production environment! -</div> - -<div id="app-cards-list" class="app-cards-list"></div> - -<div class="alert alert-warning">If you don't find the app you are looking for, you can try to look for a appname_ynh repository on Github or on the internet, or add it to the <a href="/apps_wishlist">apps wishlist</a>.</div> - -<!-- -Custom CSS for this page ---> - -<style> -/*================================================= - Search bar -=================================================*/ -#filter-app-cards, #app-cards-list { - width:100%; -} -/*===============================================*/ - -/*================================================= - Force return space after card list -=================================================*/ -#app-cards-list:after { - content:''; - display:block; - clear: both; -} -/*===============================================*/ - -/*================================================= - App card -=================================================*/ -.app-card { - margin-bottom:20px; - width:270px; - float:left; - min-height: 1px; - margin-right: 10px; - margin-left: 10px; - border-radius: 3px; -} -/*===============================================*/ - -/*================================================= - App card body -=================================================*/ -.app-card .panel-body > h3 { - margin-top:0; - margin-bottom:5px; - font-size:1.2em; -} -.app-card .app-badges { - height:35px; -} -.app-card .app-badges .label, .app-card-date-maintainer { - font-size:0.6em; -} - -.label-epic { - background-color: darkorchid; -} - -.app-card-date-maintainer { - text-align:right; - max-height: 18px; - margin-bottom: 3px; - margin-right: 7px; - margin-top: -5px; -} - -.app-card .unmaintained { - color: #e0aa33; -} - -.app-card-desc { - height:100px; - overflow: hidden; -} -/*===============================================*/ - -/*================================================= - App card footer -=================================================*/ -.app-card .btn-group { - width:100%; - margin-left: 0px; -} -.app-card > .btn-group > .btn{ - border-bottom:0; - font-size: 0.9em; - line-height: 1.58; -} -.app-card > .btn-group > .btn:first-child { - border-left:0; - border-top-left-radius:0; -} -.app-card > .btn-group > .btn:last-child { - border-right:0; - border-top-right-radius:0; - margin-left: 0px; - width: 33.6%; -} -/*===============================================*/ -</style> - -<!-- -App card template ---> - -<script type="text/template" id="app-template2"> - <div class="app-card_{app_id} app-card panel panel-default" data-quality="{app_quality}"> - - <div class="panel-body"> - <h3>{app_name}</h3> - <div class="app-badges"></div> - - <div class="app-card-desc">{app_description}</div> - </div> - <div class="app-card-date-maintainer"> - <span class="glyphicon glyphicon-refresh"></span> {app_update} - - <span title="{maintained_help}" class="{maintained_state}"><span class="glyphicon glyphicon-{maintained_icon}"></span> {app_maintainer}</span> - </div> - <div class="btn-group" role="group"> - <a href="{app_git}" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Code</a> - <a href="#/app_{app_id}_en" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-book" aria-hidden="true"></span> Doc</a> - <a href="https://install-app.yunohost.org/?app={app_id}" target="_BLANK" type="button" class="btn btn-{app_install_css_style} col-sm-4 active"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Install</a> - </div> - - </div> -</script> - -<!-- -Javascript helpers ---> - -<script> - -function timeConverter(UNIX_timestamp) { - var a = new Date(UNIX_timestamp*1000); - var months = ['January','February','March','April','May','June','July','August','September','October','November','December']; - var year = a.getFullYear(); - var month = months[a.getMonth()]; - var date = a.getDate(); - var hour = a.getHours(); - var min = a.getMinutes(); - if (hour < 10) { hour = '0' + hour; } - if (min < 10) { min = '0' + min; } - var time = date+' '+month+' '+year;//+' at '+hour+':'+min - return time; -} - - -$(document).ready(function () { - - // Hide warrant about states when we're using the default filter - $('#state-disclaimer').hide(); - var quality_filters = "decent"; - - function filter(){ - - var current_quality_filter = $('#current-quality-filter').data("filter"); - var user_input_in_search_field = $('#filter-app-cards').val().toLowerCase(); - - $('.app-card').each(function() { - // This is where we actually define how apps are filtered: - // we look for the name of the app (h3) and try to find the user input - // + we check this app match the current quality filter - var app_name = $(this).find('h3').text().toLowerCase(); - if (app_name.indexOf(user_input_in_search_field) >= 0 && $(this).data("quality").indexOf(current_quality_filter) >= 0) - { - $(this).show(); - } - else - { - $(this).hide(); - } - }); - - // Display or hide the disclaimers depending on the current filter... - ((current_quality_filter == "working") || (current_quality_filter == "none")) ? $("#bad-quality-apps-disclaimer").show() : $("#bad-quality-apps-disclaimer").hide(); - ((current_quality_filter == "none")) ? $("#broken-apps-disclaimer").show() : $("#broken-apps-disclaimer").hide(); - } - - //================================================= - // Search & filter bar event - //================================================= - $('#filter-app-cards').keyup(filter); - - $('a[data-quality-filter]').on("click", function(){ - $('#current-quality-filter').text($(this).text()); - $('#current-quality-filter').data("filter", $(this).data("quality-filter")); - filter(); - }); - - filter(); - - //================================================= - // Upload apps lists - //================================================= - var catalog = undefined; - - // Fetch application catalog - - $.getJSON('https://app.yunohost.org/apps.json', {}, function(data) { - - catalog = $.map(data, function(el) { return el; }); - - // Clarify high quality state, and level if undefined or inprogress or notworking... - - $.each(catalog, function(k, infos) { - if ((infos.level === undefined) || (infos.state === "inprogress") || (infos.state === "notworking")) { - infos.level = null; - } - if ((infos.high_quality === true) && (infos.level === 8)) { - infos.state = "high quality"; - } - }); - - // Sort apps according to their state and level... - - catalog.sort(function(a, b){ - a_state = (a.state === "high quality")?4:(a.level > 4)?3:(a.state > 0)?2:1; - b_state = (b.state === "high quality")?4:(b.level > 4)?3:(b.state > 0)?2:1; - if (a_state < b_state || a_state == b_state && a.level < b.level || a_state == b_state && a.level == b.level && a.manifest.id > b.manifest.id) {return 1;} - else if (a.manifest.id == b.manifest.id) {return 0;} - return -1; - }); - - // Add the card for each app - - $.each(catalog, function(k, infos) { - - app_id = infos.manifest.id; - - // Define what style to use for state, level and install button - // according to the app quality .... - - if (infos.state === "high quality") { - app_quality = "high,decent,working,none"; - app_state_css_style = "epic"; - app_install_css_style = "success"; - app_level_css_style = "epic"; - } else if (infos.level > 4) { - app_quality = "decent,working,none"; - app_state_css_style = "success"; - app_install_css_style = "success"; - app_level_css_style = "success"; - } else if (infos.level > 0) { - app_quality = "working,none"; - app_state_css_style = "success"; - app_install_css_style = "warning"; - app_level_css_style = "warning"; - } else { - app_quality = "none"; - if (infos.state === "working") { - app_state_css_style = "success"; - } - else if (infos.state === "inprogress") { - app_state_css_style = "warning"; - } - else { - app_state_css_style = "danger"; - } - app_install_css_style = "danger"; - app_level_css_style = "danger"; - } - - // If level is null, we wanna display '?' - if (infos.level == null) { - infos.level = '?'; - } - - // Fill the template - html = $('#app-template2').html() - .replace(/{app_id}/g, app_id) - .replace(/{app_name}/g, infos.manifest.name) - .replace('{app_description}', infos.manifest.description.en) - .replace(/{app_git}/g, infos.git.url) - .replace('{app_branch}', infos.git.branch) - .replace('{app_level}', infos.level) - .replace('{app_quality}', app_quality) - .replace('{app_update}', timeConverter(infos.lastUpdate)) - .replace('{app_state_css_style}', app_state_css_style) - .replace('{app_install_css_style}', app_install_css_style); - - // Handle the maintainer info - if (infos.maintained == false) - { - html = html - .replace('{maintained_state}', 'unmaintained') - .replace('{maintained_icon}', 'warning-sign') - .replace('{app_maintainer}', "Unmaintained") - .replace('{maintained_help}', "This package is currently unmaintained. Feel free to propose yourself as the new maintainer !"); - } - else { - html = html - .replace('{maintained_state}', 'maintained') - .replace('{maintained_icon}', 'user') - .replace('{maintained_help}', "Current maintainer of this package"); - - if ((infos.manifest.developer) && (infos.manifest.developer.name)) { - html = html.replace('{app_maintainer}', infos.manifest.developer.name); - } - else if ((infos.manifest.maintainer) && (infos.manifest.maintainer.name)) { - html = html.replace('{app_maintainer}', infos.manifest.maintainer.name); - } - else { - html = html.replace('{app_maintainer}', "???"); - } - } - - // Fill the template - $('#app-cards-list').append(html); - $('.app-card_'+ app_id).attr('id', 'app-card_'+ app_id); - $('.app-card_'+ app_id + ' .app-badges').append(' <span class="label label-'+app_state_css_style+' label-as-badge app-'+infos.state+'">'+infos.state+'</span>'); - if ((infos.state === "high quality") || (infos.state === "working")) { - $('.app-card_'+ app_id + ' .app-badges').append(' <span class="label label-'+app_level_css_style+' label-as-badge">level '+infos.level+'</span>'); - } - - }); - - filter(); - }); - //================================================= -}); -</script> diff --git a/apps_ar.md b/apps_ar.md deleted file mode 100644 index 7b5ff79b..00000000 --- a/apps_ar.md +++ /dev/null @@ -1,368 +0,0 @@ -# Application catalog - -<span class="javascriptDisclaimer"> -This page requires Javascript enabled to display properly :s. -<br/> -<br/> -</span> - -<!-- -Search bar ---> - -<div class="input-group"> - <span id="basic-addon1" class="input-group-addon" ><span class="glyphicon glyphicon-search"></span></span> - <input id="filter-app-cards" type="text" class="form-control" placeholder="Search for apps..." aria-describedby="basic-addon1"/> - <div class="input-group-btn"> - <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> - <span id="current-quality-filter" data-filter="decent">Only decent quality apps</span> <span class="caret"></span> - </button> - - <ul class="dropdown-menu"> - <li><a href="#" data-quality-filter="high">Only high quality apps</a></li> - <li><a href="#" data-quality-filter="decent">Only decent quality apps</a></li> - <li><a href="#" data-quality-filter="working">Only working apps</a></li> - <li><a href="#" data-quality-filter="none">All apps</a></li> - </ul> - </div> -</div> -<br /> - -<!-- -Disclaimers ---> - -<div class="alert alert-info">The application packaging team will welcome your feedback! If you install an app and find issues or possible improvements, do not hesitate to contribute by reporting your issues directly on the code repositories.</div> - -<div id="bad-quality-apps-disclaimer" class="alert alert-warning"> - Applications with a level below or equal to 4 may be working, but they might be not well-integrated with YunoHost, or they do not respect the recommended packaging practices. -</div> - -<div id="broken-apps-disclaimer" class="alert alert-danger"> - Applications with level 0, or flagged as <span class="label label-warning label-as-badge">inprogress</span>, <span class="label label-danger label-as-badge">notworking</span> are still in development or are know to not be working. **Do not install them** in a production environment! -</div> - -<div id="app-cards-list" class="app-cards-list"></div> - -<div class="alert alert-warning">If you don't find the app you are looking for, you can try to look for a appname_ynh repository on Github or on the internet, or add it to the <a href="/apps_wishlist">apps wishlist</a>.</div> - -<!-- -Custom CSS for this page ---> - -<style> -/*================================================= - Search bar -=================================================*/ -#filter-app-cards, #app-cards-list { - width:100%; -} -/*===============================================*/ - -/*================================================= - Force return space after card list -=================================================*/ -#app-cards-list:after { - content:''; - display:block; - clear: both; -} -/*===============================================*/ - -/*================================================= - App card -=================================================*/ -.app-card { - margin-bottom:20px; - width:270px; - float:left; - min-height: 1px; - margin-right: 10px; - margin-left: 10px; - border-radius: 3px; -} -/*===============================================*/ - -/*================================================= - App card body -=================================================*/ -.app-card .panel-body > h3 { - margin-top:0; - margin-bottom:5px; - font-size:1.2em; -} -.app-card .app-badges { - height:35px; -} -.app-card .app-badges .label, .app-card-date-maintainer { - font-size:0.6em; -} - -.label-epic { - background-color: darkorchid; -} - -.app-card-date-maintainer { - text-align:right; - max-height: 18px; - margin-bottom: 3px; - margin-right: 7px; - margin-top: -5px; -} - -.app-card .unmaintained { - color: #e0aa33; -} - -.app-card-desc { - height:100px; - overflow: hidden; -} -/*===============================================*/ - -/*================================================= - App card footer -=================================================*/ -.app-card .btn-group { - width:100%; - margin-left: 0px; -} -.app-card > .btn-group > .btn{ - border-bottom:0; - font-size: 0.9em; - line-height: 1.58; -} -.app-card > .btn-group > .btn:first-child { - border-left:0; - border-top-left-radius:0; -} -.app-card > .btn-group > .btn:last-child { - border-right:0; - border-top-right-radius:0; - margin-left: 0px; - width: 33.6%; -} -/*===============================================*/ -</style> - -<!-- -App card template ---> - -<script type="text/template" id="app-template2"> - <div class="app-card_{app_id} app-card panel panel-default" data-quality="{app_quality}"> - - <div class="panel-body"> - <h3>{app_name}</h3> - <div class="app-badges"></div> - - <div class="app-card-desc">{app_description}</div> - </div> - <div class="app-card-date-maintainer"> - <span class="glyphicon glyphicon-refresh"></span> {app_update} - - <span title="{maintained_help}" class="{maintained_state}"><span class="glyphicon glyphicon-{maintained_icon}"></span> {app_maintainer}</span> - </div> - <div class="btn-group" role="group"> - <a href="{app_git}" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Code</a> - <a href="#/app_{app_id}_en" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-book" aria-hidden="true"></span> Doc</a> - <a href="https://install-app.yunohost.org/?app={app_id}" target="_BLANK" type="button" class="btn btn-{app_install_css_style} col-sm-4 active"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Install</a> - </div> - - </div> -</script> - -<!-- -Javascript helpers ---> - -<script> - -function timeConverter(UNIX_timestamp) { - var a = new Date(UNIX_timestamp*1000); - var months = ['January','February','March','April','May','June','July','August','September','October','November','December']; - var year = a.getFullYear(); - var month = months[a.getMonth()]; - var date = a.getDate(); - var hour = a.getHours(); - var min = a.getMinutes(); - if (hour < 10) { hour = '0' + hour; } - if (min < 10) { min = '0' + min; } - var time = date+' '+month+' '+year;//+' at '+hour+':'+min - return time; -} - - -$(document).ready(function () { - - // Hide warrant about states when we're using the default filter - $('#state-disclaimer').hide(); - var quality_filters = "decent"; - - function filter(){ - - var current_quality_filter = $('#current-quality-filter').data("filter"); - var user_input_in_search_field = $('#filter-app-cards').val().toLowerCase(); - - $('.app-card').each(function() { - // This is where we actually define how apps are filtered: - // we look for the name of the app (h3) and try to find the user input - // + we check this app match the current quality filter - var app_name = $(this).find('h3').text().toLowerCase(); - if (app_name.indexOf(user_input_in_search_field) >= 0 && $(this).data("quality").indexOf(current_quality_filter) >= 0) - { - $(this).show(); - } - else - { - $(this).hide(); - } - }); - - // Display or hide the disclaimers depending on the current filter... - ((current_quality_filter == "working") || (current_quality_filter == "none")) ? $("#bad-quality-apps-disclaimer").show() : $("#bad-quality-apps-disclaimer").hide(); - ((current_quality_filter == "none")) ? $("#broken-apps-disclaimer").show() : $("#broken-apps-disclaimer").hide(); - } - - //================================================= - // Search & filter bar event - //================================================= - $('#filter-app-cards').keyup(filter); - - $('a[data-quality-filter]').on("click", function(){ - $('#current-quality-filter').text($(this).text()); - $('#current-quality-filter').data("filter", $(this).data("quality-filter")); - filter(); - }); - - filter(); - - //================================================= - // Upload apps lists - //================================================= - var catalog = undefined; - - // Fetch application catalog - - $.getJSON('https://app.yunohost.org/apps.json', {}, function(data) { - - catalog = $.map(data, function(el) { return el; }); - - // Clarify high quality state, and level if undefined or inprogress or notworking... - - $.each(catalog, function(k, infos) { - if ((infos.level === undefined) || (infos.state === "inprogress") || (infos.state === "notworking")) { - infos.level = null; - } - if ((infos.high_quality === true) && (infos.level === 8)) { - infos.state = "high quality"; - } - }); - - // Sort apps according to their state and level... - - catalog.sort(function(a, b){ - a_state = (a.state === "high quality")?4:(a.level > 4)?3:(a.state > 0)?2:1; - b_state = (b.state === "high quality")?4:(b.level > 4)?3:(b.state > 0)?2:1; - if (a_state < b_state || a_state == b_state && a.level < b.level || a_state == b_state && a.level == b.level && a.manifest.id > b.manifest.id) {return 1;} - else if (a.manifest.id == b.manifest.id) {return 0;} - return -1; - }); - - // Add the card for each app - - $.each(catalog, function(k, infos) { - - app_id = infos.manifest.id; - - // Define what style to use for state, level and install button - // according to the app quality .... - - if (infos.state === "high quality") { - app_quality = "high,decent,working,none"; - app_state_css_style = "epic"; - app_install_css_style = "success"; - app_level_css_style = "epic"; - } else if (infos.level > 4) { - app_quality = "decent,working,none"; - app_state_css_style = "success"; - app_install_css_style = "success"; - app_level_css_style = "success"; - } else if (infos.level > 0) { - app_quality = "working,none"; - app_state_css_style = "success"; - app_install_css_style = "warning"; - app_level_css_style = "warning"; - } else { - app_quality = "none"; - if (infos.state === "working") { - app_state_css_style = "success"; - } - else if (infos.state === "inprogress") { - app_state_css_style = "warning"; - } - else { - app_state_css_style = "danger"; - } - app_install_css_style = "danger"; - app_level_css_style = "danger"; - } - - // If level is null, we wanna display '?' - if (infos.level == null) { - infos.level = '?'; - } - - // Fill the template - html = $('#app-template2').html() - .replace(/{app_id}/g, app_id) - .replace(/{app_name}/g, infos.manifest.name) - .replace('{app_description}', infos.manifest.description.en) - .replace(/{app_git}/g, infos.git.url) - .replace('{app_branch}', infos.git.branch) - .replace('{app_level}', infos.level) - .replace('{app_quality}', app_quality) - .replace('{app_update}', timeConverter(infos.lastUpdate)) - .replace('{app_state_css_style}', app_state_css_style) - .replace('{app_install_css_style}', app_install_css_style); - - // Handle the maintainer info - if (infos.maintained == false) - { - html = html - .replace('{maintained_state}', 'unmaintained') - .replace('{maintained_icon}', 'warning-sign') - .replace('{app_maintainer}', "Unmaintained") - .replace('{maintained_help}', "This package is currently unmaintained. Feel free to propose yourself as the new maintainer !"); - } - else { - html = html - .replace('{maintained_state}', 'maintained') - .replace('{maintained_icon}', 'user') - .replace('{maintained_help}', "Current maintainer of this package"); - - if ((infos.manifest.developer) && (infos.manifest.developer.name)) { - html = html.replace('{app_maintainer}', infos.manifest.developer.name); - } - else if ((infos.manifest.maintainer) && (infos.manifest.maintainer.name)) { - html = html.replace('{app_maintainer}', infos.manifest.maintainer.name); - } - else { - html = html.replace('{app_maintainer}', "???"); - } - } - - // Fill the template - $('#app-cards-list').append(html); - $('.app-card_'+ app_id).attr('id', 'app-card_'+ app_id); - $('.app-card_'+ app_id + ' .app-badges').append(' <span class="label label-'+app_state_css_style+' label-as-badge app-'+infos.state+'">'+infos.state+'</span>'); - if ((infos.state === "high quality") || (infos.state === "working")) { - $('.app-card_'+ app_id + ' .app-badges').append(' <span class="label label-'+app_level_css_style+' label-as-badge">level '+infos.level+'</span>'); - } - - }); - - filter(); - }); - //================================================= -}); -</script> diff --git a/apps_es.md b/apps_es.md deleted file mode 100644 index 7b5ff79b..00000000 --- a/apps_es.md +++ /dev/null @@ -1,368 +0,0 @@ -# Application catalog - -<span class="javascriptDisclaimer"> -This page requires Javascript enabled to display properly :s. -<br/> -<br/> -</span> - -<!-- -Search bar ---> - -<div class="input-group"> - <span id="basic-addon1" class="input-group-addon" ><span class="glyphicon glyphicon-search"></span></span> - <input id="filter-app-cards" type="text" class="form-control" placeholder="Search for apps..." aria-describedby="basic-addon1"/> - <div class="input-group-btn"> - <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> - <span id="current-quality-filter" data-filter="decent">Only decent quality apps</span> <span class="caret"></span> - </button> - - <ul class="dropdown-menu"> - <li><a href="#" data-quality-filter="high">Only high quality apps</a></li> - <li><a href="#" data-quality-filter="decent">Only decent quality apps</a></li> - <li><a href="#" data-quality-filter="working">Only working apps</a></li> - <li><a href="#" data-quality-filter="none">All apps</a></li> - </ul> - </div> -</div> -<br /> - -<!-- -Disclaimers ---> - -<div class="alert alert-info">The application packaging team will welcome your feedback! If you install an app and find issues or possible improvements, do not hesitate to contribute by reporting your issues directly on the code repositories.</div> - -<div id="bad-quality-apps-disclaimer" class="alert alert-warning"> - Applications with a level below or equal to 4 may be working, but they might be not well-integrated with YunoHost, or they do not respect the recommended packaging practices. -</div> - -<div id="broken-apps-disclaimer" class="alert alert-danger"> - Applications with level 0, or flagged as <span class="label label-warning label-as-badge">inprogress</span>, <span class="label label-danger label-as-badge">notworking</span> are still in development or are know to not be working. **Do not install them** in a production environment! -</div> - -<div id="app-cards-list" class="app-cards-list"></div> - -<div class="alert alert-warning">If you don't find the app you are looking for, you can try to look for a appname_ynh repository on Github or on the internet, or add it to the <a href="/apps_wishlist">apps wishlist</a>.</div> - -<!-- -Custom CSS for this page ---> - -<style> -/*================================================= - Search bar -=================================================*/ -#filter-app-cards, #app-cards-list { - width:100%; -} -/*===============================================*/ - -/*================================================= - Force return space after card list -=================================================*/ -#app-cards-list:after { - content:''; - display:block; - clear: both; -} -/*===============================================*/ - -/*================================================= - App card -=================================================*/ -.app-card { - margin-bottom:20px; - width:270px; - float:left; - min-height: 1px; - margin-right: 10px; - margin-left: 10px; - border-radius: 3px; -} -/*===============================================*/ - -/*================================================= - App card body -=================================================*/ -.app-card .panel-body > h3 { - margin-top:0; - margin-bottom:5px; - font-size:1.2em; -} -.app-card .app-badges { - height:35px; -} -.app-card .app-badges .label, .app-card-date-maintainer { - font-size:0.6em; -} - -.label-epic { - background-color: darkorchid; -} - -.app-card-date-maintainer { - text-align:right; - max-height: 18px; - margin-bottom: 3px; - margin-right: 7px; - margin-top: -5px; -} - -.app-card .unmaintained { - color: #e0aa33; -} - -.app-card-desc { - height:100px; - overflow: hidden; -} -/*===============================================*/ - -/*================================================= - App card footer -=================================================*/ -.app-card .btn-group { - width:100%; - margin-left: 0px; -} -.app-card > .btn-group > .btn{ - border-bottom:0; - font-size: 0.9em; - line-height: 1.58; -} -.app-card > .btn-group > .btn:first-child { - border-left:0; - border-top-left-radius:0; -} -.app-card > .btn-group > .btn:last-child { - border-right:0; - border-top-right-radius:0; - margin-left: 0px; - width: 33.6%; -} -/*===============================================*/ -</style> - -<!-- -App card template ---> - -<script type="text/template" id="app-template2"> - <div class="app-card_{app_id} app-card panel panel-default" data-quality="{app_quality}"> - - <div class="panel-body"> - <h3>{app_name}</h3> - <div class="app-badges"></div> - - <div class="app-card-desc">{app_description}</div> - </div> - <div class="app-card-date-maintainer"> - <span class="glyphicon glyphicon-refresh"></span> {app_update} - - <span title="{maintained_help}" class="{maintained_state}"><span class="glyphicon glyphicon-{maintained_icon}"></span> {app_maintainer}</span> - </div> - <div class="btn-group" role="group"> - <a href="{app_git}" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Code</a> - <a href="#/app_{app_id}_en" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-book" aria-hidden="true"></span> Doc</a> - <a href="https://install-app.yunohost.org/?app={app_id}" target="_BLANK" type="button" class="btn btn-{app_install_css_style} col-sm-4 active"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Install</a> - </div> - - </div> -</script> - -<!-- -Javascript helpers ---> - -<script> - -function timeConverter(UNIX_timestamp) { - var a = new Date(UNIX_timestamp*1000); - var months = ['January','February','March','April','May','June','July','August','September','October','November','December']; - var year = a.getFullYear(); - var month = months[a.getMonth()]; - var date = a.getDate(); - var hour = a.getHours(); - var min = a.getMinutes(); - if (hour < 10) { hour = '0' + hour; } - if (min < 10) { min = '0' + min; } - var time = date+' '+month+' '+year;//+' at '+hour+':'+min - return time; -} - - -$(document).ready(function () { - - // Hide warrant about states when we're using the default filter - $('#state-disclaimer').hide(); - var quality_filters = "decent"; - - function filter(){ - - var current_quality_filter = $('#current-quality-filter').data("filter"); - var user_input_in_search_field = $('#filter-app-cards').val().toLowerCase(); - - $('.app-card').each(function() { - // This is where we actually define how apps are filtered: - // we look for the name of the app (h3) and try to find the user input - // + we check this app match the current quality filter - var app_name = $(this).find('h3').text().toLowerCase(); - if (app_name.indexOf(user_input_in_search_field) >= 0 && $(this).data("quality").indexOf(current_quality_filter) >= 0) - { - $(this).show(); - } - else - { - $(this).hide(); - } - }); - - // Display or hide the disclaimers depending on the current filter... - ((current_quality_filter == "working") || (current_quality_filter == "none")) ? $("#bad-quality-apps-disclaimer").show() : $("#bad-quality-apps-disclaimer").hide(); - ((current_quality_filter == "none")) ? $("#broken-apps-disclaimer").show() : $("#broken-apps-disclaimer").hide(); - } - - //================================================= - // Search & filter bar event - //================================================= - $('#filter-app-cards').keyup(filter); - - $('a[data-quality-filter]').on("click", function(){ - $('#current-quality-filter').text($(this).text()); - $('#current-quality-filter').data("filter", $(this).data("quality-filter")); - filter(); - }); - - filter(); - - //================================================= - // Upload apps lists - //================================================= - var catalog = undefined; - - // Fetch application catalog - - $.getJSON('https://app.yunohost.org/apps.json', {}, function(data) { - - catalog = $.map(data, function(el) { return el; }); - - // Clarify high quality state, and level if undefined or inprogress or notworking... - - $.each(catalog, function(k, infos) { - if ((infos.level === undefined) || (infos.state === "inprogress") || (infos.state === "notworking")) { - infos.level = null; - } - if ((infos.high_quality === true) && (infos.level === 8)) { - infos.state = "high quality"; - } - }); - - // Sort apps according to their state and level... - - catalog.sort(function(a, b){ - a_state = (a.state === "high quality")?4:(a.level > 4)?3:(a.state > 0)?2:1; - b_state = (b.state === "high quality")?4:(b.level > 4)?3:(b.state > 0)?2:1; - if (a_state < b_state || a_state == b_state && a.level < b.level || a_state == b_state && a.level == b.level && a.manifest.id > b.manifest.id) {return 1;} - else if (a.manifest.id == b.manifest.id) {return 0;} - return -1; - }); - - // Add the card for each app - - $.each(catalog, function(k, infos) { - - app_id = infos.manifest.id; - - // Define what style to use for state, level and install button - // according to the app quality .... - - if (infos.state === "high quality") { - app_quality = "high,decent,working,none"; - app_state_css_style = "epic"; - app_install_css_style = "success"; - app_level_css_style = "epic"; - } else if (infos.level > 4) { - app_quality = "decent,working,none"; - app_state_css_style = "success"; - app_install_css_style = "success"; - app_level_css_style = "success"; - } else if (infos.level > 0) { - app_quality = "working,none"; - app_state_css_style = "success"; - app_install_css_style = "warning"; - app_level_css_style = "warning"; - } else { - app_quality = "none"; - if (infos.state === "working") { - app_state_css_style = "success"; - } - else if (infos.state === "inprogress") { - app_state_css_style = "warning"; - } - else { - app_state_css_style = "danger"; - } - app_install_css_style = "danger"; - app_level_css_style = "danger"; - } - - // If level is null, we wanna display '?' - if (infos.level == null) { - infos.level = '?'; - } - - // Fill the template - html = $('#app-template2').html() - .replace(/{app_id}/g, app_id) - .replace(/{app_name}/g, infos.manifest.name) - .replace('{app_description}', infos.manifest.description.en) - .replace(/{app_git}/g, infos.git.url) - .replace('{app_branch}', infos.git.branch) - .replace('{app_level}', infos.level) - .replace('{app_quality}', app_quality) - .replace('{app_update}', timeConverter(infos.lastUpdate)) - .replace('{app_state_css_style}', app_state_css_style) - .replace('{app_install_css_style}', app_install_css_style); - - // Handle the maintainer info - if (infos.maintained == false) - { - html = html - .replace('{maintained_state}', 'unmaintained') - .replace('{maintained_icon}', 'warning-sign') - .replace('{app_maintainer}', "Unmaintained") - .replace('{maintained_help}', "This package is currently unmaintained. Feel free to propose yourself as the new maintainer !"); - } - else { - html = html - .replace('{maintained_state}', 'maintained') - .replace('{maintained_icon}', 'user') - .replace('{maintained_help}', "Current maintainer of this package"); - - if ((infos.manifest.developer) && (infos.manifest.developer.name)) { - html = html.replace('{app_maintainer}', infos.manifest.developer.name); - } - else if ((infos.manifest.maintainer) && (infos.manifest.maintainer.name)) { - html = html.replace('{app_maintainer}', infos.manifest.maintainer.name); - } - else { - html = html.replace('{app_maintainer}', "???"); - } - } - - // Fill the template - $('#app-cards-list').append(html); - $('.app-card_'+ app_id).attr('id', 'app-card_'+ app_id); - $('.app-card_'+ app_id + ' .app-badges').append(' <span class="label label-'+app_state_css_style+' label-as-badge app-'+infos.state+'">'+infos.state+'</span>'); - if ((infos.state === "high quality") || (infos.state === "working")) { - $('.app-card_'+ app_id + ' .app-badges').append(' <span class="label label-'+app_level_css_style+' label-as-badge">level '+infos.level+'</span>'); - } - - }); - - filter(); - }); - //================================================= -}); -</script> diff --git a/apps_fr.md b/apps_fr.md deleted file mode 100644 index 88bcd6f4..00000000 --- a/apps_fr.md +++ /dev/null @@ -1,367 +0,0 @@ -# Application catalog - -<span class="javascriptDisclaimer"> -Cette page requiert que Javascript soit activé pour s'afficher correctement :s. -<br/> -<br/> -</span> - -<!-- -Search bar ---> -<div class="input-group"> - <span id="basic-addon1" class="input-group-addon" ><span class="glyphicon glyphicon-search"></span></span> - <input id="filter-app-cards" type="text" class="form-control" placeholder="Rechercher des apps..." aria-describedby="basic-addon1"/> - <div class="input-group-btn"> - <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> - <span id="current-quality-filter" data-filter="decent">Seulement les apps de qualité décente</span> <span class="caret"></span> - </button> - - <ul class="dropdown-menu"> - <li><a href="#" data-quality-filter="high">Seulement les apps haute-qualité</a></li> - <li><a href="#" data-quality-filter="decent">Seulement les apps de qualité décente</a></li> - <li><a href="#" data-quality-filter="working">Seulement les apps fonctionelles</a></li> - <li><a href="#" data-quality-filter="none">Toutes les apps</a></li> - </ul> - </div> -</div> -<br /> - -<!-- -Disclaimers ---> - -<div class="alert alert-info">L'équipe de packaging d'applications sera heureuse de recevoir vos commentaires! Si vous trouvez des problèmes ou des améliorations possibles en installant une app, n'hésitez pas à contribuer en créant un ticket (issue) directement sur le dépôt de code.</div> - -<div id="bad-quality-apps-disclaimer" class="alert alert-warning"> -Les applications avec un niveau inférieur ou égal à 4 peuvent fonctionner, mais ne seront pas forcément bien intégrées avec YunoHost, ou bien ne respectent pas les bonnes pratiques de packaging. -</div> - -<div id="broken-apps-disclaimer" class="alert alert-danger"> -Les applications niveau 0, ou étiquettées <span class="label label-warning label-as-badge">inprogress</span>, <span class="label label-danger label-as-badge">notworking</span> sont toujours en cours de packaging ou sont connues pour être cassées. **Ne les installez pas** sur un serveur de production! -</div> - -<div id="app-cards-list" class="app-cards-list"></div> - -<div class="alert alert-warning">Si vous ne trouvez pas une application précise que vous recherchez, vous pouvez chercher un dépôt nommé nomdelapp_ynh sur Github ou internet, ou bien l'ajouter à la <a href="/apps_wishlist">liste d'apps souhaitées</a>.</div> - -<!-- -Custom CSS for this page ---> - -<style> -/*================================================= - Search bar -=================================================*/ -#filter-app-cards, #app-cards-list { - width:100%; -} -/*===============================================*/ - -/*================================================= - Force return space after card list -=================================================*/ -#app-cards-list:after { - content:''; - display:block; - clear: both; -} -/*===============================================*/ - -/*================================================= - App card -=================================================*/ -.app-card { - margin-bottom:20px; - width:270px; - float:left; - min-height: 1px; - margin-right: 10px; - margin-left: 10px; - border-radius: 3px; -} -/*===============================================*/ - -/*================================================= - App card body -=================================================*/ -.app-card .panel-body > h3 { - margin-top:0; - margin-bottom:5px; - font-size:1.2em; -} -.app-card .app-badges { - height:35px; -} -.app-card .app-badges .label, .app-card-date-maintainer { - font-size:0.6em; -} - -.label-epic { - background-color: darkorchid; -} - -.app-card-date-maintainer { - text-align:right; - max-height: 18px; - margin-bottom: 3px; - margin-right: 7px; - margin-top: -5px; -} - -.app-card .unmaintained { - color: #e0aa33; -} - -.app-card-desc { - height:100px; - overflow: hidden; -} -/*===============================================*/ - -/*================================================= - App card footer -=================================================*/ -.app-card .btn-group { - width:100%; - margin-left: 0px; -} -.app-card > .btn-group > .btn{ - border-bottom:0; - font-size: 0.9em; - line-height: 1.58; -} -.app-card > .btn-group > .btn:first-child { - border-left:0; - border-top-left-radius:0; -} -.app-card > .btn-group > .btn:last-child { - border-right:0; - border-top-right-radius:0; - margin-left: 0px; - width: 33.6%; -} -/*===============================================*/ -</style> - -<!-- -App card template ---> - -<script type="text/template" id="app-template2"> - <div class="app-card_{app_id} app-card panel panel-default" data-quality="{app_quality}"> - - <div class="panel-body"> - <h3>{app_name}</h3> - <div class="app-badges"></div> - - <div class="app-card-desc">{app_description}</div> - </div> - <div class="app-card-date-maintainer"> - <span class="glyphicon glyphicon-refresh"></span> {app_update} - - <span title="{maintained_help}" class="{maintained_state}"><span class="glyphicon glyphicon-{maintained_icon}"></span> {app_maintainer}</span> - </div> - <div class="btn-group" role="group"> - <a href="{app_git}" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Code</a> - <a href="#/app_{app_id}_en" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-book" aria-hidden="true"></span> Doc</a> - <a href="https://install-app.yunohost.org/?app={app_id}" target="_BLANK" type="button" class="btn btn-{app_install_css_style} col-sm-4 active"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Installer</a> - </div> - - </div> -</script> - -<!-- -Javascript helpers ---> - -<script> - -function timeConverter(UNIX_timestamp) { - var a = new Date(UNIX_timestamp*1000); - var months = ['January','February','March','April','May','June','July','August','September','October','November','December']; - var year = a.getFullYear(); - var month = months[a.getMonth()]; - var date = a.getDate(); - var hour = a.getHours(); - var min = a.getMinutes(); - if (hour < 10) { hour = '0' + hour; } - if (min < 10) { min = '0' + min; } - var time = date+' '+month+' '+year;//+' at '+hour+':'+min - return time; -} - - -$(document).ready(function () { - - // Hide warrant about states when we're using the default filter - $('#state-disclaimer').hide(); - var quality_filters = "decent"; - - function filter(){ - - var current_quality_filter = $('#current-quality-filter').data("filter"); - var user_input_in_search_field = $('#filter-app-cards').val().toLowerCase(); - - $('.app-card').each(function() { - // This is where we actually define how apps are filtered: - // we look for the name of the app (h3) and try to find the user input - // + we check this app match the current quality filter - var app_name = $(this).find('h3').text().toLowerCase(); - if (app_name.indexOf(user_input_in_search_field) >= 0 && $(this).data("quality").indexOf(current_quality_filter) >= 0) - { - $(this).show(); - } - else - { - $(this).hide(); - } - }); - - // Display or hide the disclaimers depending on the current filter... - ((current_quality_filter == "working") || (current_quality_filter == "none")) ? $("#bad-quality-apps-disclaimer").show() : $("#bad-quality-apps-disclaimer").hide(); - ((current_quality_filter == "none")) ? $("#broken-apps-disclaimer").show() : $("#broken-apps-disclaimer").hide(); - } - - //================================================= - // Search & filter bar event - //================================================= - $('#filter-app-cards').keyup(filter); - - $('a[data-quality-filter]').on("click", function(){ - $('#current-quality-filter').text($(this).text()); - $('#current-quality-filter').data("filter", $(this).data("quality-filter")); - filter(); - }); - - filter(); - - //================================================= - // Upload apps lists - //================================================= - var catalog = undefined; - - // Fetch application catalog - - $.getJSON('https://app.yunohost.org/apps.json', {}, function(data) { - - catalog = $.map(data, function(el) { return el; }); - - // Clarify high quality state, and level if undefined or inprogress or notworking... - - $.each(catalog, function(k, infos) { - if ((infos.level === undefined) || (infos.state === "inprogress") || (infos.state === "notworking")) { - infos.level = null; - } - if ((infos.high_quality === true) && (infos.level === 8)) { - infos.state = "high quality"; - } - }); - - // Sort apps according to their state and level... - - catalog.sort(function(a, b){ - a_state = (a.state === "high quality")?4:(a.level > 4)?3:(a.state > 0)?2:1; - b_state = (b.state === "high quality")?4:(b.level > 4)?3:(b.state > 0)?2:1; - if (a_state < b_state || a_state == b_state && a.level < b.level || a_state == b_state && a.level == b.level && a.manifest.id > b.manifest.id) {return 1;} - else if (a.manifest.id == b.manifest.id) {return 0;} - return -1; - }); - - // Add the card for each app - - $.each(catalog, function(k, infos) { - - app_id = infos.manifest.id; - - // Define what style to use for state, level and install button - // according to the app quality .... - - if (infos.state === "high quality") { - app_quality = "high,decent,working,none"; - app_state_css_style = "epic"; - app_install_css_style = "success"; - app_level_css_style = "epic"; - } else if (infos.level > 4) { - app_quality = "decent,working,none"; - app_state_css_style = "success"; - app_install_css_style = "success"; - app_level_css_style = "success"; - } else if (infos.level > 0) { - app_quality = "working,none"; - app_state_css_style = "success"; - app_install_css_style = "warning"; - app_level_css_style = "warning"; - } else { - app_quality = "none"; - if (infos.state === "working") { - app_state_css_style = "success"; - } - else if (infos.state === "inprogress") { - app_state_css_style = "warning"; - } - else { - app_state_css_style = "danger"; - } - app_install_css_style = "danger"; - app_level_css_style = "danger"; - } - - // If level is null, we wanna display '?' - if (infos.level == null) { - infos.level = '?'; - } - - // Fill the template - html = $('#app-template2').html() - .replace(/{app_id}/g, app_id) - .replace(/{app_name}/g, infos.manifest.name) - .replace('{app_description}', infos.manifest.description.fr) - .replace(/{app_git}/g, infos.git.url) - .replace('{app_branch}', infos.git.branch) - .replace('{app_level}', infos.level) - .replace('{app_quality}', app_quality) - .replace('{app_update}', timeConverter(infos.lastUpdate)) - .replace('{app_state_css_style}', app_state_css_style) - .replace('{app_install_css_style}', app_install_css_style); - - // Handle the maintainer info - if (infos.maintained == false) - { - html = html - .replace('{maintained_state}', 'unmaintained') - .replace('{maintained_icon}', 'warning-sign') - .replace('{app_maintainer}', "Unmaintained") - .replace('{maintained_help}', "This package is currently unmaintained. Feel free to propose yourself as the new maintainer !"); - } - else { - html = html - .replace('{maintained_state}', 'maintained') - .replace('{maintained_icon}', 'user') - .replace('{maintained_help}', "Current maintainer of this package"); - - if ((infos.manifest.developer) && (infos.manifest.developer.name)) { - html = html.replace('{app_maintainer}', infos.manifest.developer.name); - } - else if ((infos.manifest.maintainer) && (infos.manifest.maintainer.name)) { - html = html.replace('{app_maintainer}', infos.manifest.maintainer.name); - } - else { - html = html.replace('{app_maintainer}', "???"); - } - } - - // Fill the template - $('#app-cards-list').append(html); - $('.app-card_'+ app_id).attr('id', 'app-card_'+ app_id); - $('.app-card_'+ app_id + ' .app-badges').append(' <span class="label label-'+app_state_css_style+' label-as-badge app-'+infos.state+'">'+infos.state+'</span>'); - if ((infos.state === "high quality") || (infos.state === "working")) { - $('.app-card_'+ app_id + ' .app-badges').append(' <span class="label label-'+app_level_css_style+' label-as-badge">niveau '+infos.level+'</span>'); - } - - }); - - filter(); - }); - //================================================= -}); -</script> diff --git a/apps_framasoft.md b/apps_framasoft.md deleted file mode 100644 index b8965af1..00000000 --- a/apps_framasoft.md +++ /dev/null @@ -1 +0,0 @@ -Unfortunately, this page only exists [in french here](apps_framasoft_fr) for now. diff --git a/apps_framasoft_fr.md b/apps_framasoft_fr.md deleted file mode 100644 index d57bcdbd..00000000 --- a/apps_framasoft_fr.md +++ /dev/null @@ -1,48 +0,0 @@ -# Équivalence avec les applications Framasoft - -| App Framasoft | Équivalent | Package | -| :---: | :---: | :---: | -| Framabag | Wallabag | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/wallabag2_ynh)   | -| Framabee | Searx | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/searx_ynh)   | -| Framabin | PrivateBin | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-apps/zerobin_ynh)   | -| Framaboard | Kanboard | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/kanboard_ynh)   | -| Framabookin | BicBucStriim | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/bicbucstriim_ynh)   | -| Framacalc | Ethercalc | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/ethercalc_ynh)   | -| Framacarte | uMap | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/umap_ynh)   | -| Framaclic | Matomo | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/matomo_ynh)   | -| Framadate | OpenSondage | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/opensondage_ynh)   | -| Framadrive | Nextcloud | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-apps/nextcloud_ynh)   | -| Framadrop | Lufi | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/lufi_ynh)   | -| Framaestro | Framaestro | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/framaestro_ynh)   | -| Framaforms | Framaforms | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/framaforms_ynh)   | -| Framagames | Framagames | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/framagames_ynh)   | -| Framagenda | (Agenda Nextcloud) | c.f. Nextcloud | -| Framagit | GitLab | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/gitlab_ynh)   | -| | Gogs | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/gogs_ynh)   | -| Frama.link | Lstu | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/lstu_ynh)   | -| Framalistes | Mailman | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/mailman_ynh)   | -| | Sympa | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/alexAubin/sympa_ynh)   | -| Framanews | TinyTinyRSS | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-apps/ttrss_ynh)   | -| Framanotes | Turtl | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/turtl_ynh)   | -| Framapad | Etherpad + mypads | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/etherpad_mypads_ynh)   | -| Framapiaf | Mastodon | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/mastodon_ynh)   | -| Framapic | Lutim | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/lutim_ynh)   | -| Framasites | Grav | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/grav_ynh)   | -| Framaslides | Strut | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/strut_ynh)   | -| Framasphère | Diaspora | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/aymhce/diaspora_ynh)   | -| Framatalk | Jitsi Meet | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/jitsi_ynh)   | -| Framateam | Mattermost | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/mattermost_ynh)   | -| Framatrad | ? | Non packagé | -| Framatube | Peertube | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/peertube_ynh)   | -| Framavectoriel | SVG-Edit | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/svgedit_ynh)   | -| Framavox | Loomio | Non packagé | -| Framemo | Scrumblr | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/scrumblr_ynh)   | -| Framindmap | Wisemapping | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/wisemapping_ynh)   | -| Framinetest | Minetest | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/minetest_ynh)   | -| MyFrama | Shaarli | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/shaarli_ynh)   | - -### Voir aussi - -- [Liste complète des applications packagées](/apps) -- [La roadmap 'Dégooglisons'](https://github.com/YunoHost/issues/milestone/13) - diff --git a/apps_it.md b/apps_it.md deleted file mode 100644 index 7b5ff79b..00000000 --- a/apps_it.md +++ /dev/null @@ -1,368 +0,0 @@ -# Application catalog - -<span class="javascriptDisclaimer"> -This page requires Javascript enabled to display properly :s. -<br/> -<br/> -</span> - -<!-- -Search bar ---> - -<div class="input-group"> - <span id="basic-addon1" class="input-group-addon" ><span class="glyphicon glyphicon-search"></span></span> - <input id="filter-app-cards" type="text" class="form-control" placeholder="Search for apps..." aria-describedby="basic-addon1"/> - <div class="input-group-btn"> - <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> - <span id="current-quality-filter" data-filter="decent">Only decent quality apps</span> <span class="caret"></span> - </button> - - <ul class="dropdown-menu"> - <li><a href="#" data-quality-filter="high">Only high quality apps</a></li> - <li><a href="#" data-quality-filter="decent">Only decent quality apps</a></li> - <li><a href="#" data-quality-filter="working">Only working apps</a></li> - <li><a href="#" data-quality-filter="none">All apps</a></li> - </ul> - </div> -</div> -<br /> - -<!-- -Disclaimers ---> - -<div class="alert alert-info">The application packaging team will welcome your feedback! If you install an app and find issues or possible improvements, do not hesitate to contribute by reporting your issues directly on the code repositories.</div> - -<div id="bad-quality-apps-disclaimer" class="alert alert-warning"> - Applications with a level below or equal to 4 may be working, but they might be not well-integrated with YunoHost, or they do not respect the recommended packaging practices. -</div> - -<div id="broken-apps-disclaimer" class="alert alert-danger"> - Applications with level 0, or flagged as <span class="label label-warning label-as-badge">inprogress</span>, <span class="label label-danger label-as-badge">notworking</span> are still in development or are know to not be working. **Do not install them** in a production environment! -</div> - -<div id="app-cards-list" class="app-cards-list"></div> - -<div class="alert alert-warning">If you don't find the app you are looking for, you can try to look for a appname_ynh repository on Github or on the internet, or add it to the <a href="/apps_wishlist">apps wishlist</a>.</div> - -<!-- -Custom CSS for this page ---> - -<style> -/*================================================= - Search bar -=================================================*/ -#filter-app-cards, #app-cards-list { - width:100%; -} -/*===============================================*/ - -/*================================================= - Force return space after card list -=================================================*/ -#app-cards-list:after { - content:''; - display:block; - clear: both; -} -/*===============================================*/ - -/*================================================= - App card -=================================================*/ -.app-card { - margin-bottom:20px; - width:270px; - float:left; - min-height: 1px; - margin-right: 10px; - margin-left: 10px; - border-radius: 3px; -} -/*===============================================*/ - -/*================================================= - App card body -=================================================*/ -.app-card .panel-body > h3 { - margin-top:0; - margin-bottom:5px; - font-size:1.2em; -} -.app-card .app-badges { - height:35px; -} -.app-card .app-badges .label, .app-card-date-maintainer { - font-size:0.6em; -} - -.label-epic { - background-color: darkorchid; -} - -.app-card-date-maintainer { - text-align:right; - max-height: 18px; - margin-bottom: 3px; - margin-right: 7px; - margin-top: -5px; -} - -.app-card .unmaintained { - color: #e0aa33; -} - -.app-card-desc { - height:100px; - overflow: hidden; -} -/*===============================================*/ - -/*================================================= - App card footer -=================================================*/ -.app-card .btn-group { - width:100%; - margin-left: 0px; -} -.app-card > .btn-group > .btn{ - border-bottom:0; - font-size: 0.9em; - line-height: 1.58; -} -.app-card > .btn-group > .btn:first-child { - border-left:0; - border-top-left-radius:0; -} -.app-card > .btn-group > .btn:last-child { - border-right:0; - border-top-right-radius:0; - margin-left: 0px; - width: 33.6%; -} -/*===============================================*/ -</style> - -<!-- -App card template ---> - -<script type="text/template" id="app-template2"> - <div class="app-card_{app_id} app-card panel panel-default" data-quality="{app_quality}"> - - <div class="panel-body"> - <h3>{app_name}</h3> - <div class="app-badges"></div> - - <div class="app-card-desc">{app_description}</div> - </div> - <div class="app-card-date-maintainer"> - <span class="glyphicon glyphicon-refresh"></span> {app_update} - - <span title="{maintained_help}" class="{maintained_state}"><span class="glyphicon glyphicon-{maintained_icon}"></span> {app_maintainer}</span> - </div> - <div class="btn-group" role="group"> - <a href="{app_git}" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Code</a> - <a href="#/app_{app_id}_en" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-book" aria-hidden="true"></span> Doc</a> - <a href="https://install-app.yunohost.org/?app={app_id}" target="_BLANK" type="button" class="btn btn-{app_install_css_style} col-sm-4 active"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Install</a> - </div> - - </div> -</script> - -<!-- -Javascript helpers ---> - -<script> - -function timeConverter(UNIX_timestamp) { - var a = new Date(UNIX_timestamp*1000); - var months = ['January','February','March','April','May','June','July','August','September','October','November','December']; - var year = a.getFullYear(); - var month = months[a.getMonth()]; - var date = a.getDate(); - var hour = a.getHours(); - var min = a.getMinutes(); - if (hour < 10) { hour = '0' + hour; } - if (min < 10) { min = '0' + min; } - var time = date+' '+month+' '+year;//+' at '+hour+':'+min - return time; -} - - -$(document).ready(function () { - - // Hide warrant about states when we're using the default filter - $('#state-disclaimer').hide(); - var quality_filters = "decent"; - - function filter(){ - - var current_quality_filter = $('#current-quality-filter').data("filter"); - var user_input_in_search_field = $('#filter-app-cards').val().toLowerCase(); - - $('.app-card').each(function() { - // This is where we actually define how apps are filtered: - // we look for the name of the app (h3) and try to find the user input - // + we check this app match the current quality filter - var app_name = $(this).find('h3').text().toLowerCase(); - if (app_name.indexOf(user_input_in_search_field) >= 0 && $(this).data("quality").indexOf(current_quality_filter) >= 0) - { - $(this).show(); - } - else - { - $(this).hide(); - } - }); - - // Display or hide the disclaimers depending on the current filter... - ((current_quality_filter == "working") || (current_quality_filter == "none")) ? $("#bad-quality-apps-disclaimer").show() : $("#bad-quality-apps-disclaimer").hide(); - ((current_quality_filter == "none")) ? $("#broken-apps-disclaimer").show() : $("#broken-apps-disclaimer").hide(); - } - - //================================================= - // Search & filter bar event - //================================================= - $('#filter-app-cards').keyup(filter); - - $('a[data-quality-filter]').on("click", function(){ - $('#current-quality-filter').text($(this).text()); - $('#current-quality-filter').data("filter", $(this).data("quality-filter")); - filter(); - }); - - filter(); - - //================================================= - // Upload apps lists - //================================================= - var catalog = undefined; - - // Fetch application catalog - - $.getJSON('https://app.yunohost.org/apps.json', {}, function(data) { - - catalog = $.map(data, function(el) { return el; }); - - // Clarify high quality state, and level if undefined or inprogress or notworking... - - $.each(catalog, function(k, infos) { - if ((infos.level === undefined) || (infos.state === "inprogress") || (infos.state === "notworking")) { - infos.level = null; - } - if ((infos.high_quality === true) && (infos.level === 8)) { - infos.state = "high quality"; - } - }); - - // Sort apps according to their state and level... - - catalog.sort(function(a, b){ - a_state = (a.state === "high quality")?4:(a.level > 4)?3:(a.state > 0)?2:1; - b_state = (b.state === "high quality")?4:(b.level > 4)?3:(b.state > 0)?2:1; - if (a_state < b_state || a_state == b_state && a.level < b.level || a_state == b_state && a.level == b.level && a.manifest.id > b.manifest.id) {return 1;} - else if (a.manifest.id == b.manifest.id) {return 0;} - return -1; - }); - - // Add the card for each app - - $.each(catalog, function(k, infos) { - - app_id = infos.manifest.id; - - // Define what style to use for state, level and install button - // according to the app quality .... - - if (infos.state === "high quality") { - app_quality = "high,decent,working,none"; - app_state_css_style = "epic"; - app_install_css_style = "success"; - app_level_css_style = "epic"; - } else if (infos.level > 4) { - app_quality = "decent,working,none"; - app_state_css_style = "success"; - app_install_css_style = "success"; - app_level_css_style = "success"; - } else if (infos.level > 0) { - app_quality = "working,none"; - app_state_css_style = "success"; - app_install_css_style = "warning"; - app_level_css_style = "warning"; - } else { - app_quality = "none"; - if (infos.state === "working") { - app_state_css_style = "success"; - } - else if (infos.state === "inprogress") { - app_state_css_style = "warning"; - } - else { - app_state_css_style = "danger"; - } - app_install_css_style = "danger"; - app_level_css_style = "danger"; - } - - // If level is null, we wanna display '?' - if (infos.level == null) { - infos.level = '?'; - } - - // Fill the template - html = $('#app-template2').html() - .replace(/{app_id}/g, app_id) - .replace(/{app_name}/g, infos.manifest.name) - .replace('{app_description}', infos.manifest.description.en) - .replace(/{app_git}/g, infos.git.url) - .replace('{app_branch}', infos.git.branch) - .replace('{app_level}', infos.level) - .replace('{app_quality}', app_quality) - .replace('{app_update}', timeConverter(infos.lastUpdate)) - .replace('{app_state_css_style}', app_state_css_style) - .replace('{app_install_css_style}', app_install_css_style); - - // Handle the maintainer info - if (infos.maintained == false) - { - html = html - .replace('{maintained_state}', 'unmaintained') - .replace('{maintained_icon}', 'warning-sign') - .replace('{app_maintainer}', "Unmaintained") - .replace('{maintained_help}', "This package is currently unmaintained. Feel free to propose yourself as the new maintainer !"); - } - else { - html = html - .replace('{maintained_state}', 'maintained') - .replace('{maintained_icon}', 'user') - .replace('{maintained_help}', "Current maintainer of this package"); - - if ((infos.manifest.developer) && (infos.manifest.developer.name)) { - html = html.replace('{app_maintainer}', infos.manifest.developer.name); - } - else if ((infos.manifest.maintainer) && (infos.manifest.maintainer.name)) { - html = html.replace('{app_maintainer}', infos.manifest.maintainer.name); - } - else { - html = html.replace('{app_maintainer}', "???"); - } - } - - // Fill the template - $('#app-cards-list').append(html); - $('.app-card_'+ app_id).attr('id', 'app-card_'+ app_id); - $('.app-card_'+ app_id + ' .app-badges').append(' <span class="label label-'+app_state_css_style+' label-as-badge app-'+infos.state+'">'+infos.state+'</span>'); - if ((infos.state === "high quality") || (infos.state === "working")) { - $('.app-card_'+ app_id + ' .app-badges').append(' <span class="label label-'+app_level_css_style+' label-as-badge">level '+infos.level+'</span>'); - } - - }); - - filter(); - }); - //================================================= -}); -</script> diff --git a/apps_wishlist.md b/apps_wishlist.md deleted file mode 100644 index 9acc494c..00000000 --- a/apps_wishlist.md +++ /dev/null @@ -1,159 +0,0 @@ -# Apps wishlist - -<div class="alert alert-info">Before to add an app in wishlist please check your app is not already in official or community list: see the <a href="/apps">apps list</a></div> - -The following list is a compiled wishlist of applications that would be nice-to-have. - -[Edit this list](/write_documentation) to add your own favorite app, or learn to [package apps](/packaging_apps) yourself. - -- [List of awesome selfhosted apps](https://github.com/Kickball/awesome-selfhosted) -- [List of awesome sysadmin apps](https://github.com/kahun/awesome-sysadmin) -- [List of awesome Node.js projects](https://github.com/sqreen/awesome-nodejs-projects) -- [List of SIP softwares/applications](https://en.wikipedia.org/wiki/List_of_SIP_software#Free_and_open-source_license) -- [10er10](https://github.com/dready92/10er10) -- [Ajenti](http://ajenti.org) / [github](https://github.com/ajenti/ajenti/) -- [Akaunting](https://akaunting.com) Everything you need to manage your finances. Keep track of all of your payments, invoices, expenses, etc. / [github](https://github.com/akaunting/akaunting) -- [Auth0 SSO Dashboard](https://github.com/auth0-extensions/auth0-sso-dashboard-extension) -- [Bitmessage](https://bitmessage.org/wiki/Compiling_instructions) / [github](https://github.com/Bitmessage/PyBitmessage) -- [Beehive](https://github.com/muesli/beehive) -- [BigBlueButton](https://bigbluebutton.org) / [install instruction](http://docs.bigbluebutton.org/2.2/install.html) / [github](https://github.com/bigbluebutton/bigbluebutton) Complete open source web conferencing system. -- [Bludit](https://www.bludit.com) / [github](https://github.com/bludit/bludit) -- [Blynk](https://github.com/blynkkk/blynk-library) -- [Bookstack](https://www.bookstackapp.com/) / [github](https://github.com/BookStackApp/BookStack) -- [btcpayserver](https://github.com/btcpayserver/btcpayserver) -- [cgit](http://git.zx2c4.com/cgit/about) -- [CheckUp](https://sourcegraph.github.io/checkup) / [github](https://github.com/sourcegraph/checkup) -- [citadel-suite - Debian](https://packages.debian.org/stretch/citadel-suite) / [citadel easyinstall - citadel.org](http://www.citadel.org/doku.php?id=installation:easyinstall:easyinstall) Citadel is a complete and feature-rich open source groupware platform. Directly descending from a well known C/PM BBS system, it has a venerable [history](http://www.citadel.org/doku.php?id=documentation:citadel_past_present_and_future#citadel.past.present.and.future) -- [Cockpit](http://cockpit-project.org/) -- [Commafeed](https://github.com/Athou/commafeed) -- [Converse.js](https://conversejs.org) / [github](https://github.com/jcbrand/converse.js) -- [Couchdb](https://couchdb.apache.org/) databases creation and management -- [Cozy](https://github.com/cozy) -- [Croodle](https://github.com/jelhan/croodle) Schedule a date or to do a poll on a general topics, with client-side encryption. -- [Darkwire.io](https://github.com/seripap/darkwire.io) -- [DirectoryLister](https://github.com/DirectoryLister/DirectoryLister) -- [Draw.io](https://github.com/jgraph/drawio) : a diagram online creator -- [EasyAppointments](https://easyappointments.org/) Online appointment booker (similar to Doodle) -- [eLabFTW](https://www.elabftw.net/) electronic lab notebook / [github](https://github.com/elabftw/elabftw) -- [Emoncms](https://github.com/emoncms/emoncms) -- [ERPnext](https://erpnext.com/download) / [github](https://github.com/frappe/erpnext) -- [EteSync](https://www.etesync.com/) / [github](https://github.com/etesync) -- [Epicyon](https://epicyon.net/) / [gitlab](https://gitlab.com/bashrc2/epicyon) -- [Ferdi server](https://github.com/getferdi/server) is the server to self host the data and configuration of the [ferdi](https://getferdi.com/) messaging aggregator client. -- [FEX](http://fex.rus.uni-stuttgart.de/) -- [FitTrackee](https://github.com/SamR1/FitTrackee) -- [Fossil](http://www.fossil-scm.org) -- [WebThings Gateway](https://iot.mozilla.org/gateway/) [github](https://github.com/mozilla-iot/) -- [Gancio](https://gancio.org/) / [framagit](https://framagit.org/les/gancio) -- [Geneweb](https://geneweb.tuxfamily.org) / [github](https://github.com/geneweb/geneweb) -- [GetSimple CMS](http://get-simple.info) / [github](https://github.com/GetSimpleCMS/GetSimpleCMS) -- [Goaccess](https://goaccess.io) Web log analyser (replaces piwik without js tracking scripts) / [github](https://github.com/allinurl/goaccess) -- [Gollum](https://github.com/gollum/gollum) -- [Goploader](https://github.com/Depado/goploader) -- [Granary](https://github.com/snarfed/granary) -- [Guacamole](http://guacamole.apache.org/) -- [Habitica](https://habitica.com/) / [github](https://github.com/HabitRPG/habitica) -- [HackMD CE](https://github.com/hackmdio/hackmd) -- [Helpy](https://github.com/helpyio/helpy) -- [Hexo](https://hexo.io/) / [github](https://github.com/hexojs/hexo) -- [Icecast 2](http://www.icecast.org) / [gitlab](https://gitlab.xiph.org/xiph/icecast-server/) -- [ikiwiki](http://ikiwiki.info) -- [Invidious](https://github.com/omarroth/invidious) -- [Invoice Ninja](https://www.invoiceninja.com) / [github](https://github.com/invoiceninja/invoiceninja) -- [InvoicePlane](https://invoiceplane.com) / [github](https://github.com/InvoicePlane/InvoicePlane) -- [IPFS](https://ipfs.io) / [github](https://github.com/ipfs/ipfs) -- [Jellyfin](https://github.com/jellyfin) -- [JS Bin](http://jsbin.com/help/2-second-setup) / [github](https://github.com/jsbin/) -- [Joplin](http://joplin.cozic.net/) / [github](https://github.com/laurent22/joplin) -- [Joplin-web](https://github.com/foxmask/joplin-web) / [github](https://github.com/foxmask/joplin-web) -- [Kiwix](http://www.kiwix.org/) Offline wikipedia / [github](https://github.com/kiwix/) -- [Known](https://withknown.com) / [github](https://github.com/idno/known) -- [Koel](http://koel.phanan.net) / [github](https://github.com/phanan/koel) -- [Kontalk](https://kontalk.org) / [github](https://github.com/kontalk) -- [Koozip](http://koozic.net) / [github](https://github.com/DocMarty84/koozic) -- [L'atelier](https://github.com/jbl2024/latelier) -- [Lemmy](https://dev.lemmy.ml) / [github](https://github.com/dessalines/lemmy) A federated alternative to reddit. -- [Lessy](https://lessy.io) / [github](https://github.com/lessy-community/lessy) -- [LibreOffice Online](https://wiki.documentfoundation.org/ReleaseNotes/5.3/fr#LibreOffice_Online) -- [LiquidSoap](http://savonet.sourceforge.net/) / [github](https://github.com/savonet/liquidsoap) -- [LocomotiveCMS](https://github.com/locomotivecms/engine) -- [Loomio](https://www.loomio.org) / [github](https://github.com/loomio/loomio/) -- [MaidSafe](http://maidsafe.net) / [github](https://github.com/maidsafe) -- [Mailpile](https://www.mailpile.is) / [github](https://github.com/mailpile/Mailpile) -- [Mailtrain](https://mailtrain.org/) / [github](https://github.com/Mailtrain-org/mailtrain) -- [Mautic](https://github.com/mautic/mautic) -- [microblog.pub](https://microblog.pub) / [github](https://github.com/tsileo/microblog.pub) -- [Mirakel](http://mirakel.azapps.de/taskwarrior.html) / [github](https://github.com/GothenburgBitFactory/taskwarrior) (/!\ SSL-Warning) -- [Modoboa](http://modoboa.org) / [github](https://github.com/modoboa/) -- [MotionEye](https://github.com/ccrisan/motioneye) -- [MPD](http://www.musicpd.org) -- [MyBB](https://mybb.com/) / [github](https://github.com/mybb) -- [Museek+](https://github.com/eLvErDe/museek-plus) -- [N8n.io](https://n8n.io) -- [Netrunner](https://github.com/mtgred/netrunner) -- [Nibbleblog](http://www.nibbleblog.com)/ [github](https://github.com/dignajar/nibbleblog) -- [Nuage](https://nuage.kerjean.me/login) / [github](https://github.com/mickael-kerjean/filestash) -- [OhMyForm](https://github.com/ohmyform) (Only support Docker install way and some VPS aren't compatible, see TellForm which support non-Docker install but is discontinued) -- [Ombi](https://github.com/tidusjar/Ombi) -- [Omeka S](https://omeka.org/s/) / [github](https://github.com/omeka/omeka-s) -- [OpenBazaar](https://openbazaar.org) / [github](https://github.com/openbazaar) -- [OpenCart](https://www.opencart.com) / [github](https://github.com/opencart/opencart) -- [openHAB](https://www.openhab.org/) - Smart home platform. / [github](https://github.com/openhab) -- [OpenProject](https://github.com/opf/openproject) -- [OpenSourceBilling](https://github.com/vteams/open-source-billing) -- [OX Open-Xchange](https://www.open-xchange.com) Linux groupware solution / [github](https://github.com/open-xchange/) -- [Paperless](https://github.com/danielquinn/paperless) -- [Paperwork](http://paperwork.rocks) -- [Passbolt](https://www.passbolt.com) Passwords manager / [github](https://github.com/passbolt) -- [Pelias](https://github.com/pelias/pelias)) -- [PHPList](http://www.phplist.com) / [github](https://github.com/phpList) -- [Phraseanet](https://docs.phraseanet.com/3.8/fr/index.html#) / [github](https://github.com/alchemy-fr/Phraseanet-Docs) -- [Pico](http://picocms.org) / [github](https://github.com/picocms/Pico) -- [Playmaker](https://github.com/NoMore201/playmaker) -- [Presentator](https://presentator.io/) A design presentation and collaboration platform. -- [Privoxy](http://www.privoxy.org) -- [ProcessMaker](http://www.processmaker.com) -- [ProtonMail’s WebClient](https://github.com/ProtonMail/WebClient) -- [PyLoad](https://github.com/pyload/pyload) -- [Pump.io](http://pump.io) / [github](https://github.com/pump-io/pump.io) -- [qBittorrent](https://github.com/qbittorrent/qBittorrent) -- [racktables](http://racktables.org) / [github](https://github.com/RackTables/racktables) -- [Radarr](https://github.com/Radarr/Radarr) -- [Request Tracker](https://bestpractical.com) / [github](https://github.com/bestpractical/rt) -- [Restya](http://restya.com) / [github](https://github.com/RestyaPlatform/board/) -- [Retroshare](https://retroshare.cc/) / [github](https://github.com/RetroShare/RetroShare) -- [ScenariChain-server](https://download.scenari.software/SCENARIchain-server/) -- [Scuttlebutt Pub](https://www.scuttlebutt.nz/contributing) -- [ShareLatex](https://www.sharelatex.com) / [github](https://github.com/overleaf/overleaf) -- [Schleuder](https://schleuder.org/schleuder/docs/concept.html)(Schleuder is a gpg-enabled mailing list manager with resending capabilities.) -- [SocialHome](https://github.com/jaywink/socialhome) (Socialhome is best described as a federated personal profile with social networking functionality) (https://socialhome.network) -- [smokeping](https://packages.debian.org/buster/smokeping) / [github](https://github.com/oetiker/SmokePing) -- [Sonarr](https://sonarr.tv) / [github](https://github.com/Sonarr/Sonarr) -- [Stackedit](https://stackedit.io) / [github](https://github.com/benweet/stackedit) -- [StandardNotes](https://standardnotes.org) (a clean, simple, E2E-encrypted notes app) -- specifically, the server-side [StandardFile](https://standardfile.org) portion / [github](https://github.com/standardnotes/web) -- [Streisand](https://github.com/jlund/streisand) -- [Subspace](https://github.com/subspacecloud/subspace) (A simple WireGuard VPN server GUI) -- [Syspass](http://www.syspass.org/) / [github](https://github.com/nuxsmin/sysPass) -- [Taiga](https://taiga.io) / [github](https://github.com/taigaio/) -- [Taskwarrior](https://taskwarrior.org) / [github](https://github.com/GothenburgBitFactory/taskwarrior) -- [Technitium DNS](https://technitium.com/dns/) / [github](https://github.com/TechnitiumSoftware/DnsServer) -- [TellForm](https://github.com/tellform/tellform) (Discontinued (see OhMyForm) but it can be great to have it since OhMyForm does only support Docker install) -- [TMate](https://tmate.io/) / [github](https://github.com/tmate-io/tmate) -- [Tracim](https://github.com/tracim/tracim) -- [Thredded](https://thredded.org/) / [github](https://github.com/thredded/thredded) -- [Twister](http://twister.net.co) / [github](https://github.com/miguelfreitas/twister-core/) -- [TwitRSS.me](http://twitrss.me/) / [Github](https://github.com/ciderpunx/twitrssme) Scrapes Twitter to create RSS feeds. -- [Uwazi](https://www.uwazi.io/) / [Github](https://github.com/huridocs/uwazi) -- [Volumio](https://volumio.org) / [github](https://github.com/volumio) -- [WebODF](http://webodf.org) / [github](https://github.com/webodf/WebODF) -- [Webhook.site](https://docs.webhook.site/) / [github](https://github.com/fredsted/webhook.site) -- [Wireguard](https://www.wireguard.com/) / [git](https://git.zx2c4.com/WireGuard/) -- [Xibo](https://github.com/xibosignage) - A FLOSS digital signage solution (CMS?) -- [Xonotic](http://xonotic.org) / [gitlab](https://gitlab.com/xonotic) -- [YesWiki](https://yeswiki.net) / [github](https://github.com/YesWiki/yeswiki) -- [Zammad](https://github.com/zammad/zammad) -- [ZeroTier](https://github.com/zerotier/ZeroTierOne) -- [Zoneminder](https://github.com/ZoneMinder/zoneminder) -- [Zulip](https://zulipchat.com/) / [github](https://github.com/zulip/zulip) -- [Yggdrasil](https://yggdrasil-network.github.io/) / [github](https://github.com/yggdrasil-network/yggdrasil-go) -- [WiseMapping](http://www.wisemapping.com/inyourserver.html) / [developpement](https://bitbucket.org/wisemapping/wisemapping-open-source) diff --git a/appsdoc.md b/appsdoc.md deleted file mode 100644 index aadd5eb7..00000000 --- a/appsdoc.md +++ /dev/null @@ -1,33 +0,0 @@ -- [Baikal](app_baikal) -- [Blogotext](app_blogotext) -- [Collabora (Docker)](app_collaboradocker) -- [Custom Webapp](app_my_webapp) -- [Dokuwiki](app_dokuwiki) -- [FirefoxSync](app_ffsync) -- [Fireflyiii](app_firefly_iii) -- [FluxBB](app_fluxbb) -- [Gogs](app_gogs) -- [Hextris](app_hextris) -- [Jappix](app_jappix) -- [Limesurvey](app_limesurvey) -- [Mediawiki](app_mediawiki) -- [Minidlna](app_minidlna) -- [Netdata](app_netdata) -- [Nextcloud](app_nextcloud) -- [Noalyss](app_noalyss) -- [Peertube](app_peertube) -- [Pihole](app_pihole) -- [Piwigo](app_piwigo) -- [Pleroma](app_pleroma) -- [Pluxml](app_pluxml) -- [Radicale](app_radicale) -- [Rainloop](app_rainloop) -- [Sogo](app_sogo) -- [Spip](app_spip) -- [Transmission](app_transmission) -- [TinyTinyRSS](app_ttrss) -- [Wallabag2](app_wallabag2) -- [Webtrees](app_webtrees) -- [Yunofav](app_yunofav) -- (Note that you can add a new page here if you want to start document in another `app...)) - diff --git a/boot_and_graphical_install.md b/boot_and_graphical_install.md deleted file mode 100644 index de3b7dec..00000000 --- a/boot_and_graphical_install.md +++ /dev/null @@ -1,52 +0,0 @@ -# Graphical installation - -Now that your YunoHost install medium, you can start with the installation. - -## <small>1.</small> Plug the network cable - -If you want the network configuration to be set up automatically, you have to plug your server with an **Ethernet** cable **right behind your main router**. - -The wireless connections are not supported yet, and if you use intermediate routers, the network ports opening will not be automatic: Your server will not be accessible externally. - - -## <small>2.</small> Boot on CD / USB stick - -Boot up your server with the USB stick or a CD-ROM inserted, and select it as **bootable device** by pressing one of the following keys (hardware specific): -```<ESC>```, ```<F9>```, ```<F10>```, ```<F11>```, ```<F12>``` or ```<DEL>``` - -## <small>3.</small> Launch graphical installation - -You should see a screen like this: - -<img src="/images/virtualbox_3.png"> - - -* Select `Graphical install` - -* Select your language, your location and your keyboard layout - -* If a partitioning screen appears, confirm. - - <div class="alert alert-danger"><b>Caution:</b> This will totally erase the data on your hard drive</div> - - -* Let the installer do the rest, it will download required packages and install them. - - <div class="alert alert-info">If it fails, you probably have an Internet connection issue. -Check that your computer is physically connected and retry.</div> - -* It should reboot automatically. - -## <small>4.</small> Log in - -After the reboot, you should see a black screen with a few words asking you to -log in. You can log with the following credentials : - -* User: **root** -* Password: **yunohost** - -## <small>5.</small> Proceed to post-installation - -<a class="btn btn-lg btn-default" href="/postinstall">Post-install documentation</a> - - diff --git a/boot_and_graphical_install_fr.md b/boot_and_graphical_install_fr.md deleted file mode 100644 index 96f1287d..00000000 --- a/boot_and_graphical_install_fr.md +++ /dev/null @@ -1,50 +0,0 @@ -# Installation graphique - -Maintenant que vous possédez un support YunoHost, vous pouvez procéder à l’installation. - -## <small>1.</small> Brancher le câble réseau - -Si vous souhaitez que la configuration réseau soit configurée automatiquement, vous devez brancher votre serveur avec un câble **Ethernet** directement **derrière votre routeur (ou box) principal**. - -Les connexions sans-fil ne sont pas supportées pour le moment, et si vous utilisez des routeurs intermédiaires, l’ouverture des ports réseau ne se fera pas automatiquement : votre serveur ne sera pas accessible depuis l’extérieur. - -## <small>2.</small> Démarrer sur le CD/la clé USB - -Démarrez votre serveur avec la clé USB ou le CD-ROM inséré, et sélectionnez-le comme **périphérique de démarrage** en pressant l’une des touches suivantes (dépendant de votre ordinateur) : -```<Échap>```, ```<F9>```, ```<F10>```, ```<F11>```, ```<F12>``` or ```<Suppr>``` - -## <small>3.</small> Lancer l’installation graphique - -Vous devriez voir un écran comme ça : - -<img src="/images/virtualbox_3.png"> - - -* Sélectionnez `Graphical install` - -* Sélectionnez votre langue, votre localisation et votre agencement de clavier. - -* Si un écran de partitionnement apparaît, confirmez simplement. - - <div class="alert alert-danger"><b>Attention :</b> Cette opération effacera totalement les données sur votre disque dur</div> - -* Laissez l’installateur faire le reste, il téléchargera les paquets requis et les installera. - - <div class="alert alert-info">Si cette opération échoue, vous avez probablement un problème de connexion à Internet. -Vérifiez que votre serveur est bien branché et réessayez.</div> - -* L’ordinateur devrait redémarrer automatiquement à la fin de l’installation. - -## <small>4.</small> Log in - -Après avoir redémarré, votre machine devrait afficher un écran noir avec -quelques mots vous invitant à vous identifier. Vous pouvez utiliser les -identifiants suivants : - -* User: **root** -* Password: **yunohost** - -## <small>5.</small> Procéder à la post-installation - -<a class="btn btn-lg btn-default" href="/postinstall">Documentation de la post-installation</a> - diff --git a/burn_or_copy_iso.md b/burn_or_copy_iso.md deleted file mode 100644 index f24af473..00000000 --- a/burn_or_copy_iso.md +++ /dev/null @@ -1,47 +0,0 @@ -# Flashing the YunoHost ISO on a USB stick or CD/DVD - -Now that you downloaded the ISO image of YunoHost, you should flash/burn it on a physical medium. Typically, this is done on a **USB stick** but you might want to use a **CD/DVD** for older machines. - -<img src="/images/usb_key.png" width=150> -<img src="/images/cd.jpg" width=150> - ---- - -## USB stick - -### With Etcher - -Download <a href="https://etcher.io/" target="_blank">Etcher</a> for your operating system and install it. - -<img src="/images/etcher.gif"> - -Plug your USB stick, select your YunoHost ISO and click "Flash" - -### With UNetbootin - -Download <a href="https://unetbootin.github.io/">UNetbootin</a> for your operating system and install it. - -<img src="/images/unetbootin.png"> - -Put your USB stick on, select your YunoHost ISO and click "OK" - -### With `dd` - -If you know your way around command line, you may also flash your USB stick with -`dd`. Assuming your USB stick is `/dev/sdz` (be careful !!), you may run : - -```bash -dd if=/path/to/yunohost.iso of=/dev/sdz -``` - ---- - -## CD/DVD - -The software to use differs regarding your operating system. - -* On Windows, use [ImgBurn](http://www.imgburn.com/) to write the image file on the disc - -* On Mac OS, use [Disk Utility](http://support.apple.com/kb/ph7025) - -* On GNU/Linux, you have plenty of choices, like [Brasero](https://wiki.gnome.org/Apps/Brasero) or [K3b](http://www.k3b.org/) diff --git a/burn_or_copy_iso_fr.md b/burn_or_copy_iso_fr.md deleted file mode 100644 index c2849fbe..00000000 --- a/burn_or_copy_iso_fr.md +++ /dev/null @@ -1,48 +0,0 @@ -# Flasher l'ISO YunoHost sur une clef USB ou un CD/DVD - -Maintenant que vous avez téléchargé l’image ISO de YunoHost, vous devez la mettre sur un support physique. Classiquement, il s'agit d'une **Clé USB** mais pour certaines raisons vous pouvez aussi utiliser un **CD/DVD**. - -<img src="/images/usb_key.png" width=150> -<img src="/images/cd.jpg" width=150> - ---- - -## Clé USB - -### Avec Etcher - -Téléchargez <a href="https://etcher.io/" target="_blank">Etcher</a> pour votre système d'exploitation et installez-le. - -<img src="/images/etcher.gif"> - -Branchez votre clef USB, selectionnez l'ISO YunoHost puis cliquez sur 'Flash' - -### Avec UNetbootin - -Téléchargez <a href="https://unetbootin.github.io/">UNetbootin</a> pour votre système d'exploitation et installez-le. - -<img src="/images/unetbootin.png"> - -Branchez votre clef USB, selectionnez l'ISO YunoHost puis cliquez sur 'OK' - -### Avec `dd` - -Si vous êtes familier avec la ligne de commande, il est possible de flasher la -clef USB avec `dd`. En supposant que votre clef USB soit `/dev/sdz` (faites -attention !!), vous pouvez exécuter : - -```bash -dd if=/chemin/de/yunohost.iso of=/dev/sdz -``` - ---- - -## CD/DVD - -Le logiciel à utiliser est différent suivant votre système d’exploitation. - -* Sur Windows, utilisez [ImgBurn](http://www.imgburn.com/) pour écrire l’image sur le disque - -* Sur Mac OS, utilisez [Disk Utility](http://support.apple.com/kb/ph7025) - -* Sur GNU/Linux, vous avez plusieurs choix, tels que [Brasero](https://wiki.gnome.org/Apps/Brasero) ou [K3b](http://www.k3b.org/) diff --git a/certificate_custom.md b/certificate_custom.md deleted file mode 100644 index 29b129cb..00000000 --- a/certificate_custom.md +++ /dev/null @@ -1 +0,0 @@ -Unfortunately, this page only exists [in french here](certificate_custom_fr) for now. diff --git a/change_admin_password.md b/change_admin_password.md deleted file mode 100644 index e1feb7f9..00000000 --- a/change_admin_password.md +++ /dev/null @@ -1,21 +0,0 @@ -#Change administration password - -For security reasons you may have to change your administration password. To achieve this, 2 different methods exists. - -<div class="alert alert-warning"> -<span class="glyphicon glyphicon-warning-sign"></span> -The current administration password is **required** to perform this task. -</div> - -##Web administration - -First, connect to your [web administration](/admin). - -Then go to `Tools` > `Change administration password`. - - -##Command line - -```bash -yunohost tools adminpw -``` diff --git a/change_admin_password_fr.md b/change_admin_password_fr.md deleted file mode 100644 index f92f7c71..00000000 --- a/change_admin_password_fr.md +++ /dev/null @@ -1,26 +0,0 @@ -#Changer le mot de passe d’administration - -Pour des raisons de sécurité vous pouvez avoir besoin de changer votre mot de passe d’administration. Pour cela, deux méthodes sont possibles. - -<div class="alert alert-warning"> -<span class="glyphicon glyphicon-warning-sign"></span> -Le mot de passe d’administration actuel est **requis** pour effectuer cette modification. -</div> - -##Administration web - -Premièrement, connectez-vous à [l’administration web](/admin). - -Puis allez dans la section `Outils` > `Changer le mot de passe d’administration`. - -##Ligne de commande - -```bash -yunohost tools adminpw -``` - -Si vous avez oublié votre mot de passe, utilisez plutôt: - -```bash -yunohost-reset-ldap-password -``` diff --git a/commandline.md b/commandline.md deleted file mode 100644 index 47bbb507..00000000 --- a/commandline.md +++ /dev/null @@ -1,30 +0,0 @@ -# Administrate YunoHost in command line - -The command line interface (CLI) is, in the computer world, the original (and more technical) way of interacting with a computer compared to graphical interface. Command line interfaces are generally said to be more complete, powerful or efficient than a graphical interface, though it is more difficult to learn. - -In the context of YunoHost, or system administration in general, the CLI is commonly used to remotely control machines after connecting through [connecting to it via SSH](/ssh). - -<div class="alert alert-info" markdown="1"> -Providing a full tutorial about the command line is quite beyond the scope of the YunoHost documentation : for this, consider reading a dedicated tutorial such as [this one](https://ryanstutorials.net/linuxtutorial/) or [this one](http://linuxcommand.org/). But be reassured that you don't need to be a CLI expert to start using it ! -</div> - -The `yunohost` command can be used to administrate your server and perform the various actions similarly to what you do on the webadmin. The command must be launched either from the `root` user or from the `admin` user by preceeding them with `sudo`. (ProTip™ : you can become `root` with the command `sudo su` as `admin`). - -YunoHost commands usually have this kind of structure : - -```bash -yunohost app install wordpress --label Webmail - ^ ^ ^ ^ - | | | | - category action argument options -``` - -Don't hesitate to browse and ask for more information about a given category or action using the the `--help` option. For instance, those commands : - -```bash -yunohost --help -yunohost user --help -yunohost user create --help -``` - -will successively list all the categories available, then the actions available in the `user` category, then the usage of the action `user create`. You might notice that the YunoHost command tree is built with a structure similar to the YunoHost admin pages. diff --git a/commandline_es.md b/commandline_es.md deleted file mode 100644 index 83db3878..00000000 --- a/commandline_es.md +++ /dev/null @@ -1,30 +0,0 @@ -# Administrar YunoHost con la interfaz de línea de comandos - -La interfaz de línea de comandos (CLI) es, en informática, la manera original (y más técnica) de interactuar con un ordenador. Está generalmente considera como más completa, más potente y eficaz que las interfaces gráficas, aunque sea más difícil de aprenderla. - -En el contexto de Yunohost, o de la administración de sistemas en general, la línea de comandos comúnmente se utiliza después de haberse [conectado en SSH](/ssh). - -<div class="alert alert-info" markdown="1"> -Proveer un tutorial completo sobre la línea de comandos saldría del marco de la documentación de Yunohost : por eso, refiérete a totorales como [éste](https://www.fing.edu.uy/inco/cursos/sistoper/recursosLaboratorio/tutorial0.pdf) o [éste (en)](http://linuxcommand.org/). Pero no te preocupes : no hace falta ser un experto para comenzar a utilizarla ! -</div> - -El comando `yunohost` puede ser utilizado para administrar tu servidor o realizar las mismas acciones que en la interfaz gráfica webadmin. Hay que iniciarla como usuario `root`, o como el usuario `admin` poniendo `sudo` antes del comando. (ProTip™ : puedes convertirte en usuario `root` vía el comando `sudo su` cuando eres `admin`.) - -Los comandos Yunohost tienen este tipo de estructura : - -```bash -yunohost app install wordpress --label Webmail - ^ ^ ^ ^ - | | | | - categoría acción argumento opción -``` - -No dudes en navegar ni en pedir información a propósito de una categoría o acción utilizando la opción `--help`. Por ejemplo, estos comandos : - -```bash -yunohost --help -yunohost user --help -yunohost user create --help -``` - -de manera sucesiva van a enumerar todas las categorías disponibles, luego las acciones de la categoría `user`, y luego explicar cómo utilizar la acción `user create`. Deberías notar que el árbol de los comandos Yunohost tiene la misma estructura que las páginas del webadmin. \ No newline at end of file diff --git a/commandline_fr.md b/commandline_fr.md deleted file mode 100644 index 003d524f..00000000 --- a/commandline_fr.md +++ /dev/null @@ -1,30 +0,0 @@ -# Administrer YunoHost en ligne de commande - -L'interface en ligne de commande (CLI) est, en informatique, la manière originale (et plus technique) d'interagir avec un ordinateur comparé aux interfaces graphiques. La ligne de commande est généralement considéré comme plus complète, puissante et efficace que les interfaces graphiques, bien que plus difficile à apprendre. - -Dans le contexte de YunoHost, ou de l'administration système en général, la ligne de commande est communément utilisée après s'être [connecté en SSH](/ssh). - -<div class="alert alert-info" markdown="1"> -Fournir un tutorial complet sur la ligne de commande est bien au dela du cadre de la documentation de YunoHost : pour cela, référez-vous à des tutoriaux comme [celui-ci](https://doc.ubuntu-fr.org/tutoriel/console_ligne_de_commande) ou [celui-ci (en)](http://linuxcommand.org/). Mais soyez rassuré qu'il n'y a pas besoin d'être un expert pour commencer à l'utiliser ! -</div> - -La commande `yunohost` peut être utilisée pour administrer votre serveur ou réaliser les mêmes actions que celles disponibles sur la webadmin. Elle doit être lancée en depuis l'utilisateur `root`, ou bien depuis l'utilisateur `admin` en précédant la commande de `sudo`. (ProTip™ : il est possible de devenir `root` via la commande `sudo su` en tant qu'`admin`.) - -Les commandes YunoHost ont ce type de structure : - -```bash -yunohost app install wordpress --label Webmail - ^ ^ ^ ^ - | | | | - categorie action argument options -``` - -N'hesitez pas à naviguer et demander des informations à propos d'une catégorie ou action donnée via l'option `--help`. Par exemple, ces commandes : - -```bash -yunohost --help -yunohost user --help -yunohost user create --help -``` - -vont successivement lister toutes les catégories disponibles, puis les actions de la catégorie `user`, puis expliquer comment utiliser l'action `user create`. Vous devriez remarquer que l'arbre des commandes YunoHost suit une structure similaire aux pages de la webadmin. diff --git a/config/site.yaml b/config/site.yaml new file mode 100644 index 00000000..8de46664 --- /dev/null +++ b/config/site.yaml @@ -0,0 +1,17 @@ +title: 'Yunohost Documentation' +default_lang: en +author: + name: Yunohost + email: yunohost@yunohost.org +taxonomies: + - category + - tag +metadata: + description: 'Yunohost Documentation' +summary: + enabled: true + format: short + size: 300 + delimiter: '===' +redirects: null +routes: null diff --git a/config/system.yaml b/config/system.yaml new file mode 100644 index 00000000..ea42c300 --- /dev/null +++ b/config/system.yaml @@ -0,0 +1,218 @@ +absolute_urls: false +timezone: null +param_sep: ':' +wrapped_site: false +reverse_proxy_setup: false +force_ssl: false +force_lowercase_urls: true +custom_base_url: null +username_regex: '^[a-z0-9_-]{3,16}$' +pwd_regex: '(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}' +intl_enabled: true +http_x_forwarded: + protocol: true + host: false + port: true + ip: true +languages: + supported: + - en + - fr + - de + - es + - ar + - oc + - it + - ru + default_lang: en + include_default_lang: true + include_default_lang_file_extension: true + translations: true + translations_fallback: true + session_store_active: false + http_accept_language: true + override_locale: false + content_fallback: + en: 'fr,de,es' + de: 'en,fr,es' + es: 'en,fr,de' + pages_fallback_only: false +home: + alias: /home + hide_in_urls: true +pages: + type: regular + theme: yunohost-docs + order: + by: default + dir: asc + list: + count: 20 + dateformat: + default: null + short: 'jS M Y' + long: 'F jS \a\t g:ia' + publish_dates: true + process: + markdown: true + twig: false + twig_first: false + never_cache_twig: false + events: + page: true + twig: true + markdown: + extra: false + auto_line_breaks: false + auto_url_links: false + escape_markup: false + special_chars: + '>': gt + '<': lt + valid_link_attributes: + - rel + - target + - id + - class + - classes + types: + - html + - htm + - xml + - txt + - json + - rss + - atom + append_url_extension: null + expires: 604800 + cache_control: null + last_modified: false + etag: true + vary_accept_encoding: false + redirect_default_route: false + redirect_default_code: '302' + redirect_trailing_slash: true + ignore_files: + - .DS_Store + ignore_folders: + - .git + - .idea + ignore_hidden: true + hide_empty_folders: false + url_taxonomy_filters: true + frontmatter: + process_twig: false + ignore_fields: + - form + - forms +cache: + enabled: true + check: + method: file + driver: auto + prefix: g + purge_at: '0 4 * * *' + clear_at: '0 3 * * *' + clear_job_type: standard + clear_images_by_default: true + cli_compatibility: false + lifetime: 604800 + gzip: true + allow_webserver_gzip: false + redis: + socket: '0' + server: null + port: null + password: null + memcache: + server: null + port: null + memcached: + server: null + port: null +twig: + cache: true + debug: false + auto_reload: true + autoescape: false + undefined_functions: true + undefined_filters: true + umask_fix: false +assets: + css_pipeline: false + css_pipeline_include_externals: true + css_pipeline_before_excludes: true + css_minify: true + css_minify_windows: false + css_rewrite: true + js_pipeline: false + js_pipeline_include_externals: true + js_pipeline_before_excludes: true + js_minify: true + enable_asset_timestamp: false + collections: + jquery: 'system://assets/jquery/jquery-2.x.min.js' +errors: + display: 1 + log: true +log: + handler: file + syslog: + facility: local6 +debugger: + enabled: false + provider: clockwork + censored: false + shutdown: + close_connection: true + twig: true +images: + default_image_quality: 85 + cache_all: false + cache_perms: '0755' + debug: false + auto_fix_orientation: true + seofriendly: true + defaults: + loading: auto +media: + enable_media_timestamp: false + unsupported_inline_types: null + allowed_fallback_types: null + auto_metadata_exif: false + upload_limit: 2097152 +session: + enabled: true + initialize: true + timeout: 1800 + name: grav-site + uniqueness: path + secure: false + httponly: true + samesite: Lax + split: true + path: null +gpm: + releases: stable + proxy_url: null + method: auto + verify_peer: true + official_gpm_only: true +accounts: + type: regular + storage: file +flex: + cache: + index: + enabled: true + lifetime: 60 + object: + enabled: true + lifetime: 600 + render: + enabled: true + lifetime: 600 +strict_mode: + yaml_compat: true + twig_compat: true + blueprint_compat: true diff --git a/config/themes/yunohost-docs.yaml b/config/themes/yunohost-docs.yaml new file mode 100644 index 00000000..4974468a --- /dev/null +++ b/config/themes/yunohost-docs.yaml @@ -0,0 +1,18 @@ +streams: + schemes: + theme: + type: ReadOnlyStream + prefixes: + '': [user/themes/yunohost-docs, user/themes/learn4] +enabled: true +production-mode: false +grid-size: grid-xl +github: + note: false + link: true + tree: 'https://github.com/yunohost/doc/blob/grav/' + commits: 'https://github.com/yunohost/doc/commits/grav/' +spectre: + exp: false + icons: false +top_level_version: true diff --git a/contribute.md b/contribute.md deleted file mode 100644 index b5887fb3..00000000 --- a/contribute.md +++ /dev/null @@ -1,93 +0,0 @@ -# Get involved - -<p class="lead"> -YunoHost depends exclusively on the participation of people like you. -</p> - ---- - -<div class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-heart"></span> Spread the word -</div> -<div class="col col-md-8" markdown="1"> -Talk about software freedom, [self-hosting](/selfhosting) and YunoHost to your relatives and at your work. We rely on Datalove evangelists like you <3 -</div> -</div> - ---- - -<div class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-exclamation-sign"></span> Testing -</div> -<div class="col col-md-8" markdown="1"> -We need people able to test YunoHost deeply. If you find a bug, try to identify it, and report it on our <a href="https://github.com/YunoHost/issues/issues" target="_blank">bug tracker</a>. -</div> -</div> - ---- - -<div class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-user"></span> Helping users -</div> -<div class="col col-md-8" markdown="1"> -Our support relies on contributors like you. Just come to [the support chatroom](/help) and help new users getting started, or pick a question on the <a href="https://forum.yunohost.org/" target="_blank">Forum</a>. -</div> -</div> - ---- - -<div class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-cog"></span> Coding -</div> -<div class="col col-md-8" markdown="1"> -You can involve in the YunoHost's development regardless of your skill. -Sysadmins, web developers, designers and pythonists <a href="https://github.com/YunoHost" target="_blank">are welcome</a>! -<br> -Learn [how to contribute](/dev), and join us on the [development chat room](xmpp:dev@conference.yunohost.org?join). -</div> -</div> - ---- - -<div class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-globe"></span> Localization -</div> -<div class="col col-md-8" markdown="1"> -Get involved by making YunoHost interfaces available in your language. -<a href="https://translate.yunohost.org/" target="_blank">Get started</a>! -</div> -</div> - ---- - -<div class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-edit"></span> Write -</div> -<div class="col col-md-8" markdown="1"> -Improve this documentation by [writing new pages](/write_documentation) or translating existing ones to your language. -</div> -</div> - -<hr> - -<div class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-gift"></span> Packaging -</div> -<div class="col col-md-8" markdown="1"> -Extend YunoHost capabilities by [packaging new services and web applications](/packaging_apps). -Have a look of [what has been done yet](/apps)! -</div> -</div> - ---- - -<br> -<p class="lead" markdown="1">In any case, please come chat with us on [the dev chatroom](/chat_rooms) :-)</p> - diff --git a/contribute_ar.md b/contribute_ar.md deleted file mode 100644 index 8ad74232..00000000 --- a/contribute_ar.md +++ /dev/null @@ -1,92 +0,0 @@ -# <div dir="rtl">المساهمة</div> - -<p dir="rtl" class="lead"> -إنّ مصير واي يونوهوست YunoHost يُقرّره أناس و أنتم مِن بين هؤلاء -</p> - ---- - -<div dir="rtl" class="row"> -<div dit="rtl" class="col col-md-3 lead"> -<span class="glyphicon glyphicon-heart"></span> تحدثوا عن المشروع مِن حولكم -</div> -<div class="col col-md-8" markdown="1"> -تحدثوا عن البرمجيات الحرّة، تحدثوا عن واي يونوهوست YunoHost مع أقربائكم و زملائكم في العمل. حدّثوهم عن [الإستضافة الذاتية](/selfhosting)، نحن بحاجة و واثقون مِن قدرات محبي البيانات مثلكم 3></div> -</div> - ---- - -<div dir="rtl" class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-exclamation-sign"></span> جَرّبُوا -</div> -<div class="col col-md-8" markdown="1"> -نحن بحاجة إلى تجريب حثيث لواي يونوهوست YunoHost. فإن صادفتم مشكلة، يرجى القيام بتحديد الخلل و ثم الإبلاغ عنه عبر -<a href="https://github.com/YunoHost/issues/issues" target="_blank">مُتعقب الأخطاء</a>. -</div> -</div> - ---- - -<div dir="rtl" class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-user"></span> ساعدوا المستخدمِين -</div> -<div class="col col-md-8" markdown="1"> -Notre support est communautaire et s’appuie sur des contributeurs comme vous. Venez simplement sur le [salon d'aide](/help), ou tentez de répondre aux questions du <a href="https://forum.yunohost.org/" target="_blank">Forum</a>. Vous pouvez aussi organiser des <a href="https://hackstub.netlib.re/wiki/index.php?title=Atelier_3_avenir%28s%29_d%27internet_-_Introduction_%C3%A0_Yunohost_et_la_brique_internet" target="_blank">ateliers de formation</a>. -</div> -</div> - ---- - -<div dir="rtl" class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-cog"></span> أكتبوا الشفرة -</div> -<div dir="rtl" class="col col-md-8" markdown="1"> -Vous pouvez vous impliquer dans le développement de YunoHost peu importe votre niveau. Administrateurs système, développeurs web, designers et pythonistes <a href="https://github.com/YunoHost" target="_blank">sont les bienvenus</a>.<br> -Découvrez [comment contribuer](/dev), et rejoignez-nous sur le [salon de discussion](xmpp:dev@conference.yunohost.org?join) ! -</div> -</div> - ---- - -<div dir="rtl" class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-globe"></span> ترجِموا -</div> -<div class="col col-md-8" markdown="1"> -ساهموا في توفير واجهات واي يونوهوست YunoHost بلغتكم. <a href="https://translate.yunohost.org/" target="_blank">إبدأوا الآن</a> ! -</div> -</div> - ---- - -<div dir="rtl" class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-edit"></span> أكتبوا -</div> -<div class="col col-md-8" markdown="1"> -ساهموا في تحسين هذا الدليل و ذلك [باقتراح صفحات جديدة](/write_documentation) أو بترجمة صفحاته إلى لغتكم. -</div> -</div> - ---- - -<div dir="rtl" class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-gift"></span> ساهموا في التحزيم -</div> -<div class="col col-md-8" markdown="1"> -Étendez les capacités de YunoHost en [packageant de nouveaux services et applications web](/packaging_apps). Jetez un œil à [ce qui a déjà été fait](/apps) ! -<br> -Un [salon de développement](xmpp:dev@conference.yunohost.org?join) est également disponible. -</div> -</div> - ---- - -<br> -<br> -<p dir="rtl" class="lead" markdown="1">على أي حال تعالوا و انضموا إلى [غرفة المحادثة الخاصة بالمطوّرين](xmpp:dev@conference.yunohost.org?join) إن كنتم ترغبون في المساهمة :-)</p> - diff --git a/contribute_fr.md b/contribute_fr.md deleted file mode 100644 index dd785aaa..00000000 --- a/contribute_fr.md +++ /dev/null @@ -1,90 +0,0 @@ -# Contribuer - -<p class="lead"> -YunoHost dépend entièrement de la participation de gens comme vous. -</p> - ---- - -<div class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-heart"></span> Passez le mot -</div> -<div class="col col-md-8" markdown="1"> -Parlez de logiciel libre, d’[auto-hébergement](/selfhosting), de YunoHost à vos proches et à votre travail. Nous comptons sur des évangélistes du Datalove comme vous <3 -</div> -</div> - ---- - -<div class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-exclamation-sign"></span> Testez -</div> -<div class="col col-md-8" markdown="1"> -Nous avons besoin de tester YunoHost profondément. Si vous trouvez un bug, essayez de l’identifier, puis reportez-le sur notre <a href="https://github.com/YunoHost/issues/issues/new" target="_blank">bug tracker</a>. -</div> -</div> - ---- - -<div class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-user"></span> Aidez les utilisateurs -</div> -<div class="col col-md-8" markdown="1"> -Notre support est communautaire et s’appuie sur des contributeurs comme vous. Venez simplement sur le [salon d'aide](/help), ou tentez de répondre aux questions du <a href="https://forum.yunohost.org/" target="_blank">Forum</a>. Vous pouvez aussi organiser des <a href="https://hackstub.netlib.re/wiki/index.php?title=Atelier_3_avenir%28s%29_d%27internet_-_Introduction_%C3%A0_Yunohost_et_la_brique_internet" target="_blank">ateliers de formation</a>. -</div> -</div> - ---- - -<div class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-cog"></span> Codez -</div> -<div class="col col-md-8" markdown="1"> -Vous pouvez vous impliquer dans le développement de YunoHost peu importe votre niveau. Administrateurs système, développeurs web, designers et pythonistes <a href="https://github.com/YunoHost" target="_blank">sont les bienvenus</a>.<br> -Découvrez [comment contribuer](/dev), et rejoignez-nous sur le [salon de discussion](xmpp:dev@conference.yunohost.org?join) ! -</div> -</div> - ---- - -<div class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-globe"></span> Traduisez -</div> -<div class="col col-md-8" markdown="1"> -Participez en rendant les interfaces de YunoHost disponibles dans votre langue. <a href="https://translate.yunohost.org/" target="_blank">Lancez-vous</a> ! -</div> -</div> - ---- - -<div class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-edit"></span> Écrivez -</div> -<div class="col col-md-8" markdown="1"> -Améliorez cette documentation en [proposant de nouvelles pages](/write_documentation) ou en traduisant les existantes dans votre langue. -</div> -</div> - ---- - -<div class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-gift"></span> Packagez -</div> -<div class="col col-md-8" markdown="1"> -Étendez les capacités de YunoHost en [packageant de nouveaux services et applications web](/packaging_apps). Jetez un œil à [ce qui a déjà été fait](/apps) ! -</div> -</div> - ---- - -<br> -<br> -<p class="lead" markdown="1">Dans tous les cas, venez discuter avec nous sur [le salon de développement](/chat_rooms) :-)</p> - diff --git a/contributordoc.md b/contributordoc.md deleted file mode 100644 index 4570723d..00000000 --- a/contributordoc.md +++ /dev/null @@ -1,36 +0,0 @@ -# Contributor documentation - -* [General ways of contributing to YunoHost](/contribute) -* [Writing documentation](/write_documentation) -* [Chat rooms](/chat_rooms) -* Application packaging - * [Apps wishlist](/apps_wishlist) - * [General introduction to app packaging](/packaging_apps_start) - * [Technical introduction to app packaging](/packaging_apps) - * [How to use Git to package apps](/packaging_apps_git) - * [Setting up a dev environment with VirtualBox](/packaging_apps_virtualbox) - * [Manifest](packaging_apps_manifest) - * [Scripts](packaging_apps_scripts) - * [Arguments management](packaging_apps_arguments_management) - * [Nginx configuration](packaging_apps_nginx_conf) - * [Multi-instance](packaging_apps_multiinstance) - * [Helpers](packaging_apps_helpers) - * [Trap usage](/packaging_apps_trap) - * [Adding your app to the community list](https://github.com/YunoHost/Apps/#contributing) - * Quality tests - * [Package linter](https://github.com/YunoHost/package_linter) - * [Package check](https://github.com/YunoHost/package_check) - * [Applications levels](/packaging_apps_levels) - * [App Continuous Integration](https://ci-apps.yunohost.org) - * [App CI dashboard](https://dash.yunohost.org/appci/branch/stable) - * [App Continuous Integration for packagers](/packaging_apps_ci) - * [YEP - YunoHost Enhancement Proposals](/packaging_apps_guidelines) -* [Contributing to the YunoHost core](/dev) - * [Setting up a dev environment with ynh-dev](https://github.com/YunoHost/ynh-dev/blob/master/README.md) - * [Deb build chain](https://github.com/YunoHost/vinaigrette/blob/master/README.md) - * Image building - * [x86 ISO](https://github.com/YunoHost/cd_build) - * [Raspberry Pi images](https://github.com/YunoHost/rpi-image) - * [Other ARM board images](https://github.com/YunoHost/arm-images) -* [Using the YunoHost API outside of the webadmin](/admin_api) -* [A discussion about shell variable scope](shell_variables_scope) diff --git a/contributordoc_fr.md b/contributordoc_fr.md deleted file mode 100644 index 4c932803..00000000 --- a/contributordoc_fr.md +++ /dev/null @@ -1,37 +0,0 @@ -# Guide du contributeur - -* [Liste des façons de contribuer à YunoHost](/contribute) -* [Écrire de la documentation](/write_documentation) -* [Salons de discussion](/chat_rooms) -* Packaging d'application - * [Liste d'apps souhaitées par la communauté](/apps_wishlist) - * [Introduction générale au packaging d'apps](/packaging_apps_start) - * [Introduction technique au packaging d'apps](/packaging_apps) - * [Comment utiliser Git pour packager les applications](/packaging_apps_git) - * [Déployer un environnement de développement avec VirtualBox](/packaging_apps_virtualbox) - * [Manifest](/packaging_apps_manifest) - * [Scripts](/packaging_apps_scripts) - * [Gestion des arguments](/packaging_apps_arguments_management) - * [Configuration nginx](/packaging_apps_nginx_conf) - * [Multi-instance](/packaging_apps_multiinstance) - * [Fonctions utiles](/packaging_apps_helpers) - * [Utilisation de 'trap'](/packaging_apps_trap) - * [Ajouter son application à la liste community](https://github.com/YunoHost/Apps/#contributing) - * Tests de qualité - * [Package linter](https://github.com/YunoHost/package_linter) - * [Package check](https://github.com/YunoHost/package_check) - * [Niveaux des applications](/packaging_apps_levels) - * [Intégration continue des apps](https://ci-apps.yunohost.org) - * [Tableau de bord du CI des apps](https://dash.yunohost.org/appci/branch/stable) - * [Intégration continue pour packagers](/packaging_apps_ci) - * [YEP - YunoHost Enhancement Proposals](/packaging_apps_guidelines) -* [Contribuer à la partie "core" de YunoHost](/dev) - * [Déployer un environnement de dev avec ynh-dev](https://github.com/YunoHost/ynh-dev/blob/master/README.md) - * [Construction des paquets debian](https://github.com/YunoHost/vinaigrette/blob/master/README.md) - * [Feuilles de route du projet](https://github.com/YunoHost/issues/milestones?direction=asc&sort=title&state=open) - * Construction des images - * [x86 ISO](https://github.com/YunoHost/cd_build) - * [Images Raspberry Pi](https://github.com/YunoHost/rpi-image) - * [Autres images pour cartes ARM](https://github.com/YunoHost/arm-images) -* [Utiliser l'API YunoHost en dehors de la webadmin](/admin_api) -* [Une discussion sur la portée des variables en bash](shell_variables_scope) diff --git a/copy_image.md b/copy_image.md deleted file mode 100644 index 50d3e68b..00000000 --- a/copy_image.md +++ /dev/null @@ -1,47 +0,0 @@ -# Flashing an SD card - -Now that you download the YunoHost image, you have to copy its content to an SD -card. This step is also sometimes called 'flashing' the SD card. - -<div class="alert alert-warning" markdown="1"> -In the context of self-hosting, it is recommended that your SD card be at least -8 GB (to have a reasonable space available for the system and a few data) and at -least Class 10 (to ensure reasonable performances). -</div> - -<img src="/images/sdcard.jpg" width=150><img src="https://yunohost.org/images/micro-sd-card.jpg"> - -### With Etcher - -Download <a href="https://etcher.io/" target="_blank">Etcher</a> for your -operating system and install it. - -<img src="/images/etcher.gif"> - -Plug your SD card, select your YunoHost image and click "Flash" - -### With `dd` - -If you are on Linux / Mac and know your way around command line, you may also -flash your SD card with `dd`. You can identify which device corresponds to your -SD card with `fdisk -l` or `lsblk`. Assuming your SD card is `/dev/mmcblk0` (be -careful !!), you may run : - -```bash -dd if=/path/to/yunohost.img of=/dev/mmcblk0 -``` - -## Expand the root partition <small>(optional)</small> - -<div class="alert alert-warning" markdown="1"> -This step is optional as it should be performed automatically during the first -boot on recent images. -</div> - -By default, the root partition of your SD card is very small. -You can resize it by using software like `resize2fs` (command-line) or `gparted` -(graphical). - -<img src="/images/gparted.jpg" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> - -<p class="text-muted">Preview of the Gparted window</p> diff --git a/copy_image_es.md b/copy_image_es.md deleted file mode 100644 index c979e3e2..00000000 --- a/copy_image_es.md +++ /dev/null @@ -1,39 +0,0 @@ -# Flashear una tarjeta SD - -Ahora que has descargado la imagen de Yunohost, tienes que copiar su contenido en una tarjeta SD. Esta etapa también puede llamarse 'flashear' la tarjeta SD. - -<div class="alert alert-warning" markdown="1"> -En el marco del self-hosting / auto-alojamiento, está recomendado que tu tarjeta SD tenga una capacidad de por lo menos 8 Go (para diponer de suficientemente espacio para el sistema y un poco de datos) y esté al menos certificada de clase 10 (para tener bueno rendimiento). -</div> - -<img src="/imagen/sdcard.jpg" width=150><img src="https://yunohost.org/images/micro-sd-card.jpg"> - -### Con Etcher - -Descarga <a href="https://etcher.io/" target="_blank">Etcher</a> para tu sistema operativo, e instálalo. - -<img src="/images/etcher.gif"> - -Conecta tu tarjeta SD, selecciona tu imagen Yunohost y luego haz clic en 'Flash'. - -### Con `dd` - -Si estás en Linux / Mac y que estás cómodo con la línea de comandos, también puedes flashear tu tarjeta SD con el comando `dd`. Empieza por identificar el periférico que corresponde a tu tarjeta SD con `fdisk -l` o -`lsblk`. Suponiendo que tu tarjeta SD sea `/dev/mmcblk0` (¡ ten cuidado -!), puedes iniciar : - -```bash -dd if=/chemin/vers/yunohost.img of=/dev/mmcblk0 -``` - -## Extiende la partición root <small>(optionnel)</small> - -<div class="alert alert-warning" markdown="1"> -Esta etapa es opcional porque normalmente la realiza automáticamente el sistema durante el primer inicio sobre las imágenes recientes. -</div> - -Por defecto, la partición root instalada en tu tarjeta SD con el comando `dd` es muy pequeña. Puedes redimensionarla con un programa como `resize2fs` (línea de comandos) o `Gparted` (interfaz gráfica) extendiendo la partición ext4 al máximo de modo a utilizar todo el espacio que no está asignado. - -<img src="/images/gparted.jpg" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> - -<p class="text-muted">Vistazo de la interfaz de Gparted</p> diff --git a/copy_image_fr.md b/copy_image_fr.md deleted file mode 100644 index 3e5ff1f1..00000000 --- a/copy_image_fr.md +++ /dev/null @@ -1,52 +0,0 @@ -# Flasher une carte SD - -Maintenant que vous avez téléchargé l'image de YunoHost, il vous faut copier son -contenu sur une carte SD. Cette étape est aussi souvent appelé 'flasher' la -carte SD. - -<div class="alert alert-warning" markdown="1"> -Dans le contexte de l'auto-hébergement, il est recommandé que votre carte SD -fasse au moins 8 Go (pour disposer d'un espace raisonnable pour le système et -quelques données) et soit au moins certifiée classe 10 (pour avoir des -performances raisonnables). -</div> - -<img src="/images/sdcard.jpg" width=150><img src="https://yunohost.org/images/micro-sd-card.jpg"> - -### Avec Etcher - -Télécharger <a href="https://etcher.io/" target="_blank">Etcher</a> pour votre -système d'exploitation, et installez-le. - -<img src="/images/etcher.gif"> - -Connectez votre carte SD, sélectionnez votre image YunoHost, puis cliquez sur -'Flash'. - -### Avec `dd` - -Si vous êtes sous Linux / Mac et que vous êtes à l'aise avec la ligne de -commande, vous pouvez aussi flasher votre carte SD avec `dd`. Commencez par -identifier le périphérique correspondant à votre carte SD avec `fdisk -l` ou -`lsblk`. En supposant que votre carte SD soit `/dev/mmcblk0` (faites attention -!), vous pouvez lancer : - -```bash -dd if=/chemin/vers/yunohost.img of=/dev/mmcblk0 -``` - -## Étendre la partition root <small>(optionnel)</small> - -<div class="alert alert-warning" markdown="1"> -Cette étape est optionnelle car elle est normalement effectuée automatiquement -par le système lors du premier démarrage sur les images récentes. -</div> - -Par défaut, la partition root installée sur votre carte SD avec la commande `dd` -est très petite. Vous pouvez la redimensionner avec un logiciel comme -`resize2fs` (ligne de commande) ou `Gparted` (interface graphique) en étendant -la partition ext4 au maximum de façon à utiliser tout l’espace non alloué. - -<img src="/images/gparted.jpg" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> - -<p class="text-muted">Aperçu de l’interface de Gparted</p> diff --git a/dev_fr.md b/dev_fr.md deleted file mode 100644 index 2251fbfe..00000000 --- a/dev_fr.md +++ /dev/null @@ -1,164 +0,0 @@ -## Contribuer au cœur de YunoHost - -Vous souhaitez ajouter une nouvelle fonctionnalité au cœur de YunoHost, mais ne -savez pas comment procéder ? Ce guide parcourt les étapes du développement et du -processus de contribution. - -Si vous cherchez quelque chose à implémenter ou un bug à réparer, le -bug tracker est [ici](https://github.com/yunohost/issues/issues) ! - -**Venez dire coucou sur le [salon de dev](/chat_rooms)** ! - -### Mettre en place un environnement de développement - -- **Utilisez [ynh-dev](https://github.com/YunoHost/ynh-dev)** (voir le README) - pour mettre en place un environnement de développement - en local sur une - machine virtuelle, ou bien sur un VPS. - Ceci installera une instance fonctionelle de YunoHost, en utilisant - directement les dépôts git à l'aide de liens symboliques. De cette façon, il - vous sera possible de modifier les fichiers, de tester les changements en - temps réel, et de commiter et push/pull directement depuis cet environnement. - -- **Implémentez et testez votre fonctionnalité**. Suivant ce sur quoi vous - voulez travailler : - - **Cœur Python/ligne de comande** : allez dans `/ynh-dev/yunohost/` - - **Interface d'administration web** : allez dans `/ynh-dev/yunohost-admin/` - - Vous pouvez aussi travailler sur les autres projets liés sur lesquels - s'appuie YunoHost (SSOwat, moulinette) de façon similaire. - -### Vue d'ensemble des 4 morceaux principaux de YunoHost - -##### Moulinette - -C'est un petit framework "fait maison". [Son rôle principal](https://moulinette.readthedocs.io/en/latest/actionsmap.html) -est de permettre de construire une API Web et une API en ligne de commande à partir d'un même code Python et d'un schéma YAML que nous appelons -[l'actionmap] (https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/actionsmap/yunohost.yml). - -Il prend en charge d'autres mécanismes tels que l'authentification, l'internationalisation et des petites fonctions utilitaires techniques (par ex. lecture/écriture de fichiers json). - -Moulinette dispose de sa propre documentation [ici](https://moulinette.readthedocs.io/en/latest/). - -##### YunoHost - -C'est le coeur même de YunoHost. Il contient : -- [le code Python](https://github.com/YunoHost/yunohost/tree/stretch-unstable/src/yunohost) qui gère les utilisateurs, domaines, applications, services et autres -- des [helpers bash](https://github.com/YunoHost/yunohost/tree/stretch-unstable/data/helpers.d) principalement utilisés par les packageurs d'applications dans les scripts de ces applications -- des [hooks](https://github.com/YunoHost/yunohost/tree/stretch-unstable/data/hooks) et [templates](https://github.com/YunoHost/yunohost/tree/stretch-unstable/data/templates) qui sont utilisés pour configurer les différents éléments de l'écosystème tels que nginx, postfix, .... -- des [chaînes internationalisées](https://github.com/YunoHost/yunohost/tree/stretch-unstable/locales) -- des [tests](https://github.com/YunoHost/yunohost/tree/stretch-unstable/src/yunohost/tests) - -##### SSOwat - -C'est le système de connexion unique (single sign-on) de YunoHost. Il contient principalement: -- [du code LUA](https://github.com/YunoHost/ssowat) interfacé directement avec nginx et qui gère tous les aspects "techniques" de l'authentification et de la gestion des accès aux ressources. -- le [portail web utilisateur](https://github.com/YunoHost/SSOwat/tree/stretch-unstable/portal) qui est l'interface finale visible par les utilisateurs de YunoHost - -SSOwat est configuré via `/etc/ssowat/conf.json` qui est généré par YunoHost. - -##### YunoHost-admin - -C'est une dépendance *optionnelle* de YunoHost et correspond à une interface pour l'API web créée par YunoHost et Moulinette (service `yunohost-api`). - -Il contient essentiellement : -- [des templates pour les vues](https://github.com/YunoHost/yunohost-admin/tree/stretch-unstable/src/views) -- les [contrôleurs JavaScript](https://github.com/YunoHost/yunohost-admin/tree/stretch-unstable/src/js/yunohost/controllers) correspondants, qui interagissent avec l'API YunoHost -- et ses [chaînes internationalisées](https://github.com/YunoHost/yunohost-admin/tree/stretch-unstable/src/locales) - -### Travailler sur le cœur Python / ligne de commande - -- Allez dans `/ynh-dev/yunohost/`. - -- Exécutez `cd /ynh-dev && ./ynh-dev use-git yunohost`. - -- Le fichier actionsmap (`data/actionsmap/yunohost.yml`) définit les différentes - catégories, actions et arguments de la ligne de commande YunoHost. Choisissez - comment vous voulez que les utilisateurs utilisent votre fonctionnalité, et - ajoutez/éditez les catégories, actions et arguments correspondants. Par - exemple, dans `yunohost domain add some.domain.tld`, la catégorie est - `domain`, l'action est `add` et `some.domain.tld` est un argument. - -- Moulinette va automatiquement faire le lien entre les commandes de - l'actionsmap et les fonctions Python (ainsi que leurs arguments) dans - `src/yunohost/`. Par exemple, `yunohost domain add some.domain.tld` - déclenchera un appel de `domain_add(domainName)` dans `domain.py`, avec l'argument - `domainName` qui vaudra `"some.domain.tld"`. - -##### Helpers / style de code - -- Pour gérer les exceptions, il existe un type `YunohostError()` - -- Pour aider avec l'internationalisation des messages, utilisez `m18n.n('some-message-id')` - et mettez le message correspondant dans `locales/en.json`. Vous pouvez aussi - utiliser des arguments pour construire les messages, avec `{{some-argument:s}}`. - Ne modifiez pas de fichiers de locales autres que en.json, la traduction sera - faite avec [Weblate](https://translate.yunohost.org/) ! - -- YunoHost essaye de suivre le style de code [PEP8](http://pep8.org/). Des - outils existent pour vérifier automatiquement la conformité du code. - -- Mettre un `_` devant les noms des fonctions "privées". - -### Travailler sur l'interface d'administration web - -- Allez dans `/ynh-dev/yunohost-admin/src/`. - -- Exécutez `cd /ynh-dev && ./ynh-dev use-git yunohost-admin`. Ceci lance gulp, de sorte - qu'à chaque fois que vous modifiez les sources, il recompilera le code - (JS) et vous pourrez voir les changements dans le navigateur web (Ctrl+F5). - Pour stopper la commande, faites simplement Ctrl+C. - -- L'interface web utilise une API pour communiquer avec YunoHost. Les - commandes/requêtes de l'API sont également définies dans l'actionsmap. Par - exemple, accéder à la page ```https://domain.tld/yunohost/api/users``` - correspond à une requête `GET /users` vers l'API YunoHost. Cette requête - est mappée sur `user_list()`. Accéder à cette URL devrait afficher le json - retourné par cette fonction. Les requêtes 'GET' sont typiquement destinées à - demander de l'information au serveur, tandis que les requêtes 'POST' sont - destinées à demander au serveur de modifier/changer des informations ou de - réaliser des actions. - -- `js/yunohost/controllers` contient les parties JavaScript, et définit quelles - requêtes faire à l'API pendant le chargement d'une page donnée de l'interface, - et comment traiter les données récupérées pour générer la page, en utilisant - des templates. - -- `views` contient les templates des pages de l'interface. Dans le template, - les données venant du JavaScript peuvent être utilisées avec la syntaxe - `{{some-variable}}`, qui sera remplacée pendant la construction de la page. - Il est également possible d'avoir des conditions avec la syntaxe - d'[handlebars.js](http://handlebarsjs.com) : ```{{#if - some-variable}}<p>du HTML conditionnel ici !</p>{{/if}}``` - -- Pour l'internationalisation des messages, utilisez `y18n.t('some-string-code')` - dans le JavaScript, ou `{{t 'some-string-code'}}` dans le template HTML, et - mettez votre message dans `locales/en.json`. Ne modifiez pas de fichiers de - locales autres que en.json, la traduction sera faite avec - [Weblate](https://translate.yunohost.org/) ! - -##### N'oubliez pas - -- À chaque modification de l'actionsmap, il faut redémarrer l'API yunohost : - ```service yunohost-api restart``` - (Il faudra retaper le mot de passe administrateur dans l'interface web) - -- Il faudra peut-être régulièrement forcer le rafraîchissement du cache - navigateur pour propager correctement le JavaScript et/ou HTML (à chaque fois - que l'on change quelque chose dans `js` ou `views`, donc). - - -### Votre fonctionnalité est prête et vous souhaitez qu'elle soit intégrée dans YunoHost - -- Forkez le dépòt correspondant sur Github, et commitez vos changements dans - une nouvelle branche, Il est recommandé de nommer la branche avec la - convention suivante : - - Pour une nouvelle fonctionnalité ou amélioration : `enh-ISSUENUMBER-description-fonctionnalité` - - Pour une correction de bug : `fix-REDMINETICKET-description-correctif` - - `ISSUENUMBER` est optionnel et correspond au numéro du ticket sur le bug tracker - -- Une fois prêt, ouvrez une Pull Request (PR) sur Github. De préférence, inclure - `[fix]` ou `[enh]` au début du titre de la PR. - -- Après relecture, test et validation par les autres contributeurs, votre - branche sera mergée dans `unstable` ! - - diff --git a/diagnostic.md b/diagnostic.md deleted file mode 100644 index df76baee..00000000 --- a/diagnostic.md +++ /dev/null @@ -1,53 +0,0 @@ -# Diagnose YunoHost functioning - -If you have successfully [installed](/install) YunoHost and passed through the [post-installation](/postinstall), you probably have a **working server**. - -### <small>1.</small> Test it - -In a web browser, access to your server via the domain name you just entered at the post-installation step. - -For example: `http://mydomain.com` - - -<div class="alert alert-warning"> -If you have taken a <b>.nohost.me</b> or a <b>.noho.st</b> domain, you may have to wait 5 min before the address is reachable. -</div> - ---- - -#### If that does not work... - ---- - -### <small>2.</small> Have you configured your DNS well ? - -<div class="alert alert-info"> -This step is not necessary if you have a <b>.nohost.me</b> or a <b>.noho.st</b> domain -</div> - -Go to https://www.whatsmydns.net/ , enter your domain name in the field and click `Search`. -If you do not see your IP address, or if there are red crosses everywhere, then you have probably misconfigured your [DNS](/dns). - ---- - -### <small>3.</small> Are network ports opened on your router ? - -If your DNS is properly configured, and your server is accessible locally, you may have **network ports blocked** or it may not be forwarded by your router. -In order to verify this, try accessing your server with a client outside your local network. For example via another WiFi access point or with your mobile phone in 3G/4G. - -If the server is unreachable from outside your local network too, then the problem probably comes from your router's configuration. - -<div class="alert alert-info"> -Try to activate uPnP in your router's configuration interface, and check that your server is plugged in Ethernet directly behind it. -<p> -You can also redirect ports manually to your server's local IP address on the router's configuration interface. -</p> -</div> - ---- - -### <small>4.</small> Does your router have hairpinning ? - -If the server is accessible from outside your local network, but unreachable with its domain name on the local network, then your router probably lacks <a href="https://en.wikipedia.org/wiki/Hairpinning" target="_blank">hairpinning</a>. - -Here is a [tutorial](dns_local_network) to access your server on a local network and bypass the hairpinning problem. The tutorial proposes a first solution to create a redirection with DNS of the ISP box and a second solution to modify the `hosts` file of the **clients** to instruct it to access the **server** via its local IP address. The first solution is preferable because it's not necessary to modify the `hosts` files on every computer on your local network, if you are using many different clients. diff --git a/diagnostic_fr.md b/diagnostic_fr.md deleted file mode 100644 index b2971a70..00000000 --- a/diagnostic_fr.md +++ /dev/null @@ -1,55 +0,0 @@ -# Diagnostic du bon fonctionnement de YunoHost - -Si vous avez réussi l’[installation](/install) de YunoHost et passé l’étape de [post-installation](/postinstall), vous avez probablement un **serveur fonctionnel**. - -### <small>1.</small> Essayer - -Dans un navigateur web, essayez d’accéder à votre serveur grâce au nom de domaine que vous avez entré à l’étape de post-installation. - -Par exemple : `http://mondomaine.org` - -<div class="alert alert-warning"> -Si vous avez opté pour un nom de domaine se terminant par <b>.nohost.me</b> ou <b>.noho.st</b>, vous devrez patienter cinq minutes avant que l’adresse soit atteignable. -</div> - ---- - -#### Si ça ne fonctionne pas… - ---- - -### <small>2.</small> Avez-vous bien configuré votre DNS ? - -<div class="alert alert-info"> -Cette étape n’est pas nécessaire si vous possédez un nom de domaine en <b>.nohost.me</b> ou un <b>.noho.st</b> -</div> - -Rendez-vous sur https://www.whatsmydns.net/, entrez votre nom de domaine dans le champ prévu à cet effet et cliquez sur `Search`. Si vous ne voyez pas votre adresse IP, ou s’il y a des croix rouges par endroits, cela signifie que vous avez probablement mal configuré votre [DNS](/dns). - ---- - -### <small>3.</small> Est-ce que les ports de votre box/routeur sont ouverts ? - -Si vos DNS sont bien configurés, et que le serveur est accessible localement, vous avez probablement des **ports bloqués** sur votre box/routeur ou non dirigés vers votre serveur. -Afin de le vérifier, essayez d’accéder à votre serveur avec un client extérieur au réseau local. Par exemple grâce à un autre accès Wi-Fi ou avec un smartphone en 3G/4G. - -Si le serveur est inatteignable depuis l’extérieur du réseau local, le problème vient probablement de la configuration du routeur. - -<div class="alert alert-info"> -Essayez d’activer l’uPnP sur l’interface de configuration de votre box/routeur, et vérifiez que le serveur y est directement connecté en Ethernet. -<p> -Vous pouvez également rediriger les ports manuellement vers l’adresse IP locale de votre serveur grâce à l’interface de configuration de votre box/routeur. -</p> -</div> - ---- - -### <small>4.</small> Est-ce que votre box/routeur fait du hairpinning ? - -Si le serveur est accessible de l’extérieur, mais inatteignable via son nom de domaine dans votre réseau local, votre box/routeur ne fait probablement pas correctement de <a href="https://fr.wikipedia.org/wiki/Hairpinning" target="_blank">hairpinning</a>. - -Voici un [tutoriel](/dns_local_network) pour pouvoir accéder à son serveur en réseau local et contourner le problème de hairpinning. Le tutoriel propose en première solution de mettre en place une redirection avec le DNS de la box et en seconde solution de modifier le fichier `hosts` des **clients** pour indiquer qu’il doit accéder au **serveur** via son IP locale. La première solution est préférable car il ne nécessite pas de modifier le fichier `hosts` sur chacun des clients du réseau local. - -___ - -Sinon, retentez l’installation en prenant cette fois un nom de domaine en **.nohost.me** ou en **.noho.st**. diff --git a/dns_local_network_es.md b/dns_local_network_es.md deleted file mode 100644 index 1226cde4..00000000 --- a/dns_local_network_es.md +++ /dev/null @@ -1,38 +0,0 @@ -#Acceder a tu servidor desde la red local - -Después de haber instalado tu servidor, es probable que tu nombre de dominio no esté accesible desde la red local donde se encuentra el servidor. Esto es un problema que se llama el [hairpinning](https://en.wikipedia.org/wiki/Hairpinning). - -Para resolver este problema, es preciso configurar el DNS de tu router o, por defecto, el o los archivos hosts de tu ordenadores clientes. - -### Obtener la dirección IP local del servidor -A fin de configurar el DNS o el archivo hosts, tienes que conocer la dirección IP privada de tu servidor. Esta dirección sólo puede ser utilizada en la red local donde está el servidor, y no está vinculada con tu dirección pública utilizada en Internet. - -Puedes descubrir la dirección privada de tu servidor de varias maneras : -- En la pantalla de conexión de Yunohost en el mismo servidor : -<img src="/images/ynh_login.png" width=600> - -- Desde la interfaz de administración de tu servidor Yunohost : - en Herramientas > Estado del servidor > Red -<img src="/images/ynh_admin_etat_ip.png" width=900> - -- O desde tu router o tu caja Internet, dependiendo de su modelo. - -## Configurar el DNS de la caja Internet o del router - -Vas a crear una redirección que estará activa en toda tu red local. El objetivo es crear una redirección DNS hacia el IP de tu servidor en tu caja Internet. Hay que acceder a la interfaz de configuración de tu caja y a los parámetros DNS, y luego crear una redirección local (por ejemplo, yunohost.local puede redigir hacia 192.168.21). - -## Configurar el archivo [hosts](https://es.wikipedia.org/wiki/Archivo_hosts) del ordenador cliente -Sólo deberías modificar el archivo hosts si no puedes modificar el DNS de tu caja Internet / router, porque el archivo hosts únicamente afectará el ordenador en el cual el archivo esté modificado. - -- En Windows, encontrarás el archivo hosts aquí : - `%SystemRoot%\system32\drivers\etc\` - > Es preciso visualizar los archivos y sistemas escondidos para ver el archivo hosts. -- En sistemas UNIX (GNU/Linux, Mac OS), lo encontrarás aquí : - `/etc/hosts` - > Necesitarás derechos root para modificar el archivo. - -Simplemente añade al final del archivo hosts una linea conteniendo la dirección IP privada del servidor y tu nombre de dominio - -```bash -192.168.1.62 domain.tld -``` diff --git a/dns_nohost_me.md b/dns_nohost_me.md deleted file mode 100644 index 2452f9fc..00000000 --- a/dns_nohost_me.md +++ /dev/null @@ -1,73 +0,0 @@ -# Nohost.me domains - -In order to make self-hosting as accessible as possible, the YunoHost Project provides a *free* -and *automatically configured* domain name service. By using this service, you -won't have to [configure DNS records](/dns_config) yourself, which -can be tedious and technical. - -The following (sub)domains are proposed: -- `whateveryouwant.nohost.me`; -- `whateveryouwant.noho.st`; -- `whateveryouwant.ynh.fr`. - -To use this service, you simply have to choose such a domain during the -post-installation. It will then be automatically configured by YunoHost ! - -N.B.: As a fairness measure, each instance may only -have **one such domain** setup at any given time. - -#### Subdomains - -The `nohost.me`, `noho.st` and `ynh.fr` domain service does not allow the creation of -subdomains. - -Even if YunoHost allows the installation of applications on subdomains (for -example, having the Owncloud application accessible from the -`cloud.mydomain.org` address), this feature is not allowed with the `nohost.me` -and `noho.st` domains and it is not possible to have a subdomain such as `my -application.mydomain.nohost.me`. - -To be able to enjoy applications that can only be installed at the root of a -domain name, you must have your own domain name. - -### Adding a nohost.me, noho.st or ynh.fr domain after the post-installation - -If you already did the postinstall and want to add an automatic domain, you -may do so from the "Domains" web interface, selecting the option "I don't have a domain name..." - -Alternatively, the following commands can be used. - -```bash -# Add the domain -yunohost domain add whateveryouwant.nohost.me - -# Subscribe/register to the dyndns service -yunohost dyndns subscribe -d whateveryouwant.nohost.me - -# [ wait ~ 30 seconds ] - -# Update the DNS conf -yunohost dyndns update - -# Set it as the main domain -yunohost tools maindomain --new-domain whateveryouwant.nohost.me -``` - -#### Retrieve a nohost.me, noho.st or ynh.fr domain - -If you reinstall your server and want to use a domain already used previously, -you must request a domain reset on the forum -[in the dedicated thread](https://forum.yunohost.org/t/nohost-domain-recovery/442). - - -#### Change a nohost.me, noho.st or ynh.fr domain - -If you wish to use a different automatic domain, you first have to remove -your present domain registration. This is done in 3 steps: - -1. Remove the domain from your instance (via webadmin or the `yunohost doamin remove` CLI). -**/!\ Caution: this will remove any app installed on this domain, along with its data.** -2. Ask for registration removal [in the dedicated forum thread](https://forum.yunohost.org/t/nohost-domain-recovery/442). -3. Remove automatic domain configuration files on your server, via CLI only : `sudo rm /etc/cron.d/yunohost-dyndns && sudo rm -r /etc/yunohost/dyndns` - -You may then add a new domain. diff --git a/dns_resolver.md b/dns_resolver.md deleted file mode 100644 index de33802b..00000000 --- a/dns_resolver.md +++ /dev/null @@ -1,30 +0,0 @@ -# YunoHost DNS Resolver - -+<div class="alert alert-danger">This page is deprecated / obsolete. Information it contains should be updated (or should be removed).</div> - -### Presentation -YunoHost provide a DNS service for DNS name resolution. Usually, your server is not configured to use it, it's your ISP DNS. For instance, for the Free ISP with Freebox router the DNS resolver IP is `192.168.0.254`. - -How to known: watch the file `/etc/resolv.conf`. This file is not modifiable because it is rewriten by the DHCP service. A DHCP client is configured, it requests the router to get DNS resolver IPs. -This IPs is provided by your ISP. - -### Configuration -To use YunoHost DNS resolver of your server, modify your DHCP configuration client: remove DNS name server request, and add static IP of your server `127.0.0.1`. - -Edit the file `/etc/dhcp/dhclient.conf`, add the line `supersede` and remove in the line `request` the word `domain-name-servers`: -```bash -supersede domain-name-servers 127.0.0.1, 192.168.0.254; -request subnet-mask, broadcast-address, time-offset, routers, - domain-name, domain-search, host-name, - dhcp6.name-servers, dhcp6.domain-search, - netbios-name-servers, netbios-scope, interface-mtu, - rfc3442-classless-static-routes, ntp-servers; -``` -Apply this modification by rebooting the DNS server: - -```bash -service dnsmasq restart -``` - -(TODO: It's possible to restart a service to take into account the modification -DHCP?-, but didn't work for me). -It's possible to do same modification in all machine in local network by replacing *127.0.0.1* by IP server. diff --git a/dns_resolver_fr.md b/dns_resolver_fr.md deleted file mode 100644 index 8f9060eb..00000000 --- a/dns_resolver_fr.md +++ /dev/null @@ -1,32 +0,0 @@ -# Résolveur DNS de YunoHost - -<div class="alert alert-danger">Cette page est dépréciée / obsolète. Les informations présentées ont besoin d'être mise à jour (ou doivent être retirée).</div> - -### Présentation -YunoHost est installé avec un service DNS pour la résolution des noms de domaine. En général, votre serveur n’est pas configuré, c’est celui de votre FAI. -Par exemple pour une Freebox la résolution se fait par l’adresse `192.168.0.254`. - -Comment savoir ? Regarder le contenu du fichier `/etc/resolv.conf`. Ce fichier n’est pas modifiable car il est réécrit par le service DHCP. -Un client DHCP est configuré, celui-ci interroge votre routeur pour les adresses IP de vos serveurs de résolution de DNS. Ces IPs sont fournis par votre FAI. - -### Configuration -Afin d’utiliser le résolveur DNS de votre instance YunoHost, il faut modifier la configuration DHCP pour ne pas faire de requêtes à votre routeur. Il faut donc mettre de façon statique la nouvelle adresse à savoir dans ce cas `127.0.0.1`. - -Éditer le fichier `/etc/dhcp/dhclient.conf`, ajouter une ligne `supersede` et supprimer de la ligne `request` le mot `domain-name-servers` : -```bash -supersede domain-name-servers 127.0.0.1, 192.168.0.254; -request subnet-mask, broadcast-address, time-offset, routers, - domain-name, domain-search, host-name, - dhcp6.name-servers, dhcp6.domain-search, - netbios-name-servers, netbios-scope, interface-mtu, - rfc3442-classless-static-routes, ntp-servers; -``` - -Afin de prendre en compte la modification, redémarrer le serveur DNS : - -```bash -service dnsmasq restart -``` - -(TODO : il doit être possible de reconfigurer à chaud, mais ça n’a pas fonctionné). -Il est possible de faire la même modification sur toutes vos machines du réseau local en remplaçant 127.0.0.1 par l’IP de votre serveur. diff --git a/docker.md b/docker.md deleted file mode 100644 index 6a76e864..00000000 --- a/docker.md +++ /dev/null @@ -1,23 +0,0 @@ -# Docker and YunoHost - -<div class="alert alert-danger"> -<b> -Yunohost doesn't support Docker officially since issues with versions 2.4+. -In question, YunoHost 2.4+ doesn't work anymore on Docker -because YunoHost requires systemd and Docker has chosen to not support it natively (and -there are other problems link to the firewall and services). -</b> -</div> - -## Community images - -However, community images exist and are available on Docker Hub : - - * AMD64 (classic) - * https://hub.docker.com/r/domainelibre/yunohost3/ (Yunohost v3) - * I386 (old computers) - * https://hub.docker.com/r/domainelibre/yunohost3-i386/ (Yunohost v3) - * ARMV7 (raspberry pi 2/3 ...) - * https://hub.docker.com/r/domainelibre/yunohost3-arm/ (Yunohost v3) - * ARMV6 (raspberry pi 1) - * https://hub.docker.com/r/tuxalex/yunohost-armv6/ (old yunohost version) diff --git a/docker_fr.md b/docker_fr.md deleted file mode 100644 index 736e293e..00000000 --- a/docker_fr.md +++ /dev/null @@ -1,23 +0,0 @@ -# Docker et YunoHost - -<div class="alert alert-danger"> -<b> -Yunohost ne supporte plus officiellement Docker depuis les problèmes rencontrés avec la version 2.4+. -En cause, YunoHost dépend désormait de systemd et docker a décidé qu'ils ne le -supporteraient pas nativement (et il y a d'autres problèmes liés au firewall et aux -services). -</b> -</div> - -## Images communautaires - -Cependant il existe des images communautaires disponibles sur Docker Hub : - - * AMD64 (classique) - * https://hub.docker.com/r/domainelibre/yunohost3/ (Yunohost v3) - * I386 (anciens pc) - * https://hub.docker.com/r/domainelibre/yunohost3-i386/ (Yunohost v3) - * ARMV7 (raspberry pi 2/3 ...) - * https://hub.docker.com/r/domainelibre/yunohost3-arm/ (Yunohost v3) - * ARMV6 (raspberry pi 1) - * https://hub.docker.com/r/tuxalex/yunohost-armv6/ (ancienne version de Yunohost) diff --git a/docs.md b/docs.md deleted file mode 100644 index 7b05f70c..00000000 --- a/docs.md +++ /dev/null @@ -1,32 +0,0 @@ -#Documentation - -<p class="lead"> -YunoHost's documentation has 2 different sections: -</p> - -<div class="row text-center"> - -<div class="col col-md-4 col-md-offset-1"> -<a class="btn btn-primary btn-lg" href="/admindoc"><span class="glyphicon glyphicon-lock"></span> Administrator guide</a> -<p><small class="text-muted">Including installation, server management and application management</small></p> -</div> - -<div class="col col-md-4 col-md-offset-1"> -<a class="btn btn-danger btn-lg" href="/contributordoc"><span class="glyphicon glyphicon-heart"></span> Contributor guide</a> -<p><small class="text-muted">Which contains everything you have to know about us and the way we work</small></p> -</div> - -</div> - -* Project's life: - * [Frequently asked questions](/faq) - * [Project news](/news) - * [Project organization](/project_organization) - * [Project budget](/project_budget) - * [Forum](https://forum.yunohost.org) - * [Chat rooms](/chat_rooms) - * [Communication](/communication) - * [Support / Help](/help) - -* Use example: - * [YunoHost for non-profit organisations](/use_case_non-profit_organisations) diff --git a/docs_ar.md b/docs_ar.md deleted file mode 100644 index ae7479ad..00000000 --- a/docs_ar.md +++ /dev/null @@ -1,31 +0,0 @@ -#<div dir="auto">الدليل</div> - -<p dir="rtl" class="lead"> -دليل واي يونوهوست YunoHost يرتكز أساسًا على ثلاثة محاور : -</p> - -<div class="row text-center"> - -<div dir="rtl" class="col col-md-4 col-md-offset-1"> -<a class="btn btn-primary btn-lg" href="/admindoc"><span class="glyphicon glyphicon-lock"></span> دليل المدير</a> -<p><small class="text-muted">يتطرق إلى طريقة التنصيب و إدارة السيرفر و التطبيقات</small></p> -</div> - -<div dir="rtl" class="col col-md-4 col-md-offset-1"> -<a class="btn btn-danger btn-lg" href="/contributordoc"><span class="glyphicon glyphicon-heart"></span> دليل المساهم</a> -<p><small class="text-muted">يحتوي على كافة المعلومات التي تخصنا و أسلوب عملنا و مساهمتنا</small></p> -</div> - -</div> - -* Project's life: - * [Frequently asked questions](/faq) - * [Project organization](/project_organization) - * [Blog](https://forum.yunohost.org/c/announcement) - * [Forum](https://forum.yunohost.org) - * [Chat rooms](/chat_rooms) - * [Communication](/communication) - * [Support / Help](/help) - -* استخدم مثال: - * [YunoHost للمنظمات غير الهادفة للربح](/use_case_non-profit_organisations) diff --git a/docs_de.md b/docs_de.md deleted file mode 100644 index e8f57252..00000000 --- a/docs_de.md +++ /dev/null @@ -1,31 +0,0 @@ -#Documentation - -<p class="lead"> -Die YunoHost Dokumentation ist in 2 Bereiche aufgeteilt: -</p> - -<div class="row text-center"> - -<div class="col col-md-4 col-md-offset-1"> -<a class="btn btn-primary btn-lg" href="/admindoc"><span class="glyphicon glyphicon-lock"></span> Handbuch für Administratoren</a> -<p><small class="text-muted">Befasst sich mit den Installationsschritten und der Verwaltung von Server und Apps.</small></p> -</div> - -<div class="col col-md-4 col-md-offset-1"> -<a class="btn btn-danger btn-lg" href="/contributordoc"><span class="glyphicon glyphicon-heart"></span> Handbuch für Mitwirkende</a> -<p><small class="text-muted">Alles, was du über uns und unsere Art zu arbeiten wissen musst.</small></p> -</div> - -</div> - -* Das Projektleben: - * [Häufig gestellte Fragen](/faq) - * [Projektorganisation](/project_organization) - * [Blog](https://forum.yunohost.org/c/announcement) - * [Forum](https://forum.yunohost.org) - * [Chaträume](/chat_rooms) - * [Kommunikation](/communication) - * [Support / Hilfe](/help) - -* Verwenden Sie ein Beispiel: - * [YunoHost für gemeinnützige Organisationen](/use_case_non-profit_organisations) diff --git a/docs_fr.md b/docs_fr.md deleted file mode 100644 index b236385f..00000000 --- a/docs_fr.md +++ /dev/null @@ -1,32 +0,0 @@ -#Documentation - -<p class="lead"> -La documentation de YunoHost s’articule autour de deux sections : -</p> - -<div class="row text-center"> - -<div class="col col-md-4 col-md-offset-1"> -<a class="btn btn-primary btn-lg" href="/admindoc"><span class="glyphicon glyphicon-lock"></span> Guide de l’administrateur</a> -<p><small class="text-muted">Incluant l’installation, la gestion du serveur et des applications</small></p> -</div> - -<div class="col col-md-4 col-md-offset-1"> -<a class="btn btn-danger btn-lg" href="/contributordoc"><span class="glyphicon glyphicon-heart"></span> Guide du contributeur</a> -<p><small class="text-muted">Qui contient tout ce que vous devez savoir à propos de nous et de notre manière de travailler</small></p> -</div> - -</div> - -* Vie du projet : - * [Foire aux questions](/faq) - * [Nouvelles du projet](/news) - * [Organisation du projet](/project_organization) - * [Budget previsionnel](/project_budget) - * [Forum](https://forum.yunohost.org) - * [Salons de discussions](/chat_rooms) - * [Communication extérieure](/communication) - * [Support / Aide](/help) - -* Exemple d'utilisation: - * [YunoHost pour les organisations à but non lucratif](/use_case_non-profit_organisations) diff --git a/docs_it.md b/docs_it.md deleted file mode 100644 index 89535377..00000000 --- a/docs_it.md +++ /dev/null @@ -1,31 +0,0 @@ -#Documentazione - -<p class="lead"> -La documentazione di YunoHost ha 2 differenti sezioni: -</p> - -<div class="row text-center"> - -<div class="col col-md-4 col-md-offset-1"> -<a class="btn btn-primary btn-lg" href="/admindoc"><span class="glyphicon glyphicon-lock"></span> Guida di amministrazione</a> -<p><small class="text-muted">Include l'installazione, la gestione del server e delle applicazioni</small></p> -</div> - -<div class="col col-md-4 col-md-offset-1"> -<a class="btn btn-danger btn-lg" href="/contributordoc"><span class="glyphicon glyphicon-heart"></span> Guida del contributore</a> -<p><small class="text-muted">Contiene tutto quello che devi sapere su di noi e su come lavoriamo</small></p> -</div> - -</div> - -* Vita del progetto : - * [Frequently asked questions](/faq) - * [Project organization](/project_organization) - * [Blog](https://forum.yunohost.org/c/announcement) - * [Forum](https://forum.yunohost.org) - * [Chat rooms](/chat_rooms) - * [Communication](/communication) - * [Supporto / Aiuto](/help) - -* Usa l'esempio: - * [YunoHost per le organizzazioni senza scopo di lucro](/use_case_non-profit_organisations) diff --git a/email_configure_client_fr.md b/email_configure_client_fr.md deleted file mode 100644 index 8e6cd5b4..00000000 --- a/email_configure_client_fr.md +++ /dev/null @@ -1,43 +0,0 @@ -## Configurer un client mail - -Vous pouvez récupérer et envoyer des emails avec votre instance YunoHost grâce à des logiciels comme Mozilla Thunderbird, ou sur votre smartphone grâce à des applications comme K-9 Mail. - -Normalement, votre client mail devrait recevoir la configuration automatiquement lorsque vous ajoutez un compte. Si cela ne fonctionne pas, il est possible de le faire manuellement en suivant les quelques étapes suivantes. (Cependant, cela devrait être compris comme étant un bug dans YunoHost, et le cas échéant, c'est cool si vous nous notifiez du problème pour que nous puissions tenter de reproduire et corriger le problème !) - -### Réglages génériques - -Voici les éléments que vous devrez entrer pour configurer manuellement votre client mail (`domain.tld` fait référence à ce qui est après le @ dans votre adresse mail, et `nom_dutilisateur` ce qui est avant @). - -| Protocole | Port | Chiffrement | Authentification | Login | -| :--: | :-: | :--: | :--: | :--: | -| IMAP | 993 | SSL/TLS | Mot de passe normal | `nom_dutilisateur` (sans `@domain.tld`) | -| SMTP | 587 | STARTTLS | Mot de passe normal | `nom_dutilisateur` (sans `@domain.tld`) | - -### <img src="images/thunderbird.png" width=50> Configurer Mozilla Thunderbird - -Pour configurer manuellement un nouveau compte dans Thunderbird commencez par remplir les informations de base (Nom, adresse et mot de passe), cliquez sur Continuer puis Configuration Manuelle. Enlevez le `.` avant le nom de domaine. Sélectionnez le port 993 avec SSL/TLS pour IMAP, et le port 587 avec STARTTLS pour SMTP. Sélectionnez 'Mot de passe normal' pour l'authentification. Testez la configuration puis validez. (Il vous faudra ensuite possiblement accepter des certificats pour que tout fonctionne correctement.) - -<img src="/images/thunderbird_config_1.png" width=900> -<img src="/images/thunderbird_config_2.png" width=900> - -* [Gérer les alias mails](https://support.mozilla.org/en-US/kb/configuring-email-aliases) - -### <img src="images/k9mail.png" width=50> Configurer K-9 Mail (sur Android) - -Suivez les instructions suivantes. (Comme pour Thunderbird, il vous faudra peut-être accepter des certificats à un moment) - -<a href="/images/k9mail_config_1.png"><img src="/images/k9mail_config_1.png" width=200/></a> -<a href="/images/k9mail_config_2.png"><img src="/images/k9mail_config_2.png" width=200/></a> -<a href="/images/k9mail_config_3.png"><img src="/images/k9mail_config_3.png" width=200/></a> -<a href="/images/k9mail_config_4.png"><img src="/images/k9mail_config_4.png" width=200/></a> - -### <img src="images/dekko-app.png" width=50> Configure Dekko (on Ubuntu Touch) - -La première fois, vous pouvez simplement choisir "Ajouter un compte". Si vous avez déjà un compte configuré, appuyez sur le menu hamburger puis sur le rouage, choisissez Courrier, Comptes et appuyez sur le symbole " + ". - -Sélectionnez ensuite IMAP. Remplissez les champs et appuyez sur Suivant. Dekko va ensuite chercher la configuration. Vérifiez que tous les champs sont corrects. Assurez-vous d'avoir votre nom d'utilisateur yunohost, PAS votre adresse e-mail et choisissez "Autoriser les certificats non fiables". Faites ceci pour IMAP et SMTP et appuyez sur Suivant. Dekko va ensuite synchroniser le compte après quoi vous aurez terminé. Félicitations ! - -<a href="/images/dekko_config_1.png"><img src="/images/dekko_config_1.png" width=200/></a> -<a href="/images/dekko_config_2.png"><img src="/images/dekko_config_2.png" width=200/></a> -<a href="/images/dekko_config_3.png"><img src="/images/dekko_config_3.png" width=200/></a> -<a href="/images/dekko_config_4.png"><img src="/images/dekko_config_4.png" width=200/></a> diff --git a/fail2ban.md b/fail2ban.md deleted file mode 100644 index aa6acf5b..00000000 --- a/fail2ban.md +++ /dev/null @@ -1,32 +0,0 @@ -# Fail2ban - -Fail2Ban is an intrusion prevention software that protects computer servers from brute-force attacks. It monitors some log files and will ban IP addresses that shows brute-force-like behavior. - -In particular, Fail2ban monitors SSH connection attempts. After 5 failed login attempts on SSH, Fail2ban will ban the corresponding IP address from connecting through SSH for 10 minutes. If this IP is found to recidive several times, it might get ban for a week. - -## Unban an IP - -To unban an IP from fail2ban, you first need to access your server by some mean (e.g. from another IP by the one being banned). - -Then look at fail2ban's log to identify in which jail the IP was put : - -```bash -$ tail /var/log/fail2ban.log -2019-01-07 16:24:47 fail2ban.filter [1837]: INFO [sshd] Found 11.22.33.44 -2019-01-07 16:24:49 fail2ban.filter [1837]: INFO [sshd] Found 11.22.33.44 -2019-01-07 16:24:51 fail2ban.filter [1837]: INFO [sshd] Found 11.22.33.44 -2019-01-07 16:24:54 fail2ban.filter [1837]: INFO [sshd] Found 11.22.33.44 -2019-01-07 16:24:57 fail2ban.filter [1837]: INFO [sshd] Found 11.22.33.44 -2019-01-07 16:24:57 fail2ban.actions [1837]: NOTICE [sshd] Ban 11.22.33.44 -2019-01-07 16:24:57 fail2ban.filter [1837]: NOTICE [recidive] Ban 11.22.33.44 -``` - -Here, the IP `11.22.33.44` was banned in the `sshd` and `recidive` jails. - -Then unban the IP with the following commands : - -```bash -$ fail2ban-client set sshd unbanip 11.22.33.44 -$ fail2ban-client set recidive unbanip 11.22.33.44 -``` - diff --git a/fail2ban_fr.md b/fail2ban_fr.md deleted file mode 100644 index cac68680..00000000 --- a/fail2ban_fr.md +++ /dev/null @@ -1,32 +0,0 @@ -# Fail2ban - -Fail2Ban est un logiciel de prévention des intrusions qui protège les serveurs informatiques contre les attaques de brute-force. Il surveille certains journaux et bannira les adresses IP qui montrent un comportement de brute-forcing. - -En particulier, Fail2ban surveille les tentatives de connexion SSH. Après 5 tentatives de connexion échouées sur SSH, Fail2ban banniera l'IP de se connecter via SSH pendant 10 minutes. Si cette adresse récidive plusieurs fois, elle peut être bannie pendant une semaine. - -## Débannir une IP - -Pour débloquer une IP de fail2ban, vous devez d'abord accéder à votre serveur par un moyen quelconque (par exemple à partir d'une autre IP que celle bannie). - -Ensuite, regardez le journal de fail2ban pour identifier dans quelle 'prison' (jail) l'IP a été bannie : - -```bash -$ tail /var/log/fail2ban.log -2019-01-07 16:24:47 fail2ban.filter [1837]: INFO [sshd] Found 11.22.33.44 -2019-01-07 16:24:49 fail2ban.filter [1837]: INFO [sshd] Found 11.22.33.44 -2019-01-07 16:24:51 fail2ban.filter [1837]: INFO [sshd] Found 11.22.33.44 -2019-01-07 16:24:54 fail2ban.filter [1837]: INFO [sshd] Found 11.22.33.44 -2019-01-07 16:24:57 fail2ban.filter [1837]: INFO [sshd] Found 11.22.33.44 -2019-01-07 16:24:57 fail2ban.actions [1837]: NOTICE [sshd] Ban 11.22.33.44 -2019-01-07 16:24:57 fail2ban.filter [1837]: NOTICE [recidive] Ban 11.22.33.44 -``` - -Ici, l'IP `11.22.33.44` a été bannie dans les jails `sshd` et `recidive`. - -Puis débanissez l'IP avec les commandes suivantes : - -```bash -$ fail2ban-client set sshd unbanip 11.22.33.44 -$ fail2ban-client set recidive unbanip 11.22.33.44 -``` - diff --git a/filezilla_fr.md b/filezilla_fr.md deleted file mode 100644 index 1eb993e6..00000000 --- a/filezilla_fr.md +++ /dev/null @@ -1,87 +0,0 @@ -# Échanger des fichiers avec son serveur à l'aide d'une interface graphique - -Cette page explique comment échanger des fichiers (sauvegardes, musiques, -photos, films, ...) avec son serveur à l'aide d'un outil graphique. C'est donc -une méthode alternative au fait d'utiliser la commande `scp` qui peut être jugée -technique et cryptique, ou de devoir installer Nextcloud. - -[FileZilla](https://filezilla-project.org/) permet d'accomplir cela. Il s'agit -d'un logiciel libre disponible pour Windows, Linux et MacOS. - -## Télécharger et installer FileZilla - -Vous pouvez télécharger FileZilla depuis [cette page](https://filezilla-project.org/download.php?type=client). -Le site devrait détecter automatiquement la version nécessaire pour votre ordinateur. -Sinon, suivez les instructions pour [installer le client](https://wiki.filezilla-project.org/Client_Installation) - -Installez le programme et lancez *Filezilla*. - -## Configuration - -1. Cliquez sur l'icône *Gestionnaire de Sites* en haut à gauche de sorte à crééer une configuration utilisable ultérieurement. - -  - -2. Cliquez sur **Nouveau site** et donnez un nom au serveur que vous allez utiliser. Par exemple "Famille". Remplissez les paramètres comme sur la capture d'écran (en remplaçant l'adresse du serveur par la votre). Une fois terminé, cliquez sur **Connexion**. (N.B. : si vous souhaitez éditer les fichiers de l'application [custom webapp](https://github.com/YunoHost-Apps/my_webapp_ynh), il vous faudra utiliser un autre utilisateur que admin. Se référer à la documentation de custom webapp.) - -  - -3. Vous recevrez un avertissement. *Vous pouvez l'ignorer si il s'agit de la première connexion*. - -  - -4. Filezilla vous demande maintenant le mot de passe `admin` pour vous connecter à votre serveur - -  - -5. Une fois cette configuration créée, elle sera réutilisable les fois suivanteS. - -  - -<div class="alert alert-success"> - <span class="glyphicon glyphicon-chevron-right"></span> Vous pouvez désormais utiliser cette configuration pour vous connecter. -</div> - -## Utilisation - -1. Connectez-vous au Site créé précédemment. *Il se peut que le mot de passe soit redemandé.* - - La partie gauche correspond à votre ordinateur. La partie droite correspond au serveur YunoHost distant. Vous pouvez naviguer dans les dossiers et faire des glisser-déposer entre les deux panneaux. - -  - -2. Dans le panneau de droite, vous pouvez aller dans `/home/yunohost.backup/archives/` pour trouver les archives de [sauvegardes](/backup). - -  - -<div class="alert alert-warning"> - <span class="glyphicon glyphicon-cloud-download"></span> Assurez-vous de télécharger à la fois le fichier `.tar.gz` et le fichier `.json` -</div> - - - ----- - -Sources - -* [Documentation officielle](https://wiki.filezilla-project.org/FileZilla_Client_Tutorial_(fr)) -* [Tutoriel général à Filezilla](https://www.rc.fas.harvard.edu/resources/documentation/sftp-file-transfer/) - -## Alternatives à Filezilla - -### Sous Linux - -Depuis n'importe quel Linux récent, vous devriez pouvoir utiliser le gestionnaire de fichiers pour accéder à votre serveur. - -Nautilus de Gnome3 intègre de base des fonctionnalités similaires à FileZilla : - -* <https://help.gnome.org/users/gnome-help/stable/nautilus-connect.html.en> -* <https://www.techrepublic.com/article/how-to-use-linux-file-manager-to-connect-to-an-sftp-server/> - -### Sous Windows - -* [WinSCP](https://winscp.net/) est aussi un bon candidat pour Windows - -### Sous MacOS - -* [Cyberduck](https://cyberduck.io/) logiciel libre pour MacOS diff --git a/groups_and_permissions.md b/groups_and_permissions.md deleted file mode 100644 index 4397968c..00000000 --- a/groups_and_permissions.md +++ /dev/null @@ -1,329 +0,0 @@ -User groups and permissions -=========================== - -You can access the *groups and permissions* management interface from the webadmin -by going into the 'Users' section and clicking the corresponding button: - - - -Managing groups ---------------- - -The group mechanism can be used to define groups of users which then can be used to restrict permissions for applications and other services (such as mail or xmpp). Note that it is *not* mandatory to create a group to do so: you can also restrict access to an app or service on a user-per-user basis. - -Using groups is however useful for semantics, for example if you host multiple groups of friends, associations or businesses on your server, you might want to create groups like `association1` and `association2` and add members of each association to the relevant group. - -### Default groups - -By default, two special groups are created: -- `all_users`, that contain all users registered on YunoHost, -- `visitors`, that applies to people viewing the server while not logged in. - -The content of those groups cannot be changed, only the permissions given to them. - -### List existing groups - -The existing groups are listed at the top of the *groups and permissions* page. - - - -To list the currently existing groups in CLI : - -```bash -$ yunohost user group list -groups: - all_users: - members: - - alice - - bob - - charlie - - delphine -``` - - -### Creating a new group - -To create a new group, simply click on the "New Group" button at the top of the page. You may only choose a name formed with letters (uper- and lowercase) and spaces. The group is created empty and without any permission. - - - -In CLI, to create a new group called `yolo_crew` - -```bash -$ yunohost user group create yolo_crew -``` - -### Updating a group - -Let's add a first to this group: in the group panel, click the button "add a user" and scroll to the desired user, then click on it. - - - -To remove a user, click on the cross next to their username, in the group panel. - - - -In CLI, use the following command to add `charlie` and `delphine`to the `yolo_crew` group: - -```bash -$ yunohost user group update yolo_crew --add charlie delphine -``` - -(similarly, `--remove` can be used to remove members from a group) - -Now in the group list we should see : - -```bash -$ yunohost user group list -groups: - all_users: - members: - - alice - - bob - - charlie - - delphine - yolo_crew: - members: - - charlie - - delphine -``` - -### Deleting groups - -To delete a group, click on the red cross on the top right of the group panel. You will be asked for confirmation. - - - -To delete the group `yolo_crew` in CLI, you may run - -```bash -$ yunohost user group delete yolo_crew -``` - -Managing permissions --------------------- - -The permission mechanism allow to restrict access to services (for example mail, xmpp, ...) and apps, or even specific parts of the apps (for example the administration interface of wordpress). - -### List permissions - -The groups page lists the permissions given to each group, including the special groups `all_users` and `visitors`. - - - -To list permissions and corresponding accesses in CLI: - -```bash -$ yunohost user permission list -permissions: - mail.main: - allowed: all_users - wordpress.admin: - allowed: - wordpress.main: - allowed: all_users - xmpp.main: - allowed: all_users -``` - -Here, we find that all registered users can use email, xmpp, and access the wordpress blog. However, nobody can access the wordpress admin interface. - -More details can be displayed by adding the `--full` option which will display the list of users corresponding to groups allowed, as well as urls associated to a permission (relevant for web apps). - -### Add accesses to group or users - -To add a permission to a group, simply click the "+" button in the group panel, scroll to the desired permission, then click on it. - - - -To allow a group to access the wordpress admin interface in CLI: - -```bash -$ yunohost user permission update wordpress.admin --add yolo_crew -``` - -Note that you can also allow a single user, by using the specific panel at the bottom of the page. - - - -or in CLI: - -```bash -$ yunohost user permission update wordpress.admin --add alice -``` - -And now we may see that both the YoloCrew and Alice have access to the wordpress admin interface : - -```bash -$ yunohost user permission list - [...] - wordpress.admin: - allowed: - - yolo_crew - - alice - [...] -``` - -Note that, for example, if we want to restrict permission for email so that only Bob is allowed to email, we should also remove `all_users` from the permission, by deleting it from the `all_users` group panel, or in CLI : - -```bash -$ yunohost user permission update mail --remove all_users --add bob -``` - -The webadmin will issue a warning if you set a permission that is superseeded by a wider permission. - - -Notes for apps packagers ------------------------- - -Installing an app creates the permission `app.main` with `all_users` allowed by default. - -If you wish to make the application publicly available, instead of the old `unprotected_urls` mechanism, you should give access to the special group `visitors`: - -```bash -ynh_permission_update --permission "main" --add visitors -``` - -If you wish to create a custom permission for your app (e.g. to restrict access to an admin interface) you may use the following helpers: - -```bash -ynh_permission_create --permission "admin" --url "/admin" --allowed "$admin_user" -``` - -You don't need to take care of removing permissions or backing up/restoring them as it is handled by the core of YunoHost. - -### Migrating away from the legacy permission management - -When migrating/fixing an app still using the legacy permission system, it should be understood that the accesses are now to be managed by features from the core, outside of the application scripts! - -Application scripts are only expected to: -- if relevant, during the install script, initialize the main permission of the app as public (`visitors`) or private (`all_users`) or only accessible to specific groups/users ; -- if relevant, create and initialize any other specific permission (e.g. to some admin interface) in the install script (and *maybe* in some migration happening in the upgrade script). - -Applications scripts should absolutely **NOT** mess up with any already-existing app accesses (including `unprotected`/`skipped_uris` settings) during any other case, as *it would reset any admin-defined access rule*! - -When migrating away from the legacy permission, you should: -- remove any management of `$is_public`-like or `$admin_user`-like setting, except for any manifest question meant to either *initialize* the app as public/private or specific permissions ; -- remove any management of `skipped_`, `unprotected_` and `protected_uris` (and `_regex`) settings that are now considered obsolete and deprecated. (N.B.: you should **explicitly delete them in the upgrade script**). Instead, you should now rely on the new `ynh_permission_*` helpers instead. If you do feel like you still need to use them, please contact the core team to provide your feedback and we'll figure out something ; -For example, in the upgrade script if you used the `protected_uris` key before, you may use this code in the `DOWNWARD COMPATIBILITY` section: - -```bash -protected_uris=$(ynh_app_setting_get --app=$app --key=protected_uris) - -# Unused with the permission system -if [ ! -z "$protected_uris" ]; then - ynh_app_setting_delete --app=$app --key=protected_uris -fi -``` - -- remove any call to `yunohost app addaccess` and similar actions that are now obsolete and deprecated. -- if your app use LDAP and support filter, use the filter `'(&(objectClass=posixAccount)(permission=cn=YOUR_APP.main,ou=permission,dc=yunohost,dc=org))'` to allow users who have this permission. (A complete documentation of LDAP [here](https://moulinette.readthedocs.io/en/latest/ldap.html) if you want to undestand how it works with YunoHost) - -Here an example of how to migrate the code from legacy to new permission system: [example](https://github.com/YunoHost/example_ynh/pull/111/files) - -#### Specific case: regex protection - -If you still need to use regex to protect or unprotect urls, you can't use the new permission system (for now). - -But you can create a fake permission and use hooks to handle if there is a change in this faked permission. - -In the install script, create the fake permission (with no url): - -`ynh_permission_create --permission="create poll" --allowed "visitors" "all_users"` - -Then use the legacy protection: - -```bash -# Make app public if necessary -if [ $is_public -eq 1 ] -then - if [ "$path_url" == "/" ]; then - # If the path is /, clear it to prevent any error with the regex. - path_url="" - fi - # Modify the domain to be used in a regex - domain_regex=$(echo "$domain" | sed 's@-@.@g') - ynh_app_setting_set --app=$app --key=unprotected_regex --value="$domain_regex$path_url/create_poll.php?.*$","$domain_regex$path_url/adminstuds.php?.*" -else - ynh_permission_update --permission="create poll" --remove="visitors" -fi -``` - -In this example, if the app is public the group `visitors` has access to the permission `create poll`, the group is removed from this permission otherwise. - -Then create two files in the directory `hooks` at the root of the git repository: `post_app_addaccess` and `post_app_removeaccess`. In these hooks, you'll remove or readd the regex protection if the `visitors` group is added or removed from this permission: - -`post_app_addaccess`: - -```bash -#!/bin/bash - -# Source app helpers -source /usr/share/yunohost/helpers - -app=$1 -added_users=$2 -permission=$3 -added_groups=$4 - -if [ "$app" == __APP__ ]; then - if [ "$permission" = "create poll" ]; then # The fake permission "create poll" is modifed. - if [ "$added_groups" = "visitors" ]; then # As is it a fake permission we can only grant/remove the "visitors" group. - domain=$(ynh_app_setting_get --app=$app --key=domain) - path_url=$(ynh_app_setting_get --app=$app --key=path) - - if [ "$path_url" == "/" ]; then - # If the path is /, clear it to prevent any error with the regex. - path_url="" - fi - # Modify the domain to be used in a regex - domain_regex=$(echo "$domain" | sed 's@-@.@g') - ynh_app_setting_set --app=$app --key=unprotected_regex --value="$domain_regex$path_url/create_poll.php?.*$","$domain_regex$path_url/adminstuds.php?.*" - - # Sync the is_public variable according to the permission - ynh_app_setting_set --app=$app --key=is_public --value=1 - - yunohost app ssowatconf - else - ynh_print_warn --message="This app doesn't support this authorisation, you can only add or remove visitors group." - fi - fi -fi -``` - -`post_app_removeaccess` - -```bash -#!/bin/bash - -# Source app helpers -source /usr/share/yunohost/helpers - -app=$1 -removed_users=$2 -permission=$3 -removed_groups=$4 - -if [ "$app" == __APP__ ]; then - if [ "$permission" = "create poll" ]; then # The fake permission "create poll" is modifed. - if [ "$removed_groups" = "visitors" ]; then # As is it a fake permission we can only grant/remove the "visitors" group. - - # We remove the regex, no more protection is needed. - ynh_app_setting_delete --app=$app --key=unprotected_regex - - # Sync the is_public variable according to the permission - ynh_app_setting_set --app=$app --key=is_public --value=0 - - yunohost app ssowatconf - else - ynh_print_warn --message="This app doesn't support this authorisation, you can only add or remove visitors group." - fi - fi -fi -``` - -Don't forget to replace `__APP__` during the install/upgrade script. - -Here are some apps that use this specific case: [Lutim](https://github.com/YunoHost-Apps/lutim_ynh/pull/44/files) and [Opensondage](https://github.com/YunoHost-Apps/opensondage_ynh/pull/59/files) - -If you have any question, please contact someone from the apps-group. diff --git a/hardware.md b/hardware.md deleted file mode 100644 index 3b4132d8..00000000 --- a/hardware.md +++ /dev/null @@ -1,14 +0,0 @@ -# Hardware - -YunoHost can be installed on the following hardware : -- ARM boards (Raspberry Pi, Olinuxino LIME1 & 2, Orange Pi, etc...) ; -- 'Old' desktop computers or laptops ; -- Remote servers, a.k.a Virtual Private Servers (VPS). - -Corresponding installation guides can be found on [this page](/install). - -### Minimum requirements - -* 500 MHz CPU -* 512 MB RAM (recommended : 1 GB in order to run all the services and apps properly) -* 8 GB storage capacity (recommended : 32 GB to store mails and documents) diff --git a/hardware_de.md b/hardware_de.md deleted file mode 100644 index effdc0e1..00000000 --- a/hardware_de.md +++ /dev/null @@ -1,14 +0,0 @@ -# Hardware - -YunoHost kann auf folgender Hardware installiert werden: -- ARM Boards (Raspberry Pi, Olinuxino LIME1 & 2, Orange Pi, etc...) ; -- 'Alte' Desktop Computer oder Laptops/Notebooks ; -- Remote servers, auch bekannt als Virtual Private Servers (VPS). - -Entsprechende Installationsanleitungen finden Sie auf [dieser Seite](/install). - -### Minimale Voraussetzungen - -* 500 MHz CPU -* 512 MB RAM (empfohlen : 1 GB um alle Apps und Programme schnell ausführen zu können) -* 8 GB Speicher/HDD (empfohlen : 32 GB bei Nutzung als Mail oder Dokumentenserver) diff --git a/hardware_es.md b/hardware_es.md deleted file mode 100644 index 7fb2556d..00000000 --- a/hardware_es.md +++ /dev/null @@ -1,14 +0,0 @@ -# Hardware - -YunoHost puede ser instalado en este hardware : -- Tarjetas ARM (Raspberry Pi, Olinuxino LIME1 & 2, Orange Pi, etc...) ; -- 'Viejos' ordenadores de escritorio ou portátiles ; -- Servidores remotos, también llamado Virtual Private Servers (VPS). - -Los guías de instalación se encuentran en [esta página](/install). - -### Configuración minimal - -* Procesador 500MHz -* 512 Mo de RAM (recomendado : 1Go para que los servicios y las aplicaciones funcionen correctamente -* 8 Go de espacio de almacenamiento (recomendado : 32 Go para poder almacenar emails y documentos) diff --git a/hardware_fr.md b/hardware_fr.md deleted file mode 100644 index b5e721b9..00000000 --- a/hardware_fr.md +++ /dev/null @@ -1,14 +0,0 @@ -# Matériel - -YunoHost peut être installé sur les types de matériel suivants : -- Cartes ARM (Raspberry Pi, Olinuxino LIME1 & 2, Orange Pi, etc...) ; -- 'Vieux' ordinateurs de bureau ou portables ; -- Serveurs distants, aussi appelé Virtual Private Servers (VPS). - -Les guides d'installations peuvent être trouvés sur [cette page](/install). - -### Configuration minimale - -* Processeur 500MHz -* 512 Mo de RAM (recommandé : 1 Go pour pouvoir faire tourner les services et applications correctement) -* 8 Go d'espace de stockage (recommandé : 32 Go pour pouvoir stocker emails et documents) diff --git a/help.md b/help.md deleted file mode 100644 index 58f7c453..00000000 --- a/help.md +++ /dev/null @@ -1,59 +0,0 @@ -# Looking for help? - -<h3>Connect to the support chatroom</h3> -<center> -<div class="alert alert-info" markdown="1" style="max-width:700px;"> -<strong>ProTips™</strong> -<ul style="text-align:left;"> -<li>Don't ask to ask, just ask !</li> -<li><em>Be patient</em>, it can take a few minutes before someone sees your messages.</li> -</ul> -</div> - -<iframe src="https://kiwiirc.com/client/irc.freenode.org:+6697/?nick=foobar|?&theme=mini#yunohost" style="border:0; width:100%; height:450px;"></iframe> - -</br> -</br> -<em>Note : this room is available via IRC (#yunohost on freenode - <a href="https://kiwiirc.com/client/irc.freenode.org:+6697/?nick=foobar|?&theme=mini#yunohost">using kiwiirc</a>), via XMPP <small>(support@conference.yunohost.org)</small>, or Matrix <small>(#freenode_#yunohost:matrix.org - <a target="_blank" href="https://riot.im/app/#/room/#yunohost:matrix.org">using Riot</a>)</small></em> -</center> - -<h3>... or ask on the forum !</h3> - -<center> -<button id="goForum" type="button" class="btn btn-success" style="font-weight:bold;"> - <span class="glyphicon glyphicon-comment"></span> Go to the forum - </button> -</center> - -<h3>You've found a bug ?</h3> - -<center> -<br> -<em>Please report it on our bugtracker or contact the developers</em><br><br> -<button id="goBugtracker" type="button" class="btn btn-warning" style="font-weight:bold;"> - <span class="glyphicon glyphicon-exclamation-sign"></span> Report a bug - </button> -<button id="goDevroom" type="button" class="btn btn-warning" style="font-weight:bold; margin-left:40px"> - <span class="glyphicon glyphicon-comment"></span> Contact the developers - </button> -</br> -</br> -<em>Note : you can also connect to the devrooms, using your favorite XMPP client, to </br> -dev@conference.yunohost.org and apps@conference.yunohost.org</br> -or with a Matrix client to</br> -#freenode_#yunohost-dev:matrix.org</em> -</center> - -<script> - -document.getElementById("goForum").onclick = function() { - window.location.href = "https://forum.yunohost.org/latest"; -} -document.getElementById("goBugtracker").onclick = function() { - window.location.href = "https://github.com/yunohost/issues/issues"; -} -document.getElementById("goDevroom").onclick = function() { - window.location.href = "https://kiwiirc.com/client/irc.freenode.net/yunohost-dev"; -} -</script> - diff --git a/help_fr.md b/help_fr.md deleted file mode 100644 index debf9a6a..00000000 --- a/help_fr.md +++ /dev/null @@ -1,61 +0,0 @@ -# Besoin d'aide ? - -<h3>Connectez-vous au salon de support</h3> -<center> -<div class="alert alert-info" markdown="1" style="max-width:750px;"> -<strong>ProTips™</strong> -<ul style="text-align:left;"> -<li>Pas besoin de demander si vous pouvez poser une question - posez-la directement !</li> -<li><em>Soyez patient</em>, cela peut prendre plusieurs minutes avant que quelqu'un remarque vos messages.</li> -</ul> -</div> - -<iframe src="https://kiwiirc.com/client/irc.freenode.org:+6697/?nick=foobar|?&theme=mini#yunohost" style="border:0; width:100%; height:450px;"></iframe> - -</br> -</br> -<em>Note : ce salon est accessible via IRC (#yunohost sur freenode en utilisant <a href="https://kiwiirc.com/client/irc.freenode.org:+6697/?nick=foobar|?&theme=mini#yunohost">Kiwiirc</a>), via XMPP <small>(support@conference.yunohost.org)</small>, ou Matrix <small>(#freenode_#yunohost:matrix.org - <a target="_blank" href="https://riot.im/app/#/room/#yunohost:matrix.org">en utilisant Riot</a>)</small>.</em> -</center> - -<h3>... ou demandez sur le forum !</h3> - -<center> -<button id="goForum" type="button" class="btn btn-success" style="font-weight:bold;"> - <span class="glyphicon glyphicon-comment"></span> Aller sur le forum - </button> -</center> - -<h3>Vous avez trouvé un bug ?</h3> - -<center> -<br> -<em>Vous pouvez rapporter le bug sur le bugtracker ou contacter les développeurs</em><br><br> -<button id="goBugtracker" type="button" class="btn btn-warning" style="font-weight:bold;"> - <span class="glyphicon glyphicon-exclamation-sign"></span> Rapporter un bug - </button> -<button id="goDevroom" type="button" class="btn btn-warning" style="font-weight:bold; margin-left:40px"> - <span class="glyphicon glyphicon-comment"></span> Contacter les développeurs - </button> -</br> -</br> -<em>Note : vous pouvez aussi vous connecter aux salons de dev, via votre client XMPP favori, à</br> -dev@conference.yunohost.org et apps@conference.yunohost.org</br> -ou bien via votre client matrix préféré, à</br> -#freenode_#yunohost-dev:matrix.org</em> -</center> - -<script> -document.getElementById("goForum").onclick = function() { - window.location.href = "https://forum.yunohost.org/latest"; -} -document.getElementById("goBugtracker").onclick = function() { - window.location.href = "https://github.com/yunohost/issues/issues"; -} -document.getElementById("goDevroom").onclick = function() { - window.location.href = "https://kiwiirc.com/client/irc.freenode.net/yunohost-dev"; -} -document.getElementById("goForum").onclick = function() { - window.location.href = "https://forum.yunohost.org"; -} -</script> - diff --git a/images/HedgeDoc-Logo.png b/images/HedgeDoc-Logo.png new file mode 100644 index 00000000..77aa3507 Binary files /dev/null and b/images/HedgeDoc-Logo.png differ diff --git a/images/Jirafeau_logo.jpg b/images/Jirafeau_logo.jpg new file mode 100644 index 00000000..35b106cb Binary files /dev/null and b/images/Jirafeau_logo.jpg differ diff --git a/images/Mediawiki_logo.png b/images/Mediawiki_logo.png deleted file mode 100644 index f001f01e..00000000 Binary files a/images/Mediawiki_logo.png and /dev/null differ diff --git a/images/OnlyOffice_logo.png b/images/OnlyOffice_logo.png new file mode 100644 index 00000000..3b053510 Binary files /dev/null and b/images/OnlyOffice_logo.png differ diff --git a/images/actions_example.png b/images/actions_example.png new file mode 100644 index 00000000..04209da6 Binary files /dev/null and b/images/actions_example.png differ diff --git a/images/adminer_logo.png b/images/adminer_logo.png new file mode 100644 index 00000000..06444fe5 Binary files /dev/null and b/images/adminer_logo.png differ diff --git a/images/airsonic_logo.png b/images/airsonic_logo.png new file mode 100644 index 00000000..c013faa3 Binary files /dev/null and b/images/airsonic_logo.png differ diff --git a/images/ampache_logo.png b/images/ampache_logo.png new file mode 100644 index 00000000..ed29e845 Binary files /dev/null and b/images/ampache_logo.png differ diff --git a/images/anarchism_logo.svg b/images/anarchism_logo.svg new file mode 100644 index 00000000..f2b4b29c --- /dev/null +++ b/images/anarchism_logo.svg @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" version="1.0" width="200pt" height="200pt" viewBox="0 0 21000 29700" id="svg1397"> +<g transform="matrix(4.558534,0,0,4.584044,-8162.569,-3665.785)" style="visibility:visible" id="x"> +<g style="fill:#000000" id="g1"> +<g style="fill:#ff0000" id="g2"> +<path d="M 125.03125,0.125 L 95.96875,95.96875 L 0.375,95.96875 L 78,155.78125 L 48.84375,250.9375 L 125.03125,192.6875 L 201.3125,250.9375 L 172.15625,155.78125 L 249.78125,95.96875 L 154.1875,95.96875 L 125.03125,0.125 z " transform="matrix(26.06101,0,0,25.915982,836.35857,799.68364)" id="p1" /> +</g> +<g id="g3"> +<path d="M 4095,803 L 3337,3287 L 846,3287 L 2869,4837 L 2109,7303 L 4855,3287 L 4095,803 z " id="path12" /> +</g></g></g> +</svg> diff --git a/images/anfora_logo.svg b/images/anfora_logo.svg new file mode 100644 index 00000000..90f982c4 --- /dev/null +++ b/images/anfora_logo.svg @@ -0,0 +1,11 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="600" height="600" viewBox="0 0 600 600"> + <g fill="none" transform="translate(139 130)"> + <polygon fill="#FFF" points="237 59 296 59 272.673 203.039"/> + <polygon fill="#FF5230" points="277.186 187.073 277.186 67.296 233.591 67.296 224.647 42.722 302.788 42.722 302.788 257.412" transform="rotate(10 263.717 150.067)"/> + <g transform="rotate(-10 242.085 17.624)"> + <rect width="240.745" height="300.89" x=".299" y=".611" fill="#FF5230"/> + <rect width="190.59" height="190.564" x="25.377" y="24.682" fill="#FFF"/> + </g> + <path fill="#FF5230" d="M60.3349683,62.7474114 L138.623794,62.7474114 C144.634936,62.7474114 149.50793,67.6197335 149.50793,73.6300473 C149.50793,79.6403612 144.634936,84.5126833 138.623794,84.5126833 L116.508875,84.5126833 L116.508875,112.761518 C143.32192,128.314668 179.964723,157.519663 179.964723,190.983354 C179.964723,200.475031 178.312041,211.535717 175.326316,223.222172 L60.3349683,223.222172 L60.3349683,62.7474114 Z" transform="rotate(-10 120.15 142.985)"/> + </g> +</svg> diff --git a/images/angryip.png b/images/angryip.png new file mode 100644 index 00000000..129dc680 Binary files /dev/null and b/images/angryip.png differ diff --git a/images/baikal_logo.png b/images/baikal_logo.png new file mode 100644 index 00000000..1a623ea3 Binary files /dev/null and b/images/baikal_logo.png differ diff --git a/images/bitwarden_logo.png b/images/bitwarden_logo.png new file mode 100644 index 00000000..06e4c84b Binary files /dev/null and b/images/bitwarden_logo.png differ diff --git a/images/blogotext_logo.png b/images/blogotext_logo.png new file mode 100644 index 00000000..9a6752f0 Binary files /dev/null and b/images/blogotext_logo.png differ diff --git a/images/bludit_logo.png b/images/bludit_logo.png new file mode 100644 index 00000000..b1a69662 Binary files /dev/null and b/images/bludit_logo.png differ diff --git a/images/boot_screen.png b/images/boot_screen.png index 7aee93e0..f8c4f2b8 100644 Binary files a/images/boot_screen.png and b/images/boot_screen.png differ diff --git a/images/borg_logo.svg b/images/borg_logo.svg new file mode 100644 index 00000000..5f9c5a19 --- /dev/null +++ b/images/borg_logo.svg @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> +<!-- Created using Karbon, part of Calligra: http://www.calligra.org/karbon --> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="240pt" height="100pt"> +<defs/> + <path id="p0" transform="translate(0, 7.12669e-6)" fill="#000200" d="M0 66.6667L0 0L160 0L320 0L320 66.6667L320 133.333L160 133.333L0 133.333Z"/> + <path id="p1" transform="translate(20.9086, 32.2192)" fill="#00dd00" d="M43.75 13.8021L26.6667 13.8021L26.6667 0L53.3854 0L67.2396 13.8021L67.2396 27.8646L60.3125 34.7917L67.2396 41.7187L67.2396 55.3125L53.3854 69.1146L26.6667 69.1146L26.6667 55.3125L43.75 55.3125L43.75 40.5729L26.6667 40.5729L26.6667 28.5417L43.75 28.5417ZM0 0L23.0208 0L23.0208 69.1146L0 69.1146Z"/> + <path id="p2" transform="translate(97.6794, 46.0213)" fill="#00dd00" d="M62.1354 41.5104L48.3333 55.3125L32.9167 55.3125L32.9167 42.3958L38.6458 42.3958L38.6458 13.8021L32.9167 13.8021L32.9167 0L48.3333 0L62.1354 13.8021ZM23.2813 42.3958L29.2708 42.3958L29.2708 55.3125L13.8021 55.3125L0 41.5104L0 13.8021L13.8021 0L29.2708 0L29.2708 13.8021L23.2813 13.8021Z"/> + <path id="p3" transform="translate(170.231, 46.0213)" fill="#00dd00" d="M36.5104 13.8021L26.7187 13.8021L26.7187 7.76042L34.4271 0L48.3854 0L59.5833 12.9167L59.5833 27.2396L36.5104 27.2396ZM0 55.3125L0 7.10543e-15L23.0208 7.10543e-15L23.0208 55.3125Z"/> + <path id="p4" transform="translate(236.429, 46.0213)" fill="#00dd00" d="M36.875 13.8021L26.6667 13.8021L26.6667 7.10543e-15L46.0937 7.10543e-15L59.8958 13.8021L59.8958 60.7812L46.0937 74.6875L15.7292 74.6875L8.80208 67.7083L8.80208 62.6042L36.875 62.6042ZM33.2292 42.3958L33.2292 48.4896L26.3542 55.3125L13.8021 55.3125L0 41.5104L0 13.8021L13.8021 0L23.0208 0L23.0208 42.3958Z"/> +</svg> diff --git a/images/checkstart.png b/images/checkstart.png deleted file mode 100644 index 17fc4dc4..00000000 Binary files a/images/checkstart.png and /dev/null differ diff --git a/images/civicrm_logo.png b/images/civicrm_logo.png new file mode 100644 index 00000000..d82cd8b4 Binary files /dev/null and b/images/civicrm_logo.png differ diff --git a/images/codimd_logo.png b/images/codimd_logo.png new file mode 100644 index 00000000..2422174f Binary files /dev/null and b/images/codimd_logo.png differ diff --git a/images/collabora_logo.png b/images/collabora_logo.png new file mode 100644 index 00000000..22227baf Binary files /dev/null and b/images/collabora_logo.png differ diff --git a/images/concrete5_logo.png b/images/concrete5_logo.png new file mode 100644 index 00000000..945438c9 Binary files /dev/null and b/images/concrete5_logo.png differ diff --git a/images/config_panel_example.png b/images/config_panel_example.png new file mode 100644 index 00000000..5665a3c9 Binary files /dev/null and b/images/config_panel_example.png differ diff --git a/images/config_panel_toml_example.png b/images/config_panel_toml_example.png new file mode 100644 index 00000000..c72e0baf Binary files /dev/null and b/images/config_panel_toml_example.png differ diff --git a/images/cowyo_logo.png b/images/cowyo_logo.png new file mode 100644 index 00000000..35253a33 Binary files /dev/null and b/images/cowyo_logo.png differ diff --git a/images/dekko_config_1.png b/images/dekko_config_1.png old mode 100755 new mode 100644 diff --git a/images/dekko_config_2.png b/images/dekko_config_2.png old mode 100755 new mode 100644 diff --git a/images/dekko_config_3.png b/images/dekko_config_3.png old mode 100755 new mode 100644 diff --git a/images/dekko_config_4.png b/images/dekko_config_4.png old mode 100755 new mode 100644 diff --git a/images/df_h.png b/images/df_h.png deleted file mode 100644 index c4f1f8b7..00000000 Binary files a/images/df_h.png and /dev/null differ diff --git a/images/diagnostic.png b/images/diagnostic.png new file mode 100644 index 00000000..b24b65a1 Binary files /dev/null and b/images/diagnostic.png differ diff --git a/images/diagramsnet_logo.jpg b/images/diagramsnet_logo.jpg new file mode 100644 index 00000000..c30ae934 Binary files /dev/null and b/images/diagramsnet_logo.jpg differ diff --git a/images/discourse_logo.svg b/images/discourse_logo.svg new file mode 100644 index 00000000..73e7d63e --- /dev/null +++ b/images/discourse_logo.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -1 104 106"><defs><style>.cls-1{fill:#231f20;}.cls-2{fill:#fff9ae;}.cls-3{fill:#00aeef;}.cls-4{fill:#00a94f;}.cls-5{fill:#f15d22;}.cls-6{fill:#e31b23;}</style></defs><title>Discourse_logo</title><g id="Layer_2" data-name="Layer 2"><g id="Layer_3" data-name="Layer 3"><path class="cls-1" d="M51.87,0C23.71,0,0,22.83,0,51c0,.91,0,52.81,0,52.81l51.86-.05c28.16,0,51-23.71,51-51.87S80,0,51.87,0Z"/><path class="cls-2" d="M52.37,19.74A31.62,31.62,0,0,0,24.58,66.41l-5.72,18.4L39.4,80.17a31.61,31.61,0,1,0,13-60.43Z"/><path class="cls-3" d="M77.45,32.12a31.6,31.6,0,0,1-38.05,48L18.86,84.82l20.91-2.47A31.6,31.6,0,0,0,77.45,32.12Z"/><path class="cls-4" d="M71.63,26.29A31.6,31.6,0,0,1,38.8,78L18.86,84.82,39.4,80.17A31.6,31.6,0,0,0,71.63,26.29Z"/><path class="cls-5" d="M26.47,67.11a31.61,31.61,0,0,1,51-35A31.61,31.61,0,0,0,24.58,66.41l-5.72,18.4Z"/><path class="cls-6" d="M24.58,66.41A31.61,31.61,0,0,1,71.63,26.29a31.61,31.61,0,0,0-49,39.63l-3.76,18.9Z"/></g></g></svg> \ No newline at end of file diff --git a/images/dokuwiki_logo.svg b/images/dokuwiki_logo.svg new file mode 100644 index 00000000..cbee241e --- /dev/null +++ b/images/dokuwiki_logo.svg @@ -0,0 +1,553 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="128.00854" + height="128.51692" + id="svg2" + sodipodi:version="0.32" + inkscape:version="0.46+devel r21627" + sodipodi:docname="dokuwiki.svg" + version="1.1" + inkscape:output_extension="org.inkscape.output.svg.inkscape"> + <defs + id="defs4"> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective100" /> + <linearGradient + id="linearGradient2624"> + <stop + style="stop-color:#3a9030;stop-opacity:0.83673471;" + offset="0" + id="stop2626" /> + <stop + style="stop-color:#3d9c32;stop-opacity:0.79591835;" + offset="1" + id="stop2628" /> + </linearGradient> + <linearGradient + id="linearGradient2612"> + <stop + style="stop-color:#25901b;stop-opacity:0.83673471;" + offset="0" + id="stop2614" /> + <stop + style="stop-color:#25901b;stop-opacity:0.37755102;" + offset="1" + id="stop2616" /> + </linearGradient> + <linearGradient + id="linearGradient2600"> + <stop + style="stop-color:#e32525;stop-opacity:0.81632656;" + offset="0" + id="stop2602" /> + <stop + style="stop-color:#e32525;stop-opacity:0.5714286;" + offset="1" + id="stop2604" /> + </linearGradient> + <marker + inkscape:stockid="TriangleOutL" + orient="auto" + refY="0" + refX="0" + id="TriangleOutL" + style="overflow:visible"> + <path + id="path2488" + d="m 5.77,0 -8.65,5 0,-10 8.65,5 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="scale(0.8,0.8)" /> + </marker> + <marker + inkscape:stockid="Arrow2Lstart" + orient="auto" + refY="0" + refX="0" + id="Arrow2Lstart" + style="overflow:visible"> + <path + id="path2571" + style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + transform="matrix(1.1,0,0,1.1,-5.5,0)" /> + </marker> + <linearGradient + id="linearGradient2408"> + <stop + id="stop2410" + offset="0" + style="stop-color:#000000;stop-opacity:0.17346939;" /> + <stop + id="stop2412" + offset="1" + style="stop-color:#c7cec2;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient2389"> + <stop + style="stop-color:#000000;stop-opacity:0.17346939;" + offset="0" + id="stop2391" /> + <stop + style="stop-color:#c7cec2;stop-opacity:0;" + offset="1" + id="stop2393" /> + </linearGradient> + <linearGradient + id="linearGradient2370"> + <stop + style="stop-color:#fbfaf9;stop-opacity:1;" + offset="0" + id="stop2372" /> + <stop + style="stop-color:#e9dac7;stop-opacity:1;" + offset="1" + id="stop2374" /> + </linearGradient> + <linearGradient + id="linearGradient2364"> + <stop + id="stop2366" + offset="0" + style="stop-color:#fbf6f0;stop-opacity:1;" /> + <stop + id="stop2368" + offset="1" + style="stop-color:#e9dac7;stop-opacity:1;" /> + </linearGradient> + <linearGradient + id="linearGradient2348"> + <stop + style="stop-color:#fbf6f0;stop-opacity:1;" + offset="0" + id="stop2350" /> + <stop + style="stop-color:#e9dac7;stop-opacity:1;" + offset="1" + id="stop2352" /> + </linearGradient> + <linearGradient + id="linearGradient2332"> + <stop + style="stop-color:#ede1ae;stop-opacity:1;" + offset="0" + id="stop2334" /> + <stop + style="stop-color:#fefdfa;stop-opacity:1;" + offset="1" + id="stop2336" /> + </linearGradient> + <linearGradient + id="linearGradient2249"> + <stop + style="stop-color:#00a423;stop-opacity:1;" + offset="0" + id="stop2251" /> + <stop + style="stop-color:#00b427;stop-opacity:1;" + offset="1" + id="stop2253" /> + </linearGradient> + <linearGradient + id="linearGradient2229"> + <stop + id="stop2231" + offset="0" + style="stop-color:#00b62b;stop-opacity:1;" /> + <stop + id="stop2233" + offset="1" + style="stop-color:#a1d784;stop-opacity:1;" /> + </linearGradient> + <linearGradient + id="linearGradient2213"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop2215" /> + <stop + style="stop-color:#000000;stop-opacity:0;" + offset="1" + id="stop2217" /> + </linearGradient> + <linearGradient + id="linearGradient2360"> + <stop + style="stop-color:#d69c00;stop-opacity:1;" + offset="0" + id="stop2362" /> + <stop + style="stop-color:#ffe658;stop-opacity:1;" + offset="1" + id="stop2364" /> + </linearGradient> + <linearGradient + id="linearGradient2352"> + <stop + id="stop2354" + offset="0" + style="stop-color:#ce411e;stop-opacity:1;" /> + <stop + id="stop2356" + offset="1" + style="stop-color:#ecad8d;stop-opacity:1;" /> + </linearGradient> + <linearGradient + id="linearGradient2336"> + <stop + style="stop-color:#8f2a15;stop-opacity:1;" + offset="0" + id="stop2338" /> + <stop + style="stop-color:#c8381b;stop-opacity:1;" + offset="1" + id="stop2340" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2336" + id="linearGradient2342" + x1="219.21262" + y1="189.01556" + x2="286.22665" + y2="189.01556" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2352" + id="linearGradient2350" + x1="219.66267" + y1="192.73286" + x2="277.8761" + y2="192.73286" + gradientUnits="userSpaceOnUse" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient2360" + id="radialGradient2366" + cx="224.41418" + cy="212.80016" + fx="224.41418" + fy="212.80016" + r="8.6813803" + gradientTransform="matrix(1,0,0,0.984179,0,3.366635)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2249" + id="linearGradient2227" + x1="192.03938" + y1="262.25757" + x2="263.67093" + y2="262.25757" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2229" + id="linearGradient2247" + x1="191.75092" + y1="258.91571" + x2="255.6561" + y2="258.91571" + gradientUnits="userSpaceOnUse" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient2360" + id="radialGradient2317" + cx="257.41144" + cy="274.64203" + fx="257.41144" + fy="274.64203" + r="7.1440549" + gradientTransform="matrix(1,0,0,1.631384,0,-173.4045)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2360" + id="linearGradient2325" + x1="184.07063" + y1="246.35907" + x2="201.40646" + y2="246.35907" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2332" + id="linearGradient2346" + x1="162.76369" + y1="184.99277" + x2="240.84924" + y2="289.50323" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2348" + id="linearGradient2354" + x1="140.15784" + y1="303.78967" + x2="136.14151" + y2="195.87151" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2370" + id="linearGradient2362" + x1="286.15598" + y1="262.28729" + x2="185.81258" + y2="172.32423" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2389" + id="linearGradient2395" + x1="213.96568" + y1="220.07191" + x2="244.79126" + y2="265.40363" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2408" + id="linearGradient2406" + x1="184.30582" + y1="241.52789" + x2="224.67441" + y2="307.52844" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2600" + id="linearGradient2606" + x1="202.41772" + y1="222.05145" + x2="206.06017" + y2="210.3558" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2612" + id="linearGradient2618" + x1="248.62152" + y1="234.52202" + x2="251.64362" + y2="213.12164" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2624" + id="linearGradient2630" + x1="275.71765" + y1="251.56442" + x2="255.68353" + y2="217.94008" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2352" + id="linearGradient2640" + gradientUnits="userSpaceOnUse" + x1="219.66267" + y1="192.73286" + x2="277.8761" + y2="192.73286" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2336" + id="linearGradient2643" + gradientUnits="userSpaceOnUse" + x1="219.21262" + y1="189.01556" + x2="286.22665" + y2="189.01556" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient2360" + id="radialGradient2647" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1,0,0,0.984179,0,3.366635)" + cx="224.41418" + cy="212.80016" + fx="224.41418" + fy="212.80016" + r="8.6813803" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="3.734697" + inkscape:cx="35.103028" + inkscape:cy="81.524672" + inkscape:document-units="px" + inkscape:current-layer="layer3" + inkscape:window-width="1206" + inkscape:window-height="855" + inkscape:window-x="0" + inkscape:window-y="0" + showguides="true" + inkscape:guide-bbox="true" + showgrid="false" + inkscape:window-maximized="0" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:groupmode="layer" + id="layer3" + inkscape:label="paper" + style="display:inline" + transform="translate(-158.14742,-158.45341)"> + <g + id="g1419"> + <g + id="g2376"> + <path + transform="matrix(0.989976,-0.141236,0.201069,0.979577,0,0)" + style="fill:url(#linearGradient2354);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.7216621px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline" + d="m 120.21543,196.43769 70.90655,-0.79226 -2.40261,109.05308 -71.71761,0.37344 3.21367,-108.63426 z" + id="rect1422" + sodipodi:nodetypes="ccccc" /> + <path + style="fill:url(#linearGradient2362);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline" + d="m 179.20033,182.08731 79.84173,-19.51687 26.61391,101.72428 -82.50312,21.58684 -23.95252,-103.79425 z" + id="rect1425" + sodipodi:nodetypes="ccccc" /> + <path + transform="matrix(0.995676,-0.09289891,0.08102261,0.996712,0,0)" + style="fill:url(#linearGradient2346);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00418305px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline" + d="m 159.01353,181.74387 85.58587,0.53396 0,110.47429 -84.53387,-2.5127 -1.052,-108.49555 z" + id="rect1419" + sodipodi:nodetypes="ccccc" /> + </g> + <path + id="text2382" + d="m 167.55116,214.00773 0,-20.1846 5.34962,0 0,2.37403 -2.48145,0 0,15.43654 2.48145,0 0,2.37403 -5.34962,0 m 7.34767,0 0,-20.1846 5.34961,0 0,2.37403 -2.48144,0 0,15.43654 2.48144,0 0,2.37403 -5.34961,0 m 7.36915,-20.1846 5.81153,0 c 1.31054,2e-5 2.30956,0.10028 2.99707,0.30078 0.92382,0.27216 1.71516,0.75555 2.37403,1.4502 0.65884,0.69468 1.16014,1.54689 1.50391,2.55664 0.34373,1.00262 0.51561,2.24155 0.51562,3.71681 -10e-6,1.29623 -0.16115,2.41342 -0.4834,3.35156 -0.39389,1.14584 -0.95607,2.07325 -1.68652,2.78223 -0.55145,0.53711 -1.29624,0.95606 -2.23438,1.25684 -0.70183,0.222 -1.63999,0.33301 -2.81446,0.33301 l -5.9834,0 0,-15.74807 m 3.17969,2.66407 0,10.43067 2.37402,0 c 0.88802,1e-5 1.52897,-0.0501 1.92286,-0.15039 0.51561,-0.1289 0.94172,-0.34732 1.27832,-0.65527 0.34374,-0.30794 0.62304,-0.81282 0.83789,-1.51465 0.21483,-0.70898 0.32226,-1.6722 0.32227,-2.88965 -1e-5,-1.21744 -0.10744,-2.15201 -0.32227,-2.80372 -0.21485,-0.65168 -0.51563,-1.16014 -0.90234,-1.52539 -0.38673,-0.36522 -0.87729,-0.61229 -1.47168,-0.74121 -0.44402,-0.10025 -1.31414,-0.15038 -2.61036,-0.15039 l -1.42871,0 m 14.96388,13.084 -3.75977,-15.74807 3.25489,0 2.37403,10.8174 2.87891,-10.8174 3.78125,0 2.76074,11.00002 2.417,-11.00002 3.20118,0 -3.82423,15.74807 -3.37305,0 -3.13672,-11.77345 -3.12598,11.77345 -3.44825,0 m 22.76272,-15.74807 0,20.1846 -5.34961,0 0,-2.37403 2.48145,0 0,-15.45803 -2.48145,0 0,-2.35254 5.34961,0 m 7.34767,0 0,20.1846 -5.34962,0 0,-2.37403 2.48145,0 0,-15.45803 -2.48145,0 0,-2.35254 5.34962,0" + style="font-size:12.0000124px;font-style:normal;font-weight:normal;line-height:125%;fill:#6184a3;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans" + transform="matrix(0.995433,-0.09546066,0.09546066,0.995433,0,0)" /> + <g + id="g2632" + style="display:inline"> + <path + style="fill:url(#linearGradient2606);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;marker-end:none" + d="m 174.75585,201.60224 c -6.04576,2.46667 -10.16789,4.4194 -12.88454,6.35064 -2.71665,1.93124 -3.19257,4.60007 -3.24631,6.26587 -0.0269,0.8329 0.0809,1.77774 0.63189,2.44014 0.55103,0.6624 1.80769,1.87421 2.75794,2.38558 1.90049,1.02274 7.5417,2.42901 10.51899,3.07308 11.90917,2.57627 26.80568,1.68117 26.80568,1.68117 1.69307,1.2452 2.83283,2.82434 3.269,4.26902 4.5766,-1.88674 11.81084,-6.58439 13.15657,-8.57706 -5.45142,-4.19955 -10.79692,-6.33346 -16.51317,-8.30847 -1.59867,-0.71918 -2.87956,-1.22649 -0.71773,2.55635 0.98506,2.47275 0.85786,5.05143 0.57176,7.41825 0,0 -16.52749,0.40678 -28.23838,-2.1266 -2.92772,-0.63334 -5.46627,-0.95523 -7.21875,-1.89832 -0.87624,-0.47154 -1.48296,-0.8208 -1.91578,-1.3411 -0.43282,-0.5203 -0.2196,-1.29055 -0.20128,-1.85858 0.0366,-1.13607 0.25336,-1.67063 2.86177,-3.52492 2.60841,-1.85429 5.65407,-3.36195 11.65936,-5.81211 -0.0877,-1.29125 -0.29025,-2.5059 -1.29702,-2.99294 z" + id="path2414" + sodipodi:nodetypes="csssssccccccssssscc" /> + <path + style="fill:url(#linearGradient2618);fill-opacity:1;fill-rule:evenodd;stroke:none" + d="m 269.62539,220.7482 c -1.43576,-0.13963 -2.58044,0.30288 -2.56084,1.50218 0.94391,0.85652 1.34942,2.43518 1.48562,3.14008 0.1362,0.7049 0.0359,1.21914 -0.48562,1.89004 -1.043,1.3418 -3.12498,1.56875 -6.5006,2.72063 -6.75124,2.30377 -16.89306,2.52561 -27.90689,3.84639 -22.02767,2.64157 -39.03164,3.76107 -39.03164,3.76107 1.98346,-4.64758 6.32828,-4.41197 6.34903,-8.20969 0.27376,-0.89755 -3.14597,-1.31638 -5.09943,-0.10731 -4.26694,3.70137 -7.59152,6.75353 -10.69418,10.51311 l 1.88795,3.08438 c 0,0 26.13006,-2.88973 48.19776,-5.5361 11.03385,-1.32318 20.95601,-1.99856 27.80968,-4.33728 3.42683,-1.16936 5.95975,-1.49022 7.6409,-3.51958 0.63172,-0.76256 1.35238,-3.04699 1.06804,-4.73369 -0.21951,-1.30213 -1.14979,-3.09774 -2.15978,-4.01423 z" + id="path2608" + sodipodi:nodetypes="ccsssscccccssssc" /> + <path + style="fill:url(#linearGradient2630);fill-opacity:1;fill-rule:evenodd;stroke:none" + d="m 254.36185,220.33948 c -6.84997,3.24198 -7.15311,8.60912 -5.95953,12.79884 1.19358,4.18972 5.26293,8.75677 9.32121,12.40608 8.11656,7.29861 12.06046,9.33163 12.06046,9.33163 -3.71515,-0.10342 -7.89887,-1.41174 -8.13315,0.49304 -0.9483,2.97582 11.49137,3.47486 17.43787,2.70205 -1.39456,-7.57836 -3.79323,-13.21546 -7.73151,-14.90312 -1.68464,-0.14804 0.31242,4.72441 0.76985,9.39604 0,0 -3.62454,-1.73122 -11.60519,-8.90762 -3.99032,-3.5882 -7.37386,-7.3421 -8.47319,-11.20099 -1.09933,-3.85889 0.0776,-6.1205 4.95082,-9.53176 0.92816,-0.99528 -1.28985,-2.45913 -2.63764,-2.58419 z" + id="path2620" + sodipodi:nodetypes="csscccccsscc" /> + </g> + <path + sodipodi:nodetypes="cccccc" + id="rect2386" + d="m 213.96569,234.57806 2.18756,-14.42897 15.21982,6.08793 21.49387,29.94828 -20.40591,9.21832 -18.49534,-30.82556 z" + style="fill:url(#linearGradient2395);fill-opacity:1;stroke:none;display:inline" /> + <g + id="g2649" + style="display:inline"> + <path + style="fill:url(#radialGradient2647);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" + d="m 232.55816,219.5295 -15.92827,0.32199 3.08809,-15.15716 12.84018,14.83517 z" + id="path1443" + sodipodi:nodetypes="cccc" /> + <path + style="fill:#812310;fill-opacity:1;fill-rule:evenodd;stroke:none" + d="m 221.60041,219.29315 -4.41205,0.0782 0.85429,-3.98263 3.55776,3.90445 z" + id="path1452" + sodipodi:nodetypes="cccc" /> + <path + style="fill:url(#linearGradient2643);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" + d="m 269.44172,159.27421 0.098,8.91471 8.0581,8.72344 7.75906,0.7992 -52.80669,41.84092 -6.66532,-3.30696 -5.08243,-5.618 -1.08987,-5.91194 49.72911,-45.44137 z" + id="rect1437" + sodipodi:nodetypes="ccccccccc" /> + <path + style="fill:url(#linearGradient2640);fill-opacity:1;fill-rule:evenodd;stroke:none" + d="m 268.94766,168.32844 8.3426,8.82719 -51.1007,38.68262 -4.9197,-5.4436 47.6778,-42.06621 z" + id="rect1446" + sodipodi:nodetypes="ccccc" /> + <path + style="fill:#ffe965;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;display:inline" + d="m 285.33776,177.73216 -8.16219,-0.86619 -7.7518,-8.67862 0.0132,-9.14293 8.36213,0.75209 7.18862,9.57682 0.35007,8.35883 z" + id="path1440" + sodipodi:nodetypes="ccccccc" /> + <path + style="fill:#cb391c;fill-opacity:1;fill-rule:evenodd;stroke:none" + d="m 280.72049,168.46367 0.1644,4.05654 -3.81335,-0.71676 -2.87504,-3.18901 -0.28089,-3.53393 3.85447,-0.16637 2.95041,3.54953 z" + id="path1449" + sodipodi:nodetypes="ccccccc" /> + </g> + <g + id="g2657" + style="display:inline"> + <path + style="fill:url(#linearGradient2406);fill-opacity:1;stroke:none" + d="m 183.88617,256.82796 0.99991,-16.30721 17.2878,8.44012 26.05488,38.00946 -29.28095,-1.13363 -15.06164,-29.00874 z" + id="rect2397" + sodipodi:nodetypes="cccccc" /> + <path + style="fill:url(#linearGradient2325);fill-opacity:1;stroke:#000000;stroke-linejoin:round;stroke-opacity:1;display:inline" + d="m 200.90647,238.44836 -8.04601,15.77386 -7.05577,-13.57337 15.10178,-2.20049 z" + id="rect2207" + sodipodi:nodetypes="cccc" /> + <path + style="fill:url(#linearGradient2227);fill-opacity:1;stroke:#000000;stroke-linejoin:round;stroke-opacity:1" + d="m 201.05389,238.55401 62.11704,24.91912 -7.88689,3.21429 -4.35152,9.30976 1.1716,9.96396 -59.31453,-31.72759 -0.49402,-7.36382 3.09592,-5.82826 5.6624,-2.48746 z" + id="rect1328" + sodipodi:nodetypes="ccccccccc" /> + <path + style="fill:url(#radialGradient2317);fill-opacity:1;stroke:#000000;stroke-linejoin:round;stroke-opacity:1;display:inline" + d="m 255.27801,266.53504 7.9241,-3.04772 0.85337,10.24037 -3.9011,8.28983 -8.04601,3.77919 -1.341,-9.63083 4.51064,-9.63084 z" + id="rect2204" + sodipodi:nodetypes="ccccccc" /> + <path + style="fill:url(#linearGradient2247);fill-opacity:1;stroke:none;display:inline" + d="m 195.7549,241.421 59.13059,24.7962 -4.5917,9.76614 -57.48995,-29.00967 2.95106,-5.55267 z" + id="rect2210" + sodipodi:nodetypes="ccccc" /> + <path + style="fill:#00b527;fill-opacity:1;stroke:none" + d="m 255.02263,275.21029 2.08411,-4.1069 2.96459,-1.06995 0.69433,3.37197 -1.76759,3.85723 -3.15516,1.38315 -0.82028,-3.4355 z" + id="rect2308" + sodipodi:nodetypes="ccccccc" /> + <path + style="fill:#258209;fill-opacity:1;stroke:none;display:inline" + d="m 186.56849,241.00362 3.54963,-0.47312 -2.02297,3.53926 -1.52666,-3.06614 z" + id="rect2327" + sodipodi:nodetypes="cccc" /> + </g> + </g> + </g> +</svg> diff --git a/images/dolibarr_logo.png b/images/dolibarr_logo.png new file mode 100644 index 00000000..2cd7964d Binary files /dev/null and b/images/dolibarr_logo.png differ diff --git a/images/dotclean_logo.png b/images/dotclean_logo.png new file mode 100644 index 00000000..b5f0552b Binary files /dev/null and b/images/dotclean_logo.png differ diff --git a/images/drupal_logo.svg b/images/drupal_logo.svg new file mode 100644 index 00000000..7da67bde --- /dev/null +++ b/images/drupal_logo.svg @@ -0,0 +1 @@ +<?xml version="1.0" encoding="utf-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [<!ENTITY st0 "fill:#93C5E4;"><!ENTITY st1 "fill:#FFF;"><!ENTITY st2 "fill:none;"><!ENTITY st3 "fill:#004975;"><!ENTITY st4 "fill:#00598E;"><!ENTITY st5 "fill:#0073BA;">]><svg version="1.1" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" width="681.167px" height="778.583px" viewBox="0 0 681.167 778.583"><title>Druplicon</title><path style="&st4;" d="M510.167,144.833c-39.75-24.75-77.25-34.5-114.75-59.25c-23.25-15.75-55.5-53.25-82.5-85.5c-5.25,51.75-21,72.75-39,87.75c-38.25,30-62.25,39-95.25,57c-27.75,14.25-178.5,104.25-178.5,297.75s162.75,336,343.5,336s337.5-131.25,337.5-330S534.167,159.833,510.167,144.833z"/><path style="&st1;" d="M449.25,610.5c12,0,24.75,0.75,33.75,6.75s14.25,19.5,17.25,27s0,12-6,15c-5.25,3-6,1.5-11.25-8.25s-9.75-19.5-36-19.5s-34.5,9-47.25,19.5s-17.25,14.25-21.75,8.25s-3-12,5.25-19.5s21.75-19.5,34.5-24.75S437.25,610.5,449.25,610.5L449.25,610.5z"/><path style="&st1;" d="M324.75,696c15,12,37.5,21.75,85.5,21.75S492,704.25,507,693c6.75-5.25,9.75-0.75,10.5,2.25s2.25,7.5-3,12.75c-3.75,3.75-38.25,27.75-78.75,31.5s-95.25,6-128.25-24c-5.25-5.25-3.75-12.75,0-15.75s6.75-5.25,11.25-5.25S322.5,694.5,324.75,696L324.75,696z"/><path style="&st5;" d="M141,639c57-0.75,67.5-10.5,117.75-33c271.5-121.5,321.75-232.5,331.5-258s24-66.75,9-112.5c-2.896-8.832-5.006-15.924-6.53-21.63c-36.079-40.343-71.898-62.357-82.72-69.12c-39-24.75-77.25-34.5-114.75-59.25c-23.25-15-55.5-53.25-82.5-85.5c-5.25,51.75-20.25,73.5-39,87.75c-38.25,30-62.25,39-95.25,57C150.75,159.75,0,249,0,442.5c0,61.78,16.593,118.361,45.063,166.766L52.5,609C68.25,623.25,93,639.75,141,639z"/><path style="&st3;" d="M510,144.75c-39-24.75-77.25-34.5-114.75-59.25c-23.25-15-55.5-53.25-82.5-85.5c-5.25,51.75-20.25,73.5-39,87.75c-38.25,30-62.25,39-95.25,57C150.75,159.75,0,249,0,442.5c0,61.78,16.593,118.361,45.063,166.766C105.763,712.467,220.46,778.5,343.5,778.5c180.75,0,337.5-131.25,337.5-330c0-109.146-44.332-185.488-88.28-234.63C556.641,173.527,520.82,151.513,510,144.75z M601.164,232.547c49.242,61.564,74.211,134.221,74.211,215.953c0,47.428-9.033,92.23-26.849,133.165c-16.9,38.831-41.236,73.233-72.333,102.254c-61.47,57.364-144.107,88.956-232.693,88.956c-43.826,0-86.832-8.371-127.824-24.882c-40.263-16.217-76.547-39.438-107.843-69.02C41.923,616.678,5.625,532.696,5.625,442.5c0-80.336,26.076-151.72,77.503-212.167c39.289-46.18,81.655-71.774,98.047-80.634c7.958-4.341,15.423-8.172,22.643-11.877c22.63-11.615,44.005-22.586,73.404-45.645c15.677-11.914,32.377-30.785,39.489-78.702c24.774,29.466,53.522,62.579,75.49,76.752c19.5,12.87,39.501,21.888,58.844,30.61c18.298,8.25,37.219,16.781,55.942,28.663c0.031,0.021,0.702,0.438,0.702,0.438C562.421,184.11,591.581,220.566,601.164,232.547z"/><path style="&st0;" d="M316.5,15c10.5,30.75,9,46.5,9,53.25S321.75,93,309.75,102c-5.25,3.75-6.75,6.75-6.75,7.5c0,3,6.75,5.25,6.75,12c0,8.25-3.75,24.75-43.5,64.5s-96.75,75-141,96.75S60,303,54,292.5s2.25-33.75,30-64.5s115.5-75,115.5-75L309,76.5l6-29.25"/><path style="&st1;" d="M316.5,14.25c-6.75,49.5-21.75,64.5-42,80.25c-33.75,25.5-66.75,41.25-74.25,45c-19.5,9.75-90,48.75-126.75,105c-11.25,17.25,0,24,2.25,25.5s27.75,4.5,82.5-28.5S237,189,267.75,156.75c16.5-17.25,18.75-27,18.75-31.5c0-5.25-3.75-7.5-9.75-9c-3-0.75-3.75-2.25,0-4.5S296.25,102,300,99s21.75-15,22.5-34.5S321.75,31.5,316.5,14.25L316.5,14.25z"/><path style="&st1;" d="M147.75,559.5c0.75-58.5,55.5-113.25,124.5-114c87.75-0.75,148.5,87,192.75,86.25c37.5-0.75,109.5-74.25,144.75-74.25c37.5,0,48,39,48,62.25s-7.5,65.25-25.5,91.5s-29.25,36-50.25,34.5c-27-2.25-81-86.25-115.5-87.75c-43.5-1.5-138,90.75-212.25,90.75c-45,0-58.5-6.75-73.5-16.5C158.25,616.5,147,592.5,147.75,559.5L147.75,559.5z"/><path style="&st2;" d="M599.25,235.5c15,45.75,0.75,87-9,112.5s-60,136.5-331.5,258C208.5,628.5,198,638.25,141,639c-48,0.75-72.75-15.75-88.5-30l-7.437,0.266C105.763,712.467,220.46,778.5,343.5,778.5c180.75,0,337.5-131.25,337.5-330c0-109.146-44.332-185.488-88.28-234.63C594.244,219.576,596.354,226.668,599.25,235.5z"/></svg> \ No newline at end of file diff --git a/images/etherpad_mypads_logo.svg b/images/etherpad_mypads_logo.svg new file mode 100644 index 00000000..a4007d16 --- /dev/null +++ b/images/etherpad_mypads_logo.svg @@ -0,0 +1,61 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + version="1.1" + width="62.5" + height="62.5" + viewBox="0 0 60.818816 60.818816" + id="svg2"> + <title + id="title3033">Etherpad</title> + <metadata + id="metadata9"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title>Etherpad</dc:title> + <dc:date>2012-11-20</dc:date> + <dc:creator> + <cc:Agent> + <dc:title>Marcel Klehr</dc:title> + </cc:Agent> + </dc:creator> + <cc:license + rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /> + </cc:Work> + <cc:License + rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"> + <cc:permits + rdf:resource="http://creativecommons.org/ns#Reproduction" /> + <cc:permits + rdf:resource="http://creativecommons.org/ns#Distribution" /> + <cc:requires + rdf:resource="http://creativecommons.org/ns#Notice" /> + <cc:requires + rdf:resource="http://creativecommons.org/ns#Attribution" /> + <cc:permits + rdf:resource="http://creativecommons.org/ns#DerivativeWorks" /> + <cc:requires + rdf:resource="http://creativecommons.org/ns#ShareAlike" /> + </cc:License> + </rdf:RDF> + </metadata> + <path + d="m 45.953277,48.842636 -13.76749,-9.370078 -18.010202,8.570208 m 5.236235,-10.276004 10.613265,6.343524 10.755253,-5.749067 m -16.132879,-10.293644 5.377626,3.10269 5.443554,-3.348981 M 29.747573,15.946027 32.233411,39.472556 M 29.838272,16.44373 13.688126,48.16853 29.508012,57.45699 29.820402,10.225937 29.772772,16.34803 45.95327,48.842636 29.508003,57.269219 M 21.553773,9.1091165 C 22.743554,-0.86550773 35.946656,-2.7841873 38.218887,8.8403001" + id="path01" + style="fill:none;stroke:#123f0f;stroke-width:1.82456446;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 7.5244331,10.032578 a 0.34835339,0.37477049 0 1 1 -0.6967067,0 0.34835339,0.37477049 0 1 1 0.6967067,0 z" + transform="matrix(3.1221913,0,0,2.972881,7.3844024,-20.305626)" + id="path3756" + style="fill:#b3b3b3;fill-opacity:1;stroke:#123f0f;stroke-width:0.79850829;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> +</svg> diff --git a/images/ffsync_logo.png b/images/ffsync_logo.png new file mode 100644 index 00000000..a41f526c Binary files /dev/null and b/images/ffsync_logo.png differ diff --git a/images/firefly-iii_logo.png b/images/firefly-iii_logo.png new file mode 100644 index 00000000..26598804 Binary files /dev/null and b/images/firefly-iii_logo.png differ diff --git a/images/flarum_logo.png b/images/flarum_logo.png new file mode 100644 index 00000000..ef72258a Binary files /dev/null and b/images/flarum_logo.png differ diff --git a/images/fluxbb_logo.png b/images/fluxbb_logo.png new file mode 100644 index 00000000..b9886904 Binary files /dev/null and b/images/fluxbb_logo.png differ diff --git a/images/framaforms_logo.png b/images/framaforms_logo.png new file mode 100644 index 00000000..54e91ddf Binary files /dev/null and b/images/framaforms_logo.png differ diff --git a/images/free_m.png b/images/free_m.png deleted file mode 100644 index 2e4bf5e5..00000000 Binary files a/images/free_m.png and /dev/null differ diff --git a/images/freshrss_logo.png b/images/freshrss_logo.png new file mode 100644 index 00000000..5ef73cce Binary files /dev/null and b/images/freshrss_logo.png differ diff --git a/images/friendica_logo.jpeg b/images/friendica_logo.jpeg new file mode 100644 index 00000000..89086338 Binary files /dev/null and b/images/friendica_logo.jpeg differ diff --git a/images/friendica_logo.svg b/images/friendica_logo.svg new file mode 100644 index 00000000..75d54920 --- /dev/null +++ b/images/friendica_logo.svg @@ -0,0 +1,52 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="96" height="96" id="svg2" version="1.1" inkscape:version="0.48.0 r9654" sodipodi:docname="friendica.svg" inkscape:export-filename="/home/meta/Documents/My random images/friendica.png" inkscape:export-xdpi="80.552788" inkscape:export-ydpi="80.552788"> + <defs id="defs4"> + <linearGradient id="highlightgradient"> + <stop id="stop3833" offset="0" style="stop-color:#ffffff;stop-opacity:0.74374998;"/> + <stop style="stop-color:#ffffff;stop-opacity:0;" offset="1" id="stop3829"/> + </linearGradient> + <linearGradient id="shadowgradient"> + <stop id="stop3833-5" offset="0" style="stop-color:#000000;stop-opacity:0.5;"/> + <stop style="stop-color:#818080;stop-opacity:0;" offset="1" id="stop3829-9"/> + </linearGradient> + <linearGradient inkscape:collect="always" xlink:href="#highlightgradient" id="linearGradient4011" x1="44.948269" y1="0" x2="54.103466" y2="46.797421" gradientUnits="userSpaceOnUse" gradientTransform="scale(1,0.54545455)"/> + <linearGradient inkscape:collect="always" xlink:href="#shadowgradient" id="linearGradient4021" x1="52.016712" y1="96" x2="42.867535" y2="41.837971" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1,0,0,0.5,0,48)"/> + <filter inkscape:collect="always" id="filter4055" x="-0.03" width="1.06" y="-0.12" height="1.24"> + <feGaussianBlur inkscape:collect="always" stdDeviation="1.2" id="feGaussianBlur4057"/> + </filter> + <filter inkscape:collect="always" id="filter4059" x="-0.029877551" width="1.0597551" y="-0.122" height="1.244"> + <feGaussianBlur inkscape:collect="always" stdDeviation="1.22" id="feGaussianBlur4061"/> + </filter> + </defs> + <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="2.9132799" inkscape:cx="53.033009" inkscape:cy="2.8284271" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="true" width="256px" inkscape:snap-global="true" inkscape:window-width="1680" inkscape:window-height="1010" inkscape:window-x="194" inkscape:window-y="0" inkscape:window-maximized="0"> + <inkscape:grid type="xygrid" id="grid2985" empspacing="3" visible="true" enabled="true" snapvisiblegridlinesonly="true" spacingx="2px" spacingy="2px"/> + </sodipodi:namedview> + <metadata id="metadata7"> + <rdf:RDF> + <cc:Work rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> + <dc:title/> + </cc:Work> + </rdf:RDF> + </metadata> + <g inkscape:label="Colors" inkscape:groupmode="layer" id="layer1" transform="translate(0,-956.3622)" style="display:inline"> + <path style="fill:#ffc019;fill-opacity:1;stroke:none" d="M 16,0 C 7.0091019,0.04308252 0,7.0521845 0,16 0,16 0,57.499123 0,80 0,89.120146 7.0091019,96 16,96 L 32,96 32,70 64,70 63.916016,46.068359 32,46.236328 32,26 64,26 64,0 C 64,0 24,0 16,0 z" transform="translate(0,956.3622)" id="rect2993" inkscape:connector-curvature="0" sodipodi:nodetypes="cccsccccccccc"/> + <path style="fill:#1872a2;fill-opacity:1;stroke:none" d="m 80,1052.3622 c 8.990898,0 16.086165,-6.966 16,-16 0,0 0,-41.4991 0,-64 0.07767,-9.01639 -7.067354,-16 -16,-16 l -16,0 0,26 -32,0 0,22 32,0 0,22 -32,0 0,26 c 0,0 32,0 48,0 z" id="rect2993-6" inkscape:connector-curvature="0" sodipodi:nodetypes="cccsccccccccc"/> + </g> + <g style="display:inline" inkscape:label="Lines as original logo" id="g3997" inkscape:groupmode="layer"> + <path sodipodi:nodetypes="cccccccc" inkscape:connector-curvature="0" id="path3999" d="m 64,0 0,26 -32,0 0,22 m 32,0 0,22 -32,0 0,26" style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"/> + <rect ry="16" rx="16" y="0" x="0" height="96" width="96" id="rect4001" style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"/> + </g> + <g inkscape:groupmode="layer" id="layer3" inkscape:label="Lines with center break" style="display:none"> + <path style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" d="m 64,0 0,26 -32,0 0,22 32,0 0,22 -32,0 0,26" id="path3926" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccc"/> + <rect style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" id="rect3928" width="96" height="96" x="0" y="0" rx="16" ry="16"/> + </g> + <g inkscape:groupmode="layer" id="layer2" inkscape:label="Effects" style="display:inline"> + <rect style="fill:url(#linearGradient3930);fill-opacity:1;stroke:none" id="rect3823" width="96" height="48.04369" x="-3.1086245e-15" y="1.8024861e-14" ry="15.215644" rx="15.214664"/> + <rect style="fill:url(#linearGradient3904);fill-opacity:1;stroke:none" id="rect3823-8" width="96" height="47.86721" x="1.5376101e-14" y="-96" ry="15.159752" rx="15.214664" transform="scale(1,-1)"/> + <rect style="fill:url(#linearGradient4011);fill-opacity:1;stroke:none;filter:url(#filter4059)" id="rect4003" width="98" height="24" x="0" y="0" rx="15.214664" ry="8.2994423" transform="matrix(1.0296115,0,0,1.1963836,-2.901924,-4.7132067)"/> + <rect style="opacity:0.56746030000000003;fill:url(#linearGradient4021);fill-opacity:1;stroke:none;filter:url(#filter4055)" id="rect4013" width="96" height="24" x="0" y="72" rx="14.008356" ry="12" transform="matrix(0.9768331,0,0,0.91974646,1.1649641,8.098115)"/> + </g> +</svg> \ No newline at end of file diff --git a/images/funkwhale_logo.png b/images/funkwhale_logo.png new file mode 100644 index 00000000..7cf56217 Binary files /dev/null and b/images/funkwhale_logo.png differ diff --git a/images/garradin_logo.svg b/images/garradin_logo.svg new file mode 100644 index 00000000..daa8151d --- /dev/null +++ b/images/garradin_logo.svg @@ -0,0 +1,65 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + id="svg2" + version="1.1" + inkscape:version="0.47 r22583" + width="750" + height="600" + sodipodi:docname="garradin.svg"> + <metadata + id="metadata8"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs6"> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + id="perspective10" /> + </defs> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1199" + inkscape:window-height="840" + id="namedview4" + showgrid="false" + inkscape:zoom="0.88450421" + inkscape:cx="382.9751" + inkscape:cy="247.39598" + inkscape:window-x="276" + inkscape:window-y="244" + inkscape:window-maximized="0" + inkscape:current-layer="svg2" + width="750px" /> + <path + id="path3643" + style="font-size:144px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#9c4f15;fill-opacity:1;stroke:none;font-family:MigraineSans;-inkscape-font-specification:MigraineSans" + d="m 682.98316,480.35153 0,11.34024 c 8.53563,-9.02333 18.96132,-13.53504 31.27712,-13.53513 21.58297,9e-5 32.37448,11.5842 32.37457,34.75236 l 0,58.8961 -16.46165,0 0,-55.42087 c -7e-5,-17.43708 -7.37731,-26.15564 -22.13176,-26.15572 -7.68215,8e-5 -13.77904,2.49981 -18.29072,7.49919 -4.38979,4.87759 -6.58468,11.21837 -6.58465,19.02235 l 0,55.05505 -16.46165,0 0,-91.45357 16.27874,0 m -35.95269,91.45357 -50.84818,0 0,-10.97443 17.01036,0 0,-69.50472 -17.01036,0 0,-10.97442 50.84818,0 0,10.97442 -17.37617,0 0,69.50472 17.37617,0 0,10.97443 m -195.85639,-15.54711 -5.85303,5.67012 c -8.29184,8.04792 -15.91296,12.07186 -22.8634,12.07187 -8.04793,-1e-5 -14.44967,-2.7436 -19.20525,-8.23082 -4.51172,-5.1214 -6.76756,-11.76701 -6.76756,-19.93688 0,-14.26672 10.85248,-24.81435 32.55747,-31.64293 l 22.13177,-6.95047 c -0.36588,-5.12134 -2.25592,-9.45014 -5.67012,-12.98641 -3.41432,-3.53613 -7.62119,-5.30423 -12.6206,-5.30431 -8.04795,8e-5 -16.03488,3.29241 -23.96083,9.87699 l -6.40175,-8.23082 c 8.65758,-8.29171 19.08328,-12.4376 31.27712,-12.43769 22.55848,9e-5 33.83774,10.36481 33.83782,31.09421 l 0,40.23958 c -8e-5,9.14537 1.34124,16.58358 4.02396,22.31467 l -17.9249,0 c -1.7072,-3.04845 -2.56077,-8.23082 -2.5607,-15.54711 m 0,-38.04469 -15.73002,4.57268 c -14.63259,4.26787 -21.94888,11.88901 -21.94886,22.8634 -2e-5,4.02397 1.21936,7.62114 3.65815,10.79152 2.43873,3.1704 5.60912,4.75558 9.51117,4.75558 8.04788,0 14.38864,-4.45072 19.02234,-13.35222 3.78002,-7.31626 5.67006,-15.36416 5.67012,-24.14374 -6e-5,-1.82902 -0.061,-3.65809 -0.1829,-5.48722 m -128.23792,-27.80188 0,33.83782 15.54711,0 c 6.21879,4e-5 11.27922,-1.58516 15.18129,-4.75559 3.90196,-3.29227 5.85297,-7.98689 5.85303,-14.08385 -6e-5,-9.99884 -6.036,-14.99831 -18.10781,-14.99838 l -18.47362,0 m -16.46164,81.39368 0,-91.45357 38.4105,0 c 8.77948,8e-5 15.97383,1.70722 21.58304,5.1214 6.82846,4.14597 10.24271,10.30384 10.2428,18.47362 -9e-5,11.34029 -5.91407,20.24176 -17.74199,26.70444 l 26.15572,38.95922 -17.19327,3.65814 -23.41211,-38.95922 -21.58305,0 0,37.49597 -16.46164,0 m -232.274922,-12.98641 0,-29.08224 17.193271,0 0,37.49597 c -12.925527,4.02396 -24.936417,6.03593 -36.032707,6.03593 -14.632617,0 -26.948352,-4.3288 -36.947241,-12.9864 C 7.8042919,551.25854 2.4999911,539.5525 2.5,525.16378 c -8.9e-6,-14.14477 5.6091371,-25.66791 16.827457,-34.56945 10.48664,-8.29171 22.985282,-12.4376 37.495962,-12.43769 13.535053,9e-5 24.326561,2.68273 32.374565,8.04791 l -6.40175,9.69408 c -7.194424,-4.02388 -15.79106,-6.03586 -25.789908,-6.03593 -10.364789,7e-5 -18.900447,3.35337 -25.606997,10.05989 -6.706627,6.58472 -10.059921,15.05941 -10.059893,25.42409 -2.8e-5,9.63315 3.231327,17.9859 9.694078,25.05828 6.584613,7.43824 14.632519,11.15734 24.143741,11.15734 8.291727,0 14.632495,-0.91454 19.022343,-2.74361 M 193.91461,21.833801 C 97.419196,21.495461 -29.39617,95.23118 10.320863,237.17755 43.693138,356.44811 68.681855,484.38888 131.66461,517.7088 c 2.88591,-1.26359 6.01049,-2.45308 9.4375,-3.53125 l 22.125,-6.9375 c -0.36588,-5.12134 -2.24205,-9.46373 -5.65625,-13 -3.41432,-3.53613 -7.62559,-5.28117 -12.625,-5.28125 -8.04796,8e-5 -16.0428,3.29042 -23.96875,9.875 l -6.40625,-8.25 c 8.65758,-8.29171 19.08742,-12.43741 31.28125,-12.4375 22.55849,9e-5 33.84368,10.36435 33.84375,31.09375 l 0,15.53125 c 8.92099,-1.49097 18.41167,-4.39101 28.53125,-8.78125 l 0,-35.625 38.40625,0 c 8.45792,8e-5 15.45312,1.58134 20.96875,4.75 105.85217,-46.03882 188.8765,-3.13761 292.21875,-17.6875 l 0,-30.0625 16.46875,0 0,27.25 c 14.01441,-2.78665 28.43266,-6.7012 43.34375,-12.125 5.62269,-2.04521 10.74846,-4.41079 15.375,-7.03125 -1.41578,-0.77619 -2.1875,-2.271 -2.1875,-4.375 0,-0.96345 -0.64652,-2.35848 -1.46875,-3.0625 -0.82223,-0.704 -1.5,-1.90909 -1.5,-2.6875 0,-0.77842 -1.32395,-2.60475 -2.9375,-4.0625 -2.1633,-1.95442 -2.83045,-3.04332 -2.53125,-4.1875 0.45384,-1.73547 -0.9028,-3.78125 -2.5,-3.78125 -0.57514,0 -1.40748,0.81763 -1.875,1.84375 -0.70239,1.54154 -0.62016,2.13726 0.5,3.375 1.31616,1.4543 1.29215,1.5 -0.25,1.5 -0.89818,0 -2.31254,-0.98201 -3.25,-2.25 -0.91185,-1.23333 -2.16438,-2.25 -2.78125,-2.25 -0.83479,0 -0.6986,-0.38334 0.5,-1.5 1.57768,-1.47046 1.58817,-2.94205 0,-5 -0.38268,-0.49588 -0.46872,-1.26372 -0.1875,-1.71875 0.60888,-0.98517 -1.69192,-3.71875 -3.125,-3.71875 -1.30055,0 -1.27979,0.75772 0.0937,2.71875 0.97834,1.39676 0.97834,1.68806 0,2.5 -0.60911,0.50551 -1.09375,1.40243 -1.09375,1.96875 0,0.56634 -0.58236,1.03125 -1.28125,1.03125 -0.98834,0 -1.07265,-0.20861 -0.375,-0.90625 1.32368,-1.32369 1.11448,-3.16987 -0.5625,-4.6875 -2.18997,-1.98191 -4.0655,-0.26601 -3.5,3.21875 0.44158,2.72117 0.0246,2.68972 -1.34375,-0.0625 -0.54774,-1.10173 -1.70306,-1.81958 -3.34375,-2.0625 -1.63727,-0.24241 -2.72482,-0.90651 -3.0625,-1.875 -0.4137,-1.18651 -1.23439,-1.4871 -4.03125,-1.5625 -2.54265,-0.0686 -3.93082,-0.53987 -5,-1.6875 -0.83478,-0.89603 -2.40226,-1.59375 -3.59375,-1.59375 -1.16187,0 -2.95472,-0.67777 -4,-1.5 -1.0453,-0.82223 -2.60411,-1.5 -3.4375,-1.5 -2.88377,0 -5.3937,-1.47722 -6.9375,-4.09375 -1.05196,-1.78294 -2.09425,-2.625 -3.25,-2.625 -3.32904,0 -5.09796,-4.5007 -2.75,-7 l 1.53125,-1.625 -2.1875,-1.25 c -2.16702,-1.24368 -2.20567,-1.24607 -3.21875,0.6875 -1.01718,1.94134 -1.04275,1.96133 -1.875,0.40625 -0.46287,-0.86499 -0.67325,-2.07317 -0.4375,-2.6875 0.55918,-1.4572 -0.93318,-4.21875 -2.28125,-4.21875 -0.5789,0 -1.52794,0.67884 -2.125,1.53125 -0.59706,0.85242 -1.28732,1.23846 -1.53125,0.84375 -0.24395,-0.3947 -1.62007,-0.94814 -3.0625,-1.21875 -1.8814,-0.35295 -2.96178,-1.10283 -3.78125,-2.6875 -0.70574,-1.36475 -1.73404,-2.21875 -2.6875,-2.21875 -0.84877,0 -2.41775,-1.01667 -3.5,-2.25 -1.08223,-1.23336 -2.55058,-2.21875 -3.28125,-2.21875 -1.91798,0 -4.34375,-2.69742 -4.34375,-4.84375 0,-1.0135 0.99036,-2.94905 2.1875,-4.3125 1.66495,-1.89628 2.01858,-2.79877 1.46875,-3.78125 -1.02756,-1.83618 -2.56033,-1.58915 -4.21875,0.6875 -1.17253,1.60962 -1.50627,1.7734 -1.875,0.8125 -0.25058,-0.65298 0.23432,-2.06365 1.09375,-3.15625 1.35368,-1.72091 1.44152,-2.19719 0.59375,-3.78125 -1.14244,-2.13468 -2.59192,-2.33092 -3.625,-0.5 -0.58697,1.0403 -0.945,1.11021 -1.6875,0.375 -0.74549,-0.73816 -0.58643,-1.26694 0.71875,-2.65625 0.89901,-0.95695 1.625,-2.13761 1.625,-2.625 0,-0.48741 0.66487,-0.90625 1.5,-0.90625 0.83514,0 1.73211,-0.50833 1.96875,-1.125 0.23664,-0.61666 0.89606,-1.125 1.46875,-1.125 1.40987,0 1.30933,0.76603 -0.25,1.90625 -1.20992,0.88471 -1.17205,1.1522 0.4375,4.375 1.92983,3.86411 3.18594,4.3406 4.4375,1.59375 0.46828,-1.02778 1.37452,-1.875 2,-1.875 1.70709,0 1.38393,1.15354 -0.71875,2.53125 -2.14667,1.40657 -2.38152,3.1573 -0.71875,5.53125 1.58632,2.26477 4.3592,2.14786 5.4375,-0.21875 0.93622,-2.05479 2.375,-2.50807 2.375,-0.75 0,0.61318 -0.67777,1.51777 -1.5,2.03125 -1.87087,1.16838 -1.90199,2.8919 -0.0937,5.125 l 1.40625,1.75 2.40625,-2.4375 c 1.91135,-1.91136 2.64691,-2.21332 3.46875,-1.53125 1.55676,1.292 1.26084,1.94811 -1.21875,2.8125 -2.55232,0.88974 -2.70271,1.51361 -1.09375,4.625 0.97319,1.88191 1.37829,2.10471 2.625,1.4375 0.8081,-0.43249 2.02586,-1.6152 2.6875,-2.625 0.69349,-1.05838 1.53976,-1.58996 2.03125,-1.28125 0.46891,0.29455 1.46817,0.40484 2.21875,0.28125 1.15088,-0.18958 1.2406,0.0142 0.5625,1.28125 -1.10825,2.07078 -1.08948,2.11452 1.5625,3.4375 3.13687,1.56487 3.38997,1.48722 4.21875,-0.90625 l 0.6875,-2.03125 1,2.0625 c 0.74558,1.58786 0.76437,2.29813 0.0937,2.96875 -1.4474,1.4474 -1.00762,2.19224 1.15625,1.9375 1.44029,-0.16956 2.1083,0.11526 2.28125,1 0.1749,0.89473 -0.34558,1.32821 -1.84375,1.5 -2.7631,0.31684 -3.42024,3.78174 -0.96875,5.09375 1.76704,0.94568 3.71875,-0.0948 3.71875,-1.96875 0,-1.35677 2.16436,-1.33203 2.6875,0.0312 0.22431,0.58455 0.0402,1.79486 -0.4375,2.6875 -0.47765,0.89264 -0.68584,2.44801 -0.4375,3.4375 0.37772,1.50497 0.94027,1.78125 3.3125,1.78125 2.18054,0 3.33389,0.54219 5,2.28125 1.19176,1.24393 2.60418,2.08685 3.15625,1.875 0.55206,-0.21185 1.9938,0.33621 3.1875,1.21875 2.5616,1.89387 4.06229,1.15168 4.84375,-2.40625 0.32194,-1.46583 0.944,-2.21875 1.875,-2.21875 2.17937,0 2.46002,1.32989 0.78125,3.6875 -0.84822,1.19124 -1.53125,2.47489 -1.53125,2.875 0,1.42691 2.22417,2.59423 4.09375,2.125 1.55618,-0.39059 1.875,-0.93816 1.875,-3.09375 0,-2.02477 0.30859,-2.59375 1.375,-2.59375 2.13591,0 2.36611,0.70687 1.09375,3.375 -1.4302,2.99917 -0.87441,4.84375 1.46875,4.84375 2.06575,0 3.53125,-1.28576 3.53125,-3.09375 0,-1.94574 1.42206,-2.43098 2.96875,-1.03125 1.32145,1.19591 1.29011,1.30364 -0.4375,3.03125 -0.98453,0.98453 -1.78125,2.28536 -1.78125,2.90625 0,1.43739 2.51605,2.81217 4.0625,2.21875 1.33513,-0.51233 2.29021,-3.47292 1.65625,-5.125 -0.35157,-0.91619 -0.005,-0.87441 2.15625,0.15625 1.41999,0.67716 2.59375,1.50879 2.59375,1.84375 0,0.33499 0.60347,0.59375 1.34375,0.59375 2.14272,0 5.35235,1.76453 5.8125,3.1875 0.23214,0.71785 -0.36028,2.67747 -1.3125,4.375 l -1.71875,3.09375 1.65625,1.125 c 0.925,0.61532 1.6875,1.55149 1.6875,2.09375 0,1.40348 1.40274,2.07222 2.46875,1.1875 0.49753,-0.41292 2.05519,-0.86356 3.46875,-1 2.19157,-0.21141 2.68576,-0.58475 3.21875,-2.65625 0.34911,-1.3569 1.10443,-2.4375 1.71875,-2.4375 1.60456,0 1.34817,1.35612 -0.71875,3.8125 -1.53723,1.82692 -1.70236,2.51807 -1.125,4.53125 0.69121,2.41011 1.79418,3.57285 3.46875,3.59375 0.50606,0.006 1.15534,0.93831 1.4375,2.0625 0.5982,2.38345 2.18134,5.62512 3.8125,8.21875 1.23334,-0.90456 2.38632,-1.85992 3.53125,-2.8125 -0.52477,-0.12491 -1.15351,-0.14551 -1.875,-0.125 -2.75906,0.0784 -2.90461,-1.13839 -0.21875,-1.8125 1.47964,-0.37137 2.26507,-0.13645 3.21875,1 12.36343,-10.71942 19.35306,-24.31242 21.8125,-39.8125 -2.50708,-0.44393 -3.26334,0.58941 -2.875,3.59375 0.31093,2.40545 -0.93687,2.71517 -2.28125,0.5625 -1.20354,-1.92713 -4.38259,-1.94398 -5.40625,-0.0312 -0.42975,0.80299 -0.70068,2.53415 -0.59375,3.84375 0.16036,1.96346 -0.18865,2.5853 -2.03125,3.625 -2.03053,1.1457 -2.47985,1.15178 -5.09375,0.125 -2.29897,-0.90306 -3.36013,-0.93975 -5.1875,-0.25 -3.24747,1.22578 -4.0793,0.28105 -1.5625,-1.75 1.76965,-1.42814 1.96784,-1.96866 1.28125,-3.09375 -0.45591,-0.7471 -1.61077,-1.34375 -2.59375,-1.34375 -1.58434,0 -1.79575,0.31107 -1.71875,2.8125 0.0754,2.44891 -0.081,2.76587 -1.3125,2.375 -1.79637,-0.57015 -5.125,-3.85521 -5.125,-5.0625 0,-1.49018 -6.14979,-1.11964 -7.3125,0.4375 -1.04309,1.39697 -3.90625,1.80883 -3.90625,0.5625 0,-0.4111 -0.46142,-0.75 -1.03125,-0.75 -0.56982,0 -3.08022,-1.38402 -5.59375,-3.0625 -5.00642,-3.34316 -5.58719,-4.90275 -3.6875,-10.15625 1.14038,-3.15366 0.32539,-4.06535 -3.875,-4.28125 -2.04707,-0.10521 -3.38628,-0.5888 -3.84375,-1.40625 -0.38701,-0.69153 -1.36106,-1.60567 -2.15625,-2.03125 -1.14319,-0.61181 -1.7883,-0.43046 -3.0625,0.84375 l -1.59375,1.59375 0.34375,-2.4375 c 0.27317,-1.86131 -0.0609,-2.86691 -1.46875,-4.375 l -1.84375,-1.96875 -1.125,1.6875 c -1.88515,2.81315 -2.68259,2.02397 -2.1875,-2.15625 0.50037,-4.22481 0.75311,-4.79448 1.9375,-4.0625 0.53727,0.33211 0.55442,0.95583 0.0625,1.875 -0.59035,1.10309 -0.39473,1.43286 0.9375,1.78125 0.9081,0.23747 1.97736,0.11639 2.375,-0.28125 0.92836,-0.92841 4.15625,-0.95521 4.15625,-0.0312 0,0.38686 -0.33889,0.93342 -0.75,1.1875 -1.15485,0.71374 -0.88181,2.59375 0.375,2.59375 0.61666,0 1.125,-0.47707 1.125,-1.09375 0,-0.62288 0.66948,-1.125 1.5,-1.125 1.14861,0 1.46875,0.50366 1.46875,2.15625 0,2.30179 1.68519,4.26204 2.96875,3.46875 0.42912,-0.26521 0.78125,-1.30898 0.78125,-2.3125 0,-1.52899 0.37084,-1.8125 2.25,-1.8125 1.28102,0 2.91625,0.66625 3.8125,1.5625 0.8629,0.86289 2.35241,1.64468 3.3125,1.75 0.96006,0.10539 3.30924,1.74672 5.21875,3.65625 2.57155,2.57155 4.04383,3.46875 5.6875,3.46875 1.40691,0 2.83952,0.69025 3.9375,1.875 1.28569,1.38726 2.48948,1.875 4.6875,1.875 3.49638,0 6.41775,2.47225 5.78125,4.90625 -0.26029,0.99537 0.32723,2.25243 1.71875,3.71875 l 2.09375,2.21875 1.8125,-1.71875 c 1.34704,-1.25832 2.38533,-1.5772 3.875,-1.25 1.11288,0.24443 2.22364,0.11534 2.46875,-0.28125 0.2451,-0.39662 1.11568,-0.55867 1.9375,-0.34375 1.20634,0.31546 1.5,0.0434 1.5,-1.5 0,-1.05148 -0.36342,-2.14802 -0.78125,-2.40625 -0.41785,-0.25821 -0.56387,-0.73758 -0.34375,-1.09375 0.45623,-0.73818 3.65112,2.22629 4.34375,4.03125 0.2524,0.65773 0.78774,1.1875 1.1875,1.1875 1.25317,0 1.72141,-1.49858 0.8125,-2.59375 -0.55685,-0.67095 -0.6196,-1.50913 -0.1875,-2.28125 0.61685,-1.10226 0.75683,-1.08373 1.65625,0 0.89667,1.08045 1.11318,1.0735 2.4375,-0.125 0.58144,-0.52618 0.93132,-0.82175 1.21875,-0.90625 2.092,-19.59466 -2.66798,-41.98379 -12.75,-65.34375 -1.97477,2.03171 -4.0898,2.73423 -7.1875,-0.28125 -0.74241,-2.41904 -0.66806,-2.94946 0.59375,-4.125 0.79235,-0.73819 1.79044,-1.34375 2.21875,-1.34375 0.99227,0 1.01333,1.26804 0.0312,1.875 -1.0597,0.65493 -0.92636,3.90534 0.1875,4.59375 1.54768,0.53033 1.78822,-0.285 3.3125,-1.21875 -0.71845,-0.59626 -0.62901,-1.16119 -0.15625,-1.75 -4.28092,-9.62059 -9.42641,-19.41953 -15.375,-29.21875 -0.16191,0.0564 -0.30718,0.13228 -0.46875,0.21875 -0.81682,0.43718 -1.72392,0.55733 -2,0.28125 -0.58337,-0.58335 -8.84992,-0.93585 -22.21875,-0.96875 -9.04382,-0.0222 -9.49494,-0.10661 -11.15625,-1.875 -1.15094,-1.22512 -2.18599,-1.67304 -3.125,-1.375 -1.55932,0.4949 -5.8125,-0.99205 -5.8125,-2.03125 0,-0.36123 -0.95538,-0.65625 -2.125,-0.65625 -1.1773,0 -2.71977,-0.67238 -3.46875,-1.5 -0.74411,-0.82223 -2.2691,-1.5 -3.375,-1.5 -1.1059,0 -2.59964,-0.67777 -3.34375,-1.5 -0.74411,-0.82222 -1.90068,-1.46875 -2.5625,-1.46875 -0.66183,0 -2.46591,-0.67777 -4,-1.5 -1.53411,-0.82223 -3.85101,-1.5 -5.15625,-1.5 -1.30524,0 -2.91345,-0.46656 -3.5625,-1.03125 -0.64905,-0.56468 -3.39754,-1.19986 -6.125,-1.40625 -4.21314,-0.31879 -5.1364,-0.15983 -6.15625,1.03125 -1.17602,1.37347 -2.44723,1.72956 -5.21875,1.4375 -0.76055,-0.0801 -1.90194,0.5703 -2.53125,1.46875 -1.67395,2.38991 -5.83079,3.96463 -7.75,2.9375 -1.97414,-1.05653 -3.89814,0.39539 -3.25,2.4375 0.24881,0.78391 0.0579,1.90306 -0.4375,2.5 -1.32979,1.6023 -2.38543,1.30658 -1.46875,-0.40625 0.43554,-0.81378 0.56698,-2.29863 0.3125,-3.3125 -0.2867,-1.14233 0.0113,-2.47663 0.75,-3.53125 0.65562,-0.93604 1.1875,-2.32874 1.1875,-3.09375 0,-2.19164 1.67122,-1.08272 2.625,1.75 1.06994,3.17779 2.98259,3.36952 5.125,0.5 1.30349,-1.7459 1.40152,-2.3191 0.625,-3.5625 -1.27168,-2.0363 0.67406,-5.9375 2.96875,-5.9375 0.88208,0 2.18863,-0.53807 2.90625,-1.1875 1.00853,-0.91271 1.64688,-0.99883 2.8125,-0.375 2.13203,1.14103 3.88528,0.99552 5.46875,-0.4375 1.22553,-1.10903 1.51474,-1.11085 2.6875,-0.0937 1.67109,1.44934 5.53868,2.17701 6.9375,1.3125 0.68938,-0.42607 1.6689,-0.29241 2.6875,0.375 0.87666,0.57448 2.22823,0.89807 3,0.71875 0.77178,-0.17932 2.19564,0.38071 3.1875,1.21875 l 1.8125,1.5 -1.65625,1.1875 c -2.2871,1.60195 -1.87527,4.375 0.65625,4.375 1.67111,0 1.85425,-0.31014 1.78125,-2.78125 -0.10227,-3.4575 1.4678,-4.22818 4.3125,-2.125 1.13636,0.84015 2.87099,1.53125 3.84375,1.53125 0.97276,0 2.49311,0.78 3.375,1.71875 l 1.59375,1.6875 -1.5,2.5 c -1.61583,2.65701 -1.47279,4.5625 0.375,4.5625 1.19248,0 3.40625,-3.61292 3.40625,-5.5625 0,-1.48441 1.77484,-1.50747 3,-0.0312 0.76992,0.92769 0.70263,1.70399 -0.375,4.09375 -1.5537,3.44546 -1.12184,5.28997 1.0625,4.71875 2.29131,-0.5992 3.28787,-2.24814 2.8125,-4.625 -0.42572,-2.12854 -0.41031,-2.11971 4.125,-2.59375 2.92917,-0.30616 4.91776,-0.19135 5.5625,0.34375 0.59419,0.49314 2.05046,0.63328 3.59375,0.34375 1.83674,-0.34456 3.18934,-0.12924 4.53125,0.75 1.34078,0.87847 2.7227,1.13392 4.6875,0.8125 1.53371,-0.2509 4.69396,-0.0745 7.03125,0.40625 1.14419,0.23533 1.94358,0.41582 2.53125,0.59375 -9.40943,-14.4162 -20.44667,-28.78909 -32.75,-42.75 -0.67481,0.94295 -1.45562,1.65625 -2.0625,1.65625 -0.27055,0 -0.81025,-1.60972 -1.1875,-3.5625 -0.2093,-1.08348 -0.35368,-1.84514 -0.5625,-2.375 -0.32606,-0.36 -0.67227,-0.70315 -1,-1.0625 -0.26925,-0.0902 -0.59131,-0.125 -1,-0.125 -1.65921,0 -1.84375,0.33741 -1.84375,2.8125 0,2.14282 -0.43852,3.07341 -1.875,4.03125 -1.02778,0.68534 -2.2986,1.7399 -2.8125,2.375 -0.80082,0.98964 -0.9375,0.8911 -0.9375,-0.875 0,-2.65728 -1.25144,-4.96875 -2.6875,-4.96875 -0.86957,0 -1.00875,0.55858 -0.65625,2.4375 0.65907,3.51316 -1.81279,5.60114 -7.9375,6.6875 -2.63146,0.46677 -5.43654,1.38085 -6.21875,2.03125 -1.35478,1.12646 -1.3868,1.07592 -0.96875,-1.09375 0.56452,-2.93004 -0.28999,-4.2861 -2.53125,-3.96875 -1.82154,0.25793 -2.07465,1.14638 -1.125,4.125 0.38886,1.21973 0.1464,1.85522 -1,2.46875 -1.31778,0.70525 -1.65228,0.57215 -2.25,-1 -0.76957,-2.02412 -2.85843,-2.99985 -4.8125,-2.25 -0.95354,0.36591 -1.16804,1.00624 -0.8125,2.625 0.38892,1.77075 0.22081,2.15625 -0.9375,2.15625 -0.77268,0 -1.78792,-0.41291 -2.28125,-0.90625 -0.68277,-0.68276 -1.1183,-0.69422 -1.78125,-0.0312 -0.66297,0.66294 -1.07029,0.63835 -1.6875,-0.125 -0.90807,-1.12306 -5.65625,-2.22546 -5.65625,-1.3125 0,0.32226 -0.43324,1.17387 -0.96875,1.90625 -1.28968,1.76373 -2.5616,0.3392 -2.90625,-3.28125 -0.22578,-2.37166 -0.5026,-2.65012 -3.0625,-3.0625 -3.29395,-0.53067 -3.86089,-0.95824 -3.28125,-2.46875 0.44271,-1.15367 0.36556,-1.19787 8.84375,3.03125 1.09122,0.54434 2.54231,1 3.21875,1 0.67642,0 2.14649,0.47583 3.28125,1.0625 2.32782,1.20377 2.92035,0.95691 4.84375,-2.0625 1.10454,-1.73389 1.79252,-2.07688 3.59375,-1.8125 1.79046,0.26278 2.51733,-0.1 3.78125,-1.875 1.52183,-2.13719 1.67126,-2.17115 6.1875,-1.6875 4.40546,0.47177 4.68246,0.38253 5.875,-1.4375 0.69037,-1.05364 1.7678,-1.90625 2.375,-1.90625 1.58911,0 1.35808,0.76155 -0.90625,3.125 -1.94389,2.029 -1.95383,2.12541 -0.625,3.59375 0.75052,0.8293 2.22749,1.5 3.28125,1.5 2.30782,0 5.59713,-3.47697 4.90625,-5.1875 -0.25844,-0.63986 -0.62495,-1.54487 -0.8125,-2 -0.18756,-0.45513 0.72457,-1.25297 2,-1.78125 1.91531,-0.79333 2.63067,-0.78741 4.21875,0.0625 1.80169,0.96424 2.05387,0.90634 3.90625,-1.3125 0.95112,-1.13929 1.53868,-1.74701 2.625,-2.09375 -4.83369,-5.24689 -9.83309,-10.45022 -15,-15.53125 -0.0624,0.38632 -0.0308,0.7782 0.0937,1.1875 0.87551,2.8774 0.7928,3.81886 -0.375,4.0625 -0.74775,0.156 -1.40433,-0.61931 -1.875,-2.21875 -0.66353,-2.25484 -0.92351,-2.46372 -3.5,-2.3125 -2.52696,0.14832 -2.8125,0.008 -2.8125,-1.65625 0,-1.55743 -0.36993,-1.84375 -2.28125,-1.84375 -2.86288,0 -3.59845,1.7195 -1.9375,4.53125 1.20347,2.03732 1.21712,2.1356 -0.28125,2.9375 -2.06892,1.10725 -1.6771,3.79433 0.75,5 1.02778,0.51056 1.875,1.35312 1.875,1.875 0,1.37931 -2.56569,1.64256 -3.59375,0.375 -0.48285,-0.59535 -1.50802,-1.29174 -2.28125,-1.5625 -1.26406,-0.4426 -1.38402,-0.1908 -0.96875,2.40625 0.41257,2.58008 0.28577,2.97906 -1.40625,3.75 -2.49716,1.13781 -2.59375,1.11172 -2.59375,-0.6875 0,-2.17432 -1.32971,-4.4375 -2.625,-4.4375 -0.75302,0 -1.09375,0.82575 -1.09375,2.625 0,1.88837 0.33324,2.59375 1.1875,2.59375 0.65094,0 1.03773,0.41806 0.875,0.90625 -0.43066,1.29196 -1.4104,1.36734 -3.9375,0.34375 -1.23335,-0.49956 -3.35137,-1.33105 -4.6875,-1.875 -2.52731,-1.0289 -3.44413,-2.78714 -1.0625,-2.03125 0.86401,0.27423 1.89345,-0.17565 2.84375,-1.25 2.0274,-2.29204 4.02173,-5.54078 3.625,-5.9375 -0.17833,-0.17828 -1.76189,-0.14022 -3.5,0.0937 -2.78184,0.37447 -3.23115,0.70531 -3.84375,2.84375 -0.70345,2.45552 -1.54467,2.90266 -3.3125,1.78125 -0.771,-0.48907 -0.73326,-0.80364 0.21875,-1.59375 2.09601,-1.73953 2.75331,-3.58175 1.84375,-5.28125 -0.62405,-1.16608 -0.60961,-2.12738 0.0625,-3.75 0.73831,-1.78242 1.34485,-2.1875 3.375,-2.1875 3.48381,0 6.02513,1.12566 7.4375,3.28125 1.10981,1.69385 1.12073,2.02475 0.0312,3.6875 -1.05885,1.61603 -1.06678,1.91651 -0.0625,2.75 1.46907,1.21921 4.875,0.3667 4.875,-1.21875 0,-0.66629 -0.59304,-1.65237 -1.3125,-2.1875 -1.0142,-0.75438 -1.12096,-1.2676 -0.5,-2.28125 0.44048,-0.71906 1.2395,-1.47566 1.78125,-1.65625 0.54319,-0.18106 0.76482,0.0403 0.5,0.46875 -0.93578,1.51413 0.41258,3.15625 2.59375,3.15625 2.53291,0 2.93211,-1.74273 0.71875,-3.125 -1.31498,-0.82123 -1.32967,-1.09344 -0.34375,-3 1.02253,-1.97738 3.34308,-3.13092 5.625,-2.8125 2.0638,0.28798 2.81561,-0.0642 3.28125,-1.53125 0.048,-0.15128 0.12082,-0.28045 0.1875,-0.40625 -12.25831,-11.58179 -25.33967,-22.5817 -38.96875,-32.78125 -0.97862,1.35397 -1.37754,3.61361 -0.53125,4.96875 0.72953,1.16815 0.6984,1.70203 -0.25,2.75 -1.37355,1.51775 -1.50658,3.29187 -0.375,5.40625 0.66028,1.23374 0.51842,1.78914 -0.78125,3 l -1.59375,1.5 2,1.84375 c 2.65817,2.46351 4.39337,1.81052 3.75,-1.40625 -0.2921,-1.46056 -0.19883,-2.12919 0.21875,-1.6875 0.3765,0.39827 0.88415,2.10448 1.15625,3.78125 0.37303,2.29874 0.22237,3.30205 -0.65625,4.03125 -2.42919,2.01604 -0.10581,7.0961 2.5,5.46875 1.02499,-0.6401 1.59253,-0.62622 2.21875,0 1.3036,1.30359 1.02188,1.80978 -1.40625,2.65625 -2.57344,0.89711 -2.83728,2.32384 -0.8125,4.15625 2.23025,2.01834 2.49998,5.2623 0.71875,8.28125 -1.69177,2.86733 -1.59963,2.86337 -4.5625,1.78125 -2.55831,-0.93438 -2.72891,-2.4486 -0.21875,-1.96875 2.51596,0.48095 4.45986,-1.70197 3.8125,-4.28125 -0.26653,-1.06195 -0.99285,-2.1324 -1.625,-2.375 -1.87072,-0.71785 -4.78125,1.27674 -4.78125,3.28125 0,1.00502 -0.32795,1.6046 -0.75,1.34375 -0.41261,-0.25502 -0.5467,-1.22314 -0.3125,-2.15625 0.33265,-1.3254 -0.16762,-2.16168 -2.25,-3.75 -1.5784,-1.2039 -2.65625,-2.65522 -2.65625,-3.59375 0,-0.8717 -0.51176,-2.16613 -1.125,-2.84375 -1.28237,-1.41701 -2.78374,-8.42727 -2.15625,-10.0625 0.23215,-0.60497 1.03893,-1.28573 1.8125,-1.53125 1.48946,-0.47274 4.4375,-4.15061 4.4375,-5.53125 0,-0.45043 -0.64654,-0.8125 -1.46875,-0.8125 -0.82223,0 -1.5,-0.33888 -1.5,-0.75 0,-0.4111 0.25417,-0.747 0.5625,-0.75 0.87379,-0.007 3.22171,-4.51801 2.75,-5.28125 -0.23158,-0.37472 -0.82287,-0.70975 -1.3125,-0.71875 -1.79536,-0.0335 -4.49068,-2.75253 -4,-4.03125 0.39476,-1.02872 0.77003,-1.08343 2.09375,-0.375 1.49124,0.79809 1.54764,0.71472 1.09375,-1.09375 -0.40408,-1.60995 -0.22484,-1.9375 1,-1.9375 0.37775,0 0.71757,-0.11943 1.03125,-0.28125 -7.96365,-5.8179 -16.12116,-11.34233 -24.40625,-16.53125 0.009,0.63481 -0.20473,1.09375 -0.53125,1.09375 -0.86511,0 -1.38485,-1.17565 -1.25,-2.1875 C 471.00608,140.8129 433.67322,125.2859 397.32086,119.8963 330.37685,109.97118 345.01355,65.971381 243.13336,29.677551 c -14.54178,-5.18037 -31.34923,-7.7811 -49.21875,-7.84375 z M 505.97711,162.4588 c 0.58953,0.3649 1.19309,0.72539 1.78125,1.09375 -0.002,-0.18456 -0.0237,-0.35415 -0.0625,-0.5625 -0.17242,-0.92501 -0.34445,-1.84625 -0.375,-2.03125 -0.0305,-0.185 -0.44054,0.0343 -0.90625,0.5 -0.2572,0.2572 -0.38712,0.62198 -0.4375,1 z m 26.1875,17.625 c 1.33418,0.9747 2.64508,1.97816 3.96875,2.96875 0.40369,-0.55852 0.90246,-0.98812 1.46875,-1.09375 1.95947,-0.3655 3.35717,-1.61871 2.8125,-2.5 -0.24743,-0.40036 -1.06791,-0.54663 -1.84375,-0.34375 -1.63888,0.42858 -1.80854,-0.7904 -0.53125,-3.59375 1.58509,-3.47892 4.83452,-1.50778 3.875,2.34375 -0.47869,1.9214 -0.40606,2.02044 0.71875,1.09375 1.97033,-1.62328 1.46736,-4.4606 -1.375,-7.78125 -3.02903,-3.53875 -3.11577,-4.15665 -1.125,-6.6875 0.80874,-1.02817 1.2581,-2.08566 1,-2.34375 -0.64264,-0.64267 2.00513,-3.46875 3.25,-3.46875 0.61445,0 1,-0.84289 1,-2.1875 0,-1.32587 0.56835,-2.60997 1.4375,-3.21875 0.79321,-0.55559 1.65739,-1.91519 1.9375,-3.03125 0.75435,-3.0055 1.64409,-3.14922 4.03125,-0.59375 3.96397,4.24345 9.78125,2.27254 9.78125,-3.3125 0,-1.4389 0.29471,-2.59375 0.65625,-2.59375 0.36154,0 2.05241,-1.27083 3.75,-2.8125 1.69759,-1.54168 4.42254,-3.96735 6.0625,-5.40625 3.31165,-2.90563 3.6757,-3.75 1.59375,-3.75 -2.13765,0 -3.50801,-1.97216 -2.34375,-3.375 1.34861,-1.62498 2.67691,-1.37824 4.25,0.78125 1.3368,1.83513 1.45849,1.87757 3.71875,0.75 2.93216,-1.46275 3.65187,-2.41114 4.21875,-5.40625 0.36797,-1.94421 0.19536,-2.46436 -1,-2.84375 -1.01929,-0.32351 -1.46875,-1.13412 -1.46875,-2.65625 0,-1.20563 -0.33889,-2.1875 -0.75,-2.1875 -0.4111,0 -0.75,0.49139 -0.75,1.09375 0,1.60187 -4.42213,6.375 -5.90625,6.375 -0.69899,0 -2.35553,1.12575 -3.6875,2.5 l -2.4375,2.5 1.34375,2.3125 c 1.66605,2.90292 0.6437,4.55439 -1.96875,3.15625 -1.27985,-0.68495 -1.54621,-1.30428 -1.1875,-2.9375 0.30664,-1.39613 0.0852,-2.39007 -0.6875,-3.03125 -0.63042,-0.5232 -0.92079,-1.29069 -0.65625,-1.71875 0.26455,-0.42805 0.13942,-0.57246 -0.28125,-0.3125 -0.42063,0.25997 -0.98308,1.86196 -1.25,3.53125 -0.27287,1.7064 -1.00189,3.21764 -1.65625,3.46875 -0.64016,0.24565 -2.80826,-0.31126 -4.8125,-1.25 -3.46074,-1.62092 -3.75251,-1.6547 -5.5625,-0.46875 -1.04826,0.68684 -1.90625,1.56711 -1.90625,1.96875 0,0.90862 0.19207,0.92508 2.625,0 1.85254,-0.70434 1.97278,-0.62379 1.75,1.3125 -0.23937,2.08044 -1.17251,2.39577 -3.8125,1.3125 -1.14571,-0.47012 -1.3125,-0.0828 -1.3125,3.28125 0,4.2537 -1.62449,5.93671 -3.40625,3.5 -0.89926,-1.22981 -0.98371,-1.24843 -1.71875,0.125 -0.55027,1.0282 -0.54568,2.13896 0.0625,3.75 1.09148,2.89162 -0.27489,4.95246 -2.96875,4.4375 -1.27315,-0.24337 -1.54264,-0.10514 -0.96875,0.46875 1.1572,1.1572 0.99432,3.29488 -0.4375,5.71875 -1.17888,1.99569 -1.34718,2.05172 -3,0.96875 -1.00156,-0.65623 -1.75,-0.79675 -1.75,-0.34375 0,0.43414 0.33889,0.99592 0.75,1.25 1.10879,0.68528 0.91249,3.53685 -0.375,5.375 -0.71478,1.0205 -0.8532,1.7982 -0.375,2.09375 1.16512,0.72009 0.88675,3.80722 -0.4375,4.90625 -0.80941,0.67175 -1.04473,1.68264 -0.75,3.15625 0.43651,2.1826 -0.26758,4.08197 -1.5625,4.75 z m 42.9375,35.75 c 0.4134,0.39059 0.80718,0.79567 1.21875,1.1875 0.24057,-0.67269 0.75108,-1.25741 1.53125,-1.40625 1.91114,-0.36462 3.70543,1.99785 2.5625,3.375 -0.38431,0.46305 -0.86239,0.80248 -1.15625,0.875 0.74638,0.72377 1.51001,1.42856 2.25,2.15625 0.10835,-0.67081 0.50862,-1.32138 1.21875,-2.03125 1.87492,-1.87492 3.06729,-1.69546 4.25,0.65625 1.71373,3.40757 2.58,3.63756 2.375,0.59375 -0.12476,-1.85257 0.19706,-3.08266 0.90625,-3.53125 1.54352,-0.97633 2.19403,-0.87972 2.6875,0.40625 0.62163,1.6199 1.78125,1.37651 1.78125,-0.375 0,-0.82222 -0.30906,-1.5 -0.6875,-1.5 -1.10232,0 -1.82742,-4.51634 -0.875,-5.46875 1.24724,-1.24724 3.40625,0.37676 3.40625,2.5625 0,1.48951 0.347,1.73705 2.03125,1.5625 1.93702,-0.20076 2.03215,-0.0422 2.25,3.75 0.12461,2.17048 0.55763,3.96812 0.96875,4 0.41111,0.0318 2.00439,0.33096 3.5625,0.65625 2.22795,0.46515 3.14967,0.30531 4.28125,-0.71875 0.916,-0.82898 2.15659,-1.17639 3.40625,-0.9375 2.40663,0.46006 6.35216,-0.86189 7.625,-2.5625 0.6896,-0.92135 1.61443,-1.14467 3.46875,-0.84375 2.06061,0.3344 2.71855,0.12875 3.40625,-1.15625 0.92543,-1.72919 3.02328,-2.03984 5.375,-0.78125 1.16563,0.62384 1.80397,0.53773 2.8125,-0.375 1.65498,-1.49771 2.24288,-1.49646 4,0.0937 1.35752,1.22854 1.49561,1.20041 2.875,-0.5625 1.35429,-1.73086 1.4947,-1.75545 2.4375,-0.53125 1.30226,1.69095 1.88406,1.63904 4.5,-0.5 1.59344,-1.30296 2.03488,-2.13922 1.625,-3.15625 -0.52133,-1.29359 -0.61234,-1.3005 -1.1875,0.1875 -0.84034,2.1741 -5.0194,2.82817 -6.03125,0.9375 -0.6929,-1.29469 -0.77464,-1.28785 -2.1875,0.125 -1.98641,1.98639 -3.43726,1.85217 -4.9375,-0.4375 -1.57922,-2.41018 -0.69946,-3.39395 3.1875,-3.59375 1.58806,-0.0817 3.32262,-0.42793 3.84375,-0.75 0.52114,-0.32209 2.1064,-0.18899 3.53125,0.28125 2.4033,0.79316 2.70934,0.71262 4.34375,-1.1875 2.52696,-2.93777 4.11448,-2.07396 3.78125,2.0625 -0.28341,3.51835 0.8707,6.59375 2.46875,6.59375 0.55276,0 1.66951,0.40711 2.46875,0.90625 1.2209,0.76247 1.73867,0.64048 3.21875,-0.75 2.19905,-2.06589 2.52197,-2.05874 3.0625,0.0312 0.23924,0.92501 1.77138,2.44949 3.40625,3.375 2.50657,1.41898 3.26786,1.54476 4.875,0.8125 1.22698,-0.55904 1.90625,-1.47162 1.90625,-2.5625 0,-0.93195 0.84721,-2.37904 1.875,-3.1875 1.02778,-0.80847 1.84375,-1.88113 1.84375,-2.40625 0,-0.52514 0.56181,-1.55533 1.21875,-2.28125 1.28163,-1.41618 0.83585,-2.90625 -0.84375,-2.90625 -0.61474,0 -1.11016,0.95963 -1.25,2.40625 -0.46606,4.82159 -5.09375,3.23332 -5.09375,-1.75 0,-2.16485 -0.32076,-2.90625 -1.21875,-2.90625 -0.92218,0 -1.0625,0.44341 -0.6875,1.9375 0.66561,2.65204 -1.25204,5.53882 -3.3125,5 -1.84236,-0.48178 -2.77444,-3.5333 -1.53125,-5.03125 0.93778,-1.12996 0.47758,-2.65625 -0.8125,-2.65625 -0.41455,0 -0.55504,0.64208 -0.3125,1.40625 0.56264,1.77275 -1.1307,3.25759 -2.625,2.3125 -0.60287,-0.3813 -1.34791,-0.71245 -1.65625,-0.71875 -0.83575,-0.0171 -0.67709,2.84064 0.1875,3.375 1.37627,0.85057 0.7837,3.39144 -0.9375,4.03125 -2.29276,0.85227 -3.46106,0.27181 -4.03125,-2 -0.37742,-1.50377 -0.0497,-2.30077 1.5625,-3.6875 2.4953,-2.14635 2.19385,-4.58344 -0.375,-3.03125 -1.42478,0.86093 -1.82746,0.64539 -4.34375,-2.25 -2.56271,-2.9488 -4.22447,-3.60761 -3.34375,-1.3125 0.36421,0.94915 -3.00513,4.125 -4.375,4.125 -0.39138,0 -1.09697,-1.01667 -1.5625,-2.25 -0.79028,-2.09371 -2.78125,-3.16582 -2.78125,-1.5 0,0.41111 0.33888,0.75 0.75,0.75 1.08226,0 0.91944,2.76703 -0.1875,3.1875 -0.5139,0.1952 -2.00763,0.199 -3.34375,0 -3.0851,-0.45691 -3.28118,-2.67337 -0.375,-4.25 l 2.0625,-1.125 -2.21875,-0.0312 c -2.18278,-0.0295 -5.65625,2.44628 -5.65625,4.03125 0,0.95582 -4.87335,2.63499 -5.8125,2 -1.16878,-0.79024 -1.54335,-2.86289 -0.6875,-3.71875 1.33091,-1.33089 -0.32887,-0.9647 -1.84375,0.40625 -0.75182,0.68038 -1.375,1.80749 -1.375,2.5 0,0.69254 -0.82788,1.64789 -1.875,2.125 -2.50905,1.14321 -2.44648,1.1749 -2.71875,-1.125 -0.13001,-1.09886 -0.73619,-2.15419 -1.3125,-2.34375 -0.81722,-0.26878 -0.91336,0.18325 -0.53125,2.09375 0.61289,3.06448 -0.56833,4.64156 -3,4.03125 -0.98609,-0.24749 -2.28169,-0.0548 -2.875,0.4375 -1.44471,1.19899 -2.40267,0.46963 -3,-2.25 -0.56634,-2.57853 -4.94399,-5.96875 -7.71875,-5.96875 -1.00177,0 -2.68877,0.98015 -3.875,2.25 -1.1521,1.23335 -2.56268,2.25 -3.15625,2.25 -0.59358,0 -1.69339,0.67777 -2.4375,1.5 -0.89598,0.99005 -2.29484,1.46875 -4.15625,1.46875 -2.15436,0 -3.31523,0.53121 -4.9375,2.25 -1.49075,1.57945 -2.82269,2.25 -4.5,2.25 -1.48392,0 -2.24565,0.31908 -2.65625,1.09375 z m 4.15625,4.03125 c -0.97922,-0.94954 -1.9475,-1.90122 -2.9375,-2.84375 -0.35286,0.98668 -0.104,2.15955 0.96875,2.4375 0.74349,0.19264 1.5545,0.3899 1.8125,0.4375 0.0398,0.007 0.10259,-0.018 0.15625,-0.0312 z m 17.25,17.6875 c 0.48572,0.52724 0.95536,1.06508 1.4375,1.59375 0.43205,0.14475 0.75985,0.45314 1,1.0625 1.28801,1.42204 2.55095,2.84974 3.8125,4.28125 0.86359,-1.20673 1.55189,-2.81696 1.46875,-3.90625 -0.22966,-3.00891 1.58147,-3.34744 2.65625,-0.5 0.48103,1.27435 1.20123,2.30996 1.625,2.3125 0.42376,0.003 1.73882,0.51613 2.90625,1.125 1.55213,0.80954 2.51064,0.90669 3.5625,0.34375 0.79112,-0.4234 2.59812,-0.5501 4.03125,-0.28125 2.96546,0.55633 3.15511,0.074 1.53125,-3.8125 -1.14602,-2.7428 -0.66968,-3.63304 1.5625,-2.90625 0.75656,0.24633 1.81214,0.55873 2.34375,0.71875 0.73093,0.22 0.79701,0.67364 0.1875,1.8125 -0.6679,1.24801 -0.60577,1.49619 0.5,1.5 0.7339,0.003 2.29539,0.51304 3.46875,1.125 2.62925,1.37128 3.5,0.91158 3.5,-1.875 0,-2.26024 0.95115,-3.37718 2.21875,-2.59375 0.49985,0.30892 0.49774,0.91311 0,1.84375 -0.41076,0.76749 -0.54482,1.89459 -0.3125,2.5 0.36258,0.94487 1.03614,0.89736 4.65625,-0.375 2.42022,-0.85064 5.08944,-1.30086 6.28125,-1.0625 3.17826,0.63566 4.28373,-0.16083 5.1875,-3.75 0.45597,-1.81084 1.07883,-3.48516 1.40625,-3.6875 1.0913,-0.67447 2.96875,1.96952 2.96875,4.1875 0,1.44751 0.3836,2.1875 1.125,2.1875 0.72235,0 1.11843,-0.70693 1.125,-2.03125 0.006,-1.13056 0.23398,-2.88064 0.5,-3.875 0.39175,-1.46427 0.26728,-1.72213 -0.71875,-1.34375 -0.66959,0.25693 -1.43544,0.12664 -1.6875,-0.28125 -0.25207,-0.40785 -1.71041,-0.64937 -3.21875,-0.5625 -1.50834,0.0869 -3.47703,-0.23546 -4.375,-0.71875 -2.31396,-1.24542 -3.7104,-1.12704 -7.40625,0.71875 -2.68767,1.34229 -3.574,1.48793 -5.125,0.78125 -2.16015,-0.98423 -3.80304,-0.5512 -6.21875,1.625 -1.42974,1.28801 -1.94372,1.38224 -3.15625,0.625 -1.79602,-1.12164 -6.45478,-1.17826 -7.125,-0.0937 -0.30477,0.49313 -1.62713,0.58712 -3.4375,0.28125 -2.19152,-0.37025 -3.45369,-0.15107 -4.96875,0.84375 -1.39091,0.91331 -3.91348,1.43252 -8,1.625 -2.76461,0.13021 -4.26641,0.2286 -5.3125,0.5625 z m 39,49.6875 c 0.34434,0.52756 0.69127,1.06614 1.03125,1.59375 0.41274,-0.81146 0.28736,-1.19451 -1.03125,-1.59375 z m 1.03125,1.59375 c -0.0191,0.0376 -0.0413,0.0541 -0.0625,0.0937 -1.14129,2.1325 -0.22956,3.5625 2.3125,3.5625 0.0237,0 0.0392,1.6e-4 0.0625,0 -0.76009,-1.21577 -1.52901,-2.44038 -2.3125,-3.65625 z m 2.3125,3.65625 c 0.7149,1.14349 1.43115,2.26326 2.125,3.40625 0.96352,-0.33575 1.99049,-0.13412 3.8125,0.6875 2.65093,1.1954 2.9391,1.20639 4.78125,0 1.75794,-1.15185 2.11653,-1.16512 3.65625,-0.15625 1.44941,0.94968 2.84541,1.46989 5.0625,1.9375 0.22613,0.0476 0.83018,-0.32984 1.34375,-0.84375 0.51357,-0.51389 3.01327,-1.10693 5.5625,-1.3125 4.38775,-0.3538 4.69415,-0.50912 5.90625,-2.9375 1.15635,-2.31664 1.63411,-2.58878 4.71875,-2.71875 1.92291,-0.0811 3.99404,-0.65963 4.75,-1.34375 0.73851,-0.66835 2.415,-1.21875 3.71875,-1.21875 2.67127,0 5.34375,-2.20173 5.34375,-4.40625 0,-2.84038 0.87181,-3.8125 3.40625,-3.8125 2.85345,0 5.5625,-2.8006 5.5625,-5.71875 0,-1.40151 0.41051,-1.75 1.9375,-1.75 2.70776,0 6.28125,-3.78478 6.28125,-6.625 0,-2.01562 0.3002,-2.27318 2.9375,-2.71875 2.97515,-0.50264 5.03132,-2.10439 5.3125,-4.125 0.68077,-4.89193 -1.20297,-7.04377 -5.75,-6.53125 -2.652,0.29891 -3.21875,0.14096 -3.21875,-0.875 0,-2.04737 -2.13356,-4.4071 -4.40625,-4.90625 -1.26397,-0.27763 -2.47074,-1.2195 -2.96875,-2.3125 -0.53135,-1.16619 -1.70478,-2.02222 -3.15625,-2.3125 -1.26573,-0.25315 -2.80138,-1.24791 -3.4375,-2.21875 -1.43042,-2.18311 -3.2664,-2.37549 -2.71875,-0.28125 0.21483,0.8215 -0.14809,2.3297 -0.8125,3.34375 -2.78622,4.25229 -0.31588,5.74564 2.84375,1.71875 1.59278,-2.02995 2.11171,-2.29749 3.21875,-1.59375 1.34443,0.85464 1.54114,3.01015 0.5625,6.0625 -0.45813,1.42891 -0.25348,1.6875 1.28125,1.6875 0.99351,0 2.18034,-0.39909 2.65625,-0.875 2.26147,-2.26145 3.70441,3.15686 1.5625,5.875 -0.47972,0.60879 -0.16701,0.95515 1.03125,1.125 1.12413,0.15933 1.78188,0.81055 1.9375,1.90625 0.19865,1.39869 -0.091,1.6991 -1.84375,1.71875 -2.59977,0.0292 -6.39425,3.20704 -6.65625,5.59375 -0.29459,2.68362 -0.96443,3.34375 -3.375,3.34375 -1.87407,0 -2.35793,0.45811 -3.375,3 -0.65798,1.64446 -1.48371,2.96875 -1.8125,2.96875 -0.32879,0 -2.50066,1.59133 -4.84375,3.5 -3.9551,3.2218 -4.25293,3.63989 -3.875,5.96875 0.32684,2.01407 0.10941,2.65186 -1.125,3.3125 -1.23823,0.66269 -1.94682,0.54509 -3.65625,-0.71875 -2.29219,-1.6947 -3.48116,-1.90831 -5.0625,-0.90625 -0.80521,0.51024 -0.83207,0.96011 -0.125,2.28125 1.16742,2.18137 0.41844,5.04736 -1.5,5.65625 -2.05381,0.65185 -3.71875,-0.87414 -3.71875,-3.40625 0,-2.01259 -1.10547,-2.96875 -3.4375,-2.96875 -0.84245,0 -0.91254,0.31633 -0.3125,1.4375 2.06223,3.85333 -0.38339,7.81629 -3.71875,6.03125 -1.67211,-0.89487 -1.89019,-2.3465 -0.6875,-4.59375 0.96702,-1.80688 0.9501,-1.80994 -2.125,-2.46875 -2.3642,-0.5065 -2.40625,-0.45836 -2.40625,2 0,1.38936 -0.41291,2.94416 -0.90625,3.4375 -1.18088,1.18088 -4.32414,1.12913 -4.40625,-0.0625 -0.0355,-0.51389 -0.12013,-2.09236 -0.1875,-3.53125 -0.0973,-2.07704 -0.43812,-2.625 -1.625,-2.625 -0.82221,0 -1.5384,0.50832 -1.59375,1.125 -0.0554,0.61666 -0.14014,1.71805 -0.1875,2.4375 -0.061,0.92546 -0.70578,1.30185 -2.28125,1.3125 z m 17.5,32.625 c 0.33063,0.74303 0.68001,1.4776 1,2.21875 1.31959,-1.36262 2.59445,-3.30199 4.09375,-5.125 0.98185,-0.92968 1.9852,-2.28054 2.25,-3 0.26479,-0.71944 0.82598,-1.3125 1.25,-1.3125 0.42401,0 0.78125,-0.52511 0.78125,-1.15625 0,-1.6937 -2.25294,-4.8125 -3.46875,-4.8125 -0.88527,0 -0.87552,0.34431 0.0937,2.21875 1.01536,1.96349 1.03726,2.5542 0.0937,4.8125 -0.59011,1.41231 -1.93788,3.11656 -3,3.8125 -1.22691,0.8039 -2.49062,1.59257 -3.09375,2.34375 z m 13.75,67.59375 c -0.14433,1.35183 -0.32108,2.67543 -0.53125,4 0.42419,0.0751 0.87846,0.18562 1.40625,0.34375 2.24343,0.67215 3.39368,0.70012 3.96875,0.125 1.10014,-1.10014 2,-0.99019 2,0.21875 0,0.5516 1.36505,1.40706 3.03125,1.90625 3.37251,1.01045 4.17935,2.20262 3,4.40625 -0.61974,1.15801 -0.51529,1.58388 0.40625,1.9375 0.7784,0.2987 1.30335,-0.0403 1.5625,-1.03125 0.72627,-2.77727 4.24198,-1.67543 5.0625,1.59375 0.27298,1.08762 1.17573,2.15944 2,2.375 1.12196,0.29339 1.39892,0.77903 1.03125,1.9375 -0.38344,1.20811 -0.1831,1.5625 0.96875,1.5625 1.14823,0 1.39435,-0.35602 1.0625,-1.625 -0.31901,-1.21993 0.15894,-2.14534 1.96875,-3.65625 1.99375,-1.66446 2.38592,-2.4581 2.1875,-4.53125 -0.19095,-1.99488 -0.80511,-2.84445 -2.9375,-4.03125 -1.47877,-0.82302 -3.58399,-2.13112 -4.6875,-2.90625 -2.22914,-1.56579 -3.76335,-1.02395 -1.59375,0.5625 1.72768,1.26331 0.8647,2.71875 -1.59375,2.71875 -1.50932,0 -1.81897,-0.33591 -1.65625,-1.6875 0.22906,-1.90268 -1.27571,-5.03125 -2.40625,-5.03125 -0.46704,0 -0.43535,0.60516 0.0937,1.59375 0.6704,1.25266 0.62874,1.80877 -0.28125,2.71875 -1.03416,1.03417 -1.34076,1.0344 -3.0625,-0.0937 -1.05244,-0.6896 -1.9375,-1.59837 -1.9375,-2 0,-0.95953 -2.74884,-0.9313 -3.34375,0.0312 -0.74011,1.19753 -3.49762,0.85104 -4.53125,-0.5625 -0.52125,-0.71287 -0.79244,-0.99114 -1.1875,-0.875 z m -22.34375,43.8125 c -0.36383,0.31545 -0.75186,0.62705 -1.125,0.9375 1.98231,0.47186 2.65625,2.10029 2.65625,5.71875 0,2.33077 -0.35349,4.03125 -0.8125,4.03125 -0.43537,0 -0.5784,-0.30781 -0.34375,-0.6875 0.23465,-0.37967 -0.60177,-1.42814 -1.84375,-2.3125 -0.9072,-0.64598 -2.05609,-2.1385 -3.1875,-3.9375 -0.91713,0.67264 -1.87715,1.2921 -2.84375,1.9375 0.0241,-0.48146 -0.31019,-0.87077 -1.03125,-1.40625 -1.26346,-0.93825 -1.5798,-0.90277 -2.75,0.15625 -1.03462,0.9363 -1.16168,1.53668 -0.5625,2.65625 0.2115,0.39521 0.45587,0.67966 0.75,0.875 1.22935,-0.73263 2.43611,-1.47739 3.59375,-2.25 -0.0216,0.2817 -0.16603,0.60761 -0.40625,1 -0.89449,1.46114 -2.21111,1.89844 -3.1875,1.25 -0.54695,0.32596 -1.09499,0.65085 -1.65625,0.96875 0.40038,0.21951 0.83912,0.36782 1.34375,0.46875 1.47419,0.29484 2.35974,1.11628 3,2.8125 0.86453,2.29044 1.04205,2.36925 3.9375,1.90625 2.69947,-0.43166 3.10392,-0.28491 3.6875,1.25 0.36043,0.94802 1.146,2.12373 1.75,2.625 0.93458,0.77565 1.07314,0.51713 1,-1.875 l -0.0625,-2.8125 3.53125,0.125 c 1.95279,0.0666 3.5625,-0.1876 3.5625,-0.5625 0,-0.37489 0.33888,-0.6875 0.75,-0.6875 0.41111,0 0.75,0.67777 0.75,1.5 0,0.82223 -0.27988,1.46875 -0.625,1.46875 -0.34512,0 -1.03867,0.88766 -1.53125,1.96875 -0.74853,1.64282 -0.68242,2.20654 0.375,3.375 1.64887,1.82198 2.01668,1.77471 1,-0.125 -0.44834,-0.83776 -0.58388,-2.23869 -0.3125,-3.09375 0.41984,-1.32278 0.92884,-1.48855 3.40625,-1.15625 3.44064,0.46147 4.09591,-1.19742 1.03125,-2.59375 -2.0319,-0.92581 -2.3611,-2.78294 -0.9375,-5.0625 1.02008,-1.63341 0.86979,-1.88518 -1.4375,-2.59375 -1.45943,-0.44818 -1.66598,-0.19053 -1.875,2.34375 -0.21496,2.60642 -0.39607,2.82495 -2.34375,2.6875 -3.47391,-0.24517 -4.41665,-1.44176 -3.09375,-4 1.00419,-1.94185 0.98466,-2.31854 -0.1875,-3.6875 -0.71311,-0.83285 -1.58087,-1.5 -1.9375,-1.5 -0.35662,0 -1.22151,-0.7408 -1.9375,-1.625 -0.0298,-0.0368 -0.0643,-0.0587 -0.0937,-0.0937 z m -71.46875,28.09375 c -5.55343,1.10425 -11.03401,2.04732 -16.46875,2.8125 l 0,24.25 -0.375,0 c -5.85311,-9.02333 -15.59299,-13.53116 -29.25,-13.53125 -12.43772,9e-5 -22.63655,4.70461 -30.5625,14.09375 -7.80405,9.26736 -11.6875,20.19043 -11.6875,32.75 0,13.77903 3.22477,25.09853 9.6875,34 7.19432,9.99892 17.42746,14.99999 30.71875,15 12.80344,-10e-6 23.16771,-5.52863 31.09375,-16.625 l 0.375,0 0,14.4375 16.46875,0 0,-107.1875 z m -308.6875,20.5 c -4.82325,2.0978 -9.70286,4.36267 -14.625,6.84375 5.53527,2.18598 8.31246,6.66682 8.3125,13.4375 -6e-5,6.09696 -1.97304,10.80148 -5.875,14.09375 -3.90207,3.17043 -8.96871,4.75004 -15.1875,4.75 l -15.53125,0 0,-16.40625 c -5.66962,3.164 -11.15505,5.85098 -16.46875,8.15625 l 0,55.8125 16.46875,0 0,-37.5 21.59375,0 23.40625,38.96875 17.1875,-3.65625 -26.15625,-38.96875 c 11.82792,-6.46268 17.74991,-15.34721 17.75,-26.6875 -9e-5,-8.16978 -3.42154,-14.35403 -10.25,-18.5 -0.20545,-0.12505 -0.4153,-0.22328 -0.625,-0.34375 z m -42.90625,22.71875 c 2.29251,-1.27936 4.61604,-2.63804 6.96875,-4.0625 7.21878,-4.37063 14.31365,-8.28463 21.3125,-11.8125 -2.63914,-1.04224 -5.91507,-1.56248 -9.8125,-1.5625 l -18.46875,0 0,17.4375 z m -45,16.9375 c -5.66581,0.94693 -11.12248,1.32533 -16.34375,1.1875 -0.29886,7.90416 -2.14085,15.19186 -5.59375,21.875 -4.6337,8.9015 -10.98337,13.375 -19.03125,13.375 -3.90204,0 -7.06126,-1.61085 -9.5,-4.78125 -2.43879,-3.17038 -3.65628,-6.75728 -3.65625,-10.78125 -3e-5,-10.51468 6.72387,-17.95424 20.15625,-22.3125 -4.89431,-1.37636 -9.57151,-3.24912 -14.0625,-5.625 -15.39207,6.73939 -23.125,16.11085 -23.125,28.125 0,8.16987 2.26953,14.8161 6.78125,19.9375 4.75557,5.48722 11.13956,8.21874 19.1875,8.21875 6.95043,-10e-6 14.58316,-4.01458 22.875,-12.0625 l 5.84375,-5.65625 c -6e-5,7.31629 0.8553,12.4828 2.5625,15.53125 l 17.9375,0 c -2.68271,-5.73109 -4.03132,-13.16713 -4.03125,-22.3125 l 0,-24.71875 z m -33.96875,-1.4375 c 5.5931,1.57287 11.45812,2.46221 17.625,2.625 0.0283,-0.74879 0.0625,-1.49025 0.0625,-2.25 -7e-5,-1.82902 -0.0656,-3.67087 -0.1875,-5.5 l -15.71875,4.5625 c -0.61295,0.17878 -1.19398,0.37195 -1.78125,0.5625 z M 667.07086,42.302551 c -0.19907,0.0739 -0.44269,0.47682 -0.84375,1.28125 -1.11063,2.22771 -3.15151,2.73671 -4.84375,1.21875 -0.68885,-0.61793 -2.43611,-1.32762 -3.875,-1.59375 -2.27817,-0.42135 -3.02075,-0.14596 -5.78125,2.21875 -2.27341,1.94745 -3.61057,2.5918 -4.6875,2.25 -0.82591,-0.26214 -1.5,-0.78731 -1.5,-1.15625 0,-0.36895 -0.62437,-0.9878 -1.40625,-1.40625 -1.17169,-0.62707 -1.37081,-0.53621 -1.09375,0.53125 0.18489,0.71232 -0.16993,1.95902 -0.78125,2.78125 -0.94874,1.27605 -1.31875,1.36003 -2.625,0.5625 -2.04954,-1.25135 -2.3125,-1.19536 -2.3125,0.5625 0,0.82625 -0.64478,2.07124 -1.4375,2.75 -1.41802,1.21414 -1.41932,1.25948 0.28125,3.53125 0.95071,1.27001 1.68019,2.99027 1.625,3.8125 -0.17685,2.63461 1.31505,2.33603 1.875,-0.375 0.30475,-1.47542 0.2366,-2.73449 -0.15625,-2.875 -1.06305,-0.38024 -0.81913,-2.82146 0.375,-3.8125 0.87006,-0.72209 1.39202,-0.17018 3,3.03125 1.98501,3.95207 2.06853,6.19057 0.1875,5.46875 -0.56636,-0.21734 -1.47299,0.11498 -2,0.75 -1.14644,1.38138 0.006,4.75649 2.3125,6.84375 0.78466,0.71011 1.41476,1.81301 1.4375,2.46875 0.0228,0.65573 1.0866,2.00517 2.34375,2.999999 1.88624,1.49266 2.53203,1.65911 3.6875,0.9375 2.15879,-1.348179 3.15846,-1.05453 4.78125,1.375 1.81754,2.7211 2.13213,2.75982 3.21875,0.375 0.46828,-1.02778 1.20507,-1.875 1.625,-1.875 0.41993,0 0.75,-0.67777 0.75,-1.499999 0,-1.5765 -1.06254,-2.01402 -1.84375,-0.75 -0.74992,1.2134 -4.7158,0.87669 -5.46875,-0.46875 -0.56217,-1.00454 -1.09922,-1.09868 -2.90625,-0.46875 -2.65566,0.92577 -4.71875,0.0146 -4.71875,-2.09375 0,-0.80738 -0.42361,-2.15468 -0.9375,-3 -0.81594,-1.34215 -0.69128,-1.7331 1.03125,-3.15625 1.60123,-1.32294 1.8986,-2.09047 1.59375,-4.0625 -0.43442,-2.81019 -0.47146,-2.78395 3.125,-1.28125 2.58379,1.07958 2.85975,1.04198 4.9375,-0.4375 1.77699,-1.26533 2.21875,-2.1312 2.21875,-4.40625 0,-3.59409 2.01609,-6.03125 5,-6.03125 2.67237,0 5.09942,-2.3622 4.375,-4.25 -0.22019,-0.57384 -0.36343,-0.82389 -0.5625,-0.75 z m -11.0625,2 c 1.86874,0 2.58933,1.30603 1.46875,2.65625 -1.15862,1.39604 -2.90236,1.39468 -3.4375,0 -0.57456,-1.49731 0.28846,-2.65625 1.96875,-2.65625 z m -31.78125,2.25 c -2.49722,0 -3.98704,1.28389 -5.4375,4.6875 -0.61739,1.44876 -1.4215,2.03125 -2.71875,2.03125 -1.01234,0 -2.02717,0.33888 -2.28125,0.75 -0.25409,0.41111 0.17259,0.75 0.96875,0.75 2.02633,0 3.28391,1.77392 3,4.25 -0.21438,1.86962 -0.52548,2.10634 -2.6875,1.9375 -1.33612,-0.10435 -2.40625,0.0621 -2.40625,0.40625 0,1.86433 3.05281,2.23736 4.46875,0.53125 0.51179,-0.61667 1.39224,-1.125 1.96875,-1.125 0.5765,0 1.40661,-0.86994 1.8125,-1.9375 0.40589,-1.06757 1.40148,-2.13002 2.21875,-2.34375 1.9418,-0.50779 1.88417,-1.1825 -0.1875,-2.09375 -2.24609,-0.98798 -2.53424,-3.03851 -0.5625,-4.09375 2.04793,-1.09602 3.71875,-0.47863 3.71875,1.40625 0,1.99562 1.00887,2.48147 3.34375,1.59375 1.92612,-0.73231 1.91668,-0.77779 0.65625,-2.8125 -1.86609,-3.01239 -3.2263,-3.9375 -5.875,-3.9375 z m 21.25,3.75 c 1.68621,0 3.0625,1.02211 3.0625,2.28125 0,2.002 -1.13287,2.35768 -2.53125,0.8125 -1.33712,-1.4775 -1.61352,-3.09375 -0.53125,-3.09375 z m -420.59375,0.53125 c 5.53772,-0.0121 10.80165,5.68699 15.625,23.125 1.53908,1.854469 2.0443,12.611939 0.65625,13.999999 -0.41469,0.41468 -0.75,1.69263 -0.75,2.84375 0,1.51426 0.37388,2.09375 1.34375,2.09375 0.9436,0 1.58086,0.95138 2.1875,3.1875 0.79297,2.92291 0.72933,3.28049 -0.78125,4.46875 -0.90297,0.71031 -2.21806,1.3034 -2.9375,1.3125 -1.66948,0.0212 -1.78572,3.49946 -0.1875,5.78125 0.71479,1.0205 0.85322,1.76695 0.375,2.0625 -1.30396,0.80591 -0.81585,4.05336 0.75,5.03125 0.82223,0.51349 1.5,1.35347 1.5,1.84375 0,0.50267 0.94594,0.84778 2.1875,0.8125 3.27186,-0.093 6.26545,2.13776 5.84375,4.34375 -0.21553,1.12748 0.15416,2.23748 1.03125,3.03125 0.76326,0.69072 1.375,1.87598 1.375,2.625 0,0.74904 0.83199,1.89956 1.84375,2.5625 1.8114,1.18688 2.05968,1.66514 2.96875,5.75 0.34295,1.54107 0.16377,2.03125 -0.6875,2.03125 -1.7881,0 -1.43897,3.53935 0.40625,4.125 0.84578,0.26844 1.84136,1.3199 2.21875,2.3125 0.3774,0.99261 1.21691,1.78125 1.84375,1.78125 1.62772,0 1.40591,1.3296 -0.3125,1.875 -0.7964,0.25277 -1.90021,1.44242 -2.4375,2.65625 -1.07324,2.42463 -1.91709,2.80693 -2.5625,1.125 -0.23105,-0.60208 0.31195,-2.11415 1.1875,-3.34375 1.36159,-1.91218 1.44581,-2.46692 0.625,-3.78125 -1.48479,-2.37753 -3.48633,-2.60861 -5.53125,-0.6875 -2.34094,2.1992 -2.49601,0.27006 -0.21875,-2.625 1.26251,-1.60502 1.39038,-2.17792 0.65625,-3.0625 -1.1846,-1.42741 -3.72184,-1.40185 -5.8125,0.0625 -1.94416,1.36175 -2.1646,0.32176 -0.5,-2.21875 2.34839,-3.58413 -1.27278,-6.22573 -4.875,-3.5625 -1.47366,1.08954 -2.29708,1.29668 -2.875,0.71875 -0.57792,-0.57791 -0.17127,-1.40138 1.40625,-2.875 2.46467,-2.30236 2.60127,-2.8708 1.25,-4.71875 -0.807,-1.10366 -1.29868,-1.15185 -3.4375,-0.40625 -2.27532,0.79318 -2.45194,1.08406 -2.03125,3.1875 0.28984,1.44924 0.22346,2.01737 -0.21875,1.5625 -0.38718,-0.39826 -0.83436,-1.7354 -0.96875,-2.96875 -0.18322,-1.68113 -0.67771,-2.28574 -1.96875,-2.46875 -1.85022,-0.2623 -3.49705,-3.3534 -2.78125,-5.21875 0.22979,-0.59879 0.0426,-2.17217 -0.4375,-3.5 -1.22284,-3.38168 1.00347,-8.18642 4.21875,-9.125 2.75706,-0.80482 3.14566,-3.47676 0.5625,-3.84375 -1.20127,-0.17067 -1.93505,0.31037 -2.5625,1.6875 -1.12245,2.46347 -2.125,2.46827 -2.125,0 0,-1.55623 0.58764,-2.14615 3,-3.09375 3.25829,-1.27989 3.84146,-2.97104 1.75,-5.0625 -0.90964,-0.90965 -1.95956,-1.12986 -3.9375,-0.78125 l -2.6875,0.46875 2.25,-1.90625 c 1.62402,-1.38605 2.80658,-1.79671 4.3125,-1.53125 1.70765,0.30102 2.21817,6.7e-4 2.8125,-1.5625 1.01989,-2.68255 0.91622,-3.12059 -0.84375,-4.0625 -1.24223,-0.66483 -1.82572,-0.56567 -2.96875,0.46875 -0.78803,0.71315 -1.4375,1.72829 -1.4375,2.28125 0,0.55295 -0.33889,1 -0.75,1 -0.4111,0 -0.75,-0.39348 -0.75,-0.875 0,-0.48152 -0.54535,-1.47464 -1.21875,-2.21875 -1.44456,-1.59622 -0.44303,-3.36634 2.125,-3.75 2.18942,-0.32709 3.42676,-2.48616 2.375,-4.15625 -1.24429,-1.97584 -2.77598,-1.93615 -5,0.125 l -2.03125,1.84375 0,-2.5 c 0,-2.64077 0.9538,-3.83217 3.375,-4.28125 4.44573,-1.932719 -1.59303,-9.054389 -4.28125,-3.437499 l -2.03125,2.4375 -0.0312,-1.90625 c -0.69587,-5.13781 -3.3699,-2.35976 -5.25,0.21875 -0.82223,0.51349 -1.5,1.31397 -1.5,1.78125 0,0.564959 -1.10381,0.721219 -3.34375,0.468749 -3.22844,-0.3639 -3.41052,-0.29139 -4.1875,1.9375 -0.71586,2.0535 -0.96036,2.19588 -1.9375,1.21875 -1.78909,-1.7891 -4.6508,-1.37011 -5.46875,0.78125 -0.39076,1.02778 -0.92778,1.875 -1.1875,1.875 -0.25968,0 -0.2941,-0.5215 -0.0625,-1.125 0.52221,-1.36086 -0.72723,-2.1915 -3.5,-2.34375 -1.52753,-0.0839 -1.8979,0.10209 -1.3125,0.6875 0.44704,0.44703 0.8125,1.65525 0.8125,2.65625 l 0,1.8125 -1.46875,-1.90625 c -0.82334,-1.0467 -1.32845,-2.41964 -1.09375,-3.03125 0.62985,-1.64138 -0.85474,-2.20775 -2.21875,-0.84375 -1.67121,1.67121 -1.46548,3.98703 0.5,5.59375 1.26698,1.03572 1.45657,1.59411 0.8125,2.25 -1.48333,1.51054 -3.57903,0.47235 -4.34375,-2.125 -0.80183,-2.72341 -2.93287,-3.06925 -4.40625,-0.71875 -0.66542,1.06157 -0.38312,1.6944 1.59375,3.5 2.71322,2.47814 2.5992,2.65001 -1.96875,3.40625 -3.07013,0.50827 -3.23459,0.67082 -2.84375,2.625 0.24623,1.23112 0.005,2.63658 -0.625,3.46875 -1.37436,1.81492 -1.39162,3.62099 -0.0312,4.75 1.4205,1.17892 3.94592,0.31294 4.53125,-1.53125 0.59754,-1.88305 1.875,-1.88137 1.875,0 0,0.79891 0.63039,1.93468 1.4375,2.5 0.80711,0.56532 2.19533,1.9288 3.0625,3.03125 l 1.5625,2 -1.5313,1.96875 c -1.80921,2.30005 -1.9518,3.50854 -0.53125,4.6875 2.44273,2.02729 5.3935,-2.34934 3.5625,-5.28125 -1.03011,-1.64947 -0.28478,-1.73413 1.71875,-0.21875 0.79803,0.6036 2.70838,1.09375 4.25,1.09375 1.54162,0 3.02716,0.33889 3.28125,0.75 0.25408,0.41112 1.87489,0.71875 3.625,0.71875 2.7209,0 3.53254,0.42138 5.59375,2.75 1.32604,1.49778 2.77687,3.39306 3.21875,4.21875 0.66446,1.24156 0.5936,1.40294 -0.375,1.03125 -1.78672,-0.68563 -5.88796,5.24098 -5.34375,7.71875 0.30655,1.3957 -0.0353,2.34639 -1.28125,3.46875 -2.76932,2.49467 -3.36608,2.62502 -6.34375,1.3125 -1.55977,-0.68751 -4.18446,-1.46818 -5.8125,-1.71875 -2.62162,-0.40347 -3.01232,-0.74545 -3.59375,-3.0625 -0.70528,-2.81063 -0.8591,-4.95999 -0.4375,-6.75 0.19724,-0.83734 -0.53379,-1.17209 -2.90625,-1.34375 -2.51686,-0.1821 -3.15625,-0.52309 -3.15625,-1.625 0,-2.41676 -0.87825,-3.7595 -3.15625,-4.9375 -1.2434,-0.643 -2.68855,-2.31917 -3.3125,-3.8125 -1.13786,-2.72328 -10.02106,-12.1875 -11.4375,-12.1875 -1.01831,0 -1.01705,-1.24642 0,-1.875 0.48856,-0.30195 0.0171,-1.47345 -1.21875,-3.09375 l -1.96875,-2.625 1.6875,-1.8125 c 2.23563,-2.37971 2.94404,-2.28433 5.34375,0.625 2.27172,2.75416 3.7178,2.21436 3.0625,-1.125 -0.28717,-1.46337 -0.86473,-2.04636 -2,-2.0625 -1.57126,-0.0224 -1.56668,-0.0522 -0.0937,-0.90625 0.82223,-0.47677 2.43195,-0.96981 3.5625,-1.09375 2.0998,-0.23011 2.48621,0.5892 2.09375,4.4375 -0.1629,1.59734 1.97413,2.58836 3.125,1.4375 0.61053,-0.61052 0.59324,-1.3101 -0.0937,-2.59375 -0.66586,-1.24418 -0.78101,-2.99939 -0.34375,-6.09375 0.49839,-3.526889 0.94852,-4.465089 2.3125,-4.968749 1.45385,-0.53685 1.6875,-0.38679 1.6875,1.1875 0,1.311709 0.28619,1.716139 1.09375,1.406249 0.61668,-0.23665 1.125,-1.045159 1.125,-1.781249 0,-1.0322 0.54734,-1.30376 2.40625,-1.21875 11.49059,0.22041 23.08414,-20.63312 33.65615,-20.65625 z m 384.5625,6.9375 c -0.70815,0 -2.69042,1.40917 -4.40625,3.125 -1.71582,1.71582 -2.54112,2.8926 -1.84375,2.625 1.28537,-0.49324 4.21875,1.74658 4.21875,3.21875 0,0.41111 0.84721,0.75 1.875,0.75 1.0278,0 1.90709,-0.33889 1.96875,-0.75 0.33226,-2.21512 0.11456,-2.58084 -1.59375,-2.59375 -2.62497,-0.0199 -3.04333,-3.49362 -0.625,-5.1875 1.38236,-0.96824 1.45077,-1.1875 0.40625,-1.1875 z m 71.1875,11.40625 c -0.26994,0.002 -0.54489,0.0846 -0.8125,0.25 -0.5686,0.35141 -0.32443,0.90831 0.75,1.71875 1.48883,1.12303 1.51629,1.3348 0.4375,2.874999 -0.63947,0.91295 -2.21357,1.96274 -3.53125,2.34375 l -2.40625,0.71875 2.71875,0.0625 c 1.5705,0.039 3.08604,-0.41309 3.625,-1.0625 0.51179,-0.61667 1.40243,-1.125 1.96875,-1.125 1.35459,0 1.30841,-1.086379 -0.0937,-2.249999 -0.61668,-0.51179 -1.125,-1.36418 -1.125,-1.90625 0,-0.97043 -0.72143,-1.63185 -1.53125,-1.625 z m -74.71875,0.59375 c -0.18172,0.0173 -0.40176,0.1359 -0.6875,0.3125 -0.95928,0.59288 -1.06041,3.375 -0.125,3.375 0.36316,0 0.85655,-0.7492 1.09375,-1.65625 0.37099,-1.41868 0.26391,-2.08308 -0.28125,-2.03125 z m -8,1.03125 c -0.0407,0.0128 -0.064,0.0328 -0.0937,0.0625 -0.23785,0.23784 0.0515,0.74254 0.65625,1.125 1.5824,1.00073 1.79707,0.89303 0.71875,-0.40625 -0.45503,-0.54828 -0.99611,-0.87114 -1.28125,-0.78125 z m 4.875,2.6875 c -0.6327,0.16782 -1.34375,1.196579 -1.34375,2.218749 0,0.77119 -0.35755,2.3231 -0.78125,3.4375 l -0.75,2 -1.875,-1.71875 c -1.97598,-1.85635 -2.37492,-1.56413 -0.96875,0.6875 1.28308,2.05454 0.27016,3.8125 -2.1875,3.8125 -3.966,0 -5.39207,-4.00516 -2.21875,-6.21875 1.34411,-0.93761 1.43709,-1.18742 0.4375,-1.21875 -0.6879,-0.0216 -2.29455,0.83935 -3.5625,1.90625 -1.98211,1.66784 -2.29045,2.36103 -2.125,5.03125 0.17773,2.86838 0.0351,3.13022 -1.8125,3.34375 -1.48844,0.17202 -2.38749,-0.31696 -3.5625,-1.90625 -3.03873,-4.11007 -9.75,-2.66633 -9.75,2.09375 0,2.52724 -3.88813,6.9145 -5.78125,6.53125 -1.38428,-0.28025 -1.61035,-2.13707 -0.5625,-4.625 0.43984,-1.04431 0.34268,-1.32167 -0.4375,-1.0625 -0.5794,0.19247 -1.39565,1.25274 -1.78125,2.34375 -0.57466,1.62591 -0.37117,2.31968 1.03125,3.8125 1.4299,1.52206 1.60844,2.32096 1.1875,4.8125 -0.46286,2.7397 -0.31395,3.04519 1.625,4.0625 1.1605,0.60886 2.54623,0.97348 3.09375,0.8125 0.54752,-0.16098 1.14058,-0.28125 1.3125,-0.28125 0.17193,0 0.3125,-0.33889 0.3125,-0.75 0,-0.41112 -0.63069,-0.75 -1.40625,-0.75 -0.98977,0 -1.52303,-0.64106 -1.75,-2.1875 -0.61155,-4.16677 1.99189,-6.02475 4.0625,-2.90625 1.16056,1.74791 2.84375,1.33539 2.84375,-0.6875 0,-1.29711 2.07432,-3.9375 3.09375,-3.9375 0.34187,0 1.11754,1.1861 1.71875,2.625 1.44824,3.46611 2.86955,3.46903 2.21875,0 -0.60749,-3.2382 0.57239,-4.875 3.53125,-4.875 1.51755,0 2.39077,0.50967 2.9375,1.6875 0.97891,2.10881 5.83601,4.69524 6.875,3.65625 0.48398,-0.48397 -0.1855,-1.12991 -1.96875,-1.875 -2.25694,-0.94301 -2.71875,-1.49845 -2.71875,-3.34375 0,-1.2207 -0.1649,-2.67124 -0.375,-3.21875 -0.28301,-0.7375 0.46231,-1 2.9375,-1 2.58277,0 3.52202,0.34435 4.125,1.5 0.6449,1.23598 0.72655,1.06598 0.375,-0.90625 -0.51231,-2.87422 0.6881,-5.46875 2.5625,-5.46875 1.0607,0 1.47305,-0.76415 1.84375,-3.46875 0.26279,-1.91719 0.33579,-3.632949 0.15625,-3.812499 -0.16436,-0.16436 -0.3516,-0.21219 -0.5625,-0.15625 z m 65.28125,0.906249 c -0.16693,0.0206 -0.39132,0.1055 -0.65625,0.21875 -0.72261,0.30889 -2.32915,0.73329 -3.5625,0.9375 -2.7022,0.44741 -3.3287,1.27196 -3.34375,4.40625 -0.015,3.12822 -1.38696,3.89639 -3.125,1.75 -1.08904,-1.3449 -1.8764,-1.60597 -3.65625,-1.25 -1.90048,0.38009 -2.38243,0.15496 -3.09375,-1.40625 -0.46475,-1.01998 -1.11662,-1.84375 -1.4375,-1.84375 -1.12638,0 -1.54322,1.56267 -0.6875,2.59375 0.53275,0.64192 0.7133,2.29509 0.4375,4.28125 -0.2462,1.7729 -0.19495,3.579 0.125,4.03125 1.5246,2.15515 5.52947,1.8903 8.125,-0.53125 1.55006,-1.44616 2.53556,-2.00886 11.03125,-6.5 6.31394,-3.33778 6.93202,-3.94918 5.28125,-5.15625 -1.87054,-1.36776 -2.5625,-1.19813 -2.5625,0.59375 0,1.08139 -0.39975,1.47126 -1.3125,1.28125 -0.86712,-0.18052 -1.22143,-0.88222 -1.09375,-2.03125 0.11653,-1.04858 0.032,-1.43683 -0.46875,-1.375 z m -430.75,0.0625 c -1.47037,0.12336 -1.99477,1.84899 -0.53125,3.3125 0.64202,0.64207 1.15241,0.66219 1.875,0.0625 1.3415,-1.11334 1.25859,-2.60133 -0.1875,-3.15625 -0.43016,-0.16507 -0.81693,-0.24722 -1.15625,-0.21875 z m 383.875,2.03125 c -1.11041,-0.0217 -2.28513,0.44138 -3.3125,1.46875 -2.98838,2.98838 -1.18374,7.46875 3,7.46875 1.17461,0 2.66646,-0.54146 3.3125,-1.1875 0.64604,-0.64603 1.20129,-1.54672 1.25,-2.03125 0.3358,-3.3402 -1.80709,-5.67102 -4.25,-5.71875 z m 44.28125,0.34375 c 0.68436,0.044 1,0.7152 1,2 0,1.63137 -1.68949,1.78501 -2.9375,0.28125 -0.70735,-0.85231 -0.62069,-1.22725 0.53125,-1.84375 0.41469,-0.22194 0.79203,-0.35617 1.09375,-0.40625 0.11315,-0.0188 0.21473,-0.0375 0.3125,-0.0312 z m -44.59375,1.5 c 2.28452,0 2.91816,2.55059 1.09375,4.375 -1.71798,1.71798 -2.58894,1.5071 -2.71875,-0.65625 -0.0616,-1.02779 -0.14642,-2.26736 -0.1875,-2.78125 -0.0415,-0.51825 0.77598,-0.9375 1.8125,-0.9375 z m -408.625,1.6875 c 5.34143,-0.036 7.20033,1.15808 7.71875,5.03125 0.32267,2.41063 0.1069,3.2631 -1.15625,4.40625 -2.10256,1.90278 -1.99864,2.9076 0.65625,5.5625 2.90513,2.90521 2.92087,5.49591 0.0625,7.53125 -2.78394,1.98232 -3.66943,1.95018 -6.40625,-0.28125 -1.9533,-1.5926 -2.75132,-1.75671 -6.15625,-1.375 -3.19421,0.35809 -3.99171,0.21759 -4.375,-0.78125 -0.28213,-0.73525 -1.31416,-1.21875 -2.59375,-1.21875 -1.17001,0 -2.98412,-0.39789 -4.03125,-0.875 -1.60076,-0.72936 -1.90625,-1.38874 -1.90625,-4.03125 0,-4.13187 2.03246,-6.71804 5.75,-7.3125 1.91672,-0.3065 3.08745,-0.97923 3.59375,-2.09375 1.36161,-2.99739 4.32937,-4.53207 8.84375,-4.5625 z m 27.5,0.90625 c -2.02888,0 -3.13903,1.52225 -2.28125,3.125 0.93252,1.74243 2.68531,1.76803 3.5625,0.0625 0.89131,-1.733 0.30856,-3.1875 -1.28125,-3.1875 z M 79.883363,81.7088 c 1.316068,-0.0132 2.88782,0.70462 4.1875,2.09375 1.089952,1.16497 2.812259,2.55953 3.8125,3.09375 1.618997,0.86468 1.950716,0.80126 3.15625,-0.6875 0.74479,-0.91978 1.165115,-1.97546 0.9375,-2.34375 -0.227615,-0.36829 -0.0783,-0.6875 0.3125,-0.6875 0.390813,0 0.901271,0.82783 1.15625,1.84375 0.254982,1.01591 1.132517,2.19418 1.9375,2.625 1.247984,0.66789 1.345458,1.07501 0.625,2.65625 -1.022134,2.24334 -1.833206,2.34619 -2.46875,0.34375 -0.338362,-1.06609 -1.149359,-1.46875 -2.78125,-1.46875 l -2.28125,0 0.5,3.71875 c 0.294022,2.2164 0.203546,3.75 -0.21875,3.75 -2.089812,0 -3.0625,-1.0982 -3.0625,-3.375 0,-2.97161 -1.803176,-4.76668 -3.625,-3.625 -1.676589,1.05066 -1.954713,3.53738 -0.53125,4.71875 1.407915,1.16846 1.523613,3.03125 0.1875,3.03125 -1.371999,0 -2.78125,-1.55823 -2.78125,-3.09375 0,-1.82138 -1.02813,-2.29413 -3.28125,-1.4375 -2.577208,0.97976 -2.576128,3.55181 0,4.53125 2.394134,0.91025 1.977208,2.52508 -0.71875,2.84375 -1.122198,0.13265 -2.524044,1.04994 -3.1875,2.0625 -0.654972,0.99961 -1.630847,1.8125 -2.15625,1.8125 -0.997532,0 -2.179502,2.19549 -1.53125,2.84375 0.205302,0.2053 0.887217,-0.0539 1.5,-0.5625 0.612782,-0.50855 1.534779,-0.74321 2.0625,-0.53125 0.608717,0.24451 0.508352,0.40004 -0.3125,0.4375 -1.676597,0.0765 -2.506881,3.37172 -1.4375,5.71875 0.563966,1.23776 1.433569,1.8125 2.75,1.8125 1.095551,0 1.731137,0.32545 1.46875,0.75 -0.254083,0.41112 -1.456649,0.75 -2.65625,0.75 -2.554309,0 -4.922943,-2.99939 -4.5625,-5.75 0.170224,-1.29896 -0.158993,-1.71875 -1.25,-1.71875 -0.801313,0 -1.818591,0.44252 -2.28125,1 -0.462668,0.55748 -2.036015,0.98108 -3.5,0.9375 -2.043332,-0.0608 -2.968425,-0.54725 -3.90625,-2.09375 -1.045104,-1.72341 -1.069996,-2.28444 -0.21875,-3.875 0.547237,-1.0226 0.804728,-2.36876 0.5625,-3 -0.60288,-1.57108 0.445841,-2.0625 4.40625,-2.0625 3.027508,0 3.356814,-0.17035 3.15625,-1.625 -0.170523,-1.23676 0.439019,-1.96361 2.625,-3.03125 2.048869,-1.00079 2.64016,-1.60984 2.0625,-2.1875 -1.190466,-1.19047 -0.960124,-4.41086 0.4375,-6.40625 1.051717,-1.50154 1.678354,-1.72429 4.5,-1.40625 2.681659,0.30226 3.416761,0.11693 4.03125,-1.03125 0.491011,-0.91746 1.351391,-1.36473 2.375,-1.375 z M 652.25836,81.74 c 0.32492,-0.0602 0.78325,0.085 1.5,0.3125 2.46184,0.78136 1.70989,3.68686 -1.03125,4 -2.02156,0.23093 -2.12331,0.11042 -1.625,-1.875 0.42096,-1.67725 0.61471,-2.33712 1.15625,-2.4375 z m -551.3125,1.59375 c 0.10532,-0.0181 0.23031,-0.0219 0.34375,0 0.66984,0.129 1.26115,0.64799 1.3125,1.15625 0.0514,0.50826 0.13615,1.42904 0.1875,2.03125 0.12194,1.42902 2.62598,2.76272 4.125,2.1875 0.64645,-0.24807 1.1875,-1.11511 1.1875,-1.90625 0,-2.13538 2.22284,-2.64568 3.65625,-0.84375 0.66684,0.83828 1.97829,1.9455 2.9375,2.4375 1.42735,0.73212 1.99316,0.68649 3.0625,-0.28125 0.71861,-0.65034 1.53752,-0.96247 1.8125,-0.6875 0.92832,0.92832 0.51682,4.77053 -0.71875,6.65625 -0.98057,1.49652 -1.07539,2.25015 -0.40625,3.71875 0.7272,1.59604 0.65225,1.8125 -0.5625,1.8125 -0.76942,0 -1.56412,-0.43415 -1.78125,-1 -0.24602,-0.64109 -1.12157,-0.90919 -2.28125,-0.6875 -3.28859,0.62865 -4.54869,-0.7217 -4.3125,-4.5625 0.11554,-1.87884 0.0196,-3.73934 -0.21875,-4.125 -0.49285,-0.79744 -6.55462,2.16388 -6.96875,3.40625 -0.14796,0.44389 0.54267,1.78643 1.53125,2.96875 1.47855,1.76832 1.78074,2.86816 1.65625,6.25 -0.0833,2.26113 -0.29987,4.04499 -0.46875,3.96875 -2.00156,-0.90363 -3.03017,-0.95301 -4.34375,-0.25 -1.322916,0.70801 -1.498522,1.2812 -1.093747,3.8125 0.531837,3.32596 -0.754341,5.46688 -3.75,6.21875 -0.927047,0.23267 -2.089719,1.27486 -2.5625,2.3125 -0.472783,1.03765 -1.150388,1.875 -1.53125,1.875 -0.380864,0 -1.56905,1.47941 -2.625,3.28125 -1.055949,1.80185 -2.43493,3.47793 -3.0625,3.71875 -0.627569,0.24082 -1.125,0.92077 -1.125,1.5 0,0.57924 -0.508329,1.45696 -1.125,1.96875 -0.946884,0.78585 -1.125,0.64415 -1.125,-0.96875 0,-1.9429 -2.205872,-3.36057 -3.75,-2.40625 -1.181983,0.73051 -0.868611,2.01699 0.90625,3.90625 1.100902,1.17186 1.383675,1.99133 0.875,2.5 -0.508668,0.50867 -1.203013,0.23753 -2.125,-0.78125 -0.752899,-0.83195 -2.029171,-1.5 -2.8125,-1.5 -1.186238,0 -1.380761,0.47078 -1.1875,2.78125 0.185136,2.2133 0.609955,2.85531 2.03125,3.1875 1.686562,0.39419 1.708306,0.48183 0.4375,1.53125 -1.025444,0.84682 -1.41595,0.87022 -1.65625,0.15625 -0.42539,-1.2639 -3.544809,-1.17655 -4.625,0.125 -1.097674,1.32261 -0.24804,4.9375 1.15625,4.9375 0.572099,0 1.03125,0.52049 1.03125,1.1875 0,0.97543 -0.22079,1.03699 -1.09375,0.3125 -0.596944,-0.4954 -1.783046,-0.67347 -2.625,-0.40625 -1.227629,0.38963 -1.53125,1.13037 -1.53125,3.6875 0,1.75379 -0.186221,3.37372 -0.4375,3.625 -0.251281,0.25128 -0.587662,2.17164 -0.75,4.25 -0.277472,3.55233 -0.183308,3.78125 1.46875,3.78125 2.007132,0 4.21875,2.12218 4.21875,4.03125 0,1.01196 -0.381104,0.84144 -1.75,-0.75 -1.006542,-1.17017 -2.12359,-1.80988 -2.625,-1.5 -1.2131,0.74974 -1.087807,4.29088 0.21875,6.15625 0.832999,1.18927 0.926939,2.18851 0.375,4.1875 -0.542684,1.96542 -0.440728,3.28541 0.40625,5.3125 0.619958,1.48378 1.125,3.26677 1.125,3.96875 0,0.70199 1.122873,3.65403 2.5,6.5625 3.666942,7.74449 5.71875,13.28113 5.71875,15.4375 0,1.23919 0.77637,2.46487 2.21875,3.53125 2.704181,1.99937 2.667793,2.02145 5.375,0.0937 1.764388,-1.25636 2.402086,-1.38589 3.28125,-0.65625 0.602177,0.49977 1.09375,1.68935 1.09375,2.65625 0,1.1973 0.722749,2.11648 2.25,2.90625 2.20218,1.13879 2.904005,2.87035 1.53125,3.71875 -0.382709,0.23653 -0.898026,0.0741 -1.15625,-0.34375 -0.258224,-0.41783 -1.108284,-0.75 -1.90625,-0.75 -1.117152,0 -1.46875,0.53602 -1.46875,2.28125 0,3.11021 2.656082,4.1834 5,2.03125 1.625208,-1.49222 1.662991,-1.48215 4.09375,-0.0625 1.727967,1.00918 2.699437,2.2941 3.281247,4.375 0.71938,2.57293 1.16183,3.0185 3.375,3.34375 1.78474,0.2623 2.61895,0.82585 2.8125,1.875 0.43,2.33086 1.63552,3.34375 3.875,3.34375 2.44478,0 3.34439,0.96139 4.25,4.46875 0.61143,2.36807 0.9322,2.618 3.375,2.625 2.03798,0.007 3.08723,0.50508 4.3125,2.0625 1.00165,1.27322 2.3304,2.0625 3.5,2.0625 1.13428,0 2.7417,0.90298 4,2.25 1.23128,1.31808 2.85495,2.21875 3.9375,2.21875 1.01296,0 2.7463,0.73716 3.875,1.625 1.8763,1.47589 2.02054,1.95461 1.71875,5.59375 -0.28363,3.42026 -0.0896,4.21788 1.375,5.59375 2.02743,1.90467 3.75871,1.43946 4.78125,-1.25 0.93207,-2.45154 2.25,-1.70056 2.25,1.28125 0,1.33856 0.74533,3.19461 1.84375,4.5 1.02778,1.22145 1.875,1.8489 1.875,1.40625 0,-0.44266 0.67777,-0.78125 1.5,-0.78125 1.16275,0 1.5,-0.50589 1.5,-2.25 0,-1.23334 0.33889,-2.25 0.75,-2.25 0.41112,0 0.75,0.9949 0.75,2.21875 0,4.39441 6.85404,6.34982 7.34375,2.09375 0.31391,-2.72803 1.625,-2.65373 1.625,0.0937 0,1.4672 0.59024,2.52241 1.84375,3.34375 2.97377,1.94848 3.81724,1.53133 4.5625,-2.3125 0.83361,-4.29947 3.15637,-5.58797 7.375,-4.0625 2.00369,0.72452 2.87636,0.73296 4,0.0312 0.79122,-0.49414 2.07037,-0.65977 2.8125,-0.375 1.25285,0.48078 1.22669,0.60003 -0.28125,1.65625 -2.0005,1.4012 -2.08577,3.28482 -0.21875,5.4375 l 1.4375,1.65625 1.59375,-2.0625 c 0.99268,-1.26199 1.46312,-2.65133 1.21875,-3.625 -0.3494,-1.39205 -0.11291,-1.53717 1.84375,-1.25 1.22293,0.17949 2.21875,0.58752 2.21875,0.9375 0,0.34999 0.68146,1.01395 1.53125,1.46875 2.99255,1.60155 6.74587,-2.62911 4.40625,-4.96875 -0.53154,-0.53154 -0.0603,-0.78125 1.5,-0.78125 1.56013,0 2.26485,0.37314 2.28125,1.1875 0.0346,1.72068 1.81214,3.8125 3.25,3.8125 0.68294,0 1.66595,-0.89267 2.15625,-1.96875 0.78169,-1.71563 0.66994,-2.13737 -0.78125,-3.3125 -2.29573,-1.85896 -2.08617,-2.21875 1.25,-2.21875 1.66446,0 3.30937,-0.48111 3.84375,-1.125 0.5118,-0.61668 1.99561,-1.09375 3.3125,-1.09375 1.58751,0 2.99229,-0.63601 4.15625,-1.875 0.96555,-1.02778 2.34177,-1.875 3.0625,-1.875 0.72074,0 1.94872,-0.82511 2.75,-1.84375 1.81328,-2.30522 4.92599,-3.55216 7.375,-2.9375 1.39054,0.349 2.379,-0.0126 3.875,-1.4375 1.31,-1.24774 3.02111,-1.97012 4.96875,-2.125 2.75188,-0.21882 3.09025,-0.0625 4.3125,2.34375 0.7289,1.43495 1.16943,3.03957 0.96875,3.5625 -0.26563,0.69226 0.1741,0.82284 1.65625,0.46875 1.11961,-0.26749 2.27008,-0.61812 2.5625,-0.78125 0.99826,-0.55694 1.48112,-5.29836 0.6875,-6.78125 -0.61772,-1.15421 -0.50168,-1.7381 0.5,-2.625 1.17433,-1.03979 1.3852,-0.92477 2.5,1.40625 0.67048,1.40181 0.92458,2.74497 0.5625,2.96875 -1.38655,0.85693 -0.61696,2.5625 1.15625,2.5625 1.2288,0 2.14029,-0.67003 2.84375,-2.0625 0.57116,-1.13056 1.52247,-2.7855 2.09375,-3.6875 0.90651,-1.43133 0.86269,-1.83302 -0.25,-3.0625 -2.47537,-2.73527 -1.39163,-5.85881 2.375,-6.90625 2.15536,-0.59937 3.00694,-1.37694 4.125,-3.8125 1.34629,-2.93266 1.34864,-3.20981 0.125,-5.28125 -1.23856,-2.09674 -1.22294,-2.26228 0.375,-4.9375 1.25124,-2.09479 1.61204,-3.77306 1.5,-6.875 -0.0816,-2.26114 -0.45634,-4.45319 -0.84375,-4.84375 -0.38741,-0.39057 -0.6875,-1.16718 -0.6875,-1.75 0,-1.44719 -5.52535,-6.875 -7,-6.875 -0.65449,0 -1.69242,-0.98839 -2.3125,-2.1875 -0.73893,-1.42894 -1.96189,-2.34967 -3.5,-2.6875 -1.8331,-0.40261 -2.57573,-1.1641 -3.46875,-3.4375 -0.6288,-1.60075 -1.61143,-2.90625 -2.15625,-2.90625 -0.54483,0 -1.52738,-0.80505 -2.1875,-1.8125 -1.02825,-1.56931 -1.04053,-2.22738 -0.21875,-4.5 0.71481,-1.97662 0.72506,-2.86869 0.0937,-3.5 -1.20486,-1.20485 -3.1875,-0.23544 -3.1875,1.5625 0,0.83512 -0.28913,1.53125 -0.65625,1.53125 -1.15739,0 -1.52509,-2.06287 -1.0625,-5.96875 0.4116,-3.47533 0.33218,-3.73701 -0.96875,-3.28125 -0.77783,0.27251 -1.82596,0.96211 -2.3125,1.5625 -1.42636,1.76014 -2.50189,0.39381 -2.0625,-2.625 0.52928,-3.63626 -0.42048,-5.08388 -2.5625,-3.9375 -0.87451,0.46802 -1.59375,1.16585 -1.59375,1.5625 0,0.39665 -0.33888,0.71875 -0.75,0.71875 -1.02152,0 -0.93793,-1.93544 0.15625,-3.6875 0.74222,-1.18848 0.6767,-1.7343 -0.46875,-3 -1.68245,-1.85911 -2.49912,-1.89404 -4.28125,-0.28125 -1.30042,1.17687 -1.36264,1.08206 -1.15625,-2 0.18351,-2.74059 0.48073,-3.26998 1.90625,-3.375 0.9238,-0.0681 1.85008,0.15631 2.0625,0.5 0.86237,1.39535 3.28719,0.59397 3.75,-1.25 0.36871,-1.46908 0.69468,-1.70492 1.46875,-1.0625 0.82394,0.68381 0.76425,1.25113 -0.21875,3.3125 -1.43807,3.01567 -0.87868,4.875 1.46875,4.875 2.36127,0 3.5625,-1.35825 3.5625,-4.0625 l 0,-2.25 3.65625,3.84375 c 4.59189,4.81433 5.20209,6.53905 3.125,8.75 -0.86103,0.91652 -1.5625,2.05832 -1.5625,2.53125 0,1.16941 2.84364,2.59744 4.15625,2.09375 1.2931,-0.49622 1.42858,-4.29018 0.1875,-5.53125 -0.65347,-0.65351 -0.65705,-0.90625 -0.0312,-0.90625 0.47241,0 1.74626,1.18611 2.84375,2.625 1.09751,1.43891 2.57381,2.625 3.28125,2.625 0.70745,0 1.65396,0.84116 2.125,1.875 0.47105,1.03384 1.74782,2.26492 2.8125,2.75 2.8896,1.31661 4.2242,4.35819 3.15625,7.1875 -0.67374,1.7849 -0.67482,2.51143 0.0937,3.4375 1.31537,1.58493 2.08664,1.50681 3.09375,-0.375 0.60967,-1.13919 0.62189,-1.81561 0.0312,-2.40625 -0.44921,-0.4492 -0.8125,-1.34087 -0.8125,-1.96875 0,-0.80933 0.57906,-0.54594 2,0.875 1.77799,1.778 1.90837,2.21819 1.125,3.9375 -1.27287,2.79363 -1.09711,3.94897 0.75,4.9375 1.38682,0.74221 1.8322,0.62233 2.96875,-0.78125 1.77825,-2.19603 3.81937,-1.48317 5.96875,2.0625 0.9217,1.52045 2.45751,3.50087 3.40625,4.40625 1.10346,1.05304 1.71875,2.52328 1.71875,4.0625 0,1.32337 0.52171,2.95505 1.15625,3.65625 0.84321,0.93174 1.14605,2.9723 1.15625,7.53125 0.008,3.43084 0.3808,6.66735 0.8125,7.1875 0.43173,0.52012 0.56891,1.48804 0.3125,2.15625 -0.37156,0.96824 -0.70038,1.028 -1.5625,0.3125 -0.66604,-0.55276 -1.94905,-0.71943 -3.375,-0.40625 -1.8275,0.4014 -2.27511,0.85223 -2.09375,2.125 0.19555,1.37248 0.64636,1.59277 3.03125,1.40625 2.74686,-0.21482 2.8125,-0.15657 2.8125,2.40625 0,1.55708 -0.76246,3.70432 -1.875,5.34375 -1.02778,1.51452 -1.875,3.18825 -1.875,3.6875 0,0.49929 -0.84116,1.82195 -1.875,2.9375 -1.03386,1.11555 -2.34065,3.11504 -2.90625,4.46875 -0.81949,1.9613 -1.82007,2.75398 -4.9375,3.875 -2.15168,0.77373 -4.08284,1.82667 -4.28125,2.34375 -0.19842,0.51708 -0.81259,0.9375 -1.375,0.9375 -0.73734,0 -0.91686,-0.63439 -0.59375,-2.25 0.80524,-4.02618 -2.63221,-5.96169 -5.3125,-3 -1.7181,1.89848 -1.01822,3.5498 2.03125,4.875 l 2.4375,1.0625 -3.0625,0.0312 c -2.15979,0.0206 -3.46188,-0.42195 -4.4375,-1.5 -2.90815,-3.21346 -6.62816,-0.32444 -5.03125,3.90625 1.20881,3.20251 0.62225,3.54745 -1.90625,1.125 -2.36371,-2.26459 -4.0219,-2.54302 -5.40625,-0.875 -0.73226,0.88246 -0.7555,1.57889 -0.0937,3.03125 0.47155,1.03496 0.875,2.20196 0.875,2.59375 0,1.40285 -2.43256,0.67752 -3.875,-1.15625 -1.58893,-2.02 -3.50978,-2.39648 -4.9375,-0.96875 -1.12643,1.12641 -1.15922,3.77826 -0.0625,4.875 0.61101,0.61101 0.15863,1.44655 -1.6875,3.125 -2.46832,2.24415 -4.40625,2.96036 -4.40625,1.65625 0,-0.36316 0.67779,-0.81623 1.5,-1.03125 2.66211,-0.69616 1.40873,-6.53125 -1.40625,-6.53125 -2.42321,0 -3.49411,2.0405 -2.46875,4.75 0.76877,2.03143 0.71573,2.48004 -0.375,3.28125 -0.69971,0.51396 -1.339,1.48593 -1.4375,2.15625 -0.3139,2.13951 -1.51779,2.64252 -4.96875,2.125 -3.13927,-0.47076 -3.39969,-0.68924 -4.3125,-3.59375 -1.33816,-4.25792 -1.45838,-4.41102 -2.59375,-3.46875 -0.58888,0.48872 -2.05941,0.63159 -3.59375,0.34375 -2.20564,-0.41378 -2.67707,-0.25031 -3.09375,1.0625 -0.27018,0.85127 -1.05533,1.4935 -1.75,1.4375 -4.10424,-0.33028 -4.54492,0.0112 -4.78125,3.6875 -0.17588,2.736 -0.53596,3.58025 -1.59375,3.78125 -1.16198,0.22079 -1.24903,0.0328 -0.5625,-1.25 2.08169,-3.88968 0.21064,-6.58047 -3.5625,-5.15625 -1.70934,0.64519 -2.375,1.36522 -2.375,2.59375 0,0.93765 0.32037,1.71878 0.6875,1.71875 0.36713,0 0.85711,0.50832 1.09375,1.125 0.89691,2.33729 -1.00322,0.98618 -2.59375,-1.84375 l -1.6562,-2.96855 -2.03125,1.46875 c -1.12233,0.79916 -2.27216,2.28016 -2.53125,3.3125 -0.59608,2.37499 -1.76862,2.42841 -2.65625,0.0937 -0.72506,-1.90706 -3.17142,-3.14098 -4.5625,-2.28125 -0.45539,0.28144 -1.2643,1.52057 -1.78125,2.75 l -0.9375,2.25 -2.6875,-2.71875 c -2.98423,-2.98423 -3.39673,-3.10516 -5.25,-1.75 -0.70344,0.51437 -1.52925,1.88653 -1.84375,3.0625 -0.47162,1.76346 -0.71421,1.96525 -1.4375,1.09375 -0.48237,-0.58117 -0.70562,-1.81295 -0.46875,-2.71875 0.53631,-2.05088 -0.88259,-3.875 -3.03125,-3.875 -2.22581,0 -3.4375,1.36851 -3.4375,3.9375 0,3.17334 -1.81188,2.14708 -2.09375,-1.1875 -0.40805,-4.82768 -5.42576,-5.3724 -6.59375,-0.71875 l -0.5,1.96875 -1.375,-1.7187 c -0.75992,-0.93846 -1.375,-2.28703 -1.375,-3 0,-1.61153 -2.3134,-3.75 -4.03125,-3.75 -0.72803,0 -1.70103,0.97564 -2.25,2.28125 -0.87967,2.09213 -1.09372,2.21877 -2.15625,1.15625 -0.64385,-0.64384 -0.98717,-1.83757 -0.78125,-2.625 0.51156,-1.95621 -1.00702,-4.5625 -2.65625,-4.5625 -1.47865,0 -3.84375,2.19915 -3.84375,3.59375 0,1.23399 -1.13415,1.1009 -2.28125,-0.28125 -0.78347,-0.94405 -0.77867,-1.65182 -0.0312,-3.71875 0.97652,-2.70051 0.76495,-3.43441 -1.65625,-6.125 -1.37445,-1.52736 -1.57149,-1.54785 -2.40625,-0.40625 -0.83299,1.13918 -0.93339,1.11015 -1.375,-0.28125 -0.26556,-0.83669 -1.41683,-1.92974 -2.53125,-2.4375 -1.8399,-0.83831 -2.1744,-0.73801 -3.75,1.09375 -2.07835,2.41621 -2.7742,1.95133 -2.53125,-1.65625 0.18556,-2.75522 -1.46709,-5.46875 -3.3125,-5.46875 -0.52315,0 -1.79073,1.07015 -2.84375,2.40625 -1.73922,2.20679 -1.9295,2.27708 -1.9375,0.78125 -0.005,-0.90566 0.3722,-2.46504 0.84375,-3.5 1.56532,-3.43549 -1.82519,-5.55612 -4.71875,-2.9375 -1.89177,1.71203 -3.36603,0.35013 -2.125,-1.96875 0.6959,-1.30032 0.64079,-1.98258 -0.3125,-3.4375 -1.1821,-1.80412 -4.906247,-2.60795 -4.906247,-1.0625 0,1.0175 -1.75078,0.93672 -2.8125,-0.125 -0.654388,-0.65439 -0.48901,-1.39162 0.65625,-3 3.014585,-4.23359 -1.008658,-7.88234 -4.375,-3.96875 -1.316768,1.53084 -2.000399,1.84336 -2.625,1.21875 -0.624609,-0.62461 -0.315133,-1.42886 1.25,-3.0625 2.217604,-2.31469 2.219936,-4.16739 -0.03125,-5.03125 -0.832759,-0.31956 -1.858935,0.17345 -3,1.5 -1.706392,1.98382 -1.701308,1.98827 -2.53125,0.4375 -0.665077,-1.24271 -0.579706,-1.84803 0.40625,-2.9375 1.827034,-2.01885 1.164474,-4.78855 -1.1875,-5.0625 -1.411078,-0.16436 -2.153382,0.28076 -2.90625,1.6875 -1.292684,2.41515 -2.111512,2.38818 -2.71875,-0.0312 -0.343436,-1.36835 -0.03843,-2.35607 1.0625,-3.53125 1.762766,-1.88164 1.024756,-4.25 -1.3125,-4.25 -2.335931,0 -3.429439,-2.01083 -2.28125,-4.15625 0.759416,-1.41896 0.784994,-2.23896 0.125,-3.6875 -0.934163,-2.05026 -2.361523,-2.37454 -4.5625,-1 -1.116847,0.69741 -1.698104,0.67551 -2.625,-0.0937 -1.736769,-1.44138 -1.443959,-2.12326 1.125,-2.6875 2.548907,-0.55984 3.552994,-2.20033 2.4375,-3.96875 -1.186744,-1.88145 -2.319752,-1.83649 -4.28125,0.125 l -1.875,1.84375 -0.71875,-2.15625 c -0.62248,-1.78565 -0.536524,-2.31144 0.625,-3.125 0.769494,-0.53896 1.627111,-1.88782 1.90625,-3 0.449684,-1.79169 0.302687,-2.03125 -1.34375,-2.03125 -2.341592,0 -3.788849,1.72563 -3.15625,3.71875 0.28843,0.90877 0.143816,1.53125 -0.34375,1.53125 -0.985409,0 -1.294677,-0.85877 -1.78125,-5.09375 -0.330878,-2.8799 -0.175343,-3.29305 1.4375,-3.90625 1.248957,-0.47486 1.8125,-1.28674 1.8125,-2.59375 0,-1.59857 -0.350527,-1.875 -2.25,-1.875 -1.744125,0 -2.25,0.33725 -2.25,1.5 0,0.82221 -0.356821,1.5 -0.8125,1.5 -0.516949,0 -0.645187,-0.73647 -0.34375,-1.9375 0.33736,-1.34413 -0.143183,-3.16647 -1.59375,-6.03125 l -2.09375,-4.09375 1.875,-1.4375 c 1.449334,-1.12218 1.621877,-1.58735 0.84375,-2.09375 -0.549868,-0.35786 -0.88875,-1.4562 -0.75,-2.4375 0.228923,-1.61908 0.584095,-1.7693 3.84375,-1.65625 3.870591,0.13424 4.734355,-1.43662 1.03125,-1.875 -2.508655,-0.29698 -2.561374,-1.38991 -0.125,-2.5 2.104371,-0.95882 2.564448,-3.59375 0.625,-3.59375 -0.687076,0 -1.870659,0.53608 -2.625,1.21875 -1.919498,1.73712 -2.65514,0.61686 -1.1875,-1.8125 0.815799,-1.35038 2.032827,-2.15512 3.6875,-2.40625 2.309979,-0.35058 2.48069,-0.57381 2.40625,-3.125 -0.06079,-2.08265 0.257769,-2.81793 1.3125,-3.09375 1.622436,-0.42427 1.975137,-4.86861 0.5,-6.34375 -0.697653,-0.69764 -0.4555,-0.90625 1.09375,-0.90625 2.198284,0 3.53125,-1.78582 3.53125,-4.71875 0,-1.18781 0.52085,-1.97087 1.46875,-2.21875 0.810395,-0.21193 1.677794,-1.30947 1.96875,-2.46875 0.416847,-1.66085 0.218367,-2.30578 -1.0625,-3.15625 -0.886428,-0.58856 -1.625,-1.35778 -1.625,-1.71875 0,-1.08144 2.749154,-0.73719 3.75,0.46875 2.514081,3.02928 4.072725,-0.87537 2.09375,-5.21875 -0.653515,-1.43429 -0.633713,-2.59142 0,-4.65625 0.582979,-1.89956 0.595625,-3.04512 0.0625,-3.6875 -0.946854,-1.14088 -0.596789,-5.875 0.4375,-5.875 0.411113,0 0.870336,0.93639 1,2.0625 0.12965,1.12608 0.958824,2.53643 1.84375,3.15625 1.461743,1.02384 1.745017,1.01133 3.125,-0.3125 5.323684,-5.10701 5.971078,-5.41235 6.59375,-3.03125 0.532677,2.03696 4.25,2.1193 4.25,0.0937 0,-1.93372 -1.595052,-3.10825 -3.5625,-2.59375 -2.281069,0.59652 -2.111809,-1.06313 0.21875,-2.125 1.410988,-0.64293 2.336662,-0.64119 3.8125,0.0312 3.069967,1.39877 6.666317,-0.23712 5.749997,-2.625 -0.52166,-1.35944 -3.992623,-1.27165 -6.031247,0.15625 -1.273819,0.89221 -1.6796,0.93643 -1.6875,0.1875 -0.0056,-0.5372 -0.169712,-1.64652 -0.375,-2.46875 -0.541159,-2.16748 0.732449,-3.8851 2.0625,-2.78125 1.354867,1.12443 5.356177,0.0573 5.656247,-1.5 0.12331,-0.63999 -0.31122,-1.68622 -0.96875,-2.34375 -1.509544,-1.50955 -0.892197,-6.04087 0.6875,-6.3125 z M 79.664613,83.9275 c -2.308465,0 -2.895639,1.26061 -1.3125,2.84375 1.268564,1.26856 3.33612,1.12305 3.875,-0.28125 0.676424,-1.76272 -0.09983,-2.5625 -2.5625,-2.5625 z m 497.374997,0.75 c 2.08165,0 3.16048,1.95749 1.90625,3.46875 -1.1328,1.36495 -3.61777,1.30949 -4.15625,-0.0937 -0.70606,-1.83999 0.31726,-3.375 2.25,-3.375 z m 66.25,0 c -0.41112,0 -0.75,1.01666 -0.75,2.25 0,1.23334 0.33888,2.25 0.75,2.25 0.41111,0 0.75,-1.01666 0.75,-2.25 0,-1.23334 -0.33889,-2.25 -0.75,-2.25 z m -428.3125,0.15625 c -0.46201,0.003 -0.71875,0.61414 -0.71875,1.71875 0,1.26241 0.34573,1.88475 0.9375,1.6875 0.51389,-0.1713 0.90625,-0.93379 0.90625,-1.6875 0,-0.75371 -0.39236,-1.5162 -0.90625,-1.6875 -0.074,-0.0247 -0.15275,-0.0317 -0.21875,-0.0312 z m -44.09375,0.21875 c -1.52151,0 -1.66812,1.55062 -0.28125,2.9375 0.90777,0.90777 1.47268,1.05857 2.0625,0.46875 0.98992,-0.98992 -0.27007,-3.40625 -1.78125,-3.40625 z m 36.625,0.375 c -0.41112,0 -0.75,0.50833 -0.75,1.125 0,0.61667 0.33888,1.125 0.75,1.125 0.41111,0 0.75,-0.50833 0.75,-1.125 0,-0.61667 -0.33889,-1.125 -0.75,-1.125 z M 71.602113,87.115 c -0.20418,0.0195 -0.417931,0.0448 -0.625,0.125 -1.294756,0.50174 -1.292967,0.57321 0.09375,1.59375 0.97348,0.71642 1.685448,0.8458 2.1875,0.34375 0.965174,-0.96517 -0.226989,-2.19874 -1.65625,-2.0625 z m 106.406247,1.4375 c -0.0976,-0.002 -0.21147,0.0103 -0.3125,0.0312 -0.62863,0.13028 -1.32471,0.69346 -1.875,1.6875 -0.45518,0.82223 -1.13175,1.73315 -1.5,2 -0.3682,0.26684 -0.45181,0.9864 -0.21875,1.59375 0.27799,0.72437 1.06295,0.95761 2.3125,0.71875 2.60113,-0.49724 3.70537,-2.03139 3.125,-4.34375 -0.27825,-1.10863 -0.84811,-1.67583 -1.53125,-1.6875 z m 461.09375,0.625 c -0.34419,0 0.27733,4.61908 0.875,6.53125 0.46025,1.47251 1.59792,1.08904 2.0625,-0.6875 0.37194,-1.42231 -1.84902,-5.84375 -2.9375,-5.84375 z m -440.15625,1 c -0.78822,0.027 -1.37765,1.78388 -0.875,3.09375 0.23664,0.61667 0.76346,1.125 1.1875,1.125 0.99314,0 1.02176,-3.51283 0.0312,-4.125 -0.11826,-0.0731 -0.23115,-0.0976 -0.34375,-0.0937 z m -83.6875,1.21875 c -3.79662,0 -5.26602,1.60898 -3.28125,3.59375 1.34685,1.34685 3.44043,1.09822 4.3125,-0.53125 1.20074,-2.2436 0.93268,-3.0625 -1.03125,-3.0625 z m 97.125,1.125 c -0.39986,0 -0.83011,0.59305 -0.96875,1.3125 -0.15756,0.81819 0.19888,1.3125 0.96875,1.3125 0.76987,0 1.12632,-0.49431 0.96875,-1.3125 -0.13856,-0.71945 -0.56889,-1.3125 -0.96875,-1.3125 z m 344.15625,1.125 c -0.84928,0 -2.1875,1.84842 -2.1875,3 0,1.15158 1.33822,2.96875 2.1875,2.96875 0.22613,0 0.4375,-1.32429 0.4375,-2.96875 0,-1.64445 -0.21137,-3 -0.4375,-3 z m -316.53125,1.0625 c -0.20245,0.0158 -0.41825,0.0457 -0.625,0.125 -1.2022,0.46132 -1.68271,3.31729 -0.71875,4.28125 0.27407,0.27408 1.29073,0.5 2.25,0.5 1.33812,0 1.75,-0.38652 1.75,-1.75 0,-1.88988 -1.23911,-3.26688 -2.65625,-3.15625 z M 69.258363,95.99 c -0.364605,0.0525 -0.829708,0.29532 -1.5625,0.6875 -1.41252,0.75596 -1.931371,2.94363 -0.9375,3.9375 0.858945,0.85895 3.008405,0.55699 3.9375,-0.5625 0.661301,-0.79679 0.675352,-1.47987 0.0625,-2.625 -0.593521,-1.109 -0.892325,-1.52505 -1.5,-1.4375 z m 494.062497,0.65625 c -0.41111,0 -0.75,0.14057 -0.75,0.3125 0,0.17193 -0.18796,0.84971 -0.4375,1.5 -0.29773,0.77587 -0.0695,1.15625 0.71875,1.15625 0.70286,0 1.21875,-0.59398 1.21875,-1.46875 0,-0.82223 -0.33888,-1.5 -0.75,-1.5 z m 82.5,1.0625 c -0.2771,-0.006 -0.62734,-0.003 -1.0625,0.0312 -3.16312,0.24883 -4.47457,2.37609 -2.0625,3.34375 2.50204,1.00374 2.84375,0.93301 2.84375,-0.5625 0,-0.74001 0.36403,-1.70778 0.8125,-2.15625 0.44167,-0.44167 0.30006,-0.63752 -0.53125,-0.65625 z m -32.4375,1.34375 c -0.60146,0.14493 -1.18133,1.02386 -1.34375,2.40625 -0.14862,1.26498 -0.78369,2.21749 -1.625,2.4375 -0.84712,0.22152 -1.22633,0.79747 -0.96875,1.46875 0.29854,0.77797 0.65343,0.84656 1.21875,0.28125 1.11793,-1.11793 3.89962,-0.99416 4.90625,0.21875 0.48497,0.58436 1.63233,0.86393 2.71875,0.65625 2.02375,-0.38686 4.84375,1.54125 4.84375,3.3125 0,0.55295 0.30763,1 0.71875,1 0.41111,0 0.75,-0.84721 0.75,-1.875 0,-1.02778 -0.33889,-1.84375 -0.75,-1.84375 -1.26208,0 -0.82759,-2.1724 0.75,-3.75 1.88049,-1.88049 1.90486,-2.45975 0.0625,-1.875 -0.94754,0.30074 -1.68423,-0.0238 -2.1875,-0.90625 -0.67606,-1.18561 -0.86545,-1.0543 -1.625,1.09375 -0.47243,1.33612 -1.24507,2.41539 -1.71875,2.40625 -1.26122,-0.0244 -3.94238,-2.38521 -4.5,-3.96875 -0.3016,-0.85652 -0.7822,-1.17522 -1.25,-1.0625 z m -502.3125,0.71875 c 0.0635,0.001 0.14927,0.008 0.21875,0.0312 0.51389,0.1713 0.9375,0.76435 0.9375,1.3125 0,0.54815 -0.42361,1.1412 -0.9375,1.3125 -0.55582,0.18527 -0.9375,-0.34908 -0.9375,-1.3125 0,-0.84299 0.27394,-1.35326 0.71875,-1.34375 z m 76.25,0.6875 c -0.63775,-0.0974 -1.3949,0.29755 -2.34375,1.15625 -1.58818,1.43729 -1.72747,2.58502 -0.46875,3.84375 2.39362,2.39362 5.85181,-0.14596 4.4375,-3.25 -0.49146,-1.07864 -0.98725,-1.65261 -1.625,-1.75 z m -125.124997,0.4375 c -0.313637,-0.008 -0.638717,0.0958 -0.9375,0.34375 -1.210304,1.00446 -1.272939,2.28956 -0.15625,3.40625 1.116152,1.11614 2.90625,0.36619 2.90625,-1.21875 0,-1.4624 -0.87159,-2.50824 -1.8125,-2.53125 z M 651.53961,101.865 c -0.83277,0 -1.5,0.38471 -1.5,0.84375 0,0.4872 -0.78416,0.67727 -1.875,0.46875 -2.59102,-0.49531 -2.43155,1.20232 0.3125,3.15625 1.20903,0.8609 2.42993,2.2197 2.6875,3.03125 0.51588,1.6254 1.4801,1.90197 2.25,0.65625 0.27354,-0.4426 -0.19501,-1.44181 -1.0625,-2.25 -1.47713,-1.37615 -1.50814,-1.61709 -0.4375,-3.6875 1.0849,-2.09797 1.06195,-2.21875 -0.375,-2.21875 z m -47.1875,0.0625 c -0.40514,0.0136 -0.65625,0.37264 -0.65625,1.09375 0,0.63113 -0.52539,1.94343 -1.15625,2.90625 -1.76407,2.69232 -0.17791,5.65625 3.03125,5.65625 1.32256,0 2.79211,-0.44828 3.25,-1 1.12556,-1.3562 0.26545,-2.06847 -1.875,-1.53125 -1.97534,0.49578 -2.37128,-0.9106 -0.96875,-3.53125 0.58195,-1.08738 0.55491,-1.78101 -0.0937,-2.5625 -0.58222,-0.70153 -1.12611,-1.04488 -1.53125,-1.03125 z m 25.1875,0.8125 c -0.42075,0.10909 -0.45108,0.66689 -0.25,1.71875 0.22923,1.19919 -0.13172,2.31089 -1.03125,3.125 -1.78326,1.61381 -1.78971,2.9942 0.0312,3.96875 1.84569,0.98777 2.52125,0.99507 1.90625,0 -0.68646,-1.11071 1.75319,-5.9375 3,-5.9375 1.63649,0 2.16724,2.9093 0.8125,4.40625 -1.61877,1.78874 -1.48343,2.95642 0.5,4.5625 2.08156,1.68555 3.07591,1.17854 2.59375,-1.34375 -0.45198,-2.36439 1.61305,-5.99712 2.5625,-4.5 0.34146,0.53843 0.61871,1.75949 0.625,2.71875 0.007,1.05799 0.40198,1.62445 0.96875,1.4375 1.20221,-0.39653 2.74501,-3.49789 2.3125,-4.625 -0.57631,-1.50183 -4.52321,-3.40994 -7.125,-3.4375 -1.37546,-0.0146 -3.31596,-0.50622 -4.34375,-1.09375 -1.32864,-0.75952 -2.14175,-1.10909 -2.5625,-1 z m -83.3125,1.15625 c -0.2875,0.031 -0.52843,0.22662 -0.78125,0.53125 -0.61516,0.74121 -0.53046,1.20664 0.3125,1.90625 1.47806,1.22667 1.42937,4.4275 -0.0625,5 -0.64288,0.24671 -2.01529,0.0709 -3.0625,-0.40625 -1.48003,-0.67435 -1.83695,-1.28309 -1.5625,-2.71875 0.46982,-2.4577 0.10424,-2.33136 -1.34375,0.46875 -1.14271,2.20976 -1.10197,2.39055 0.46875,4.0625 2.22248,2.36573 1.43522,4.09375 -1.84375,4.09375 -1.41754,0 -2.71429,-0.42361 -2.90625,-0.9375 -0.23382,-0.62599 -0.53419,-0.49562 -0.90625,0.40625 -0.3754,0.90998 -0.0263,1.90353 1.0625,3.0625 2.87425,3.05949 0.12985,5.48488 -3.8125,3.375 -2.44177,-1.30679 -3.1369,0.27374 -1,2.28125 2.26812,2.13079 2.36581,3.44423 0.375,4.6875 -2.38082,1.48685 -1.74325,2.50817 1.53125,2.46875 2.34177,-0.0282 2.96659,-0.28846 2.6875,-1.15625 -1.3493,-4.19539 -1.37782,-4.16174 1.28125,-5.59375 2.17588,-1.17178 2.82933,-1.25346 3.8125,-0.4375 0.6482,0.53796 1.15625,1.95491 1.15625,3.125 0,1.58398 0.29021,2.00784 1.125,1.6875 1.7974,-0.68973 1.31937,-3.01114 -1.25,-5.9375 l -2.40625,-2.71875 4.9375,-4.59375 c 2.70652,-2.52781 5.3232,-5.38353 5.8125,-6.34375 0.48931,-0.96021 1.08388,-1.54112 1.3125,-1.3125 0.68113,0.68113 4.6875,-2.55406 4.6875,-3.78125 0,-0.62294 -0.25416,-0.99398 -0.5625,-0.84375 -0.30834,0.15023 -1.48496,0.74149 -2.625,1.3125 -1.87213,0.93769 -2.30183,0.87784 -4.25,-0.5625 -1.10177,-0.81459 -1.70834,-1.17662 -2.1875,-1.125 z m -494.906247,1.65625 -0.46875,2.96875 c -0.439376,2.74771 -0.322797,3.03588 1.84375,4.15625 2.685343,1.38864 2.944807,2.28399 0.90625,3.375 -1.932302,1.03414 -3.04224,0.98049 -3.0625,-0.15625 -0.0091,-0.51389 -0.696054,-1.78471 -1.5,-2.8125 -2.003111,-2.56083 -1.844838,-4.80628 0.40625,-6.28125 l 1.875,-1.25 z m 544.281247,0.0937 c -0.10395,0.0135 -0.12002,0.28323 -0.125,0.8125 -0.006,0.66911 -0.55137,1.62831 -1.1875,2.15625 -0.9238,0.7667 -0.9308,1.10242 -0.15625,1.59375 1.72128,1.09188 2.82423,0.6606 2.8125,-1.0625 -0.006,-0.925 -0.35147,-2.16458 -0.75,-2.78125 -0.31523,-0.48778 -0.4898,-0.73222 -0.59375,-0.71875 z m -508.062497,1.90625 c -0.50971,-0.02 -0.881802,0.38381 -1.53125,1.375 -0.660456,1.00798 -0.984008,2.19581 -0.71875,2.625 1.00311,1.62306 4.875,0.55939 4.875,-1.34375 0,-0.67935 -0.654872,-1.67922 -1.46875,-2.1875 -0.480193,-0.29988 -0.850424,-0.45674 -1.15625,-0.46875 z m 112.749997,1.9375 c -1.40629,0.24374 -3.51206,4.03395 -2.9375,5.53125 0.65638,1.71049 3.31368,1.19046 4.6875,-0.90625 1.39348,-2.1267 0.73154,-4.19162 -1.46875,-4.625 -0.0865,-0.017 -0.1875,-0.0162 -0.28125,0 z m 446.46875,0.21875 -0.28125,2.0625 c -0.15357,1.13073 -0.93835,2.39484 -1.71875,2.8125 -0.78041,0.41766 -1.80562,2.15192 -2.3125,3.84375 -0.88373,2.94965 -0.84859,3.14614 1.125,4.84375 2.35477,2.02549 5.38625,2.28999 7.71875,0.65625 1.23291,-0.86356 2.09992,-0.96671 3.65625,-0.375 1.53983,0.58545 2.39716,0.51249 3.65625,-0.3125 0.9111,-0.59698 2.82145,-1.17911 4.21875,-1.3125 1.77846,-0.16977 2.76472,-0.76017 3.28125,-1.9375 0.83176,-1.89588 1.94192,-2.09384 4.09375,-0.75 1.21901,0.76128 1.71062,0.69563 2.78125,-0.375 1.22631,-1.22631 1.18052,-1.28125 -0.65625,-1.28125 -3.00037,0 -4.06602,-1.79746 -2.5,-4.1875 0.85319,-1.30215 1.03002,-2.21998 0.53125,-2.71875 -0.49878,-0.49878 -1.06813,-0.144 -1.6875,1.03125 -1.84182,3.49487 -2.93767,3.57999 -6.0625,0.59375 -2.70007,-2.58033 -3.86697,-2.51498 -4.1875,0.15625 -0.30605,2.55046 -5.15648,4.47386 -6.53125,2.59375 -0.48896,-0.66869 -1.47195,-1.21875 -2.15625,-1.21875 -0.6843,0 -1.61351,-0.93194 -2.09375,-2.0625 l -0.875,-2.0625 z m -58.28125,0.4375 c -0.0544,0.0143 -0.087,0.0558 -0.125,0.0937 -0.13206,0.13212 -0.49183,1.15931 -0.78125,2.3125 -0.49288,1.9638 -0.38617,2.08999 1.625,1.875 1.94941,-0.20839 2.1865,0.0115 2.40625,2.3125 0.22488,2.35447 0.32363,2.45762 1.46875,1.3125 1.14512,-1.14512 1.13182,-1.41167 -0.0937,-3.6875 -1.11518,-2.07076 -3.68373,-4.43349 -4.5,-4.21875 z m -354.03125,0.3125 c -1.20473,0 -1.95471,0.49076 -2.125,1.375 -0.21241,1.10297 0.12863,1.32136 1.84375,1.125 2.69233,-0.30824 2.94099,-2.5 0.28125,-2.5 z m -189.406247,0.375 c 0.594074,0.006 1.08972,0.57987 1,1.6875 -0.240764,2.97235 -0.01108,3.5625 1.46875,3.5625 1.970834,0 2.449347,0.9848 1.25,2.625 -0.958658,1.31104 -1.090366,1.30796 -3.03125,-0.21875 -1.678017,-1.31992 -2.302068,-1.4382 -3.8125,-0.75 -2.208085,1.00607 -2.359366,2.86339 -0.34375,4.6875 1.237759,1.12015 1.83345,1.20238 3.375,0.5 1.825444,-0.83172 1.875,-0.77313 1.875,2.25 0,2.94594 -0.07167,3.02324 -1.375,1.84375 -0.751823,-0.68039 -2.446252,-1.21875 -3.75,-1.21875 -1.934455,0 -2.375,0.30054 -2.375,1.625 0,0.89263 0.567334,2.21441 1.25,2.96875 1.647027,1.81994 0.754271,2.59553 -1.71875,1.46875 -2.520702,-1.14845 -3.73798,-0.1298 -2.53125,2.125 0.712229,1.33082 1.279673,1.53717 3.15625,1.125 l 2.3125,-0.53125 -0.5,2.90625 c -0.581747,3.38502 -2.714543,8.62125 -3.8125,9.40625 -2.187717,1.56412 -7.022607,-1.37012 -8.28125,-5.03125 -0.892019,-2.59472 -0.828737,-3.09007 0.53125,-5 0.826668,-1.16094 1.804379,-2.09375 2.1875,-2.09375 0.383121,0 0.6875,-0.80208 0.6875,-1.75 0,-0.94791 0.847216,-2.85691 1.875,-4.25 1.027784,-1.39308 1.875,-3.08923 1.875,-3.78125 0,-0.69202 0.487956,-1.68473 1.09375,-2.1875 0.605788,-0.50277 1.330203,-2.06395 1.59375,-3.46875 0.263539,-1.4048 1.230945,-3.14715 2.15625,-3.875 0.925312,-0.72785 1.898868,-2.05936 2.1875,-2.96875 0.350654,-1.10481 1.062176,-1.66265 1.65625,-1.65625 z m 163.124997,0.40625 c -1.29109,-9.2e-4 -2.27545,1.68819 -1.75,3.34375 0.29638,0.93378 0.98029,1.48368 1.71875,1.34375 1.61581,-0.30618 2.09524,-3.98632 0.59375,-4.5625 -0.19261,-0.0739 -0.37806,-0.12487 -0.5625,-0.125 z M 95.383363,111.5837 c -1.40719,0 -2.015615,1.45315 -1.03125,2.4375 0.727401,0.72741 2.53125,-0.27873 2.53125,-1.40625 0,-0.57268 -0.677773,-1.03125 -1.5,-1.03125 z m -31.46875,0.0625 c 0.375655,-0.0554 0.476689,0.83334 0.09375,2.53125 -0.410434,1.81981 -0.260098,3.00856 0.5,4.09375 1.148069,1.6391 1.092025,1.84398 -0.21875,0.96875 -1.837955,-1.22723 -2.557472,-3.77203 -1.65625,-5.75 0.547321,-1.20123 0.989074,-1.80066 1.28125,-1.84375 z m 17.78125,1.4375 c -1.544405,0 -3.721826,2.78275 -3.21875,4.09375 0.578115,1.50654 1.425969,1.42945 3.5,-0.25 1.796113,-1.4544 1.619128,-3.84375 -0.28125,-3.84375 z m 503.624997,2.25 c -0.64092,0 -0.94572,0.33218 -0.6875,0.75 0.42666,0.69036 1.84375,0.35145 1.84375,-0.4375 0,-0.18129 -0.51531,-0.3125 -1.15625,-0.3125 z m 76.78125,0.0312 c 0.8732,-0.11391 2.23249,0.28332 3.28125,1.09375 1.43629,1.10989 1.43629,1.10886 0,2.21875 -1.89972,1.46801 -2.44391,1.42725 -3.375,-0.3125 -0.42557,-0.7952 -0.78125,-1.81186 -0.78125,-2.25 0,-0.4371 0.35108,-0.68165 0.875,-0.75 z m 12.875,0.25 c -0.16547,0.0205 -0.28125,0.12623 -0.28125,0.3125 0,1.19102 3.25283,2.26149 4.65625,1.53125 0.71945,-0.37435 1.3125,-0.86487 1.3125,-1.0625 0,-0.19762 -0.92017,-0.27454 -2.0625,-0.1875 -1.14232,0.087 -2.49787,-0.0959 -3,-0.40625 -0.25106,-0.15516 -0.45953,-0.208 -0.625,-0.1875 z m -438.25,0.0937 c -0.55361,0.0616 -1.10854,0.34808 -1.65625,0.84375 -1.34813,1.22004 -1.91102,4.74523 -0.90625,5.75 0.89739,0.89738 3.06063,0.53016 4.71875,-0.8125 1.356,-1.09802 1.49121,-1.66052 0.875,-3.28125 -0.66878,-1.75903 -1.81331,-2.63559 -3.03125,-2.5 z m 420.6875,0.65625 c 1.16051,-0.0375 1.73666,0.99318 1.21875,2.625 -0.47653,1.50143 -2.57386,2.11366 -3.625,1.0625 -0.96652,-0.96651 -0.46332,-2.44793 1.09375,-3.28125 0.4955,-0.26518 0.92566,-0.39375 1.3125,-0.40625 z m -600.281247,0.5 c 0.06038,0.0557 -0.123758,0.45412 -0.53125,1.25 -1.000531,1.95417 -0.217745,3.99027 2.25,5.71875 0.864137,0.60526 1.460375,1.4313 1.3125,1.84375 -0.430397,1.2005 -3.227172,-1.50624 -4.34375,-4.21875 -0.909743,-2.21004 -0.864167,-2.62738 0.3125,-3.75 0.624455,-0.59577 0.93962,-0.89944 1,-0.84375 z m 589.593747,0 c 1.00028,-0.0841 1.8125,0.29999 1.8125,1.0625 0,1.80411 -2.67524,2.80783 -3.8125,1.4375 -0.79366,-0.95629 -0.75782,-1.28513 0.125,-1.84375 0.61885,-0.39159 1.27483,-0.6058 1.875,-0.65625 z m -60.53125,0.71875 c -0.33761,0.10292 -0.16365,0.5553 0.46875,1.28125 0.62674,0.71945 0.96742,1.73611 0.78125,2.25 -0.18618,0.51389 0.0234,0.9375 0.46875,0.9375 0.44536,0 0.8125,-0.14057 0.8125,-0.3125 0,-0.17193 0.21921,-0.84971 0.46875,-1.5 0.29773,-0.77588 0.0383,-1.1875 -0.75,-1.1875 -0.66066,0 -1.21875,-0.33889 -1.21875,-0.75 0,-0.41111 -0.36892,-0.71875 -0.84375,-0.71875 -0.0684,0 -0.13927,-0.0147 -0.1875,0 z m -39.75,0.25 c -0.0716,-0.006 -0.12714,0.007 -0.15625,0.0312 -0.0388,0.0328 -0.048,0.10016 0,0.1875 0.19179,0.34935 0.57771,1.2545 0.84375,2 0.46833,1.31235 1.96875,1.12169 1.96875,-0.25 0,-0.37239 -0.69066,-1.06466 -1.5625,-1.53125 -0.49041,-0.26246 -0.87906,-0.41912 -1.09375,-0.4375 z m 25.40625,0.78135 c -0.11772,-0.003 -0.23525,0.0267 -0.34375,0.0937 -0.54188,0.3349 -0.51765,0.82581 0.0937,1.5625 1.08611,1.30869 1.78726,0.80062 1.15625,-0.84375 -0.19008,-0.49534 -0.5531,-0.80443 -0.90625,-0.8125 z m -3.6875,0.0312 c -0.23709,0.0489 -0.54652,0.21788 -0.90625,0.5 -1.87046,1.46692 -2.41354,2.36668 -1.90625,3.1875 0.47255,0.76459 3.1875,-2.16464 3.1875,-3.4375 0,-0.20795 -0.13791,-0.29888 -0.375,-0.25 z M 85.477113,120.0837 c -1.413355,0.007 -2.78125,1.49142 -2.78125,3.5 0,2.38727 1.175349,2.83214 3.78125,1.4375 1.702931,-0.91138 1.894836,-3.17615 0.375,-4.4375 -0.433172,-0.3595 -0.903882,-0.50242 -1.375,-0.5 z m 160.781247,0.75 c -0.28344,1e-5 -0.59514,0.0369 -0.90625,0.15625 -1.54758,0.59388 -1.53853,2.11772 0,3.65625 0.92682,0.92681 1.44546,1.01145 2.25,0.34375 1.80635,-1.49915 0.64036,-4.1563 -1.34375,-4.15625 z m -48.34375,0.46875 c -2.81746,0 -3.37637,0.716 -1.875,2.375 1.45576,1.6086 1.88989,1.6726 3.09375,0.46875 1.56008,-1.56009 1.01191,-2.84375 -1.21875,-2.84375 z m 381.9375,1.625 c 0.14679,-0.005 0.31071,0.0122 0.46875,0.0312 2.78268,0.33451 3.96806,2.60819 2.09375,4 -1.78097,1.32251 -2.02001,1.33593 -3.71875,0.0937 -1.92654,-1.40872 -1.04565,-4.05148 1.15625,-4.125 z m -373.125,0.625 c -0.38685,0 -0.70565,0.59305 -0.71875,1.3125 -0.0215,1.18209 -0.13073,1.15841 -1.125,-0.15625 -1.37895,-1.8233 -2.98795,-0.57508 -2.25,1.75 0.65472,2.06283 3.81368,2.10397 4.90625,0.0625 0.83007,-1.55102 0.43466,-2.96875 -0.8125,-2.96875 z m 9.90625,0.21875 c 0.4473,-0.0218 1.01499,0.004 1.71875,0.0312 3.83698,0.14805 4.13466,0.57543 1.53125,2.28125 -1.01332,0.66396 -2.1147,1.18865 -2.4375,1.15625 -1.57724,-0.15858 -2.4375,-0.94032 -2.4375,-2.1875 0,-0.8634 0.28311,-1.21596 1.625,-1.28125 z m 32.125,3.625 c -0.62263,0.0659 -0.875,0.44261 -0.875,1.21875 0,0.7823 0.20915,1.61538 0.46875,1.875 0.73338,0.73337 3.38922,-0.94474 3.0625,-1.9375 -0.15996,-0.48606 -1.01345,-0.99363 -1.90625,-1.125 -0.29526,-0.0435 -0.54246,-0.0532 -0.75,-0.0312 z m -26.09375,0.78125 c 0.11164,-0.0121 0.16365,0.003 0.1875,0.0312 0.0953,0.11161 0.8831,1.59316 1.75,3.3125 0.86689,1.71934 1.95912,3.39185 2.4375,3.6875 0.52876,0.3268 -0.11704,0.84447 -1.65625,1.34375 -2.5461,0.8259 -4.01813,3.4375 -1.9375,3.4375 1.2292,0 1.96231,1.39757 1.46875,2.8125 -0.17926,0.51389 -1.05778,0.9375 -1.96875,0.9375 -1.43777,0 -1.62807,-0.33214 -1.375,-2.5 0.25698,-2.20112 0.0245,-2.6302 -2,-3.46875 -1.26331,-0.52302 -2.81344,-0.73947 -3.4375,-0.5 -2.08135,0.79869 -1.25171,-2.20893 0.90625,-3.28125 2.83447,-1.40849 3.5615,-1.35107 3.5625,0.375 0.002,2.16412 2.21901,2.25058 3.1875,0.125 1.03459,-2.27072 -0.58383,-4.9293 -3.03125,-5 -1.59251,-0.046 -1.6141,-0.0856 0.125,-0.78125 0.73852,-0.29542 1.44634,-0.49492 1.78125,-0.53125 z m 302.53125,0.71875 c -0.48295,0.0727 -0.75,0.42259 -0.75,1 0,0.76987 0.49432,1.12632 1.3125,0.96875 0.71945,-0.13856 1.3125,-0.5689 1.3125,-0.96875 0,-0.39986 -0.59305,-0.8302 -1.3125,-0.96875 -0.20455,-0.0394 -0.40152,-0.0555 -0.5625,-0.0312 z m -467.093747,2.875 c 0.822228,0 1.285335,0.33888 1.03125,0.75 -0.254082,0.41111 -1.115272,0.75 -1.9375,0.75 -0.822228,0 -1.285334,-0.33889 -1.03125,-0.75 0.254083,-0.41112 1.115272,-0.75 1.9375,-0.75 z m 479.812497,0.75 c -0.41111,0 -0.75,0.8542 -0.75,1.90625 0,1.08486 0.32606,1.73076 0.75,1.46875 0.41112,-0.25408 0.75,-1.13954 0.75,-1.9375 0,-0.79796 -0.33888,-1.4375 -0.75,-1.4375 z m -284.1875,0.40625 c -0.085,0.0128 -0.171,0.0322 -0.25,0.0625 -1.33129,0.51086 -1.43711,1.90665 -0.21875,3.125 1.23905,1.23905 3.59375,1.11055 3.59375,-0.1875 0,-1.4809 -1.85046,-3.19206 -3.125,-3 z m 265.125,2.25 c -0.28304,-0.0294 -0.375,0.17087 -0.375,0.59375 0,0.57581 0.50833,1.45696 1.125,1.96875 2.25928,1.87504 0.81287,5.25 -2.25,5.25 -0.86333,0 -2.04009,-0.4236 -2.59375,-0.9375 -0.818,-0.75927 -0.89145,-0.72362 -0.40625,0.1875 0.32841,0.61667 1.11043,1.69733 1.71875,2.40625 0.97906,1.14096 0.97855,1.48855 -0.0937,3.125 -1.27126,1.94021 -1.04255,3.67869 0.84375,5.875 1.24247,1.44666 2.80325,1.68989 3.5,0.5625 0.24886,-0.40266 0.0631,-2.11063 -0.4375,-3.78125 -0.78615,-2.6239 -0.75645,-3.18106 0.3125,-4.25 0.95765,-0.95765 1.69737,-1.07997 3.25,-0.53125 2.74451,0.96995 2.88366,1.97787 0.65625,4.625 -2.17261,2.58199 -2.32649,3.1875 -0.84375,3.1875 0.91873,0 4.1875,-5.48893 4.1875,-7.03125 0,-0.30892 -1.18609,-1.6742 -2.625,-3.03125 -3.49413,-3.2954 -3.39169,-4.46828 0.4375,-4.6875 4.47837,-0.2564 5.98772,0.74864 5.4375,3.71875 -0.39932,2.15557 -0.32681,2.31345 0.6875,1.3125 1.5182,-1.49821 2.39272,-4.5 1.3125,-4.5 -0.45852,0 -1.59471,-0.80584 -2.5,-1.8125 -1.99524,-2.21868 -3.25152,-2.476 -5.90625,-1.1875 -1.73704,0.84309 -2.27697,0.78629 -3.90625,-0.28125 -0.76717,-0.50268 -1.24821,-0.75181 -1.53125,-0.78125 z m 43.4375,1.53125 c 1.45176,-0.11532 2.94613,1.61912 2.0625,3.0625 -0.89547,1.46275 -2.65809,2.09192 -3.5,1.25 -0.85776,-0.85776 -0.59945,-3.01972 0.46875,-3.90625 0.30004,-0.24901 0.63373,-0.37964 0.96875,-0.40625 z m -301.25,1.9375 c 1.16467,-0.14775 5.53125,3.6632 5.53125,4.96875 0,0.71908 0.39909,1.71159 0.875,2.1875 0.65547,0.65541 0.62489,1.1341 -0.0937,2 -0.57277,0.69014 -0.76771,1.9339 -0.46875,3.125 l 0.5,1.96875 1.6875,-1.59375 c 0.93062,-0.87426 2.39191,-1.59375 3.21875,-1.59375 1.59397,0 4.75,2.86359 4.75,4.3125 0,0.4737 1.18611,2.0611 2.625,3.5 2.61679,2.61678 3.54896,6.44613 1.84375,7.5 -1.37487,0.84973 -0.76384,3.32489 1.125,4.5625 1.02778,0.67343 1.875,1.84678 1.875,2.59375 0,0.74694 0.97779,2.03584 2.15625,2.875 1.60883,1.14557 2.03979,1.96001 1.78125,3.3125 -0.49236,2.57562 1.10493,3.18382 3.59375,1.34375 2.62334,-1.93949 2.57866,-1.96467 5.25,-0.0625 1.3442,0.95715 2.15625,2.22249 2.15625,3.3125 0,0.96826 0.88025,2.80603 1.9375,4.0625 2.1116,2.50951 1.80711,4.72477 -0.375,2.75 -0.98849,-0.89458 -1.47222,-0.96528 -2.15625,-0.28125 -1.22839,1.22838 -1.11139,4.06408 0.1875,4.5625 0.60573,0.23245 1.18015,1.6762 1.3125,3.28125 0.20703,2.51168 0.47761,2.84571 2.375,3.0625 2.01368,0.23008 2.12896,0.12494 1.8125,-2.03125 -0.22286,-1.51851 -0.0204,-2.3125 0.59375,-2.3125 0.51185,0 1.48937,-0.23211 2.1875,-0.5 1.10726,-0.4249 1.15488,-0.26974 0.375,1.1875 -0.7389,1.38063 -0.66542,1.94082 0.40625,3.125 0.71315,0.78803 1.75953,1.40625 2.3125,1.40625 1.38953,0 1.25829,1.25771 -0.1875,1.8125 -0.72909,0.27978 -1.72348,-0.2158 -2.5625,-1.25 l -1.34375,-1.65625 -1.90625,1.75 c -1.0408,0.97608 -2.00039,2.48757 -2.125,3.34375 -0.173,1.18808 -0.39826,0.94083 -0.96875,-1.03125 -0.95584,-3.30424 -3.71278,-3.95163 -5.71875,-1.34375 -0.81581,1.06059 -1.33355,1.34595 -1.34375,0.71875 -0.009,-0.56953 0.81597,-1.82873 1.84375,-2.78125 3.2996,-3.05798 1.54106,-7.88701 -2.375,-6.53125 -1.20863,0.41843 -1.20638,0.32385 0.0937,-0.6875 1.26737,-0.98587 1.33943,-1.38858 0.5625,-3.09375 -1.36585,-2.99773 -3.07575,-3.26756 -5.1875,-0.8125 -1.45965,1.69693 -1.96601,1.87798 -2.5,1.03125 -0.64915,-1.02933 0.17571,-2.01605 3.03125,-3.65625 0.85908,-0.49346 0.92329,-1.07083 0.34375,-2.71875 -0.97703,-2.77818 -2.58319,-3.0142 -5.09375,-0.6875 -1.1256,1.04317 -2.13679,1.90625 -2.25,1.90625 -0.11319,0 -0.076,-0.93718 0.0937,-2.09375 0.22537,-1.53545 0.94139,-2.35272 2.65625,-3 l 2.375,-0.875 -2.03125,-2.03125 -2.03125,-2.03125 -2.34375,1.75 c -2.15069,1.59009 -2.42329,1.6392 -3.53125,0.53125 -1.10794,-1.10794 -1.0714,-1.30827 0.28125,-2.28125 4.68194,-3.36771 4.49929,-3.12192 2.625,-4.125 -1.44968,-0.77584 -1.93694,-0.69665 -3.34375,0.625 -1.47747,1.38799 -1.91064,1.45364 -4.21875,0.625 -1.41766,-0.50895 -2.82296,-1.24514 -3.125,-1.65625 -1.05147,-1.4312 -0.56973,-4.6919 1,-6.6875 1.94753,-2.47587 1.34766,-3.2861 -1.1875,-1.625 -1.76771,1.15821 -1.875,1.15201 -1.875,-0.0312 0,-0.69655 0.5354,-1.84194 1.1875,-2.5625 1.08896,-1.20328 1.03009,-1.51319 -0.53125,-3.625 -0.93496,-1.26461 -1.946,-2.28125 -2.25,-2.28125 -0.304,0 -1.40164,1.08267 -2.4375,2.40625 -1.61203,2.05979 -1.9487,2.20464 -2.375,1.09375 -0.34298,-0.89381 0.12032,-1.78973 1.5,-2.875 1.76689,-1.38984 1.96668,-1.92272 1.53125,-4.5 -0.29949,-1.77264 -0.19124,-3.29927 0.3125,-3.90625 1.14316,-1.37741 0.20872,-3.43401 -1.9375,-4.25 -1.8008,-0.68466 -3.04339,-2.61287 -2.21875,-3.4375 0.0469,-0.0469 0.10986,-0.0839 0.1875,-0.0937 z m -227.062497,0.875 c -1.730107,0.0158 -2.547134,1.6622 -1.28125,3.1875 1.088839,1.312 2.241961,1.28118 4.0625,-0.0625 1.6842,-1.24305 0.984051,-2.29489 -2,-3.03125 -0.280865,-0.0693 -0.534092,-0.096 -0.78125,-0.0937 z m 195.874997,1.59375 c 0.13317,-0.007 0.2308,0.0121 0.3125,0.0937 0.26051,0.26051 0.12987,1.10683 -0.28125,1.875 -0.79828,1.4916 -1.84676,1.80698 -2.5,0.75 -0.4339,-0.70208 1.53658,-2.67273 2.46875,-2.71875 z m 326.09375,1.21875 c 0.0673,-0.011 0.13093,-0.008 0.1875,0 0.33942,0.0507 0.46766,0.42339 0.34375,1.0625 -0.14199,0.73272 -0.69684,1.47205 -1.25,1.65625 -0.64331,0.21421 -0.91519,-0.14786 -0.75,-1 0.14199,-0.73273 0.69686,-1.47206 1.25,-1.65625 0.0804,-0.0268 0.15143,-0.0515 0.21875,-0.0625 z m -528.312497,1.40625 c 1.110397,0 1.319001,0.32453 0.90625,1.65625 -1.166007,3.76202 -1.212066,4.75859 -0.15625,6.1875 0.968443,1.31064 1.387061,1.38716 3.40625,0.625 2.627796,-0.99187 3.049452,-0.16071 1.15625,2.34375 -0.9395,1.24284 -1.35937,1.33339 -2.59375,0.5625 -2.270635,-1.41803 -3.217174,-1.06303 -5.09375,1.875 -1.478979,2.31553 -1.587786,2.95762 -0.8125,4.40625 0.748413,1.39844 0.698346,2.01976 -0.3125,3.5625 -1.716461,2.61966 -1.608777,3.06484 1.40625,4.84375 3.073869,1.81362 2.812858,3.14079 -0.59375,2.875 -1.759493,-0.13728 -2.448997,0.184 -2.65625,1.1875 -0.476901,2.30911 1.86229,5 4.34375,5 2.96443,0 2.854197,1.27449 -0.1875,2.0625 -1.900661,0.49238 -2.516334,1.12636 -2.8125,2.84375 -0.268884,1.55915 -0.871331,2.26784 -2.0625,2.4375 -0.922368,0.13137 -1.65625,0.55498 -1.65625,0.9375 0,1.27623 -1.39558,0.6933 -2.875,-1.1875 -2.117931,-2.69251 -2.783251,-8.20765 -1.28125,-10.5 0.738187,-1.12663 1.010499,-2.52507 0.71875,-3.6875 -0.355718,-1.4173 -0.04789,-2.23625 1.28125,-3.3125 1.679236,-1.35977 1.712968,-1.4689 0.46875,-2.84375 -1.746958,-1.93037 -1.659816,-3.86932 0.3125,-5.96875 1.261192,-1.34248 1.434453,-1.94056 0.75,-2.625 -1.481915,-1.48192 -1.004416,-4.30321 1.0625,-6.21875 1.167707,-1.0822 1.792629,-2.25636 1.53125,-2.9375 -0.300867,-0.78406 0.0246,-1.15625 1.03125,-1.15625 0.805843,0 1.892761,-0.64653 2.40625,-1.46875 0.513488,-0.82223 1.541214,-1.5 2.3125,-1.5 z m 23.09375,0 c 0.142527,-0.0426 0.449044,0.005 0.90625,0.0937 0.775077,0.1502 1.547645,0.70486 1.71875,1.21875 0.443981,1.33342 -0.939347,1.14738 -2.125,-0.28125 -0.541853,-0.65289 -0.737544,-0.96021 -0.5,-1.03125 z m 182.937497,1.125 0,2.21875 c -7.8e-4,1.69857 -0.52445,2.55382 -2.1875,3.5 -1.20757,0.68702 -2.89108,1.06836 -3.75,0.84375 -0.93339,-0.24409 -2.15244,0.11094 -3.03125,0.90625 -1.24035,1.1225 -1.46875,1.15384 -1.46875,0.1875 0,-0.63005 0.50833,-1.55071 1.125,-2.0625 0.61667,-0.51179 1.09375,-1.57187 1.09375,-2.34375 0,-1.72924 0.6741,-1.76367 2.96875,-0.15625 1.72127,1.20563 1.81264,1.17131 3.5,-0.9375 l 1.75,-2.15625 z m 324.6875,0.40625 c 0.20427,-0.032 0.39535,-0.0224 0.59375,0 0.7936,0.0895 1.48891,0.61014 1.78125,1.53125 0.81382,2.56407 -2.34193,3.92973 -4.125,1.78125 -0.7424,-0.89452 -0.7424,-1.35547 0,-2.25 0.50549,-0.60908 1.13719,-0.9666 1.75,-1.0625 z m -509.437497,3.6875 c 0.437186,0 1.010258,0.37404 1.28125,0.8125 0.804489,1.30169 -0.0998,1.57903 -1.125,0.34375 -0.589574,-0.7104 -0.651904,-1.15625 -0.15625,-1.15625 z m 462.093747,0 c -0.41112,0 -0.75,0.33888 -0.75,0.75 0,0.41111 0.33888,0.75 0.75,0.75 0.41111,0 0.75,-0.33889 0.75,-0.75 0,-0.41112 -0.33889,-0.75 -0.75,-0.75 z m -441.062497,3 c 0.435376,0 0.78125,0.33889 0.78125,0.75 0,0.41111 -0.131199,0.75 -0.3125,0.75 -0.181294,0 -0.558417,-0.33889 -0.8125,-0.75 -0.254084,-0.41111 -0.09163,-0.75 0.34375,-0.75 z m -49.4375,0.21875 c -0.272284,0.0419 -0.541754,0.16675 -0.78125,0.40625 -0.568564,0.56857 -0.518783,1.12414 0.15625,1.9375 1.05376,1.26971 2.25,0.90987 2.25,-0.6875 0,-1.08503 -0.808148,-1.78206 -1.625,-1.65625 z m 251.687497,0.53125 c -1.36274,0 -1.52648,2.31727 -0.25,3.59375 0.7042,0.7042 1.05059,0.63349 1.5625,-0.28125 0.85277,-1.52381 0.14313,-3.3125 -1.3125,-3.3125 z m 239.6875,3.15625 c -0.15405,-0.0171 -0.33205,0.0366 -0.5625,0.125 -0.65029,0.24955 -1.32808,0.4375 -1.5,0.4375 -0.67369,0 -0.28569,1.99556 0.5625,2.84375 1.46546,1.46546 2.09375,1.05728 2.09375,-1.40625 0,-1.35797 -0.13159,-1.94854 -0.59375,-2 z m -234.28125,3.03125 c -0.25978,0.0323 -0.49433,0.18183 -0.71875,0.40625 -0.62824,0.62837 -0.64002,1.31407 0,2.71875 1.10478,2.42474 3.15625,2.51036 3.15625,0.125 0,-1.8508 -1.3118,-3.39003 -2.4375,-3.25 z m -246.031247,0.0312 c 0.183039,-0.0494 0.198857,0.11049 0.03125,0.5 -0.265356,0.61667 -0.68373,1.71805 -0.9375,2.4375 -0.253768,0.71945 -0.761837,1.3125 -1.125,1.3125 -1.222667,0 -0.679634,-2.00209 0.9375,-3.4375 0.55715,-0.49467 0.910711,-0.76311 1.09375,-0.8125 z m 214.031247,1 c -0.68442,9.5e-4 -1.4657,0.82361 -2.4375,2.46875 -1.21792,2.06183 -1.22424,2.20657 0.0312,2.9375 1.97851,1.15186 3.04266,0.98862 3.90625,-0.625 0.54632,-1.02094 0.53081,-2.01035 -0.0625,-3.3125 -0.44297,-0.97223 -0.90518,-1.46949 -1.4375,-1.46875 z m -201.781247,1.75 c 0.411113,0 0.75,0.13121 0.75,0.3125 0,0.18129 -0.338887,0.55841 -0.75,0.8125 -0.411115,0.25408 -0.75,0.0916 -0.75,-0.34375 0,-0.43537 0.338885,-0.78125 0.75,-0.78125 z m 240.687497,2.1563 c 0.78399,0.0533 2.222,2.19014 2.40625,3.75 0.34249,2.89964 -1.20725,2.53199 -2.15625,-0.5 -0.4815,-1.53846 -0.74747,-2.94004 -0.5625,-3.125 0.0401,-0.0401 0.10739,-0.0771 0.15625,-0.0937 0.0458,-0.0156 0.10398,-0.0348 0.15625,-0.0312 z m -222.749997,0.8125 c -0.411115,0 -0.75,0.33889 -0.75,0.75 0,0.41112 0.338885,0.75 0.75,0.75 0.411113,0 0.75,-0.33888 0.75,-0.75 0,-0.41111 -0.338887,-0.75 -0.75,-0.75 z m 439.718747,0 1.65625,0 c 0.61668,0 1.125,0.33889 1.125,0.75 0,0.41112 -0.84421,0.75 -1.90625,0.75 -1.06204,0 -1.82453,-0.33888 -1.6875,-0.75 0.13704,-0.41111 0.50417,-0.75 0.8125,-0.75 z m -227.4375,2.25 c -0.99664,0 -1.5,0.50335 -1.5,1.5 0,1.69431 0.77595,1.91156 2.09375,0.59375 1.31781,-1.3178 1.10056,-2.09375 -0.59375,-2.09375 z m 230.8125,0.15625 c 0.11168,-0.027 0.21528,-0.0109 0.34375,0.0312 1.14734,0.37674 1.72467,4.34071 0.71875,4.96875 -0.40069,0.25017 -1.03957,1.96249 -1.40625,3.8125 -0.53934,2.72103 -0.96619,3.375 -2.25,3.375 -0.87286,0 -1.84502,0.25416 -2.15625,0.5625 -0.31121,0.30832 -1.50589,0.5625 -2.65625,0.5625 -1.38582,0 -2.38938,0.54245 -2.96875,1.625 -0.75574,1.41213 -0.60834,1.84843 1.09375,3.3125 1.08313,0.93167 1.96875,2.00154 1.96875,2.375 0,0.37346 0.79409,1.88908 1.78125,3.34375 1.25336,1.84694 1.57925,2.8895 1.03125,3.4375 -0.54801,0.548 -0.4347,1.31031 0.40625,2.59375 1.04039,1.58774 1.06934,1.91889 0.125,2.28125 -1.46659,0.56277 -1.40541,3.37141 0.125,5.0625 1.16149,1.28334 1.14397,1.375 -0.34375,1.375 -2.21729,0 -3.99303,2.95754 -2.4375,5 2.81353,3.69426 2.38729,3.31769 -1.25,2.625 -1.76467,-0.33607 -2.07983,0.59769 -2.28125,3.03125 -0.22718,2.74496 -0.28406,2.8125 -3.28125,2.8125 -2.97389,0 -3.04691,-0.0702 -1.78125,-1.46875 1.94728,-2.15172 1.26108,-4.15625 -1.4375,-4.15625 -1.89601,0 -2.26262,0.32493 -2.46875,2.125 -0.15905,1.38915 0.19973,2.47994 1.09375,3.15625 1.23134,0.93142 1.07431,1.00615 -1.625,0.96875 -1.64446,-0.0228 -4.71032,0.21057 -6.8125,0.5 -3.4657,0.47717 -3.922,0.36494 -5.03125,-1.21875 -0.67283,-0.96061 -1.21875,-2.63232 -1.21875,-3.71875 0,-2.16234 2.56057,-5.90625 4.03125,-5.90625 0.50825,0 1.55119,-0.48296 2.34375,-1.0625 1.41542,-1.03503 1.42427,-1.08574 0.0312,-2.625 -0.77999,-0.86188 -1.21296,-1.7558 -0.96875,-2 0.79741,-0.79741 1.89161,0.42408 2.375,2.625 0.2605,1.186 1.14922,2.75835 1.96875,3.5 1.26761,1.14718 1.8462,1.21094 3.8125,0.46875 1.98985,-0.75109 2.60286,-0.65015 4.4375,0.65625 2.44246,1.73918 3.93207,1.25028 3.34375,-1.09375 -0.47508,-1.89289 0.21724,-3.09375 1.78125,-3.09375 0.78803,0 1.125,-0.80507 1.125,-2.6875 0,-1.47309 0.48115,-3.26286 1.0625,-3.96875 0.91866,-1.11546 0.90408,-1.43968 -0.1875,-2.53125 -1.06413,-1.06413 -1.49446,-1.10439 -2.8125,-0.28125 -0.85562,0.53434 -1.6714,0.85008 -1.78125,0.71875 -0.10986,-0.13127 -0.59074,-1.00312 -1.09375,-1.96875 -0.87803,-1.68558 -0.82051,-1.74287 1.28125,-1.28125 2.85379,0.6268 4.05754,-0.78273 3.25,-3.75 -0.45387,-1.66764 -1.03702,-2.1992 -2.40625,-2.1875 -1.70558,0.0153 -1.78759,-0.17666 -1.53125,-3.71875 0.14917,-2.06122 0.74222,-4.40456 1.3125,-5.21875 0.57028,-0.8142 1.03125,-2.15576 1.03125,-2.96875 0,-1.14966 0.2086,-1.29139 0.90625,-0.59375 1.2794,1.2794 2.93706,1.06764 4.96875,-0.625 2.37735,-1.98058 1.63102,-3.6875 -1.625,-3.6875 -1.79693,0 -2.89154,0.47039 -3.71875,1.65625 -1.16459,1.66944 -1.17975,1.69439 -1.21875,0.125 -0.0216,-0.86957 0.65471,-2.51066 1.53125,-3.625 1.46799,-1.86626 1.89836,-1.99221 5.25,-1.53125 3.10581,0.42716 3.625,0.32006 3.625,-0.75 0,-0.51713 0.2587,-0.88778 0.59375,-0.96875 z m -442.937497,0.4375 c -0.235576,0.0159 -0.464506,0.0909 -0.65625,0.25 -1.251924,1.03901 -1.277977,3.78451 -0.0625,5 1.178902,1.17889 2.790739,0.87256 3.8125,-0.75 0.967444,-1.53629 -1.444719,-4.61144 -3.09375,-4.5 z m 0.375,1.6875 c 0.513909,-0.10207 0.96875,0.26038 0.96875,1.03125 0,0.5924 -0.304798,1.29473 -0.6875,1.53125 -0.888671,0.54925 -1.797076,-0.85744 -1.1875,-1.84375 0.257754,-0.41706 0.597905,-0.65751 0.90625,-0.71875 z m 194.343747,3.21875 c -0.53702,0.0697 -1.23353,0.49078 -2.09375,1.21875 -1.77426,1.50149 -1.77589,1.52613 -0.3125,2.65625 2.1857,1.68792 3.75,1.07205 3.75,-1.46875 0,-1.7131 -0.44872,-2.5225 -1.34375,-2.40625 z m -210.312497,5.71875 c 2.849803,0 3.64432,0.33059 4.65625,1.875 0.762949,1.16441 1.096044,2.77517 0.875,4.28125 -0.24729,1.68489 0.114792,3.04909 1.1875,4.5 1.367881,1.85016 1.424596,2.35858 0.59375,4.65625 -0.707247,1.95584 -0.706545,2.95283 -0.0625,4.15625 0.467789,0.87406 0.638974,2.44825 0.375,3.5 -0.383493,1.52796 -0.01041,2.37171 1.875,4.09375 1.886564,1.72297 2.2591,2.53213 1.875,4.0625 -0.270819,1.07902 -0.116065,2.37705 0.375,2.96875 0.694818,0.8372 0.585022,1.0435 -0.53125,1.0625 -1.811234,0.0308 -3.99918,1.70206 -3.96875,3.03125 0.01307,0.57134 0.489102,1.68076 1.0625,2.4375 1.493667,1.97124 3.962683,0.93719 4.8125,-2 0.662926,-2.29123 0.68513,-2.29358 0.75,-0.375 0.03708,1.09694 0.227263,2.45213 0.4375,3 0.229304,0.59757 -0.492434,1.37059 -1.84375,1.96875 -2.434825,1.07774 -3.763511,4.17399 -2.375,5.5625 0.611072,0.61108 0.526034,1.19185 -0.375,2.1875 -1.655839,1.82966 -2.5,1.70083 -2.5,-0.375 0,-0.9492 -0.469243,-2.3564 -1.03125,-3.125 -0.981674,-1.34251 -1.078045,-1.32821 -2.96875,0.5625 -3.292446,3.29245 -2.404146,6.53125 1.8125,6.53125 1.808708,0 1.796313,0.30753 -0.125,2.90625 -2.180131,2.94878 -1.671669,5.55869 1.1875,6.09375 2.016238,0.37732 2.072329,0.48687 0.65625,0.96875 -0.866216,0.29478 -1.932919,1.27154 -2.375,2.1875 -0.756662,1.56778 -0.79614,1.52663 -0.84375,-0.71875 -0.02783,-1.31186 -0.417909,-2.62375 -0.875,-2.90625 -0.532557,-0.32914 -0.674,-1.74602 -0.375,-4 0.396149,-2.98635 0.220799,-3.75266 -1.125,-4.96875 -1.325394,-1.19763 -1.499425,-2.00088 -1.15625,-4.90625 0.333616,-2.82438 0.116754,-3.71404 -1.0625,-4.78125 -0.968068,-0.87611 -1.4375,-2.28615 -1.4375,-4.25 0,-1.81122 -0.579972,-3.67412 -1.5,-4.84375 -2.167744,-2.75583 -1.869561,-5.0151 0.90625,-7.1875 1.907875,-1.49314 2.200494,-2.09346 1.5,-2.9375 -0.481107,-0.5797 -0.84494,-2.86631 -0.8125,-5.09375 0.131804,-9.05355 -0.04664,-10.1005 -1.96875,-11.90625 -3.835207,-3.603 -1.381102,-8.21875 4.375,-8.21875 z m 248.656247,3 c -1.05968,0 -1.51846,2.3986 -0.65625,3.4375 1.11301,1.34104 2.08537,1.31249 2.625,-0.0937 0.43175,-1.12512 -0.87038,-3.34375 -1.96875,-3.34375 z M 48.758363,181.3962 c -0.268041,0.0119 -0.4375,0.30054 -0.4375,0.78125 0,0.64092 0.307637,1.15625 0.71875,1.15625 0.411115,0 0.75,-0.30066 0.75,-0.6875 0,-0.38686 -0.338885,-0.90216 -0.75,-1.15625 -0.102778,-0.0635 -0.191903,-0.0977 -0.28125,-0.0937 z m 450.874997,1.34375 c 0.66667,-0.11794 0.80083,0.36709 1.28125,2.28125 0.51899,2.0678 -0.13152,2.49298 -2.4375,1.5625 -1.35112,-0.54519 -1.16071,-3.00918 0.28125,-3.5625 0.37422,-0.1436 0.65278,-0.24194 0.875,-0.28125 z M 29.195863,187.8337 c 0.640933,0 1.15625,0.33888 1.15625,0.75 0,0.41111 -0.300642,0.75 -0.6875,0.75 -0.386852,0 -0.902166,-0.33889 -1.15625,-0.75 -0.254083,-0.41112 0.04657,-0.75 0.6875,-0.75 z m 337.812497,0 c 2.01666,0 3.48175,1.31939 2.96875,2.65625 -0.51706,1.34743 1.07878,4.0625 2.375,4.0625 1.48678,0 2.62352,-2.41165 2.09375,-4.4375 -0.35794,-1.36871 -0.17646,-1.62961 0.96875,-1.40625 0.96723,0.18867 1.415,0.90852 1.4375,2.3125 0.0181,1.12966 0.77171,2.80296 1.65625,3.6875 1.34418,1.34418 1.77879,1.43103 2.75,0.625 0.63908,-0.5304 1.15625,-1.77256 1.15625,-2.75 0,-1.0814 0.44276,-1.75 1.125,-1.75 0.66104,0 1.14925,0.6647 1.15625,1.65625 0.0172,2.52689 1.07374,3.71871 3.0625,3.4375 1.40176,-0.19819 1.86263,-0.81956 2.15625,-2.875 0.20556,-1.43889 0.68544,-2.4243 1.09375,-2.21875 0.40834,0.20556 0.65849,0.82084 0.53125,1.375 -0.27371,1.19194 1.94487,3.84375 3.21875,3.84375 1.55377,0 3.57577,-2.86447 3.15625,-4.46875 -0.47909,-1.83204 1.088,-2.04512 2.5,-0.34375 0.80547,0.97053 0.73157,1.55461 -0.34375,3.375 -1.70568,2.88751 -0.94701,3.95909 2.4375,3.4375 1.77332,-0.27328 3.20652,-0.0536 4.15625,0.65625 2.29306,1.71385 7.15625,1.22427 7.15625,-0.71875 0,-0.99629 4.10571,-2.6875 6.53125,-2.6875 0.86645,0 2.10207,0.50832 2.71875,1.125 0.61667,0.61666 1.82144,1.125 2.6875,1.125 1.35274,0 1.45031,0.22271 0.75,1.53125 -1.30882,2.44555 -0.23868,4.4375 2.375,4.4375 1.63342,0 2.37396,-0.4205 2.65625,-1.5 0.74031,-1.30206 3.2437,-2.47166 2.875,-0.0625 -0.53717,1.69249 1.48331,3.99047 3.21875,3.65625 0.66163,-0.12742 1.24095,-0.90064 1.28125,-1.71875 0.12219,-1.93796 1.3618,-6.30924 1.5,-2.21875 -0.62382,2.48553 0.57995,4.56127 2.875,5 2.10319,0.40205 3.4375,-0.58637 3.4375,-2.5625 0,-0.74002 0.34588,-1.34375 0.78125,-1.34375 0.43528,0 0.58614,0.32655 0.34375,0.71875 -0.24232,0.39221 -0.23146,1.57831 0.0312,2.625 0.56284,2.24252 3.52815,2.61638 5.625,0.71875 1.18891,-1.07596 1.33473,-1.05844 1.75,0.25 0.65032,2.04898 3.91607,3.70894 5.0625,2.5625 1.30337,-1.30338 2.09375,-1.09421 2.09375,0.59375 0,0.82223 -0.36451,1.5 -0.8125,1.5 -0.44799,0 -1.44708,0.7625 -2.21875,1.6875 l -1.40625,1.6875 -0.0312,-1.9375 c -0.0321,-2.49605 -2.90782,-3.96309 -5.6875,-2.90625 -2.62519,0.9981 -3.3125,0.92123 -3.3125,-0.375 0,-0.88534 -0.69146,-1.01597 -3.53125,-0.65625 -4.11994,0.52185 -5.69363,2.02599 -5.125,4.9375 0.45788,2.34442 0.25454,2.52443 -1.0625,0.9375 -0.54209,-0.65327 -0.75307,-2.04713 -0.5,-3.3125 0.55107,-2.75535 -0.82912,-3.97261 -4.125,-3.65625 -2.40591,0.23094 -2.44982,0.32211 -2.3125,3.40625 0.15809,3.54855 -0.84919,4.30441 -1.5,1.125 -0.23142,-1.13057 -0.89679,-2.666 -1.46875,-3.4375 -0.86548,-1.16741 -1.3058,-1.28523 -2.65625,-0.5625 -0.89245,0.47763 -1.625,1.56423 -1.625,2.40625 0,0.89368 -0.39209,1.40179 -0.9375,1.21875 -0.5139,-0.17247 -0.9375,-1.42964 -0.9375,-2.8125 0,-2.26605 -0.2671,-2.57766 -2.625,-3.09375 -3.5882,-0.78534 -4.46875,-0.32004 -4.46875,2.375 0,1.34968 -0.31327,2.11367 -0.75,1.84375 -1.02847,-0.63564 -0.93137,-3.05216 0.1875,-4.84375 1.24235,-1.9893 -0.0578,-4.04788 -2.6875,-4.25 -2.66525,-0.20485 -4.45206,1.72086 -4.0625,4.375 0.17128,1.16705 0.10143,2.125 -0.15625,2.125 -1.2472,0 -2.25,-2.07814 -2.25,-4.625 0,-2.36204 -0.30888,-2.90387 -1.8125,-3.28125 -2.22092,-0.55741 -4.64923,0.66492 -5.28125,2.65625 -0.2611,0.82265 -0.783,1.5 -1.15625,1.5 -0.39863,0 -0.38465,-0.74986 0.0312,-1.84375 1.00391,-2.64049 0.17043,-4.125 -2.28125,-4.125 -1.1551,0 -2.19781,-0.37478 -2.34375,-0.8125 -0.17239,-0.51721 -1.6258,-0.61692 -4.15625,-0.28125 -3.56097,0.47239 -3.98106,0.73202 -4.8125,3.03125 -0.96536,2.66968 -2.07225,2.15006 -2.09375,-1 -0.008,-1.14779 -0.47182,-1.6875 -1.4375,-1.6875 -1.55889,0 -2.3125,1.38856 -2.3125,4.21875 0,2.64628 -1.26665,1.52784 -1.34375,-1.1875 -0.0856,-3.01003 -0.63463,-3.78125 -2.78125,-3.78125 -2.22707,0 -3.34742,1.93441 -2.8125,4.875 0.43424,2.38713 -0.25022,2.17075 -1.59375,-0.5 -0.45265,-0.89983 -1.22897,-1.77603 -1.71875,-1.9375 -1.11194,-0.36656 -3.05618,3.45469 -2.65625,5.21875 0.18526,0.81718 -0.1403,1.3125 -0.875,1.3125 -0.86751,0 -1.1875,-0.76818 -1.1875,-2.90625 0,-1.75591 -0.45634,-3.29945 -1.1875,-3.90625 -1.78852,-1.48436 -4.1367,1.59769 -3.53125,4.625 0.4092,2.04598 0.29287,2.1875 -1.84375,2.1875 -1.26047,0 -2.5123,0.34607 -2.78125,0.78125 -0.2751,0.44508 -1.41231,0.60324 -2.59375,0.34375 -1.15506,-0.25369 -2.3091,-0.12875 -2.5625,0.28125 -0.27701,0.44835 -2.92648,0.59784 -6.625,0.375 -3.383,-0.20383 -7.40827,-0.38785 -8.9375,-0.40625 -2.44594,-0.0294 -2.62266,-0.15859 -1.65625,-1.125 2.35162,-2.35162 0.40704,-6.09725 -2.65625,-5.125 -0.95248,0.30231 -1.72807,1.39038 -2,2.75 -0.55117,2.75589 -1.55334,1.87904 -1.875,-1.625 -0.23822,-2.59485 -0.25758,-2.59876 -3.59375,-2.4375 -1.85001,0.0894 -4.44515,0.39069 -5.78125,0.65625 -1.5629,0.31065 -2.4375,0.18604 -2.4375,-0.34375 0,-0.45291 1.35554,-1.04955 3,-1.3125 2.2533,-0.36032 2.96875,-0.82035 2.96875,-1.875 0,-1.33577 0.0731,-1.33316 1.5,0.0937 1.67845,1.67845 2.67028,1.87833 3.40625,0.6875 0.27466,-0.44437 1.2489,-0.634 2.15625,-0.40625 0.92335,0.23173 2.37325,-0.0921 3.3125,-0.75 1.52809,-1.07027 1.79694,-1.05751 3,0.0312 1.48087,1.34015 4.23126,1.58022 4.9375,0.4375 0.30964,-0.50102 0.93884,-0.50102 1.875,0 1.88924,1.01107 5.05467,0.961 5.40625,-0.0937 0.21141,-0.63436 0.69494,-0.63373 1.9375,0.0312 0.96701,0.51753 2.38871,0.66631 3.34375,0.34375 0.90948,-0.30717 3.15494,-0.601 5,-0.625 l 3.34375,-0.0312 -0.21875,-3 c -0.13618,-1.64446 -0.63114,-3.41366 -1.0625,-3.9375 -1.14079,-1.38534 -0.18435,-1.92256 1.65625,-0.9375 0.87296,0.46722 2.25582,0.66229 3.0625,0.40625 1.76504,-0.5602 1.858,0.0483 0.28125,1.625 -1.79027,1.79027 -1.06406,4.31919 1.3125,4.59375 2.95202,0.34105 4.18593,-2.24261 2.03125,-4.25 -1.82381,-1.69915 -1.32983,-3.0937 1.0938,-3.0937 z m -341.624997,0.28125 c 0.321046,-0.0385 0.681325,0.12413 0.875,0.4375 0.258224,0.41782 -0.07782,0.78125 -0.71875,0.78125 -1.312963,0 -1.505533,-0.45302 -0.46875,-1.09375 0.09568,-0.0591 0.205485,-0.11217 0.3125,-0.125 z m 23.625,0.84375 c -1.961561,0.005 -4.318689,2.48957 -3.25,4.21875 0.245472,0.39716 1.514957,0.62592 2.8125,0.5 2.665378,-0.25873 3.615033,-2.68155 1.6875,-4.28125 -0.363065,-0.30132 -0.797332,-0.43863 -1.25,-0.4375 z m -26,1.46875 c 0.448668,0.0244 0.625,0.50817 0.625,1.5 0,2.06023 2.506491,4.125 5,4.125 2.102198,0 3.25537,2.06522 3.1875,5.75 -0.02889,1.56871 -0.305088,3.45712 -0.59375,4.1875 -0.457128,1.15669 -0.714384,1.17562 -1.9375,0.28125 -1.222592,-0.89398 -1.280367,-1.35107 -0.53125,-3.5 1.057243,-3.0328 1.087731,-2.66228 -0.3125,-4.0625 -1.881354,-1.88136 -3.817987,-1.35394 -5.5625,1.46875 -1.84665,2.98793 -3.826116,3.54032 -3.1875,0.90625 0.22426,-0.92501 1.392938,-2.58883 2.59375,-3.71875 2.168207,-2.0402 2.251859,-3.5625 0.1875,-3.5625 -1.426342,0 -1.40252,-2.69981 0.03125,-3.25 0.100706,-0.0386 0.195518,-0.0773 0.28125,-0.0937 0.07502,-0.0144 0.154655,-0.0347 0.21875,-0.0312 z m 255.593747,1.15625 c -0.33314,-0.003 -0.73338,0.33747 -1.5,1.03125 -1.90583,1.72474 -1.98656,3.11353 -0.25,4.125 1.69816,0.98911 1.96018,0.97732 3.03125,-0.0937 1.174,-1.174 1.13295,-2.2369 -0.15625,-4 -0.517,-0.70703 -0.79186,-1.05906 -1.125,-1.0625 z m 127.28125,2.5 c 0.26805,0.0119 0.46875,0.3318 0.46875,0.8125 0,0.64094 -0.33888,1.15625 -0.75,1.15625 -0.41111,0 -0.75,-0.30064 -0.75,-0.6875 0,-0.38684 0.33889,-0.93341 0.75,-1.1875 0.10278,-0.0635 0.1919,-0.0977 0.28125,-0.0937 z m -115.6875,0.75 c 0.0894,-0.004 0.17847,0.0302 0.28125,0.0937 0.41113,0.25409 0.75,0.7694 0.75,1.15625 0,0.38686 -0.33887,0.71875 -0.75,0.71875 -0.4111,0 -0.75,-0.51531 -0.75,-1.15625 0,-0.48072 0.20071,-0.80063 0.46875,-0.8125 z m -19.03125,1.375 c -1.45981,0.0644 -2.55956,1.22363 -2.09375,2.4375 0.68778,1.79234 3.84375,1.20117 3.84375,-0.71875 0,-0.81661 -0.50834,-1.57954 -1.125,-1.6875 -0.2202,-0.0385 -0.41646,-0.0404 -0.625,-0.0312 z m -221.374997,0.96875 c -0.516933,-0.0199 -1.13648,0.0986 -1.78125,0.34375 -2.273983,0.86458 -2.604258,3.2847 -0.625,4.4375 1.722351,1.00318 1.697768,1.02678 3.28125,-0.40625 2.189057,-1.98106 1.365041,-4.28894 -0.875,-4.375 z m 233.312497,0.375 c -1.0618,0 -2.52243,2.83482 -1.9375,3.78125 0.26225,0.42442 0.86751,0.65619 1.34375,0.5 1.09049,-0.35765 1.63678,-4.28125 0.59375,-4.28125 z m 137.5,0 c -1.11553,0 -2.3564,2.72654 -1.84375,4.0625 0.48824,1.27231 2.93729,1.58149 3.625,0.46875 0.56898,-0.92063 -0.85087,-4.53125 -1.78125,-4.53125 z m -67.40625,1.5 c -1.51668,0 -2.63469,2.92654 -1.875,4.90625 0.29375,0.76553 1.15567,1.09213 2.5,0.9375 3.55216,-0.4086 2.97147,-5.84375 -0.625,-5.84375 z m 38.65625,0.75 c 0.78828,0 1.04773,0.38038 0.75,1.15625 -0.24956,0.65029 -0.46875,1.32806 -0.46875,1.5 0,0.17193 -0.30763,0.3125 -0.71875,0.3125 -0.41111,0 -0.75,-0.67777 -0.75,-1.5 0,-0.87478 0.48462,-1.46875 1.1875,-1.46875 z m -45.75,0.5 c -1.31945,0.14513 -2.57058,2.50209 -1.71875,4.09375 0.40602,0.75867 1.37975,1.375 2.1875,1.375 1.11964,0 1.46875,-0.51648 1.46875,-2.15625 0,-1.183 -0.48287,-2.55019 -1.0625,-3.03125 -0.28619,-0.23752 -0.57051,-0.31474 -0.875,-0.28125 z m -7.375,0.625 c -1.55419,0 -2.34568,1.85298 -1.59375,3.8125 0.78109,2.03548 3.0625,0.85181 3.0625,-1.59375 0,-1.72875 -0.3189,-2.21875 -1.46875,-2.21875 z m -64.84375,0.0312 c -0.0926,0.009 -0.17543,0.0339 -0.25,0.0625 -1.32759,0.50945 -1.44737,3.72902 -0.15625,4.25 3.52202,1.42117 5.69774,-1.05211 2.90625,-3.3125 -0.79701,-0.64539 -1.8518,-1.06362 -2.5,-1 z m 39,1.0625 c 0.43539,0 0.78125,0.3389 0.78125,0.75 0,0.41113 -0.16244,0.75 -0.34375,0.75 -0.18129,0 -0.52717,-0.33887 -0.78125,-0.75 -0.25409,-0.4111 -0.0916,-0.75 0.34375,-0.75 z m 141.75,0.3125 c 0.0854,-0.0254 0.18296,0.002 0.28125,0.0625 0.39308,0.24298 0.51283,0.92773 0.28125,1.53125 -0.59293,1.54512 -1,1.36734 -1,-0.4375 0,-0.63488 0.18117,-1.08021 0.4375,-1.15625 z m 14.28125,1.40625 c 0.3417,-0.0484 0.87824,0.10255 1.5625,0.46875 2.17616,1.16465 2.91263,5.92301 1.15625,7.53125 -0.74957,0.68634 -2.30694,1.6168 -3.4375,2.09375 -1.88898,0.79688 -2.0625,0.72715 -2.0625,-0.8125 0,-1.02052 0.66306,-1.95679 1.6875,-2.40625 1.92834,-0.84601 2.6227,-3.6649 1.28125,-5.28125 -0.76329,-0.91971 -0.75699,-1.51304 -0.1875,-1.59375 z m -446.093747,0.5313 c 0.125215,-0.008 0.269473,-0.015 0.40625,0 0.65653,0.0718 1.441812,0.41742 2.28125,1.03125 1.352617,0.98905 1.334786,1.04959 -0.28125,1.5625 -1.03171,0.32745 -1.561545,1.01588 -1.40625,1.78125 0.188949,0.93121 1.004738,1.2319 3.3125,1.1875 l 3.09375,-0.0625 0.5,3.96875 c 0.524134,4.19498 0.182871,5.5 -1.4375,5.5 -1.251438,0 -3.631753,3.52837 -3.03125,4.5 0.769971,1.24584 1.875,0.78351 1.875,-0.78125 0,-0.87531 0.483562,-1.5 1.1875,-1.5 0.927884,0 1.103185,0.46826 0.71875,2 -0.310078,1.23544 -0.153837,2.18511 0.40625,2.53125 1.443151,0.89193 0.152498,3.11825 -1.5,2.59375 -0.991464,-0.31468 -1.906453,0.17229 -3,1.5625 -1.8581,2.3622 -1.951885,3.5244 -0.4375,4.78125 0.796816,0.66129 0.975079,1.72493 0.65625,3.71875 -0.344663,2.15541 -0.175514,2.89486 0.75,3.25 0.828304,0.31785 1.21875,1.40238 1.21875,3.5 0,2.00988 0.38294,3.184 1.125,3.46875 0.636247,0.24416 1.09375,1.34517 1.09375,2.5625 0,1.45716 0.619422,2.52107 1.875,3.34375 1.120032,0.73388 2.017507,2.24006 2.3125,3.8125 0.267769,1.42734 1.135104,2.98715 1.90625,3.46875 0.771137,0.48157 1.40625,1.56882 1.40625,2.40625 0,1.97931 2.009016,4.84375 3.40625,4.84375 0.799019,0 0.975426,0.51001 0.625,1.90625 -0.552424,2.20102 2.266064,5.88412 4,5.21875 0.726192,-0.27867 0.891093,0.0272 0.5625,1.0625 -0.652386,2.05549 1.569665,6.03125 3.375,6.03125 1.219835,0 1.46875,0.5014 1.46875,2.9375 0,2.68901 2.436359,8.25645 3.625,8.28125 0.267733,0.006 1.262494,0.18961 2.1875,0.4375 1.304418,0.34956 1.656228,0.14467 1.65625,-0.9375 8e-6,-0.76741 1.199696,-2.33781 2.65625,-3.5 2.073128,-1.65414 2.539728,-2.47845 2.15625,-3.75 -0.336502,-1.11579 -0.253578,-1.38844 0.28125,-0.875 0.428231,0.41112 1.01037,1.65266 1.28125,2.75 0.397539,1.61045 0.124865,2.24677 -1.40625,3.25 -1.043296,0.68359 -2.551617,2.34494 -3.34375,3.6875 l -1.4375,2.4375 2.5625,1.15625 2.53125,1.125 2.34375,-3.28125 c 2.503123,-3.48555 3.89316,-4.07 4.6875,-2 0.331499,0.86388 -0.271277,1.9679 -1.84375,3.4375 -2.757099,2.57673 -2.658602,4.26013 0.3125,5.25 1.783719,0.5943 2.368636,0.46361 3.1875,-0.65625 0.549742,-0.75182 1,-2.31399 1,-3.46875 0,-2.5071 0.76369,-2.63566 2.6875,-0.5 0.783165,0.8694 2.192624,1.86219 3.125,2.21875 0.932377,0.35657 1.996813,1.47404 2.375,2.46875 0.508167,1.33659 1.453093,1.91431 3.625,2.28125 2.113237,0.35703 3.153879,1.00415 3.75,2.3125 0.455955,1.00072 1.173823,1.84375 1.59375,1.84375 0.419926,0 0.78125,0.60375 0.78125,1.34375 0,0.74002 0.391382,1.73514 0.875,2.21875 0.6741,0.6741 0.553286,1.21441 -0.46875,2.34375 -1.181729,1.30579 -1.211733,1.7364 -0.3125,3.78125 1.241325,2.82289 3.719333,2.84775 4.375,0.0312 0.285314,-1.2256 1.035552,-1.9593 2.1875,-2.125 1.4613,-0.21019 1.658145,-0.018 1.15625,1.125 -0.331784,0.75562 -0.62179,2.36039 -0.65625,3.59375 -0.05821,2.0863 0.128436,2.2386 2.562497,2.1875 2.2876,-0.0481 2.66815,-0.31406 3,-2.21875 0.5753,-3.30218 2.67851,-3.26659 3.21875,0.0625 0.82522,5.08519 3.73879,6.54981 4.8125,2.40625 0.36426,-1.40575 1.19916,-2.53929 1.96875,-2.6875 1.15301,-0.22206 1.28396,0.23633 1.0625,3.375 -0.24326,3.44742 -0.13641,3.62234 1.78125,3.84375 1.60443,0.18524 2.24442,-0.23877 3.1875,-2.0625 1.59666,-3.0876 2.81831,-2.94592 2.21875,0.25 -0.26111,1.39182 -0.16735,2.71819 0.1875,2.9375 0.35486,0.21932 2.25774,-0.36739 4.21875,-1.3125 1.961,-0.94517 3.41782,-1.33954 3.25,-0.875 -0.38027,1.05266 0.81889,3.4375 1.71875,3.4375 1.34723,0 2.994,-2.39621 3,-4.34375 0.004,-1.40111 0.57172,-2.27053 1.875,-2.875 1.07131,-0.49689 2.0406,-0.57689 2.28125,-0.1875 0.2301,0.3723 0.0146,0.6875 -0.46875,0.6875 -0.53263,0 -0.69363,0.64557 -0.4375,1.625 0.2324,0.88869 0.0531,2.2626 -0.375,3.0625 -1.07923,2.0166 0.11575,3.03149 2.5,2.125 2.51925,-0.95782 3.07578,-3.34362 1.28125,-5.625 -1.59544,-2.02828 -0.65081,-3.45252 1.25,-1.875 0.84845,0.7042 1.3446,0.71791 2,0.0625 0.47592,-0.47591 1.53709,-0.875 2.34375,-0.875 0.80667,0 2.96177,-0.88414 4.8125,-1.96875 2.71939,-1.59366 3.61779,-1.81255 4.71875,-1.125 0.74927,0.46794 1.9823,0.84375 2.71875,0.84375 1.93163,0 4.2228,2.96579 4.65625,6 0.29252,2.04759 0.77246,2.67922 2.15625,2.875 2.32142,0.32847 3.4375,-0.92568 3.4375,-3.78125 0,-1.32394 0.46337,-2.48367 1.0625,-2.6875 0.84413,-0.28715 0.94434,0.33919 0.5625,3.125 -0.40733,2.97184 -0.26609,3.4477 0.84375,3.4375 2.08377,-0.0184 3.53125,-1.29185 3.53125,-3.125 0,-1.89017 2.17778,-2.44258 2.34375,-0.59375 0.0554,0.61668 0.1402,1.54861 0.1875,2.0625 0.11724,1.27052 3.42015,1.17617 4.5,-0.125 0.49614,-0.59787 0.65235,-1.89492 0.375,-3 -0.37304,-1.48625 -0.20223,-1.9375 0.71875,-1.9375 0.86738,0 1.21875,0.7098 1.21875,2.53125 0,3.52616 1.52187,4.64476 3.8125,2.78125 l 1.78125,-1.4375 -1.40625,-2.4375 c -1.37572,-2.34423 -1.39556,-2.43148 -0.0625,-3.40625 0.75616,-0.55291 2.42996,-1.0562 3.6875,-1.125 1.25755,-0.0688 3.09722,-0.1822 4.125,-0.25 1.02778,-0.0678 2.97638,-0.1812 4.3125,-0.25 1.33613,-0.0689 3.08389,-0.77138 3.875,-1.5625 2.79041,-2.79041 4.48687,-3.31694 7.625,-2.28125 2.4017,0.79263 3.03051,1.42618 3.65625,3.75 0.89474,3.32281 2.62291,4.24937 4.625,2.4375 1.03081,-0.93215 1.32647,-1.93014 1.03125,-3.40625 -0.51332,-2.56661 0.77311,-2.73696 1.90625,-0.25 0.45799,1.00516 1.37108,2.05916 2.03125,2.3125 1.54232,0.59184 4.08021,-2.43688 3.40625,-4.0625 -1.85331,-4.47025 -0.57524,-5.25317 1.9375,-1.1875 0.89087,1.44146 1.93651,2.45114 2.3125,2.21875 0.95323,-0.58911 0.84879,-3.61998 -0.15625,-4.625 -1.09083,-1.09083 2.83984,-3.1875 5.96875,-3.1875 1.2295,0 2.46466,-0.33889 2.71875,-0.75 0.25408,-0.41112 1.04699,-0.75 1.78125,-0.75 1.73489,0 3.59558,-2.13798 3.9375,-4.5 l 0.28125,-1.84375 1.125,2.21875 c 0.90279,1.7982 1.59933,2.256 3.53125,2.25 1.67689,-0.005 2.40625,0.35292 2.40625,1.15625 0,0.63478 0.98702,1.72835 2.1875,2.4375 2.12943,1.25787 2.21418,1.2454 3.5625,-0.46875 0.9174,-1.16628 2.21523,-1.79745 3.84375,-1.84375 3.08311,-0.0877 4.29025,2.07629 3.3125,5.875 -0.56222,2.18428 -1.02195,2.61012 -3.09375,2.8125 -1.33929,0.13084 -2.92937,-0.188 -3.53125,-0.6875 -0.88216,-0.73213 -1.40427,-0.6061 -2.78125,0.6875 -0.93944,0.88256 -2.44198,1.625 -3.3125,1.625 -0.90546,0 -2.24277,0.96714 -3.15625,2.25 -1.67716,2.35536 -4.89381,3.04372 -6.53125,1.40625 -0.98957,-0.98956 -2.46875,-0.26353 -2.46875,1.21875 0,1.50961 -2.26951,2.51876 -4.65625,2.0625 -1.12855,-0.21574 -2.57693,0.0245 -3.1875,0.53125 -0.73275,0.60813 -2.2112,0.76198 -4.375,0.4375 -2.58028,-0.38693 -3.37044,-0.25142 -3.71875,0.65625 -0.51288,1.33652 -3.52989,1.53262 -4.75,0.3125 -0.61284,-0.61283 -1.17321,-0.18639 -2.09375,1.59375 -1.18753,2.29643 -1.40806,2.38827 -4.46875,1.96875 -2.85488,-0.3913 -3.36794,-0.2261 -4.4375,1.40625 -1.42571,2.17591 -1.99892,2.24188 -5.40625,0.625 -2.41711,-1.147 -2.64354,-1.13176 -3.5625,0.125 -0.79341,1.08506 -1.61513,1.25328 -4.375,0.875 -2.52155,-0.34562 -3.63791,-0.18781 -4.3125,0.625 -1.17898,1.42059 -2.58172,1.37761 -4.875,-0.125 -1.77227,-1.16125 -1.89835,-1.12727 -3.375,0.75 -1.78004,2.26295 -3.36708,2.47933 -5.3125,0.71875 -1.28856,-1.16612 -1.47958,-1.14142 -3.09375,0.375 -2.06504,1.94 -3.30112,2.02561 -5.125,0.375 -1.27196,-1.15109 -1.4468,-1.15109 -2.71875,0 -1.67135,1.51256 -3.87443,1.58181 -5.78125,0.1875 -1.26805,-0.92723 -1.67367,-0.83934 -3.5625,0.75 -2.36937,1.99369 -2.98104,2.1263 -4.96875,1.0625 -0.99331,-0.53159 -1.61474,-0.42809 -2.28125,0.375 -0.9599,1.15662 -4.57757,1.52789 -5.5625,0.5625 -0.31458,-0.30834 -2.09587,-0.5625 -3.96875,-0.5625 -2.05478,0 -3.52517,-0.37369 -3.71875,-0.9375 -0.18924,-0.55114 0.33143,-0.9375 1.25,-0.9375 0.8859,0 1.53125,-0.48715 1.53125,-1.125 0,-1.46406 -1.98926,-1.43979 -2.8125,0.0312 -0.35238,0.62968 -1.94166,1.28909 -3.5625,1.46875 -1.62089,0.17961 -2.3757,0.12906 -1.65625,-0.0937 1.66334,-0.51512 1.7069,-2.96273 0.0625,-3.59375 -1.09565,-0.42045 -2.43555,0.59745 -2.46875,1.875 -0.006,0.24253 -1.35724,0.89534 -3,1.4375 -2.63754,0.87048 -3.13775,0.83845 -4.375,-0.28125 -1.18508,-1.07247 -1.72809,-1.12259 -3.4375,-0.34375 -1.57197,0.71621 -2.32567,0.72561 -3.4375,0.0312 -0.78619,-0.49087 -2.57461,-0.90615 -3.96875,-0.90615 -1.39413,0 -2.98161,-0.50039 -3.5,-1.125 -0.64743,-0.78011 -1.64635,-1.01959 -3.25,-0.71875 -1.86119,0.34917 -2.65631,0.0938 -3.90625,-1.34375 -1.17903,-1.35599 -2.64998,-1.95736 -5.937497,-2.34375 -2.404447,-0.2826 -4.967587,-1.03599 -5.6875,-1.6875 -0.719913,-0.65152 -2.428296,-1.38643 -3.78125,-1.65625 -1.82376,-0.3637 -2.736402,-1.14493 -3.53125,-2.9375 -0.781871,-1.76331 -1.418399,-2.30361 -2.375,-2 -0.856082,0.27171 -1.598608,-0.11428 -2.15625,-1.15625 -2.053335,-2.54673 -7.752858,-0.62897 -9.03125,-5.21875 -2.553427,-2.4677 -4.956077,-4.46875 -5.34375,-4.46875 -0.414523,0 -0.470199,-1.298 -0.15625,-3.15625 0.486715,-2.8808 0.406014,-3.08973 -0.71875,-2.15625 -0.678525,0.56313 -1.299785,0.91137 -1.40625,0.75 -0.106464,-0.16136 -0.680256,-1.24443 -1.25,-2.375 -1.131834,-2.24592 -2.82413,-2.6988 -3.5,-0.9375 -0.689901,1.79786 -1.75,0.50561 -1.75,-2.125 0,-3.30795 -2.96458,-6.14995 -3.03125,-2.90625 -0.02069,1.00696 -0.449118,0.80034 -1.84375,-0.90625 -1.199735,-1.4681 -1.515928,-2.38058 -0.96875,-2.71875 1.524604,-0.94227 0.02197,-2.6818 -2.375,-2.75 -2.600236,-0.0739 -4.5,-1.29489 -4.5,-2.875 0,-0.60849 0.672058,-0.94981 1.65625,-0.84375 2.289905,0.24692 2.572448,-1.91297 0.5,-3.84375 -1.491813,-1.38984 -1.806192,-1.43304 -2.90625,-0.4375 -1.659495,1.50183 -2.25,1.40863 -2.25,-0.375 0,-0.82223 0.320368,-1.5 0.6875,-1.5 1.131999,0 1.593595,-2.29463 0.78125,-3.8125 -0.964137,-1.80152 -3.6875,-1.91353 -3.6875,-0.15625 0,0.97624 -0.228735,1.05252 -0.90625,0.375 -0.67751,-0.6775 -0.638306,-1.32787 0.15625,-2.8125 0.752608,-1.40626 0.82437,-2.27101 0.25,-3.1875 -0.89522,-1.42843 -4,-2.15608 -4,-0.9375 0,0.43971 -0.338887,0.8125 -0.75,0.8125 -1.022834,0 -0.936825,-3.45571 0.125,-5.15625 1.439027,-2.30425 0.331131,-3.78108 -2.5,-3.34375 -2.14718,0.33169 -2.762562,0.0166 -4.5625,-2.28125 -1.362895,-1.73985 -1.984957,-3.36946 -1.875,-4.8125 0.09182,-1.20495 -0.288531,-2.71241 -0.8125,-3.34375 -0.703341,-0.84747 -0.715142,-1.55355 -0.125,-2.65625 1.126705,-2.10527 1.006163,-2.83051 -0.71875,-4.4375 -0.92311,-0.86002 -1.351079,-1.87297 -1.0625,-2.625 0.599696,-1.56267 1.8125,-1.63375 1.8125,-0.0937 0,0.64096 0.338887,0.97283 0.75,0.71875 1.21245,-0.74934 0.874627,-3.01988 -0.78125,-5.125 -0.848942,-1.07925 -1.331205,-2.31523 -1.0625,-2.75 0.26864,-0.43476 0.264107,-1.37426 0,-2.0625 -0.413266,-1.07697 -0.557392,-1.07195 -1.15625,-0.125 -0.591377,0.93511 -0.70895,0.90356 -0.71875,-0.15625 -0.0063,-0.68581 -0.239138,-1.87193 -0.5,-2.625 -0.414859,-1.19759 -0.30322,-1.18261 0.71875,0.125 1.335425,1.70867 1.473158,1.49898 2.71875,-4.09375 0.984789,-4.42172 0.966009,-4.5146 -0.375,-4 -0.632539,0.24273 -1.774305,1.66466 -2.5625,3.15625 l -1.4375,2.6875 -0.03125,-2.71875 c -0.02129,-1.75439 0.371385,-2.87906 1.09375,-3.15625 1.426319,-0.54732 1.473689,-4.64597 0.0625,-5.1875 -0.577017,-0.22163 -1.763117,-0.22539 -2.625,0 -2.23755,0.58513 -1.930618,-0.8415 0.40625,-1.90625 1.753797,-0.79908 1.913943,-1.2235 1.5625,-3.84375 -0.268539,-2.0021 -0.05775,-3.18868 0.65625,-3.78125 0.575394,-0.47753 1.03125,-1.67881 1.03125,-2.65625 0,-1.11885 0.560995,-1.72486 1.4375,-1.78125 z m 507.343747,0.1875 c -1.57465,0.15972 -3.80071,2.43793 -3.125,3.53125 0.29427,0.47615 1.43951,0.75137 2.53125,0.625 2.35255,-0.27224 3.25395,-3.28153 1.21875,-4.0625 -0.1881,-0.0722 -0.40005,-0.11657 -0.625,-0.0937 z m -477.999997,0.65625 c -0.135643,0.002 -0.256725,0.0223 -0.375,0.0312 -1.655848,0.12481 -1.68459,1.50795 -0.03125,4.03125 1.619376,2.4715 2.90625,1.9471 2.90625,-1.21875 0,-2.23041 -0.267301,-2.60595 -2.0625,-2.8125 -0.151652,-0.0174 -0.301857,-0.0334 -0.4375,-0.0312 z m 230.343747,0 c -0.78147,0.0537 -1,0.44239 -1,1.40625 0,0.87655 0.35567,2.23606 0.78125,3.03125 0.98367,1.83801 1.64406,1.81893 3.375,-0.0937 1.7479,-1.9314 0.74017,-3.96654 -2.15625,-4.3125 -0.39918,-0.0477 -0.73951,-0.0491 -1,-0.0312 z m -235.937497,0.875 c -1.054537,0.3515 -2.237037,4.05559 -1.71875,5.40625 0.925359,2.41144 2.33457,1.07867 2.40625,-2.28125 0.04329,-2.02962 -0.224362,-3.27939 -0.6875,-3.125 z m 555.093747,0.8125 c 0.90749,0.0549 1.52939,0.98314 1.03125,2.28125 -0.51483,1.34161 -1.16206,1.44163 -2.75,0.4375 -0.981,-0.62034 -0.95233,-0.85988 0.1875,-2 0.37842,-0.37852 0.75499,-0.60941 1.125,-0.6875 0.13875,-0.0293 0.27661,-0.0391 0.40625,-0.0312 z m 31.5,1.21875 c 1.7703,0 1.54064,4.21245 -0.28125,5.1875 -1.80186,0.96433 -1.78748,0.96248 -2.875,-0.125 -2.04504,-2.04504 -0.16224,-5.0625 3.15625,-5.0625 z m -357.3125,1.65625 c -1.32481,0.16026 -2.05478,1.12339 -1.5625,2.40625 0.27135,0.70715 1.35097,1.15625 2.71875,1.15625 2.98578,0 3.25682,-2.70637 0.34375,-3.4375 -0.55278,-0.13874 -1.0584,-0.17842 -1.5,-0.125 z m -187.874997,0.5625 c -1.069255,0 -1.737341,1.44876 -1.25,2.71875 0.239088,0.62299 0.773478,0.91211 1.1875,0.65625 0.951319,-0.58796 1.005177,-3.375 0.0625,-3.375 z m 600.437497,0.0625 c -0.45093,-0.009 -0.92062,0.5181 -1.40625,1.625 -0.47299,1.07809 -1.38702,1.70887 -2.5625,1.71875 -1.66581,0.0146 -1.84224,0.34219 -2.0625,3.71875 -0.18566,2.84615 0.0476,3.93692 1.03125,4.65625 1.81074,1.32404 1.92287,1.21321 1.375,-1.28125 -0.39755,-1.81006 -0.0137,-2.84563 2.15625,-5.6875 1.46169,-1.91432 2.50429,-3.79538 2.28125,-4.15625 -0.25322,-0.40973 -0.54194,-0.58813 -0.8125,-0.59375 z m -63.25,0.71875 c 0.51389,-0.0131 0.9375,0.81596 0.9375,1.84375 0,1.4829 -0.3646,1.875 -1.8125,1.875 -1.00352,0 -2.04152,-0.34278 -2.3125,-0.78125 -0.53265,-0.86185 1.66436,-2.89875 3.1875,-2.9375 z m -176.3125,0.6875 c 0.15816,-0.028 0.32711,0.0146 0.53125,0.21875 0.24191,0.2419 0.30328,1.06087 0.125,1.8125 -0.30971,1.30585 -0.35037,1.31197 -0.90625,0.0312 -0.43968,-1.01299 -0.22448,-1.97845 0.25,-2.0625 z m 85.125,0.3125 c -1.40692,0.006 -2.8125,1.45741 -2.8125,3.375 0,1.15035 0.197,2.29076 0.4375,2.53125 0.24051,0.24052 1.42661,0.074 2.625,-0.34375 2.41784,-0.84287 3.01574,-3.46206 1.125,-5.03125 -0.42172,-0.34999 -0.90603,-0.53325 -1.375,-0.53125 z m 81.34375,0.46875 c 0.88488,0 2.5625,2.16275 2.5625,3.3125 0,0.76305 -4.38104,0.45548 -4.875,-0.34375 -0.59743,-0.96666 0.95411,-2.96875 2.3125,-2.96875 z M 25.133363,212.6462 c -0.460647,0.0458 -0.794595,0.3772 -1.25,1 -0.553898,0.7575 -1,1.80565 -1,2.34375 0,1.1468 1.952895,1.33749 2.625,0.25 0.254082,-0.41111 1.277728,-0.75 2.28125,-0.75 2.511741,0 2.285739,-0.94057 -0.53125,-2.1875 -1.065667,-0.4717 -1.664353,-0.70201 -2.125,-0.65625 z m 648.249997,0.0312 c 1.28078,0.0317 1.51302,2.09453 0.15625,3.59375 -1.52401,1.68402 -2.65933,1.84067 -3.9375,0.5625 -1.41532,-1.41533 -1.09586,-3.59375 0.53125,-3.59375 0.7886,0 1.97817,-0.18929 2.625,-0.4375 0.22309,-0.0856 0.44203,-0.12954 0.625,-0.125 z m -390.5,0.0312 c -1.34231,0.0716 -1.39645,2.44208 0.21875,3.75 2.38425,1.93063 4.70721,1.38841 5,-1.15625 0.20186,-1.75436 -0.0399,-2.0625 -1.625,-2.0625 -1.02146,0 -2.34026,-0.17706 -2.9375,-0.40625 -0.24241,-0.093 -0.46449,-0.13523 -0.65625,-0.125 z m 412.96875,0.59385 c -0.56816,0.0338 -1.04965,0.51087 -1.34375,1.4375 -0.54054,1.70306 -1.88408,1.93035 -3.3125,0.5625 -0.79702,-0.76321 -0.86441,-0.50708 -0.46875,1.375 0.2664,1.26727 0.12702,3.77767 -0.28125,5.59375 -1.02318,4.5513 0.37272,6.65625 4.34375,6.65625 1.90754,0 3.28415,0.5018 4.1875,1.5 0.74412,0.82223 1.96053,1.5 2.6875,1.5 0.72697,0 2.27539,0.80973 3.4375,1.78125 1.16211,0.97153 2.94096,2.02297 3.96875,2.34375 1.02778,0.32078 2.30654,1.20551 2.84375,1.96875 1.28389,1.82413 2.0077,1.76591 4.9375,-0.46875 2.97861,-2.27191 3.56387,-2.31377 5.375,-0.3125 1.39886,1.54574 1.39865,1.5987 -0.59375,3.3125 -1.36433,1.17353 -2.59247,1.59784 -3.75,1.3125 -1.5996,-0.39431 -1.56365,-0.27235 0.53125,1.90625 1.23333,1.28263 2.56063,2.33233 2.9375,2.34375 0.37683,0.0117 0.48199,-0.20551 0.21875,-0.46875 -0.6327,-0.6327 1.81953,-4.74688 2.8125,-4.71875 1.78657,0.0505 5.75388,4.64548 6.15625,7.125 0.27052,1.667 0.10886,2.5625 -0.4375,2.5625 -0.46489,0 -0.84375,0.3823 -0.84375,0.84375 0,0.56489 0.30842,0.58861 0.9375,0.0937 0.51389,-0.40426 2.20831,-0.56834 3.75,-0.375 2.58629,0.32433 2.78125,0.52813 2.78125,2.75 0,1.80361 0.47538,2.65719 1.875,3.40625 1.39927,0.74888 1.875,1.60414 1.875,3.40625 0,2.14496 -0.26742,2.48154 -2.53125,2.90625 -2.7007,0.50665 -3.3792,1.72389 -3.875,7.15625 -0.50022,5.48083 4.75649,8.24538 8.84375,4.65625 1.37574,-1.20803 1.75363,-4.27125 0.625,-4.96875 -0.36446,-0.22529 -1.08568,0.0752 -1.59375,0.6875 -1.16773,1.40703 -1.81926,1.39943 -3.25,-0.0312 -2.26153,-2.26153 0.46311,-4.42442 5.1875,-4.125 1.33972,0.0849 2.70965,-0.37376 3.28125,-1.0625 0.54005,-0.65072 0.84888,-1.2509 0.6875,-1.34375 -0.1613,-0.0928 -0.92403,-0.53015 -1.71875,-0.96875 -2.72359,-1.50299 -3.23833,-3.25115 -1.375,-4.78125 1.94658,-1.43573 2.99876,-7.78526 -0.71875,-4.71875 -2.53795,2.29684 -6.39094,-1.55538 -4.09375,-4.09375 1.21405,-1.34151 1.22551,-1.49363 -0.0937,-2.6875 -1.24406,-1.12586 -1.49923,-1.14265 -2.34375,-0.125 -2.27006,2.73524 -5.63873,-0.24147 -4.875,-4.3125 0.47513,-2.53269 -0.51642,-4.37271 -1.5,-2.78125 -0.77287,1.25055 -3.0515,0.85386 -4.53125,-0.78125 -1.18664,-1.31122 -1.24754,-1.8633 -0.5,-3.84375 1.12886,-2.99067 0.44648,-4.09505 -1.25,-2 -0.8499,1.04958 -1.7887,1.46517 -2.59375,1.15625 -1.91356,-0.7343 -2.29116,-2.65063 -0.84375,-4.25 -2.51276,-3.54669 -1.90684,-3.41117 -6.375,-5.4375 -0.006,-0.91055 -0.33017,-2.16659 -0.71875,-2.78125 -0.60699,-0.96013 -0.86297,-0.91207 -1.78125,0.34375 -0.92374,1.26329 -1.33596,1.36618 -3.03125,0.59375 -1.82226,-0.83028 -2.53982,-1.95321 -3.78125,-5.78125 -0.48482,-1.49496 -0.4923,-1.49496 -1.3125,0 -0.45111,0.82223 -1.15689,1.71245 -1.59375,2 -0.98177,0.64619 -3.26939,-1.32017 -4.6875,-4.0625 -0.70238,-1.35824 -1.55076,-2.04341 -2.28125,-2 z m -216.6875,0.0312 c -0.12988,0.006 -0.24902,0.008 -0.40625,0.0312 -2.27802,0.33892 -3.43653,2.43252 -2.1875,3.9375 0.54039,0.65114 1.1902,1.1875 1.46875,1.1875 1.08762,0 2.3125,-1.87694 2.3125,-3.5625 0,-1.21425 -0.27831,-1.63664 -1.1875,-1.59375 z m 106.40625,0.65625 c 2.04772,0.018 3.4099,1.21874 2.90625,2.53125 -0.45971,1.19797 -2.78129,1.65621 -3.71875,0.71875 -1.0297,-1.02968 -0.4727,-3.26123 0.8125,-3.25 z m 21.40625,0.75 c 1.91965,0 2.65774,1.07028 2.125,3.125 -0.48775,1.88132 -2.29437,2.23544 -3.15625,0.625 -1.28765,-2.40599 -0.92692,-3.75 1.03125,-3.75 z m -557.156247,0.7813 c -0.484121,-0.01 -1.272835,0.49158 -2.25,1.46875 -2.2168,2.2168 -1.854698,5.19599 0.75,6.1875 1.752818,0.66724 1.99624,0.61571 3,-0.59375 0.769868,-0.92762 0.680517,-1.39616 -0.375,-2.5625 -0.822694,-0.90905 -1.094258,-2.01379 -0.78125,-3 0.314476,-0.99084 0.140371,-1.49002 -0.34375,-1.5 z m 461.812497,1.3125 c 1.17678,0.009 2.4709,0.45719 3.78125,1.375 1.48851,1.04256 1.6807,1.69416 1.375,4.40625 -0.31907,2.83082 -0.1022,3.41494 1.96875,5.3125 1.28077,1.17356 3.15971,2.29179 4.1875,2.5 1.2869,0.26069 1.97506,0.96781 2.15625,2.25 l 0.25,1.875 -1.65625,-1.5 -1.65625,-1.5 -2.09375,2.53125 c -1.42131,1.70129 -2.52396,2.37708 -3.34375,2.0625 -0.67015,-0.25715 -0.98906,-0.81261 -0.71875,-1.25 0.66801,-1.08084 -0.22854,-4.46875 -1.1875,-4.46875 -0.42468,0 -1.13669,0.99726 -1.5625,2.21875 -0.60828,1.74492 -1.34922,2.34725 -3.5,2.75 -3.69772,0.69241 -7.59375,2.37797 -7.59375,3.28125 0,1.36938 -2.14634,0.72685 -2.625,-0.78125 -0.55218,-1.73977 -3.06448,-3.25763 -4.46875,-2.71875 -0.59492,0.22831 -0.81967,1.13069 -0.59375,2.3125 0.33229,1.73833 0.13206,1.90625 -1.96875,1.90625 -1.97769,0 -2.3125,-0.27964 -2.3125,-1.84375 0,-1.10867 -0.64584,-2.1802 -1.59375,-2.6875 -1.8262,-0.97735 -2.68008,-0.33116 -3.03125,2.28125 -0.40201,2.99067 -2.57862,2.79781 -3.15625,-0.28125 -0.31145,-1.66012 -1.03915,-2.76746 -1.96875,-3.0625 -2.15235,-0.68313 -2.96875,0.14541 -2.96875,3.03125 0,1.76051 -0.34431,2.5625 -1.09375,2.5625 -1.36436,0 -2.625,-2.29894 -2.625,-4.75 0,-1.02055 -0.42361,-2.0114 -0.9375,-2.21875 -1.15529,-0.46618 3.0988,-0.7027 11.1875,-0.625 3.38126,0.0325 6.81728,0.41147 7.625,0.84375 0.97473,0.52171 1.59879,0.52872 1.90625,0.0312 0.25477,-0.41222 1.61616,-0.75 3,-0.75 2.18739,0 2.72942,-0.39444 4.25,-3.15625 1.08647,-1.97332 2.36795,-3.29317 3.375,-3.4375 1.14156,-0.16363 1.7754,-0.91522 2.125,-2.59375 0.79572,-3.82035 2.87983,-5.9251 5.46875,-5.90625 z m -235.34375,0.21875 c -0.25674,-6.5e-4 -0.53554,0.0187 -0.84375,0.0625 -1.78506,0.25367 -2.63178,2.05908 -1.875,4.03125 0.70855,1.84642 3.42238,1.27058 4.25,-0.90625 0.79484,-2.09059 0.26593,-3.18294 -1.53125,-3.1875 z m 271.625,0.96875 c 0.26804,0.0119 0.46875,0.30054 0.46875,0.78125 0,0.64093 -0.3389,1.15625 -0.75,1.15625 -0.41111,0 -0.75,-0.30064 -0.75,-0.6875 0,-0.38684 0.33889,-0.90217 0.75,-1.15625 0.10278,-0.0635 0.1919,-0.0977 0.28125,-0.0937 z m -516.249997,0.0937 1.59375,1.40625 c 0.880308,0.78317 1.59975,1.96928 1.59375,2.625 -0.01531,1.5946 -1.217677,3.37325 -1.71875,2.5625 -0.219624,-0.35535 -0.636543,-1.98367 -0.9375,-3.625 l -0.53125,-2.96875 z m 335.062497,0.0625 c 1.30148,-0.0534 2.07135,0.83889 4.46875,4.03125 1.12626,1.49969 1.61257,1.68735 2.375,0.9375 1.30535,-1.28379 2.95301,-1.15616 6.75,0.46875 2.47975,1.0612 3.6464,1.18555 4.96875,0.59375 1.33289,-0.59653 2.22551,-0.48004 3.9375,0.53125 1.52223,0.89917 2.94185,1.15472 4.5,0.8125 2.83377,-0.62241 6.20214,0.73143 7.75,3.09375 0.87406,1.33398 1.84248,1.78125 3.8125,1.78125 1.45645,0 3.34816,0.36328 4.1875,0.8125 1.10364,0.59065 1.75309,0.59065 2.34375,0 1.05179,-1.05178 7.00847,-1.04812 7.65625,0 0.30306,0.49037 1.5993,0.61251 3.375,0.3125 1.64478,-0.27788 4.06092,-0.0996 5.59375,0.40625 1.97572,0.65206 2.92535,0.66839 3.53125,0.0625 1.37209,-1.37209 6.1269,-0.98253 8.25,0.6875 1.78724,1.40586 2.32407,1.45609 6.5625,0.6875 2.54006,-0.46057 5.40326,-0.64229 6.34375,-0.40625 1.50581,0.37793 1.65437,0.78368 1.28125,3.25 -0.23305,1.54039 -0.62021,3.03261 -0.875,3.3125 -0.25479,0.2799 -3.14858,0.66662 -6.4375,0.875 -3.2889,0.20839 -6.86504,0.60703 -7.9375,0.875 -1.41089,0.35255 -2.07635,0.14096 -2.40625,-0.71875 -0.54418,-1.41809 -5.73035,-1.64465 -7.0625,-0.3125 -1.53147,1.53146 -3.27668,-0.59653 -2.28125,-2.78125 1.1036,-2.42214 -0.38283,-4.39759 -2.46875,-3.28125 -1.69651,0.90795 -1.83961,2.62076 -0.28125,3.21875 1.76074,0.67565 1.30548,1.76471 -0.90625,2.1875 -3.49738,0.66857 -5.4375,-0.57946 -5.4375,-3.46875 0,-3.08221 -1.78325,-4.88423 -3.625,-3.6875 -0.84543,0.54933 -1.2055,1.66855 -1.09375,3.5 0.15694,2.57374 -0.66884,3.56642 -1.65625,1.96875 -0.25408,-0.4111 -1.10828,-0.75 -1.90625,-0.75 -0.93461,0 -1.4375,-0.54011 -1.4375,-1.46875 0,-1.68336 -1.89738,-3.78125 -3.40625,-3.78125 -0.57673,0 -1.55553,0.99665 -2.1875,2.21875 -1.01541,1.96358 -1.45462,2.18835 -3.59375,1.78125 -3.16961,-0.60324 -3.15702,-0.62424 -1.34375,-2.4375 2.01576,-2.01577 1.95584,-2.76374 -0.3125,-4.25 -2.47153,-1.61942 -4.125,-0.87334 -4.125,1.84375 0,1.96341 -0.26143,2.21711 -2.78125,2.53125 -3.4026,0.42418 -3.71781,0.24907 -2.15625,-1.3125 1.39954,-1.39952 1.52994,-2.86499 0.4375,-4.90625 -1.87254,-3.49886 -5.7693,-0.34649 -4.90625,3.96875 0.38873,1.94358 0.29612,2.12884 -0.6875,1.3125 -0.92625,-0.76872 -1.38911,-0.72113 -2.53125,0.3125 -1.32732,1.20121 -1.64491,1.12602 -6.34375,-1.75 -2.72441,-1.66752 -5.44768,-3.03125 -6.03125,-3.03125 -0.79519,0 -0.94317,-0.66437 -0.625,-2.625 0.37393,-2.30423 0.21536,-2.625 -1.1875,-2.625 -1.3526,0 -1.59375,0.43505 -1.59375,2.90625 0,3.19724 -1.60428,4.53673 -3.53125,2.9375 -0.60543,-0.50247 -1.96262,-0.9189 -3.03125,-0.9375 -1.70824,-0.0296 -1.9663,-0.3561 -2,-2.65625 -0.0312,-2.12979 -0.3496,-2.64929 -1.71875,-2.84375 -1.29362,-0.18372 -1.65625,0.1161 -1.65625,1.34375 0,0.87785 0.33779,2.22975 0.75,3 1.00044,1.86929 -0.0703,2.43245 -3.375,1.8125 -2.07507,-0.38928 -2.625,-0.83833 -2.625,-2.15625 0,-1.73931 -2.07875,-4.15625 -3.59375,-4.15625 -0.48152,0 -0.875,0.98186 -0.875,2.1875 0,1.55271 -0.44691,2.34334 -1.53125,2.6875 -1.6298,0.51728 -3.71875,-0.72616 -3.71875,-2.21875 0,-1.28775 3.0083,-3.89523 5.59375,-4.875 1.95514,-0.7409 2.35695,-0.64038 3.5,0.875 l 1.28125,1.71875 2.09375,-1.5625 c 3.3316,-2.45176 6.00652,-2.85348 7.125,-1.0625 1.1269,1.80446 1.94354,1.8967 3.625,0.375 0.69517,-0.62913 2.31271,-1.46738 3.625,-1.84375 0.63174,-0.18118 1.12867,-0.29469 1.5625,-0.3125 z m 329.40625,1.875 c 0.38636,0.001 0.76766,0.14267 1.09375,0.46875 1.24607,1.24609 -0.60951,4.6875 -2.53125,4.6875 -1.09535,0 -1.37016,-0.43948 -1.1875,-1.96875 0.22055,-1.84649 1.46593,-3.19142 2.625,-3.1875 z m -599.343747,0.6563 c -1.777581,0 -2.125,0.32317 -2.125,1.90625 0,1.12367 0.904245,2.80947 2.25,4.125 1.247513,1.21949 2.555061,2.1875 2.90625,2.1875 0.351177,0 0.878567,-1.20734 1.156247,-2.6875 0.62203,-3.31565 -1.052694,-5.53125 -4.187497,-5.53125 z m 413.687497,0.125 c -1.51622,0.19757 -2.13414,1.84582 -0.96875,3.25 1.05712,1.27378 1.4737,1.35681 2.875,0.46875 1.51301,-0.95883 0.69698,-3.41422 -1.21875,-3.6875 -0.25109,-0.0358 -0.4709,-0.0595 -0.6875,-0.0312 z m -193.8125,0.625 c 2.68561,0 3.71875,0.30408 3.71875,1.0625 0,0.57646 1.07851,1.42304 2.375,1.875 2.2253,0.77575 2.26061,0.89816 1.09375,2.1875 -0.67982,0.75121 -1.21875,1.73723 -1.21875,2.21875 0,1.80227 -2.97989,3.875 -5.59375,3.875 -1.4389,0 -2.625,-0.33889 -2.625,-0.75 0,-0.41112 -1.02819,-0.75 -2.28125,-0.75 -2.99785,0 -5.9052,3.22949 -5.9375,6.59375 -0.0185,1.92337 -0.29063,2.39032 -1.3125,2.21875 -1.00634,-0.16898 -1.27825,0.24684 -1.125,1.75 0.10956,1.07459 -0.31404,2.35758 -0.9375,2.875 -0.62345,0.51742 -1.125,1.74131 -1.125,2.71875 0,0.99392 -0.43546,1.78125 -1,1.78125 -0.55517,0 -1.826,1.06668 -2.8125,2.375 -0.98648,1.30832 -2.68504,3.33136 -3.78125,4.46875 -1.0962,1.13737 -2.20112,2.75054 -2.46875,3.59375 -0.56679,1.78581 -2.50036,2.03403 -3.125,0.40625 -0.53899,-1.40454 -2.80391,-1.45963 -3.9375,-0.0937 -0.59496,0.71689 -0.60515,1.62364 -0.0937,2.96875 0.95446,2.51041 -0.19552,3.25889 -2.59375,1.6875 -0.9953,-0.65215 -2.13508,-1.18755 -2.5313,-1.18755 -1.3979,0 -3.0625,2.35892 -3.0625,4.34375 0,2.57108 -2.44528,4.3285 -3.78125,2.71875 -2.08356,-2.51054 -4.4375,-0.85871 -4.4375,3.09375 0,2.36564 -1.33823,2.30443 -2.25,-0.0937 -0.39478,-1.03831 -1.28647,-2.11317 -1.96875,-2.375 -1.67009,-0.64086 -3.34074,1.77074 -2.78125,4 0.52548,2.09364 -0.82502,2.35818 -2.84375,0.53125 -1.11797,-1.01174 -1.71849,-1.10406 -3.25,-0.40625 -1.79982,0.82004 -1.86437,1.06726 -1.46875,5.875 0.45709,5.55488 1.20143,6.96875 3.71875,6.96875 1.16494,0 1.84834,0.55441 2.15625,1.78125 0.50405,2.00807 2.56377,3.12373 3.6875,2 0.48874,-0.48875 0.46915,-1.07173 -0.0937,-1.75 -1.36913,-1.6497 0.50884,-3.54003 3.03125,-3.03125 1.50344,0.30324 2.0625,0.87544 2.0625,2.09375 0,0.91615 0.63288,2.23779 1.40625,2.9375 1.32428,1.19914 1.48462,1.20287 2.6875,0 0.81688,-0.81687 1.1397,-2.05987 0.9375,-3.4375 -0.23908,-1.62896 -0.0498,-2.05691 0.75,-1.75 0.58169,0.22322 1.52299,0.40625 2.09375,0.40625 0.72403,0 0.98982,0.83638 0.875,2.71875 -0.21893,3.59029 1.65326,4.97344 3.9375,2.90625 1.03905,-0.9403 1.45122,-1.98047 1.1875,-3.03125 -0.36582,-1.45756 -0.0932,-1.59625 2.875,-1.53125 l 3.25,0.0625 -1.78125,1.65625 c -1.9324,1.79119 -2.19854,3.26053 -1,5.5 0.93281,1.74297 0.78463,1.78138 -1.3125,0.3125 -0.89208,-0.62484 -2.56657,-1.12505 -3.71875,-1.09375 -1.15217,0.0312 -4.76067,-0.2673 -8,-0.6875 -4.11386,-0.53371 -6.33836,-0.52354 -7.375,0.0312 -0.81625,0.4368 -2.50616,0.62465 -3.78125,0.4375 -1.27509,-0.18715 -3.48337,0.13728 -4.875,0.71875 -3.74238,1.56366 -7.02341,1.03217 -8.15625,-1.34375 -0.51395,-1.07789 -1.43846,-2.38832 -2.0625,-2.90625 -1.00707,-0.83578 -0.98091,-1.06852 0.1875,-1.9375 1.09004,-0.8107 1.14083,-1.19305 0.375,-2.3125 -2.67801,-3.91452 -3.19817,-5.48903 -2.40625,-6.96875 0.45797,-0.85571 1.55507,-1.5 2.59375,-1.5 1.08218,0 2.82159,-1.0577 4.34375,-2.625 1.39743,-1.43891 3.19384,-2.59375 4,-2.59375 0.80618,0 2.18065,-0.94329 3.03125,-2.09375 1.16603,-1.57714 2.19072,-2.1299 4.21875,-2.1875 4.63748,-0.13146 10.99024,-2.49568 11.875,-4.4375 0.43688,-0.95887 1.24991,-1.75 1.78125,-1.75 1.98589,0 4.46298,-1.64766 5.6875,-3.78125 0.75396,-1.3137 1.86638,-2.21875 2.78125,-2.21875 0.84407,0 2.29646,-0.86585 3.21875,-1.9375 0.92229,-1.07165 2.419,-2.21741 3.3125,-2.5625 0.89352,-0.34511 1.7095,-1.40044 1.84375,-2.34375 0.14297,-1.00439 1.12866,-2.15445 2.375,-2.75 1.79521,-0.85785 2.07101,-1.32989 1.65625,-3 -1.31802,-5.30707 -1.2897,-5.70122 0.625,-7.5 1.77828,-1.6706 1.83476,-1.89819 0.8125,-3.875 -0.59884,-1.15802 -1.09375,-2.58289 -1.09375,-3.15625 0,-1.43206 2.41961,-3.5 4.09375,-3.5 0.75749,0 1.99164,-0.56369 2.75,-1.25 1.29125,-1.16855 1.44741,-1.15506 2.40625,0.15625 0.97908,1.33897 1.1418,1.29003 3.75,-1 2.28591,-2.00707 3.32711,-2.40625 6.4375,-2.40625 z m 385.09375,0.5625 1.90625,1.9375 c 1.6123,1.61231 1.78149,2.0832 0.96875,3.0625 -1.1059,1.33254 -2.71259,1.5286 -3.40625,0.40625 -0.26028,-0.42115 -0.24836,-1.82062 0.0312,-3.09375 l 0.5,-2.3125 z m -366.5,0.21875 1.9375,0.0312 -2.03125,1.125 c -1.37358,0.74519 -2.0625,1.72231 -2.0625,2.9375 0,1.03291 -0.6163,2.15424 -1.4375,2.59375 -2.13963,1.14509 -2.7348,0.96596 -3.6875,-1.125 -0.73085,-1.60407 -0.66656,-1.97203 0.4375,-2.375 0.71695,-0.26166 2.11332,-1.0915 3.09375,-1.84375 0.98046,-0.75225 2.67487,-1.36025 3.75,-1.34375 z m 215.65625,0.71875 c -1.91888,0 -2.36664,1.38336 -0.90625,2.84375 1.11236,1.11233 1.56093,1.12655 2.625,0.0625 1.26331,-1.26333 0.3032,-2.90625 -1.71875,-2.90625 z m -487.812497,1.5625 c 0.104713,0.0203 0.1513,0.26786 0.15625,0.8125 0.0063,0.69518 -0.338885,1.49591 -0.75,1.75 -0.94601,0.58467 -0.94601,-0.41116 0,-1.875 0.312225,-0.48314 0.489037,-0.70781 0.59375,-0.6875 z m 508.906247,0.96875 c 0.12133,0.01 0.42153,0.20719 0.875,0.5625 1.52478,1.19476 2.3591,2.28817 2.375,3.0625 0.0285,1.39342 -1.4828,0.3517 -2.53125,-1.75 -0.6783,-1.3596 -0.92096,-1.89163 -0.71875,-1.875 z m 137.40625,1.21875 c 0.61238,0 1.47915,0.70608 1.9375,1.5625 0.66483,1.24224 0.56566,1.82572 -0.46875,2.96875 -1.50596,1.66405 -3.17304,1.85959 -3.71875,0.4375 -0.57897,-1.50881 0.98987,-4.96875 2.25,-4.96875 z m -404.21875,0.40625 c -0.93973,-0.0288 -2.23308,2.34053 -1.59375,3.375 0.26225,0.42432 0.86752,0.65856 1.34375,0.5 1.15984,-0.38614 1.55883,-2.75368 0.625,-3.6875 -0.11285,-0.11285 -0.24075,-0.18339 -0.375,-0.1875 z m -24.03125,0.0937 c -0.79196,0.13013 -0.9852,1.2268 -0.25,2.65625 0.37003,0.71946 1.43692,1.3125 2.40625,1.3125 2.14872,0 3.23642,-2.11274 1.375,-2.6875 -0.71252,-0.22001 -1.87236,-0.69623 -2.5625,-1.0625 -0.38245,-0.20298 -0.70476,-0.26213 -0.96875,-0.21875 z m -7.03125,0.25 c -2.56526,0 -3.50815,1.71058 -1.84375,3.375 1.07275,1.07276 1.31359,1.06478 2.59375,-0.0937 2.08117,-1.88344 1.76505,-3.28125 -0.75,-3.28125 z m 38.78125,0.0625 c -0.0915,-0.008 -0.17028,0.0105 -0.25,0.0312 -0.0911,0.0237 -0.18307,0.0893 -0.25,0.15625 -0.21942,0.21937 -0.17723,0.74903 0.0937,1.1875 0.60898,0.9853 1.90625,1.04902 1.90625,0.0937 0,-0.67522 -0.85987,-1.41022 -1.5,-1.46875 z m -208.1875,2.15625 c -2.59375,0 -2.98883,1.35375 -1.03125,3.4375 1.47789,1.57314 1.84396,1.68729 2.75,0.78125 1.55349,-1.55348 0.47046,-4.21875 -1.71875,-4.21875 z m 555.9375,0.59375 c -0.19837,-0.002 -0.36217,0.0804 -0.5,0.21875 -0.55069,0.55278 -0.25751,1.17482 1,2.125 1.51543,1.14507 1.72194,1.79442 1.34375,4.125 -0.37601,2.31702 -0.23916,2.73378 0.8125,2.53125 0.68932,-0.13278 1.57222,-1.18496 1.96875,-2.3125 0.63263,-1.79886 0.4122,-2.36094 -1.8125,-4.65625 -1.33324,-1.37555 -2.21738,-2.02521 -2.8125,-2.03125 z m -191.28125,0.21875 c 0.34186,0.0198 0.59478,0.25342 0.84375,0.65625 0.2367,0.38299 -0.3167,1.21192 -1.21875,1.84375 -1.46128,1.02353 -1.55259,1.40918 -0.84375,3.71875 0.64751,2.10981 0.61225,2.68838 -0.28125,3.03125 -2.00371,0.76889 -2.32077,0.44021 -2.625,-2.75 -0.24991,-2.62049 0.0182,-3.44153 1.53125,-4.84375 1.24173,-1.1508 2.02398,-1.68924 2.59375,-1.65625 z m 246.21875,0.8125 c 0.13649,-0.002 0.28874,0.01 0.4375,0.0312 2.26964,0.32451 2.45631,2.60916 0.375,4.34375 -1.92982,1.60832 -3.28946,1.84909 -3.96875,0.75 -0.24662,-0.39904 0.0928,-1.76035 0.75,-3.03125 0.76287,-1.47523 1.45085,-2.07718 2.40625,-2.09375 z m -649.656247,0.0937 c 0.213881,0.0203 0.3125,0.37032 0.3125,1.125 0,1.8048 -0.414315,2.09478 -1.1875,0.84375 -0.276225,-0.44694 -0.113768,-1.19875 0.34375,-1.65625 0.229054,-0.22906 0.402922,-0.32466 0.53125,-0.3125 z m 202.281247,1.34375 c -0.2771,-0.004 -0.59545,0.0119 -0.9375,0.0625 -2.4367,0.36033 -3.57633,2.45137 -2.375,4.375 0.52414,0.84036 0.77499,1.8556 0.53125,2.25 -0.24377,0.39438 -0.25823,1.08218 0,1.5 0.66769,1.08034 1.875,0.13194 1.875,-1.46875 0,-0.74253 0.71862,-2.26245 1.59375,-3.375 1.58081,-2.00968 1.25223,-3.31633 -0.6875,-3.34375 z m 192.5,0.0312 c 0.90112,0.0201 1.16124,0.86782 1.375,3.25 0.17695,1.97194 -0.13182,2.81001 -1.1875,3.375 -1.6813,0.8998 -2.22195,0.94068 -2.28125,0.1875 -0.47096,-5.98437 -0.44231,-6.14589 0.96875,-6.59375 0.4664,-0.14803 0.82463,-0.22544 1.125,-0.21875 z m -182.3125,0.81265 c -0.26137,0.0146 -0.51688,0.17313 -0.78125,0.4375 -0.70499,0.70498 -0.5807,1.12442 0.53125,1.9375 0.78292,0.57252 1.87214,0.8732 2.4375,0.65625 0.79758,-0.30604 0.70182,-0.76692 -0.5,-1.96875 -0.75622,-0.75621 -1.25188,-1.08683 -1.6875,-1.0625 z m -208.343747,0.90625 c 0.87887,-0.10582 2.930821,2.30442 3.78125,4.65625 0.68126,1.88401 1.360185,2.5 2.6875,2.5 2.761228,0 4.495142,1.27787 5.03125,3.71875 0.343316,1.5631 1.2458,2.60507 3,3.4375 1.510993,0.717 2.611572,1.84502 2.75,2.8125 0.128686,0.89942 1.172111,2.05019 2.375,2.625 1.184494,0.56603 2.522362,2.00488 2.96875,3.1875 0.537662,1.42442 1.651789,2.43097 3.28125,2.96875 1.352849,0.44647 2.80895,1.48839 3.25,2.3125 0.44105,0.82411 1.973157,1.99497 3.406247,2.59375 1.66213,0.69448 2.87645,1.84701 3.34375,3.1875 0.59315,1.70157 1.07859,2.03366 2.5625,1.75 2.16263,-0.41342 5.27803,1.4222 5.9375,3.5 0.25638,0.80778 1.60884,1.84306 3.03125,2.3125 1.42241,0.46944 2.96451,1.51836 3.40625,2.34375 0.57909,1.08179 1.26288,1.37298 2.5,1.0625 1.13656,-0.28528 2.65321,0.20544 4.46875,1.4375 1.50747,1.02299 3.50784,1.875 4.4375,1.875 0.92965,0 2.70558,0.73125 3.9375,1.65625 2.1009,1.57749 2.17525,1.85771 1.4375,4.375 -0.79444,2.71079 -2.82635,3.3382 -2.125,0.65625 0.60792,-2.32468 -0.39016,-5.06297 -2.0625,-5.59375 -1.68988,-0.53634 -4.4375,1.3971 -4.4375,3.125 0,0.55295 -0.51915,1 -1.15625,1 -0.84098,0 -0.98449,-0.32177 -0.5,-1.1875 1.78811,-3.19518 -2.05058,-7.75094 -4.6875,-5.5625 -0.62883,0.5219 -1.125,1.70456 -1.125,2.625 0,1.38075 -0.33719,1.60646 -1.875,1.3125 -1.70857,-0.32663 -1.83132,-0.59174 -1.40625,-3.25 0.80468,-5.03221 -3.11248,-7.22312 -5.3125,-2.96875 -1.04447,2.01977 -1.32256,2.14241 -3.5625,1.5 -1.33713,-0.38348 -2.49885,-0.6875 -2.59375,-0.6875 -0.0949,0 -0.68978,-0.9833 -1.3125,-2.1875 -1.06687,-2.06311 -3.49501,-3.52614 -5.3125,-3.1875 -1.948131,0.36299 -3.687497,-3.00251 -3.687497,-7.15625 0,-5.53584 -1.569126,-6.7011 -4.8125,-3.59375 -1.978385,1.89542 -2.282954,2.01066 -2.71875,0.875 -0.272291,-0.70958 -0.121951,-1.69055 0.34375,-2.15625 1.11416,-1.11413 1.071696,-4.4908 -0.0625,-5.625 -1.474613,-1.47461 -3.560973,-1.02361 -4.46875,0.96875 -0.972808,2.13508 -1.942105,2.41691 -2.59375,0.71875 -0.273637,-0.71309 0.184288,-1.60046 1.15625,-2.28125 2.721762,-1.90638 1.648223,-6.28125 -1.53125,-6.28125 -0.716692,0 -1.761553,0.70005 -2.34375,1.53125 -0.925305,1.32108 -1.189866,1.35114 -2,0.375 -0.747785,-0.90104 -0.68332,-1.34792 0.28125,-2.3125 1.481295,-1.48128 1.483602,-1.83273 0.03125,-3.90625 -1.791007,-2.55702 -3.3125,-2.1032 -3.3125,0.96875 0,1.4389 -0.291801,2.59375 -0.65625,2.59375 -0.656048,0 -1.316903,-2.30985 -2.09375,-7.5625 -0.331844,-2.24382 -0.634105,-2.66008 -1.84375,-2.34375 -1.280208,0.33478 -1.419899,0.13318 -0.96875,-1.75 0.283651,-1.18408 0.685468,-2.44614 0.875,-2.78125 0.071,-0.12554 0.155697,-0.17238 0.28125,-0.1875 z m 602.968747,0.4375 c -1.1348,0.0912 -1.34375,0.58526 -1.34375,2.28125 0,1.4203 -0.66778,2.94904 -1.8125,4.09375 -1.00908,1.0091 -1.55566,1.84375 -1.1875,1.84375 0.36816,0 0.87091,-0.33889 1.125,-0.75 0.69816,-1.12965 3.82838,-0.88608 4.875,0.375 0.50803,0.61215 1.28393,0.89374 1.71875,0.625 0.45699,-0.28244 0.0943,-0.74676 -0.84375,-1.09375 -1.78712,-0.6611 -2.17901,-3.44253 -0.84375,-5.9375 0.67045,-1.2527 0.51692,-1.4375 -1.125,-1.4375 -0.20169,0 -0.40039,-0.013 -0.5625,0 z m -561.25,0.0625 c -1.75675,0.0188 -1.71124,1.89432 0.125,5.6875 0.8589,1.77424 1.80464,3.21875 2.125,3.21875 0.32037,0 0.6048,-1.84958 0.625,-4.09375 0.0303,-3.37739 -0.19416,-4.15648 -1.375,-4.53125 -0.59846,-0.18995 -1.0946,-0.28558 -1.5,-0.28125 z m 567.96875,0 c -0.34872,0.0617 -0.3338,0.51772 0.125,1.375 0.42411,0.79245 0.60777,1.92466 0.375,2.53125 -0.50838,1.3248 2.34759,7.25 3.5,7.25 0.48473,0 0.57813,-0.53189 0.25,-1.3125 -1.28759,-3.06327 -1.1824,-4.5676 0.34375,-6.09375 1.39793,-1.39791 1.41612,-1.57256 0.25,-1.59375 -0.71945,-0.0131 -1.95198,-0.52141 -2.75,-1.125 -1.0056,-0.76059 -1.74503,-1.09292 -2.09375,-1.03125 z m -67.5625,0.6875 c 3.2976,0 4.69423,6.10647 1.5,6.5625 -1.15486,0.16487 -1.84287,-0.36935 -2.53125,-2.03125 -1.05719,-2.55228 -0.60153,-4.53125 1.03125,-4.53125 z m -100.625,0.1875 c 0.078,-0.009 0.15462,-0.007 0.25,0 0.25435,0.018 0.57369,0.1104 0.9375,0.25 0.67316,0.25832 1.03996,0.75695 0.8125,1.125 -0.55946,0.90516 -1.61802,0.84699 -2.21875,-0.125 -0.44967,-0.72756 -0.32744,-1.18441 0.21875,-1.25 z m 14.1875,0.59375 c 0.53404,-0.0903 0.9375,0.16871 0.9375,0.8125 0,0.46858 -0.59305,1.2976 -1.3125,1.84375 -2.41275,1.83155 -3.20655,1.03777 -1.375,-1.375 0.5607,-0.73861 1.21596,-1.19092 1.75,-1.28125 z m 5,0.71875 c 0.64093,0 1.15625,0.3389 1.15625,0.75 0,0.41113 -0.30066,0.71875 -0.6875,0.71875 -0.38686,0 -0.90216,-0.30762 -1.15625,-0.71875 -0.25409,-0.4111 0.0466,-0.75 0.6875,-0.75 z m -256.90625,1.59375 c -1.88942,0.11878 -2.72062,1.51445 -1.96875,3.5 0.50498,1.33351 1.13187,1.65125 2.71875,1.46875 1.73911,-0.20002 2.0625,-0.57662 2.0625,-2.46875 0,-1.85548 -0.33833,-2.28284 -1.9375,-2.46875 -0.3114,-0.0362 -0.60508,-0.0482 -0.875,-0.0312 z m -153.84375,3.625 c -2.10514,0 -2.53723,1.86623 -0.9375,4.0625 1.79322,2.46194 2.19186,2.38444 2.75,-0.40625 0.55784,-2.78918 0.14693,-3.65625 -1.8125,-3.65625 z m 411.1875,0.125 c 0.42064,-0.001 0.87392,0.0624 1.28125,0.21875 1.10263,0.42311 1.13005,0.59142 0.1875,1.1875 -1.44464,0.91367 -2.76639,0.90294 -3.34375,-0.0312 -0.46172,-0.74706 0.61309,-1.37134 1.875,-1.375 z m 5.21875,1.375 c 0.41111,0 0.75,0.13121 0.75,0.3125 0,0.18129 -0.33889,0.55841 -0.75,0.8125 -0.41111,0.25408 -0.75,0.0916 -0.75,-0.34375 0,-0.43538 0.33889,-0.78125 0.75,-0.78125 z m -293.46875,1.5625 c -0.72702,0.0379 -1.41241,0.62878 -1.9375,1.78125 -0.70374,1.54453 -0.60469,2.15106 0.53125,3.40625 1.57478,1.7401 2.44971,1.63079 3.84375,-0.46875 0.83192,-1.25291 0.81477,-1.76994 -0.15625,-3.15625 -0.76031,-1.08549 -1.55423,-1.60038 -2.28125,-1.5625 z m 484.53125,0.25 c -0.79955,0.0341 -2.97552,1.61408 -3.3125,2.625 -0.20493,0.61481 0.38338,0.49027 1.65625,-0.34375 1.07566,-0.70481 1.9375,-1.61726 1.9375,-2.03125 0,-0.18203 -0.0967,-0.25787 -0.28125,-0.25 z m -599.5625,2.65625 c -2.17699,0 -2.52371,1.8087 -0.5625,2.90625 0.89154,0.49893 1.46105,0.44539 1.84375,-0.15625 1.06838,-1.67966 0.57509,-2.75 -1.28125,-2.75 z m -71.062497,0.0312 c 0.273475,0.0239 0.409062,0.20112 0.40625,0.53125 -0.0026,0.30834 -0.988003,1.14343 -2.21875,1.84375 -2.588111,1.47272 -3.061943,0.51004 -0.59375,-1.21875 1.128886,-0.79069 1.950458,-1.19605 2.40625,-1.15625 z m 175.874997,1.9375 c -1.07462,0.0146 -2.04148,0.68136 -1.625,1.6875 0.27546,0.66542 0.66814,1.81179 0.875,2.53125 0.53047,1.84487 1.57721,1.59994 2.5625,-0.5625 0.6321,-1.3873 0.63352,-2.10524 -0.0312,-2.90625 -0.45446,-0.54759 -1.13648,-0.75875 -1.78125,-0.75 z m -96.34375,2.125 c -0.44461,0.003 -0.99905,0.10576 -1.625,0.34375 -2.27394,0.86455 -2.32771,1.03659 -1.0625,3.0625 1.31574,2.10683 3.41918,1.87669 4,-0.4375 0.48773,-1.94334 0.0213,-2.97649 -1.3125,-2.96875 z m 591.34375,0.40625 c -0.43538,0 -0.59783,0.33888 -0.34375,0.75 0.25409,0.4111 0.63121,0.75 0.8125,0.75 0.18129,0 0.3125,-0.3389 0.3125,-0.75 0,-0.41112 -0.34588,-0.75 -0.78125,-0.75 z m -687.624997,0.75 c 0.398212,0 0.71875,0.50832 0.71875,1.125 0,0.61666 -0.119683,1.125 -0.28125,1.125 -0.161575,0 -0.482113,-0.50834 -0.71875,-1.125 -0.236636,-0.61668 -0.116963,-1.125 0.28125,-1.125 z m 199.843747,0.25 c -0.0893,0.015 -0.17847,0.0615 -0.28125,0.125 -0.41112,0.25408 -0.75,0.59995 -0.75,0.78125 0,0.18129 0.33888,0.34375 0.75,0.34375 0.41111,0 0.75,-0.37713 0.75,-0.8125 0,-0.32654 -0.20071,-0.48257 -0.46875,-0.4375 z m 468.3125,0.5 c 0.33314,-0.003 0.73338,0.36871 1.5,1.0625 1.75139,1.58499 1.99916,3.40708 0.65625,4.75 -0.97729,0.97726 -3.01918,1.19957 -3.8125,0.40625 -0.84981,-0.84981 -0.57356,-3.61408 0.53125,-5.125 0.51699,-0.70704 0.79186,-1.09031 1.125,-1.09375 z m -648.187497,0.1875 c 0.233877,-0.0111 0.434209,0.0205 0.625,0.0937 1.408347,0.54043 1.36056,3.92268 -0.0625,4.46875 -1.35264,0.51905 -1.506668,3.44563 -0.1875,3.5625 0.513892,0.0455 1.698463,0.0126 2.625,-0.0625 2.213236,-0.17947 2.972471,1.8878 1.34375,3.6875 -1.893447,2.09223 -0.897806,4.5 1.875,4.5 1.205633,0 2.22758,0.25416 2.25,0.5625 0.02245,0.30834 0.11151,2.00277 0.21875,3.75 0.107234,1.74724 0.0137,3.16225 -0.21875,3.15625 -1.294808,-0.0351 -2.514775,-1.59279 -2.96875,-3.8125 -0.342412,-1.67418 -0.995853,-2.63201 -1.96875,-2.8125 -2.403154,-0.44581 -3.34375,-1.63159 -3.34375,-4.28125 0,-2.00439 -0.434737,-2.73474 -2.15625,-3.625 -2.498944,-1.29225 -3.247718,-2.80014 -2.625,-5.28125 0.45562,-1.81535 2.95661,-3.82838 4.59375,-3.90625 z m 165.656247,0.0312 c -0.41406,-0.0279 -0.87622,0.0586 -1.375,0.25 -1.32702,0.50923 -1.42668,1.32028 -0.34375,3.34375 1.09355,2.04331 3.25111,1.47033 3.53125,-0.9375 0.18162,-1.56108 -0.57033,-2.57254 -1.8125,-2.65625 z m -8.96875,3.5 c -2.5524,0 -3.01233,1.98097 -0.96875,4.15625 2.15772,2.29679 2.75992,2.31014 3.8125,0 1.05028,-2.3051 -0.20009,-4.15625 -2.84375,-4.15625 z m 516.21875,1.84375 c -0.0964,0.0444 -0.18534,0.15731 -0.28125,0.3125 -0.30866,0.4994 -0.16133,1.42265 0.34375,2.03125 1.23404,1.48692 1.62835,0.9022 0.84375,-1.21875 -0.32836,-0.88768 -0.61696,-1.25815 -0.90625,-1.125 z m -6.15625,3.5 c -0.10694,0.0112 -0.30737,0.16513 -0.59375,0.4375 -0.5245,0.49885 -0.90115,2.1611 -0.84375,3.6875 0.0574,1.5264 -0.28824,3.22486 -0.75,3.78125 -0.62117,0.74845 -0.62171,1.47755 0,2.84375 1.16768,2.56214 2.375,2.30876 2.375,-0.5 0,-1.31949 0.55567,-2.7423 1.25,-3.25 1.12892,-0.8255 1.0993,-1.02571 -0.40625,-2.53125 -1.16146,-1.16146 -1.50603,-2.15339 -1.15625,-3.3125 0.24825,-0.82263 0.30324,-1.17491 0.125,-1.15625 z m -27.1875,0.65625 c 0.96876,0 3.46875,2.29787 3.46875,3.1875 0,0.66236 -2.26989,2.78125 -2.96875,2.78125 -0.33141,0 -0.99264,-0.51368 -1.5,-1.125 -1.11942,-1.34883 -0.39968,-4.84375 1,-4.84375 z m -473.5,0.71875 c -0.11613,-0.003 -0.23426,0.0174 -0.34375,0.0312 -1.45986,0.18491 -2.28127,1.87896 -1.0625,4.15625 1.1825,2.20954 2.30688,2.28697 4.09375,0.3125 1.30556,-1.44265 1.30556,-1.55735 0,-3 -0.91777,-1.01412 -1.87458,-1.47795 -2.6875,-1.5 z m -46.59375,0.78125 c -1.38443,0 -2.15736,1.23767 -1.625,2.625 0.54911,1.43099 1.68246,1.38527 2.25,-0.0937 0.71187,-1.85508 0.53947,-2.53125 -0.625,-2.53125 z m -78.90625,1.28125 0,2.59375 c 0,1.42583 0.22592,2.81968 0.5,3.09375 2.04577,2.04578 2.99088,-1.23596 1.0625,-3.6875 l -1.5625,-2 z m 112,0.9375 c 0.21342,-0.0339 0.53082,0.12457 0.9375,0.53125 0.43903,0.43907 0.66697,1.59009 0.5,2.5625 -0.29743,1.7322 -0.3352,1.74045 -1.21875,-0.375 -0.66602,-1.59464 -0.68828,-2.6441 -0.21875,-2.71875 z m -105.1875,4.03125 c -0.8482,-0.0135 -0.80295,0.4671 -0.4375,2.1875 0.2791,1.31395 1.05465,2.99799 1.71875,3.75 1.16487,1.31906 1.25246,1.29798 2.53125,-0.28125 1.53964,-1.90138 1.75378,-4.33849 0.40625,-4.8125 -0.51389,-0.18078 -1.90414,-0.49223 -3.0625,-0.6875 -0.50557,-0.0852 -0.87352,-0.15175 -1.15625,-0.15625 z m 586.6875,1.25 c 0.4286,0.003 0.75,0.4763 0.75,1.40625 0,1.64578 -0.70628,2.23672 -2.0625,1.75 -0.67594,-0.24258 -0.71528,-0.70545 -0.15625,-1.75 0.49574,-0.92631 1.04015,-1.40939 1.46875,-1.40625 z m -644.281247,0.7188 c 0.386859,0 0.6875,0.33889 0.6875,0.75 0,0.41112 -0.515316,0.71875 -1.15625,0.71875 -0.640953,0 -0.972833,-0.30763 -0.71875,-0.71875 0.254084,-0.41111 0.800649,-0.75 1.1875,-0.75 z m 510.812497,0 c -0.64096,0 -0.97283,0.33889 -0.71875,0.75 0.25408,0.41112 0.80065,0.71875 1.1875,0.71875 0.38685,0 0.6875,-0.30763 0.6875,-0.71875 0,-0.41111 -0.51531,-0.75 -1.15625,-0.75 z m 11.40625,0 c -1.5448,0 -3.00374,2.01209 -2.46875,3.40625 0.2503,0.65228 1.0293,1.07423 1.75,0.9375 1.65635,-0.31413 2.32423,-4.34375 0.71875,-4.34375 z m 159.34375,0.78125 c -0.3244,-0.0334 -0.6526,0.36364 -0.96875,1.1875 -0.43044,1.12172 2.30442,6.23729 3.34375,6.25 0.22976,0.003 1.05237,-0.47543 1.8125,-1.03125 1.30185,-0.95194 1.26771,-1.02495 -0.625,-1.5 -1.45615,-0.36547 -2.14662,-1.10812 -2.46875,-2.71875 -0.27733,-1.38667 -0.67666,-2.14452 -1.09375,-2.1875 z m -658.093747,3.3125 c 1.201994,0 1.46547,0.56472 1.53125,3.1875 0.04383,1.74723 -0.157158,3.1875 -0.4375,3.1875 -0.998304,0 -2.07315,-1.92557 -2.3125,-4.125 -0.19572,-1.79846 0.04647,-2.25 1.21875,-2.25 z m 176.124997,1.125 c -2.00647,0 -3.99302,2.16312 -3.375,3.65625 0.27584,0.66644 0.66815,1.78056 0.875,2.5 0.48983,1.7036 0.87672,1.65516 3.53125,-0.46875 2.01361,-1.61111 2.12351,-1.93881 1.3125,-3.71875 -0.51916,-1.13945 -1.49629,-1.96875 -2.34375,-1.96875 z m 339,0.125 c -0.0876,0.006 -0.18239,0.0118 -0.28125,0.0312 -1.59704,0.31462 -4.20556,3.99077 -3.5625,5.03125 0.86106,1.39324 3.62966,0.56612 4.59375,-1.375 0.9267,-1.8658 0.64666,-3.51372 -0.5,-3.6875 -0.0819,-0.0124 -0.16238,-0.006 -0.25,0 z m -532.406247,0.0625 c 0.137734,0.0103 0.238642,0.0511 0.3125,0.125 0.243117,0.24312 -0.207783,0.9319 -1,1.53125 -1.690679,1.27907 -2.5625,1.44195 -2.5625,0.4375 0,-0.79988 2.285861,-2.16613 3.25,-2.09375 z m 656.749997,1.71875 c -0.11332,-6e-4 -0.21944,0.0268 -0.3125,0.0625 -1.64168,0.62997 -1.43383,1.40209 0.71875,2.8125 2.40077,1.57306 2.38642,3.29945 -0.0312,3.90625 -1.28798,0.32325 -2.35966,0.0469 -3.34375,-0.84375 -1.13631,-1.02834 -1.70143,-1.12619 -2.53125,-0.4375 -0.82669,0.6861 -0.86955,1.32739 -0.25,2.96875 1.13676,3.01165 0.26893,4.72724 -2.25,4.4375 -1.93877,-0.22301 -2.04056,-0.42777 -1.875,-3.59375 l 0.15625,-3.375 -1.4375,2.84375 c -0.84775,1.67533 -1.36289,4.09725 -1.28125,5.9375 0.16812,3.79059 -1.51434,4.54034 -4.78125,2.125 -2.46667,-1.82369 -2.9375,-1.90837 -2.9375,-0.59375 0,1.6833 2.84152,6.62513 3.34375,5.8125 0.26509,-0.4289 1.22427,-0.78007 2.125,-0.78125 0.9863,-10e-4 2.22468,-0.90212 3.125,-2.25 1.47667,-2.21077 2.625,-2.8943 2.625,-1.5625 0,0.37685 -0.346,0.80046 -0.75,0.9375 -0.8943,0.30334 -1.09215,4.68351 -0.34375,7.65625 0.41966,1.66694 0.23516,2.39019 -0.8125,3.15625 -2.55161,1.86579 -5.46496,-2.53503 -3.1875,-4.8125 1.28917,-1.28917 0.25367,-1.9095 -1.5625,-0.9375 -1.79156,0.9588 -2.07653,4.07033 -0.65625,7.1875 0.78584,1.72474 0.71027,2.13004 -0.5625,3.0625 -1.31275,0.96177 -1.62515,0.90076 -2.8125,-0.5625 -0.72897,-0.89837 -1.13286,-2.22353 -0.90625,-2.9375 0.27974,-0.88141 -0.0645,-1.41834 -1.09375,-1.6875 -2.19268,-0.57339 -1.94388,-2.78125 0.3125,-2.78125 1.00352,0 2.02717,-0.33888 2.28125,-0.75 0.27156,-0.43939 -0.54939,-0.75 -1.96875,-0.75 -1.32802,0 -3.0197,-0.56084 -3.78125,-1.25 -0.92307,-0.83538 -1.62668,-0.99832 -2.125,-0.5 -0.49832,0.49832 -0.25842,1.2124 0.75,2.125 2.74376,2.48308 1.54464,6.375 -1.96875,6.375 -2.1354,0 -3.53358,-2.51958 -2.96875,-5.34375 0.23662,-1.18311 0.17696,-2.15625 -0.125,-2.15625 -1.24895,0 -2.68679,3.60856 -2.71875,6.75 -0.0316,3.10662 -0.18895,3.3747 -2.09375,3.59375 -1.38067,0.15878 -2.44147,0.93232 -3.1875,2.375 -1.58376,3.06265 -1.38784,5.01842 0.71875,7.125 2.45903,2.45907 6.2718,2.46964 8.5625,0.0312 0.9287,-0.98856 2.83166,-1.98978 4.21875,-2.25 1.59999,-0.30017 3.09342,-1.28266 4.09375,-2.6875 0.99168,-1.39269 2.2244,-2.21875 3.34375,-2.21875 1.15561,0 2.48558,-0.92631 3.78125,-2.625 1.09749,-1.43891 2.43071,-2.59375 2.96875,-2.59375 0.53804,0 1.61791,-0.7875 2.375,-1.75 0.7571,-0.96249 2.12324,-2.18483 3.0625,-2.6875 l 1.71875,-0.90625 -1.90625,-1.5 c -1.04984,-0.82579 -1.90625,-1.95708 -1.90625,-2.53125 0,-1.37794 2.96542,-7.09375 3.6875,-7.09375 0.31012,0 0.8791,1.08173 1.25,2.375 0.78919,2.75174 2.52575,4.06537 4.40625,3.34375 1.24549,-0.47794 1.21817,-0.62269 -0.28125,-2.21875 -1.84625,-1.96525 -2.10258,-4.82253 -0.5,-5.4375 0.60101,-0.23062 1.28234,-1.09075 1.53125,-1.875 0.62648,-1.97384 1.74773,-1.75644 2.59375,0.46875 0.43497,1.14406 1.32342,1.84375 2.25,1.84375 1.93023,0 1.88393,-0.5804 -0.125,-2.71875 -1.24499,-1.32524 -1.44411,-2.07586 -0.90625,-3.28125 0.57236,-1.2827 0.18946,-2.09984 -2.09375,-4.5 -1.56306,-1.64313 -2.83178,-2.52708 -3.625,-2.53125 z m -633.781247,0.40625 c 0.354064,0.0287 0.776758,0.23449 1.34375,0.59375 0.696352,0.44123 0.816077,1.21884 0.40625,2.4375 -0.328349,0.97633 -0.510875,2.34304 -0.40625,3.0625 0.211253,1.45258 0.09853,1.54611 -1.09375,0.75 -1.730197,-1.15527 -2.644087,-3.85242 -1.8125,-5.40625 0.550724,-1.02904 0.972394,-1.4854 1.5625,-1.4375 z m 160.093747,1.5625 c 0.16481,-0.0452 0.23755,0.36974 0.375,1.1875 0.1554,0.92501 0.19383,2.39118 0.0625,3.28125 -0.22082,1.49611 -0.31586,1.5148 -1.28125,0.34375 -0.87911,-1.06641 -0.90473,-1.56934 -0.0625,-3.28125 0.48645,-0.98872 0.74144,-1.48609 0.90625,-1.53125 z M 60.352113,283.0524 c 1.954756,0.1022 2.873411,1.9375 0.96875,1.9375 -0.721333,0 -1.935678,0.5696 -2.6875,1.25 -0.898808,0.81341 -1.34375,0.91248 -1.34375,0.3125 0,-1.89239 1.474015,-3.583 3.0625,-3.5 z m 665.906247,1.9375 c -0.41113,0 -0.75,0.3389 -0.75,0.75 0,0.41112 0.33887,0.75 0.75,0.75 0.4111,0 0.75,-0.33888 0.75,-0.75 0,-0.4111 -0.3389,-0.75 -0.75,-0.75 z m -106.09375,1.5 c -1.86558,0 -2.77365,1.46619 -1.4375,2.3125 1.77966,1.1272 3.85019,0.81976 3.34375,-0.5 -0.24954,-0.65031 -0.4375,-1.32806 -0.4375,-1.5 0,-0.17193 -0.67078,-0.3125 -1.46875,-0.3125 z m -535.124997,0.0312 c 0.04526,-0.0167 0.08178,-0.0107 0.125,0 0.0461,0.0115 0.08215,0.0479 0.125,0.0937 0.128904,0.13799 0.0078,1.60554 -0.28125,3.25 -0.451065,2.5659 -0.614698,2.76283 -1.09375,1.34375 -0.421345,-1.24817 0.4461,-4.43677 1.125,-4.6875 z m 526.437497,0.0625 c -0.1022,-0.009 -0.23485,0.0158 -0.375,0.0625 -0.53959,0.17987 -1.13264,0.7729 -1.3125,1.3125 -0.18687,0.56054 0.0956,0.84312 0.65625,0.65625 0.53957,-0.17987 1.13262,-0.77292 1.3125,-1.3125 0.14015,-0.42041 0.0253,-0.69246 -0.28125,-0.71875 z m -555.687497,0.65625 c 0.411114,0 0.75,0.16244 0.75,0.34375 0,0.18129 -0.338886,0.52717 -0.75,0.78125 -0.411114,0.25409 -0.75,0.12287 -0.75,-0.3125 0,-0.43538 0.338886,-0.8125 0.75,-0.8125 z m 173.906247,0 c 0.54815,0 1,0.64056 1,1.40625 0,0.7657 1.01667,2.66679 2.25,4.21875 2.87258,3.61467 2.85983,4.60623 -0.0312,2.46875 -2.71414,-2.00663 -4.71399,-1.2555 -5.09375,1.9375 -0.2896,2.4351 0.98923,4.13182 3.15625,4.25 1.50889,0.0823 1.51213,0.12633 0.0937,0.46875 -0.82223,0.1985 -2.39262,1.33854 -3.5,2.53125 -2.36874,2.55125 -4.89191,2.75695 -7.5625,0.65625 -2.30721,-1.81485 -3.53125,-1.88903 -3.53125,-0.25 0,0.67413 -0.5618,1.6726 -1.28125,2.21875 -0.71946,0.54614 -1.65138,0.95475 -2.0625,0.90625 -4.65952,-0.54995 -4.86686,-0.70972 -5.6875,-3.96875 -0.68485,-2.71984 -1.17532,-3.28506 -3.03125,-3.65625 -1.55423,-0.31085 -2.50705,-1.18685 -3.28125,-2.90625 -0.60459,-1.34275 -1.50678,-2.98776 -2,-3.6875 -1.24529,-1.76667 -0.3983,-2.31426 1.9375,-1.25 1.37928,0.62845 1.96175,1.45406 1.96875,2.8125 0.024,4.05111 2.91399,5.42976 5.65625,2.6875 1.49342,-1.49342 1.71848,-2.1452 1.09375,-3.3125 -1.04689,-1.95615 -1.035,-1.92954 1.21875,-3.40625 1.9604,-1.28451 1.95301,-1.29477 1.5,0.4375 -0.74353,2.8433 0.2157,4.99441 2.5625,5.8125 1.19556,0.41678 2.15625,1.12999 2.15625,1.5625 0,1.275 2.25833,0.89399 2.78125,-0.46875 0.82516,-2.15033 3.02959,-3.90761 4.46875,-3.53125 0.8501,0.22231 2.08571,-0.35846 3.1875,-1.53125 1.51437,-1.61198 1.66369,-2.16223 0.96875,-3.6875 -0.87012,-1.90967 -0.56665,-2.71875 1.0625,-2.71875 z m 400.5,0 c -1.44249,0 -3.60532,3.42919 -3.0625,4.84375 0.59882,1.56052 2.11748,1.43706 4.0625,-0.375 1.31294,-1.22317 1.49901,-1.834 0.875,-3 -0.42951,-0.80253 -1.28229,-1.46875 -1.875,-1.46875 z m -482.5,0.15625 c 2.57675,-0.11211 4.09057,0.24634 5.40625,1.28125 1.38726,1.09126 2.56866,1.34058 4.875,1.03125 2.44262,-0.32762 3.32256,-0.0837 4.59375,1.1875 1.7925,1.7925 2.97695,1.95653 5.625,0.75 1.52784,-0.69613 2.27264,-0.59253 4.34375,0.6875 1.72499,1.06611 2.83724,1.35344 3.59375,0.875 1.5802,-0.99932 2.68203,-0.90078 1.625,0.15625 -0.49334,0.49333 -0.875,1.77486 -0.875,2.84375 0,2.40108 1.24299,3.75 3.5,3.75 1.53037,0 1.71875,-0.35687 1.71875,-3.25 0,-3.05611 0.19042,-3.32374 2.9375,-4.5625 2.80446,-1.26464 3.017,-1.28781 5.25,0.0312 1.91503,1.13124 2.57152,1.22424 3.78125,0.46875 2.14732,-1.34103 3.61153,-1.11952 1.65625,0.25 -0.91371,0.63999 -1.6381,1.9108 -1.625,2.8125 0.0274,1.89233 1.59869,4.25 2.84375,4.25 1.33413,0 3.58428,2.56432 4.125,4.71875 0.38552,1.5371 0.23994,1.86316 -0.625,1.53125 -0.6061,-0.23258 -1.28234,-1.0595 -1.53125,-1.84375 -0.28187,-0.88808 -1.14875,-1.40625 -2.28125,-1.40625 -1.1232,0 -1.8125,-0.45914 -1.8125,-1.15625 0,-0.62069 -0.67777,-1.70223 -1.5,-2.40625 -0.82223,-0.70402 -1.5,-1.68154 -1.5,-2.1875 0,-4.30977 -4.50613,-6.42802 -6.125,-2.875 -1.01779,2.23377 0.18982,5.625 2,5.625 0.62548,0 1.125,0.33888 1.125,0.75 0,0.41111 -0.78594,0.75 -1.75,0.75 -2.26519,0 -4.21875,2.18369 -4.21875,4.71875 0,1.92699 -0.71351,2.53653 -1.75,1.5 -0.27408,-0.27407 -0.5,-1.25594 -0.5,-2.1875 0,-0.99255 -0.56323,-1.86735 -1.375,-2.125 -1.86237,-0.59108 -5.62317,-4.91788 -5.90625,-6.78125 -0.30549,-2.01094 -2.82336,-4.41927 -3.90625,-3.75 -1.41703,0.87576 -2.41716,4.27034 -1.53125,5.15625 2.08897,2.08899 -0.83184,2.79699 -3.09375,0.75 -1.09903,-0.99461 -1.55207,-1.07327 -2.46875,-0.3125 -2.31114,1.91807 -12.41674,-1.37716 -11.6875,-3.8125 0.7833,-2.61585 0.41284,-4.73606 -0.90625,-5 -1.18307,-0.23673 -1.35417,0.16504 -1.15625,2.90625 0.1736,2.40424 -0.0877,3.38156 -1.09375,4 -1.04743,0.64386 -1.47529,0.53145 -2.0625,-0.5 -0.40958,-0.71945 -1.5864,-1.3125 -2.59375,-1.3125 -2.13078,0 -2.25261,-0.40364 -0.65625,-2 0.63686,-0.63686 1.31208,-2.06039 1.53125,-3.15625 0.35926,-1.79634 0.77206,-2.01572 4,-2.15625 z m 72.1875,0.75 c 0.3061,-0.10331 0.34375,0.34593 0.34375,1.5 0,1.09161 0.33889,2.21467 0.75,2.46875 0.41112,0.25408 0.75,0.76941 0.75,1.15625 0,1.34587 -1.47296,0.68256 -2.71875,-1.21875 -1.16643,-1.78024 -1.18169,-2.00582 -0.0312,-3.15625 0.43139,-0.43141 0.72259,-0.68802 0.90625,-0.75 z m 22.21875,1.34375 c 1.42873,0 1.44126,0.0932 0.28125,1.375 -1.68949,1.86687 -1.55384,4.2865 0.3125,5.59375 0.8523,0.59706 1.24931,1.29991 0.875,1.53125 -1.15368,0.71301 -3.91645,-1.76714 -3.90625,-3.5 0.0201,-3.22722 0.88674,-5 2.4375,-5 z m 286.03125,0.25 c 2.80986,-0.23813 3.57525,1.14927 3.21875,5.125 -0.42358,4.72376 -0.63644,5.01242 -4.21875,5.59375 -2.07284,0.33638 -3.28716,0.091 -4.78125,-0.96875 -4.19909,-2.97833 -5.97341,-3.56538 -7.96875,-2.65625 -1.92838,0.87864 -6.10065,0.43304 -6.8125,-0.71875 -0.55324,-0.89513 -3.86889,-0.82629 -4.4375,0.0937 -0.26158,0.42316 -1.68521,0.56773 -3.28125,0.3125 -2.03743,-0.32579 -3.64186,-0.0417 -5.75,1.03125 -1.87497,0.95427 -3.95638,1.38712 -5.8125,1.21875 -1.6579,-0.15038 -3.86395,0.23799 -5.15625,0.90625 -1.3806,0.71322 -3.10943,0.9906 -4.46875,0.71875 -1.69652,-0.33931 -2.74298,0.0116 -4.4375,1.4375 -1.49394,1.25705 -3.11942,1.85075 -4.96875,1.84375 -3.53023,-0.0147 -4.29361,-0.56333 -4.9375,-3.53125 -0.42712,-1.96872 -0.26429,-2.54141 0.84375,-2.9375 0.75218,-0.2689 2.11905,-1.33936 3.0625,-2.40625 l 1.71875,-1.9375 -0.4375,2.3125 c -0.29247,1.53389 -0.0786,2.60356 0.625,3.1875 1.39979,1.16171 3.5,0.29814 3.5,-1.4375 0,-0.75781 0.56179,-1.71969 1.28125,-2.125 1.08338,-0.61034 1.45385,-0.31624 2.125,1.65625 1.1725,3.446 3.46539,3.49873 5.4375,0.15625 0.86172,-1.46051 1.86325,-2.65625 2.21875,-2.65625 0.35553,0 1.07494,-0.81597 1.625,-1.84375 1.3652,-2.55089 2.2949,-2.34951 1.75,0.375 -0.72079,3.60395 2.78513,6.36665 3.84375,3.03125 0.25148,-0.79239 1.58354,-2.12023 2.96875,-2.9375 l 2.53125,-1.46875 0.90625,2.1875 c 0.99492,2.40195 2.97531,2.83712 4.5,1 0.53428,-0.64378 1.90198,-1.68112 3.0625,-2.28125 2.01597,-1.04249 2.1148,-1.0002 2.125,0.625 0.006,0.93556 0.32949,2.19673 0.71875,2.8125 0.61931,0.97967 1.03687,0.94425 3.3125,-0.28125 1.43032,-0.77029 2.78322,-1.84133 3,-2.40625 0.69684,-1.81596 2.6875,-1.19683 2.6875,0.84375 0,2.15733 1.74846,3.17836 3.28125,1.90625 0.56816,-0.47153 1.50534,-0.74216 2.0625,-0.625 0.64824,0.13636 1.07296,-0.65626 1.21875,-2.15625 0.18839,-1.93793 0.62942,-2.40713 2.5,-2.78125 0.48699,-0.0974 0.94234,-0.18473 1.34375,-0.21875 z m -237.03125,0.5938 c 0.41185,-0.10148 1.03528,0.31884 1.90625,1.28125 1.47327,1.62793 0.98118,3.55932 -1.0625,4.09375 -1.59768,0.4178 -2.01852,3.38775 -0.65625,4.75 0.49453,0.49451 0.55605,0.98359 0.125,1.25 -0.93723,0.57922 -1.6875,-0.21482 -1.6875,-1.8125 0,-0.70973 -0.5405,-1.48972 -1.21875,-1.75 -1.09661,-0.4208 -1.05395,-0.66644 0.375,-2.1875 0.88382,-0.94077 1.59375,-2.61468 1.59375,-3.71875 0,-1.17702 0.21315,-1.80477 0.625,-1.90625 z M 92.789613,290.5524 c 0.149878,-0.0196 0.317297,0.0314 0.46875,0.125 0.44798,0.27686 0.531838,1.28986 0.21875,2.4375 -0.296197,1.08572 -0.50052,2.56181 -0.46875,3.28125 0.0949,2.14874 -1.198062,1.49568 -1.71875,-0.875 -0.46649,-2.12393 0.450856,-4.83174 1.5,-4.96875 z m 39.968747,0.4375 c 0.41112,0 0.75,0.13121 0.75,0.3125 0,0.18129 -0.33888,0.55842 -0.75,0.8125 -0.41111,0.25408 -0.75,0.0916 -0.75,-0.34375 0,-0.43538 0.33889,-0.78125 0.75,-0.78125 z m 25.9375,0.0625 c -1.53942,0.0254 -2.15821,1.30838 -1.65625,3.59375 0.27981,1.27398 0.96633,2.3125 1.5,2.3125 2.73132,0 3.52963,-5.3375 0.875,-5.84375 -0.25719,-0.0491 -0.49883,-0.0661 -0.71875,-0.0625 z m 368.8125,1.84375 c -0.46232,0.0713 -0.8125,0.70846 -0.8125,1.875 0,0.79797 -0.50134,1.4375 -1.09375,1.4375 -1.38443,0 -2.15737,1.26893 -1.625,2.65625 0.61028,1.59038 2.21711,1.34135 4.09375,-0.65625 1.38344,-1.47261 1.52112,-2.08181 0.875,-3.78125 -0.41893,-1.10188 -0.97518,-1.6026 -1.4375,-1.53125 z m 31.03125,0.53125 c 0.89436,-0.0818 1.76769,1.36099 1.78125,3.21875 0.0155,2.1269 2.08315,6.11521 3.625,7 1.13718,0.65256 1.08301,0.8229 -0.4375,1.90625 -1.68231,1.19865 -2.34689,4.125 -0.9375,4.125 0.41112,0 0.75,0.33888 0.75,0.75 0,1.69452 -1.56331,0.5374 -2.9375,-2.15625 -1.00886,-1.97751 -1.21627,-3.09623 -0.6875,-3.625 0.98079,-0.98079 0.54399,-4.11528 -0.625,-4.5 -0.4882,-0.16068 -1.60803,0.45178 -2.5,1.34375 -1.42417,1.42416 -1.49263,1.75736 -0.53125,2.71875 0.8988,0.89879 0.94038,1.55724 0.21875,3.65625 -0.48343,1.40622 -1.63439,3.32657 -2.53125,4.28125 -0.93063,0.99059 -1.625,2.68421 -1.625,3.96875 0,2.46054 -2.6077,5.5 -4.71875,5.5 -1.42319,0 -1.59302,0.98483 -0.53125,2.96875 0.54554,1.01939 0.35924,1.68366 -0.75,2.6875 -1.91815,1.7359 -1.85482,2.79284 0.3125,5.3125 1.44913,1.68472 1.99019,1.92183 2.875,1.1875 0.59881,-0.49698 1.33597,-0.66404 1.625,-0.375 0.28904,0.28903 -0.20419,1.04774 -1.09375,1.71875 -1.36307,1.02816 -1.50417,1.49294 -0.78125,2.84375 0.90361,1.6884 3.94332,2.82687 5.28125,2 1.27303,-0.78678 0.90499,-2.76356 -0.84375,-4.625 -1.9675,-2.09432 -0.36947,-2.40472 2.09375,-0.40625 2.05432,1.66672 2.44487,2.98486 1.65625,5.75 -0.71704,2.51423 0.3652,6.00494 2.0625,6.65625 0.57903,0.22221 1.03125,0.87958 1.03125,1.4375 0,0.55791 0.7703,1.73398 1.71875,2.625 1.33561,1.25474 1.93434,1.40942 2.625,0.71875 0.69067,-0.69068 0.88785,-0.4809 0.90625,0.9375 0.0131,1.00723 0.54247,2.50053 1.15625,3.3125 0.96373,1.27488 1.31843,1.33548 2.65625,0.5 2.00992,-1.2552 2.61795,-0.56647 1.5625,1.75 -0.72219,1.58501 -0.62565,2.0052 0.75,2.96875 1.68117,1.17753 3.59375,0.42569 3.59375,-1.40625 0,-1.45679 5.40413,-0.43681 7.46875,1.40625 1.02778,0.91749 2.88026,2.07379 4.125,2.5625 3.22638,1.26671 4.56282,3.58889 3.03125,5.28125 -1.44671,1.59857 -1.45842,2.95685 -0.0312,4.84375 0.6036,0.79802 1.09375,1.8994 1.09375,2.4375 0,1.53089 -0.98381,1.08166 -2.875,-1.3125 -2.05574,-2.60246 -2.84281,-2.71409 -5,-0.6875 -2.08414,1.95794 -4.43279,1.3038 -3.25,-0.90625 0.43853,-0.81942 0.57091,-2.31419 0.3125,-3.34375 -0.3844,-1.53158 -0.78512,-1.80514 -2.25,-1.4375 -0.98469,0.24715 -2.01771,0.1139 -2.28125,-0.3125 -0.28071,-0.4542 -1.10912,0.0237 -2,1.15625 -0.83631,1.06321 -1.68302,1.7545 -1.875,1.5625 -0.43458,-0.43459 1.2279,-3.66618 2.21875,-4.3125 1.10197,-0.71879 -0.0758,-2.125 -1.78125,-2.125 -0.82499,0 -2.15599,-0.37754 -2.96875,-0.8125 -1.20227,-0.64344 -1.75912,-0.46613 -2.90625,0.9375 -1.08243,1.32443 -1.59613,1.54808 -2.28125,0.875 -0.69007,-0.67793 -0.53838,-1.38479 0.65625,-3.0625 1.46111,-2.05195 1.44684,-2.22972 0.21875,-3.28125 -3.02077,-2.58646 -5.34375,-2.44333 -5.34375,0.3125 0,1.4669 -0.0501,1.4743 -1.4375,0.21875 -0.79633,-0.72059 -1.81457,-1.06968 -2.28125,-0.78125 -0.90246,0.55775 -6.6505,-5.00764 -9.53125,-9.21875 -1.75671,-2.568 -2.25626,-5.375 -0.9375,-5.375 0.42129,0 1.11863,-0.88347 1.53125,-1.96875 0.98265,-2.58454 -0.76032,-4.69928 -3.4375,-4.1875 -2.06832,0.39537 -2.42621,-0.64544 -0.71875,-2.0625 1.57646,-1.30835 1.46541,-1.69083 -1.59375,-5.34375 -2.59533,-3.09905 -2.63148,-3.26635 -1.0625,-3.5 2.51924,-0.37518 2.66827,-2.10656 0.4375,-5.03125 -1.87071,-2.45263 -1.94744,-2.78044 -0.84375,-4 1.55569,-1.71906 1.54284,-5.02535 -0.0312,-5.90625 -1.62953,-0.91192 -0.76546,-3.125 1.21875,-3.125 0.83512,0 1.5,0.33888 1.5,0.75 0,1.39424 2.13623,0.7587 2.625,-0.78125 0.72865,-2.29575 -0.98054,-3.92889 -3.59375,-3.40625 -1.99528,0.39906 -2.14081,0.2851 -1.65625,-1.25 0.29174,-0.92428 0.69804,-2.56373 0.90625,-3.65625 0.62235,-3.26575 3.9981,-6.62737 7.15625,-7.125 2.3023,-0.36279 2.78125,-0.21925 2.78125,0.8125 0,0.69088 0.53716,2.30492 1.1875,3.5625 l 1.1875,2.28125 2.1875,-2.09375 c 1.19968,-1.14937 2.1875,-2.6852 2.1875,-3.40625 0,-0.72105 0.35542,-1.53001 0.8125,-1.8125 0.12698,-0.0785 0.24723,-0.11331 0.375,-0.125 z m -454.53125,0.625 c 0.10505,-0.0192 0.26385,0.005 0.4375,0.0625 0.53815,0.17937 1.25686,1.38741 1.59375,2.6875 0.36185,1.39646 1.40587,2.80024 2.5625,3.40625 1.25294,0.65648 1.6404,1.22465 1.09375,1.5625 -0.46981,0.29035 -0.84375,1.34023 -0.84375,2.34375 0,2.26457 1.74731,2.39538 3.25,0.25 1.82213,-2.60145 6.46875,-0.53952 6.46875,2.875 0,1.0349 0.59305,2.32887 1.3125,2.875 1.21527,0.92257 1.2004,1.00905 -0.3125,1.03125 -1.68767,0.0246 -4,-1.75822 -4,-3.09375 0,-0.48659 -1.32448,-0.575 -3.6875,-0.25 -3.37014,0.46351 -3.89309,0.33009 -5.53125,-1.4375 -1.13559,-1.22533 -2.24113,-1.79122 -3,-1.5 -0.75056,0.28801 -1.38613,0.004 -1.6875,-0.78125 -0.38456,-1.00215 -0.63071,-1.07332 -1.125,-0.28125 -1.102844,1.76729 -3.237856,-0.33131 -3.499997,-3.4375 -0.364472,-4.31857 2.875417,-7.20418 5.093747,-4.53125 1.35846,1.63685 2.42518,1.36319 1.84375,-0.46875 -0.26758,-0.84301 -0.28389,-1.2549 0.0312,-1.3125 z m 118.9375,3.75 c -0.63259,0.06 -1.31694,0.45325 -2.09375,1.15625 -1.83887,1.66415 -1.7361,3.64948 0.28125,5.0625 2.11873,1.48406 3.88525,1.49383 5.125,0 0.81551,-0.98262 0.7427,-1.61654 -0.40625,-3.75 -0.95003,-1.76412 -1.85193,-2.56883 -2.90625,-2.46875 z m 323.09375,0.65625 c -1.57528,0 -1.93042,1.9102 -0.46875,2.5 1.34473,0.54259 1.74694,0.53431 2.25,0.0312 0.83666,-0.83665 -0.36141,-2.53125 -1.78125,-2.53125 z m -88.46875,0.0625 c 0.79521,-0.005 1.21477,0.68339 1.75,2.21875 0.67125,1.92558 0.58365,2.32257 -0.5,2.65625 -0.70454,0.21695 -1.84862,0.71265 -2.5625,1.09375 -1.93759,1.03438 -2.0625,0.90737 -2.0625,-1.90625 0,-1.79552 0.43513,-2.80731 1.4375,-3.34375 0.83829,-0.44864 1.46038,-0.71564 1.9375,-0.71875 z m -159.1875,0.125 c 0.15197,-0.0224 0.29267,-0.0123 0.40625,0 0.75718,0.0818 0.68367,0.93027 -0.0312,2.65625 -0.49011,1.18331 -0.64883,3.06525 -0.375,4.15625 0.70266,2.79962 -0.21242,2.44431 -1.46875,-0.5625 -0.58024,-1.38871 -1.42194,-2.75125 -1.875,-3.03125 -1.3396,-0.82792 -0.95505,-1.48962 1.46875,-2.5625 0.79863,-0.35351 1.41908,-0.58905 1.875,-0.65625 z m -85.90625,0.625 c -0.0774,-4.5e-4 -0.16946,0.0139 -0.25,0.0312 -0.21478,0.0464 -0.42938,0.15288 -0.6875,0.3125 -2.61864,1.61936 -3.0451,3.31879 -1.1875,4.84375 1.23062,1.01026 2.19655,1.21629 3.375,0.78125 2.16374,-0.79875 2.32116,-2.237 0.53125,-4.53125 -0.76603,-0.98186 -1.23973,-1.43436 -1.78125,-1.4375 z m 233.53125,2.125 c 0.0724,-0.0162 0.13627,-0.007 0.21875,0 0.65987,0.0577 1.60012,0.87654 2.375,2.375 1.11447,2.15514 1.11478,2.36586 -0.15625,3.3125 -3.43486,2.55824 -4.68663,2.89568 -7.25,1.96875 -2.04369,-0.73901 -2.87863,-0.68521 -4.65625,0.25 -1.25955,0.66266 -3.00037,0.94064 -4.1875,0.6875 -1.12015,-0.23886 -3.22725,-0.0168 -4.65625,0.5 -1.90647,0.68941 -3.05251,0.74457 -4.34375,0.15625 -1.32053,-0.60167 -2.22221,-0.5721 -3.59375,0.1875 -2.2484,1.24523 -5.33896,1.3798 -6.46875,0.25 -0.62657,-0.62656 -1.37271,-0.46294 -2.875,0.71875 -2.40445,1.89133 -6.04297,2.09249 -7.90625,0.40625 -1.24386,-1.12568 -1.49303,-1.07023 -3.65625,0.75 -2.93522,2.46983 -5.21094,2.46786 -7.5,0.0312 -1.06488,-1.13348 -2.33946,-1.76792 -3.125,-1.5625 -0.93196,0.24371 -1.3125,-0.0727 -1.3125,-1.09375 0,-0.7982 -0.5548,-2.29918 -1.21875,-3.3125 -0.95908,-1.46374 -0.99812,-1.8215 -0.1875,-1.8125 0.56118,0.006 1.51772,0.30347 2.125,0.6875 0.73383,0.46404 1.49348,0.37785 2.25,-0.28125 1.39457,-1.21495 8.65417,-1.97081 9.625,-1 0.4397,0.43964 1.27834,0.39501 2.25,-0.125 1.45185,-0.77707 1.56155,-0.65906 1.40625,1.875 -0.19789,3.22854 1.59019,4.94767 3.75,3.59375 1.73221,-1.08586 2.09876,-3.89122 0.59375,-4.46875 -3.11122,-1.19388 0.0133,-2.84707 3.25,-1.71875 1.56687,0.54622 2.30571,1.36155 2.46875,2.71875 0.29998,2.49706 2.36893,3.83917 4.15625,2.71875 1.55951,-0.9776 2.1385,-3.86151 1,-5 -1.38326,-1.38325 -0.92524,-1.91354 1.21875,-1.34375 1.27722,0.33944 2.17051,1.12851 2.3125,2.09375 0.3042,2.06703 2.67722,4.1657 4.375,3.84375 0.97633,-0.18515 1.42765,-1.06013 1.59375,-3.0625 0.14464,-1.74371 0.6172,-2.8125 1.25,-2.8125 0.55822,0 1.53448,-0.16766 2.15625,-0.40625 0.84122,-0.3228 1.16613,0.1725 1.34375,1.96875 0.31584,3.19398 2.53349,4.61075 4.03125,2.59375 0.59261,-0.79803 1.09375,-2.20703 1.09375,-3.15625 0,-2.53988 1.7967,-2.11505 2.625,0.625 0.90936,3.00819 2.85473,4.31074 4.65625,3.125 0.71945,-0.47353 1.22735,-1.14575 1.15625,-1.5 -0.0711,-0.35425 -0.34318,-1.5646 -0.625,-2.6875 -0.32125,-1.27996 -0.0691,-1.9806 0.4375,-2.09375 z m -189.6875,0.8125 c 0.0712,-0.0162 0.13334,0 0.21875,0 0.57818,0 1.0625,0.64652 1.0625,1.46875 0,0.82223 -0.29309,1.5 -0.65625,1.5 -0.36316,0 -0.84748,-0.67777 -1.0625,-1.5 -0.22232,-0.85016 -0.061,-1.3553 0.4375,-1.46875 z M 78.008363,303.0524 c -0.596759,0.11798 -1.356056,0.67407 -2.5625,1.75 -1.957006,1.74532 -2.001869,1.95906 -0.78125,2.90625 0.71945,0.55828 1.3125,1.37519 1.3125,1.84375 0,1.85631 2.036691,0.7006 3.25,-1.84375 0.988153,-2.07216 1.071013,-2.91776 0.40625,-3.71875 -0.597042,-0.7194 -1.028241,-1.05548 -1.625,-0.9375 z m 226.343747,0.75 c 0.56338,-0.14937 1.00345,0.78051 1.5625,2.875 0.89542,3.35468 0.66402,3.56449 -1.8125,1.5 -1.42621,-1.1889 -1.61303,-1.7065 -0.9375,-2.96875 0.44909,-0.83913 0.84947,-1.31663 1.1875,-1.40625 z m 21.4375,0.0937 c 0.77122,0.0493 1.26806,0.55713 0.90625,1.5 -0.21541,0.56132 -0.0427,1.93256 0.375,3.03125 1.55072,4.07869 6.23628,1.69055 4.90625,-2.5 -0.39037,-1.22998 -0.14141,-1.5 1.4375,-1.5 1.36702,0 1.9375,0.39262 1.9375,1.375 0,1.44228 2.16111,3.875 3.46875,3.875 1.28687,0 3.25,-2.65856 3.25,-4.40625 0,-1.62714 0.0327,-1.63057 1.84375,-0.3125 1.01487,0.73862 1.8619,2.07311 1.875,2.96875 0.0256,1.7752 1.81435,4 3.25,4 3.06148,0 5.58746,-4.56233 3.0625,-5.53125 -0.64306,-0.24665 -0.9135,-0.84569 -0.625,-1.3125 0.36095,-0.58403 0.71712,-0.46552 1.1875,0.375 0.48882,0.87343 1.23414,1.09908 2.625,0.75 1.71638,-0.43079 1.90226,-0.29374 1.53125,1.125 -0.25452,0.97331 0.11389,2.2648 0.9375,3.28125 1.22182,1.50793 1.60462,1.5778 3.71875,0.78125 1.68281,-0.63394 2.29238,-0.65836 2.09375,-0.0625 -0.64291,1.92875 -2.69184,2.37424 -6.46875,1.40625 -2.06573,-0.52943 -4.20237,-0.69412 -4.71875,-0.375 -0.51638,0.31915 -2.41465,0.67505 -4.21875,0.78125 -2.75428,0.16226 -3.32365,-0.0406 -3.65625,-1.3125 -0.32622,-1.24745 -0.73463,-1.42811 -2.34375,-0.9375 -1.07462,0.32763 -3.83262,0.63415 -6.09375,0.65625 -2.26112,0.0221 -5.31386,0.28982 -6.8125,0.625 -2.06937,0.46282 -3.19918,0.3297 -4.65625,-0.625 -1.62243,-1.06306 -2.31769,-1.12618 -4.59375,-0.375 -2.26881,0.74876 -2.91846,0.69457 -4.03125,-0.3125 -0.72603,-0.65705 -1.70598,-1.1875 -2.1875,-1.1875 -0.48152,0 -0.875,-1.01665 -0.875,-2.25 0,-2.52815 1.70419,-3.0787 2.90625,-0.9375 0.69939,1.24581 0.73877,1.24581 1.21875,0 0.57528,-1.49313 2.62311,-1.72062 3.90625,-0.4375 0.65785,0.65787 1.21276,0.44452 2.28125,-0.875 0.74373,-0.91846 1.79128,-1.33053 2.5625,-1.28125 z m -134.28125,0.53125 c 0.57819,0 1.0625,0.50134 1.0625,1.09375 0,1.72834 -1.29335,2.03295 -1.71875,0.40625 -0.25192,-0.96336 -0.025,-1.5 0.65625,-1.5 z m 375.15625,0.0312 c 0.28152,0.006 0.90399,0.37274 1.625,1.09375 0.61666,0.61668 1.96311,1.125 3,1.125 1.23414,0 2.00293,0.49272 2.25,1.4375 0.20758,0.79378 0.92163,1.66032 1.5625,1.90625 0.99326,0.38114 0.91537,0.64586 -0.4375,1.90625 -0.8814,0.82115 -1.39404,1.97405 -1.15625,2.59375 0.23552,0.61372 0.0217,1.125 -0.46875,1.125 -0.59019,0 -0.7912,-1.08502 -0.625,-3.1875 0.23379,-2.95722 0.11454,-3.15625 -1.625,-3.15625 -1.22097,0 -2.11164,0.58864 -2.59375,1.6875 -0.40582,0.92502 -0.99188,1.65625 -1.28125,1.65625 -1.20229,0 -1.26199,-1.43973 -0.15625,-3.65625 0.93316,-1.87054 1.00032,-2.60234 0.28125,-3.46875 -0.59609,-0.71828 -0.65652,-1.06872 -0.375,-1.0625 z m -441,0.875 c 0.88095,-0.13104 1.47226,0.81198 1.3125,2.78125 -0.11119,1.3707 0.15513,2.96509 0.625,3.53125 0.66391,0.79996 0.60111,1 -0.3125,1 -0.64658,0 -1.45627,-0.5197 -1.8125,-1.15625 -0.35623,-0.63654 -1.35266,-1.1872 -2.1875,-1.25 -1.51702,-0.11427 -1.50669,-0.1243 -0.0312,-2.625 0.84671,-1.43506 1.72106,-2.17933 2.40625,-2.28125 z m 269.4375,1.34375 c -0.84649,0 -1.41643,0.25418 -1.25,0.5625 0.16642,0.30834 0.51518,1.16074 0.78125,1.90625 0.59645,1.67141 2,0.97904 2,-1 0,-0.96638 -0.5061,-1.46875 -1.53125,-1.46875 z m 156.90625,0 c -0.72496,0.0996 -1.40625,0.59294 -1.40625,1.375 0,0.75372 0.22591,1.60093 0.5,1.875 1.45447,1.45449 3.44362,-0.25638 2.6875,-2.3125 -0.27377,-0.74444 -1.05629,-1.0371 -1.78125,-0.9375 z m -172.90625,0.28135 c 0.28225,-0.006 0.34375,0.43159 0.34375,1.4375 0,1.16876 0.76104,2.51875 1.96875,3.46875 1.73839,1.36743 1.79351,1.53125 0.5,1.53125 -1.52806,0 -4.71875,-2.87141 -4.71875,-4.25 0,-0.43705 0.50832,-1.20695 1.125,-1.71875 0.35504,-0.29466 0.6119,-0.4652 0.78125,-0.46875 z m 214.4375,0.46875 c 0.6461,0 1.1875,0.50833 1.1875,1.125 0,0.61667 0.33746,1.125 0.78125,1.125 0.50685,0 0.65175,0.81643 0.34375,2.21875 -0.41665,1.897 -0.22104,2.36657 1.375,3.09375 2.64957,1.20724 4.06807,0.40176 4.34375,-2.46875 0.15305,-1.59363 0.65223,-2.46875 1.375,-2.46875 0.8363,0 1.06976,0.69055 0.90625,2.78125 -0.19996,2.55668 -0.0647,2.8125 1.65625,2.8125 2.1389,0 3.14354,-2.40712 2.34375,-5.59375 -0.3286,-1.3092 -0.15183,-1.875 0.5625,-1.875 1.45135,0 3.74164,2.72101 3.125,3.71875 -0.80771,1.3069 0.27965,4.5 1.53125,4.5 1.32351,0 2.8126,-3.49386 2.3125,-5.40625 -0.28422,-1.08686 0.12852,-1.3125 2.25,-1.3125 2.59378,0 2.5808,-0.017 2.34375,3.15625 -0.2051,2.74564 -0.0265,3.1875 1.25,3.1875 1.37054,0 1.8462,-0.86054 3.09375,-5.46875 0.17717,-0.65445 0.6794,-0.75423 1.46875,-0.3125 0.66222,0.37063 3.16264,0.38083 5.71875,0.0312 3.13547,-0.4288 4.85697,-0.33553 5.5625,0.25 0.58022,0.48156 2.11995,0.64543 3.59375,0.40625 1.42789,-0.23171 2.79389,-0.1028 3.03125,0.28125 0.23734,0.38404 1.24648,0.71875 2.25,0.71875 1.74408,0 1.84375,0.18303 1.84375,4.75 0,4.49049 -0.125,4.83417 -1.90625,5.28125 -1.10766,0.27799 -2.21398,1.31078 -2.6875,2.5 l -0.8125,2.03125 -0.71875,-2.0625 c -1.37806,-3.93063 -5.62161,-1.60597 -4.5625,2.5 0.41632,1.61399 0.33867,1.69975 -0.78125,0.78125 -1.56271,-1.28169 -1.64611,-5.22881 -0.125,-5.8125 0.61667,-0.23666 1.125,-0.88907 1.125,-1.4375 0,-1.65046 -1.50136,-2.05267 -2.90625,-0.78125 -0.72592,0.65696 -1.85864,1.21875 -2.53125,1.21875 -1.73665,0 -2.9738,2.66596 -2.40625,5.25 0.54569,2.48445 0.49709,2.52992 -1.3125,1.15625 -1.84948,-1.40396 -1.6519,-4.78058 0.375,-6.4375 1.27166,-1.03954 1.46207,-1.58856 0.8125,-2.25 -1.08628,-1.10611 -4,-0.24257 -4,1.1875 0,0.58896 -0.63436,1.09375 -1.40625,1.09375 -2.1478,0 -3.28776,1.84679 -2.71875,4.4375 0.53969,2.45716 0.29279,2.67469 -1.84375,1.53125 -1.18726,-0.6354 -1.33085,-1.33536 -0.96875,-4.84375 0.29198,-2.82896 0.14846,-4.125 -0.4375,-4.125 -0.46864,0 -0.84375,0.24888 -0.84375,0.5625 0,0.31363 -0.76249,0.90668 -1.6875,1.3125 -1.31181,0.57552 -1.70655,1.38663 -1.78125,3.71875 -0.0526,1.64446 -0.1374,3.24468 -0.1875,3.5625 -0.0501,0.31781 -0.90972,0.0484 -1.9375,-0.625 -2.09031,-1.36961 -2.51094,-4.52369 -0.9375,-7.0625 0.77019,-1.24276 0.73674,-1.63719 -0.1875,-2.21875 -0.84211,-0.52987 -1.19561,-0.35841 -1.375,0.75 -0.15954,0.98566 -0.82029,1.5 -2,1.5 -1.09853,0 -1.92924,0.55654 -2.21875,1.46875 -0.50432,1.58897 0.70664,4.5 1.875,4.5 0.39666,0 0.71875,0.33889 0.71875,0.75 0,1.17093 -3.08526,0.87112 -4.53125,-0.4375 -1.00854,-0.91271 -1.64687,-0.99883 -2.8125,-0.375 -2.55439,1.36708 -5.69777,0.95166 -7.53125,-1 -1.44704,-1.5403 -1.64135,-2.28245 -1.1875,-4.96875 0.51102,-3.02469 0.48167,-3.14708 -1.15625,-2.71875 -1.13552,0.29694 -2.04542,0.0325 -2.6875,-0.8125 -1.48164,-1.94991 -1.21552,-2.41187 1.15625,-1.9375 1.75948,0.35188 2.34352,0.11343 3.125,-1.3125 0.53096,-0.96881 0.89256,-2.51249 0.78125,-3.4375 -0.13441,-1.11656 0.18886,-1.6875 0.96875,-1.6875 z m -225.15625,0.0937 c 0.0729,-0.0102 0.13227,-0.008 0.1875,0 0.33135,0.0478 0.3261,0.45075 0.0625,1.28125 -0.67768,2.13521 2.11419,4.86232 4.5,4.40625 0.9751,-0.1864 1.59238,-0.0392 1.375,0.3125 -0.65177,1.05459 -4.33298,0.71457 -6.15625,-0.5625 -1.87693,-1.31465 -2.01349,-4.785 -0.21875,-5.375 0.0907,-0.0298 0.17711,-0.0523 0.25,-0.0625 z m -282.249997,0.78125 c -0.328879,0.021 -0.685095,0.1254 -1.03125,0.34375 -1.789071,1.12852 -2.761294,4.57476 -1.65625,5.90625 1.801291,2.17041 3.860559,0.98145 4.75,-2.75 0.476017,-1.99703 -0.637358,-3.59094 -2.0625,-3.5 z m 47.718747,0 c 1.42139,-0.15544 3.83329,1.39318 4.6875,3.65625 0.9587,2.53989 0.27511,2.82162 -1.65625,0.6875 -0.74411,-0.82223 -1.96024,-1.46875 -2.71875,-1.46875 -0.88078,0 -1.40625,-0.54523 -1.40625,-1.5 0,-0.87413 0.44766,-1.30435 1.09375,-1.375 z m 11.78125,0.25 c 0.71265,-0.0591 1.176,0.95167 1.59375,3.1875 0.24962,1.33613 0.37375,2.4012 0.28125,2.375 -3.53425,-0.99564 -4.82274,-3.05226 -3.03125,-4.84375 0.44611,-0.44611 0.83232,-0.69189 1.15625,-0.71875 z m 9.4375,0.4375 c 0.51886,-0.0367 0.80818,0.66758 1.03125,2.1875 0.18107,1.23333 0.14337,2.20385 -0.0937,2.15625 -3.22456,-0.6485 -3.90716,-1.74909 -2.15625,-3.5 0.52085,-0.52085 0.90743,-0.82172 1.21875,-0.84375 z m 423.46875,0.1875 c 0.18289,0.0109 0.37493,0.053 0.5625,0.125 1.28847,0.49443 1.40693,3.43965 0.1875,4.9375 -0.46966,0.57689 -1.04507,1.70902 -1.28125,2.53125 -0.23625,0.82223 -0.27028,0.003 -0.0625,-1.8125 0.25484,-2.22717 0.083,-3.47608 -0.5625,-3.875 -1.1252,-0.6954 -0.12399,-1.98274 1.15625,-1.90625 z m -414.75,0.125 c 0.41111,0 0.86984,0.93193 1,2.0625 0.17256,1.49974 -0.1095,2.03125 -1,2.03125 -0.8905,0 -1.1413,-0.53151 -0.96875,-2.03125 0.13009,-1.13057 0.55764,-2.0625 0.96875,-2.0625 z m 85.90625,0.375 c -1.16447,0 -1.33686,0.70742 -0.625,2.5625 0.58127,1.51509 1.51112,1.48705 2.09375,-0.0312 0.56733,-1.47843 -0.0536,-2.53125 -1.46875,-2.53125 z m 60.03125,0 c 0.925,-0.006 1.6875,0.33887 1.6875,0.75 0,0.93652 -0.80081,0.93652 -2.25,0 -0.90666,-0.58594 -0.79749,-0.741 0.5625,-0.75 z m 360.90625,0.0937 c -0.2388,-0.0143 -0.22405,0.69223 0.0625,2.125 0.29185,1.45921 0.0224,2.89853 -0.78125,4.125 -1.56237,2.38447 -0.49132,2.44628 1.71875,0.0937 1.60813,-1.71178 1.61386,-1.91061 0.46875,-4.125 -0.75538,-1.46074 -1.22995,-2.2045 -1.46875,-2.21875 z m -459.75,0.65625 c 1.7312,0 2.17345,1.65505 0.71875,2.71875 -1.60126,1.17087 -3.05167,1.29075 -3.65625,0.3125 -0.53319,-0.86271 1.56657,-3.03125 2.9375,-3.03125 z m 422.375,0.78125 c -0.26133,0.0356 -0.5838,0.16769 -0.96875,0.40625 -1.65836,1.02768 -2.14879,4.01843 -0.8125,4.875 0.6635,0.42531 1.41311,0.10676 2.28125,-0.9375 1.50039,-1.80479 1.57223,-2.09007 0.59375,-3.625 -0.34495,-0.54112 -0.65819,-0.77812 -1.09375,-0.71875 z m -169.90625,0.3126 c 1.26786,0.0103 4.28125,4.53347 4.28125,6.625 0,1.60487 0.37226,2 1.84375,2 1.00102,0 2.64226,-0.3332 3.65625,-0.71875 1.45938,-0.55487 2.11862,-0.39656 3.15625,0.75 1.68658,1.86369 2.95715,1.84127 4.3125,-0.0937 0.6852,-0.97825 1.27852,-1.26008 1.59375,-0.75 0.2747,0.44446 -0.009,1.32155 -0.625,1.9375 -1.87144,1.87144 -2.22584,4.06984 -0.875,5.5625 1.70295,1.88173 0.12086,2.75173 -2.21875,1.21875 -0.98817,-0.64753 -2.29929,-0.96365 -2.9375,-0.71875 -0.82261,0.31565 -1.15625,-0.009 -1.15625,-1.125 0,-0.86622 0.30763,-1.59375 0.71875,-1.59375 0.41111,0 0.7631,-0.59305 0.75,-1.3125 -0.0219,-1.20695 -0.10201,-1.20182 -0.96875,-0.0625 -0.62807,0.82558 -1.61971,1.10164 -2.96875,0.84375 -2.59712,-0.49647 -3.49711,1.49383 -1.625,3.5625 1.28736,1.42251 1.25044,1.46875 -0.65625,1.46875 -1.08156,0 -3.04561,0.66032 -4.375,1.46875 -1.40563,0.85483 -3.083,1.3005 -4.03125,1.0625 -0.89682,-0.2251 -1.87772,-0.0444 -2.15625,0.40625 -0.68691,1.11144 -5.41991,3.03125 -7.46875,3.03125 -0.91386,0 -2.28713,0.67777 -3.03125,1.5 -1.5147,1.67372 -4.07867,1.95258 -5.4375,0.59375 -0.49333,-0.49333 -0.90625,-2.17761 -0.90625,-3.75 0,-2.3616 -0.33166,-2.97572 -1.875,-3.5625 -1.0276,-0.39068 -2.54075,-1.80989 -3.375,-3.15625 l -1.53125,-2.46875 2.78125,-2.4375 c 2.65646,-2.3363 5.70184,-3.1426 6.5625,-1.75 0.22623,0.36603 -0.73501,0.86423 -2.125,1.125 -1.74047,0.32651 -2.64494,1.00624 -2.9375,2.125 -0.63311,2.42103 0.81005,3.5625 4.46875,3.5625 2.99196,0 3.25,0.16631 3.25,1.875 0,1.02779 -0.66835,2.54335 -1.5,3.375 -1.201,1.201 -1.34694,1.82621 -0.71875,3 1.49864,2.80023 5.0794,0.79667 4.25,-2.375 -0.22928,-0.87674 0.0588,-2.33814 0.65625,-3.25 0.99927,-1.52507 0.90277,-1.86972 -1.1875,-4.5 -1.24982,-1.57269 -2.1455,-3.07437 -2,-3.3125 0.14541,-0.23814 0.71462,-1.49125 1.28125,-2.8125 1.07389,-2.50408 4.48091,-4.52066 6.03125,-3.5625 0.53104,0.32821 1.43385,-0.14694 2.21875,-1.1875 1.15104,-1.52596 1.5623,-1.64675 3.1875,-0.90625 1.15803,0.52764 2.06317,1.73651 2.375,3.15625 0.58284,2.65369 1.47868,2.89188 2.625,0.75 0.9165,-1.71251 0.40467,-2.96875 -1.1875,-2.96875 -1.19545,0 -1.47131,-1.88494 -0.375,-2.5625 0.0674,-0.0416 0.16548,-0.0632 0.25,-0.0625 z m 224.90625,0.125 c 0.0568,-0.0119 0.10704,-0.0103 0.15625,0 0.32808,0.0686 0.50895,0.63848 0.75,1.84375 0.25827,1.29134 0.46875,2.80972 0.46875,3.375 0,1.38386 -1.86507,1.2912 -3.3125,-0.15625 -1.24659,-1.24657 -0.75737,-2.96964 1.3125,-4.6875 0.2463,-0.20441 0.45456,-0.3392 0.625,-0.375 z m -443.78125,0.28125 c -0.65058,0 -1.09375,0.71502 -1.09375,1.84375 0,2.09031 1.83515,2.58296 2.5625,0.6875 0.56733,-1.47845 -0.0536,-2.53125 -1.46875,-2.53125 z m 20.34375,0 c -1.55136,0 -2.07091,0.86666 -1.15625,1.96875 1.20248,1.4489 2.15625,1.22469 2.15625,-0.5 0,-0.82223 -0.45185,-1.46875 -1,-1.46875 z m 386.3125,0 c -0.2558,0 0.24168,0.88553 1.09375,1.96875 0.85206,1.08324 1.53125,2.45094 1.53125,3.0625 0,0.90364 0.21382,0.94371 1.125,0.1875 0.61666,-0.51179 1.125,-1.38172 1.125,-1.9375 0,-0.87897 -3.5729,-3.28125 -4.875,-3.28125 z m -141.40625,0.71875 c 0.57343,-0.0304 1.12889,0.12889 1.5,0.5 0.26325,0.26324 -0.0714,1.41381 -0.75,2.5625 -1.02147,1.72923 -1.08538,2.28109 -0.28125,3.25 1.21585,1.46501 3.00927,1.51002 5.03125,0.0937 1.96585,-1.37695 2.54691,-0.82831 2,1.90625 -0.3314,1.65698 -0.11328,2.24327 0.96875,2.625 1.97293,0.69601 3.9803,3.34716 4,5.28125 0.009,0.90075 0.30802,1.82796 0.6875,2.0625 0.37949,0.23454 0.92352,1.42316 1.1875,2.625 0.36703,1.67112 0.0966,2.5596 -1.15625,3.8125 l -1.65625,1.65625 2.71875,2.46875 c 1.49094,1.3659 2.72175,2.76447 2.71875,3.09375 -0.0114,1.63149 -1.64843,6.1875 -2.21875,6.1875 -0.35817,0 -1.19346,0.21919 -1.84375,0.46875 -1.59254,0.61111 -1.46874,-0.1202 0.40625,-2.65625 1.2845,-1.73737 1.41294,-2.39041 0.71875,-3.6875 -1.22051,-2.28057 -2.97702,-1.94899 -4.125,0.78125 -0.9885,2.35098 -0.98157,2.35688 -1.875,0.6875 -0.72196,-1.34899 -0.70137,-1.93616 0.15625,-2.9375 1.92386,-2.24622 2.06698,-2.96427 0.84375,-4.1875 -1.61431,-1.61431 -3.28125,-0.26919 -3.28125,2.65625 0,2.90667 -1.33355,2.71585 -2.625,-0.375 -0.58037,-1.38905 -1.5832,-2.72487 -2.21875,-2.96875 -0.63554,-0.24389 -1.523,-1.29688 -2,-2.34375 -0.74655,-1.63853 -0.64561,-2.10605 0.75,-3.40625 1.96311,-1.82892 2.03723,-2.67543 0.3125,-3.5625 -1.8096,-0.93071 -3.1875,-0.31197 -3.1875,1.46875 0,3.03011 -1.87023,0.80322 -2.28125,-2.71875 -0.3022,-2.5896 -0.8937,-3.9427 -2.0625,-4.71875 -0.91747,-0.60918 -1.625,-1.84525 -1.625,-2.84375 0,-2.15193 -2.48086,-2.44578 -5.125,-0.59375 -0.94029,0.6586 -1.86812,1.03811 -2.0625,0.84375 -0.72866,-0.72868 1.47349,-4.28125 2.65625,-4.28125 0.67767,0 1.88948,-0.49015 2.6875,-1.09375 1.64957,-1.24767 5.5625,-1.53603 5.5625,-0.40625 0,1.33225 2.17688,0.78804 3,-0.75 0.48191,-0.90044 1.51303,-1.44938 2.46875,-1.5 z m -271.59375,0.0937 c -1.03845,0.17094 -1.43984,1.42403 -0.78125,3.15625 0.50607,1.33109 1.1349,1.82725 1.90625,1.53125 1.4991,-0.57524 1.47456,-3.95342 -0.0312,-4.53125 -0.22981,-0.0882 -0.42635,-0.13197 -0.625,-0.15625 -0.17382,-0.0213 -0.3204,-0.0244 -0.46875,0 z m 17.21875,0.8125 c -0.42474,-0.0249 -0.75,0.36921 -0.75,0.96875 0,0.68519 0.33889,1.13702 0.75,1 1.12873,-0.37625 1.24568,-1.58477 0.1875,-1.9375 -0.0642,-0.0214 -0.12682,-0.0277 -0.1875,-0.0312 z m 387.0625,0 c -1.08198,-0.0493 -2.07511,1.13622 -2.09375,2.65625 -0.0182,1.48755 2.11503,1.09109 3,-0.5625 0.64249,-1.20051 0.54208,-1.62411 -0.4375,-2 -0.15555,-0.0597 -0.31418,-0.0867 -0.46875,-0.0937 z m -95.34375,1.40625 c -0.79584,-0.009 -1.1097,0.54017 -0.59375,1.375 0.6207,1.00444 1.67535,1.04285 2.28125,0.0625 0.25586,-0.41403 -0.0895,-0.9653 -0.75,-1.21875 -0.35778,-0.1373 -0.67222,-0.21565 -0.9375,-0.21875 z m -276.28125,1.3125 c 0.14505,-0.0134 0.29475,-0.0127 0.4375,0 1.90339,0.16931 3.5625,2.58894 3.5625,6.375 0,2.87131 1.12609,4.21875 3.53125,4.21875 1.49409,0 1.6311,0.19993 0.96875,1.4375 -0.42556,0.79521 -0.75,2.10494 -0.75,2.90625 0,0.82828 -0.65008,1.62148 -1.5,1.84375 -1.08065,0.28258 -1.5,1.01657 -1.5,2.65625 0,1.24756 0.3389,2.49591 0.75,2.75 1.23333,0.76223 0.84464,1.84375 -0.65625,1.84375 -2.06057,0 -3.31537,1.9349 -2.75,4.1875 0.41675,1.66041 0.27792,1.85451 -0.9375,1.46875 -1.74511,-0.55388 -3.47569,1.33424 -2.8125,3.0625 0.29281,0.76305 -0.1413,1.92166 -1.125,2.96875 -1.16551,1.24066 -1.50384,2.20882 -1.15625,3.59375 0.55872,2.22613 -0.49353,2.55319 -1.90625,0.5625 -1.84172,-2.5952 -6.64796,-4.11952 -7.6875,-2.4375 -0.88212,1.4273 0.53491,3.0625 2.65625,3.0625 1.18935,0 2.15625,0.14057 2.15625,0.3125 0,0.17192 0.21921,0.84971 0.46875,1.5 0.29348,0.7648 0.0308,1.15625 -0.71875,1.15625 -0.63733,0 -1.67906,0.75189 -2.3125,1.65625 -1.03831,1.48249 -1.02275,1.82889 0.0312,3.4375 1.42836,2.17997 0.97728,2.8148 -1.1875,1.65625 -2.03019,-1.08652 -2.61081,-0.58376 -1.5625,1.375 1.09275,2.04183 1.08842,2.0335 -1.25,2 -2.11166,-0.0303 -2.19459,0.25805 -1.53125,4.46875 0.19142,1.21509 -0.17738,1.5 -2,1.5 -2.00489,0 -2.26545,0.21386 -2.21875,2.21875 0.0287,1.23334 0.19818,2.92777 0.375,3.75 0.27347,1.27167 -0.006,1.46406 -2,1.3125 -1.797,-0.13661 -2.45224,0.17381 -2.75,1.3125 -0.21367,0.81704 -0.098,1.65995 0.25,1.875 0.34797,0.21507 0.29455,1.39018 -0.125,2.59375 -0.95753,2.74673 -6.27697,5.53516 -9.15625,4.8125 -1.41272,-0.35456 -2.06175,-0.14774 -2.40625,0.75 -0.36157,0.94223 -1.28365,1.16473 -3.9375,1 -3.40833,-0.21158 -3.45676,-0.17437 -3.6875,2.21875 -0.27334,2.83483 -1.23276,3.12563 -2.46875,0.75 -0.48128,-0.925 -0.9509,-1.77317 -1.0625,-1.90625 -0.11167,-0.13309 -1.2647,0.29764 -2.5625,0.96875 -1.87094,0.96751 -2.31103,1.61292 -2.125,3.15625 0.30071,2.4949 -0.95313,2.88044 -2.4375,0.75 -1.7618,-2.52865 -0.2965,-6.21317 2.34375,-5.90625 1.0835,0.12594 2.36047,-0.31113 2.90625,-0.96875 0.81219,-0.97864 0.75646,-1.406 -0.375,-2.65625 -1.108,-1.22431 -1.16972,-1.65734 -0.375,-2.40625 0.76839,-0.72478 1.04451,-0.73017 1.3125,0 0.7307,1.99089 3.01407,4.13778 3.84375,3.625 1.21474,-0.75075 1.05571,-2.70689 -0.3125,-4.21875 -1.07455,-1.18736 -0.82108,-1.29842 3.6875,-1.78125 2.94385,-0.31525 5.25597,-0.97928 5.84375,-1.6875 0.85374,-1.02871 1.00674,-0.97771 1.375,0.59375 0.59285,2.52974 3.71875,2.95203 3.71875,0.5 0,-0.97416 -0.40278,-2.15277 -0.875,-2.625 -1.38014,-1.38014 3.55069,-6.56923 6.03125,-6.34375 2.85023,0.25911 3.99384,-0.71725 3.21875,-2.8125 -0.80556,-2.17763 2.1143,-7.85448 4.34375,-8.4375 1.94089,-0.50755 1.8662,-1.76137 -0.15625,-2.84375 -1.3213,-0.70715 -1.77604,-0.64631 -2.5,0.34375 -0.48897,0.66871 -1.11524,1.21875 -1.40625,1.21875 -0.29102,0 0.18859,-1.0227 1.0625,-2.25 1.53522,-2.15603 1.65105,-2.17055 3.4375,-1 2.18121,1.42917 2.37801,1.29744 3.03125,-1.96875 l 0.5,-2.5 -2.5625,0.46875 -2.53125,0.46875 2,-1.65625 c 1.10459,-0.91614 2.35435,-2.58819 2.78125,-3.71875 0.54111,-1.43301 1.3159,-2.0625 2.53125,-2.0625 1.33224,0 2.05105,-0.7286 3.125,-3.15625 0.77292,-1.74722 1.48857,-3.96783 1.59375,-4.9375 0.10512,-0.9697 0.73506,-2.35536 1.375,-3.0625 0.63997,-0.70713 1.15625,-2.25904 1.15625,-3.4375 0,-1.23042 0.75341,-2.93467 1.78125,-4.03125 0.98444,-1.05028 2.01288,-2.97392 2.28125,-4.25 0.4095,-1.94716 0.19175,-2.51545 -1.40625,-3.5625 -2.23401,-1.46378 -2.38095,-2.77744 -0.625,-5.75 0.87213,-1.4764 1.92218,-2.21838 2.9375,-2.3125 z m 217.6875,0.625 c 0.28642,0.0199 0.53837,0.25064 0.875,0.65625 0.86396,1.04102 0.683,1.45186 -1.375,3.0625 -2.08751,1.63372 -2.28319,2.07137 -1.53125,3.5 0.47161,0.89602 1.16902,1.8368 1.5625,2.09375 0.99446,0.64943 -0.32037,1.28188 -1.6875,0.8125 -2.91097,-0.99945 -2.93036,-4.86783 -0.0625,-8.21875 1.17902,-1.3776 1.74139,-1.93934 2.21875,-1.90625 z m -36.65625,0.43755 c -0.37879,0.0685 -0.77856,0.40347 -1.375,1 -1.65538,1.65565 -1.27459,4.5607 0.65625,5 2.84143,0.64648 4.31003,-3.49974 1.9375,-5.46875 -0.48356,-0.40132 -0.83996,-0.59972 -1.21875,-0.53125 z m 226.78125,0.75 c 1.0264,0.0888 2.0625,1.0222 2.0625,2.125 0,1.3809 -0.89402,1.69901 -2.78125,0.9375 -1.08587,-0.43815 -1.27257,-2.23108 -0.28125,-2.84375 0.29603,-0.18296 0.65787,-0.24835 1,-0.21875 z m -468.96875,0.0625 c -0.70116,0.007 -1.45424,0.27094 -2.15625,0.90625 -1.74841,1.58228 -1.83855,2.84894 -0.28125,4.40625 1.62841,1.62842 3.84035,1.44147 4.8125,-0.375 1.36934,-2.55862 -0.27151,-4.95975 -2.375,-4.9375 z m 39.03125,0.5 c -0.38684,0 -0.90217,0.33889 -1.15625,0.75 -0.25409,0.41112 0.0778,0.75 0.71875,0.75 0.64093,0 1.15625,-0.33888 1.15625,-0.75 0,-0.41111 -0.33189,-0.75 -0.71875,-0.75 z m 348.78125,0.34375 c -1.7021,-0.0828 -2.42563,1.13894 -1.6875,3.0625 0.57208,1.4908 3.40158,1.14019 4.46875,-0.5625 0.94228,-1.50341 0.76062,-1.71996 -1.96875,-2.375 -0.28065,-0.0673 -0.56934,-0.11317 -0.8125,-0.125 z m -92.9375,0.46875 c -2.05098,5.8e-4 -2.57153,0.99709 -1.34375,2.75 0.98318,1.40368 1.41189,1.48784 3.03125,0.75 2.45829,-1.12007 2.03543,-3.12183 -0.71875,-3.4375 -0.35555,-0.0408 -0.67575,-0.0626 -0.96875,-0.0625 z m -265.25,2.15625 c -0.1813,0 -0.34375,0.33888 -0.34375,0.75 0,0.41111 0.34586,0.75 0.78125,0.75 0.43538,0 0.59783,-0.33889 0.34375,-0.75 -0.25408,-0.41112 -0.59996,-0.75 -0.78125,-0.75 z m 254.09375,0 c 0.16156,0 0.48211,0.50833 0.71875,1.125 0.23664,0.61666 0.11694,1.125 -0.28125,1.125 -0.39823,0 -0.71875,-0.50834 -0.71875,-1.125 0,-0.61667 0.11968,-1.125 0.28125,-1.125 z m 173.71875,0 c -0.2973,-0.0203 -0.63217,0.19347 -0.9375,0.6875 -0.54025,0.87415 0.28448,3.0625 1.15625,3.0625 0.36712,0 0.6875,-0.84722 0.6875,-1.875 0,-1.15447 -0.41075,-1.84124 -0.90625,-1.875 z m -123.46875,0.3125 c -0.75808,-0.0865 -1.37712,1.07448 -0.84375,1.9375 0.25409,0.41111 0.76939,0.75 1.15625,0.75 0.90901,0 0.93916,-2.03265 0.0312,-2.59375 -0.11108,-0.0686 -0.23545,-0.0814 -0.34375,-0.0937 z m -340.875,0.0312 c -0.22396,-0.008 -0.46754,0.15121 -0.8125,0.4375 -1.34195,1.11373 -1.42342,2.35784 -0.21875,3.5625 1.06497,1.06498 2.84375,1.20942 2.84375,0.21875 0,-0.38436 -0.36334,-1.61952 -0.78125,-2.71875 -0.394,-1.03628 -0.65798,-1.48683 -1.03125,-1.5 z m -8.96875,0.87505 c -1.0802,0.15827 -1.42668,1.45821 -0.875,3.65625 0.53878,2.14667 2.71145,2.50368 4.21875,0.6875 1.20216,-1.44852 0.2749,-3.25692 -2.15625,-4.15625 -0.24851,-0.0919 -0.47704,-0.15911 -0.6875,-0.1875 -0.18415,-0.0248 -0.34569,-0.0226 -0.5,0 z m 319.75,0.28125 c -1.65767,0 -1.81816,0.17683 -1.03125,1.125 0.51179,0.61666 1.40243,1.125 1.96875,1.125 0.56633,0 1.03125,-0.50834 1.03125,-1.125 0,-0.71161 -0.72465,-1.125 -1.96875,-1.125 z m -356.8125,0.15625 c -0.44128,0.0301 -0.99768,0.12577 -1.75,0.25 -1.70809,0.28205 -3.22557,0.61328 -3.34375,0.71875 -0.3564,0.31809 1.54761,4.125 2.0625,4.125 0.26289,0 0.91656,-0.42361 1.4375,-0.9375 0.75985,-0.74961 1.22834,-0.52413 2.4375,1.125 0.82894,1.13057 1.81067,2.0625 2.1875,2.0625 0.89349,0 0.89368,-2.04142 0,-2.59375 -0.37949,-0.23453 -0.91117,-1.46061 -1.1875,-2.71875 -0.36514,-1.66244 -0.51992,-2.12149 -1.84375,-2.03125 z m 301.875,0.71875 c -0.0232,-10e-4 -0.0612,0.0113 -0.0937,0.0312 -0.15608,0.0955 -0.42794,0.42871 -0.84375,0.96875 -0.63306,0.82223 -1.1744,1.95186 -1.1875,2.5 -0.047,1.97239 1.85879,0.32223 2.09375,-1.8125 0.12668,-1.15097 0.19343,-1.68045 0.0312,-1.6875 z m -148.625,0.625 c 0.98569,0 2.21875,1.92158 2.21875,3.4375 0,2.09226 1.70888,3.46711 3.875,3.15625 1.25936,-0.18072 1.91845,-1.00642 2.5625,-3.21875 0.84334,-2.8969 1.38672,-2.72251 1.9375,0.65625 0.12684,0.77817 0.81814,1.79482 1.5625,2.25 1.11473,0.68166 1.68561,0.44618 3.1875,-1.28125 1.00287,-1.15349 1.8125,-2.56251 1.8125,-3.15625 0,-0.59375 0.33887,-1.09375 0.75,-1.09375 0.4111,0 0.75,1.26694 0.75,2.8125 0,2.08232 0.4426,3.08581 1.65625,3.84375 1.49446,0.93331 1.80301,0.80034 3.71875,-1.34375 1.15476,-1.29239 2.09375,-2.90133 2.09375,-3.59375 0,-0.90152 0.23432,-1.04688 0.8125,-0.46875 0.57294,0.57294 0.59063,1.63028 0.0312,3.65625 -0.65023,2.35492 -0.56719,3.10858 0.4375,4.21875 1.58411,1.75034 3.40964,1.70137 5.0625,-0.125 0.9197,-1.01628 1.18493,-2.04694 0.84375,-3.40625 -0.40514,-1.61424 -0.25825,-1.92765 0.84375,-1.71875 0.93487,0.17724 1.3716,1.05071 1.5,2.875 0.20069,2.85311 -0.58754,4.18432 -3.71875,6.1875 -1.13057,0.72327 -2.0625,1.79906 -2.0625,2.40625 0,0.6072 -0.35681,1.09375 -0.8125,1.09375 -0.498,0 -0.67318,-0.68652 -0.40625,-1.75 0.33067,-1.31748 -0.11442,-2.38081 -1.78125,-4.125 -2.14716,-2.24679 -3.53764,-3.10167 -2.625,-1.625 0.2393,0.38719 -0.008,2.07144 -0.53125,3.75 -1.2519,4.01509 -3.29607,3.88231 -2.9375,-0.1875 0.23555,-2.67319 0.15193,-2.78125 -2.09375,-2.78125 -1.94809,0 -2.50099,0.40825 -3.375,2.5 -1.52516,3.65027 -4.74661,4.83164 -8.53125,3.125 -1.9944,-0.89939 -4.24873,-1.20955 -7.34375,-1.03125 -3.12354,0.17991 -4.86249,-0.0813 -5.78125,-0.84375 -1.16455,-0.96648 -1.42073,-0.91856 -2.34375,0.34375 -1.36243,1.8631 -1.3398,4.05564 0.0625,4.59375 1.75946,0.67517 0.62722,1.61941 -1.46875,1.21875 -2.53581,-0.48475 -4.33739,1.09665 -3.78125,3.3125 0.3395,1.35269 0.11614,1.71875 -0.96875,1.71875 -1.96152,0 -3.92276,2.43215 -3.6875,4.5625 0.16787,1.51989 -0.1678,1.83807 -2.15625,2.03125 -3.08253,0.29944 -5.17608,2.53999 -4.125,4.40625 0.6482,1.1509 0.41897,1.47216 -1.59375,2.15625 -1.76346,0.59937 -2.44988,1.33637 -2.625,2.8125 -0.30918,2.60615 -1.47893,2.56498 -1.78125,-0.0625 -0.15691,-1.36373 -0.65158,-2.02905 -1.46875,-1.96875 -1.91042,0.14128 -2.89963,-2.81135 -1.6875,-5 0.55672,-1.00435 1.01665,-1.44789 1.03125,-1 0.0388,1.1933 3.70656,2.64462 5.34375,2.125 1.57778,-0.50077 1.88545,-3.2698 0.625,-5.625 -1.13583,-2.12228 -0.1047,-3.29004 1.5625,-1.78125 1.94564,1.76077 4.03147,1.11543 4.3125,-1.3125 0.16129,-1.39336 -0.24622,-2.30286 -1.3125,-2.96875 -1.82437,-1.13935 -1.94789,-2.31432 -0.40625,-3.59375 0.61667,-0.5118 1.119,-1.99547 1.125,-3.28125 0.0136,-2.76809 0.53063,-3.65859 2.78125,-4.84375 1.08642,-0.57209 1.97393,-2.09917 2.53125,-4.3125 0.95515,-3.79327 4.3679,-6.68625 6.5625,-5.5625 0.64894,0.33228 1.64643,0.44331 2.1875,0.25 0.54623,-0.19517 1.15537,0.31643 1.375,1.15625 0.44418,1.69857 4.1752,3.56875 5.5,2.75 0.49837,-0.30799 0.75362,-1.76114 0.59375,-3.4375 -0.15223,-1.59636 -0.0807,-2.90625 0.15625,-2.90625 z m 118.34375,0.75 c 0.86325,0 1.21875,0.68119 1.21875,2.28125 0,2.67794 2.36401,3.96519 5.03125,2.75 1.19725,-0.54548 1.98771,-0.497 2.8125,0.1875 1.59584,1.32444 1.45535,1.71444 -1.1875,3.21875 -1.70849,0.97249 -2.22265,1.69077 -1.9375,2.78125 0.54768,2.09428 -0.31095,1.85153 -2.59375,-0.75 -2.3191,-2.64289 -3.10837,-2.76664 -5.125,-0.75 -1.4156,1.41559 -1.42622,1.62753 -0.28125,3.375 0.96319,1.47001 0.99462,1.86245 0.1875,1.84375 -1.55965,-0.0364 -3.40175,-1.72898 -3.71875,-3.375 -0.20707,-1.07524 -0.91293,-1.46875 -2.53125,-1.46875 -2.5723,0 -3.33455,1.79046 -1.53125,3.59375 1.65676,1.65675 1.44224,2.1127 -0.75,1.5625 -1.40702,-0.35315 -2.28784,-0.0732 -3.375,1.09375 -0.81336,0.87304 -2.24117,1.59375 -3.15625,1.59375 -0.91508,0 -2.90341,0.67777 -4.4375,1.5 -3.06788,1.64428 -3.77459,1.70295 -6.625,0.65625 -1.56087,-0.57317 -1.94945,-1.22879 -2.03125,-3.40625 -0.0558,-1.48486 -0.29565,-2.88938 -0.53125,-3.125 -0.7693,-0.76929 -2.94286,1.13689 -3.1875,2.78125 -0.28441,1.91158 -2.42002,2.17001 -2.3125,0.28125 0.19813,-3.4786 1.12899,-4.83376 4.03125,-5.84375 1.64087,-0.57103 3.06645,-1.0565 3.15625,-1.0625 0.0899,-0.006 -0.0505,0.56725 -0.3125,1.25 -0.39316,1.02456 -0.17963,1.14495 1.3125,0.6875 0.99436,-0.30481 2.65972,-0.74272 3.6875,-0.96875 1.02779,-0.22605 2.38333,-0.83132 3,-1.34375 0.61666,-0.51243 2.44929,-1.39076 4.09375,-1.9375 1.64446,-0.54675 3.56952,-1.47416 4.28125,-2.0625 1.09281,-0.90334 1.49855,-0.91955 2.53125,-0.0625 0.68403,0.56771 3.15078,1.0711 5.59375,1.125 l 4.375,0.0937 -0.46875,-3.25 c -0.36906,-2.69258 -0.23171,-3.25 0.78125,-3.25 z m 35.6875,0.21875 c -1.15815,0.0128 -2.54774,1.81031 -2.03125,3.15625 0.26052,0.67894 1.03403,1.10665 1.75,0.96875 1.54845,-0.2982 2.19447,-2.64929 1.03125,-3.8125 -0.21384,-0.21384 -0.48274,-0.31546 -0.75,-0.3125 z m -317.75,0.71875 c -0.45711,0.0461 -0.63512,0.92816 -0.5625,2.75 0.0978,2.45126 0.4112,3.03125 1.5625,3.03125 1.12239,0 1.22906,-0.19685 0.5625,-1 -0.46631,-0.56188 -0.73264,-1.78427 -0.625,-2.71875 0.10764,-0.9345 -0.22555,-1.85578 -0.71875,-2.03125 -0.0768,-0.0273 -0.15345,-0.0378 -0.21875,-0.0312 z m 127.4375,1.3125 c -0.61668,0 -1.125,0.50834 -1.125,1.125 0,0.61667 0.50832,1.125 1.125,1.125 0.61666,0 1.125,-0.50833 1.125,-1.125 0,-0.61666 -0.50834,-1.125 -1.125,-1.125 z m 181.375,1 c -0.12227,-0.005 -0.23892,0.0108 -0.375,0.0312 -0.36287,0.0546 -0.77069,0.19771 -1.21875,0.4375 -1.70675,0.91343 -1.91868,2.26882 -0.59375,3.59375 0.49334,0.49334 1.09708,0.90625 1.34375,0.90625 0.91321,0 2.21875,-1.83321 2.21875,-3.09375 0,-1.1822 -0.51913,-1.84068 -1.375,-1.875 z m 63.3125,0.5 c -1.82733,0 -2.47065,1.66739 -1.40625,3.65625 1.09256,2.04148 2.92034,1.98198 3.71875,-0.125 0.75654,-1.99647 -0.26525,-3.53125 -2.3125,-3.53125 z m -165.96875,0.15625 c 0.14249,-0.007 0.3521,0.0323 0.59375,0.125 0.64869,0.24893 1.46625,0.46875 1.84375,0.46875 0.37748,0 0.6875,1.11144 0.6875,2.5 0,3.30683 1.65493,4.73342 4.15625,3.59375 1.3194,-0.60116 1.84375,-1.42102 1.84375,-2.90625 0,-1.30131 0.58104,-2.44957 1.5625,-3.0625 1.9892,-1.24228 2.52279,-0.71127 1.40625,1.375 -1.0233,1.91207 -0.3875,5.21875 1,5.21875 1.82894,0 3.6875,-2.00077 3.6875,-3.96875 0,-1.73196 0.17638,-1.87916 1.46875,-1.1875 1.20337,0.64403 1.36887,1.27341 0.96875,3.40625 -0.41774,2.22672 -0.25111,2.65649 1.0625,3 2.14057,0.55978 1.92934,1.75 -0.3125,1.75 -2.09241,0 -4.39462,2.86372 -3.71875,4.625 0.26474,0.68992 -0.34392,1.60782 -1.5625,2.40625 -2.30096,1.50765 -3.3197,1.03845 -1.5625,-0.71875 1.42788,-1.42788 1.44083,-1.50027 0.4375,-3.375 -1.10683,-2.06815 -2.86557,-1.80006 -3.78125,0.59375 -0.55594,1.45325 -0.54222,2.45021 0.0312,3.375 0.70105,1.927 -8.49135,2.89781 -9.59375,0 -2.56426,-2.56425 -2.4443,-4.33696 0.5,-7.28125 1.04499,-1.04499 1.72773,-2.05351 1.53125,-2.25 -0.7368,-0.7368 -6.76457,2.77795 -7.125,4.15625 -0.68082,2.60342 -1.33775,1.50893 -1.34375,-2.28125 -0.005,-3.25557 0.16476,-3.68669 1.34375,-3.3125 0.74253,0.23568 2.22984,-0.12358 3.28125,-0.8125 1.57727,-1.03351 1.80913,-1.64189 1.4375,-3.5 -0.27683,-1.38414 -0.27123,-1.91615 0.15625,-1.9375 z m -240.96875,0.59375 c -0.18129,0 -0.3125,0.33889 -0.3125,0.75 0,0.41112 0.34587,0.71875 0.78125,0.71875 0.43537,0 0.59783,-0.30763 0.34375,-0.71875 -0.25408,-0.41111 -0.6312,-0.75 -0.8125,-0.75 z m 188.71875,0.0625 c -0.49329,0.015 -1.02384,0.36761 -1.75,1.09375 -0.88552,0.88552 -0.98922,1.53573 -0.40625,2.625 1.00789,1.88335 2.7129,1.84409 3.75,-0.0937 0.61278,-1.14513 0.59878,-1.82822 -0.0625,-2.625 -0.56984,-0.68668 -1.03796,-1.01503 -1.53125,-1 z m 25.75,1.75 c -0.69162,0.0226 -1.17695,1.02512 -0.59375,1.96875 0.36165,0.58517 0.72734,0.58517 1.3125,0 0.58517,-0.58515 0.58517,-1.03983 0,-1.625 -0.24813,-0.24813 -0.48821,-0.3513 -0.71875,-0.34375 z m -18.65625,1.90625 c -1.30907,0 -2.12784,1.78903 -1.53125,3.34375 0.50064,1.30466 2.44002,0.77837 3.0625,-0.84375 0.55021,-1.43381 -0.1135,-2.5 -1.53125,-2.5 z m 6,0.125 c -1.14344,0.0442 -1.5621,2.09415 -0.53125,3.125 0.88309,0.88308 2.09375,0.0496 2.09375,-1.4375 0,-0.78233 -0.59304,-1.51776 -1.3125,-1.65625 -0.0822,-0.0158 -0.17377,-0.0342 -0.25,-0.0312 z m 199.96875,0.0312 c -0.92102,0.002 -1.66615,1.23376 -1.15625,2.5625 0.46754,1.2185 0.58354,1.19771 1.75,0.0312 0.97523,-0.97524 1.04852,-1.45147 0.34375,-2.15625 -0.30643,-0.30644 -0.63049,-0.43807 -0.9375,-0.4375 z m -99.875,0.15625 c -0.10685,0.0163 -0.21515,0.0336 -0.3125,0.0937 -0.38935,0.24066 -0.52192,0.76684 -0.28125,1.15625 0.24067,0.38936 0.76684,0.52192 1.15625,0.28125 0.38936,-0.24068 0.52193,-0.76683 0.28125,-1.15625 -0.1805,-0.29201 -0.52319,-0.42404 -0.84375,-0.375 z m -143.625,0.53125 c -1.52893,0.0833 -2.39748,1.24452 -1.84375,2.6875 0.23683,0.61719 1.21466,0.94704 2.375,0.8125 2.62439,-0.30433 2.74664,-3.10249 0.15625,-3.46875 -0.24321,-0.0344 -0.46908,-0.0432 -0.6875,-0.0312 z m 121.46875,0.4063 c 0.33113,0.0105 0.53648,0.1619 0.6875,0.40625 0.30706,0.49685 0.095,1.0204 -0.5,1.21875 -0.58273,0.19425 -2.02136,1.33386 -3.1875,2.5 -2.48001,2.48001 -2.43971,2.44776 -3.03125,0.90625 -0.62865,-1.63824 -0.075,-2.319 3.28125,-4.03125 1.33428,-0.68069 2.19811,-1.0175 2.75,-1 z m -70.75,0.4375 c -0.2828,0.0315 -0.55063,0.19773 -0.78125,0.5625 -0.3877,0.61323 -0.71275,1.5486 -0.71875,2.0625 -0.0165,1.34506 2.18535,1.14 2.71875,-0.25 0.48979,-1.27644 -0.37035,-2.46939 -1.21875,-2.375 z m 59.71875,0.65625 c 0.873,0.0135 1.70218,0.33352 2.28125,1.03125 0.76349,0.91995 0.73537,1.125 -0.28125,1.125 -0.68147,0 -2.03634,0.49357 -3,1.125 -1.60229,1.04985 -1.78848,1.04645 -2.25,-0.15625 -0.67586,-1.76127 1.3294,-3.15477 3.25,-3.125 z m 31.375,0.78125 c -1.59458,0.0197 -2.48484,1.90986 -1.71875,3.90625 0.29216,0.76139 1.10828,1.19865 2.0625,1.0625 2.31296,-0.33003 2.28591,-4.63865 -0.0312,-4.96875 -0.11233,-0.016 -0.20619,-10e-4 -0.3125,0 z m -118.625,2.96875 c -0.12754,-0.004 -0.24326,0.0124 -0.375,0.0312 -1.87903,0.26875 -2.5595,2.42214 -1.25,4 1.14458,1.37895 2.54907,1.40297 3.6875,0.0312 1.2415,-1.49593 -0.14934,-4.0059 -2.0625,-4.0625 z m 111.75,0.0312 c -0.72087,0.074 -1.30096,1.15226 -0.84375,2.34375 0.55521,1.44683 2.5794,1.69347 2.5625,0.3125 -0.006,-0.51389 -0.33106,-1.41802 -0.71875,-2.03125 -0.29197,-0.46182 -0.67233,-0.65863 -1,-0.625 z m -47.4375,1.46875 c -0.11341,0.007 -0.21821,0.0133 -0.34375,0.0312 -1.91574,0.27328 -2.73177,2.72867 -1.21875,3.6875 1.4013,0.88805 1.81788,0.80501 2.875,-0.46875 1.16539,-1.40419 0.54747,-3.05242 -0.96875,-3.25 -0.1083,-0.0141 -0.23034,-0.007 -0.34375,0 z m -89.8125,1.375 c -1.49522,0 -2.08932,1.44192 -1.03125,2.5 0.80116,0.80117 2.07695,0.12572 2.34375,-1.25 0.16296,-0.84023 -0.26755,-1.25 -1.3125,-1.25 z m 283.8125,3.9375 c -1.28926,0.13398 -3.03991,1.84515 -2.5,2.71875 0.87882,1.42196 3.78125,0.68293 3.78125,-0.96875 0,-0.78797 -0.35351,-1.57618 -0.78125,-1.71875 -0.15797,-0.0527 -0.31582,-0.0504 -0.5,-0.0312 z m -286.5,1.5625 c -0.22069,0.035 -0.55651,0.19795 -1.0625,0.46875 -0.87045,0.46585 -1.37974,1.18156 -1.125,1.59375 0.6686,1.08183 2.14101,0.40431 2.4375,-1.125 0.13515,-0.69707 0.11782,-0.99586 -0.25,-0.9375 z m 290.25,3.09375 c -0.34037,0.0104 -0.66968,0.12679 -0.96875,0.375 -1.14323,0.94878 -1.55087,4.57414 -0.625,5.5 0.27407,0.27407 1.46017,0.5 2.625,0.5 1.82921,0 2.125,-0.28824 2.125,-2.125 0,-2.2981 -1.68129,-4.29496 -3.15625,-4.25 z m -33.15625,2.25 c 0.17494,-0.0307 0.40007,0.46457 0.5625,1.3125 0.2165,1.13055 0.2552,2.0625 0.0937,2.0625 -0.56374,0 -1.13044,-2.20507 -0.8125,-3.15625 0.0441,-0.13186 0.0979,-0.2085 0.15625,-0.21875 z m 57.96875,7.5 c -0.097,-0.006 -0.21178,0.0101 -0.3125,0.0312 -0.48343,0.10157 -1.00391,0.53579 -1.46875,1.28125 -0.64195,1.02945 -0.58703,1.47776 0.28125,2.03125 2.07101,1.32023 3.12376,0.84959 2.875,-1.3125 -0.14701,-1.2776 -0.69631,-1.98896 -1.375,-2.03125 z m 5.53125,4.84375 c -1.26806,0 -1.36778,1.63222 -0.15625,2.84375 1.10296,1.10292 1.86866,1.11528 2.5,0.0937 0.60294,-0.97559 -0.96415,-2.9375 -2.34375,-2.9375 z m -309.625,1.75 c 1.73382,-0.0669 1.8774,0.62876 0.1875,2.03125 -0.83497,0.69298 -1.09206,1.74612 -0.8125,3.46875 0.32657,2.01244 0.17837,2.46875 -0.90625,2.46875 -1.70555,0 -3.22904,3.28083 -2.625,5.6875 0.4202,1.67422 0.27839,1.81338 -1.34375,1.40625 -1.26917,-0.31855 -2.19563,0.001 -3.15625,1.0625 -1.50749,1.66576 -1.14331,3.78125 0.65625,3.78125 1.46265,0 1.06244,4.43458 -0.625,6.84375 -0.8609,1.2291 -0.96611,1.98926 -0.375,3.09375 0.617,1.1529 0.45027,1.92802 -0.78125,3.59375 -1.82965,2.47474 -2.05754,6.81176 -0.4375,8.15625 0.63842,0.52986 1.125,2.156 1.125,3.78125 0,1.56985 0.3389,3.05842 0.75,3.3125 0.41113,0.25408 0.75,1.63122 0.75,3.0625 0,1.51272 0.69564,3.54442 1.65625,4.84375 1.62249,2.19453 1.60456,2.29275 0.28125,4.75 -1.24529,2.31235 -1.51636,4.78195 -1.84375,15.875 -0.0524,1.77401 -0.62475,3.65601 -1.3125,4.34375 -0.76915,0.76917 -1.28763,2.73801 -1.40625,5.40625 -0.22572,5.07901 -1.60368,6.53482 -5.59375,5.8125 -1.43891,-0.26048 -2.9532,-0.77712 -3.34375,-1.15625 -1.09939,-1.06719 -2.65625,-0.80863 -2.65625,0.4375 0,0.61668 0.67777,1.77152 1.5,2.59375 1.60247,1.60247 2.01448,2.64454 0.71875,1.84375 -0.43448,-0.26854 -1.62057,-0.28335 -2.625,-0.0312 -2.29885,0.57697 -2.58671,3.4375 -0.34375,3.4375 0.82223,0 1.5,0.36872 1.5,0.8125 0,0.49759 -0.81553,0.60011 -2.125,0.3125 -2.93669,-0.645 -3.9546,0.9111 -4,5.96875 -0.0344,3.82979 -0.11641,4.05161 -1.09375,2.65625 -2.68668,-2.83942 -2.69311,0.55471 -5.125,-3.78125 0.58057,0.48183 1.83361,0.7594 2.78125,0.625 1.34534,-0.19071 1.71875,-0.71891 1.71875,-2.40625 0,-1.28334 -0.53913,-2.50771 -1.34375,-3 -1.10368,-0.67522 -1.6329,-0.49991 -2.8125,0.9375 l -1.4375,1.78125 0,-2.34375 c 0,-1.27889 0.3389,-2.3125 0.75,-2.3125 1.1604,0 0.86946,-3.43597 -0.375,-4.46875 -1.88729,-1.56632 -3.63696,-0.34105 -3.125,2.21875 0.60797,3.03979 -0.68253,2.84363 -1.8125,-0.28125 -0.86741,-2.39879 -1.08098,-2.52682 -3.84375,-2.15625 -1.67339,0.22444 -3.64568,0.01 -4.65625,-0.53125 -1.469,-0.78619 -2.05598,-0.76144 -3.5,0.25 -2.25387,1.57867 -3.77858,1.53529 -5.96875,-0.1875 -0.98225,-0.77264 -2.4343,-1.5304 -3.25,-1.6875 -0.81571,-0.15708 -1.58727,-0.84875 -1.71875,-1.53125 -0.17568,-0.91229 0.12941,-1.12862 1.21875,-0.84375 1.09976,0.2876 1.81014,-0.2096 2.6875,-1.90625 1.11936,-2.16459 1.09048,-2.32617 -0.34375,-3.09375 -0.83314,-0.44587 -1.84737,-0.59259 -2.25,-0.34375 -0.40261,0.24882 -0.71875,-0.24725 -0.71875,-1.09375 0,-0.93443 -0.51832,-1.5724 -1.3125,-1.625 -1.14995,-0.0762 -1.17873,-0.11824 -0.0937,-0.40625 1.36256,-0.36167 3.39119,-4.48381 2.59375,-5.28125 -0.27659,-0.27658 -1.50108,-0.1471 -2.71875,0.3125 -1.97422,0.74519 -2.21875,0.68401 -2.21875,-0.59375 0,-1.15717 -0.47561,-1.40321 -2.4375,-1.25 -2.14469,0.1675 -2.59203,-0.12671 -3.8125,-2.625 -1.05757,-2.16482 -1.6918,-2.74211 -2.75,-2.40625 -0.76079,0.24146 -2.36221,-0.0668 -3.5625,-0.6875 -1.34977,-0.6987 -3.1617,-0.94525 -4.75,-0.6875 -2.05941,0.33419 -3.03614,0.006 -4.9375,-1.59375 -2.31748,-1.95002 -2.35019,-2.03637 -1.125,-3.90625 1.20152,-1.83374 1.17353,-1.97672 -0.4375,-3.28125 -2.98107,-2.41393 -5.60935,0.2643 -3.46875,3.53125 1.04937,1.60152 1.03237,1.78125 -0.0625,1.78125 -0.66302,0 -1.80309,-0.76249 -2.5625,-1.6875 -1.3673,-1.66545 -1.37839,-1.70138 1.25,-4.0625 1.56226,-1.40338 2.85932,-3.41865 3.15625,-4.875 0.3402,-1.66851 1.16472,-2.77994 2.53125,-3.4375 1.11456,-0.53633 2.03125,-1.57642 2.03125,-2.3125 0,-0.73607 0.67779,-1.9434 1.5,-2.6875 0.82223,-0.74412 1.5,-2.17349 1.5,-3.15625 0,-2.3082 3.15417,-5.4375 5.46875,-5.4375 0.99103,0 2.70504,-0.72263 3.8125,-1.59375 l 2.03125,-1.59375 1.6875,1.59375 c 2.03089,1.90792 2.54054,1.94736 4.3125,0.34375 1.18816,-1.07512 1.375,-1.08945 1.375,-0.0937 0,0.63006 -0.50833,1.55071 -1.125,2.0625 -1.58817,1.31806 -1.39559,2.74949 0.75,5.5625 1.02778,1.3475 1.875,3.24973 1.875,4.25 0,1.00029 0.51627,2.5863 1.15625,3.5 1.08624,1.55084 1.05183,1.65625 -0.34375,1.65625 -2.09245,0 -3.81586,-2.76442 -3.3125,-5.28125 0.3257,-1.62852 0.0163,-2.32871 -1.4375,-3.28125 -2.20508,-1.44482 -3.80814,-0.97257 -4.90625,1.4375 -0.65727,1.44254 -0.52571,2.12238 0.65625,3.625 0.80065,1.01786 1.46875,2.67276 1.46875,3.65625 0,2.21109 1.28959,3.5625 3.375,3.5625 1.89967,0 6.3125,3.79079 6.3125,5.40625 0,0.74634 0.98473,1.30148 2.8125,1.59375 3.34644,0.53511 5.4375,2.70059 5.4375,5.65625 0,1.65415 0.39105,2.24455 1.78125,2.59375 0.99512,0.24944 2.35066,0.24917 3,0 0.64934,-0.24918 1.1875,-0.0836 1.1875,0.34375 0,0.4274 -0.67777,0.98904 -1.5,1.25 -0.82223,0.26097 -1.5,1.11172 -1.5,1.90625 0,1.98689 3.01006,1.96179 3.53125,-0.0312 0.60997,-2.33251 1.71875,-0.96516 1.71875,2.125 0,1.53796 0.42361,3.232 0.9375,3.78125 0.76978,0.82277 0.60206,0.8991 -0.9375,0.4375 -1.02778,-0.30815 -3.14853,-0.7327 -4.71875,-0.9375 -2.32881,-0.30372 -3.09997,-0.82528 -4.0625,-2.84375 -0.64901,-1.36097 -1.76812,-2.62111 -2.5,-2.8125 -0.87281,-0.22826 -1.40475,-1.22642 -1.5625,-2.875 -0.18976,-1.98311 -0.61287,-2.55366 -2,-2.75 -1.68021,-0.23783 -1.72952,-0.0954 -1.21875,3 0.29393,1.78131 0.83642,3.61918 1.21875,4.09375 0.38229,0.47456 0.49969,1.66142 0.25,2.65625 -0.61575,2.4534 1.1843,3.9069 4.15625,3.3125 1.98549,-0.39708 2.25707,-0.2663 1.875,0.9375 -0.30672,0.96634 0.14293,1.76707 1.5,2.65625 2.2929,1.50236 4.0625,1.07248 4.0625,-1 0,-2.06673 1.33335,-2.68449 1.625,-0.75 0.15713,1.0421 1.23782,1.98157 3.09375,2.71875 2.64396,1.05016 2.90741,1.02481 3.90625,-0.28125 0.98642,-1.2898 1.02725,-1.2204 0.625,0.9375 -0.40537,2.17467 -0.24361,2.41672 2.28125,3.25 1.49809,0.49442 3.12805,0.7533 3.625,0.5625 0.64396,-0.24754 0.84432,0.5924 0.65625,2.9375 -0.4455,5.55534 2.71936,7.45794 4.875,2.9375 1.36606,-2.86463 0.90597,-4.89004 -1.1875,-5.4375 -1.69241,-0.44258 -4.18723,-5.63433 -3.53125,-7.34375 0.25677,-0.66917 1.06247,-1.10724 1.78125,-0.96875 1.02014,0.19645 1.24971,0.85831 1.0625,3.03125 -0.20443,2.37276 0.0342,2.91721 1.65625,3.65625 2.78525,1.26905 4.1875,-0.19273 4.1875,-4.375 0,-2.68455 0.37813,-3.66632 1.875,-4.84375 2.18925,-1.72206 2.39514,-3.63581 0.5625,-5.28125 -1.53662,-1.37965 -5.12003,-0.95418 -5.75,0.6875 -0.23027,0.60007 0.10498,2.06311 0.71875,3.25 1.25845,2.43357 1.36796,2.97575 0.5625,2.96875 -0.30832,-0.003 -1.13501,-0.96528 -1.8125,-2.15625 -1.15907,-2.03749 -1.15221,-2.297 0.1875,-4.5 0.83826,-1.37838 1.4029,-3.64533 1.375,-5.5 -0.0936,-6.22391 0.53035,-11.27052 1.40625,-11.5625 1.2427,-0.41423 1.11238,-2.4375 -0.15625,-2.4375 -1.23569,0 -1.9375,-1.59763 -1.9375,-4.375 0,-1.10835 -0.67777,-2.57724 -1.5,-3.28125 -1.79829,-1.53974 -1.91305,-4.31114 -0.3125,-7.40625 1.11929,-2.16447 1.33303,-2.25146 4.46875,-1.78125 3.1562,0.47321 3.31245,0.43343 3.31245,-1.34385 0,-1.0236 -0.46474,-2.33972 -1.03125,-2.90625 -0.87507,-0.87505 -0.87507,-1.24079 0,-2.4375 5.66686,-11.42526 0.1636,0.2725 4.4375,-11.3125 1.76584,-2.31512 1.93574,-2.93934 1.15625,-4.1875 -0.50339,-0.80606 -0.81883,-1.51885 -0.6875,-1.59375 0.13127,-0.0749 1.48957,-0.70563 3.03125,-1.40625 3.07347,-1.39672 3.41505,-2.36396 1.65625,-4.875 -1.59031,-2.27048 -0.71252,-3.39952 2.25,-2.84375 2.96695,0.55661 4.86186,-1.04322 3.03125,-2.5625 -1.5148,-1.25716 -1.42033,-2.7973 0.1875,-3.25 2.13066,-0.59991 3.74096,-0.92859 4.78125,-0.96875 z m 262.65625,2.15625 c -0.77877,0.0878 -1.68555,0.69777 -2.375,1.75 -1.26452,1.92987 -1.27394,2.03756 0.125,3.0625 1.29824,0.95113 1.61607,0.88075 2.8125,-0.59375 0.73673,-0.90794 1.2185,-2.19588 1.09375,-2.84375 -0.16732,-0.86882 -0.68642,-1.32064 -1.34375,-1.375 -0.10564,-0.009 -0.20125,-0.0125 -0.3125,0 z m 5.78125,5.09375 c -0.47906,0.0527 -1.00727,0.25339 -1.59375,0.625 -0.63646,0.40323 -0.84752,1.22227 -0.53125,2.21875 0.63656,2.00568 3.15533,2.0971 3.78125,0.125 0.61417,-1.93507 -0.21906,-3.1269 -1.65625,-2.96875 z m 69.21875,3.6875 c -1.00321,0 -1.6643,2.03215 -1.125,3.4375 0.50496,1.31595 3.52395,1.19609 3.96875,-0.15625 0.30851,-0.93793 -1.7148,-3.28125 -2.84375,-3.28125 z m -55.53125,0.8125 c -1.03471,-0.0729 -2.01701,0.26101 -2.65625,1.03125 -1.07938,1.30057 -0.47253,2.52212 1.71875,3.40625 2.3543,0.94992 3.19946,0.85958 4.25,-0.40625 0.77103,-0.92903 0.69056,-1.38181 -0.40625,-2.59375 -0.78813,-0.87088 -1.87154,-1.36455 -2.90625,-1.4375 z m 31.8125,0 c 0.11304,4e-5 0.20687,0.0194 0.28125,0.0937 0.20533,0.20529 0.16546,0.9495 -0.0937,1.625 -0.5163,1.34547 -1.48359,1.60031 -2.125,0.5625 -0.39651,-0.64157 1.1462,-2.28156 1.9375,-2.28125 z m -38.84375,0.6875 c -2.24835,0 -3.40065,1.83357 -2.375,3.75 1.25441,2.34387 3.31312,1.5907 3.59375,-1.3125 0.19147,-1.98072 -0.0329,-2.4375 -1.21875,-2.4375 z m 68.0625,2.40625 c -0.19196,0.007 -0.37919,0.0234 -0.5625,0.0937 -1.36434,0.52355 -1.49638,3.22185 -0.1875,3.75 2.07546,0.83747 3.5625,0.46223 3.5625,-0.90625 0,-1.56921 -1.46877,-2.98676 -2.8125,-2.9375 z m 5.75,5.0625 c -1.00997,0 -1.71622,1.99722 -1.1875,3.375 0.48447,1.26251 2.40498,1.48944 3.09375,0.375 0.55874,-0.90406 -0.88764,-3.75 -1.90625,-3.75 z m -359.78125,1.93755 c -0.31175,0.017 -0.60626,0.12603 -0.90625,0.375 -1.09313,0.90721 -1.41202,3.08798 -0.5625,3.9375 0.93923,0.93923 2.44666,0.47393 3.21875,-0.96875 0.84753,-1.58364 -0.39908,-3.41734 -1.75,-3.34375 z m -33.53125,0.4375 c -1.76851,0.0111 -2.74048,1.97872 -1.25,2.9375 1.62182,1.04327 3.3125,0.45103 3.3125,-1.1875 0,-0.9715 -0.58483,-1.59342 -1.6875,-1.75 -0.12462,-0.0177 -0.2571,-7.4e-4 -0.375,0 z m 398.46875,0.78125 c -0.85503,0.16511 -1.53803,1.32994 -1.125,2.40625 0.24724,0.64432 0.96416,1.1875 1.59375,1.1875 1.30635,0 1.57581,-2.64478 0.34375,-3.40625 -0.14287,-0.0883 -0.293,-0.16456 -0.4375,-0.1875 -0.12644,-0.0201 -0.25285,-0.0236 -0.375,0 z m -49.21875,0.59375 c 0.4111,0 0.75,0.46491 0.75,1.03125 0,0.56632 -0.55635,1.49827 -1.25,2.0625 -1.1102,0.90306 -1.2022,0.86157 -0.75,-0.34375 0.28253,-0.75307 0.5,-1.685 0.5,-2.0625 0,-0.37749 0.33889,-0.6875 0.75,-0.6875 z m 34.875,0 1.75,1.875 c 0.96557,1.02779 1.86619,1.875 2,1.875 0.13388,0 0.25,-0.84721 0.25,-1.875 0,-1.52743 -0.36606,-1.875 -2,-1.875 l -2,0 z m -27.34375,1.5 c 1.17134,0 0.7548,1.94473 -0.6875,3.25 -2.02635,1.83381 -2.38001,1.51572 -1.125,-1 0.61526,-1.23334 1.4315,-2.25 1.8125,-2.25 z m -18.75,0.0625 c -0.0853,-0.003 -0.1591,0.0111 -0.25,0.0312 -0.43633,0.0967 -0.94869,0.44869 -1.5625,1.0625 -1.19156,1.19154 -1.56656,4.1522 -0.65625,5.0625 0.89603,0.89603 2.21322,0.52547 3.59375,-1 1.12016,-1.23777 1.20239,-1.80219 0.5,-3.34375 -0.53892,-1.18283 -1.0276,-1.78895 -1.625,-1.8125 z m 70.5625,1.4375 c -1.17517,0 -1.23,0.1545 -0.59375,1.8125 0.47117,1.22785 1.23129,1.48747 2,0.71875 0.72741,-0.72741 -0.27874,-2.53125 -1.40625,-2.53125 z m -430.8125,1.125 c 0.74893,-7.1e-4 2.21875,2.8635 2.21875,4.46875 0,1.70089 -1.13052,1.88611 -2.09375,0.34375 -1.04303,-1.67017 -1.17106,-4.18075 -0.25,-4.75 0.0429,-0.0265 0.0751,-0.0625 0.125,-0.0625 z m 53.78125,1.09375 c -1.48916,0 -1.94764,0.80236 -1,1.75 0.91038,0.91038 2.5,0.51298 2.5,-0.625 0,-0.62289 -0.66947,-1.125 -1.5,-1.125 z m 361.875,0.34375 c -0.42621,-10e-4 -0.82287,0.13126 -1.09375,0.40625 -0.64225,0.65198 -0.49731,1.13223 0.59375,1.9375 1.86899,1.37945 3.40625,1.36136 3.40625,-0.0312 0,-1.21336 -1.62761,-2.30807 -2.90625,-2.3125 z m 50.1875,3.40625 c -0.84944,0 -3.27523,3.38102 -2.78125,3.875 0.47953,0.47952 5.58946,-0.23807 5.5625,-0.78125 -0.0449,-0.90391 -2.01547,-3.09375 -2.78125,-3.09375 z m 21.1875,0.21875 c 0.28324,-0.0252 0.52386,0.25445 0.75,0.84375 0.27363,0.71305 0.13976,1.64152 -0.3125,2.09375 -0.59797,0.59799 -0.98193,0.47413 -1.34375,-0.46875 -0.27361,-0.71306 -0.10851,-1.67277 0.34375,-2.125 0.22425,-0.22424 0.39256,-0.32861 0.5625,-0.34375 z m -42.3125,0.5 c -0.80213,0.0367 -1.71783,0.64837 -2.5625,1.9375 -1.16675,1.78103 -1.19356,2.05501 -0.0625,3.78125 0.80746,1.23234 1.79318,1.81024 2.875,1.65625 1.31087,-0.18659 1.68366,-0.81949 1.875,-3.15625 0.22283,-2.72121 -0.78811,-4.2799 -2.125,-4.21875 z m -78.6875,0.3125 c -1.07714,-0.0445 -1.65168,1.00012 -0.5625,2.3125 0.52625,0.6341 1.39543,1.15625 1.9375,1.15625 1.70661,0 1.83349,-1.25151 0.28125,-2.65625 -0.5894,-0.53339 -1.16664,-0.79229 -1.65625,-0.8125 z m -315.3125,1.96875 c -1.15239,0 -2.06334,3.2232 -1.3125,4.65625 0.56731,1.08276 0.94215,1.1332 2.15625,0.375 0.80206,-0.5009 1.61647,-1.30166 1.8125,-1.8125 0.38031,-0.9911 -1.45966,-3.21875 -2.65625,-3.21875 z m 325.25,0.75 c -0.98135,0 -2.44286,2.85051 -1.90625,3.71875 0.23774,0.38467 0.92775,0.51284 1.53125,0.28125 1.20408,-0.46204 1.53564,-4 0.375,-4 z m 80.03125,0.0312 c 0.37233,-0.006 0.6875,0.34749 0.6875,1.0625 0,0.6022 -0.64229,1.41818 -1.4375,1.84375 -1.82813,0.97838 -3.0625,0.99382 -3.0625,0.0312 0,-0.41111 0.52668,-0.75 1.15625,-0.75 0.62958,0 1.32587,-0.50832 1.5625,-1.125 0.27596,-0.71912 0.72142,-1.05695 1.09375,-1.0625 z m -461.71875,0.0312 c -1.3403,0.038 -1.28577,1.09525 0.1875,3.34375 1.41965,2.16666 2.79184,1.44405 2.40625,-1.28125 -0.16503,-1.16638 -0.82799,-1.84242 -1.9375,-2 -0.24947,-0.0354 -0.46478,-0.0679 -0.65625,-0.0625 z m 476.59375,1.40635 c -0.41112,0 -0.75,0.67777 -0.75,1.5 0,0.82223 -0.30575,1.5 -0.6875,1.5 -1.72267,0 -3.10857,2.48588 -2.625,4.6875 0.30682,1.39697 0.16593,2.44692 -0.375,2.78125 -0.58673,0.3626 -0.71213,1.73985 -0.375,4.28125 0.41496,3.12811 0.73072,3.69731 1.84375,3.40625 1.37262,-0.35896 2.48787,1.63443 2.0625,3.65625 -0.23377,1.11118 -6.01434,4.375 -7.75,4.375 -0.97081,0 -2.39408,3.89623 -1.96875,5.40625 0.0869,0.30833 -0.29101,0.5625 -0.875,0.5625 -0.58402,0 -1.29216,1.01912 -1.5625,2.25 -0.27036,1.2309 -0.96888,2.51154 -1.5625,2.84375 -0.93163,0.52136 -0.91786,0.90965 0.125,3 1.05499,2.11478 1.05471,2.63108 0.125,4.03125 -0.91327,1.37546 -0.89344,1.89644 0,3.6875 1.29457,2.59503 1.99629,3.05434 5.25,3.3125 3.50701,0.27827 6.90625,1.77399 6.90625,3.03125 0,1.38108 0.76092,1.24792 2.78125,-0.4375 2.18316,-1.82128 2.14336,-2.73128 -0.3125,-4.84375 l -2.03125,-1.71875 2.03125,-2.40625 c 2.17637,-2.58649 2.415,-3.43625 1.25,-4.15625 -0.41112,-0.25408 -0.75,0.0397 -0.75,0.65625 0,1.61599 -1.3588,2.23834 -2.625,1.1875 -1.16683,-0.96838 -1.54188,-6.6875 -0.4375,-6.6875 0.36095,0 1.12346,0.63706 1.6875,1.4375 0.75308,1.06868 1.55302,1.34058 3.0625,1.03125 2.40324,-0.49249 2.70601,-1.68945 0.5625,-2.25 -1.64718,-0.43074 -1.88513,-1.82059 -0.71875,-4 0.66109,-1.23524 1.00967,-1.29819 2.78125,-0.53125 1.12274,0.48603 2.87846,1.81038 3.90625,2.9375 2.02234,2.21783 4.53779,3.00071 5.03125,1.59375 0.16912,-0.48219 -0.46175,-0.95926 -1.40625,-1.09375 -2.23852,-0.31871 -2.64637,-2.58398 -0.8125,-4.625 0.79817,-0.88833 1.68359,-2.21804 1.9375,-2.9375 0.30376,-0.86066 1.24332,-1.28125 2.75,-1.28125 4.96148,0 8.96875,-2.95535 8.96875,-6.59375 0,-2.33134 -2.85952,-5.2683 -5.59375,-5.78125 -2.5214,-0.47301 -7.2307,0.68132 -9.375,2.3125 -0.61667,0.46911 -1.69373,1.06002 -2.40625,1.3125 -0.71252,0.25249 -1.11395,0.89625 -0.90625,1.4375 0.2077,0.54126 -0.15557,1.65832 -0.78125,2.46875 -1.12534,1.45747 -1.14098,1.46647 -2.25,0.0312 -1.40462,-1.8177 -1.42132,-3.35357 -0.0625,-3.875 0.79922,-0.3067 0.93229,-1.45497 0.625,-4.84375 -0.38464,-4.24176 -0.32782,-4.40625 1.3125,-4.40625 1.61375,0 1.63304,-0.0885 0.46875,-1.375 -0.68039,-0.75184 -1.21875,-1.76848 -1.21875,-2.25 0,-0.48151 -0.33888,-0.875 -0.75,-0.875 -0.41111,0 -0.75,0.99987 -0.75,2.21875 0,1.48876 -0.5043,2.49617 -1.5625,3.0625 -2.41732,1.2937 -3.44039,-0.16214 -2.3125,-3.28125 1.09199,-3.01983 1.13808,-5.75 0.125,-5.75 z m -89.53125,1.59375 c -0.67768,-10e-4 -0.90625,0.57954 -0.90625,2.09375 0,2.365 0.95961,2.86321 3,1.5625 1.35489,-0.86371 0.183,-3.20717 -1.78125,-3.59375 -0.11563,-0.0228 -0.21569,-0.0623 -0.3125,-0.0625 z m -392,1.53125 c -1.91573,0.27328 -2.73176,2.72867 -1.21875,3.6875 1.40131,0.88806 1.81789,0.83626 2.875,-0.4375 1.33187,-1.60478 0.35247,-3.53653 -1.65625,-3.25 z m 62.75,0.9375 c -1.3245,0.19801 -1.79258,2.02736 -0.84375,4.5 0.57452,1.49706 2.11924,1.50576 3.59375,0.0312 1.34052,-1.3405 0.84761,-3.08383 -1.15625,-4.15625 -0.61113,-0.32697 -1.15225,-0.441 -1.59375,-0.375 z m 357.40625,0.65625 c -0.38685,0.0534 -0.78878,0.34744 -1.40625,0.90625 -1.82848,1.65476 -1.90214,3.05064 -0.1875,4.0625 0.71945,0.42456 1.82083,0.69305 2.4375,0.59375 1.55134,-0.24984 1.84306,-3.80754 0.40625,-5 -0.48909,-0.40591 -0.86315,-0.61595 -1.25,-0.5625 z m -18.90625,0.21875 c -0.32601,0.0366 -0.628,0.13876 -0.875,0.34375 -1.29781,1.07709 -1.36569,3.10307 -0.15625,4.3125 0.49334,0.49334 1.26652,0.875 1.71875,0.875 1.19394,0 2.625,-1.58683 2.625,-2.9375 0,-1.45923 -1.89978,-2.75222 -3.3125,-2.59375 z m -346.21875,1.15625 c -0.80371,0.0472 -1.03125,0.38764 -1.03125,1.21875 0,0.78101 0.20858,1.64609 0.5,1.9375 1.0793,1.07931 3.59375,0.12681 3.59375,-1.375 0,-1.0752 -0.58409,-1.57989 -2.0625,-1.75 -0.40103,-0.0462 -0.7321,-0.047 -1,-0.0312 z m -59.53125,3.0625 c -0.52948,-0.0296 -1.05947,0.16502 -1.34375,0.625 -0.34255,0.55416 -0.43552,1.27427 -0.21875,1.625 0.55322,0.89514 2.68846,0.37341 3.0625,-0.75 0.27603,-0.82903 -0.61753,-1.45066 -1.5,-1.5 z m 435.5625,0.40625 c 0.39993,-0.034 0.78125,0.29963 0.78125,1.03125 0,0.47964 -0.44686,1.03436 -1,1.21875 -0.65496,0.21831 -0.92484,-0.15461 -0.75,-1.0625 0.14325,-0.74382 0.56882,-1.15346 0.96875,-1.1875 z m -366.34375,1.65625 c -0.0977,-0.004 -0.18991,0.0166 -0.28125,0.0312 -1.21788,0.19538 -1.83945,1.9541 -0.4375,4.09375 1.45356,2.2184 2.37625,2.33493 3.375,0.46875 0.53137,-0.99287 0.43695,-1.80954 -0.375,-2.96875 -0.76796,-1.09643 -1.5971,-1.59875 -2.28125,-1.625 z m 417.0625,0.125 c 0.19576,-0.0233 0.40513,-10e-4 0.625,0.0312 2.09841,0.30871 2.52787,1.59713 1,3.125 -1.50794,1.50796 -2.53747,1.54339 -3.09375,0.0937 -0.62628,-1.63203 0.0984,-3.08723 1.46875,-3.25 z m -479.78125,0.0312 c -0.0945,-0.007 -0.18483,0.0129 -0.28125,0.0312 -0.85417,0.16241 -1.27654,1.41013 -1.5625,4.625 -0.22305,2.50788 -0.79365,4.5458 -1.3125,4.71875 -1.19343,0.39783 -1.19962,2.22529 0,2.65625 0.51389,0.18462 1.32216,0.017 1.78125,-0.34375 0.4591,-0.36074 1.5933,-0.54516 2.53125,-0.4375 1.31152,0.15051 1.95285,-0.39912 2.75,-2.3125 1.0049,-2.41207 0.98077,-2.46848 -0.59375,-1.96875 -1.45453,0.46165 -1.57611,0.30689 -1.21875,-1.5625 0.47334,-2.47611 -0.67682,-5.30422 -2.09375,-5.40625 z m 56.125,2.3125 c -0.3171,0.0442 -0.65347,0.19838 -1.03125,0.4375 -1.31929,0.83503 -0.47624,3.64754 1.21875,4.03125 0.70012,0.1585 1.69408,-0.0406 2.21875,-0.4375 0.77022,-0.58268 0.75939,-1.01217 -0.0625,-2.25 -0.76806,-1.15677 -1.35298,-1.73187 -2.03125,-1.78125 -0.10174,-0.007 -0.2068,-0.0147 -0.3125,0 z m -67.46875,1.03125 c -0.35336,0.016 -0.72128,0.12989 -1.0625,0.3125 -1.60957,0.86142 -1.79236,2.23888 -0.46875,3.5625 1.32588,1.32587 3.86315,0.73133 4.1875,-0.96875 0.30745,-1.6115 -1.12502,-2.97568 -2.65625,-2.90625 z m 5,3.96875 c -1.17307,0 -1.65196,1.66588 -0.65625,2.28125 0.54693,0.33794 1.25249,0.47285 1.5625,0.28125 0.69936,-0.43223 -0.0536,-2.5625 -0.90625,-2.5625 z m 71.1875,0.90625 c -0.50853,0.0691 -0.98885,0.48968 -1.25,1.3125 -0.26716,0.84194 -0.28761,1.86646 -0.0312,2.28125 0.25636,0.41479 1.14346,0.75 1.96875,0.75 1.19507,0 1.46961,-0.43056 1.28125,-2.0625 -0.18019,-1.56111 -1.12121,-2.39633 -1.96875,-2.28125 z m 365,0.0625 c -2.25174,1.1e-4 -4.39909,3.26862 -2.625,5.40625 1.1555,1.39219 1.50769,1.37674 3.5625,-0.0625 1.9032,-1.33306 2.17831,-3.46619 0.59375,-4.78125 -0.48621,-0.40352 -1.01162,-0.56252 -1.53125,-0.5625 z m -371.34375,2.15625 c -0.12329,-10e-4 -0.24281,0.0153 -0.375,0.0312 -2.77846,0.33518 -3.87642,2.48787 -2,3.90625 1.93664,1.46398 3.0938,1.44513 3.9375,-0.0625 1.10711,-1.97831 0.28679,-3.85743 -1.5625,-3.875 z m -49.21875,0.90625 c -1.49916,-0.0353 -2.90625,0.93136 -2.90625,2.71875 0,0.72791 -0.53333,1.54949 -1.21875,1.8125 -1.01234,0.38848 -1.06589,0.63589 -0.28125,1.375 0.75946,0.71537 1.01188,0.70339 1.28125,-0.0312 0.46593,-1.27076 2.08686,-1.17633 3.21875,0.1875 1.30025,1.5667 1.87265,1.41869 2.875,-0.78125 0.59983,-1.3164 0.64162,-2.3472 0.125,-3.3125 -0.69718,-1.30269 -1.92774,-1.94133 -3.09375,-1.96875 z m 479.4375,0.8125 c 0.29571,-0.0541 0.68768,0.0886 1.28125,0.40625 1.76426,0.94419 1.88139,1.73386 0.46875,2.90625 -0.77701,0.64485 -1.23027,0.57092 -1.9375,-0.28125 -0.51166,-0.6165 -0.74545,-1.64161 -0.5,-2.28125 0.1759,-0.45836 0.39179,-0.69593 0.6875,-0.75 z m -8.71875,0.78125 c 0.23623,-0.0203 0.58167,0.0387 1.03125,0.15625 0.96744,0.253 1.5,1.00338 1.5,2.15625 0,2.21064 -0.33235,2.2382 -1.8125,0.125 -1.1603,-1.65656 -1.42743,-2.37648 -0.71875,-2.4375 z m -487.21875,1.18755 c -0.10481,0.0119 -0.22031,0.0387 -0.34375,0.0625 -0.75207,0.14483 -1.48023,0.87293 -1.625,1.625 -0.19017,0.98747 0.13753,1.28392 1.125,1.09375 0.75207,-0.14484 1.48023,-0.87293 1.625,-1.625 0.14263,-0.74061 -0.006,-1.10392 -0.5,-1.15625 -0.0823,-0.009 -0.17644,-0.0119 -0.28125,0 z m 8.15625,0.0312 c -1.11511,0.0159 -2.39047,1.2049 -2.625,2.78125 -0.17771,1.1945 0.14989,1.59375 1.28125,1.59375 1.9263,0 3.55208,-2.76042 2.34375,-3.96875 -0.28712,-0.28712 -0.6283,-0.41154 -1,-0.40625 z m 473.96875,0.65625 c 0.11561,-0.0159 0.25274,0 0.40625,0 1.27004,0 2.82321,3.35002 2.25,4.84375 -0.67456,1.75791 -1.36675,1.35813 -2.34375,-1.34375 -0.99326,-2.74681 -1.12176,-3.38851 -0.3125,-3.5 z m -411.46875,0.84375 c -1.47105,-0.0305 -2.11966,1.89448 -0.96875,3.28125 1.29573,1.56127 2.59375,0.97852 2.59375,-1.1875 0,-1.11754 -0.49723,-1.90551 -1.3125,-2.0625 -0.10506,-0.0202 -0.21443,-0.0292 -0.3125,-0.0312 z m 371.4375,0.75 c -0.11101,-0.005 -0.22621,0.0137 -0.34375,0.0312 -1.90702,0.28513 -3.21984,2.24347 -2.59375,3.875 0.58132,1.51492 3.00983,1.58167 4.21875,0.125 1.25282,-1.50955 0.38386,-3.96319 -1.28125,-4.03125 z m -378.21875,1.375 c -1.38158,0.005 -2.87165,0.74743 -3.0625,2.09375 -0.13434,0.94764 0.16325,2.21847 0.65625,2.8125 2.13271,2.56977 5.87415,-0.12378 4.8125,-3.46875 -0.31424,-0.99007 -1.33169,-1.44141 -2.40625,-1.4375 z m -48.96875,1.5938 c -0.39708,0.0437 -0.9414,0.41015 -1.625,1.09375 -1.41226,1.41225 -1.53213,3.04514 -0.25,3.5625 2.19743,0.88668 2.8125,0.42453 2.8125,-2.125 0,-1.78021 -0.27569,-2.60404 -0.9375,-2.53125 z m 490.15625,2.15625 c -0.98298,0 -2.1045,0.57452 -2.5,1.28125 -1.49559,2.67245 2.58084,6.9375 6.625,6.9375 0.77862,0 1.62092,0.33888 1.875,0.75 0.25409,0.41111 0.76592,0.75 1.15625,0.75 0.39034,0 0.29777,-0.67291 -0.21875,-1.5 -0.51654,-0.82711 -1.3961,-1.34475 -1.96875,-1.125 -3.15332,1.21004 -5.82466,-1.99834 -4.21875,-5.09375 0.98296,-1.89467 0.94687,-2 -0.75,-2 z m -434.40625,0.875 c -0.33955,-0.002 -0.69219,0.0478 -0.96875,0.21875 -0.43743,0.27038 -0.61152,0.80479 -0.375,1.1875 0.57051,0.92303 2.38452,0.88279 2.96875,-0.0625 0.42565,-0.68873 -0.60634,-1.33717 -1.625,-1.34375 z m -50.84375,0.0312 c -0.88936,0.0856 -1.71875,0.74211 -1.71875,1.6875 0,1.28852 1.29956,1.46155 2.96875,0.40625 0.85371,-0.53972 0.92216,-0.89035 0.25,-1.5625 -0.41647,-0.41647 -0.96638,-0.5826 -1.5,-0.53125 z m 457.40625,1.5 c 0.73561,-0.0347 1.30961,0.30078 1.84375,1.03125 1.35323,1.85064 0.97192,3.34272 -1.0625,4.09375 -1.27935,0.47229 -1.85651,0.30434 -2.4375,-0.78125 -1.18846,-2.22064 -0.89068,-3.6271 0.875,-4.1875 0.28562,-0.0906 0.53605,-0.14468 0.78125,-0.15625 z m -408,4.3125 c -1.29375,0 -1.40311,2.75011 -0.125,3.21875 0.51389,0.18842 1.20944,0.10348 1.53125,-0.1875 0.85503,-0.7731 -0.1898,-3.03125 -1.40625,-3.03125 z m 380.5,0.25 c 0.59655,0.003 1.22144,0.22144 1.78125,0.78125 0.95196,0.95195 1.03315,1.53575 0.40625,2.53125 -1.09144,1.73316 -2.80649,1.99418 -3.96875,0.59375 -1.51403,-1.8243 -0.008,-3.91383 1.78125,-3.90625 z m 27.8125,4 c 1.36176,0.0567 2.5,1.23161 2.5,2.90625 0,1.93142 -0.80616,2.17041 -3.5625,1.0625 -2.01468,-0.80981 -2.18298,-2.64067 -0.34375,-3.625 0.46842,-0.25069 0.95233,-0.36265 1.40625,-0.34375 z m -411.21875,2.62505 c -1.37667,0.005 -2.09821,2.05814 -1.03125,3.34375 1.23303,1.48571 2.53125,0.83785 2.53125,-1.28125 0,-1.06334 -0.50003,-1.89276 -1.21875,-2.03125 -0.0974,-0.0188 -0.18947,-0.0316 -0.28125,-0.0312 z m -37.3125,4.1875 c -0.45866,7.8e-4 -0.84415,0.1254 -1.09375,0.375 -1.08477,1.08487 -1.06013,2.25238 0.0625,3.375 0.49334,0.49334 1.26652,0.875 1.71875,0.875 1.0727,0 2.59375,-1.5402 2.59375,-2.625 0,-1.02695 -1.90526,-2.00235 -3.28125,-2 z m 9.21875,1.9375 c -0.34392,0.0258 -0.67166,0.14042 -0.90625,0.375 -0.38875,0.38878 -0.46372,1.05306 -0.1875,1.5 0.72807,1.17803 3.40625,1.00818 3.40625,-0.21875 0,-0.9877 -1.28075,-1.73381 -2.3125,-1.65625 z m 439.875,1.46875 c -0.0893,0.015 -0.20972,0.0615 -0.3125,0.125 -0.4111,0.25408 -0.75,0.59996 -0.75,0.78125 0,0.18129 0.3389,0.3125 0.75,0.3125 0.41111,0 0.75,-0.34588 0.75,-0.78125 0,-0.32653 -0.16946,-0.48256 -0.4375,-0.4375 z m -421.125,14.6875 c 0.87074,0 1.37908,0.33889 1.125,0.75 -0.25409,0.41112 -0.76242,0.75 -1.125,0.75 -0.3626,0 -0.87092,-0.33888 -1.125,-0.75 -0.25408,-0.41111 0.25424,-0.75 1.125,-0.75 z m 282.4375,15.75 c 8.65754,7e-5 15.46922,3.48711 20.46875,10.4375 4.51163,6.21891 6.78117,13.82038 6.78125,22.84375 -8e-5,10.48671 -2.07293,19.27136 -6.21875,26.34375 -4.99953,8.53568 -12.37001,12.8125 -22.125,12.8125 -8.77958,0 -15.49139,-4.40794 -20.125,-13.1875 -3.78011,-6.95044 -5.65628,-15.24185 -5.65625,-24.875 -3e-5,-9.87693 1.94171,-17.80622 5.84375,-23.78125 4.63361,-7.07233 11.64197,-10.59368 21.03125,-10.59375 z" /> +</svg> diff --git a/images/gitea_logo.png b/images/gitea_logo.png new file mode 100644 index 00000000..dd3e97c4 Binary files /dev/null and b/images/gitea_logo.png differ diff --git a/images/github_fork_button.png b/images/github_fork_button.png new file mode 100644 index 00000000..faf800ff Binary files /dev/null and b/images/github_fork_button.png differ diff --git a/images/github_fork_title.png b/images/github_fork_title.png new file mode 100644 index 00000000..e95d56a7 Binary files /dev/null and b/images/github_fork_title.png differ diff --git a/images/gitlab-runner_logo.png b/images/gitlab-runner_logo.png new file mode 100644 index 00000000..a629de7e Binary files /dev/null and b/images/gitlab-runner_logo.png differ diff --git a/images/gitlab_logo.svg b/images/gitlab_logo.svg new file mode 100644 index 00000000..6e66c741 --- /dev/null +++ b/images/gitlab_logo.svg @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Calque_1" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns" + xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="222.5px" height="194px" + viewBox="0 0 222.5 194" enable-background="new 0 0 222.5 194" xml:space="preserve"> +<title>Fill 1 + Group 24</title> +<desc>Created with Sketch.</desc> +<g id="Page-1" sketch:type="MSPage"> + <g id="Fill-1-_x2B_-Group-24" sketch:type="MSLayerGroup"> + <g id="Group-24" sketch:type="MSShapeGroup"> + <g id="Group"> + <path id="Fill-4" fill="#E24329" d="M105.062,193.655L105.062,193.655l38.64-118.921h-77.28L105.062,193.655L105.062,193.655z" + /> + <path id="Fill-6" fill="#E24329" d="M0,0"/> + <path id="Fill-8" fill="#FC6D26" d="M105.062,193.654L66.421,74.734H12.269L105.062,193.654z"/> + <path id="Fill-10" fill="#FC6D26" d="M0,0"/> + <path id="Fill-12" fill="#FCA326" d="M12.269,74.734L12.269,74.734L0.527,110.873c-1.071,3.296,0.102,6.907,2.906,8.943 + l101.629,73.839L12.269,74.734z"/> + <path id="Fill-14" fill="#FCA326" d="M0,0"/> + <path id="Fill-16" fill="#E24329" d="M12.269,74.734h54.152L43.149,3.109c-1.197-3.686-6.411-3.685-7.608,0L12.269,74.734z"/> + <path id="Fill-18" fill="#FC6D26" d="M105.062,193.654l38.64-118.92h54.153L105.062,193.654z"/> + <path id="Fill-20" fill="#FCA326" d="M197.855,74.734L197.855,74.734l11.741,36.139c1.071,3.296-0.102,6.907-2.905,8.943 + l-101.629,73.839L197.855,74.734z"/> + <path id="Fill-22" fill="#E24329" d="M197.855,74.734h-54.153l23.273-71.625c1.196-3.686,6.41-3.685,7.607,0L197.855,74.734z"/> + </g> + </g> + </g> +</g> +</svg> diff --git a/images/glowing_bear_logo.svg b/images/glowing_bear_logo.svg new file mode 100644 index 00000000..48e21c42 --- /dev/null +++ b/images/glowing_bear_logo.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="457px" height="437px" viewBox="0 0 457 437" version="1.1"><title>glowing-bear</title><description>Created with Sketch (http://www.bohemiancoding.com/sketch)</description><defs><filter x="-50%" y="-50%" width="200%" height="200%" filterUnits="objectBoundingBox" id="filter-1"><feOffset dx="0" dy="27" in="SourceAlpha" result="shadowOffsetInner1"/><feGaussianBlur stdDeviation="6.5" in="shadowOffsetInner1" result="shadowBlurInner1"/><feComposite in="shadowBlurInner1" in2="SourceAlpha" operator="arithmetic" k2="-1" k3="1" result="shadowInnerInner1"/><feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.7 0" in="shadowInnerInner1" type="matrix" result="shadowMatrixInner1"/><feMerge><feMergeNode in="SourceGraphic"/><feMergeNode in="shadowMatrixInner1"/></feMerge></filter><path d="M412.43975 168.568132C428.929405 150.665226 439 126.75867 439 100.5 439 44.9953799 394.00462 0 338.5 0 312.24133 0 288.334774 10.0705946 270.431868 26.5602497 254.17316 22.2798026 237.102819 20 219.5 20 201.897181 20 184.82684 22.2798026 168.568132 26.5602497 150.665226 10.0705946 126.75867 0 100.5 0 44.9953799 0 0 44.9953799 0 100.5 0 126.75867 10.0705946 150.665226 26.5602497 168.568132 22.2798026 184.82684 20 201.897181 20 219.5 20 329.680813 109.319187 419 219.5 419 329.680813 419 419 329.680813 419 219.5 419 201.897181 416.720197 184.82684 412.43975 168.568132ZM404.819527 145.485732C413.761327 132.571077 419 116.897318 419 100 419 55.8172178 383.182782 20 339 20 322.102682 20 306.428923 25.2386726 293.514268 34.1804726 344.163467 54.4272495 384.57275 94.8365327 404.819524 145.485738ZM145.187218 34.3000815C132.526473 25.8957877 117.334973 21 101 21 56.8172178 21 21 56.8172178 21 101 21 117.334973 25.8957877 132.526473 34.3000815 145.187218 54.5461785 94.7772378 94.7772378 54.5461785 145.187225 34.3000863Z" id="path-2"/><filter x="-50%" y="-50%" width="200%" height="200%" filterUnits="objectBoundingBox" id="filter-4"><feOffset dx="0" dy="12" in="SourceAlpha" result="shadowOffsetOuter1"/><feGaussianBlur stdDeviation="0" in="shadowOffsetOuter1" result="shadowBlurOuter1"/><feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.7 0" in="shadowBlurOuter1" type="matrix" result="shadowMatrixOuter1"/><feOffset dx="0" dy="-21" in="SourceAlpha" result="shadowOffsetInner1"/><feGaussianBlur stdDeviation="0" in="shadowOffsetInner1" result="shadowBlurInner1"/><feComposite in="shadowBlurInner1" in2="SourceAlpha" operator="arithmetic" k2="-1" k3="1" result="shadowInnerInner1"/><feColorMatrix values="0 0 0 0 0.799641927 0 0 0 0 0.744202558 0 0 0 0 0.670283399 0 0 0 0.7 0" in="shadowInnerInner1" type="matrix" result="shadowMatrixInner1"/><feMerge><feMergeNode in="shadowMatrixOuter1"/><feMergeNode in="SourceGraphic"/><feMergeNode in="shadowMatrixInner1"/></feMerge></filter><path id="path-5" d="M219 390C263.182782 390 299 354.182782 299 310 299 265.817218 263.182782 230 219 230 174.817218 230 139 265.817218 139 310 139 354.182782 174.817218 390 219 390Z"/><filter x="-50%" y="-50%" width="200%" height="200%" filterUnits="objectBoundingBox" id="filter-7"><feGaussianBlur stdDeviation="11.6761364" in="SourceGraphic" result="blur"/></filter><filter x="-50%" y="-50%" width="200%" height="200%" filterUnits="objectBoundingBox" id="filter-8"><feGaussianBlur stdDeviation="24.9928977" in="SourceGraphic" result="blur"/></filter><filter x="-50%" y="-50%" width="200%" height="200%" filterUnits="objectBoundingBox" id="filter-9"><feOffset dx="0" dy="-10" in="SourceAlpha" result="shadowOffsetInner1"/><feGaussianBlur stdDeviation="0" in="shadowOffsetInner1" result="shadowBlurInner1"/><feComposite in="shadowBlurInner1" in2="SourceAlpha" operator="arithmetic" k2="-1" k3="1" result="shadowInnerInner1"/><feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.7 0" in="shadowInnerInner1" type="matrix" result="shadowMatrixInner1"/><feMerge><feMergeNode in="SourceGraphic"/><feMergeNode in="shadowMatrixInner1"/></feMerge></filter></defs><g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g id="smalleyes-copy" transform="translate(9.000000, 9.000000)"><path d="M99 194C151.467054 194 194 151.467054 194 99 194 46.5329462 151.467054 4 99 4 46.5329462 4 4 46.5329462 4 99 4 151.467054 46.5329462 194 99 194ZM339 194C391.467054 194 434 151.467054 434 99 434 46.5329462 391.467054 4 339 4 286.532946 4 244 46.5329462 244 99 244 151.467054 286.532946 194 339 194Z" id="Path" fill="#907B62" filter="url(#filter-1)"/><mask id="mask-3" fill="white"><use xlink:href="#path-2"/></mask><use id="Oval-2" stroke="#000000" stroke-width="9" fill="#907B62" xlink:href="#path-2"/><path d="M416.042773 172.705747C416.675912 178.230264 417 183.83265 417 189.5 417 283.11227 328.576243 359 219.5 359 110.423757 359 22 283.11227 22 189.5 22 182.430104 22.5043471 175.461304 23.4838477 168.618655 -19.0938504 135.854737-45 92.5196696-45 45 -45-57.1726838 74.7638221-140 222.5-140 370.236178-140 490-57.1726838 490 45 490 94.523079 461.863419 139.501275 416.042773 172.705747Z" id="Oval-1-copy" fill="#BEAA90" mask="url(#mask-3)"/><path d="M408.22706 154.661565C419.983764 139.763619 427 120.951175 427 100.5 427 52.175082 387.824918 13 339.5 13 319.311734 13 300.720336 19.8370019 285.91493 31.3218822 343.193403 51.5375564 388.477901 97.1645735 408.227058 154.661567ZM153.772628 31.0806364C139.018494 19.7413227 120.546508 13 100.5 13 52.175082 13 13 52.175082 13 100.5 13 120.546508 19.7413227 139.018494 31.0806364 153.772628 51.0696744 96.4650894 96.4650894 51.0696744 153.772631 31.0806386Z" id="Oval-2-copy" fill="#907B62" mask="url(#mask-3)"/><mask id="mask-6" fill="white"><use xlink:href="#path-5"/></mask><use id="Oval-63" fill="#D9CDBD" filter="url(#filter-4)" xlink:href="#path-5"/><path d="M121.353143 210.466662C155.494975 219.614939 188.386871 207.570395 194.819253 183.564419 201.251635 159.558443 178.788689 132.681614 144.646857 123.533338 110.505025 114.385061 77.613129 126.429605 71.1807471 150.435581 64.7483653 174.441557 87.2113107 201.318386 121.353143 210.466662ZM317.646857 210.466662C351.788689 201.318386 374.251635 174.441557 367.819253 150.435581 361.386871 126.429605 328.494975 114.385061 294.353143 123.533338 260.211311 132.681614 237.748365 159.558443 244.180747 183.564419 250.613129 207.570395 283.505025 219.614939 317.646857 210.466662Z" id="Oval-4-copy" fill="#F6A623" filter="url(#filter-7)"/><path d="M121.353143 210.466662C155.494975 219.614939 188.386871 207.570395 194.819253 183.564419 201.251635 159.558443 178.788689 132.681614 144.646857 123.533338 110.505025 114.385061 77.613129 126.429605 71.1807471 150.435581 64.7483653 174.441557 87.2113107 201.318386 121.353143 210.466662ZM317.646857 210.466662C351.788689 201.318386 374.251635 174.441557 367.819253 150.435581 361.386871 126.429605 328.494975 114.385061 294.353143 123.533338 260.211311 132.681614 237.748365 159.558443 244.180747 183.564419 250.613129 207.570395 283.505025 219.614939 317.646857 210.466662Z" id="Oval-4-copy-3" fill="#FFFFFF" filter="url(#filter-8)"/><path d="M121.353143 210.466662C155.494975 219.614939 188.386871 207.570395 194.819253 183.564419 201.251635 159.558443 178.788689 132.681614 144.646857 123.533338 110.505025 114.385061 77.613129 126.429605 71.1807471 150.435581 64.7483653 174.441557 87.2113107 201.318386 121.353143 210.466662ZM317.646857 210.466662C351.788689 201.318386 374.251635 174.441557 367.819253 150.435581 361.386871 126.429605 328.494975 114.385061 294.353143 123.533338 260.211311 132.681614 237.748365 159.558443 244.180747 183.564419 250.613129 207.570395 283.505025 219.614939 317.646857 210.466662Z" id="Oval-4-copy" fill="#FFFFFF"/><path d="M220.000002 328.000001C200.000002 328.000001 160 288 180 268 200 248 239.999999 248.000003 260 268 280 288 240.000002 328.000001 220.000002 328.000001Z" id="Path-1" stroke="#979797" fill="#4A4A4A" filter="url(#filter-9)"/></g></g></svg> \ No newline at end of file diff --git a/images/gogs_logo.png b/images/gogs_logo.png deleted file mode 100644 index 74ac8d40..00000000 Binary files a/images/gogs_logo.png and /dev/null differ diff --git a/images/gogs.svg b/images/gogs_logo.svg similarity index 100% rename from images/gogs.svg rename to images/gogs_logo.svg diff --git a/images/gotify_logo.png b/images/gotify_logo.png new file mode 100644 index 00000000..99848593 Binary files /dev/null and b/images/gotify_logo.png differ diff --git a/images/grav_logo.png b/images/grav_logo.png new file mode 100644 index 00000000..489c4ea9 Binary files /dev/null and b/images/grav_logo.png differ diff --git a/images/halcyon_logo.png b/images/halcyon_logo.png new file mode 100644 index 00000000..4468cdf3 Binary files /dev/null and b/images/halcyon_logo.png differ diff --git a/images/hextris_logo.png b/images/hextris_logo.png new file mode 100644 index 00000000..ce78a935 Binary files /dev/null and b/images/hextris_logo.png differ diff --git a/images/horde_logo.png b/images/horde_logo.png new file mode 100644 index 00000000..686b4db0 Binary files /dev/null and b/images/horde_logo.png differ diff --git a/images/hubzilla_logo.png b/images/hubzilla_logo.png new file mode 100644 index 00000000..5766891d Binary files /dev/null and b/images/hubzilla_logo.png differ diff --git a/images/images_check.sh b/images/images_check.sh old mode 100755 new mode 100644 diff --git a/images/internetcube.png b/images/internetcube.png new file mode 100644 index 00000000..af590f1c Binary files /dev/null and b/images/internetcube.png differ diff --git a/images/invoiceninja_logo.png b/images/invoiceninja_logo.png new file mode 100644 index 00000000..0c663528 Binary files /dev/null and b/images/invoiceninja_logo.png differ diff --git a/images/jappix.png b/images/jappix.png deleted file mode 100644 index c9169f1a..00000000 Binary files a/images/jappix.png and /dev/null differ diff --git a/images/jappix_logo.png b/images/jappix_logo.png new file mode 100644 index 00000000..53124199 Binary files /dev/null and b/images/jappix_logo.png differ diff --git a/images/jitsi_logo.png b/images/jitsi_logo.png new file mode 100644 index 00000000..42aa5618 Binary files /dev/null and b/images/jitsi_logo.png differ diff --git a/images/jitsi_logo.svg b/images/jitsi_logo.svg new file mode 100644 index 00000000..5a3526ac --- /dev/null +++ b/images/jitsi_logo.svg @@ -0,0 +1,650 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="744.09448819" + height="1052.3622047" + id="svg5488" + version="1.1" + inkscape:version="0.47 r22583" + sodipodi:docname="New document 5"> + <defs + id="defs5490"> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective5496" /> + <inkscape:perspective + id="perspective5347" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient8896" + id="linearGradient4242" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-297.23084,320.86007)" + x1="439.90353" + y1="455.73935" + x2="469.71744" + y2="557.74847" /> + <linearGradient + id="linearGradient8896"> + <stop + id="stop8898" + offset="0" + style="stop-color:#0f3060;stop-opacity:1;" /> + <stop + style="stop-color:#0575ce;stop-opacity:1;" + offset="0.27115166" + id="stop8902" /> + <stop + id="stop12553" + offset="0.7327472" + style="stop-color:#0575ce;stop-opacity:1;" /> + <stop + style="stop-color:#0f3060;stop-opacity:1;" + offset="1" + id="stop8900" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5041" + id="linearGradient4244" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-297.23084,320.86007)" + x1="382.80234" + y1="585.22589" + x2="347.44287" + y2="645.02435" /> + <linearGradient + id="linearGradient5041"> + <stop + style="stop-color:#092d61;stop-opacity:1;" + offset="0" + id="stop5043" /> + <stop + id="stop5047" + offset="1" + style="stop-color:#0575ce;stop-opacity:1;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3493" + id="linearGradient4246" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-297.23084,320.86007)" + x1="415.81378" + y1="620.09808" + x2="436.35599" + y2="486.43097" /> + <linearGradient + id="linearGradient3493"> + <stop + style="stop-color:#0f3060;stop-opacity:1;" + offset="0" + id="stop3495" /> + <stop + id="stop3497" + offset="0.45698157" + style="stop-color:#0575ce;stop-opacity:1;" /> + <stop + style="stop-color:#0575ce;stop-opacity:1;" + offset="0.73828435" + id="stop3501" /> + <stop + id="stop3507" + offset="1" + style="stop-color:#0f3060;stop-opacity:1;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3529" + id="linearGradient4248" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.245729,0,0,0.245729,34.35214,723.04037)" + x1="389.59329" + y1="763.3017" + x2="308.98642" + y2="420.01578" /> + <linearGradient + id="linearGradient3529"> + <stop + id="stop3531" + offset="0" + style="stop-color:#ff8000;stop-opacity:1;" /> + <stop + style="stop-color:#fff4e1;stop-opacity:1;" + offset="0.6627211" + id="stop3533" /> + <stop + id="stop3535" + offset="0.75" + style="stop-color:#fff4e1;stop-opacity:1;" /> + <stop + id="stop3537" + offset="1.0000000" + style="stop-color:#ff8400;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3591" + id="linearGradient4250" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-297.23084,320.86007)" + x1="528.82031" + y1="511.71811" + x2="458.46918" + y2="527.10736" /> + <linearGradient + id="linearGradient3591"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop3593" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop3595" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient7434" + id="linearGradient4252" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.245729,0,0,0.245729,34.35214,723.04037)" + x1="197.17841" + y1="703.80151" + x2="146.54216" + y2="785.90436" /> + <linearGradient + id="linearGradient7434"> + <stop + id="stop7436" + offset="0" + style="stop-color:#ffc768;stop-opacity:1;" /> + <stop + style="stop-color:#ff8400;stop-opacity:1.0000000;" + offset="0.37842149" + id="stop7438" /> + <stop + id="stop7440" + offset="0.77420431" + style="stop-color:#ff8400;stop-opacity:1.0000000;" /> + <stop + id="stop7442" + offset="1" + style="stop-color:#ffc768;stop-opacity:1;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3591" + id="linearGradient4254" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.0334058,0,0,1.0138319,-309.91012,314.18347)" + x1="413.63229" + y1="484.60083" + x2="423.52518" + y2="541.83301" /> + <linearGradient + id="linearGradient5384"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop5386" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop5388" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3509" + id="linearGradient4256" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.245729,0,0,0.245729,34.35214,723.04037)" + x1="409.69571" + y1="559.36359" + x2="467.88617" + y2="676.03516" /> + <linearGradient + id="linearGradient3509"> + <stop + id="stop3511" + offset="0" + style="stop-color:#ff8000;stop-opacity:1;" /> + <stop + style="stop-color:#ffc768;stop-opacity:1.0000000;" + offset="0.34144846" + id="stop3513" /> + <stop + id="stop3515" + offset="0.71198046" + style="stop-color:#ffc768;stop-opacity:1.0000000;" /> + <stop + id="stop3517" + offset="1.0000000" + style="stop-color:#ff8400;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3651" + id="linearGradient4258" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.245729,0,0,0.245729,34.35214,723.04037)" + x1="522.63641" + y1="168.68723" + x2="585.93317" + y2="161.10866" /> + <linearGradient + id="linearGradient3651"> + <stop + style="stop-color:#ff8000;stop-opacity:1;" + offset="0" + id="stop3653" /> + <stop + id="stop16786" + offset="0.5" + style="stop-color:#fff4e1;stop-opacity:1;" /> + <stop + style="stop-color:#fff4e1;stop-opacity:1;" + offset="0.75" + id="stop17514" /> + <stop + style="stop-color:#ff8400;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop3655" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3509" + id="linearGradient4260" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.245729,0,0,0.245729,34.35214,723.04037)" + x1="481.48975" + y1="417.49979" + x2="405.41116" + y2="316.78976" /> + <linearGradient + id="linearGradient5403"> + <stop + id="stop5405" + offset="0" + style="stop-color:#ff8000;stop-opacity:1;" /> + <stop + style="stop-color:#ffc768;stop-opacity:1.0000000;" + offset="0.34144846" + id="stop5407" /> + <stop + id="stop5409" + offset="0.71198046" + style="stop-color:#ffc768;stop-opacity:1.0000000;" /> + <stop + id="stop5411" + offset="1.0000000" + style="stop-color:#ff8400;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3591" + id="linearGradient4262" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-297.23084,320.86007)" + x1="473.09195" + y1="499.58444" + x2="457.68967" + y2="477.5997" /> + <linearGradient + id="linearGradient5414"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop5416" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop5418" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3591" + id="linearGradient4264" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-297.23084,320.86007)" + x1="394.34113" + y1="501.80154" + x2="446.31302" + y2="485.37762" /> + <linearGradient + id="linearGradient5421"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop5423" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop5425" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3591" + id="linearGradient4266" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-297.23084,320.86007)" + x1="395.81326" + y1="590.73315" + x2="369.55322" + y2="572.16907" /> + <linearGradient + id="linearGradient5428"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop5430" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop5432" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2937" + id="linearGradient4268" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.245729,0,0,0.245729,34.35214,723.04037)" + x1="297.05316" + y1="667.16193" + x2="310.45529" + y2="713.86633" /> + <linearGradient + id="linearGradient2937"> + <stop + style="stop-color:#212a3a;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop2939" /> + <stop + style="stop-color:#404e67;stop-opacity:0.0000000;" + offset="1.0000000" + id="stop2941" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2937" + id="linearGradient4270" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.09307993,0,0,0.1860535,131.94157,665.87199)" + x1="246.30438" + y1="690.02673" + x2="366.87921" + y2="632.15985" /> + <linearGradient + id="linearGradient5439"> + <stop + style="stop-color:#212a3a;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop5441" /> + <stop + style="stop-color:#404e67;stop-opacity:0.0000000;" + offset="1.0000000" + id="stop5443" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2937" + id="linearGradient4272" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-0.09281332,-0.00703915,0.01407026,-0.1855207,186.19996,929.70821)" + x1="301.05194" + y1="645.89917" + x2="367.94604" + y2="654.72131" /> + <linearGradient + id="linearGradient5446"> + <stop + style="stop-color:#212a3a;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop5448" /> + <stop + style="stop-color:#404e67;stop-opacity:0.0000000;" + offset="1.0000000" + id="stop5450" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2937" + id="linearGradient4274" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.245729,0,0,0.245729,98.31046,642.63728)" + x1="279.81714" + y1="688.32355" + x2="386.78625" + y2="667.6355" /> + <linearGradient + id="linearGradient5453"> + <stop + style="stop-color:#212a3a;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop5455" /> + <stop + style="stop-color:#404e67;stop-opacity:0.0000000;" + offset="1.0000000" + id="stop5457" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2937" + id="linearGradient4276" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.245729,0,0,0.245729,25.55056,660.77045)" + x1="338.14404" + y1="668.3009" + x2="266.215" + y2="702.89276" /> + <linearGradient + id="linearGradient5460"> + <stop + style="stop-color:#212a3a;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop5462" /> + <stop + style="stop-color:#404e67;stop-opacity:0.0000000;" + offset="1.0000000" + id="stop5464" /> + </linearGradient> + <linearGradient + y2="702.89276" + x2="266.215" + y1="668.3009" + x1="338.14404" + gradientTransform="matrix(0.245729,0,0,0.245729,25.55056,660.77045)" + gradientUnits="userSpaceOnUse" + id="linearGradient5486" + xlink:href="#linearGradient2937" + inkscape:collect="always" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="0.35" + inkscape:cx="375" + inkscape:cy="520" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="798" + inkscape:window-height="690" + inkscape:window-x="20" + inkscape:window-y="20" + inkscape:window-maximized="0" /> + <metadata + id="metadata5493"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1"> + <g + id="g4202" + transform="matrix(4.2070673,0,0,4.2070673,-152.93197,-3059.7049)"> + <path + inkscape:export-ydpi="19.25" + inkscape:export-xdpi="19.25" + inkscape:export-filename="/home/emcho/storage/images/sc_logo/sc_logo136x203.png" + sodipodi:nodetypes="csssssssssssssssssssssssssssssssssccssssssssssccsssssssssccsssssssssscssssssssssccssssssscssssssssc" + id="path4204" + d="m 52.51386,963.95968 c -0.59762,-1.31419 -1.08659,-2.49776 -1.08659,-2.63031 0,-0.13252 -2.08061,-11.07486 -2.31769,-13.88681 -1.03506,-12.27691 -2.66752,-13.45265 -2.21175,-24.39857 0.2761,-6.63061 -0.64392,-8.89235 1.31344,-14.31478 4.03102,-11.16694 6.98662,-15.56085 12.2251,-18.17414 4.24974,-2.12004 8.23695,-1.83207 11.97929,0.86518 0.98634,0.71092 4.29577,2.95048 7.35426,4.97678 3.05851,2.02634 6.69103,4.48296 8.07229,5.45919 1.38125,0.97628 3.68511,2.38497 5.11972,3.13046 2.53058,1.3151 2.62411,1.3351 3.13729,0.67104 1.12761,-1.45907 3.84947,-5.55395 5.32124,-7.50854 7.37209,-9.79052 0.42914,-8.70222 -1.30592,-9.21291 -2.72783,-0.80294 -3.87684,-1.97938 -6.42642,-4.96758 -5.92163,-6.94035 -8.72797,-14.66214 -9.14262,-24.20339 -0.48154,-11.07972 0.63266,-20.01531 5.49789,-25.10088 2.08527,-2.17973 6.49949,-5.34524 10.53505,-7.55495 3.4177,-1.87139 24.37883,-5.78232 26.21837,-4.96975 0.91898,0.40593 -3.63796,-11.63862 -1.01552,-27.29896 0.52096,-3.11103 4.05934,-12.73788 4.43322,-13.39298 0.92313,-1.61744 16.13503,-6.82395 20.46221,-9.36515 4.83486,-2.83935 15.29074,-9.67883 16.07843,-14.76568 1.73099,-11.1786 2.03825,-15.9556 2.75981,-16.37531 1.07388,-0.62465 8.25251,14.17566 3.39352,28.13116 -0.95893,2.75414 -5.53206,9.14865 -7.57975,11.8233 -1.47452,1.92602 1.72775,2.82621 3.56985,5.60679 1.67534,2.52882 2.77675,8.71086 2.9918,11.91416 0.21959,3.27101 -0.81543,9.98235 -1.7425,11.2988 -0.37549,0.53325 -0.52929,1.05709 -0.34387,1.17136 0.18449,0.11368 1.43417,-0.0352 2.77708,-0.33076 1.34289,-0.29559 4.25366,-0.7663 6.46837,-1.046 3.94259,-0.49787 4.08384,-0.49095 6.7595,0.33213 4.01386,1.23476 23.53789,5.95177 11.07947,60.50742 -4.12753,18.07453 -23.38873,41.92489 -25.8106,40.0783 l -5.96407,-4.5474 -6.87325,10.19022 c -3.50798,3.60293 -7.29065,7.08029 -9.52167,8.75312 -3.52051,2.63972 -10.56453,6.79799 -11.51562,6.79799 -0.24492,0 -1.63251,0.56931 -3.08354,1.26516 -4.19508,2.01176 -10.47851,3.66081 -17.13429,4.09795 -25.77135,1.66956 -15.93975,-1.44192 -37.27858,-11.77515 -1.68316,-0.81506 -5.55753,3.29679 -10.22719,7.54571 -4.98524,4.53606 -7.60226,7.98846 -9.57996,12.63792 -0.66947,1.57389 -1.71168,3.98838 -2.31602,5.36552 -1.64444,3.74731 -2.99719,8.93229 -3.19818,12.25814 -0.0983,1.62685 -0.31514,3.04193 -0.48187,3.14469 -0.16673,0.10272 -0.7921,-0.88841 -1.38973,-2.20249 z m 28.33197,-45.90886 c 3.30313,-0.83536 3.66477,-1.01966 7.21765,-3.67825 2.54576,-1.90501 4.12321,-5.3446 4.8004,-5.64508 4.4324,-1.96673 -3.3083,-3.73691 -6.20226,-5.68891 -2.89398,-1.95202 -6.65724,-3.39508 -9.2209,-5.3521 -2.56367,-1.95698 -4.78356,-3.48279 -4.93308,-3.39068 -0.14952,0.0921 -0.27471,1.40551 -0.27821,2.91861 -0.01023,4.41323 -0.6021,8.84164 -1.42935,10.69448 -0.42105,0.94301 -0.84611,2.76087 -0.94461,4.03969 -0.22816,2.96221 0.46109,4.38683 2.91271,6.02036 2.06595,1.3766 2.92385,1.38532 8.07765,0.0819 z m 119.70575,-83.58495 c -1.07558,-7.22468 -0.18498,-17.16053 -5.81444,-20.77728 -12.98767,-8.34415 -14.4135,-0.0696 -15.21021,1.75899 -1.31072,3.0083 -2.11753,5.46892 -1.12273,8.7761 3.05641,10.16086 6.96643,19.15821 8.82255,26.38029 2.13021,8.28856 4.47797,13.53077 4.71288,20.02986 0.16678,4.61378 0.12302,5.09887 -0.55601,6.16474 -0.9655,1.51542 -15.55215,5.22752 -22.89767,7.39176 -2.52211,0.74311 -0.28804,6.12175 -0.57696,7.89239 -0.28892,1.77059 -4.23701,11.66713 -2.96729,13.65682 12.52923,19.63374 40.23506,-40.20634 35.60988,-71.27367 z m -26.98831,48.27201 c 1.95984,-0.47131 3.79219,-1.04626 4.0719,-1.27773 0.27971,-0.23143 0.99066,-0.38419 1.57991,-0.33941 1.05432,0.0801 5.18218,-1.21949 5.4995,-1.73148 0.0894,-0.14415 3.7722,-2.06556 3.0355,-2.55357 -0.73674,-0.48803 -15.13237,-11.07005 -17.19649,-12.14627 -23.77004,-12.39364 -36.26526,-13.24685 -44.11407,-11.66556 -13.44457,2.70866 -25.05657,9.52598 -26.45346,11.20755 -0.42178,0.50774 21.04913,-6.66097 36.28977,0.87085 2.81591,1.39161 8.62965,3.78304 13.00058,8.46269 3.99268,4.27467 7.63329,8.79778 10.49869,9.5617 3.10695,0.82834 9.47337,0.64882 13.78817,-0.38877 z m -28.65731,-51.09687 c 7.52619,-1.317 19.18627,-16.95235 18.27894,-18.41606 -0.12276,-0.19808 2.25527,-4.14459 1.86904,-4.22161 -14.0842,-2.80833 -13.74485,-16.83242 -13.94793,-16.95753 -0.20308,-0.12514 -20.76525,9.71022 -25.50376,11.75869 -4.02092,1.73825 0.57503,12.10208 2.99929,18.53437 1.07855,2.86172 7.01744,6.67785 9.40766,8.23365 2.82773,1.84055 6.25378,1.181 6.89676,1.06849 z m 16.21969,-47.71727 c 4.06405,-3.20289 14.88802,-19.23422 13.73961,-25.73988 -4.67874,-26.5048 -6.69569,-10.0962 -6.99598,-7.73088 -0.12436,0.97963 -0.47868,3.14936 -0.7874,4.82161 -0.30868,1.67227 -0.70224,4.08678 -0.87456,5.36555 -0.1723,1.2788 -0.64865,3.53233 -1.05855,5.00784 -0.4099,1.47554 -1.05724,3.92831 -1.43856,5.45066 -0.38128,1.52232 -1.66486,5.27236 -2.85234,8.33339 -1.18749,3.06104 -2.15908,5.63846 -2.15908,5.72759 0,0.447 0.82393,0.0274 2.42686,-1.23588 z" + style="fill:url(#linearGradient4242);fill-opacity:1" /> + <path + sodipodi:nodetypes="ccssc" + id="path4206" + d="m 53.57922,963.11994 c 6.35309,-26.31992 12.10112,-29.26957 27.22751,-39.0261 -3.32781,-1.89079 -11.51745,-8.1594 -11.49606,-11.49606 0.05726,-9.74197 1.6676,-26.72201 -9.07584,-19.66431 -20.38515,13.39167 -13.0087,55.96766 -6.65561,70.18647 z" + style="fill:url(#linearGradient4244);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" /> + <path + sodipodi:nodetypes="ccccsc" + id="path4208" + d="m 75.93257,920.7226 c 8.98173,6.78619 16.91991,12.78559 22.55412,15.96751 54.94138,2.77762 68.66033,-27.59386 69.6583,-52.49321 -4.89006,0.22454 -13.22311,-0.97302 -17.71397,-7.7405 -11.21439,3.68089 -45.16617,14.00314 -45.75692,16.32304 -3.06467,12.03515 -12.17523,21.75574 -28.74153,27.94316 z" + style="fill:url(#linearGradient4246);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" /> + <path + inkscape:export-ydpi="19.25" + inkscape:export-xdpi="19.25" + inkscape:export-filename="/home/emcho/storage/images/sc_logo/sc_logo136x203.png" + sodipodi:nodetypes="cssssss" + id="path4210" + d="m 171.27539,910.58112 c 33.18508,-24.69965 28.91369,-74.159 29.44979,-76.69151 1.36299,-6.43866 -6.64955,-28.25155 -16.27383,-24.24947 -16.02424,6.66336 11.2767,44.44456 7.61407,65.1661 -0.76342,4.31907 -13.98948,7.50294 -22.98022,8.89864 -1.03689,0.16096 -0.1163,14.0955 -4.62673,20.50927 -0.64571,0.91818 6.21023,6.81854 6.81692,6.36697 z" + style="fill:url(#linearGradient4248);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" /> + <path + sodipodi:nodetypes="ccc" + id="path4212" + d="m 175.90353,907.19115 c 42.49251,-41.74886 20.98218,-116.27813 6.14636,-94.50993 20.37687,-4.1207 23.61854,64.2671 -6.14636,94.50993 z" + style="fill:url(#linearGradient4250);fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + inkscape:export-ydpi="19.25" + inkscape:export-xdpi="19.25" + inkscape:export-filename="/home/emcho/storage/images/sc_logo/sc_logo136x203.png" + sodipodi:nodetypes="csszs" + id="path4214" + d="m 95.21705,907.77562 c 0.78602,-1.06057 -13.88152,-6.08284 -22.74639,-14.06472 -0.98292,-0.88501 -1.14144,12.91242 -2.0703,18.66551 -0.57712,3.57451 5.4925,7.17351 6.87977,7.62184 1.15081,0.37191 14.71014,-7.86884 17.93692,-12.22263 z" + style="fill:url(#linearGradient4252);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" /> + <path + sodipodi:nodetypes="ccccc" + id="path4216" + d="m 83.58536,868.01334 c -5.099007,-25.84347 4.179267,-41.03939 41.3579,-46.37791 0.18024,0.56879 41.31909,-13.25606 55.79189,-13.35001 -3.92283,6.23323 0.0433,21.62385 4.80916,34.27609 0,0 -34.8276,9.08768 -101.95895,25.45183 z" + style="fill:url(#linearGradient4254);fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + inkscape:export-ydpi="19.25" + inkscape:export-xdpi="19.25" + inkscape:export-filename="/home/emcho/storage/images/sc_logo/sc_logo136x203.png" + sodipodi:nodetypes="csssss" + id="path4218" + d="m 101.65537,863.89391 c 4.41182,-1.58073 17.00722,-5.39035 32.05421,-0.1519 10.3057,3.58781 16.2195,12.63312 20.66816,16.112 10.4789,8.19457 29.82289,-0.90843 33.32172,-0.85341 1.43753,0.0226 -25.96694,-24.60193 -46.62844,-25.8478 -27.77538,-1.67482 -45.11147,12.78188 -39.41565,10.74111 z" + style="fill:url(#linearGradient4256);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" /> + <path + inkscape:export-ydpi="19.25" + inkscape:export-xdpi="19.25" + inkscape:export-filename="/home/emcho/storage/images/sc_logo/sc_logo136x203.png" + sodipodi:nodetypes="csss" + id="path4220" + d="m 169.42704,741.43522 c -0.1528,8.40398 -2.79669,28.46338 -11.30718,42.1727 -3.89274,6.27072 14.52008,-8.27661 16.50236,-20.78075 1.09029,-6.8775 -5.06881,-28.08959 -5.19518,-21.39195 z" + style="fill:url(#linearGradient4258);fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + inkscape:export-ydpi="19.25" + inkscape:export-xdpi="19.25" + inkscape:export-filename="/home/emcho/storage/images/sc_logo/sc_logo136x203.png" + sodipodi:nodetypes="cssscsc" + id="path4222" + d="m 141.79058,833.10697 c 9.23931,-4.71783 17.65654,-10.92192 22.99128,-22.44259 0.9032,-1.9505 -4.39968,-0.0586 -8.47555,-5.84433 -4.0357,-5.72867 -3.08341,-11.54295 -6.54001,-11.07789 -10.80021,1.4531 -25.20082,11.63758 -25.20082,11.63758 0,0 0.82824,11.14408 3.74751,15.67372 6.01898,9.33928 13.47759,12.05351 13.47759,12.05351 z" + style="fill:url(#linearGradient4260);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" /> + <path + sodipodi:nodetypes="ccc" + id="path4224" + d="m 156.09152,803.78111 c 2.72579,9.88879 17.87347,8.09668 14.70668,-11.15251 -1.36528,1.99619 -4.77608,12.95694 -14.70668,11.15251 z" + style="opacity:0.55223843;fill:url(#linearGradient4262);fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + sodipodi:nodetypes="csccsc" + id="path4226" + d="m 140.48504,832.28297 c -5.10096,-3.46887 -9.50419,-7.78444 -12.32504,-12.34966 -2.82085,-4.56521 -4.0593,-27.84724 0.68685,-33.63375 2.60826,-6.3637 11.84132,-12.51424 22.09721,-15.2308 -19.49494,22.60506 -13.17796,56.86685 4.07359,53.53526 0.86206,-0.16648 -12.82587,7.73026 -14.53261,7.67895 z" + style="fill:url(#linearGradient4264);fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + sodipodi:nodetypes="ccc" + id="path4228" + d="m 72.32239,893.02911 c 3.80886,2.81881 20.23882,15.53557 23.85984,13.52306 -8.41018,20.55895 -30.55349,3.14238 -23.85984,-13.52306 z" + style="fill:url(#linearGradient4266);fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + inkscape:export-ydpi="19.25" + inkscape:export-xdpi="19.25" + inkscape:export-filename="/home/emcho/storage/images/sc_logo/sc_logo136x203.png" + sodipodi:nodetypes="ccsssccssscccsssscscsccsssssccssssssccsssccssssccsscssssssssssssccsssccssssssccssssssssssssscsssscssscssc" + id="path4230" + d="m 140.05745,777.56053 c -3.94728,2.30056 -8.69302,4.87373 -9.63531,7.20019 -3.16217,6.64336 -4.34745,18.56552 -3.38465,17.88089 9.38401,-6.67285 20.24871,-8.52283 24.20205,-12.0967 11.71489,-10.59045 16.26287,-32.48353 13.80119,-29.2383 -7.96915,10.50564 -20.9111,13.88057 -24.98328,16.25392 z m -61.4085,147.01185 c 0,0 -11.08091,-7.66436 -10.87669,-10.1233 1.697,-20.4327 -1.92942,-21.625 -3.75706,-21.40828 -2.20803,0.26184 -13.6822,7.50553 -15.92058,27.95835 -1.62427,14.84147 4.24013,38.0296 5.13347,39.28426 4.62276,-12.42378 2.81919,-22.42331 25.42086,-35.71103 z m 121.05779,-90.52225 c -0.55133,-15.31772 -9.77382,-25.84979 -16.03746,-23.38322 -2.65737,1.04645 -4.4415,8.17887 -3.50846,12.60125 0.82755,3.92256 6.46634,19.10152 6.87179,20.38471 0.95868,3.03418 7.43087,21.62978 6.28035,30.56471 -1.00846,7.8316 -23.7097,10.5413 -23.7097,10.5413 0,0 -0.38149,6.37449 -1.16407,10.68177 -0.96202,5.29492 -2.86934,9.45033 -2.86934,9.45033 0,0 4.94251,4.60429 5.14224,4.59918 0.19973,-0.005 31.10844,-16.7127 28.99465,-75.44003 z m -23.69666,47.44964 c 1.59781,-0.44722 11.03201,-2.94175 10.52638,-3.27341 -3.50095,-2.2964 -7.48504,-5.18714 -14.1578,-10.37693 -37.04552,-28.81248 -70.69468,-4.54502 -70.03165,-4.76554 6.15153,-2.04594 12.64754,-3.20211 21.67232,-2.5993 7.26918,0.48555 18.69619,4.17029 28.70607,16.10244 3.72328,4.43828 7.94798,7.4497 23.28468,4.91274 z M 159.4851,818.95922 c 1.12085,-0.96962 5.01656,-8.31336 4.31505,-8.48395 -9.83076,-2.39074 -10.78824,-6.74031 -11.75043,-11.4727 -0.90123,-4.43254 -0.76219,-5.06465 -2.62452,-4.44953 -15.04703,4.96997 -19.20919,7.70131 -21.51157,9.61214 -3.60666,2.99331 -1.0768,11.03634 0.33349,14.23298 1.96563,4.4554 9.19232,12.51758 12.55437,13.16681 4.90391,0.94697 16.49344,-9.09974 18.68361,-12.60575 z m 10.93597,-27.14087 c -0.81548,-3.33524 -3.43538,-7.63066 -4.13349,-7.63066 -0.65744,0 -7.61876,5.38666 -9.4168,7.26354 -4.08086,4.25969 -2.09206,11.97893 2.43483,14.62671 7.66207,4.48154 13.28874,-5.37111 11.11546,-14.25959 z m -5.77705,-12.75642 c 3.35221,-3.34862 7.80844,-8.84532 8.99344,-17.19839 0.46443,-3.27384 0.73411,-6.15364 -1.30205,-12.62655 -0.47191,-1.50022 -1.90642,-5.8148 -1.96005,-5.24636 -1.05907,11.22382 -2.61083,23.68653 -9.93627,36.93167 -2.29934,4.15745 -1.06286,3.40174 4.20493,-1.86037 z m -78.6191,66.84814 c -3.99349,16.75103 6.58927,38.75062 15.16215,40.00456 8.28707,1.21213 32.04487,-5.96093 44.50484,-9.42568 3.26456,-0.90778 5.02074,-0.43427 -2.20131,-6.48455 -11.3226,-7.69755 -20.46099,-8.68868 -29.5776,-7.65392 -10.05581,1.14135 -17.59102,4.11772 -16.88606,3.52743 4.61053,-3.86056 12.8225,-10.76401 28.68812,-13.89013 6.89585,-1.35875 17.53788,-1.47808 30.38613,3.54005 15.93675,6.2244 24.23739,15.45542 30.97531,18.58381 2.39935,1.11401 3.25644,0.59604 4.20446,-2.18817 1.5883,-4.66452 -8.06663,-33.78938 -11.56456,-42.28236 -5.33802,-12.96073 0.89004,-19.15557 -0.47125,-18.85551 -6.6027,1.45543 -12.42508,5.69932 -17.306,10.06932 -11.93084,10.68198 -19.20273,12.95753 -20.28189,12.86579 -3.40727,-0.28972 -9.78249,-6.32022 -12.09877,-9.38241 -1.47795,-1.95389 -27.92949,3.15177 -35.72972,9.92827 -0.17845,0.15503 -6.19704,4.01498 -7.80385,11.6435 z M 77.5498,918.8389 c 8.72435,-3.6605 17.26585,-11.43939 16.52709,-11.56787 -4.52939,-0.78772 -21.23379,-12.23383 -21.22226,-12.11514 0.57378,5.90697 -0.71357,11.21473 -1.30092,17.06944 -0.24494,2.44161 3.00975,6.22428 5.99609,6.61357 z m 28.15174,-25.60492 c -1.66901,3.72058 -3.41156,18.3512 -27.53028,27.73991 -0.69864,0.27195 20.21205,14.57036 21.35002,14.62032 69.0544,3.03144 68.46916,-49.55437 67.5526,-50.88016 -0.13265,-0.19188 -6.03889,0.0138 -10.61352,-2.15692 -0.34887,-0.1655 -3.45204,-1.76502 -5.30227,-4.17423 -0.62757,-0.81715 -0.72524,-1.26122 -3.05074,-0.58541 -10.76269,3.12776 -42.89539,14.65696 -42.40581,15.43649 z M 84.18935,867.5847 c -12.33127,-43.08647 30.94329,-45.08535 37.80451,-46.74439 5.30593,-1.28297 4.14977,-1.78189 3.03089,-6.80033 -1.57099,-7.04629 -1.0816,-13.18841 0.26513,-19.77217 1.27351,-6.2258 1.93035,-9.37394 4.61998,-12.49571 2.16789,-2.51621 14.38379,-8.27049 17.4121,-9.72295 12.90529,-6.18974 17.83586,-12.99328 19.27422,-18.34465 1.014,-3.77255 2.49779,-13.07094 1.83081,-19.71727 -0.16416,-1.6359 0.89135,0.92745 6.14205,17.24159 2.68293,8.33593 1.36177,18.34502 -7.09994,27.38172 -1.14918,1.22726 -0.59185,1.4703 0.95354,4.02388 3.21078,5.30554 4.98573,11.93993 4.48566,16.76662 -0.40972,3.95432 -2.10008,7.6934 0.31754,7.40286 0.34951,-0.042 11.02834,-1.65875 18.33848,2.98757 4.95048,3.14653 12.00258,9.17808 10.17204,34.37342 -4.00842,55.17187 -30.9649,67.17892 -31.15387,67.18542 -0.4563,0.0156 -5.49956,-5.22074 -5.79806,-4.60407 -15.45677,31.93103 -47.3506,30.78387 -65.13826,31.11951 -3.55635,0.0671 -18.34444,-12.38469 -19.59088,-11.53286 -15.74294,10.75882 -20.11352,13.44589 -26.18374,40.94381 -0.23264,-0.43595 -8.41803,-14.95561 -8.07826,-44.15673 0.27838,-23.92523 13.34923,-35.21616 19.15997,-34.56498 7.05422,0.79055 10.59443,4.47084 20.52923,10.99795 1.77335,1.16509 8.0388,4.95377 9.46457,4.91926 3.5521,-0.0838 5.97534,-6.60969 6.55509,-10.83484 0.58475,-4.26168 1.15009,-3.23167 -2.17605,-4.37633 -4.1934,-1.44311 -11.42652,-9.296 -15.13675,-21.67633 z" + style="fill:#2c3b54;fill-opacity:1;fill-rule:nonzero;stroke:none" /> + <path + inkscape:export-ydpi="19.25" + inkscape:export-xdpi="19.25" + inkscape:export-filename="/home/emcho/storage/images/sc_logo/sc_logo136x203.png" + sodipodi:nodetypes="czssss" + id="path4232" + d="m 106.11345,892.83442 c 6.47531,-3.53335 43.23312,-15.02538 43.56314,-15.74675 0.24089,-0.52655 -43.11579,17.30875 -52.93537,10.69734 -0.59185,-0.39849 2.29344,1.72127 4.90219,2.25652 0.18326,0.0376 0.17092,6.89208 -2.30068,10.77041 -0.6931,1.08758 5.26729,-7.15715 6.77072,-7.97752 z" + style="fill:url(#linearGradient4268);fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + inkscape:export-ydpi="19.25" + inkscape:export-xdpi="19.25" + inkscape:export-filename="/home/emcho/storage/images/sc_logo/sc_logo136x203.png" + sodipodi:nodetypes="csss" + id="path4234" + d="m 166.00752,784.18642 c -4.02929,2.81265 -9.5846,6.74255 -10.72057,9.77333 -0.66996,1.78745 -1.12247,-4.99153 3.45182,-9.03009 2.57716,-2.27533 8.09315,-1.31871 7.26875,-0.74324 z" + style="fill:url(#linearGradient4270);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" /> + <path + inkscape:export-ydpi="19.25" + inkscape:export-xdpi="19.25" + inkscape:export-filename="/home/emcho/storage/images/sc_logo/sc_logo136x203.png" + sodipodi:nodetypes="csss" + id="path4236" + d="m 160.58968,806.82846 c 4.57007,1.3627 8.10001,-1.42847 10.03503,-7.4422 0.22874,-0.71087 -0.56553,5.2666 -3.40562,7.48857 -2.70767,2.11837 -7.59288,-0.33365 -6.62941,-0.0464 z" + style="fill:url(#linearGradient4272);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" /> + <path + inkscape:export-ydpi="19.25" + inkscape:export-xdpi="19.25" + inkscape:export-filename="/home/emcho/storage/images/sc_logo/sc_logo136x203.png" + sodipodi:nodetypes="cscss" + id="path4238" + d="m 172.18948,813.03639 c 6.47531,-3.53335 13.10498,-2.9926 18.75586,-2.73805 3.75103,0.16896 -7.06591,-4.20527 -19.35477,-3.52147 -1.31254,1.11755 -5.21285,7.63595 -10.70973,14.23704 -0.82526,0.99104 9.80521,-7.15715 11.30864,-7.97752 z" + style="fill:url(#linearGradient4274);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" /> + <path + inkscape:export-ydpi="19.25" + inkscape:export-xdpi="19.25" + inkscape:export-filename="/home/emcho/storage/images/sc_logo/sc_logo136x203.png" + sodipodi:nodetypes="csccscs" + id="path4240" + d="m 110.55877,827.01111 c 3.80202,-0.78266 8.57073,-2.07478 11.72698,-2.39299 2.63172,-0.26532 5.92925,-1.74739 8.46259,0.97744 -1.41052,-1.93357 -4.10815,-5.83882 -4.94871,-8.39667 0.76528,3.00553 -2.65492,3.42931 -3.50504,3.56438 -19.11709,3.02037 -30.61745,8.16849 -36.41981,17.74206 10.99033,-8.50263 23.96641,-11.34651 24.68399,-11.49422 z" + style="fill:url(#linearGradient5486);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" /> + </g> + </g> +</svg> diff --git a/images/jupyterlab_logo.svg b/images/jupyterlab_logo.svg new file mode 100644 index 00000000..ab255087 --- /dev/null +++ b/images/jupyterlab_logo.svg @@ -0,0 +1,90 @@ +<svg width="44" height="51" viewBox="0 0 44 51" version="2.0" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:figma="http://www.figma.com/figma/ns"> +<title>Group.svg</title> +<desc>Created using Figma 0.90</desc> +<g id="Canvas" transform="translate(-1640 -2453)" figma:type="canvas"> +<g id="Group" style="mix-blend-mode:normal;" figma:type="group"> +<g id="Group" style="mix-blend-mode:normal;" figma:type="group"> +<g id="Group" style="mix-blend-mode:normal;" figma:type="group"> +<g id="g" style="mix-blend-mode:normal;" figma:type="group"> +<g id="path" style="mix-blend-mode:normal;" figma:type="group"> +<g id="path9 fill" style="mix-blend-mode:normal;" figma:type="vector"> +<use xlink:href="#path0_fill" transform="translate(1640.54 2474.36)" fill="#4E4E4E" style="mix-blend-mode:normal;"/> +</g> +</g> +<g id="path" style="mix-blend-mode:normal;" figma:type="group"> +<g id="path10 fill" style="mix-blend-mode:normal;" figma:type="vector"> +<use xlink:href="#path1_fill" transform="translate(1645.68 2474.37)" fill="#4E4E4E" style="mix-blend-mode:normal;"/> +</g> +</g> +<g id="path" style="mix-blend-mode:normal;" figma:type="group"> +<g id="path11 fill" style="mix-blend-mode:normal;" figma:type="vector"> +<use xlink:href="#path2_fill" transform="translate(1653.39 2474.26)" fill="#4E4E4E" style="mix-blend-mode:normal;"/> +</g> +</g> +<g id="path" style="mix-blend-mode:normal;" figma:type="group"> +<g id="path12 fill" style="mix-blend-mode:normal;" figma:type="vector"> +<use xlink:href="#path3_fill" transform="translate(1660.43 2474.39)" fill="#4E4E4E" style="mix-blend-mode:normal;"/> +</g> +</g> +<g id="path" style="mix-blend-mode:normal;" figma:type="group"> +<g id="path13 fill" style="mix-blend-mode:normal;" figma:type="vector"> +<use xlink:href="#path4_fill" transform="translate(1667.55 2472.54)" fill="#4E4E4E" style="mix-blend-mode:normal;"/> +</g> +</g> +<g id="path" style="mix-blend-mode:normal;" figma:type="group"> +<g id="path14 fill" style="mix-blend-mode:normal;" figma:type="vector"> +<use xlink:href="#path5_fill" transform="translate(1672.47 2474.29)" fill="#4E4E4E" style="mix-blend-mode:normal;"/> +</g> +</g> +<g id="path" style="mix-blend-mode:normal;" figma:type="group"> +<g id="path15 fill" style="mix-blend-mode:normal;" figma:type="vector"> +<use xlink:href="#path6_fill" transform="translate(1679.98 2474.24)" fill="#4E4E4E" style="mix-blend-mode:normal;"/> +</g> +</g> +</g> +</g> +<g id="g" style="mix-blend-mode:normal;" figma:type="group"> +<g id="path" style="mix-blend-mode:normal;" figma:type="group"> +<g id="path16 fill" style="mix-blend-mode:normal;" figma:type="vector"> +<use xlink:href="#path7_fill" transform="translate(1673.48 2453.69)" fill="#767677" style="mix-blend-mode:normal;"/> +</g> +</g> +<g id="path" style="mix-blend-mode:normal;" figma:type="group"> +<g id="path17 fill" style="mix-blend-mode:normal;" figma:type="vector"> +<use xlink:href="#path8_fill" transform="translate(1643.21 2484.27)" fill="#F37726" style="mix-blend-mode:normal;"/> +</g> +</g> +<g id="path" style="mix-blend-mode:normal;" figma:type="group"> +<g id="path18 fill" style="mix-blend-mode:normal;" figma:type="vector"> +<use xlink:href="#path9_fill" transform="translate(1643.21 2457.88)" fill="#F37726" style="mix-blend-mode:normal;"/> +</g> +</g> +<g id="path" style="mix-blend-mode:normal;" figma:type="group"> +<g id="path19 fill" style="mix-blend-mode:normal;" figma:type="vector"> +<use xlink:href="#path10_fill" transform="translate(1643.28 2496.09)" fill="#9E9E9E" style="mix-blend-mode:normal;"/> +</g> +</g> +<g id="path" style="mix-blend-mode:normal;" figma:type="group"> +<g id="path20 fill" style="mix-blend-mode:normal;" figma:type="vector"> +<use xlink:href="#path11_fill" transform="translate(1641.87 2458.43)" fill="#616262" style="mix-blend-mode:normal;"/> +</g> +</g> +</g> +</g> +</g> +</g> +<defs> +<path id="path0_fill" d="M 1.74498 5.47533C 1.74498 7.03335 1.62034 7.54082 1.29983 7.91474C 0.943119 8.23595 0.480024 8.41358 0 8.41331L 0.124642 9.3036C 0.86884 9.31366 1.59095 9.05078 2.15452 8.56466C 2.45775 8.19487 2.6834 7.76781 2.818 7.30893C 2.95261 6.85005 2.99341 6.36876 2.93798 5.89377L 2.93798 0L 1.74498 0L 1.74498 5.43972L 1.74498 5.47533Z"/> +<path id="path1_fill" d="M 5.50204 4.76309C 5.50204 5.43081 5.50204 6.02731 5.55545 6.54368L 4.496 6.54368L 4.42478 5.48423C 4.20318 5.85909 3.88627 6.16858 3.50628 6.38125C 3.12628 6.59392 2.69675 6.70219 2.26135 6.69503C 1.22861 6.69503 0 6.13415 0 3.84608L 0 0.0445149L 1.193 0.0445149L 1.193 3.6057C 1.193 4.84322 1.57583 5.67119 2.65309 5.67119C 2.87472 5.67358 3.09459 5.63168 3.29982 5.54796C 3.50505 5.46424 3.69149 5.34039 3.84822 5.18366C 4.00494 5.02694 4.1288 4.84049 4.21252 4.63527C 4.29623 4.43004 4.33813 4.21016 4.33575 3.98853L 4.33575 0L 5.52874 0L 5.52874 4.72748L 5.50204 4.76309Z"/> +<path id="path2_fill" d="M 0.0534178 2.27264C 0.0534178 1.44466 0.0534178 0.768036 0 0.153731L 1.06836 0.153731L 1.12177 1.2666C 1.3598 0.864535 1.70247 0.534594 2.11325 0.311954C 2.52404 0.0893145 2.98754 -0.0176786 3.45435 0.00238095C 5.03908 0.00238095 6.23208 1.32892 6.23208 3.30538C 6.23208 5.63796 4.7987 6.79535 3.24958 6.79535C 2.85309 6.81304 2.45874 6.7281 2.10469 6.54874C 1.75064 6.36937 1.44888 6.10166 1.22861 5.77151L 1.22861 5.77151L 1.22861 9.33269L 0.0534178 9.33269L 0.0534178 2.29935L 0.0534178 2.27264ZM 1.22861 4.00872C 1.23184 4.17026 1.24972 4.33117 1.28203 4.48948C 1.38304 4.88479 1.61299 5.23513 1.93548 5.48506C 2.25798 5.735 2.65461 5.87026 3.06262 5.86944C 4.31794 5.86944 5.05689 4.8456 5.05689 3.3588C 5.05689 2.05897 4.36246 0.946096 3.10714 0.946096C 2.61036 0.986777 2.14548 1.20726 1.79965 1.5662C 1.45382 1.92514 1.25079 2.3979 1.22861 2.89585L 1.22861 4.00872Z"/> +<path id="path3_fill" d="M 1.31764 0.0178059L 2.75102 3.85499C 2.90237 4.28233 3.06262 4.7987 3.16946 5.18153C 3.2941 4.7898 3.42764 4.29123 3.5879 3.82828L 4.88773 0.0178059L 6.14305 0.0178059L 4.36246 4.64735C 3.47216 6.87309 2.92908 8.02158 2.11 8.71601C 1.69745 9.09283 1.19448 9.35658 0.649917 9.48166L 0.356119 8.48453C 0.736886 8.35942 1.09038 8.16304 1.39777 7.90584C 1.8321 7.55188 2.17678 7.10044 2.4038 6.5882C 2.45239 6.49949 2.48551 6.40314 2.50173 6.3033C 2.49161 6.19586 2.46457 6.0907 2.42161 5.9917L 0 0L 1.29983 0L 1.31764 0.0178059Z"/> +<path id="path4_fill" d="M 2.19013 0L 2.19013 1.86962L 3.8995 1.86962L 3.8995 2.75992L 2.19013 2.75992L 2.19013 6.26769C 2.19013 7.06896 2.42161 7.53191 3.08043 7.53191C 3.31442 7.53574 3.54789 7.5088 3.77486 7.45179L 3.82828 8.34208C 3.48794 8.45999 3.12881 8.51431 2.76882 8.50234C 2.53042 8.51726 2.29161 8.48043 2.06878 8.39437C 1.84595 8.30831 1.64438 8.17506 1.47789 8.00377C 1.11525 7.51873 0.949826 6.91431 1.01494 6.31221L 1.01494 2.75102L 0 2.75102L 0 1.86072L 1.03274 1.86072L 1.03274 0.275992L 2.19013 0Z"/> +<path id="path5_fill" d="M 1.17716 3.57899C 1.153 3.88093 1.19468 4.18451 1.29933 4.46876C 1.40398 4.75301 1.5691 5.01114 1.78329 5.22532C 1.99747 5.43951 2.2556 5.60463 2.53985 5.70928C 2.8241 5.81393 3.12768 5.85561 3.42962 5.83145C 4.04033 5.84511 4.64706 5.72983 5.21021 5.49313L 5.41498 6.38343C 4.72393 6.66809 3.98085 6.80458 3.23375 6.78406C 2.79821 6.81388 2.36138 6.74914 1.95322 6.59427C 1.54505 6.43941 1.17522 6.19809 0.869071 5.88688C 0.562928 5.57566 0.327723 5.2019 0.179591 4.79125C 0.0314584 4.38059 -0.0260962 3.94276 0.0108748 3.50777C 0.0108748 1.54912 1.17716 0 3.0824 0C 5.21911 0 5.75329 1.86962 5.75329 3.06262C 5.76471 3.24644 5.76471 3.43079 5.75329 3.61461L 1.15046 3.61461L 1.17716 3.57899ZM 4.66713 2.6887C 4.70149 2.45067 4.68443 2.20805 4.61709 1.97718C 4.54976 1.74631 4.43372 1.53255 4.2768 1.35031C 4.11987 1.16808 3.92571 1.0216 3.70739 0.920744C 3.48907 0.81989 3.25166 0.767006 3.01118 0.765656C 2.52201 0.801064 2.06371 1.01788 1.72609 1.37362C 1.38847 1.72935 1.19588 2.19835 1.18607 2.6887L 4.66713 2.6887Z"/> +<path id="path6_fill" d="M 0.0534178 2.19228C 0.0534178 1.42663 0.0534178 0.767806 0 0.162404L 1.06836 0.162404L 1.06836 1.43553L 1.12177 1.43553C 1.23391 1.04259 1.4656 0.694314 1.78468 0.439049C 2.10376 0.183783 2.4944 0.034196 2.90237 0.0110538C 3.01466 -0.00368459 3.12839 -0.00368459 3.24068 0.0110538L 3.24068 1.12393C 3.10462 1.10817 2.9672 1.10817 2.83114 1.12393C 2.427 1.13958 2.04237 1.30182 1.7491 1.58035C 1.45583 1.85887 1.27398 2.23462 1.23751 2.63743C 1.20422 2.8196 1.18635 3.00425 1.1841 3.18941L 1.1841 6.65267L 0.00890297 6.65267L 0.00890297 2.20118L 0.0534178 2.19228Z"/> +<path id="path7_fill" d="M 6.03059 2.83565C 6.06715 3.43376 5.92485 4.02921 5.6218 4.54615C 5.31875 5.0631 4.86869 5.47813 4.32893 5.73839C 3.78917 5.99864 3.18416 6.09233 2.59097 6.00753C 1.99778 5.92272 1.44326 5.66326 0.998048 5.26219C 0.552837 4.86113 0.23709 4.33661 0.0910307 3.75546C -0.0550287 3.17431 -0.0247891 2.56283 0.177897 1.99893C 0.380583 1.43503 0.746541 0.944221 1.22915 0.589037C 1.71176 0.233853 2.28918 0.0303686 2.88784 0.00450543C 3.28035 -0.0170932 3.67326 0.0391144 4.04396 0.169896C 4.41467 0.300677 4.75587 0.503453 5.04794 0.766561C 5.34 1.02967 5.57718 1.34792 5.74582 1.70301C 5.91446 2.0581 6.01124 2.44303 6.03059 2.83565L 6.03059 2.83565Z"/> +<path id="path8_fill" d="M 18.6962 7.12238C 10.6836 7.12238 3.64131 4.24672 0 0C 1.41284 3.82041 3.96215 7.1163 7.30479 9.44404C 10.6474 11.7718 14.623 13.0196 18.6962 13.0196C 22.7695 13.0196 26.745 11.7718 30.0877 9.44404C 33.4303 7.1163 35.9796 3.82041 37.3925 4.0486e-13C 33.7601 4.24672 26.7445 7.12238 18.6962 7.12238Z"/> +<path id="path9_fill" d="M 18.6962 5.89725C 26.7089 5.89725 33.7512 8.77291 37.3925 13.0196C 35.9796 9.19922 33.4303 5.90333 30.0877 3.57559C 26.745 1.24785 22.7695 4.0486e-13 18.6962 0C 14.623 4.0486e-13 10.6474 1.24785 7.30479 3.57559C 3.96215 5.90333 1.41284 9.19922 0 13.0196C 3.64131 8.76401 10.648 5.89725 18.6962 5.89725Z"/> +<path id="path10_fill" d="M 7.59576 3.56656C 7.64276 4.31992 7.46442 5.07022 7.08347 5.72186C 6.70251 6.3735 6.13619 6.89698 5.45666 7.22561C 4.77713 7.55424 4.01515 7.67314 3.26781 7.56716C 2.52046 7.46117 1.82158 7.13511 1.26021 6.63051C 0.698839 6.12591 0.300394 5.46561 0.115637 4.73375C -0.0691191 4.00188 -0.0318219 3.23159 0.222777 2.52099C 0.477376 1.8104 0.93775 1.19169 1.54524 0.743685C 2.15274 0.295678 2.87985 0.0386595 3.63394 0.00537589C 4.12793 -0.0210471 4.62229 0.0501173 5.08878 0.214803C 5.55526 0.37949 5.98473 0.63447 6.35264 0.965179C 6.72055 1.29589 7.01971 1.69584 7.233 2.1422C 7.4463 2.58855 7.56957 3.07256 7.59576 3.56656L 7.59576 3.56656Z"/> +<path id="path11_fill" d="M 2.25061 4.37943C 1.81886 4.39135 1.39322 4.27535 1.02722 4.04602C 0.661224 3.81668 0.371206 3.48424 0.193641 3.09052C 0.0160762 2.69679 -0.0411078 2.25935 0.0292804 1.83321C 0.0996686 1.40707 0.294486 1.01125 0.589233 0.695542C 0.883981 0.37983 1.2655 0.158316 1.68581 0.0588577C 2.10611 -0.0406005 2.54644 -0.0135622 2.95143 0.136572C 3.35641 0.286707 3.70796 0.553234 3.96186 0.902636C 4.21577 1.25204 4.3607 1.66872 4.37842 2.10027C 4.39529 2.6838 4.18131 3.25044 3.78293 3.67715C 3.38455 4.10387 2.83392 4.35623 2.25061 4.37943Z"/> +</defs> +</svg> diff --git a/images/kanboard_logo.png b/images/kanboard_logo.png new file mode 100644 index 00000000..4f3436df Binary files /dev/null and b/images/kanboard_logo.png differ diff --git a/images/keeweb_logo.png b/images/keeweb_logo.png new file mode 100644 index 00000000..769c5a81 Binary files /dev/null and b/images/keeweb_logo.png differ diff --git a/images/kresus_logo.png b/images/kresus_logo.png new file mode 100644 index 00000000..d55dc2ce Binary files /dev/null and b/images/kresus_logo.png differ diff --git a/images/leed_logo.png b/images/leed_logo.png new file mode 100644 index 00000000..f9f192b3 Binary files /dev/null and b/images/leed_logo.png differ diff --git a/images/limesurvey.png b/images/limesurvey.png deleted file mode 100644 index 65ec8fa7..00000000 Binary files a/images/limesurvey.png and /dev/null differ diff --git a/images/limesurvey_logo.png b/images/limesurvey_logo.png new file mode 100644 index 00000000..bc60942e Binary files /dev/null and b/images/limesurvey_logo.png differ diff --git a/images/logo-bibliogram.png b/images/logo-bibliogram.png new file mode 100644 index 00000000..51c97c89 Binary files /dev/null and b/images/logo-bibliogram.png differ diff --git a/images/logo-bookstack.png b/images/logo-bookstack.png new file mode 100644 index 00000000..d10b3ca4 Binary files /dev/null and b/images/logo-bookstack.png differ diff --git a/images/logo-jupyterhub.png b/images/logo-jupyterhub.png new file mode 100644 index 00000000..48d8b817 Binary files /dev/null and b/images/logo-jupyterhub.png differ diff --git a/images/logo_codelutin.png b/images/logo_codelutin.png new file mode 100644 index 00000000..ff19c172 Binary files /dev/null and b/images/logo_codelutin.png differ diff --git a/images/logo_gitoyen.png b/images/logo_gitoyen.png new file mode 100644 index 00000000..4e84b2b8 Binary files /dev/null and b/images/logo_gitoyen.png differ diff --git a/images/logo_globenet.png b/images/logo_globenet.png new file mode 100644 index 00000000..d2a8dca8 Binary files /dev/null and b/images/logo_globenet.png differ diff --git a/images/logo_ldn.png b/images/logo_ldn.png new file mode 100644 index 00000000..3334572d Binary files /dev/null and b/images/logo_ldn.png differ diff --git a/images/logo_nbs.png b/images/logo_nbs.png new file mode 100644 index 00000000..c591923e Binary files /dev/null and b/images/logo_nbs.png differ diff --git a/images/logo_ngi.png b/images/logo_ngi.png new file mode 100644 index 00000000..e0449805 Binary files /dev/null and b/images/logo_ngi.png differ diff --git a/images/logo_nlnet.png b/images/logo_nlnet.png new file mode 100644 index 00000000..caf88a73 Binary files /dev/null and b/images/logo_nlnet.png differ diff --git a/images/logo_tetaneutral.png b/images/logo_tetaneutral.png new file mode 100644 index 00000000..4744bcb5 Binary files /dev/null and b/images/logo_tetaneutral.png differ diff --git a/images/lstu_logo.svg b/images/lstu_logo.svg new file mode 100644 index 00000000..a4c24ebb --- /dev/null +++ b/images/lstu_logo.svg @@ -0,0 +1,188 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="787.604px" height="378.512px" viewBox="0 0 787.604 378.512" enable-background="new 0 0 787.604 378.512" + xml:space="preserve"> +<g> + <path fill="#231F20" d="M355.028,225.957V59.995h36.636v141.138h38.037v24.824H355.028z"/> + <path fill="#231F20" d="M494.884,228.259c-15.749,0-27.477-4.188-35.184-12.562c-7.707-8.374-11.861-21.737-12.463-40.089 + l31.432-4.805c0.133,10.41,1.384,17.967,3.754,22.672c2.367,4.704,5.921,7.057,10.66,7.057c6.205,0,9.309-4.004,9.309-12.012 + c0-4.47-0.801-8.591-2.402-12.362c-1.602-3.769-3.57-6.989-5.906-9.659c-2.336-2.668-5.605-5.806-9.809-9.409l-14.715-12.712 + c-3.537-3.069-6.474-5.872-8.809-8.408c-2.336-2.535-4.621-5.555-6.857-9.059c-2.236-3.503-3.887-7.39-4.954-11.661 + c-1.068-4.27-1.602-8.975-1.602-14.114c0-13.813,4.137-24.49,12.412-32.031c8.274-7.54,19.619-11.344,34.033-11.411 + c4.938,0,9.425,0.535,13.464,1.602c4.036,1.068,7.439,2.47,10.209,4.204c2.769,1.736,5.205,3.921,7.307,6.556 + c2.104,2.637,3.77,5.272,5.006,7.908c1.234,2.637,2.268,5.605,3.104,8.908c0.833,3.304,1.4,6.324,1.701,9.059 + c0.301,2.737,0.516,5.673,0.65,8.809l-31.73,4.104c-0.068-2.803-0.15-5.121-0.25-6.957c-0.102-1.834-0.285-3.786-0.551-5.855 + c-0.268-2.068-0.635-3.736-1.102-5.005c-0.468-1.267-1.086-2.452-1.852-3.554c-0.768-1.101-1.736-1.884-2.902-2.352 + c-1.169-0.466-2.553-0.667-4.154-0.601c-3.203,0.067-5.656,1.418-7.357,4.054c-1.701,2.637-2.553,5.589-2.553,8.858 + c0,3.137,0.383,5.99,1.15,8.559c0.768,2.569,2.104,5.055,4.004,7.457c1.902,2.402,3.454,4.204,4.655,5.405s3.203,3.07,6.006,5.605 + l14.114,12.412c3.869,3.471,7.207,6.791,10.01,9.96c2.803,3.17,5.471,6.773,8.008,10.811c2.535,4.038,4.453,8.475,5.756,13.312 + c1.301,4.839,1.951,10.027,1.951,15.565c0,12.012-4.004,21.972-12.012,29.879C518.407,224.305,507.897,228.259,494.884,228.259z"/> + <path fill="#231F20" d="M576.584,225.957V87.121H551.06V59.995h87.484v27.126h-25.225v138.835H576.584z"/> + <path fill="#231F20" d="M705.83,228.259c-7.542,0-14.131-0.785-19.769-2.353c-5.641-1.567-10.311-3.787-14.014-6.657 + c-3.705-2.868-6.707-6.589-9.01-11.16c-2.303-4.57-3.921-9.609-4.854-15.115c-0.935-5.505-1.401-11.927-1.401-19.269V59.995h36.235 + v119.116c0,2.603,0.065,4.822,0.2,6.656c0.133,1.836,0.451,3.821,0.951,5.956c0.5,2.136,1.184,3.888,2.052,5.255 + c0.866,1.368,2.118,2.503,3.753,3.403c1.635,0.901,3.587,1.352,5.856,1.352c2.269,0,4.204-0.45,5.806-1.352 + c1.602-0.9,2.836-2.035,3.703-3.403c0.867-1.367,1.553-3.119,2.053-5.255c0.5-2.135,0.816-4.137,0.951-6.006 + c0.133-1.868,0.199-4.07,0.199-6.606V59.995h36.336v113.711c0,9.209-0.785,17.051-2.352,23.522 + c-1.569,6.474-4.189,12.112-7.858,16.917c-3.671,4.805-8.708,8.358-15.114,10.66C723.147,227.108,715.239,228.259,705.83,228.259z" + /> +</g> +<g> + <g> + <g> + <path fill="#231F20" d="M235.405,144.066h-164.1v-33.467c0-43.835,35.535-79.37,79.371-79.37h5.359 + c43.836,0,79.369,35.535,79.369,79.37V144.066z"/> + </g> + </g> +</g> +<g> + <g> + <g> + <path fill="#FFFFFF" d="M122.516,75.256c-12.99,7.393-22.58,14.545-27.373,11.127c-4.789-3.415-3.287-16.879,11.949-28.604 + c15.238-11.729,30.242-10.71,34.088-5.591C145.659,58.145,139.616,65.523,122.516,75.256z"/> + </g> + </g> +</g> +<g> + <g> + <g> + <path fill="#231F20" d="M264.145,166.489c-15.203-1.225-64.404-1.256-110.791-0.963c-46.383-0.293-95.588-0.262-110.793,0.963 + c-31.145,2.511-19.09,35.165-5.023,45.72c5.125,3.845,28.699,6.485,43.82,8.292v-21.378h143.996V220.5 + c15.119-1.807,38.691-4.447,43.818-8.292C283.237,201.654,295.292,169,264.145,166.489z"/> + </g> + </g> +</g> +<g> + <g> + <g> + <path fill="#FF6A00" d="M153.989,220.521l-0.006-0.021c0,0-0.221,0-0.637,0.007c-0.416-0.007-0.639-0.007-0.639-0.007 + l-0.004,0.021c-8.559,0.269-57.361,3.933-55.986,52.977c1.506,53.746,38.344,66.304,54.086,64.794 + c0.928-0.085,4.268,0.348,6.623,0.102c16.484,0.581,51.104-12.833,52.566-64.896C211.368,224.454,162.553,220.79,153.989,220.521 + z"/> + </g> + </g> +</g> +<g> + <g> + <g> + <path fill="#FF6A00" d="M153.989,220.521l-0.006-0.021c0,0-0.221,0-0.637,0.007c-0.416-0.007-0.639-0.007-0.639-0.007 + l-0.004,0.021c-8.559,0.269-57.361,3.933-55.986,52.977c1.506,53.746,38.344,66.304,54.086,64.794 + c0.928-0.085,4.268,0.348,6.623,0.102c16.484,0.581,51.104-12.833,52.566-64.896C211.368,224.454,162.553,220.79,153.989,220.521 + z"/> + </g> + </g> +</g> +<g> + <path fill="#B24B04" d="M157.426,318.381c-2.355,0.246-5.695-0.187-6.623-0.102c-14.828,1.422-48.367-9.643-53.473-55.847 + c-0.5,3.405-0.725,7.083-0.613,11.064c1.506,53.746,38.344,66.304,54.086,64.794c0.928-0.085,4.268,0.348,6.623,0.102 + c16.484,0.581,51.104-12.833,52.566-64.896c0.111-3.985-0.113-7.667-0.615-11.075C204.442,307.096,172.924,318.928,157.426,318.381 + z"/> +</g> +<g> + <g> + <g> + <path fill="#FFFFFF" d="M163.405,251.39h-20.098c-10.82,0-19.592,8.767-19.592,19.59c0,10.818,8.771,19.592,19.592,19.592h0.166 + v-6.697c0-5.452,4.424-9.874,9.879-9.874c5.457,0,9.879,4.422,9.879,9.874v6.697h0.174c10.818,0,19.588-8.773,19.588-19.592 + C182.993,260.157,174.223,251.39,163.405,251.39z"/> + </g> + </g> +</g> +<g> + <g> + <g> + <path fill="#231F20" d="M168.956,266.961h-31.203c-2.217,0-4.018-1.799-4.018-4.018c0-2.218,1.801-4.016,4.018-4.016h31.203 + c2.219,0,4.02,1.798,4.02,4.016C172.975,265.163,171.174,266.961,168.956,266.961z"/> + </g> + </g> +</g> +<g> + <path fill="#58595B" d="M356.656,280.537h-2.432v-22.793h2.432V280.537z"/> + <path fill="#58595B" d="M368.595,280.83c-2.373,0-4.246-0.723-5.618-2.168s-2.058-3.452-2.058-6.021 + c0-2.588,0.637-4.644,1.912-6.167s2.986-2.285,5.134-2.285c2.012,0,3.604,0.662,4.775,1.984c1.172,1.324,1.758,3.069,1.758,5.237 + v1.538h-11.06c0.049,1.885,0.525,3.315,1.428,4.292s2.175,1.465,3.816,1.465c1.729,0,3.438-0.361,5.127-1.084v2.168 + c-0.859,0.371-1.672,0.638-2.439,0.798C370.604,280.75,369.679,280.83,368.595,280.83z M367.936,266.225 + c-1.289,0-2.317,0.42-3.083,1.26s-1.218,2.002-1.355,3.486h8.394c0-1.533-0.342-2.707-1.025-3.522S369.205,266.225,367.936,266.225 + z"/> + <path fill="#58595B" d="M383.829,278.823c0.43,0,0.845-0.031,1.245-0.095s0.718-0.13,0.952-0.198v1.86 + c-0.264,0.127-0.652,0.231-1.165,0.314s-0.974,0.125-1.384,0.125c-3.105,0-4.658-1.636-4.658-4.907v-9.551h-2.3V265.2l2.3-1.011 + l1.025-3.428h1.406v3.721h4.658v1.89h-4.658v9.448c0,0.967,0.229,1.709,0.688,2.227S383.028,278.823,383.829,278.823z"/> + <path fill="#58595B" d="M391.183,259.121l0.22,0.322c-0.254,0.977-0.62,2.112-1.099,3.406s-0.977,2.497-1.494,3.61h-1.787 + c0.684-2.783,1.182-5.229,1.494-7.339H391.183z"/> + <path fill="#58595B" d="M404.688,276.157c0,1.494-0.557,2.646-1.67,3.457s-2.676,1.216-4.688,1.216 + c-2.129,0-3.789-0.337-4.98-1.011v-2.256c0.771,0.391,1.599,0.698,2.483,0.923s1.736,0.337,2.556,0.337 + c1.27,0,2.246-0.202,2.93-0.608c0.684-0.404,1.025-1.022,1.025-1.853c0-0.625-0.271-1.159-0.813-1.604 + c-0.542-0.443-1.599-0.969-3.171-1.574c-1.494-0.557-2.556-1.042-3.186-1.457s-1.099-0.887-1.406-1.414s-0.461-1.157-0.461-1.89 + c0-1.309,0.532-2.341,1.597-3.099c1.064-0.756,2.524-1.135,4.38-1.135c1.729,0,3.418,0.352,5.068,1.055l-0.864,1.978 + c-1.611-0.664-3.071-0.996-4.38-0.996c-1.152,0-2.021,0.181-2.607,0.542s-0.879,0.859-0.879,1.494c0,0.43,0.11,0.796,0.33,1.099 + s0.574,0.591,1.062,0.864s1.426,0.669,2.812,1.187c1.904,0.693,3.191,1.392,3.86,2.095S404.688,275.092,404.688,276.157z"/> + <path fill="#58595B" d="M450.172,276.157c0,1.494-0.557,2.646-1.67,3.457s-2.676,1.216-4.688,1.216 + c-2.129,0-3.789-0.337-4.98-1.011v-2.256c0.771,0.391,1.599,0.698,2.482,0.923s1.736,0.337,2.557,0.337 + c1.27,0,2.246-0.202,2.93-0.608c0.684-0.404,1.025-1.022,1.025-1.853c0-0.625-0.271-1.159-0.813-1.604 + c-0.542-0.443-1.599-0.969-3.171-1.574c-1.494-0.557-2.557-1.042-3.187-1.457s-1.099-0.887-1.406-1.414s-0.461-1.157-0.461-1.89 + c0-1.309,0.532-2.341,1.597-3.099c1.064-0.756,2.524-1.135,4.38-1.135c1.729,0,3.418,0.352,5.068,1.055l-0.864,1.978 + c-1.611-0.664-3.071-0.996-4.38-0.996c-1.152,0-2.021,0.181-2.607,0.542s-0.879,0.859-0.879,1.494c0,0.43,0.109,0.796,0.329,1.099 + s0.574,0.591,1.062,0.864s1.426,0.669,2.812,1.187c1.904,0.693,3.19,1.392,3.859,2.095S450.172,275.092,450.172,276.157z"/> + <path fill="#58595B" d="M465.113,280.537v-10.386c0-1.309-0.298-2.285-0.894-2.93s-1.528-0.967-2.798-0.967 + c-1.689,0-2.923,0.459-3.699,1.377s-1.164,2.422-1.164,4.512v8.394h-2.432v-22.793h2.432v6.899c0,0.83-0.039,1.519-0.117,2.065 + h0.146c0.479-0.771,1.159-1.379,2.043-1.824c0.884-0.443,1.893-0.666,3.025-0.666c1.963,0,3.435,0.467,4.416,1.398 + c0.981,0.934,1.473,2.415,1.473,4.446v10.474H465.113z"/> + <path fill="#58595B" d="M486.397,272.495c0,2.617-0.659,4.661-1.978,6.13c-1.318,1.471-3.14,2.205-5.464,2.205 + c-1.436,0-2.71-0.337-3.823-1.011s-1.973-1.641-2.578-2.9s-0.908-2.734-0.908-4.424c0-2.617,0.654-4.655,1.963-6.116 + c1.309-1.459,3.125-2.189,5.449-2.189c2.246,0,4.03,0.747,5.354,2.241S486.397,269.946,486.397,272.495z M474.166,272.495 + c0,2.051,0.41,3.613,1.23,4.688s2.026,1.611,3.618,1.611s2.8-0.534,3.625-1.604c0.825-1.068,1.238-2.634,1.238-4.694 + c0-2.041-0.413-3.591-1.238-4.651c-0.825-1.059-2.043-1.589-3.654-1.589c-1.592,0-2.793,0.522-3.604,1.567 + S474.166,270.424,474.166,272.495z"/> + <path fill="#58595B" d="M497.984,264.189c0.713,0,1.353,0.059,1.919,0.176l-0.337,2.256c-0.664-0.146-1.25-0.22-1.758-0.22 + c-1.299,0-2.41,0.527-3.333,1.582s-1.384,2.368-1.384,3.94v8.613h-2.432v-16.055h2.007l0.278,2.974h0.117 + c0.596-1.045,1.313-1.851,2.153-2.417S496.979,264.189,497.984,264.189z"/> + <path fill="#58595B" d="M508.092,278.823c0.43,0,0.845-0.031,1.245-0.095s0.718-0.13,0.952-0.198v1.86 + c-0.264,0.127-0.652,0.231-1.165,0.314s-0.974,0.125-1.384,0.125c-3.105,0-4.658-1.636-4.658-4.907v-9.551h-2.3V265.2l2.3-1.011 + l1.025-3.428h1.406v3.721h4.658v1.89h-4.658v9.448c0,0.967,0.229,1.709,0.688,2.227S507.291,278.823,508.092,278.823z"/> + <path fill="#58595B" d="M520.279,280.83c-2.373,0-4.246-0.723-5.618-2.168s-2.058-3.452-2.058-6.021 + c0-2.588,0.637-4.644,1.911-6.167s2.986-2.285,5.135-2.285c2.012,0,3.604,0.662,4.775,1.984c1.172,1.324,1.758,3.069,1.758,5.237 + v1.538h-11.06c0.049,1.885,0.524,3.315,1.428,4.292s2.176,1.465,3.816,1.465c1.729,0,3.438-0.361,5.127-1.084v2.168 + c-0.859,0.371-1.673,0.638-2.439,0.798C522.288,280.75,521.363,280.83,520.279,280.83z M519.62,266.225 + c-1.289,0-2.317,0.42-3.084,1.26s-1.218,2.002-1.354,3.486h8.394c0-1.533-0.342-2.707-1.025-3.522S520.89,266.225,519.62,266.225z" + /> + <path fill="#58595B" d="M541.314,280.537v-10.386c0-1.309-0.298-2.285-0.894-2.93s-1.528-0.967-2.798-0.967 + c-1.68,0-2.91,0.454-3.691,1.362s-1.172,2.407-1.172,4.497v8.423h-2.432v-16.055h1.978l0.396,2.197h0.117 + c0.498-0.791,1.196-1.403,2.095-1.838s1.899-0.652,3.003-0.652c1.934,0,3.389,0.467,4.365,1.398 + c0.977,0.934,1.465,2.425,1.465,4.476v10.474H541.314z"/> + <path fill="#58595B" d="M577.306,278.823c0.43,0,0.845-0.031,1.245-0.095s0.718-0.13,0.952-0.198v1.86 + c-0.264,0.127-0.652,0.231-1.165,0.314s-0.974,0.125-1.384,0.125c-3.105,0-4.658-1.636-4.658-4.907v-9.551h-2.3V265.2l2.3-1.011 + l1.025-3.428h1.406v3.721h4.658v1.89h-4.658v9.448c0,0.967,0.229,1.709,0.688,2.227S576.505,278.823,577.306,278.823z"/> + <path fill="#58595B" d="M593.697,280.537v-10.386c0-1.309-0.298-2.285-0.894-2.93s-1.528-0.967-2.798-0.967 + c-1.689,0-2.923,0.459-3.699,1.377s-1.164,2.422-1.164,4.512v8.394h-2.432v-22.793h2.432v6.899c0,0.83-0.039,1.519-0.117,2.065 + h0.146c0.479-0.771,1.159-1.379,2.043-1.824c0.884-0.443,1.893-0.666,3.025-0.666c1.963,0,3.435,0.467,4.416,1.398 + c0.981,0.934,1.473,2.415,1.473,4.446v10.474H593.697z"/> + <path fill="#58595B" d="M610.997,280.537l-0.483-2.285h-0.117c-0.801,1.006-1.6,1.688-2.396,2.043 + c-0.796,0.356-1.789,0.535-2.98,0.535c-1.592,0-2.84-0.41-3.743-1.23s-1.354-1.987-1.354-3.501c0-3.242,2.593-4.941,7.778-5.098 + l2.725-0.088v-0.996c0-1.26-0.271-2.19-0.813-2.79c-0.542-0.602-1.408-0.901-2.6-0.901c-1.338,0-2.852,0.41-4.541,1.23l-0.747-1.86 + c0.791-0.43,1.657-0.767,2.6-1.011s1.888-0.366,2.835-0.366c1.914,0,3.332,0.425,4.255,1.274c0.924,0.85,1.385,2.212,1.385,4.087 + v10.957H610.997z M605.504,278.823c1.514,0,2.702-0.415,3.566-1.245s1.297-1.992,1.297-3.486v-1.45l-2.432,0.103 + c-1.934,0.068-3.328,0.369-4.183,0.9c-0.854,0.533-1.281,1.36-1.281,2.483c0,0.879,0.266,1.548,0.798,2.007 + S604.547,278.823,605.504,278.823z"/> + <path fill="#58595B" d="M622.994,278.823c0.43,0,0.845-0.031,1.245-0.095s0.718-0.13,0.952-0.198v1.86 + c-0.264,0.127-0.652,0.231-1.164,0.314c-0.514,0.083-0.975,0.125-1.385,0.125c-3.105,0-4.658-1.636-4.658-4.907v-9.551h-2.3V265.2 + l2.3-1.011l1.025-3.428h1.406v3.721h4.658v1.89h-4.658v9.448c0,0.967,0.229,1.709,0.688,2.227S622.193,278.823,622.994,278.823z"/> + <path fill="#58595B" d="M716.407,264.482v10.415c0,1.309,0.298,2.285,0.894,2.93s1.528,0.967,2.798,0.967 + c1.68,0,2.908-0.459,3.684-1.377c0.777-0.918,1.165-2.417,1.165-4.497v-8.438h2.432v16.055h-2.007l-0.352-2.153h-0.132 + c-0.498,0.791-1.189,1.396-2.073,1.816s-1.892,0.63-3.024,0.63c-1.953,0-3.416-0.464-4.388-1.392s-1.457-2.412-1.457-4.453v-10.503 + H716.407z"/> + <path fill="#58595B" d="M739.859,264.189c0.713,0,1.353,0.059,1.919,0.176l-0.337,2.256c-0.664-0.146-1.25-0.22-1.758-0.22 + c-1.299,0-2.41,0.527-3.332,1.582c-0.924,1.055-1.385,2.368-1.385,3.94v8.613h-2.432v-16.055h2.007l0.278,2.974h0.117 + c0.596-1.045,1.313-1.851,2.153-2.417S738.854,264.189,739.859,264.189z"/> + <path fill="#58595B" d="M747.213,280.537h-2.432v-22.793h2.432V280.537z"/> +</g> +<g> + <rect x="410.764" y="271.417" fill="#58595B" width="22.382" height="2.333"/> +</g> +<g> + <rect x="550.479" y="271.4" fill="#58595B" width="14.167" height="2.333"/> +</g> +<g> + <rect x="631.343" y="271.4" fill="#58595B" width="78.342" height="2.333"/> +</g> +</svg> diff --git a/images/lufi_logo.png b/images/lufi_logo.png new file mode 100644 index 00000000..a32ed32e Binary files /dev/null and b/images/lufi_logo.png differ diff --git a/images/lufi_logo.svg b/images/lufi_logo.svg new file mode 100644 index 00000000..7d53d1f3 --- /dev/null +++ b/images/lufi_logo.svg @@ -0,0 +1,93 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="282.70126" + height="282.53867" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + sodipodi:docname="lufi.svg" + inkscape:export-filename="/home/luc/PERSONNEL/fiat-tux_designs/lufi.png" + inkscape:export-xdpi="271" + inkscape:export-ydpi="271"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1.979899" + inkscape:cx="26.011995" + inkscape:cy="84.402272" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="1920" + inkscape:window-height="1039" + inkscape:window-x="0" + inkscape:window-y="41" + inkscape:window-maximized="0" + fit-margin-top="10" + fit-margin-left="10" + fit-margin-right="10" + fit-margin-bottom="10" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Calque 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-221.44765,-362.7203)"> + <g + id="g2994" + transform="matrix(1.0020558,-1.0020558,1.0020558,1.0020558,-490.60541,247.60842)" + inkscape:export-filename="/home/luc/tmp/lufi.png" + inkscape:export-xdpi="271.87875" + inkscape:export-ydpi="271.87875"> + <path + inkscape:connector-curvature="0" + id="path3875" + d="m 214.90995,548.04352 -38.63833,1.01016 -2.27284,6.56599 3.03045,3.03046 41.92133,0.75761 157.07873,1.01015 40.15356,0 5.3033,-5.3033 -2.77792,-6.81853 -19.69797,-1.01015 -20.20306,0.25254 -2.77791,-15.40483 -6.81853,-16.92005 -14.39468,-17.93021 -13.63706,-12.62691 -13.13198,-6.56599 -18.18275,-5.3033 -22.72843,1.26269 -21.2132,4.79822 -13.38452,5.55584 -13.13199,10.85914 -10.6066,13.38452 -7.3236,9.34392 -3.78808,10.35406 -3.28299,12.87944 z" + style="fill:#ffd119;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> + <rect + ry="7.3214264" + y="522.78973" + x="216.17265" + height="24.243732" + width="159.85664" + id="rect3873" + style="fill:#ff000a;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> + <g + transform="translate(-17.800222,72.844826)" + id="g3074"> + <path + sodipodi:nodetypes="ssssssssccccssssssssscsscccssccsssscssssssssssssssssssssssssss" + inkscape:connector-curvature="0" + id="path3076" + d="m 191.54148,487.67039 c -5.11077,-4.02013 -3.76609,-12.77744 2.28591,-14.88718 1.90113,-0.66273 9.86788,-1.13532 19.13896,-1.13532 11.85861,0 15.96787,-0.31667 16.22051,-1.25 0.18609,-0.6875 0.81278,-3.78781 1.39265,-6.88958 3.71296,-19.86087 19.21745,-41.97257 37.20623,-53.06158 24.32865,-14.99715 56.89702,-16.92672 82.60964,-4.89433 23.5152,11.00409 42.6905,34.14334 48.04833,57.98096 l 1.78265,7.93123 18.36719,0.34165 17.1045,0.34165 c 9.45192,1.08409 8.2901,17.0871 0.24154,17.5 l -120.94207,0 c -118.96911,0 -120.98307,-0.0323 -123.45604,-1.9775 z m 243.67283,-3.59393 c 2.51368,-0.82861 3.43825,-3.94122 0.37143,-6.22857 -2.52906,-1.88627 -29.03663,-1.2 -120.46482,-1.2 -116.89017,0 -119.28542,0.0385 -120.3,1.93426 -1.4064,2.62788 -1.30648,3.65158 0.53625,5.49431 1.41087,1.41087 13.6645,1.57143 119.92857,1.57143 106.26407,0 116.73199,-0.5177 119.92857,-1.57143 z m -42.52164,-13.34989 c 1.1562,-0.73196 1.21003,-1.8711 0.30207,-6.39217 -0.60767,-3.02582 -1.78032,-7.11812 -2.6059,-9.094 l -1.50105,-3.59251 -74.5376,0 -74.53761,0 -1.4229,3.40548 c -1.94511,4.65531 -3.87987,14.33903 -3.11283,15.58013 0.79688,1.28938 155.38177,1.38078 157.41582,0.0931 z m -25.90693,-24.39153 c 0,-1.24672 -5.7033,-11.73239 -7.62234,-14.01388 -2.88837,-3.43389 -3.05342,-5.67327 -0.41813,-5.67327 4.38551,0 11.74148,11.74497 10.68001,17.05232 l -0.58954,2.94768 7.975,0 c 5.74935,0 7.975,-0.35183 7.975,-1.26068 0,-2.26743 -8.58166,-14.10933 -14.6056,-20.15437 -15.05404,-15.10678 -33.86286,-22.60595 -56.60224,-22.56759 -22.08745,0.0373 -39.40142,6.87913 -54.36384,21.48264 -6.94616,6.77954 -15.42832,18.41013 -15.42832,21.15504 0,1.11203 10.65076,1.34496 61.5,1.34496 33.825,0 61.5,-0.14078 61.5,-0.31285 z m -93.59158,-3.06521 c -0.66235,-1.72604 3.9076,-10.69297 6.76967,-13.28311 1.63365,-1.47843 2.06875,-1.51459 3.27243,-0.27199 1.18957,1.22804 0.82283,2.36345 -2.56242,7.93316 -4.00121,6.58312 -6.41472,8.39719 -7.47968,5.62194 z m 74.8173,0.12806 c -2.02408,-2.4825 -3.63934,-9.73638 -2.43601,-10.93971 1.64641,-1.64641 3.95916,0.61949 5.34149,5.23327 1.63547,5.45873 -0.18778,9.03966 -2.90548,5.70644 z m -87.8736,-3.27477 c -1.08443,-2.82599 9.43089,-16.47523 12.69246,-16.47523 3.51737,0 3.02283,2.00661 -1.97445,8.01145 -2.76577,3.32341 -5.50383,6.93041 -6.08458,8.01556 -1.25494,2.34487 -3.81074,2.59211 -4.63343,0.44822 z m 27.06887,0.17947 c -0.66129,-1.72328 2.00067,-6.21879 4.17686,-7.05387 2.19279,-0.84146 2.95868,2.31694 1.28494,5.29892 -1.67568,2.98543 -4.62586,3.93336 -5.4618,1.75495 z" + style="fill:#000000;fill-opacity:1" /> + </g> + </g> + </g> +</svg> diff --git a/images/lutim_logo.png b/images/lutim_logo.png new file mode 100644 index 00000000..fb4146d7 Binary files /dev/null and b/images/lutim_logo.png differ diff --git a/images/lychee_logo.png b/images/lychee_logo.png new file mode 100644 index 00000000..aa6c318b Binary files /dev/null and b/images/lychee_logo.png differ diff --git a/images/mailman_logo.jpg b/images/mailman_logo.jpg new file mode 100644 index 00000000..edd5e373 Binary files /dev/null and b/images/mailman_logo.jpg differ diff --git a/images/mailman_logo.svg b/images/mailman_logo.svg new file mode 100644 index 00000000..a87f157c --- /dev/null +++ b/images/mailman_logo.svg @@ -0,0 +1,928 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + id="svg4932" + version="1.1" + viewBox="0 0 90 36.515675" + height="36.515675mm" + width="90mm" + sodipodi:docname="mailman_logo.svg" + inkscape:version="0.92.5 (0.92.5+68)"> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1366" + inkscape:window-height="720" + id="namedview205" + showgrid="false" + fit-margin-top="0" + fit-margin-left="0" + fit-margin-right="0" + fit-margin-bottom="0" + inkscape:zoom="0.6572807" + inkscape:cx="177.68584" + inkscape:cy="148.11985" + inkscape:window-x="0" + inkscape:window-y="680" + inkscape:window-maximized="1" + inkscape:current-layer="svg4932" /> + <defs + id="defs4926"> + <clipPath + id="clipPath13218" + clipPathUnits="userSpaceOnUse"> + <path + id="path13220" + d="M 58.654,72.646 C 58.643,72.432 58.598,72.222 58.565,72.01 v 0 c 6.893,0.894 12.977,1.248 18.123,1.302 v 0 c -0.009,0.132 -0.02,0.26 -0.02,0.391 v 0 c 0,0.27 0.025,0.532 0.063,0.791 v 0 C 70.178,74.228 63.993,73.5 58.654,72.646" + inkscape:connector-curvature="0" /> + </clipPath> + <linearGradient + id="linearGradient13226" + spreadMethod="pad" + gradientTransform="matrix(0,9.9126129,9.9126129,0,67.647949,68.739258)" + gradientUnits="userSpaceOnUse" + y2="0" + x2="1" + y1="0" + x1="0"> + <stop + id="stop13228" + offset="0" + style="stop-opacity:1;stop-color:#3a3a86" /> + <stop + id="stop13230" + offset="0.48877" + style="stop-opacity:1;stop-color:#598dc1" /> + <stop + id="stop13232" + offset="1" + style="stop-opacity:1;stop-color:#2d2756" /> + </linearGradient> + <clipPath + id="clipPath13240" + clipPathUnits="userSpaceOnUse"> + <path + id="path13242" + d="M 101.807,97.273 C 73.348,103.22 40.622,93.307 40.622,93.307 v 0 c 33.703,7.93 55.111,3.172 55.111,3.172 v 0 c 34.097,-9.912 46.388,6.741 46.388,6.741 v 0 c -6.641,-1.737 -11.857,-11.895 -40.314,-5.947" + inkscape:connector-curvature="0" /> + </clipPath> + <linearGradient + id="linearGradient13248" + spreadMethod="pad" + gradientTransform="matrix(0,9.9121094,9.9121094,0,91.371582,93.307617)" + gradientUnits="userSpaceOnUse" + y2="0" + x2="1" + y1="0" + x1="0"> + <stop + id="stop13250" + offset="0" + style="stop-opacity:1;stop-color:#3a3a86" /> + <stop + id="stop13252" + offset="0.48877" + style="stop-opacity:1;stop-color:#598dc1" /> + <stop + id="stop13254" + offset="1" + style="stop-opacity:1;stop-color:#2d2756" /> + </linearGradient> + <clipPath + id="clipPath13262" + clipPathUnits="userSpaceOnUse"> + <path + id="path13264" + d="M 101.807,86.272 C 73.348,92.219 40.622,82.308 40.622,82.308 v 0 c 33.703,7.93 55.111,3.171 55.111,3.171 v 0 c 34.097,-9.911 46.388,6.74 46.388,6.74 v 0 C 135.48,90.483 130.264,80.325 101.807,86.272" + inkscape:connector-curvature="0" /> + </clipPath> + <linearGradient + id="linearGradient13270" + spreadMethod="pad" + gradientTransform="matrix(0,9.9121094,9.9121094,0,91.371582,82.307617)" + gradientUnits="userSpaceOnUse" + y2="0" + x2="1" + y1="0" + x1="0"> + <stop + id="stop13272" + offset="0" + style="stop-opacity:1;stop-color:#3a3a86" /> + <stop + id="stop13274" + offset="0.48877" + style="stop-opacity:1;stop-color:#598dc1" /> + <stop + id="stop13276" + offset="1" + style="stop-opacity:1;stop-color:#2d2756" /> + </linearGradient> + <clipPath + id="clipPath13284" + clipPathUnits="userSpaceOnUse"> + <path + id="path13286" + d="m 103.807,73.273 c -3.525,0.736 -7.116,1.228 -10.701,1.527 v 0 c 0.004,-0.092 0.014,-0.185 0.014,-0.279 v 0 c 0,-0.452 -0.059,-0.889 -0.161,-1.313 v 0 c 3.114,-0.361 4.774,-0.728 4.774,-0.728 v 0 c 34.097,-9.913 46.388,6.74 46.388,6.74 v 0 C 137.48,77.484 132.264,67.325 103.807,73.273" + inkscape:connector-curvature="0" /> + </clipPath> + <linearGradient + id="linearGradient13292" + spreadMethod="pad" + gradientTransform="matrix(0,9.9130859,9.9130859,0,118.54004,69.306641)" + gradientUnits="userSpaceOnUse" + y2="0" + x2="1" + y1="0" + x1="0"> + <stop + id="stop13294" + offset="0" + style="stop-opacity:1;stop-color:#3a3a86" /> + <stop + id="stop13296" + offset="0.48877" + style="stop-opacity:1;stop-color:#598dc1" /> + <stop + id="stop13298" + offset="1" + style="stop-opacity:1;stop-color:#2d2756" /> + </linearGradient> + <clipPath + id="clipPath13306" + clipPathUnits="userSpaceOnUse"> + <path + id="path13308" + d="M 108.807,48.272 C 80.348,54.22 47.623,44.306 47.623,44.306 v 0 c 33.702,7.931 55.11,3.174 55.11,3.174 v 0 c 34.098,-9.912 46.389,6.74 46.389,6.74 v 0 C 142.48,52.484 137.264,42.325 108.807,48.272" + inkscape:connector-curvature="0" /> + </clipPath> + <linearGradient + id="linearGradient13314" + spreadMethod="pad" + gradientTransform="matrix(0,9.9140625,9.9140625,0,98.37207,44.305664)" + gradientUnits="userSpaceOnUse" + y2="0" + x2="1" + y1="0" + x1="0"> + <stop + id="stop13316" + offset="0" + style="stop-opacity:1;stop-color:#3a3a86" /> + <stop + id="stop13318" + offset="0.48877" + style="stop-opacity:1;stop-color:#598dc1" /> + <stop + id="stop13320" + offset="1" + style="stop-opacity:1;stop-color:#2d2756" /> + </linearGradient> + <clipPath + id="clipPath13328" + clipPathUnits="userSpaceOnUse"> + <path + id="path13330" + d="M 111.807,37.273 C 83.348,43.22 50.622,33.305 50.622,33.305 v 0 c 33.703,7.932 55.111,3.175 55.111,3.175 v 0 c 34.097,-9.913 46.389,6.74 46.389,6.74 v 0 C 145.48,41.484 140.264,31.325 111.807,37.273" + inkscape:connector-curvature="0" /> + </clipPath> + <linearGradient + id="linearGradient13336" + spreadMethod="pad" + gradientTransform="matrix(0,9.9140625,9.9140625,0,101.37207,33.305664)" + gradientUnits="userSpaceOnUse" + y2="0" + x2="1" + y1="0" + x1="0"> + <stop + id="stop13338" + offset="0" + style="stop-opacity:1;stop-color:#3a3a86" /> + <stop + id="stop13340" + offset="0.48877" + style="stop-opacity:1;stop-color:#598dc1" /> + <stop + id="stop13342" + offset="1" + style="stop-opacity:1;stop-color:#2d2756" /> + </linearGradient> + <clipPath + id="clipPath13350" + clipPathUnits="userSpaceOnUse"> + <path + id="path13352" + d="m 121.923,30.068 c -0.939,-0.738 -1.522,-1.873 -1.573,-3.207 v 0 c -0.034,-0.912 0.265,-1.72 0.821,-2.238 v 0 c 0.561,-0.552 1.369,-0.837 2.342,-0.873 v 0 c 0.899,-0.033 1.778,0.158 2.324,0.318 v 0 l 0.861,3.712 -2.596,0.097 -0.289,-1.209 1.112,-0.042 -0.342,-1.493 c -0.183,-0.068 -0.428,-0.111 -0.788,-0.098 v 0 c -1.125,0.042 -1.811,0.672 -1.766,1.869 v 0 c 0.037,0.974 0.48,1.807 1.123,2.27 v 0 c 0.491,0.353 1.124,0.532 1.833,0.504 v 0 c 0.637,-0.023 1.192,-0.18 1.504,-0.34 v 0 l 0.504,1.264 c -0.27,0.148 -0.952,0.354 -1.873,0.389 v 0 c -0.076,0.002 -0.152,0.004 -0.228,0.004 v 0 c -1.15,0 -2.189,-0.327 -2.969,-0.927" + inkscape:connector-curvature="0" /> + </clipPath> + <linearGradient + id="linearGradient13358" + spreadMethod="pad" + gradientTransform="matrix(6.493988,-0.241745,-0.241745,-6.493988,120.375,27.516602)" + gradientUnits="userSpaceOnUse" + y2="0" + x2="1" + y1="0" + x1="0"> + <stop + id="stop13360" + offset="0" + style="stop-opacity:1;stop-color:#3a3a86" /> + <stop + id="stop13362" + offset="0.48877" + style="stop-opacity:1;stop-color:#598dc1" /> + <stop + id="stop13364" + offset="1" + style="stop-opacity:1;stop-color:#2d2756" /> + </linearGradient> + <clipPath + id="clipPath13372" + clipPathUnits="userSpaceOnUse"> + <path + id="path13374" + d="m 127.066,23.693 1.422,-0.053 0.569,2.483 c 0.252,1.115 0.461,2.125 0.56,2.821 v 0 l 0.032,-10e-4 c 0.159,-0.876 0.325,-1.539 0.607,-2.515 v 0 l 0.889,-2.887 1.58,-0.058 1.62,7.089 -1.429,0.054 -0.585,-2.578 c -0.229,-1.041 -0.365,-1.821 -0.423,-2.552 v 0 l -0.033,0.002 c -0.139,0.79 -0.302,1.539 -0.554,2.46 v 0 l -0.842,2.757 -1.791,0.067 z" + inkscape:connector-curvature="0" /> + </clipPath> + <linearGradient + id="linearGradient13380" + spreadMethod="pad" + gradientTransform="matrix(7.0126648,-0.2610474,-0.2610474,-7.0126648,127.19971,27.262695)" + gradientUnits="userSpaceOnUse" + y2="0" + x2="1" + y1="0" + x1="0"> + <stop + id="stop13382" + offset="0" + style="stop-opacity:1;stop-color:#3a3a86" /> + <stop + id="stop13384" + offset="0.48877" + style="stop-opacity:1;stop-color:#598dc1" /> + <stop + id="stop13386" + offset="1" + style="stop-opacity:1;stop-color:#2d2756" /> + </linearGradient> + <clipPath + id="clipPath13394" + clipPathUnits="userSpaceOnUse"> + <path + id="path13396" + d="m 134.815,26.565 c -0.078,-0.335 -0.133,-0.683 -0.144,-0.991 v 0 c -0.057,-1.514 0.814,-2.322 2.288,-2.366 v 0 c 1.948,-0.073 2.93,0.932 3.424,3.077 v 0 l 0.924,4.029 -1.525,0.057 -0.938,-4.093 c -0.303,-1.314 -0.841,-1.825 -1.646,-1.795 v 0 c -0.678,0.026 -1.024,0.484 -1.002,1.066 v 0 c 0.012,0.307 0.054,0.592 0.117,0.834 v 0 l 0.926,4.082 -1.524,0.057 z" + inkscape:connector-curvature="0" /> + </clipPath> + <linearGradient + id="linearGradient13402" + spreadMethod="pad" + gradientTransform="matrix(6.4515381,-0.2401581,-0.2401581,-6.4515381,134.7207,26.925781)" + gradientUnits="userSpaceOnUse" + y2="0" + x2="1" + y1="0" + x1="0"> + <stop + id="stop13404" + offset="0" + style="stop-opacity:1;stop-color:#3a3a86" /> + <stop + id="stop13406" + offset="0.48877" + style="stop-opacity:1;stop-color:#598dc1" /> + <stop + id="stop13408" + offset="1" + style="stop-opacity:1;stop-color:#2d2756" /> + </linearGradient> + <clipPath + id="clipPath13416" + clipPathUnits="userSpaceOnUse"> + <path + id="path13418" + d="M 86,75.279 82.1,54.927 h 4.129 l 3.899,20.352 z m -8.254,-2.581 c 0,-1.203 0.83,-2.006 1.977,-2.006 v 0 h 0.058 c 1.319,0 2.437,0.86 2.437,2.322 v 0 c 0,1.233 -0.86,2.036 -2.093,2.036 v 0 c -1.262,0 -2.379,-0.946 -2.379,-2.352 M 52.302,74.247 48.717,66.91 C 47.885,65.159 46.854,62.896 46.11,60.745 v 0 h -0.115 c -0.029,2.151 -0.23,4.357 -0.344,6.165 v 0 l -0.603,7.337 h -5.532 l -4.844,-19.32 h 3.783 l 1.921,7.969 c 0.488,2.091 1.06,4.987 1.605,7.539 v 0 h 0.058 c 0.113,-2.58 0.257,-5.246 0.43,-7.367 v 0 l 0.688,-7.827 h 3.211 l 3.955,7.912 c 1.061,2.121 2.266,4.787 3.326,7.282 v 0 h 0.085 c -0.544,-2.779 -0.973,-5.448 -1.29,-7.539 v 0 l -1.175,-7.969 h 4.014 l 2.608,19.32 z m 51.326,-7.625 c -0.115,1.233 -1.09,2.666 -3.326,2.666 v 0 c -1.805,0 -3.526,-0.802 -4.816,-2.607 v 0 h -0.055 l 0.256,2.264 H 92.161 C 91.989,67.683 91.76,66.163 91.444,64.386 v 0 l -1.748,-9.459 h 3.984 l 1.147,6.306 c 0.487,2.781 1.978,4.729 3.383,4.729 v 0 c 1.003,0 1.317,-0.744 1.317,-1.719 v 0 c 0,-0.486 -0.085,-1.033 -0.171,-1.606 v 0 l -1.462,-7.71 h 3.985 l 1.176,6.363 c 0.545,2.838 1.92,4.672 3.297,4.672 v 0 c 0.945,0 1.375,-0.688 1.375,-1.662 v 0 c 0,-0.543 -0.086,-1.147 -0.201,-1.691 v 0 l -1.404,-7.682 h 4.014 l 1.518,8.169 c 0.114,0.718 0.229,1.834 0.229,2.409 v 0 c 0,2.378 -1.261,3.783 -3.41,3.783 v 0 c -1.836,0 -3.583,-0.859 -4.845,-2.666 m 31.864,0 h -0.056 l 0.258,2.323 h -3.641 c -0.201,-1.262 -0.401,-2.782 -0.775,-4.559 v 0 L 129.5,54.927 h 4.129 l 1.177,6.221 c 0.572,3.095 2.148,4.787 3.496,4.787 v 0 c 1.059,0 1.406,-0.69 1.406,-1.692 v 0 c 0,-0.516 -0.06,-1.06 -0.145,-1.549 v 0 l -1.49,-7.767 h 4.156 l 1.549,8.141 c 0.114,0.689 0.228,1.72 0.228,2.349 v 0 c 0,2.438 -1.318,3.843 -3.611,3.843 v 0 c -1.863,0 -3.584,-0.831 -4.903,-2.638 m -21.637,-7.138 c 0,-2.923 1.719,-4.872 4.241,-4.872 v 0 c 1.635,0 3.442,0.772 4.731,3.094 v 0 h 0.058 c -0.058,-1.002 -0.144,-1.947 -0.174,-2.779 v 0 h 3.786 c -0.057,1.748 0.229,4.5 0.572,6.306 v 0 l 1.463,7.338 c -1.176,0.374 -2.952,0.689 -4.643,0.689 v 0 c -6.882,0 -10.034,-5.046 -10.034,-9.776 m 4.299,0.775 c 0,2.61 1.95,5.875 4.616,5.875 v 0 c 0.43,0 0.802,-0.057 1.119,-0.114 v 0 l -0.633,-3.238 c -0.659,-3.441 -2.177,-4.845 -3.411,-4.845 v 0 c -1.145,0 -1.691,0.945 -1.691,2.322 M 58.83,59.484 c 0,-2.923 1.721,-4.872 4.243,-4.872 v 0 c 1.634,0 3.441,0.772 4.73,3.094 v 0 h 0.058 c -0.058,-1.002 -0.145,-1.947 -0.173,-2.779 v 0 h 3.785 c -0.059,1.748 0.229,4.5 0.572,6.306 v 0 l 1.463,7.338 c -1.176,0.374 -2.953,0.689 -4.645,0.689 v 0 c -6.879,0 -10.033,-5.046 -10.033,-9.776 m 4.3,0.775 c 0,2.61 1.951,5.875 4.615,5.875 v 0 c 0.431,0 0.803,-0.057 1.118,-0.114 v 0 l -0.63,-3.238 c -0.66,-3.441 -2.178,-4.845 -3.412,-4.845 v 0 c -1.146,0 -1.691,0.945 -1.691,2.322 m 14.042,8.686 -2.665,-14.018 h 4.127 l 2.667,14.018 z" + inkscape:connector-curvature="0" /> + </clipPath> + <linearGradient + id="linearGradient13424" + spreadMethod="pad" + gradientTransform="matrix(109.33496,0,0,-109.33496,34.671387,64.945312)" + gradientUnits="userSpaceOnUse" + y2="0" + x2="1" + y1="0" + x1="0"> + <stop + id="stop13426" + offset="0" + style="stop-opacity:1;stop-color:#3a3a86" /> + <stop + id="stop13428" + offset="0.48877" + style="stop-opacity:1;stop-color:#598dc1" /> + <stop + id="stop13430" + offset="1" + style="stop-opacity:1;stop-color:#2d2756" /> + </linearGradient> + <clipPath + id="clipPath13438" + clipPathUnits="userSpaceOnUse"> + <path + id="path13440" + d="m 163.483,24.564 c -3.742,28.73 -11.387,88.691 -11.387,88.691 v 0 c -2.41,-51.269 11.387,-88.691 11.387,-88.691" + inkscape:connector-curvature="0" /> + </clipPath> + <linearGradient + id="linearGradient13446" + spreadMethod="pad" + gradientTransform="matrix(-27.30925,83.482529,83.482529,27.30925,171.43018,27.164062)" + gradientUnits="userSpaceOnUse" + y2="0" + x2="1" + y1="0" + x1="0"> + <stop + id="stop13448" + offset="0" + style="stop-opacity:1;stop-color:#3a3a86" /> + <stop + id="stop13450" + offset="0.48877" + style="stop-opacity:1;stop-color:#598dc1" /> + <stop + id="stop13452" + offset="1" + style="stop-opacity:1;stop-color:#2d2756" /> + </linearGradient> + <clipPath + id="clipPath13460" + clipPathUnits="userSpaceOnUse"> + <path + id="path13462" + d="m 208.048,57.189 c -25.164,37.417 -54.69,55.781 -54.69,55.781 v 0 c 17.754,-18.039 54.69,-55.781 54.69,-55.781" + inkscape:connector-curvature="0" /> + </clipPath> + <linearGradient + id="linearGradient13468" + spreadMethod="pad" + gradientTransform="matrix(63.381317,-42.957825,-45.562531,-67.220673,149.02002,106.56836)" + gradientUnits="userSpaceOnUse" + y2="0" + x2="1" + y1="0" + x1="0"> + <stop + id="stop13470" + offset="0" + style="stop-opacity:1;stop-color:#3a3a86" /> + <stop + id="stop13472" + offset="0.48877" + style="stop-opacity:1;stop-color:#598dc1" /> + <stop + id="stop13474" + offset="1" + style="stop-opacity:1;stop-color:#2d2756" /> + </linearGradient> + <clipPath + id="clipPath13482" + clipPathUnits="userSpaceOnUse"> + <path + id="path13484" + d="m 164.079,24.456 c 10.984,11.989 33.941,36.949 33.941,36.949 v 0 C 176.661,43.216 164.079,24.456 164.079,24.456" + inkscape:connector-curvature="0" /> + </clipPath> + <linearGradient + id="linearGradient13490" + spreadMethod="pad" + gradientTransform="matrix(28.741562,40.626923,27.267837,-19.285843,166.67383,22.620117)" + gradientUnits="userSpaceOnUse" + y2="0" + x2="1" + y1="0" + x1="0"> + <stop + id="stop13492" + offset="0" + style="stop-opacity:1;stop-color:#3a3a86" /> + <stop + id="stop13494" + offset="0.48877" + style="stop-opacity:1;stop-color:#598dc1" /> + <stop + id="stop13496" + offset="1" + style="stop-opacity:1;stop-color:#2d2756" /> + </linearGradient> + <clipPath + id="clipPath13504" + clipPathUnits="userSpaceOnUse"> + <path + id="path13506" + d="M 247.594,21.915 C 233.016,45.887 216.487,61.28 216.487,61.28 v 0 c 10.098,-12.744 31.107,-39.365 31.107,-39.365" + inkscape:connector-curvature="0" /> + </clipPath> + <linearGradient + id="linearGradient13512" + spreadMethod="pad" + gradientTransform="matrix(35.562912,-34.814041,-23.366043,-23.867935,214.26318,59.007812)" + gradientUnits="userSpaceOnUse" + y2="0" + x2="1" + y1="0" + x1="0"> + <stop + id="stop13514" + offset="0" + style="stop-opacity:1;stop-color:#3a3a86" /> + <stop + id="stop13516" + offset="0.48877" + style="stop-opacity:1;stop-color:#598dc1" /> + <stop + id="stop13518" + offset="1" + style="stop-opacity:1;stop-color:#2d2756" /> + </linearGradient> + <clipPath + id="clipPath13526" + clipPathUnits="userSpaceOnUse"> + <path + id="path13528" + d="m 208.048,57.189 c 0,0 39.834,31.004 58.966,45.81 v 0 c 0,0 -30.115,-14.021 -58.966,-45.81" + inkscape:connector-curvature="0" /> + </clipPath> + <linearGradient + id="linearGradient13534" + spreadMethod="pad" + gradientTransform="matrix(-65.166458,-33.318008,32.49089,-65.471603,270.10791,96.762695)" + gradientUnits="userSpaceOnUse" + y2="0" + x2="1" + y1="0" + x1="0"> + <stop + id="stop13536" + offset="0" + style="stop-opacity:1;stop-color:#3a3a86" /> + <stop + id="stop13538" + offset="0.48877" + style="stop-opacity:1;stop-color:#598dc1" /> + <stop + id="stop13540" + offset="1" + style="stop-opacity:1;stop-color:#2d2756" /> + </linearGradient> + <clipPath + id="clipPath13548" + clipPathUnits="userSpaceOnUse"> + <path + id="path13550" + d="m 248.044,22.064 c 0,0 18.205,30.484 18.701,78.548 v 0 c 0,0 -12.58,-53.119 -18.701,-78.548" + inkscape:connector-curvature="0" /> + </clipPath> + <linearGradient + id="linearGradient13556" + spreadMethod="pad" + gradientTransform="matrix(36.636169,69.029877,-94.019058,49.899323,239.09229,26.814453)" + gradientUnits="userSpaceOnUse" + y2="0" + x2="1" + y1="0" + x1="0"> + <stop + id="stop13558" + offset="0" + style="stop-opacity:1;stop-color:#3a3a86" /> + <stop + id="stop13560" + offset="0.48877" + style="stop-opacity:1;stop-color:#598dc1" /> + <stop + id="stop13562" + offset="1" + style="stop-opacity:1;stop-color:#2d2756" /> + </linearGradient> + <clipPath + id="clipPath13570" + clipPathUnits="userSpaceOnUse"> + <path + id="path13572" + d="m 163.629,23.649 c 0,0 57.692,-1.829 85.331,-2.792 v 0 c 0,0 -18.916,6.054 -48.147,6.055 v 0 c -11.071,0 -23.618,-0.868 -37.184,-3.263" + inkscape:connector-curvature="0" /> + </clipPath> + <linearGradient + id="linearGradient13578" + spreadMethod="pad" + gradientTransform="matrix(-80.214142,21.705688,-26.812332,-99.109711,246.40527,11.416992)" + gradientUnits="userSpaceOnUse" + y2="0" + x2="1" + y1="0" + x1="0"> + <stop + id="stop13580" + offset="0" + style="stop-opacity:1;stop-color:#3a3a86" /> + <stop + id="stop13582" + offset="0.48877" + style="stop-opacity:1;stop-color:#598dc1" /> + <stop + id="stop13584" + offset="1" + style="stop-opacity:1;stop-color:#2d2756" /> + </linearGradient> + <clipPath + id="clipPath13592" + clipPathUnits="userSpaceOnUse"> + <path + id="path13594" + d="m 149.948,114.96 c 38.634,-3.524 119.22,-11.072 119.22,-11.072 v 0 c -38.668,10.033 -72.943,12.111 -94.703,12.111 v 0 c -15.386,-10e-4 -24.517,-1.039 -24.517,-1.039" + inkscape:connector-curvature="0" /> + </clipPath> + <linearGradient + id="linearGradient13600" + spreadMethod="pad" + gradientTransform="matrix(117.59007,9.3772583,8.5470581,-107.19205,150.76172,104.75293)" + gradientUnits="userSpaceOnUse" + y2="0" + x2="1" + y1="0" + x1="0"> + <stop + id="stop13602" + offset="0" + style="stop-opacity:1;stop-color:#3a3a86" /> + <stop + id="stop13604" + offset="0.48877" + style="stop-opacity:1;stop-color:#598dc1" /> + <stop + id="stop13606" + offset="1" + style="stop-opacity:1;stop-color:#2d2756" /> + </linearGradient> + </defs> + <metadata + id="metadata4929"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + transform="translate(-2.4999991,-231.24216)" + id="layer1"> + <g + id="g4717" + transform="matrix(0.38380186,0,0,-0.38380186,-10.807179,275.76279)"> + <g + id="g13214"> + <g + id="g13216" + clip-path="url(#clipPath13218)"> + <g + id="g13222"> + <g + id="g13224"> + <path + d="M 58.654,72.646 C 58.643,72.432 58.598,72.222 58.565,72.01 v 0 c 6.893,0.894 12.977,1.248 18.123,1.302 v 0 c -0.009,0.132 -0.02,0.26 -0.02,0.391 v 0 c 0,0.27 0.025,0.532 0.063,0.791 v 0 C 70.178,74.228 63.993,73.5 58.654,72.646" + style="fill:url(#linearGradient13226);stroke:none" + id="path13234" + inkscape:connector-curvature="0" /> + </g> + </g> + </g> + </g> + <g + id="g13236"> + <g + id="g13238" + clip-path="url(#clipPath13240)"> + <g + id="g13244"> + <g + id="g13246"> + <path + d="M 101.807,97.273 C 73.348,103.22 40.622,93.307 40.622,93.307 v 0 c 33.703,7.93 55.111,3.172 55.111,3.172 v 0 c 34.097,-9.912 46.388,6.741 46.388,6.741 v 0 c -6.641,-1.737 -11.857,-11.895 -40.314,-5.947" + style="fill:url(#linearGradient13248);stroke:none" + id="path13256" + inkscape:connector-curvature="0" /> + </g> + </g> + </g> + </g> + <g + id="g13258"> + <g + id="g13260" + clip-path="url(#clipPath13262)"> + <g + id="g13266"> + <g + id="g13268"> + <path + d="M 101.807,86.272 C 73.348,92.219 40.622,82.308 40.622,82.308 v 0 c 33.703,7.93 55.111,3.171 55.111,3.171 v 0 c 34.097,-9.911 46.388,6.74 46.388,6.74 v 0 C 135.48,90.483 130.264,80.325 101.807,86.272" + style="fill:url(#linearGradient13270);stroke:none" + id="path13278" + inkscape:connector-curvature="0" /> + </g> + </g> + </g> + </g> + <g + id="g13280"> + <g + id="g13282" + clip-path="url(#clipPath13284)"> + <g + id="g13288"> + <g + id="g13290"> + <path + d="m 103.807,73.273 c -3.525,0.736 -7.116,1.228 -10.701,1.527 v 0 c 0.004,-0.092 0.014,-0.185 0.014,-0.279 v 0 c 0,-0.452 -0.059,-0.889 -0.161,-1.313 v 0 c 3.114,-0.361 4.774,-0.728 4.774,-0.728 v 0 c 34.097,-9.913 46.388,6.74 46.388,6.74 v 0 C 137.48,77.484 132.264,67.325 103.807,73.273" + style="fill:url(#linearGradient13292);stroke:none" + id="path13300" + inkscape:connector-curvature="0" /> + </g> + </g> + </g> + </g> + <g + id="g13302"> + <g + id="g13304" + clip-path="url(#clipPath13306)"> + <g + id="g13310"> + <g + id="g13312"> + <path + d="M 108.807,48.272 C 80.348,54.22 47.623,44.306 47.623,44.306 v 0 c 33.702,7.931 55.11,3.174 55.11,3.174 v 0 c 34.098,-9.912 46.389,6.74 46.389,6.74 v 0 C 142.48,52.484 137.264,42.325 108.807,48.272" + style="fill:url(#linearGradient13314);stroke:none" + id="path13322" + inkscape:connector-curvature="0" /> + </g> + </g> + </g> + </g> + <g + id="g13324"> + <g + id="g13326" + clip-path="url(#clipPath13328)"> + <g + id="g13332"> + <g + id="g13334"> + <path + d="M 111.807,37.273 C 83.348,43.22 50.622,33.305 50.622,33.305 v 0 c 33.703,7.932 55.111,3.175 55.111,3.175 v 0 c 34.097,-9.913 46.389,6.74 46.389,6.74 v 0 C 145.48,41.484 140.264,31.325 111.807,37.273" + style="fill:url(#linearGradient13336);stroke:none" + id="path13344" + inkscape:connector-curvature="0" /> + </g> + </g> + </g> + </g> + <g + id="g13346"> + <g + id="g13348" + clip-path="url(#clipPath13350)"> + <g + id="g13354"> + <g + id="g13356"> + <path + d="m 121.923,30.068 c -0.939,-0.738 -1.522,-1.873 -1.573,-3.207 v 0 c -0.034,-0.912 0.265,-1.72 0.821,-2.238 v 0 c 0.561,-0.552 1.369,-0.837 2.342,-0.873 v 0 c 0.899,-0.033 1.778,0.158 2.324,0.318 v 0 l 0.861,3.712 -2.596,0.097 -0.289,-1.209 1.112,-0.042 -0.342,-1.493 c -0.183,-0.068 -0.428,-0.111 -0.788,-0.098 v 0 c -1.125,0.042 -1.811,0.672 -1.766,1.869 v 0 c 0.037,0.974 0.48,1.807 1.123,2.27 v 0 c 0.491,0.353 1.124,0.532 1.833,0.504 v 0 c 0.637,-0.023 1.192,-0.18 1.504,-0.34 v 0 l 0.504,1.264 c -0.27,0.148 -0.952,0.354 -1.873,0.389 v 0 c -0.076,0.002 -0.152,0.004 -0.228,0.004 v 0 c -1.15,0 -2.189,-0.327 -2.969,-0.927" + style="fill:url(#linearGradient13358);stroke:none" + id="path13366" + inkscape:connector-curvature="0" /> + </g> + </g> + </g> + </g> + <g + id="g13368"> + <g + id="g13370" + clip-path="url(#clipPath13372)"> + <g + id="g13376"> + <g + id="g13378"> + <path + d="m 127.066,23.693 1.422,-0.053 0.569,2.483 c 0.252,1.115 0.461,2.125 0.56,2.821 v 0 l 0.032,-10e-4 c 0.159,-0.876 0.325,-1.539 0.607,-2.515 v 0 l 0.889,-2.887 1.58,-0.058 1.62,7.089 -1.429,0.054 -0.585,-2.578 c -0.229,-1.041 -0.365,-1.821 -0.423,-2.552 v 0 l -0.033,0.002 c -0.139,0.79 -0.302,1.539 -0.554,2.46 v 0 l -0.842,2.757 -1.791,0.067 z" + style="fill:url(#linearGradient13380);stroke:none" + id="path13388" + inkscape:connector-curvature="0" /> + </g> + </g> + </g> + </g> + <g + id="g13390"> + <g + id="g13392" + clip-path="url(#clipPath13394)"> + <g + id="g13398"> + <g + id="g13400"> + <path + d="m 134.815,26.565 c -0.078,-0.335 -0.133,-0.683 -0.144,-0.991 v 0 c -0.057,-1.514 0.814,-2.322 2.288,-2.366 v 0 c 1.948,-0.073 2.93,0.932 3.424,3.077 v 0 l 0.924,4.029 -1.525,0.057 -0.938,-4.093 c -0.303,-1.314 -0.841,-1.825 -1.646,-1.795 v 0 c -0.678,0.026 -1.024,0.484 -1.002,1.066 v 0 c 0.012,0.307 0.054,0.592 0.117,0.834 v 0 l 0.926,4.082 -1.524,0.057 z" + style="fill:url(#linearGradient13402);stroke:none" + id="path13410" + inkscape:connector-curvature="0" /> + </g> + </g> + </g> + </g> + <g + id="g13412"> + <g + id="g13414" + clip-path="url(#clipPath13416)"> + <g + id="g13420"> + <g + id="g13422"> + <path + d="M 86,75.279 82.1,54.927 h 4.129 l 3.899,20.352 z m -8.254,-2.581 c 0,-1.203 0.83,-2.006 1.977,-2.006 v 0 h 0.058 c 1.319,0 2.437,0.86 2.437,2.322 v 0 c 0,1.233 -0.86,2.036 -2.093,2.036 v 0 c -1.262,0 -2.379,-0.946 -2.379,-2.352 M 52.302,74.247 48.717,66.91 C 47.885,65.159 46.854,62.896 46.11,60.745 v 0 h -0.115 c -0.029,2.151 -0.23,4.357 -0.344,6.165 v 0 l -0.603,7.337 h -5.532 l -4.844,-19.32 h 3.783 l 1.921,7.969 c 0.488,2.091 1.06,4.987 1.605,7.539 v 0 h 0.058 c 0.113,-2.58 0.257,-5.246 0.43,-7.367 v 0 l 0.688,-7.827 h 3.211 l 3.955,7.912 c 1.061,2.121 2.266,4.787 3.326,7.282 v 0 h 0.085 c -0.544,-2.779 -0.973,-5.448 -1.29,-7.539 v 0 l -1.175,-7.969 h 4.014 l 2.608,19.32 z m 51.326,-7.625 c -0.115,1.233 -1.09,2.666 -3.326,2.666 v 0 c -1.805,0 -3.526,-0.802 -4.816,-2.607 v 0 h -0.055 l 0.256,2.264 H 92.161 C 91.989,67.683 91.76,66.163 91.444,64.386 v 0 l -1.748,-9.459 h 3.984 l 1.147,6.306 c 0.487,2.781 1.978,4.729 3.383,4.729 v 0 c 1.003,0 1.317,-0.744 1.317,-1.719 v 0 c 0,-0.486 -0.085,-1.033 -0.171,-1.606 v 0 l -1.462,-7.71 h 3.985 l 1.176,6.363 c 0.545,2.838 1.92,4.672 3.297,4.672 v 0 c 0.945,0 1.375,-0.688 1.375,-1.662 v 0 c 0,-0.543 -0.086,-1.147 -0.201,-1.691 v 0 l -1.404,-7.682 h 4.014 l 1.518,8.169 c 0.114,0.718 0.229,1.834 0.229,2.409 v 0 c 0,2.378 -1.261,3.783 -3.41,3.783 v 0 c -1.836,0 -3.583,-0.859 -4.845,-2.666 m 31.864,0 h -0.056 l 0.258,2.323 h -3.641 c -0.201,-1.262 -0.401,-2.782 -0.775,-4.559 v 0 L 129.5,54.927 h 4.129 l 1.177,6.221 c 0.572,3.095 2.148,4.787 3.496,4.787 v 0 c 1.059,0 1.406,-0.69 1.406,-1.692 v 0 c 0,-0.516 -0.06,-1.06 -0.145,-1.549 v 0 l -1.49,-7.767 h 4.156 l 1.549,8.141 c 0.114,0.689 0.228,1.72 0.228,2.349 v 0 c 0,2.438 -1.318,3.843 -3.611,3.843 v 0 c -1.863,0 -3.584,-0.831 -4.903,-2.638 m -21.637,-7.138 c 0,-2.923 1.719,-4.872 4.241,-4.872 v 0 c 1.635,0 3.442,0.772 4.731,3.094 v 0 h 0.058 c -0.058,-1.002 -0.144,-1.947 -0.174,-2.779 v 0 h 3.786 c -0.057,1.748 0.229,4.5 0.572,6.306 v 0 l 1.463,7.338 c -1.176,0.374 -2.952,0.689 -4.643,0.689 v 0 c -6.882,0 -10.034,-5.046 -10.034,-9.776 m 4.299,0.775 c 0,2.61 1.95,5.875 4.616,5.875 v 0 c 0.43,0 0.802,-0.057 1.119,-0.114 v 0 l -0.633,-3.238 c -0.659,-3.441 -2.177,-4.845 -3.411,-4.845 v 0 c -1.145,0 -1.691,0.945 -1.691,2.322 M 58.83,59.484 c 0,-2.923 1.721,-4.872 4.243,-4.872 v 0 c 1.634,0 3.441,0.772 4.73,3.094 v 0 h 0.058 c -0.058,-1.002 -0.145,-1.947 -0.173,-2.779 v 0 h 3.785 c -0.059,1.748 0.229,4.5 0.572,6.306 v 0 l 1.463,7.338 c -1.176,0.374 -2.953,0.689 -4.645,0.689 v 0 c -6.879,0 -10.033,-5.046 -10.033,-9.776 m 4.3,0.775 c 0,2.61 1.951,5.875 4.615,5.875 v 0 c 0.431,0 0.803,-0.057 1.118,-0.114 v 0 l -0.63,-3.238 c -0.66,-3.441 -2.178,-4.845 -3.412,-4.845 v 0 c -1.146,0 -1.691,0.945 -1.691,2.322 m 14.042,8.686 -2.665,-14.018 h 4.127 l 2.667,14.018 z" + style="fill:url(#linearGradient13424);stroke:none" + id="path13432" + inkscape:connector-curvature="0" /> + </g> + </g> + </g> + </g> + <g + id="g13434"> + <g + id="g13436" + clip-path="url(#clipPath13438)"> + <g + id="g13442"> + <g + id="g13444"> + <path + d="m 163.483,24.564 c -3.742,28.73 -11.387,88.691 -11.387,88.691 v 0 c -2.41,-51.269 11.387,-88.691 11.387,-88.691" + style="fill:url(#linearGradient13446);stroke:none" + id="path13454" + inkscape:connector-curvature="0" /> + </g> + </g> + </g> + </g> + <g + id="g13456"> + <g + id="g13458" + clip-path="url(#clipPath13460)"> + <g + id="g13464"> + <g + id="g13466"> + <path + d="m 208.048,57.189 c -25.164,37.417 -54.69,55.781 -54.69,55.781 v 0 c 17.754,-18.039 54.69,-55.781 54.69,-55.781" + style="fill:url(#linearGradient13468);stroke:none" + id="path13476" + inkscape:connector-curvature="0" /> + </g> + </g> + </g> + </g> + <g + id="g13478"> + <g + id="g13480" + clip-path="url(#clipPath13482)"> + <g + id="g13486"> + <g + id="g13488"> + <path + d="m 164.079,24.456 c 10.984,11.989 33.941,36.949 33.941,36.949 v 0 C 176.661,43.216 164.079,24.456 164.079,24.456" + style="fill:url(#linearGradient13490);stroke:none" + id="path13498" + inkscape:connector-curvature="0" /> + </g> + </g> + </g> + </g> + <g + id="g13500"> + <g + id="g13502" + clip-path="url(#clipPath13504)"> + <g + id="g13508"> + <g + id="g13510"> + <path + d="M 247.594,21.915 C 233.016,45.887 216.487,61.28 216.487,61.28 v 0 c 10.098,-12.744 31.107,-39.365 31.107,-39.365" + style="fill:url(#linearGradient13512);stroke:none" + id="path13520" + inkscape:connector-curvature="0" /> + </g> + </g> + </g> + </g> + <g + id="g13522"> + <g + id="g13524" + clip-path="url(#clipPath13526)"> + <g + id="g13530"> + <g + id="g13532"> + <path + d="m 208.048,57.189 c 0,0 39.834,31.004 58.966,45.81 v 0 c 0,0 -30.115,-14.021 -58.966,-45.81" + style="fill:url(#linearGradient13534);stroke:none" + id="path13542" + inkscape:connector-curvature="0" /> + </g> + </g> + </g> + </g> + <g + id="g13544"> + <g + id="g13546" + clip-path="url(#clipPath13548)"> + <g + id="g13552"> + <g + id="g13554"> + <path + d="m 248.044,22.064 c 0,0 18.205,30.484 18.701,78.548 v 0 c 0,0 -12.58,-53.119 -18.701,-78.548" + style="fill:url(#linearGradient13556);stroke:none" + id="path13564" + inkscape:connector-curvature="0" /> + </g> + </g> + </g> + </g> + <g + id="g13566"> + <g + id="g13568" + clip-path="url(#clipPath13570)"> + <g + id="g13574"> + <g + id="g13576"> + <path + d="m 163.629,23.649 c 0,0 57.692,-1.829 85.331,-2.792 v 0 c 0,0 -18.916,6.054 -48.147,6.055 v 0 c -11.071,0 -23.618,-0.868 -37.184,-3.263" + style="fill:url(#linearGradient13578);stroke:none" + id="path13586" + inkscape:connector-curvature="0" /> + </g> + </g> + </g> + </g> + <g + id="g13588"> + <g + id="g13590" + clip-path="url(#clipPath13592)"> + <g + id="g13596"> + <g + id="g13598"> + <path + d="m 149.948,114.96 c 38.634,-3.524 119.22,-11.072 119.22,-11.072 v 0 c -38.668,10.033 -72.943,12.111 -94.703,12.111 v 0 c -15.386,-10e-4 -24.517,-1.039 -24.517,-1.039" + style="fill:url(#linearGradient13600);stroke:none" + id="path13608" + inkscape:connector-curvature="0" /> + </g> + </g> + </g> + </g> + </g> + </g> +</svg> diff --git a/images/mantis_logo.png b/images/mantis_logo.png new file mode 100644 index 00000000..d2529c81 Binary files /dev/null and b/images/mantis_logo.png differ diff --git a/images/mastodon_logo.svg b/images/mastodon_logo.svg new file mode 100644 index 00000000..8b1328e8 --- /dev/null +++ b/images/mastodon_logo.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 713.35878 175.8678" height="49.633801mm" width="201.3257mm"><path d="M160.55476 105.43125c-2.4125 12.40625-21.5975 25.9825-43.63375 28.61375-11.49125 1.3725-22.80375 2.63125-34.8675 2.07875-19.73-.90375-35.2975-4.71-35.2975-4.71 0 1.92125.11875 3.75.355 5.46 2.565 19.47 19.3075 20.6375 35.16625 21.18125 16.00625.5475 30.2575-3.9475 30.2575-3.9475l.65875 14.4725s-11.19625 6.01125-31.14 7.11625c-10.99875.605-24.65375-.27625-40.56-4.485C6.99851 162.08 1.06601 125.31.15851 88-.11899 76.9225.05226 66.47625.05226 57.74125c0-38.1525 24.99625-49.335 24.99625-49.335C37.65226 2.6175 59.27976.18375 81.76351 0h.5525c22.48375.18375 44.125 2.6175 56.72875 8.40625 0 0 24.99625 11.1825 24.99625 49.335 0 0 .3125 28.1475-3.48625 47.69" fill="#3088d4"/><path d="M34.65751 48.494c0-5.55375 4.5025-10.055 10.055-10.055 5.55375 0 10.055 4.50125 10.055 10.055 0 5.5525-4.50125 10.055-10.055 10.055-5.5525 0-10.055-4.5025-10.055-10.055M178.86476 60.69975v46.195h-18.30125v-44.8375c0-9.4525-3.9775-14.24875-11.9325-14.24875-8.79375 0-13.2025 5.69125-13.2025 16.94375V89.2935h-18.19375V64.75225c0-11.2525-4.40875-16.94375-13.2025-16.94375-7.955 0-11.9325 4.79625-11.9325 14.24875v44.8375H73.79851v-46.195c0-9.44125 2.40375-16.94375 7.2325-22.495 4.98-5.55 11.50125-8.395 19.595-8.395 9.36625 0 16.45875 3.59875 21.14625 10.79875l4.56 7.6425 4.55875-7.6425c4.68875-7.2 11.78-10.79875 21.1475-10.79875 8.09375 0 14.61375 2.845 19.59375 8.395 4.82875 5.55125 7.2325 13.05375 7.2325 22.495M241.91276 83.663625c3.77625-3.99 5.595-9.015 5.595-15.075 0-6.06-1.81875-11.085-5.595-14.9275-3.63625-3.99125-8.25375-5.91125-13.84875-5.91125-5.59625 0-10.2125 1.92-13.84875 5.91125-3.6375 3.8425-5.45625 8.8675-5.45625 14.9275 0 6.06 1.81875 11.085 5.45625 15.075 3.63625 3.8425 8.2525 5.76375 13.84875 5.76375 5.595 0 10.2125-1.92125 13.84875-5.76375m5.595-52.025h18.04625v73.9h-18.04625v-8.72125c-5.455 7.2425-13.01 10.79-22.80125 10.79-9.3725 0-17.34625-3.695-24.06125-11.23375-6.57375-7.5375-9.93125-16.84875-9.93125-27.785 0-10.78875 3.3575-20.10125 9.93125-27.63875 6.715-7.5375 14.68875-11.38 24.06125-11.38 9.79125 0 17.34625 3.5475 22.80125 10.78875v-8.72zM326.26951 67.258625c5.315 3.99 7.97375 9.60625 7.83375 16.7 0 7.53875-2.65875 13.45-8.11375 17.58875-5.45625 3.99125-12.03 6.06-20.00375 6.06-14.40875 0-24.20125-5.9125-29.3775-17.58875l15.66875-9.31c2.0975 6.35375 6.71375 9.60625 13.70875 9.60625 6.43375 0 9.6525-2.07 9.6525-6.35625 0-3.10375-4.1975-5.91125-12.73-8.1275-3.21875-.8875-5.87625-1.77375-7.97375-2.51375-2.9375-1.18125-5.455-2.5125-7.55375-4.1375-5.17625-3.99-7.83375-9.3125-7.83375-16.11 0-7.2425 2.5175-13.00625 7.55375-17.145 5.17625-4.28625 11.47-6.355 19.025-6.355 12.03 0 20.84375 5.1725 26.5775 15.66625l-15.38625 8.8675c-2.23875-5.02375-6.015-7.53625-11.19125-7.53625-5.45625 0-8.11375 2.06875-8.11375 6.05875 0 3.10375 4.19625 5.91125 12.73 8.12875 6.575 1.4775 11.75 3.695 15.5275 6.50375M383.626635 49.966125h-15.8075v30.7425c0 3.695 1.4 5.91125 4.0575 6.945 1.95875.74 5.875.8875 11.75.59125v17.29375c-12.16875 1.4775-20.9825.295-26.15875-3.69625-5.175-3.8425-7.69375-10.93625-7.69375-21.13375v-30.7425h-12.17v-18.3275h12.17v-14.9275l18.045-5.76375v20.69125h15.8075v18.3275zM441.124885 83.2205c3.6375-3.84375 5.455-8.72125 5.455-14.6325 0-5.91125-1.8175-10.78875-5.455-14.63125-3.6375-3.84375-8.11375-5.76375-13.57-5.76375-5.455 0-9.93125 1.92-13.56875 5.76375-3.4975 3.99-5.31625 8.8675-5.31625 14.63125 0 5.765 1.81875 10.6425 5.31625 14.6325 3.6375 3.8425 8.11375 5.76375 13.56875 5.76375 5.45625 0 9.9325-1.92125 13.57-5.76375m-39.86875 13.15375c-7.13375-7.5375-10.63125-16.70125-10.63125-27.78625 0-10.9375 3.4975-20.1 10.63125-27.6375 7.13375-7.5375 15.9475-11.38 26.29875-11.38 10.3525 0 19.165 3.8425 26.3 11.38 7.135 7.5375 10.77125 16.84875 10.77125 27.6375 0 10.9375-3.63625 20.24875-10.77125 27.78625-7.135 7.53875-15.8075 11.2325-26.3 11.2325-10.49125 0-19.165-3.69375-26.29875-11.2325M524.92126 83.663625c3.6375-3.99 5.455-9.015 5.455-15.075 0-6.06-1.8175-11.085-5.455-14.9275-3.63625-3.99125-8.25375-5.91125-13.84875-5.91125-5.59625 0-10.2125 1.92-13.98875 5.91125-3.63625 3.8425-5.45625 8.8675-5.45625 14.9275 0 6.06 1.82 11.085 5.45625 15.075 3.77625 3.8425 8.5325 5.76375 13.98875 5.76375 5.595 0 10.2125-1.92125 13.84875-5.76375m5.455-81.585h18.04625v103.46h-18.04625v-8.72125c-5.315 7.2425-12.87 10.79-22.66125 10.79-9.3725 0-17.485-3.695-24.2-11.23375-6.575-7.5375-9.9325-16.84875-9.9325-27.785 0-10.78875 3.3575-20.10125 9.9325-27.63875 6.715-7.5375 14.8275-11.38 24.2-11.38 9.79125 0 17.34625 3.5475 22.66125 10.78875v-38.28zM611.79626 83.2205c3.63625-3.84375 5.455-8.72125 5.455-14.6325 0-5.91125-1.81875-10.78875-5.455-14.63125-3.6375-3.84375-8.11375-5.76375-13.57-5.76375-5.455 0-9.9325 1.92-13.56875 5.76375-3.49875 3.99-5.31625 8.8675-5.31625 14.63125 0 5.765 1.8175 10.6425 5.31625 14.6325 3.63625 3.8425 8.11375 5.76375 13.56875 5.76375 5.45625 0 9.9325-1.92125 13.57-5.76375m-39.86875 13.15375c-7.135-7.5375-10.63125-16.70125-10.63125-27.78625 0-10.9375 3.49625-20.1 10.63125-27.6375 7.135-7.5375 15.9475-11.38 26.29875-11.38 10.3525 0 19.165 3.8425 26.3 11.38 7.135 7.5375 10.77125 16.84875 10.77125 27.6375 0 10.9375-3.63625 20.24875-10.77125 27.78625-7.135 7.53875-15.8075 11.2325-26.3 11.2325-10.49125 0-19.16375-3.69375-26.29875-11.2325M713.35876 60.163875v45.37375h-18.04625v-43.00875c0-4.8775-1.25875-8.5725-3.77625-11.38-2.37875-2.5125-5.73625-3.84375-10.0725-3.84375-10.2125 0-15.3875 6.06-15.3875 18.3275v39.905h-18.04625v-73.89875h18.04625v8.27625c4.33625-6.94625 11.19-10.345 20.84375-10.345 7.69375 0 13.98875 2.66 18.885 8.12875 5.035 5.46875 7.55375 12.85875 7.55375 22.465" fill="#fff"/></svg> diff --git a/images/matomo_Logo.svg b/images/matomo_Logo.svg new file mode 100644 index 00000000..14d9f510 --- /dev/null +++ b/images/matomo_Logo.svg @@ -0,0 +1,32 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="341.82" height="58.32"> + <defs> + <clipPath id="a" transform="translate(-7.52 -22.83)"> + <path fill="none" d="M0 0h360v99H0z"/> + </clipPath> + <clipPath id="b" transform="translate(-7.52 -22.83)"> + <path d="M54.17 39.63a11.74 11.74 0 0 0 3 7.86L71 68.71l.17.27.08.11a11.79 11.79 0 0 0 19.69-13l-.21-.33a.71.71 0 0 1-.1-.14L76 33.45a11.79 11.79 0 0 0-21.84 6.18" fill="none"/> + </clipPath> + <clipPath id="c" transform="translate(-7.52 -22.83)"> + <path fill="none" d="M7.52 22.83h77.52v58.32H7.52z"/> + </clipPath> + </defs> + <g clip-path="url(#a)" data-name="Layer 1" style="clip-path:url(#clip-path)"> + <g clip-path="url(#a)" fill="#3f4445"> + <path d="M341.82 31.31a16.41 16.41 0 1 1-16.41-16.41 16.41 16.41 0 0 1 16.41 16.41m-16.41-8.22a8.22 8.22 0 1 0 8.22 8.22 8.22 8.22 0 0 0-8.22-8.22M254.96 31.32a16.41 16.41 0 1 1-16.41-16.41 16.41 16.41 0 0 1 16.41 16.41m-16.41-8.22a8.22 8.22 0 1 0 8.22 8.22 8.22 8.22 0 0 0-8.22-8.22M176.66 14.9a3.88 3.88 0 0 0-3.76 2.42 16.42 16.42 0 1 0 0 28 3.91 3.91 0 0 0 3.77 2.41 4 4 0 0 0 4.12-4.29V19.17a4 4 0 0 0-4.12-4.29m-12.3 24.65a8.23 8.23 0 1 1 8.19-9v1.5a8.23 8.23 0 0 1-8.19 7.48M219.32 33.59a4.09 4.09 0 0 0-8.17 0 6 6 0 0 1-11.94 0V23.1h9.64a4.1 4.1 0 0 0 0-8.2h-9.66v-2.79a4.09 4.09 0 0 0-8.17 0v2.82h-3.31a4.08 4.08 0 1 0 0 8.16h3.31v10.5a14.33 14.33 0 0 0 14.16 14.14 14.15 14.15 0 0 0 14.14-14.14M306.17 43.62V28.87a14.12 14.12 0 0 0-24.2-9.7 14.11 14.11 0 0 0-24.18 9.74v14.71a4.09 4.09 0 0 0 8.17 0V29.04a6 6 0 0 1 11.95 0v14.44a4.26 4.26 0 0 0 4.12 4.24 4.18 4.18 0 0 0 4-4.24V29.04a6 6 0 0 1 11.95 0v14.58a4.08 4.08 0 1 0 8.16 0M145.12 43.61V28.85a14.12 14.12 0 0 0-24.21-9.68 14.1 14.1 0 0 0-24.17 9.73v14.71a4.08 4.08 0 0 0 8.16 0V29.03a6 6 0 0 1 12 0v14.43a4.27 4.27 0 0 0 4.13 4.25 4.19 4.19 0 0 0 4-4.25V29.03a6 6 0 0 1 11.94 0v14.58a4.08 4.08 0 1 0 8.16 0"/> + </g> + <g clip-path="url(#a)"> + <path d="M83.38 33.29l-.21-.33a.71.71 0 0 1-.1-.14l-14.59-22.2-18.85 14 13.85 21.26.17.27.08.11a11.8 11.8 0 0 0 19.69-13" fill="#95c748"/> + <path d="M26.83 39.47a11.8 11.8 0 1 0-11.8 11.8 11.8 11.8 0 0 0 11.8-11.8" fill="#35bfc0"/> + </g> + <g clip-path="url(#b)"> + <g clip-path="url(#c)" style="clip-path:url(#clip-path-5)" opacity=".5"> + <image width="323" height="243" transform="scale(.24)" xlink:href="data:image/png;base64,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"/> + </g> + <path d="M70.3 16.8a11.81 11.81 0 1 0-21.66 6.48l-9-12.66a11.78 11.78 0 0 0-20.08 0L5.3 32.86a11.79 11.79 0 0 1 19.87.51l9.31 13.09a11.77 11.77 0 0 0 19 0l.1-.15a10.53 10.53 0 0 0 .67-1.06l14-21.83a11.77 11.77 0 0 0 2-6.62m-19.84 8.58l.2.19-.2-.19m1 .88l.23.17-.16-.17m2.58 1.47l.31.11-.31-.11m1.28.43l.42.1-.42-.1m1.37.29l.42.06-.42-.06m9.57-2.77l.31-.29-.31.29m-6.39 2.84l.42-.07-.42.07m1.34-.24l.45-.12-.45.12m1.34-.41a3.57 3.57 0 0 0 .38-.14 3.57 3.57 0 0 1-.38.14m2.66-1.39l.25-.21-.29.22m2-1.77l.25-.27-.25.27M5.01 33.33c.09-.15.17-.29.27-.43l-.28.43z" fill="#3253a0"/> + </g> + <g clip-path="url(#a)"> + <path d="M70.25 16.8a11.8 11.8 0 1 0-11.77 11.8 11.8 11.8 0 0 0 11.8-11.8" fill="#f38334"/> + <path d="M58.48 28.6a11.78 11.78 0 0 1-9.86-5.32l-9-12.66a11.77 11.77 0 0 0-20.07 0L5.25 32.86a11.79 11.79 0 0 1 19.87.51l9.36 13.09a11.77 11.77 0 0 0 19 0l.09-.15.68-1 14-21.84a11.78 11.78 0 0 1-9.77 5.13M4.95 33.33l.26-.43z" fill="#3152a0"/> + </g> + </g> +</svg> diff --git a/images/matomo_logo.png b/images/matomo_logo.png new file mode 100644 index 00000000..d62dd696 Binary files /dev/null and b/images/matomo_logo.png differ diff --git a/images/mattermost_logo.png b/images/mattermost_logo.png new file mode 100644 index 00000000..189c5dc9 Binary files /dev/null and b/images/mattermost_logo.png differ diff --git a/images/mattermost_logo.svg b/images/mattermost_logo.svg new file mode 100644 index 00000000..57a5184a --- /dev/null +++ b/images/mattermost_logo.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1300 205.35001" height="205.35001" width="1300" xml:space="preserve" version="1.1" id="svg2"><metadata id="metadata8"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/></cc:Work></rdf:RDF></metadata><defs id="defs6"><clipPath id="clipPath18" clipPathUnits="userSpaceOnUse"><path id="path20" d="M 0,1642.8 0,0 l 10400,0 0,1642.8 -10400,0 z"/></clipPath></defs><g transform="matrix(1.25,0,0,-1.25,0,205.35)" id="g10"><g transform="scale(0.1,0.1)" id="g12"><g id="g14"><g clip-path="url(#clipPath18)" id="g16"><path id="path22" style="fill:#211f1e;fill-opacity:1;fill-rule:evenodd;stroke:none" d="m 3848.62,794.105 c 0,25.012 -4.18,45.364 -12.53,61.024 -8.33,15.621 -19.81,27.894 -34.41,36.734 -14.6,8.883 -32.6,14.891 -53.97,18 -21.39,3.129 -45.12,4.696 -71.2,4.696 -56.32,0 -116.28,-10.95 -179.91,-32.844 -14.61,27.117 -25.55,52.68 -32.84,76.664 -7.3,23.98 -10.97,52.661 -10.97,86.051 45.9,15.63 91.78,27.1 137.68,34.4 45.88,7.31 88.67,10.96 128.28,10.96 108.48,0 193.22,-26.07 254.24,-78.23 61.01,-52.158 91.52,-135.576 91.52,-250.31 l 0,-469.34 c -36.51,-11.469 -80.84,-22.43 -132.99,-32.859 -52.13,-10.43 -111.07,-15.653 -176.78,-15.653 -53.19,0 -101.96,4.704 -146.29,14.09 -44.32,9.383 -82.4,25.043 -114.18,46.942 -31.83,21.879 -56.33,50.05 -73.56,84.468 -17.19,34.434 -25.8,76.661 -25.8,126.731 0,50.051 10.69,92.031 32.07,125.93 21.38,33.898 49.03,61.027 82.91,81.351 33.91,20.348 71.71,34.942 113.44,43.813 41.72,8.867 83.43,13.297 125.15,13.297 30.25,0 63.62,-1.575 100.14,-4.684 l 0,18.769 z m 0,-161.156 c -12.53,2.09 -26.08,3.93 -40.7,5.481 -14.6,1.558 -27.61,2.34 -39.1,2.34 -51.11,0 -91.53,-9.11 -121.26,-27.372 -29.72,-18.25 -44.58,-47.718 -44.58,-88.386 0,-27.133 5.74,-47.973 17.21,-62.59 11.47,-14.59 25.3,-25.281 41.46,-32.051 16.17,-6.789 33.36,-10.961 51.62,-12.531 18.27,-1.551 34.17,-2.36 47.71,-2.36 15.66,0 31.31,1.321 46.94,3.93 15.66,2.61 29.21,4.942 40.7,7.039 l 0,206.5 z m 364,269.102 -101.7,0 -7.84,31.293 292.58,373.916 35.98,0 0,-236.24 189.3,0 c 3.11,-15.65 5.21,-29.73 6.27,-42.24 1.02,-12.53 1.54,-25.55 1.54,-39.124 0,-14.593 -0.52,-28.672 -1.54,-42.234 -1.06,-13.567 -3.16,-28.688 -6.27,-45.371 l -189.3,0 0,-317.602 c 0,-32.32 2.62,-58.39 7.84,-78.219 5.19,-19.789 12.76,-35.449 22.66,-46.929 9.93,-11.469 22.17,-19.289 36.77,-23.461 14.6,-4.192 31.83,-6.27 51.62,-6.27 15.66,0 31.03,1.309 46.17,3.918 15.11,2.602 28.41,4.953 39.88,7.032 7.32,-19.79 12.51,-40.399 15.65,-61.79 3.14,-21.378 4.69,-40.429 4.69,-57.109 0,-11.473 -0.25,-21.109 -0.78,-28.941 -0.52,-7.809 -1.29,-15.399 -2.35,-22.68 -47.97,-11.488 -97.5,-17.199 -148.61,-17.199 -94.92,0 -167.42,22.148 -217.47,66.461 -50.06,44.34 -75.09,116.578 -75.09,216.699 l 0,366.09 z m 586.96,0 -101.68,0 -7.84,31.293 292.57,373.916 35.98,0 0,-236.24 189.3,0 c 3.12,-15.65 5.22,-29.73 6.27,-42.24 1.02,-12.53 1.55,-25.55 1.55,-39.124 0,-14.593 -0.53,-28.672 -1.55,-42.234 -1.05,-13.567 -3.15,-28.688 -6.27,-45.371 l -189.3,0 0,-317.602 c 0,-32.32 2.63,-58.39 7.83,-78.219 5.22,-19.789 12.78,-35.449 22.68,-46.929 9.92,-11.469 22.15,-19.289 36.77,-23.461 14.59,-4.192 31.82,-6.27 51.62,-6.27 15.65,0 31.02,1.309 46.16,3.918 15.12,2.602 28.42,4.953 39.89,7.032 7.31,-19.79 12.51,-40.399 15.63,-61.79 3.15,-21.378 4.71,-40.429 4.71,-57.109 0,-11.473 -0.26,-21.109 -0.79,-28.941 -0.51,-7.809 -1.29,-15.399 -2.34,-22.68 -47.98,-11.488 -97.5,-17.199 -148.63,-17.199 -94.9,0 -167.4,22.148 -217.46,66.461 -50.06,44.34 -75.1,116.578 -75.1,216.699 l 0,366.09 z M 5827.25,753.406 c -2.08,50.086 -15.91,90.492 -41.46,121.262 -25.55,30.766 -61.27,46.168 -107.17,46.168 -52.15,0 -91.78,-14.609 -118.9,-43.809 -27.11,-29.207 -43.27,-70.414 -48.48,-123.621 l 316.01,0 z M 5509.66,598.539 c 4.18,-62.578 26.08,-107.949 65.71,-136.117 39.63,-28.16 91.78,-42.242 156.46,-42.242 35.46,0 71.68,3.402 108.72,10.191 37.03,6.77 72.22,16.418 105.61,28.93 11.47,-20.86 21.37,-45.891 29.72,-75.102 8.34,-29.179 13.03,-60.488 14.08,-93.859 -81.36,-31.289 -173.15,-46.942 -275.37,-46.942 -75.08,0 -139.47,10.434 -193.21,31.301 -53.7,20.852 -97.51,49.813 -131.4,86.821 -33.9,37.019 -58.94,81.089 -75.1,132.21 -16.16,51.102 -24.23,106.891 -24.23,167.372 0,59.464 8.33,115.265 25.02,167.41 16.67,52.168 41.45,97.523 74.31,136.105 32.85,38.613 73.52,69.113 122.03,91.533 48.5,22.43 105.08,33.64 169.74,33.64 56.32,0 106.39,-9.9 150.19,-29.73 43.81,-19.81 81.09,-46.93 111.86,-81.365 30.77,-34.394 53.99,-75.347 69.63,-122.8 15.65,-47.454 23.47,-98.313 23.47,-152.528 0,-19.82 -0.78,-39.39 -2.35,-58.676 -1.56,-19.281 -3.41,-34.679 -5.47,-46.152 l -519.42,0 z m 612.08,472.481 c 15.64,3.11 30.5,5.47 44.58,7.03 14.1,1.58 29.46,2.36 46.16,2.36 15.65,0 31.04,-1.06 46.14,-3.13 15.14,-2.08 30,-4.7 44.58,-7.83 3.15,-5.23 6.02,-12.77 8.62,-22.68 2.61,-9.91 4.95,-20.34 7.04,-31.3 2.09,-10.96 3.9,-21.884 5.47,-32.857 1.57,-10.957 2.86,-20.054 3.92,-27.383 22.94,32.34 51.12,61.29 84.48,86.83 33.38,25.56 75.1,38.35 125.15,38.35 10.45,0 22.44,-0.52 35.99,-1.58 13.55,-1.04 23.46,-2.6 29.72,-4.7 2.09,-10.41 3.66,-22.41 4.69,-35.97 1.07,-13.55 1.58,-27.64 1.58,-42.246 0,-17.73 -0.8,-37.023 -2.35,-57.883 -1.57,-20.855 -4.44,-40.668 -8.62,-59.445 -11.47,2.094 -24.24,3.129 -38.31,3.129 -14.08,0 -22.7,0 -25.81,0 -17.75,0 -37.55,-1.832 -59.47,-5.473 -21.89,-3.664 -42.75,-13.301 -62.57,-28.957 -19.83,-15.637 -36.24,-39.109 -49.29,-70.406 -13.03,-31.274 -19.57,-75.082 -19.57,-131.418 l 0,-384.859 c -18.75,-3.114 -37.52,-5.204 -56.31,-6.243 -18.76,-1.05 -37.01,-1.558 -54.75,-1.558 -17.74,0 -35.72,0.508 -53.98,1.558 -18.25,1.039 -37.28,3.129 -57.09,6.243 l 0,810.418 z m 592.26,0 c 14.59,3.11 29.2,5.47 43.79,7.03 14.61,1.58 30.77,2.36 48.51,2.36 17.73,0 33.37,-0.78 46.93,-2.36 13.56,-1.56 27.64,-3.92 42.24,-7.03 3.12,-5.22 6.01,-12.79 8.61,-22.7 2.6,-9.9 4.96,-20.34 7.04,-31.28 2.09,-10.95 3.9,-21.638 5.47,-32.067 1.59,-10.43 2.88,-19.301 3.92,-26.594 8.32,15.625 19.29,31.277 32.86,46.931 13.55,15.63 29.71,29.7 48.48,42.23 18.77,12.52 39.89,22.69 63.37,30.51 23.46,7.83 49.81,11.74 79.01,11.74 126.19,0 207.02,-47.99 242.49,-143.942 20.85,38.597 50.32,72.222 88.38,100.922 38.08,28.68 86.32,43.02 144.74,43.02 91.77,0 159.3,-25.31 202.58,-75.9 43.3,-50.562 64.94,-129.577 64.94,-237.011 l 0,-514.707 c -37.54,-6.262 -74.59,-9.371 -111.08,-9.371 -36.51,0 -73.54,3.109 -111.08,9.371 l 0,456.84 c 0,56.324 -7.05,99.593 -21.14,129.832 -14.06,30.254 -42.48,45.379 -85.24,45.379 -17.75,0 -35.2,-2.618 -52.4,-7.817 -17.23,-5.207 -32.87,-14.851 -46.94,-28.937 -14.08,-14.082 -25.55,-33.914 -34.43,-59.465 -8.87,-25.527 -13.3,-58.664 -13.3,-99.336 l 0,-436.496 c -37.55,-6.262 -74.58,-9.371 -111.08,-9.371 -36.5,0 -73.54,3.109 -111.09,9.371 l 0,456.84 c 0,56.324 -7.03,99.593 -21.12,129.832 -14.08,30.254 -42.49,45.379 -85.25,45.379 -17.71,0 -35.46,-2.618 -53.2,-7.817 -17.71,-5.207 -33.63,-15.379 -47.71,-30.511 -14.09,-15.11 -25.3,-36.231 -33.63,-63.364 -8.35,-27.105 -12.53,-62.578 -12.53,-106.375 l 0,-423.984 c -37.55,-6.262 -74.55,-9.371 -111.07,-9.371 -36.51,0 -73.52,3.109 -111.07,9.371 l 0,808.848 z M 8339.8,412.371 c 58.41,0 100.39,21.629 125.93,64.93 25.56,43.269 38.34,105.597 38.34,186.945 0,81.359 -12.78,143.672 -38.34,186.953 -25.54,43.301 -67.52,64.938 -125.93,64.938 -57.36,0 -98.82,-21.637 -124.37,-64.938 -25.57,-43.281 -38.35,-105.594 -38.35,-186.953 0,-81.348 12.78,-143.676 38.35,-186.945 25.55,-43.301 67.01,-64.93 124.37,-64.93 z m 0,-168.973 c -65.71,0 -122.82,10.704 -171.31,32.082 -48.5,21.372 -88.66,51.102 -120.47,89.18 -31.81,38.07 -55.8,82.649 -71.95,133.762 -16.18,51.109 -24.26,106.367 -24.26,165.824 0,59.453 8.08,115.262 24.26,167.402 16.15,52.145 40.14,97.258 71.95,135.321 31.81,38.081 71.97,68.041 120.47,89.971 48.49,21.89 105.6,32.85 171.31,32.85 65.71,0 123.06,-10.96 172.09,-32.85 49.01,-21.93 89.68,-51.89 122.04,-89.971 32.33,-38.063 56.31,-83.176 71.97,-135.321 15.64,-52.14 23.45,-107.949 23.45,-167.402 0,-59.457 -7.81,-114.715 -23.45,-165.824 -15.66,-51.113 -39.64,-95.692 -71.97,-133.762 -32.36,-38.078 -73.03,-67.808 -122.04,-89.18 -49.03,-21.378 -106.38,-32.082 -172.09,-32.082 z m 674.77,370.782 c -58.42,16.699 -104.05,41.468 -136.89,74.32 -32.86,32.844 -49.29,82.141 -49.29,147.855 0,79.266 28.43,141.301 85.28,186.155 56.83,44.85 134.29,67.28 232.32,67.28 40.68,0 80.82,-3.65 120.46,-10.96 39.64,-7.3 79.79,-18.24 120.46,-32.85 -2.09,-27.1 -7.3,-55.265 -15.66,-84.48 -8.32,-29.195 -18.23,-54.746 -29.7,-76.676 -25.04,10.446 -52.67,19.571 -82.93,27.403 -30.23,7.804 -62.05,11.722 -95.42,11.722 -35.47,0 -63.09,-5.472 -82.93,-16.426 -19.81,-10.957 -29.72,-28.425 -29.72,-52.394 0,-22.953 7.04,-39.125 21.12,-48.516 14.08,-9.379 34.17,-18.265 60.23,-26.593 l 89.18,-26.614 c 29.21,-8.328 55.54,-18.492 79.01,-30.496 23.46,-11.996 43.55,-26.859 60.23,-44.578 16.69,-17.727 29.72,-39.641 39.1,-65.711 9.4,-26.082 14.1,-57.883 14.1,-95.422 0,-38.609 -8.09,-74.59 -24.26,-107.961 -16.16,-33.379 -39.64,-62.316 -70.4,-86.816 -30.77,-24.531 -68.06,-43.82 -111.87,-57.891 -43.79,-14.09 -93.34,-21.133 -148.62,-21.133 -25.04,0 -47.96,0.793 -68.82,2.352 -20.87,1.582 -40.94,4.18 -60.24,7.82 -19.29,3.66 -38.33,8.078 -57.1,13.301 -18.78,5.207 -39.12,11.988 -61.02,20.34 2.1,28.168 7.05,56.59 14.86,85.258 7.82,28.672 18,56.59 30.51,83.711 34.42,-13.571 67.02,-23.731 97.79,-30.508 30.77,-6.793 62.84,-10.192 96.2,-10.192 14.62,0 30.52,1.321 47.71,3.93 17.22,2.61 33.13,7.301 47.73,14.078 14.61,6.782 26.87,15.653 36.77,26.594 9.91,10.949 14.84,25.289 14.84,43.039 0,25.008 -7.55,43.008 -22.67,53.961 -15.13,10.938 -36.25,20.617 -63.35,28.949 l -97.01,28.149 z m 541.12,287.871 -101.67,0 -7.85,31.293 292.56,373.916 35.98,0 0,-236.24 189.31,0 c 3.13,-15.65 5.21,-29.73 6.27,-42.24 1.03,-12.53 1.56,-25.55 1.56,-39.124 0,-14.593 -0.53,-28.672 -1.56,-42.234 -1.06,-13.567 -3.14,-28.688 -6.27,-45.371 l -189.31,0 0,-317.602 c 0,-32.32 2.63,-58.39 7.83,-78.219 5.23,-19.789 12.78,-35.449 22.68,-46.929 9.93,-11.469 22.18,-19.289 36.77,-23.461 14.59,-4.192 31.83,-6.27 51.63,-6.27 15.65,0 31.02,1.309 46.16,3.918 15.11,2.602 28.41,4.953 39.88,7.032 7.31,-19.79 12.53,-40.399 15.64,-61.79 3.15,-21.378 4.7,-40.429 4.7,-57.109 0,-11.473 -0.26,-21.109 -0.78,-28.941 -0.52,-7.809 -1.29,-15.399 -2.35,-22.68 -47.96,-11.488 -97.5,-17.199 -148.61,-17.199 -94.92,0 -167.41,22.148 -217.48,66.461 -50.05,44.34 -75.09,116.578 -75.09,216.699 l 0,366.09 z M 2180.68,1318.68 c 45.21,6.28 88.7,9.45 130.5,9.45 44.07,0 87.58,-3.17 130.51,-9.45 l 279.65,-580.43 288.12,580.43 c 35.03,6.28 73.99,9.45 116.94,9.45 42.94,0 84.16,-3.17 123.72,-9.45 l 57.62,-1065.84 c -42.92,-6.301 -83.6,-9.442 -122.01,-9.442 -38.44,0 -76.27,3.141 -113.55,9.442 l -30.52,770.62 -247.45,-532.62 c -15.83,-2.102 -32.2,-3.961 -49.16,-5.508 -16.95,-1.582 -33.88,-2.363 -50.84,-2.363 -14.7,0 -29.37,0.519 -44.05,1.57 -14.69,1.051 -29.94,3.16 -45.77,6.301 l -230.49,543.65 -23.73,-781.65 c -36.15,-6.301 -71.18,-9.442 -105.09,-9.442 -36.16,0 -73.46,3.141 -111.85,9.442 l 47.45,1065.84"/><path id="path24" style="fill:#211f1e;fill-opacity:1;fill-rule:evenodd;stroke:none" d="m 1304.1,1486.03 8.65,-174.35 C 1454.09,1155.53 1509.88,934.391 1439.52,726.555 1334.49,416.301 988.168,253.211 665.98,362.281 343.797,471.34 167.754,811.273 272.781,1121.52 c 70.594,208.53 250.196,350.58 458.207,388.19 L 843.375,1642.5 C 492.742,1651.99 161.941,1434.35 43.582,1084.72 -101.84,655.141 128.516,189.012 558.098,43.582 987.68,-101.84 1453.81,128.52 1599.24,558.102 1717.4,907.168 1587.45,1280.37 1304.1,1486.03"/><path id="path26" style="fill:#211f1e;fill-opacity:1;fill-rule:evenodd;stroke:none" d="m 1102.73,971.586 -5.95,243.724 -4.77,140.25 -3.23,121.51 c 0,0 0.67,58.58 -1.37,72.35 -0.43,2.9 -1.34,5.26 -2.43,7.31 l -0.41,0.87 -0.47,0.75 c -2.24,3.86 -5.78,7.01 -10.35,8.56 -4.67,1.58 -9.51,1.19 -13.71,-0.62 l -0.26,-0.11 -1.45,-0.74 c -1.99,-0.97 -4.02,-2.22 -6,-4.14 -9.99,-9.7 -45.04,-56.65 -45.04,-56.65 l -76.372,-94.55 -88.984,-108.51 -152.778,-190 c 0,0 -70.109,-87.5 -54.617,-195.203 15.492,-107.703 95.563,-160.172 157.684,-181.199 62.117,-21.032 157.593,-27.989 235.327,48.156 77.73,76.144 75.18,188.242 75.18,188.242"/><path id="path28" style="fill:#bdbbbc;fill-opacity:1;fill-rule:nonzero;stroke:none" d="m 10250,254.281 c -82.9,0 -150,67.117 -150,149.989 0,82.851 67.1,149.968 150,149.968 82.8,0 150,-67.117 150,-149.968 0,-82.872 -67.2,-149.989 -150,-149.989 m 0,273.18 c -68,0 -123.2,-55.242 -123.2,-123.191 0,-67.961 55.2,-123.211 123.2,-123.211 67.9,0 123.2,55.25 123.2,123.211 0,67.949 -55.3,123.191 -123.2,123.191 m -25.8,-67.629 0,-47.031 27.1,0 c 14.8,0 23.1,8.699 23.1,23.769 0,9.711 -3.3,16.571 -10,20.25 -3.4,1.84 -8.1,3.012 -19.6,3.012 l -20.6,0 m 88.6,-141.273 -25.5,0 c -2,0 -3.8,1.011 -4.7,2.839 l -32.5,61.102 -25.9,0 0,-58.59 c 0,-3 -2.3,-5.351 -5.4,-5.351 l -22.4,0 c -3,0 -5.3,2.351 -5.3,5.351 l 0,160.699 c 0,3.02 2.3,5.36 5.3,5.36 l 49.2,0 c 17.6,0 25.3,-1.52 31.8,-4.028 18.9,-7.031 30.7,-25.601 30.7,-48.359 0,-20.602 -10.2,-38 -26.5,-46.043 0.5,-0.84 1,-1.668 1.5,-2.668 l 34.3,-62.449 c 0.9,-1.672 0.9,-3.684 -0.1,-5.184 -0.9,-1.668 -2.7,-2.679 -4.5,-2.679"/></g></g></g></g></svg> \ No newline at end of file diff --git a/images/mediawiki_logo.svg b/images/mediawiki_logo.svg new file mode 100644 index 00000000..294a02af --- /dev/null +++ b/images/mediawiki_logo.svg @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'> +<svg xmlns="http://www.w3.org/2000/svg" width="685.5" height="647.42" viewBox="0 0 744.09 1052.4"> + <path fill="#069" d="m-135.55 952.25h-22.81v-152.51h35.171l47.419 117.94 47.419-117.94h34.722v152.51h-22.249l1.573-132.4-53.15 132.4h-16.855l-52.925-132.4 1.686 132.4zm265.97-68.609c-2.77-9.5-7.57-16.8-14.383-22.049s-15-7.8-24.496-7.804c-9.74 0-18.2 2.67-25.339 8.013s-12.1 12.6-14.776 21.84zm-79.668 18.645c1.87 9.64 6.54 17.4 13.99 23.411s16.3 8.96 26.575 8.956c7.34 0 14-1.64 20.058-4.923 6.03-3.28 10.8-7.93 14.439-13.931h25.058c-5.69 12.8-13.7 22.6-23.878 29.329-10.2 6.77-22.1 10.2-35.677 10.16-9.14 0-17.5-1.5-25.058-4.504s-14.4-7.51-20.563-13.512c-5.77-5.66-10.3-12.2-13.54-19.745-3.26-7.51-4.89-15.2-4.888-22.992 0-8.1 1.48-15.7 4.439-22.73s7.32-13.5 13.091-19.274c6.14-6.28 13.1-11 20.788-14.193s16.1-4.77 25.283-4.766c10.9 0 21 2.36 30.283 7.07 9.33 4.71 17 11.3 23.091 19.745 3.6 5.24 6.26 11 7.978 17.231s2.58 13.4 2.584 21.421v3.247h-104.05zm140.01-8.38c0 11.7 4.14 21.4 12.417 29.329s18.4 11.8 30.395 11.836c10.9 0 20.6-3.96 28.935-11.889s12.5-17.2 12.529-27.81c0-11.3-4.14-21-12.417-29.067s-18.1-12.1-29.496-12.098c-11.7 0-21.7 3.84-29.946 11.522-8.28 7.68-12.4 17.1-12.417 28.177zm83.152 58.344v-14.141c-5.69 5.52-12 9.69-19.046 12.517s-14.5 4.24-22.417 4.242c-18.6 0-34-5.78-46.295-17.336-12.3-11.6-18.4-26-18.428-43.418 0-8.1 1.54-15.8 4.607-23.044s7.45-13.7 13.147-19.169c6.22-6.08 13-10.6 20.395-13.46s15.8-4.35 25.226-4.347c8.39 0 16.2 1.4 23.316 4.19s13.7 7.02 19.72 12.674v-51.221h22.249v152.51h-22.473zm70.454-128.73h-22.024v-23.778h22.024zm-22.024 128.73v-115.22h22.024v115.22zm65.285-58.344c0 11.7 4.14 21.4 12.417 29.329s18.4 11.8 30.395 11.836c10.9 0 20.6-3.96 28.935-11.889s12.5-17.2 12.529-27.81c0-11.3-4.14-21-12.417-29.067s-18.1-12.1-29.496-12.098c-11.7 0-21.7 3.84-29.946 11.522-8.28 7.68-12.4 17.1-12.417 28.177zm83.152 58.344v-14.141c-5.69 5.52-12 9.69-19.046 12.517s-14.5 4.24-22.417 4.242c-18.6 0-34-5.78-46.295-17.336-12.3-11.6-18.4-26-18.428-43.418 0-8.1 1.54-15.8 4.607-23.044s7.45-13.7 13.147-19.169c6.22-6.08 13-10.6 20.395-13.46s15.8-4.35 25.226-4.347c8.46 0 16.3 1.4 23.372 4.19 7.12 2.79 13.6 7.02 19.44 12.674v-13.931h22.474v115.22h-22.474zm31.8-152.51h24.159l35.508 117.53 31.912-117.53h17.754l31.8 117.53 35.396-117.53h24.159l-49.442 152.51h-21.462l-29.44-113.86-29.665 113.86h-21.125zm232.82 23.778h-22.024v-23.778h22.024zm-22.024 128.73v-115.22h22.024v115.22zm48.543 0v-152.51h22.024v90.711l44.048-53.421h25.957l-45.396 54.678 53.712 60.544h-28.541l-49.779-58.554v58.554h-22.024zm131.69-128.73h-22.024v-23.778h22.024zm-22.024 128.73v-115.22h22.024v115.22z"/> + <path d="m-152.66 1026.8h6.423c4.46 0 7.64-.714 9.543-2.141 1.91-1.43 2.86-3.76 2.861-7.005 0-2.4-.831-4.09-2.492-5.087-1.66-.993-4.61-1.49-8.841-1.49-1.03 0-1.84.01-2.418.017a52.529 52.529 0 0 0 -1.569.051zm15.283-43.573c4.43 0 7.92 1.06 10.466 3.186 2.55 2.12 3.82 5.01 3.821 8.667 0 2.7-.788 5.06-2.363 7.091s-3.94 3.73-7.088 5.104c2.26 1.05 4 2.53 5.205 4.436s1.81 4.1 1.809 6.594c0 2.28-.56 4.45-1.68 6.491-1.12 2.04-2.7 3.78-4.744 5.224-1.58 1.12-3.4 1.91-5.482 2.381s-5.16.702-9.247.702h-15.209l10.447-49.876zm-10.447 21.101c.665.069 1.32.12 1.975.154a36.534 36.534 0 0 0 1.901.051c4.21 0 7.39-.719 9.543-2.158s3.23-3.56 3.23-6.372c0-2.24-.843-3.85-2.529-4.847s-4.47-1.49-8.361-1.49c-.738 0-1.3.006-1.698.017s-.763.04-1.108.086l-2.953 14.558zm61.539 6.098c-.615-3.17-1.91-5.56-3.876-7.142s-4.62-2.38-7.937-2.381c-3.18 0-5.91.811-8.195 2.432-2.29 1.62-4.04 3.98-5.242 7.091zm6.793 10.105c-1.92 4.5-4.65 7.88-8.195 10.157s-7.88 3.41-12.994 3.408c-5.76 0-10.5-1.69-14.102-5.07s-5.46-7.73-5.464-13.051c0-3.22.677-6.26 2.03-9.112 1.35-2.86 3.3-5.33 5.833-7.433 1.99-1.64 4.24-2.88 6.737-3.717s5.16-1.25 7.992-1.25c5.91 0 10.6 1.73 14.12 5.19s5.26 8.14 5.261 14.028c0 .548-.049 1.42-.148 2.603v.206h-34.11c.197 3.4 1.35 6.11 3.47 8.118 2.12 2.01 4.84 3.02 8.158 3.015 3 0 5.55-.577 7.642-1.73s3.86-2.94 5.316-5.361h8.454zm46.292-.891c-1.58 4.61-4.23 8.19-7.974 10.722s-8.23 3.8-13.474 3.802c-5.73 0-10.4-1.71-14.028-5.138-3.62-3.43-5.43-7.82-5.427-13.188 0-3.24.683-6.3 2.049-9.163s3.3-5.35 5.814-7.451c1.99-1.64 4.24-2.89 6.737-3.734s5.17-1.27 8.029-1.267c4.97 0 9.17 1.33 12.588 3.991s5.62 6.3 6.608 10.91h-7.642c-.911-2.74-2.38-4.83-4.393-6.269s-4.48-2.16-7.383-2.158c-4.18 0-7.68 1.42-10.484 4.248-2.81 2.83-4.21 6.37-4.208 10.619 0 3.61 1.11 6.52 3.341 8.735s5.15 3.32 8.768 3.323c2.88 0 5.41-.668 7.586-2.004s4-3.33 5.482-5.978zm39.426-6.817c0-3.56-1.11-6.44-3.341-8.632s-5.14-3.29-8.731-3.289c-4.18 0-7.7 1.43-10.558 4.299s-4.28 6.39-4.282 10.568c0 3.54 1.15 6.39 3.452 8.547s5.31 3.24 9.026 3.237c4.06 0 7.48-1.41 10.263-4.231 2.78-2.82 4.17-6.32 4.172-10.499zm10.669-17.402-7.937 37.681h-7.347l.849-3.802c-1.5 1.51-3.27 2.63-5.297 3.374s-4.32 1.11-6.885 1.113c-5.32 0-9.72-1.7-13.216-5.087s-5.24-7.66-5.242-12.794c0-2.95.566-5.76 1.698-8.427s2.77-5.05 4.91-7.125c1.97-1.92 4.28-3.39 6.94-4.419s5.45-1.54 8.38-1.542c3.27 0 6.12.548 8.546 1.644s4.45 2.74 6.073 4.933l1.108-5.549zm28.499 37.681.812-3.563c-1.94 1.42-3.88 2.48-5.814 3.186s-3.84 1.06-5.74 1.062c-4.18 0-7.57-1.14-10.17-3.426s-3.9-5.25-3.895-8.906c0-1.35.086-2.8.258-4.35a58.324 58.324 0 0 1 .701-4.625l3.655-17.059h7.236l-4.135 19.937c-.246 1.12-.425 2.08-.535 2.877-.111.799-.166 1.47-.166 2.021 0 2.22.701 3.94 2.104 5.173 1.4 1.23 3.35 1.85 5.833 1.85 3.59 0 6.56-1.11 8.897-3.323s3.94-5.41 4.799-9.592l3.95-18.943h7.309l-8.158 37.681h-6.94zm15.726-12.4h7.272c.098 2.24.665 3.94 1.698 5.104 1.03 1.16 2.51 1.75 4.43 1.747s3.43-.457 4.522-1.37c1.1-.914 1.64-2.16 1.643-3.734 0-2.08-2.18-4.26-6.534-6.543-.96-.502-1.7-.902-2.215-1.199-2.22-1.16-3.86-2.54-4.947-4.128s-1.62-3.41-1.624-5.464c0-3.22 1.18-5.83 3.544-7.827s5.46-3 9.303-2.997c3.74 0 6.64.988 8.712 2.963s3.11 4.76 3.138 8.341h-7.236v-.206c0-1.74-.406-3.02-1.218-3.854s-2.04-1.25-3.692-1.25c-1.43 0-2.59.371-3.489 1.113-.898.742-1.35 1.7-1.347 2.86 0 1.94 1.81 3.88 5.427 5.823l.148.069c4.31 2.33 7.03 4.26 8.177 5.806s1.72 3.44 1.717 5.704c0 3.52-1.28 6.45-3.839 8.787-2.56 2.34-5.78 3.51-9.672 3.511-4.48 0-7.92-1.08-10.318-3.254-2.4-2.17-3.6-5.28-3.599-9.318v-.685zm66.559-10.277c-.615-3.17-1.91-5.56-3.876-7.142s-4.62-2.38-7.937-2.381c-3.18 0-5.91.811-8.195 2.432-2.29 1.62-4.04 3.98-5.242 7.091zm6.793 10.105c-1.92 4.5-4.65 7.88-8.195 10.157s-7.88 3.41-12.994 3.408c-5.76 0-10.5-1.69-14.102-5.07s-5.46-7.73-5.464-13.051c0-3.22.677-6.26 2.03-9.112 1.35-2.86 3.3-5.33 5.833-7.433 1.99-1.64 4.24-2.88 6.737-3.717s5.16-1.25 7.992-1.25c5.91 0 10.6 1.73 14.12 5.19s5.26 8.14 5.261 14.028c0 .548-.049 1.42-.148 2.603v.206h-34.11c.197 3.4 1.35 6.11 3.47 8.118 2.12 2.01 4.84 3.02 8.158 3.015 3 0 5.55-.577 7.642-1.73s3.86-2.94 5.316-5.361h8.454zm33.778-25.109h7.605l-7.937 37.681h-7.642zm8.454-4.213h-7.642l1.661-7.982h7.642zm36.694 21.615c0-3.56-1.11-6.44-3.341-8.632s-5.14-3.29-8.731-3.289c-4.18 0-7.7 1.43-10.558 4.299s-4.28 6.39-4.282 10.568c0 3.54 1.15 6.39 3.452 8.547s5.31 3.24 9.026 3.237c4.06 0 7.48-1.41 10.263-4.231 2.78-2.82 4.17-6.32 4.172-10.499zm13.253-29.597-10.521 49.876h-7.346l.849-3.802c-1.5 1.51-3.27 2.63-5.297 3.374s-4.32 1.11-6.885 1.113c-5.32 0-9.72-1.7-13.216-5.087s-5.24-7.66-5.242-12.794c0-2.95.566-5.76 1.698-8.427s2.77-5.05 4.91-7.125c1.97-1.92 4.28-3.39 6.94-4.419s5.45-1.54 8.38-1.542c3.27 0 6.12.548 8.546 1.644s4.45 2.74 6.073 4.933l3.765-17.744zm33.778 27.199c-.615-3.17-1.91-5.56-3.876-7.142s-4.62-2.38-7.937-2.381c-3.18 0-5.91.811-8.195 2.432-2.29 1.62-4.04 3.98-5.242 7.091zm6.793 10.105c-1.92 4.5-4.65 7.88-8.195 10.157s-7.88 3.41-12.994 3.408c-5.76 0-10.5-1.69-14.102-5.07s-5.46-7.73-5.464-13.051c0-3.22.677-6.26 2.03-9.112 1.35-2.86 3.3-5.33 5.833-7.433 1.99-1.64 4.24-2.88 6.737-3.717s5.16-1.25 7.992-1.25c5.91 0 10.6 1.73 14.12 5.19s5.26 8.14 5.261 14.028c0 .548-.049 1.42-.148 2.603v.206h-34.11c.197 3.4 1.35 6.11 3.47 8.118 2.12 2.01 4.84 3.02 8.158 3.015 3 0 5.55-.577 7.642-1.73s3.86-2.94 5.316-5.361h8.454zm39.943-7.707c0-3.56-1.11-6.44-3.341-8.632s-5.14-3.29-8.731-3.289c-4.18 0-7.7 1.43-10.558 4.299s-4.28 6.39-4.282 10.568c0 3.54 1.15 6.39 3.452 8.547s5.31 3.24 9.026 3.237c4.06 0 7.48-1.41 10.263-4.231 2.78-2.82 4.17-6.32 4.172-10.499zm10.669-17.402-7.937 37.681h-7.346l.849-3.802c-1.5 1.51-3.27 2.63-5.297 3.374s-4.32 1.11-6.885 1.113c-5.32 0-9.72-1.7-13.216-5.087s-5.24-7.66-5.242-12.794c0-2.95.566-5.76 1.698-8.427s2.77-5.05 4.91-7.125c1.97-1.92 4.28-3.39 6.94-4.419s5.45-1.54 8.38-1.542c3.27 0 6.12.548 8.546 1.644s4.45 2.74 6.073 4.933l1.108-5.549h7.42zm.812 25.28h7.272c.098 2.24.665 3.94 1.698 5.104 1.03 1.16 2.51 1.75 4.43 1.747s3.43-.457 4.522-1.37c1.1-.914 1.64-2.16 1.643-3.734 0-2.08-2.18-4.26-6.534-6.543-.96-.502-1.7-.902-2.215-1.199-2.22-1.16-3.86-2.54-4.947-4.128s-1.62-3.41-1.624-5.464c0-3.22 1.18-5.83 3.544-7.827s5.46-3 9.303-2.997c3.74 0 6.64.988 8.712 2.963s3.11 4.76 3.138 8.341h-7.236v-.206c0-1.74-.406-3.02-1.218-3.854s-2.04-1.25-3.692-1.25c-1.43 0-2.59.371-3.489 1.113-.898.742-1.35 1.7-1.347 2.86 0 1.94 1.81 3.88 5.427 5.823l.148.069c4.31 2.33 7.03 4.26 8.177 5.806s1.72 3.44 1.717 5.704c0 3.52-1.28 6.45-3.839 8.787-2.56 2.34-5.78 3.51-9.672 3.511-4.48 0-7.92-1.08-10.318-3.254s-3.6-5.28-3.599-9.318v-.685zm80.255-16.374-13.474 28.775h-6.94l-4.615-37.681h7.014l2.953 27.576 13.29-27.576h7.199l1.809 27.576 14.213-27.576h7.42l-20.267 37.681h-6.866l-1.735-28.775zm63.311 8.495c0-3.56-1.11-6.44-3.341-8.632s-5.14-3.29-8.731-3.289c-4.18 0-7.7 1.43-10.558 4.299s-4.28 6.39-4.282 10.568c0 3.54 1.15 6.39 3.452 8.547s5.31 3.24 9.026 3.237c4.06 0 7.48-1.41 10.263-4.231 2.78-2.82 4.17-6.32 4.171-10.499zm10.669-17.402-7.937 37.681h-7.346l.849-3.802c-1.5 1.51-3.27 2.63-5.297 3.374s-4.32 1.11-6.885 1.113c-5.32 0-9.72-1.7-13.216-5.087s-5.24-7.66-5.242-12.794c0-2.95.566-5.76 1.698-8.427s2.77-5.05 4.91-7.125c1.97-1.92 4.28-3.39 6.94-4.419s5.45-1.54 8.38-1.542c3.27 0 6.12.548 8.546 1.644s4.45 2.74 6.073 4.933l1.108-5.549h7.42zm15.948 0-.923 3.597c1.94-1.44 3.88-2.51 5.814-3.22s3.84-1.06 5.74-1.062c4.18 0 7.57 1.14 10.17 3.426s3.9 5.25 3.895 8.907c0 1.35-.08 2.78-.24 4.299s-.4 3.06-.72 4.607l-3.581 17.128h-7.236l4.135-19.937c.221-.936.381-1.82.48-2.655.098-.834.148-1.58.148-2.244 0-2.22-.689-3.94-2.067-5.173-1.38-1.23-3.31-1.85-5.796-1.85-3.57 0-6.53 1.11-8.878 3.323s-3.96 5.41-4.818 9.592l-3.987 18.943h-7.42l8.232-37.681h7.051zm30.456 37.681 6.682-31.344h-6.829l1.366-6.337h6.719l2.51-12.195h7.494l-2.289 12.195h6.608l-1.366 6.337h-6.571l-6.829 31.344zm43.561 0 6.682-31.344h-6.829l1.366-6.337h6.719l2.51-12.195h7.494l-2.289 12.195h6.608l-1.366 6.337h-6.571l-6.829 31.344zm43.487-32.132c-4.14 0-7.57 1.41-10.318 4.231-2.74 2.82-4.12 6.41-4.116 10.773 0 3.38 1.13 6.16 3.396 8.324 2.26 2.17 5.17 3.25 8.712 3.254 4.16 0 7.67-1.44 10.521-4.316s4.28-6.42 4.282-10.619c0-3.49-1.13-6.31-3.396-8.444s-5.24-3.2-8.934-3.203h-.148zm-22.15 15.004c0-3.24.677-6.29 2.03-9.129s3.32-5.34 5.907-7.485c1.92-1.62 4.11-2.84 6.571-3.665s5.11-1.23 7.937-1.233c5.76 0 10.5 1.7 14.157 5.087s5.52 7.72 5.519 13c0 2.95-.578 5.77-1.735 8.461s-2.79 5.07-4.91 7.125c-2.02 1.92-4.39 3.39-7.125 4.419s-5.68 1.54-8.86 1.542c-5.68 0-10.4-1.7-14.01-5.104s-5.48-7.74-5.482-13.017zm76.563-.48c0 3.58 1.12 6.48 3.359 8.684 2.24 2.2 5.16 3.31 8.749 3.306 4.16 0 7.68-1.44 10.558-4.333 2.88-2.89 4.32-6.42 4.319-10.602 0-3.52-1.16-6.36-3.47-8.53s-5.34-3.25-9.081-3.254c-4.04 0-7.45 1.42-10.244 4.248s-4.19 6.33-4.19 10.482zm-10.595 17.607 10.521-49.876h7.088l-3.175 15.86c1.53-1.53 3.3-2.67 5.316-3.426s4.28-1.13 6.792-1.13c5.29 0 9.69 1.7 13.197 5.104s5.26 7.68 5.261 12.846c0 2.97-.566 5.78-1.698 8.444-1.13 2.66-2.76 5.04-4.873 7.142-2.02 1.92-4.34 3.39-6.959 4.419s-5.4 1.54-8.325 1.542c-3.27 0-6.14-.554-8.601-1.661s-4.48-2.76-6.054-4.95l-1.144 5.686zm83.393-22.677c-.615-3.17-1.91-5.56-3.876-7.142s-4.62-2.38-7.937-2.381c-3.18 0-5.91.811-8.195 2.432-2.29 1.62-4.04 3.98-5.242 7.091zm6.793 10.105c-1.92 4.5-4.65 7.88-8.195 10.157s-7.88 3.41-12.994 3.408c-5.76 0-10.5-1.69-14.102-5.07s-5.46-7.73-5.464-13.051c0-3.22.677-6.26 2.03-9.112 1.35-2.86 3.3-5.33 5.833-7.433 1.99-1.64 4.24-2.88 6.737-3.717s5.16-1.25 7.992-1.25c5.91 0 10.6 1.73 14.12 5.19s5.26 8.14 5.261 14.028c0 .548-.049 1.42-.148 2.603v.206h-34.11c.197 3.4 1.35 6.11 3.47 8.118 2.12 2.01 4.84 3.02 8.158 3.015 3 0 5.55-.577 7.642-1.73s3.86-2.94 5.316-5.361h8.454zm32.634-18.772h-6.423l1.292-6.337h6.423c.714-4.64 2.22-7.92 4.522-9.866s5.85-2.91 10.65-2.912c.738 0 1.3.007 1.698.017.394.011.763.04 1.108.086l-1.366 6.646h-1.144c-2.46 0-4.31.474-5.537 1.422-1.23.948-1.97 2.48-2.215 4.607h6.645l-1.366 6.337h-6.645l-6.497 31.207h-7.715zm13.696 31.344 7.568-37.681h6.571l-.812 3.597c1.82-1.53 3.79-2.66 5.906-3.391 2.12-.731 4.46-1.1 7.014-1.096.492 0 .868.006 1.126.017s.486.029.683.051l-1.514 6.577c-4.85.137-8.36 1.11-10.521 2.929s-3.88 5.7-5.131 11.664l-3.692 17.333h-7.199zm61.612-22.677c-.615-3.17-1.91-5.56-3.876-7.142s-4.62-2.38-7.937-2.381c-3.18 0-5.91.811-8.195 2.432-2.29 1.62-4.04 3.98-5.242 7.091zm6.793 10.105c-1.92 4.5-4.65 7.88-8.195 10.157-3.54 2.27-7.88 3.41-12.994 3.408-5.76 0-10.5-1.69-14.102-5.07s-5.46-7.73-5.464-13.051c0-3.22.677-6.26 2.03-9.112 1.35-2.86 3.3-5.33 5.833-7.433 1.99-1.64 4.24-2.88 6.737-3.717s5.16-1.25 7.992-1.25c5.91 0 10.6 1.73 14.12 5.19s5.26 8.14 5.26 14.028c0 .548-.049 1.42-.148 2.603v.206h-34.11c.197 3.4 1.35 6.11 3.47 8.118 2.12 2.01 4.84 3.02 8.158 3.015 3 0 5.55-.577 7.642-1.73s3.86-2.94 5.316-5.361h8.454zm38.983-10.105c-.615-3.17-1.91-5.56-3.876-7.142s-4.62-2.38-7.937-2.381c-3.18 0-5.91.811-8.195 2.432-2.29 1.62-4.04 3.98-5.242 7.091zm6.793 10.105c-1.92 4.5-4.65 7.88-8.195 10.157-3.54 2.27-7.88 3.41-12.994 3.408-5.76 0-10.5-1.69-14.102-5.07s-5.46-7.73-5.464-13.051c0-3.22.677-6.26 2.03-9.112 1.35-2.86 3.3-5.33 5.833-7.433 1.99-1.64 4.24-2.88 6.737-3.717s5.16-1.25 7.992-1.25c5.91 0 10.6 1.73 14.12 5.19s5.26 8.14 5.26 14.028c0 .548-.049 1.42-.148 2.603v.206h-34.11c.197 3.4 1.35 6.11 3.47 8.118 2.12 2.01 4.84 3.02 8.159 3.015 3 0 5.55-.577 7.642-1.73s3.86-2.94 5.316-5.361h8.454zm13.88 12.572h-7.272l1.735-8.358h7.272z"/> + <path fill="#02296b" d="m733.54 203.9v453.46h-112.21v-18.711h58.269l.147-416.05h-58.416v-18.693h112.21zm165.96 0v453.46h-112.21v-18.711h58.269l.147-416.05h-58.416v-18.693h112.21zm-892.921 0v453.46h112.21v-18.711h-58.269l-.147-416.05h58.416v-18.693h-112.21zm-165.959 0v453.46h112.21v-18.711h-58.269l-.147-416.05h58.416v-18.693h-112.21z"/> + <path fill="#f1ecd0" d="m430.45 833c-1.47-2.34-4.06-8.56-5.759-13.84-3.07-9.51-9.38-17.8-24.491-32.305-8.04-7.7-18.8-27.6-22.184-40.902-1.02-4.05-1.86-11.9-1.86-17.538.001-6.75-1.49-13.6-4.435-20.24-5.84-13.3-8.72-28.8-8.667-46.862.064-22.9-.162-29.2-1.078-30.125-2.25-2.25-3.46 3.29-4.693 21.411-1.5 22.1-7.69 51.5-17.087 81.184-3.45 10.9-7.27 24.7-8.489 30.716-4.65 22.9-28.1 57.4-41.126 60.679-4.03.999-6.14.39-9.177-2.652l-3.949-3.949-5.695 6.783c-3.95 4.7-6.64 6.42-8.763 5.606-3.99-1.53-4.1-23.3-.308-58.332 1.48-13.7 2.7-26.5 2.723-28.504.032-3.22-5.56 4.45-17.753 24.364-1.39 2.28-3.84 4.14-5.438 4.14-2.33 0-2.72-1.54-2-7.82.496-4.3 1.82-11.1 2.93-15.18s2.86-17.3 3.871-29.44 2.39-25.8 3.053-30.36l1.209-8.28-10.231 8.74c-5.63 4.81-11.2 8.74-12.283 8.74s-2.76 1.86-3.631 4.14-5.5 9.35-10.288 15.717c-12.2 16.3-26.1 40.1-29.701 50.982-3.58 10.9-9.1 19.3-12.68 19.32-4.46 0-6.5-6.86-7.554-25.326-.976-17.2-.687-19.1 7.107-45.974 4.47-15.4 7.65-28.1 7.076-28.04-1.9.036-24.4 16.3-33.638 24.314-4.99 4.33-10.7 10.9-12.602 14.659-3.88 7.47-14.1 16.2-18.968 16.206-12 0-6.39-44.7 9.82-78.609 5.09-10.7 9.26-19.8 9.259-20.351 0-.533-1.45.323-3.22 1.902s-8.39 4.96-14.708 7.511-13.9 6.36-16.844 8.454c-2.95 2.1-5.94 3.81-6.657 3.814-1.7 0-36.2 23.9-38.61 26.711-2.57 3.04-19.2 11.9-22.369 11.929-5.36 0-4.31-5.48 3.045-15.907 4.18-5.92 13-19.8 19.526-30.856 15.6-26.3 32.7-46.5 51.828-61.321 3.32-2.57 5.68-5.02 5.259-5.439s-5.63 1.28-11.575 3.777c-25.8 10.9-61.5 12.4-94.474 4.141-22.8-5.74-35-10.8-34.96-14.599 0-1.3 1.15-3.94 2.553-5.863 2.3-3.14 5.32-3.51 30.244-3.71 16.4-.13 28.7-1.01 30.106-2.167 1.33-1.07 5.31-2.55 8.856-3.294s7.27-1.99 8.28-2.774 3.5-1.78 5.52-2.215-2.94-1.39-11.04-2.123c-10.4-.949-20.3-.462-34.04 1.681-40.7 6.35-42.5 6.44-51.06 2.377-9.08-4.31-10.8-10.9-3.68-14.614 2.28-1.19 9.38-6.6 15.787-12.025 6.41-5.43 12.8-9.87 14.296-9.866s5.84-2.02 9.749-4.482 9.9-5.65 13.322-7.082c3.42-1.43 14.1-9.2 23.684-17.272 21.6-18.1 31.3-25 43.681-30.811 5.31-2.5 9.66-5.01 9.66-5.579s-10.7-.488-23.73.173c-19.2.971-25.5.638-32.711-1.736-10.8-3.54-27.2-4.28-41.433-1.87-11.9 2.02-25.7.722-26.747-2.515-1.22-3.68 6.54-6.37 21.29-7.393 8.49-.59 14.9-1.96 16.072-3.44 1.77-2.2 11-6.07 35.279-14.869 4.3-1.56 7.82-3.48 7.82-4.277s-3.55-2.34-7.884-3.434-12.8-4.63-18.86-7.856-19.8-9.37-30.682-13.655c-33.6-13.3-41.7-19.8-33.194-26.868 10.2-8.42 29.5-12.3 66.738-13.483 16-.498 23.9-1.65 32.2-4.693 6.05-2.22 15.5-4.57 20.999-5.224l9.997-1.192-6.654-5.06c-4.99-3.8-8.87-5.1-15.517-5.236-4.88-.097-15.1-1.55-22.663-3.22-11.8-2.6-13.9-3.64-14.389-7.192-.387-2.72.562-4.54 2.76-5.275 13.8-4.63 16.4-8.06 6.128-8.057-4.84 0-23.8-5.34-44.001-12.409-10-3.51-22.3-14.2-22.243-19.545.018-4.84 12.4-12.5 17.913-11.022 2.06.54 10.5-.4 18.8-2.089 8.28-1.69 16.1-2.66 17.409-2.164s8.48-.277 15.971-1.721 21.7-3.09 31.517-3.66c16.4-.945 20.1-.473 43.353 5.465 14 3.58 29.4 8.21 34.335 10.309 4.89 2.1 9.24 3.46 9.671 3.026 1.28-1.28-8.91-20.3-11.769-22.003-1.53-.887-2.4-3.6-2.067-6.44.507-4.35-.053-4.91-4.948-4.906-5.07 0-5.6-.605-6.44-7.432-1.34-10.8-23.2-37.6-30.574-37.648-3.58 0-4.39-.95-4.386-5.152 0-2.83.948-6.1 2.107-7.259 1.58-1.58 1.52-4.19-.236-10.475-4.49-16 3.86-17.8 24.55-5.231 6.2 3.77 16.9 8.74 23.779 11.059 21.6 7.26 61.9 28.8 74.145 39.514 3.53 3.1 6.83 5.22 7.337 4.714s-.795-7.17-2.891-14.81c-2.1-7.64-4.52-24.1-5.384-36.533-1.89-27.2.709-48 9.009-71.962 3.07-8.85 5.58-19.8 5.582-24.26s.871-10.5 1.937-13.257c1.06-2.8 2.23-12.3 2.585-21.125.357-8.82 1.77-18.4 3.148-21.246 3.41-7.11 9.24-6.95 11.005.305 1.92 7.89 20.3 52.7 23.847 58.046 1.63 2.48 5.5 9.53 8.59 15.665s6.9 12.2 8.449 13.49c2.41 2 3.25 1.32 5.738-4.636 4.24-10.2 12-37.6 11.981-42.424 0-2.44-1.94-5.45-4.675-7.24-9.25-6.06-10.1-15.4-1.447-15.422 6.8 0 11.1-3 12.414-8.692 4.24-18.1 10.1-20.3 16.352-6.093 4.94 11.2 7.2 10.3 12.317-4.539 5.9-17.1 15.3-24.8 17.546-14.256 2.45 11.7 6.78 27.6 9.341 34.327 1.51 3.95 3.46 16.8 4.328 28.52 1.47 19.9 6.51 40.5 11.02 44.985 1 1 2.79-.997 4.458-4.996 2.94-7.03 21.7-34.8 36.495-54.023 4.85-6.3 8.81-12.1 8.81-12.957s3.55-4.99 7.89-9.253c8.25-8.1 16.5-10.3 18.551-4.944.591 1.54.279 23.3-.693 48.3s-1.78 49.2-1.797 53.727l-.03 8.227 11.5-11.22c11.1-10.8 25.9-20.9 30.691-20.873 1.27 0 4.41-1.66 6.986-3.68s6.57-3.68 8.889-3.68 6.55-1.92 9.412-4.27c10.8-8.85 37.4-25.2 40.984-25.17 7.54 0 3.06 11.6-11.704 30.36-7.98 10.1-20.3 34.6-24.137 47.866-1.74 6.06-5.19 15-7.661 19.936-2.47 4.91-4.14 9.27-3.709 9.702.858.858 27.9-15.8 38.108-23.475 3.54-2.66 8.46-5.46 10.937-6.213 2.47-.754 5.78-2.96 7.36-4.891 2.81-3.45 6.2-5.68 28.825-18.902 9.79-5.72 11.1-7.16 10.37-11.134-1.14-5.99 3.58-7.84 9.733-3.815 3.94 2.58 5.38 2.68 9.579.662 2.72-1.31 6.12-4.47 7.549-7.028 2.32-4.14 2.2-5.54-1.118-12.778-3.54-7.72-3.69-12.9-.367-12.93.834 0 4.43 1.86 7.99 4.14 4.87 3.11 6.86 5.97 8.034 11.5l1.559 7.36 10.298-.601c5.66-.331 10.8.169 11.356 1.11s.088 4.28-1.098 7.422c-1.81 4.79-1.57 7.11 1.46 14.434 3.31 7.99 4.15 8.73 9.98 8.819 5.26.079 6.68.982 8.179 5.229 1.37 3.88 1.13 6.27-.988 9.753-4.46 7.35-25.5 34.9-37.568 49.239-6.1 7.23-15.2 18.5-20.24 24.985-5.03 6.51-12 14.6-15.592 18.068l-6.44 6.236 9.2-1.323c5.06-.728 19.9-1.16 32.877-.97 21 .314 25.3-.17 37.761-4.337 12.2-4.05 17.5-4.63 28.261-3.033 3.24.483.864 5.19-6.325 12.517-4.24 4.32-7.34 8.2-6.9 8.628s7.02-.34 14.605-1.705 16.5-2.52 19.78-2.578c5.1-.083 5.98.549 5.98 4.282 0 3.17-2.86 6.54-10.331 12.179-5.68 4.29-19.8 17.1-31.309 28.565s-26.6 24.4-33.369 28.936c-26 17.2-38.4 24.8-41.891 26-1.99.661-5.6 2.73-8.028 4.601l-4.409 3.4 15.546 4.95c14.4 4.6 17.2 4.89 39.368 4.07 13.1-.484 29.5-2.22 36.395-3.856 15.4-3.65 19.6-2.65 19.627 4.618 0 4.36-2.3 7.26-12.42 15.681-14.9 12.4-15 12.4-42.405 17.978-16.9 3.42-25 6.16-36.348 12.307-8.04 4.35-15.9 9.01-17.509 10.348-1.59 1.34-10.6 3.24-19.997 4.212s-17.6 2.29-18.274 2.93c-1.46 1.46 4.23 5.86 12.648 9.8 9.89 4.62 37.8 25.5 52.313 39.146 13.1 12.3 31.5 23.7 38.407 23.672 2.06 0 5.04 1.1 6.641 2.434s9.45 3.48 17.445 4.767 16.3 3.15 18.536 4.154 8.9 2.79 14.9 3.973c9.21 1.82 11 2.81 11.505 6.393.94 6.63-2.59 9.11-15.883 11.154-33 5.08-60.4 4.34-98.46-2.666l-7.023-1.29 8.212 13.89c10.8 18.3 25.3 36.2 35.394 43.761 10.3 7.71 11.9 12.3 6.094 17.032-3.71 3.02-6.2 3.38-16.501 2.429-6.67-.617-20.3-3.19-30.229-5.714s-18.4-4.27-18.821-3.872c-.396.396 3.04 3.31 7.634 6.468s10.6 8.72 13.389 12.349 10.3 11.7 16.795 17.889c11 10.6 24.7 27.1 38.598 46.893 4.21 5.96 5.88 10.2 5.52 14.074-.496 5.28-.929 5.54-10.181 6.076-7.64.44-12.9-.78-25.3-5.819-8.6-3.51-15.6-5.74-15.636-4.973s3.73 8.64 8.28 17.495 8.28 17.7 8.28 19.654c0 7.06-5.36 5.8-15.745-3.69-5.63-5.15-19.1-15.3-29.909-22.527-18.9-12.7-38.9-27.8-49.321-37.536-2.73-2.53-5.28-4.28-5.663-3.894-.387.387 3.07 11.7 7.683 25.186 4.61 13.5 9.67 29.5 11.247 35.524 3.12 12 9.91 26.5 16.494 35.223 2.3 3.04 5.96 10.8 8.144 17.333 3.92 11.7 3.92 11.9.435 16.56-5.43 7.31-14.1 7.37-21.565.144-3.29-3.18-11-9.25-17.034-13.474-27-18.8-42.6-33.2-61.001-56.458l-7.064-8.936-1.914 15.055c-2.47 19.5.458 36.3 10.562 60.603 9.59 23.1 9.58 32.7-.011 32.651-6.3 0-19.4-12.3-22.916-21.469-1.87-4.89-8.77-17.6-15.341-28.21s-14.4-23.7-17.291-28.98-5.95-9.66-6.691-9.66-1.46 12.2-1.604 27.14c-.161 17-1.49 34-3.575 45.54l-3.318 18.4-5.867.568c-4.5.436-6.49-.423-8.531-3.68zm231.06-681.89c3.87-3.36 4.16-8.35.662-11.26-2.05-1.7-3.7-.567-8.28 5.657-3.15 4.28-5.72 8.46-5.722 9.293 0 2.22 9.59-.435 13.34-3.69z"/> + <path fill="#e6dba1" d="m433.39 833.7c-1.24-.79-4.28-6.99-6.74-13.784-4.42-12.2-13.7-24.5-26.498-35.285-6.04-5.09-17.1-26.3-20.292-38.677-1.02-4.05-1.86-11.9-1.86-17.538.001-6.91-1.5-13.6-4.686-20.778-5.89-13.3-8.48-27.5-8.461-46.324.007-8.1.019-17.2.025-20.24.019-9.07-7.36-31.2-9.64-28.881-1.39 1.39-1.09 4.14 1.016 9.402 2.2 5.51 2.51 8.68 1.168 12.2-.995 2.62-1.81 10.6-1.809 17.636 0 15.7-6.68 48.7-15.628 77.042-3.67 11.6-7.88 26.9-9.364 33.9-5.21 24.6-27.1 57.7-40.482 61.062-4.16 1.04-5.8.37-9.048-3.698l-3.966-4.974-5.166 7.454c-2.84 4.1-6.42 7.45-7.948 7.454-2.41 0-2.63-3.84-1.629-28.98 1.07-27 5.34-64.8 7.753-68.672.58-.939.136-1.71-.987-1.707s-3.33 3.1-4.909 6.9-5.26 10.5-8.188 14.815-6.58 10.4-8.127 13.34-3.7 5.42-4.791 5.425c-2.12 0-1.78-3.63 2.696-28.52 1.46-8.1 3.51-24.2 4.565-35.88 1.05-11.6 2.48-22.6 3.165-24.38 2.27-5.86-2.65-3.41-13.865 6.9-6.05 5.57-11.8 10.1-12.778 10.12-.973 0-3.1 2.81-4.734 6.246s-5.68 9.44-8.991 13.34c-8.84 10.4-25.1 38.3-29.615 50.713-2.15 5.95-5.39 12.5-7.191 14.639-2.96 3.46-3.55 3.55-6.137.963-2.07-2.07-3.09-7.88-3.672-20.922-.77-17.2-.398-19.5 7.655-47.326 4.66-16.1 8.12-29.6 7.695-30.035s-3.63 1.16-7.134 3.506-10.8 7.25-16.271 10.896c-10.9 7.3-24.7 21.7-29.592 30.732-3.01 5.64-15 13.2-17.254 10.961-3.49-3.49-4.4-17-1.806-26.863 1.51-5.72 3.66-15.1 4.767-20.937s6.1-18.9 11.099-29.096 9.08-20.3 9.08-22.493c0-3.66-.399-3.55-5.98 1.674-3.29 3.08-10.5 7.45-16.1 9.708-11.4 4.64-23.2 11.2-35.537 19.777a50192 50192 0 0 0 -14.491 10.083c-3.35 2.33-8.16 6-10.691 8.155s-8.13 5.85-12.439 8.206c-11.1 6.09-13.4 2.91-5.356-7.584 3.42-4.48 8.1-11.9 10.416-16.423 14.1-27.7 40-59.8 66.162-81.817 3.49-2.94 5.51-5.62 4.486-5.959s-8.02 1.94-15.544 5.059c-16.4 6.82-48.3 11.7-66.278 10.19-22.8-1.96-62.5-14.1-62.378-19.054.119-5.66 3.84-6.52 30.615-7.053 21.2-.426 29.5-1.34 37.012-4.046 5.33-1.92 10.2-4.03 10.887-4.688s3.03-1.19 5.287-1.191 4.57-1.24 5.156-2.76c.851-2.22-.827-2.81-8.543-3.022-5.28-.144-12.5-.528-16.042-.852s-15.1.698-25.76 2.272c-38.4 5.69-42.9 5.99-49.245 3.345-7.93-3.3-9.66-7.96-4.332-11.725 2.26-1.59 9.22-7.25 15.486-12.559s12.6-9.7 14.157-9.74 6.09-2.09 10.133-4.549c4.05-2.46 9.84-5.62 12.88-7.02s12.5-8.26 20.942-15.231c23.2-19.1 38.4-29.6 52.197-35.972 14.3-6.64 16.1-9.96 4.6-8.209-21.2 3.21-46.6 3.47-56.617.567-12.8-3.71-29.6-4.25-41.067-1.329-10 2.56-25.8 1.08-24.649-2.314 1.02-3.05 7.92-4.59 21.475-4.798 8.77-.136 12.8-1.07 15.64-3.609 2.09-1.88 6.28-4.31 9.319-5.4 16.9-6.06 31.3-13 31.804-15.367.359-1.83-2.42-3.43-8.823-5.074-5.14-1.32-14.5-5.12-20.765-8.447s-19.2-9.04-28.634-12.694c-22.2-8.55-35.2-15.9-35.22-19.837-.003-4.65 17.2-12.2 33.118-14.476 7.59-1.1 23.7-2.27 35.88-2.614 17.7-.498 24.1-1.44 32.2-4.766 5.57-2.28 15.9-4.64 23-5.242l12.88-1.097-10.095-6.9c-7.53-5.15-12-6.9-17.48-6.901-7-.001-34.1-4.92-35.63-6.471-2.16-2.16 2.25-6.33 9.137-8.625 4.31-1.44 8.13-3.49 8.489-4.564.727-2.18-5.28-4.2-12.615-4.234-2.66-.014-7.82-1.27-11.474-2.799s-11-3.7-16.325-4.827c-16.6-3.53-34.5-14.9-34.526-21.955 0-4.39 10.1-9.86 17.342-9.355 2.96.208 11.5-.973 18.88-2.624 7.42-1.65 14.6-2.59 15.865-2.094s8.95-.238 17-1.639 22.2-3.01 31.394-3.568c15-.916 19.4-.355 42.543 5.472 14.2 3.57 29.7 8.16 34.45 10.208 14.1 6.03 14.7 5.26 7.513-9.027-3.53-7.01-7.27-13.3-8.303-13.908s-1.89-3.14-1.886-5.548c0-4.93-3.02-7.53-7.82-6.738-2.54.418-3.22-.794-3.22-5.744 0-4.54-1.65-8.04-5.98-12.667-3.29-3.52-8.89-10.5-12.439-15.462-4.73-6.64-7.86-9.23-11.688-9.669-4.68-.538-5.09-1.12-3.943-5.52 1.74-6.64 1.77-13 .116-19.835-1.05-4.35-.703-5.98 1.451-6.802 4.27-1.64 13.1 1.46 22.794 8.016 4.79 3.23 12.9 7.1 17.935 8.597 19 5.61 63.9 29.2 78.488 41.278 7.37 6.1 12.6 8.75 12.624 6.377 0-.379-1.28-4.31-2.848-8.74-4.86-13.8-6.62-23.8-8.139-46.691-1.72-26 1.01-48.6 8.289-68.825 2.59-7.18 5.14-17.4 5.652-22.718.517-5.31 1.74-13 2.71-17.015.974-4.05 2.07-14 2.438-22.08.732-16.2 3.28-24.8 7.288-24.84 1.54 0 3.12 2.75 3.859 6.709.692 3.69 2.34 8.45 3.667 10.58s5.54 12.1 9.356 22.067c6.63 17.4 16.2 36.1 26.35 51.428 4.16 6.3 4.91 6.73 6.918 3.986 2.67-3.66 12.9-35.6 14.681-45.771 1.13-6.55.686-7.62-5.596-13.376-3.76-3.44-6.49-7.27-6.075-8.512.414-1.24 3.96-2.78 7.886-3.417s7.55-2.3 8.057-3.687 2.2-6.25 3.756-10.8c3.94-11.5 8.04-11.7 12.169-.565 4.1 11.1 3.47 10.4 7.947 8.023 2.36-1.26 4.92-5.89 6.75-12.183 4.61-15.9 15.5-25.4 15.526-13.55 0 1.98 1.75 9.59 3.88 16.911 8.28 28.4 9 32 9.078 45.457.092 16.2 8.34 45.1 12.857 45.139 1.46 0 4.52-3.58 6.811-7.948 5.01-9.56 19.6-30.7 40.344-58.717 15-20.2 22-25.8 26.516-21.343 1.04 1.04.906 22.7-.336 55.538-1.12 29.6-1.51 54.4-.864 55.01s5.91-3.41 11.701-8.999c11.2-10.8 27.4-21.8 32.064-21.821 1.55 0 4.92-1.66 7.489-3.68s6.1-3.68 7.844-3.68 12.9-6.62 24.884-14.72c27.9-18.9 32.6-19.3 22.627-2.002-2.67 4.64-7.49 11.8-10.702 15.801-7.77 9.8-19.8 33.8-24.797 49.549-2.23 7.01-5.71 16-7.718 19.919s-3.4 8.38-3.089 9.864c.585 2.77 5.5-.006 38.118-21.565 7.5-4.95 14.7-9.01 16.035-9.008s3.21-1.51 4.2-3.352c1.52-2.84 12.8-10 37.522-24.07 3.97-2.25 4.91-3.86 4.105-7.065-1.16-4.63 2.19-5.54 8.307-2.27 2.54 1.36 5.31 1.14 9.933-.799 7.07-2.95 9.64-8.8 7.564-17.217-.682-2.76-1.72-7.46-2.307-10.431l-1.068-5.405 6.239 3.916c3.43 2.15 6.96 6.24 7.835 9.085 3.16 10.3 3.81 10.7 13.871 10.093l9.46-.596-1.219 7.622c-.948 5.93-.267 9.65 3.064 16.766 3.87 8.26 4.75 9.04 9.162 8.072 6-1.32 10 2.82 8.463 8.728-.601 2.29-6.7 11.5-13.545 20.55-6.85 9.01-13.4 17.9-14.49 19.837-2.04 3.45-3.35 5-12.993 15.297-2.84 3.04-8.54 10.1-12.672 15.64-4.13 5.57-12.4 15.4-18.421 21.911l-10.916 11.791 15.64-1.246c8.6-.685 24.2-1.19 34.679-1.119 15.8.106 21.5-.68 33.497-4.688 13.2-4.4 23.9-5.15 27.102-1.903.601.6-2.38 4.62-6.613 8.943-7.32 7.46-9.7 12.3-6.027 12.312.923 0 8.17-1.24 16.1-2.76 28-5.37 29.3-2.9 7.522 15.264-8.35 6.98-18.2 16.1-21.973 20.219-9.65 10.7-27 26-37.567 33.157-14 9.48-35.9 22.9-45.402 27.92-4.77 2.51-8.68 5.48-8.677 6.61 0 2.35 29.5 11.8 37.72 12.117 13.7.5 43.4-2.13 54.994-4.854 14.6-3.45 17.7-2.84 17.685 3.51 0 3.45-3.07 7.03-12.42 14.486-13.8 11-17.7 12.6-42.78 17.113-13.3 2.4-21.2 5.15-33.12 11.437-8.6 4.55-16.9 9.38-18.529 10.734-1.59 1.35-11.5 3.34-22.08 4.42-10.6 1.08-19.9 2.65-20.736 3.492-1.57 1.55 9.03 9.32 20.966 15.371 10.3 5.21 42.3 29.8 50.887 39.097 7.64 8.26 29.1 21.1 35.257 21.066 1.75 0 4.13.953 5.296 2.118s5.68 2.75 10.028 3.517c14 2.48 18.8 3.49 29.07 6.188 5.57 1.46 13 3.35 16.56 4.214 4.56 1.11 6.61 2.72 7.013 5.527.8 5.53-7.44 7.62-39.212 9.917-27.5 1.99-40.8 1.32-64.905-3.319-8.37-1.61-15.7-2.44-16.301-1.847-1.39 1.39 13.9 26.6 24.459 40.305 4.48 5.82 12.7 14.5 18.186 19.252 5.52 4.77 10 9.72 10.043 11.014 0 7.66-16.9 7.5-49.315-.469-10.4-2.56-19.9-4.34-21.116-3.94s3 4.72 9.296 9.617 11.5 9.52 11.456 10.274 7.92 9.43 17.601 19.267c15.7 16 21.5 22.7 37.311 43.855 5.69 7.58 9.32 16 8.173 18.992-1.83 4.76-18.4 2.79-35.778-4.262-9.04-3.66-16.8-6.28-17.288-5.814s3.3 9.22 8.369 19.448 9.21 19.4 9.212 20.425c0 4.78-4.48 3.5-10.901-3.119-3.9-4.01-16.1-13.3-27.071-20.669-18.9-12.6-39.5-28.3-57.285-43.446-4.32-3.69-8.31-6.25-8.868-5.695s.588 4.2 2.543 8.089c3.42 6.8 15.4 42.1 21.409 63.198 1.59 5.57 5.35 14.3 8.355 19.32 7.73 13 16 30.4 17.379 36.312.825 3.66.122 6.05-2.572 8.74-4.44 4.44-14.4 4.98-15.956.86-.601-1.57-6.16-6.25-12.362-10.414-26.9-18-49.4-38.3-66.527-59.871-5.03-6.32-9.6-11.5-10.149-11.5-.555-.004-1.9 7.24-2.997 16.093-2.57 20.8-.039 35.9 10.27 61.189 8.5 20.8 9.33 30 2.83 30.892-6.64.95-17.8-9.83-24.013-23.203-3.14-6.76-10.1-19.3-15.496-27.938s-12.2-20-15.128-25.313-6.82-10.5-8.617-11.422c-3.06-1.64-3.26-.064-3.129 25.313.076 14.9-.9 33.3-2.17 40.861-1.27 7.59-2.73 16.5-3.249 19.78-.734 4.67-1.83 5.97-4.997 5.952-2.23-.016-5.08-.675-6.319-1.465zm222.69-677.58c8.56-2.38 12.2-8.57 8.985-15.518-3.03-6.65-6.02-5.64-12.509 4.187-9.92 15-9.91 15.1 3.525 11.331z"/> + <path fill="#decc5f" d="m432.29 829.32c-1.47-2.34-4.07-8.59-5.776-13.889-2.44-7.58-6.22-12.8-17.689-24.434-19-19.3-27.7-36.5-28.841-57.009-.425-7.59-2.44-18.4-4.471-23.92-6.92-18.9-8.87-30.3-9.628-56.119-.561-19.2-1.63-28.1-4.173-34.819-5.73-15.2-12.1-12.1-6.809 3.341 2.09 6.13 2.3 9.17.834 11.913-1.08 2.02-1.97 9.83-1.971 17.347 0 17-5.51 44.9-14.791 74.896-3.92 12.6-8.42 28.7-10.017 35.76-7.47 32.9-37.2 69.6-46.252 57.17-1.32-1.81-2.77-4.21-3.212-5.331-.443-1.12-4.05 1.63-8.022 6.114-5.48 6.2-7.48 7.48-8.299 5.334-1.54-4.02 1.46-48.4 5.049-74.699 3.77-27.6 3.12-32.2-2.833-19.747-2.42 5.06-8.15 15.3-12.747 22.792-6.34 10.3-8.5 12.7-8.931 9.755-.317-2.11.337-5.54 1.453-7.628s2.82-12.7 3.776-23.555c1.94-21.9 4.51-42.4 6.477-51.503 1.71-7.94-.908-7.71-10.533.92-4.23 3.8-9.71 8.67-12.174 10.831-8.04 7.05-9.57 8.79-18.856 21.497-13.7 18.7-27.3 42.1-31.479 54.072-4.35 12.4-8.64 18.1-11.489 15.274-1.05-1.05-2.24-9.99-2.632-19.858-.665-16.6-.152-19.9 6.663-43.929 4.06-14.3 8.29-27.7 9.397-29.744 2.47-4.62 2.58-7.68.273-7.684-.957 0-9.28 5.15-18.503 11.442-17.1 11.6-33.5 27.6-38.763 37.391-3.61 6.81-11.9 11.6-14.9 8.637-6.46-6.46 1.26-44.9 14.767-73.48 12.3-26.1 12.6-35.3.693-22.877-2.77 2.9-10 7.38-16.074 9.946-17.1 7.26-41.9 22.6-58.668 36.413-5.43 4.46-18.8 12.8-20.557 12.769-2.17 0-.25-4.48 5.329-12.416 3.38-4.81 9.23-14.1 12.997-20.704 11.3-19.8 14.6-24.8 22.034-34.23 9.73-12.3 32-33.5 45.324-43.216 9.29-6.77 13.2-10.9 10.376-10.874-.354 0-10.1 3.73-21.62 8.297-24.6 9.71-37.5 12.2-65.135 12.43-16.6.149-23.7-.732-39.4-4.861-26.3-6.92-33.9-11.1-27.299-15.243 1.26-.789 13.5-1.56 27.14-1.702 21.9-.236 26.4-.842 37.942-5.114 7.21-2.67 14.3-4.85 15.779-4.847s4.62-2.07 6.998-4.6l4.321-4.6h-25.839c-14.2 0-32.8 1.17-41.26 2.606-29.8 5.04-34 5.25-40.069 2.093-6.74-3.48-7.33-7.4-1.572-10.425 2.28-1.2 8.69-6.07 14.26-10.827s12.2-9.17 14.854-9.802 7.83-3.25 11.618-5.822 9.52-5.81 12.745-7.21 12.8-8.51 21.387-15.804c18.5-15.8 34.6-26.6 53.934-36.114 7.84-3.86 14.3-7.78 14.26-8.709 0-.972-5.27-1.2-12.42-.529-34.7 3.24-44.8 3.46-55.993 1.215-6.39-1.29-14.9-2.64-18.836-2.999-3.97-.363-8.79-1.16-10.714-1.773-3.33-1.06-3.35-1.29-.325-4.626 1.75-1.93 4-3.51 5.001-3.513s7.85-2.9 15.211-6.44 14.5-6.44 15.85-6.44c2.6 0 7.9-7.1 6.412-8.587-.478-.478-5.71-2.12-11.627-3.656s-14.9-5.12-19.958-7.976-19.1-9.05-31.28-13.766c-23.2-9-33.7-15.5-31.277-19.378 4.47-7.24 30.9-12.7 66.736-13.731 18.4-.542 23.9-1.43 33.87-5.416 8.66-3.46 15.3-4.77 24.194-4.768 6.75 0 12.3-.711 12.276-1.58s-4.36-4.48-9.692-8.014c-6.95-4.62-12.7-6.82-20.453-7.779-19.9-2.48-33.3-5.86-33.335-8.355 0-1.32 3.89-3.54 8.649-4.928s9.1-3.24 9.64-4.124c1.61-2.61-3.66-5.81-11.225-6.81-3.88-.513-12.4-2.5-19.024-4.423s-15.4-4.37-19.603-5.439c-10.3-2.63-25.3-12.9-26.034-17.773-.687-4.82 2.61-6.39 17.117-8.165 6.07-.744 16.4-2.23 23-3.31 17.7-2.9 43.2-5.9 59.013-6.941 11.7-.772 18.2.119 40.48 5.492 14.6 3.53 30.5 8.14 35.439 10.241 8.43 3.63 15.9 4.98 15.947 2.861 0-2.19-12.9-26.4-14.674-27.525-1.04-.641-1.89-2.91-1.886-5.052 0-5-5.11-10.7-8.453-9.375-1.77.679-2.6-.38-2.615-3.344-.031-4.81-1.21-7.04-8.084-15.275-2.58-3.09-8.04-9.97-12.133-15.282-4.78-6.21-8.82-9.66-11.292-9.66-3.18 0-3.61-.722-2.46-4.14 1.3-3.86 1.38-8.4.368-19.78-.358-4.02.265-4.55 4.929-4.215 2.94.212 9.72 3.29 15.063 6.841s14.8 8.17 21.023 10.263c12.5 4.2 49.8 22.3 62.636 30.4 4.5 2.83 12 8.32 16.577 12.209 7.42 6.24 12.8 8.82 12.761 6.17 0-.491-2.1-8.14-4.667-16.998-9.44-32.6-8.95-83.9 1.046-109.31 4.57-11.6 8.83-35.6 10.885-61.399.806-10.1 2.09-19.9 2.847-21.698 1.83-4.38 5.3-3.02 6.449 2.53 1.75 8.45 19.2 50.5 25.488 61.488 15.1 26.4 17.7 30.4 19.69 30.36 4.61 0 20.4-50.2 18.33-58.419-.56-2.28-1.67-4.14-2.476-4.14-2.13 0-9.51-7.2-9.512-9.272 0-.973 2.48-1.77 5.52-1.768 7.26 0 12.2-5.2 13.765-14.516 2.12-12.6 6.5-12.2 11.072.945 1.84 5.28 3.35 6.97 5.842 6.496 5.57-1.05 7.65-3.81 10.622-14.02 3.31-11.4 9.37-20.1 10.905-15.705 7.86 22.6 13 45.7 14.138 63.479 1.2 18.8 4.74 33.5 10.839 44.9 2.64 4.93 6.86 4.96 8.415.057 2.7-8.52 42.8-65.6 55.864-79.456 3.57-3.8 8.06-6.9 9.995-6.9 3.33 0 3.46 1.22 2.405 23.46-2.74 58.1-3.32 88.4-1.702 89.354.94.581 6.27-3.3 11.853-8.613 12.5-11.9 26.1-21.2 32.998-22.625 2.86-.572 6.61-2.6 8.337-4.508 1.73-1.91 4.93-3.47 7.114-3.469s11.4-5.22 20.415-11.588c20.8-14.7 28-18.9 29.487-17.378 1.42 1.42-6.7 15.8-14.786 26.206-7.88 10.1-20.3 34.7-23.833 47.233-1.63 5.74-5.41 15.6-8.399 21.922-5.16 10.9-5.63 14.6-1.858 14.565 1.98 0 26.4-15.3 39.508-24.813 5.06-3.66 11.4-7.11 14.049-7.665s5.84-2.87 7.055-5.138 5.66-5.9 9.87-8.076c21-10.8 31.6-18.1 32.173-22.008.651-4.49 2.24-5.1 5.315-2.02 3.01 3.01 14.7-1.34 18.285-6.789 2.85-4.34 2.74-11.1-.339-20.732-1.37-4.31-1.35-4.31 4.408-1.333 3.89 2.01 5.78 4.35 5.782 7.134 0 2.28 1.28 5.96 2.833 8.188 2.43 3.47 3.97 3.89 10.896 2.939l8.063-1.105-.974 7.261c-.745 5.55.179 9.54 3.919 16.916 4.59 9.05 5.23 9.58 10.319 8.463 9.95-2.19 9.01 6.17-2.378 21.181-1.92 2.53-7.13 9.57-11.576 15.64-9.83 13.4-15 19.8-21.29 26.325-2.63 2.72-8.22 9.68-12.418 15.454-4.2 5.77-12.2 15-17.752 20.54s-10.1 11-10.122 12.129c0 1.53 9.5 1.76 35.42.845 29.8-1.05 37.6-1.93 49.219-5.585 23.7-7.47 29.7-5.2 17.48 6.652-6.49 6.29-7.92 9.91-4.688 11.906.964.596 9.71-.273 19.428-1.93s18.2-2.42 18.947-1.687c.7.729-2.87 4.75-7.928 8.938s-19.6 17.5-32.278 29.693-27.2 24.8-32.2 28.177c-16.8 11.2-32.9 21.2-44.081 27.169-15.8 8.51-15 11.3 5.131 17.715 8.89 2.83 18.8 5.27 22.08 5.405 11.4.488 44.3-2.03 49.902-3.825 3.13-.995 9-2.05 13.046-2.346 6.3-.459 7.44.025 7.916 3.361.416 2.92-2.44 6.25-11.333 13.24-12.4 9.78-20.8 13-44.422 16.916-12.1 2.02-44.5 16.4-52.584 23.264-1.62 1.38-7.32 2.53-12.88 2.593-11.5.126-26.9 2.41-28.755 4.257-1.92 1.92 6.66 9.52 16.738 14.811 14.6 7.68 43.4 28.8 53.42 39.324 9.28 9.68 21.9 17.9 34.181 22.393 3.54 1.28 9.05 3.48 12.238 4.88 3.19 1.4 7.16 2.54 8.83 2.544s13.8 2.59 26.862 5.749c24.8 5.97 29 8.9 18.77 12.851-2.78 1.07-19.3 2.82-36.642 3.885-29.2 1.79-33.3 1.64-53.825-1.995-12.2-2.16-23.1-3.93-24.078-3.931-2.92 0-2.13 5.24 1.602 10.654 1.89 2.74 8.1 12.2 13.806 20.918 5.92 9.1 16 21.1 23.468 28.06 11.1 10.3 12.7 12.5 10.759 14.947-3.34 4.03-24.2 2.1-50.131-4.631-11.3-2.94-20.9-5.02-21.274-4.627s12.1 13.6 27.756 29.298 32.1 33.4 36.546 39.193 9.59 12.3 11.449 14.299c5.66 6.18 12.6 19.1 11.378 21.112-2.43 3.94-17.7 1.85-35.059-4.806-9.63-3.68-18.1-6.15-18.724-5.482s3.13 9.98 8.44 20.693 9.23 19.9 8.713 20.42-5.33-2.75-10.694-7.276c-5.36-4.52-16.4-12.6-24.468-18.023-17.1-11.4-46-33.3-57.959-43.98-4.55-4.06-9-7.4-9.874-7.436-2.25-.078-.536 6.18 5.847 21.331 3.04 7.21 8.56 23.4 12.267 35.88 8.18 27.6 10.9 34.4 19.712 47.923 6.01 9.3 12.5 24.4 12.529 29.063 0 6.42-12.4 9.71-16.741 4.449-1.36-1.64-8.29-7-15.405-11.904-29.1-20.1-44-33.5-63.468-57.403-7.32-8.96-12.4-13.7-13.442-12.593-.953.953-1.82 13.6-1.937 28.126l-.204 26.393 8.765 21.996c8.89 22.3 10.1 30.9 4.631 31.908-5.2.985-16.2-10.6-21.813-22.953-2.92-6.44-6.91-14-8.871-16.73s-5.22-7.92-7.244-11.462c-17.6-30.8-25.3-40.8-28.776-37.28-.677.677-.752 11.2-.169 23.395.79 16.5.203 28-2.297 45.165-3.05 20.9-3.72 23.1-7.317 23.572-2.55.369-4.91-.937-6.627-3.68zm230.86-674.28c6.33-5.66 4.16-20.9-2.98-20.885-2.5 0-17.5 20.9-17.528 24.338 0 2.67 16.8-.161 20.507-3.453zm-325.94-98.165c0-1.01-.828-1.84-1.84-1.84s-1.84.828-1.84 1.84.828 1.84 1.84 1.84 1.84-.828 1.84-1.84zm-368.67 403.35c-1.72-2.77 3.37-4.08 15.913-4.077 8.68 0 10.8.5 9.077 2.181-2.8 2.8-23.5 4.36-24.99 1.896z"/> + <path fill="#e9d327" d="m435.34 831.93c-1.18-.752-4.24-6.92-6.79-13.7-3.74-9.95-7.38-15.2-18.824-27.014-17.4-18-25.8-35.1-28.414-57.725-.911-7.99-2.51-17.1-3.545-20.353-6.35-19.6-7.62-25.1-9.303-40.384-1.19-10.8-1.24-19.1-.126-22.952 2.45-8.43-7.63-41.5-12.369-40.536-3.27.652-3.54 4.83-1.182 18.252.72 4.1.395 7.16-.841 7.929-1.2.742-2.02 7.46-2.016 16.63 0 17.5-5.46 45.1-16.297 82.344-3.9 13.4-8.08 28.6-9.273 33.613-2.4 10.2-16.3 35.7-23.861 43.864-4.94 5.32-13.2 10.4-16.813 10.416-1.12 0-2.89-2.48-3.951-5.52-2.57-7.37-5.26-6.89-10.674 1.89-2.48 4.02-5.22 7.31-6.09 7.31-3.06 0 2.42-65.3 7.929-94.312 2.28-12 2.25-12.4-1.129-12.407-1.78 0-5.23 5.1-9.057 13.37-3.4 7.35-7.85 15.5-9.886 18.085s-4.27 6.93-4.947 9.647-1.97 5.39-2.874 5.943c-2.44 1.51-1.98-7.33.521-9.827 1.19-1.19 2.42-4.04 2.733-6.348.635-4.62 1.34-10.2 5.385-42.83 1.51-12.1 3.22-24.8 3.801-28.06 1.66-9.36-4.42-7.73-17.049 4.567-5.96 5.8-12.5 11.4-14.507 12.474s-4.82 4.39-6.209 7.393-4.79 7.95-7.553 10.986c-10.5 11.5-25.6 37.3-30.84 52.733-7.85 23-11.4 20.9-11.489-6.624-.03-19.2 2.39-29.7 14.891-64.693 2.93-8.2 5.32-15.4 5.321-16.1 0-3.67-8.02.25-23.945 11.702-20.3 14.6-33.6 27.4-38.215 36.745-1.74 3.52-5.46 7.66-8.266 9.2-4.54 2.48-5.31 2.49-6.957.037-4.66-6.95 3.22-42.9 14.731-67.159 10.3-21.7 12.8-31.7 8.337-33.388-1.94-.746-4.68.821-7.908 4.536-2.72 3.12-9.91 7.69-15.977 10.155-6.07 2.46-14.4 6.44-18.614 8.828-9.71 5.58-42.6 28.9-44.029 31.162-1.4 2.26-15.6 9.52-15.557 7.975 0-1.22 5.54-10.1 26.554-42.648 13.5-21 46.7-56.2 62.176-66.037 10.5-6.67 18-13.6 17.989-16.645 0-1.85-1.69-1.59-6.919 1.077-17 8.69-44.8 19.1-57.476 21.583-7.59 1.47-22.8 3.03-33.853 3.466-18.5.731-21.8.314-42.075-5.42-12.1-3.42-22.8-7.04-23.854-8.047-4.32-4.32 1.05-5.95 18.504-5.599 27.1.541 37.3-1.09 55.515-8.913 1.52-.651 4.19-1.34 5.934-1.521 3.77-.4 16.1-9.51 16.146-11.888 0-.913-6.82-1.3-15.18-.859-8.35.439-23.5 1.2-33.58 1.697-10.1.495-24.9 2.17-32.822 3.713-19.1 3.73-27.5 3.58-32.63-.604l-4.22-3.417 5.396-3.38c2.97-1.86 9.67-6.94 14.89-11.303 5.22-4.36 10.8-7.92 12.315-7.922 3.05 0 15.3-6.7 19.263-10.523 1.34-1.3 3.56-2.36 4.938-2.357 2.26 0 12.7-7.65 32.773-24.109 16-13.1 54.1-34.8 61.157-34.771 3.03 0 6.91-4.95 4.869-6.211-3.16-1.96-16.2-1.75-38.094.596-17.7 1.89-24.7 1.91-34.96.092-7.08-1.25-15.8-2.45-19.316-2.66-11.5-.689-12.9-.989-12.88-2.714 0-.934 3.06-2.71 6.806-3.943s10.8-4.61 15.721-7.503 10.1-5.26 11.621-5.257c2.42 0 10.7-11 9.316-12.349-.308-.308-6.85-2.21-14.54-4.221s-16.8-5.34-20.318-7.401c-3.48-2.06-14.9-7.08-25.412-11.157-20.7-8.06-34.7-15.5-34.714-18.403 0-6.01 33.9-12.9 63.151-12.776 16.1.058 22.4-.755 33.12-4.293 7.26-2.4 19.7-4.83 27.647-5.393s14.8-1.38 15.223-1.814c1.87-1.87-1.82-6.67-6.669-8.675-2.89-1.2-7.96-4.17-11.265-6.608-4.4-3.25-8.39-4.43-14.95-4.429-4.92 0-12.4-.78-16.662-1.734s-9.99-2.21-12.775-2.795c-7.51-1.58-6.16-3.96 3.656-6.429 8.86-2.23 13.4-4.8 13.364-7.62 0-3.03-11.5-7.53-17.187-6.697-3.57.524-9.09-.766-14.937-3.489-5.1-2.38-11.6-4.33-14.395-4.338-7.47-.026-17.9-4.89-24.781-11.512-3.29-3.18-5.98-6.32-5.98-6.971 0-2.53 9.45-5.31 14.556-4.291 2.99.597 9.34-.243 14.305-1.891 4.91-1.63 14.3-3.38 20.854-3.887 6.56-.507 16.5-1.72 22.045-2.698 22.4-3.94 48.6-2.24 73.359 4.754 5.43 1.53 12.1 3.11 14.72 3.5s9.77 2.77 15.801 5.278c16.8 6.98 17.6 4.64 6.25-17.796-4.2-8.31-8.57-17.2-9.721-19.703s-3.93-4.86-6.171-5.188c-2.96-.426-4.08-1.84-4.079-5.144 0-2.51-2.03-6.58-4.501-9.057s-6.98-8.1-10.012-12.511c-3.03-4.4-8.25-10.4-11.599-13.364-5.72-5.04-6.1-6.1-6.262-17.893-.173-12.4-.138-12.5 4.357-11.402 2.49.626 9.57 4.41 15.72 8.408s12.1 7.27 13.107 7.271 7.72 2.77 14.814 6.159 16.6 7.7 21.176 9.571c14.1 5.82 37.2 19.7 49.499 29.722 15.9 13 18.3 11 11.208-9.607-10.9-31.8-10.9-85.1.169-115.88 4.68-13 8.59-35.3 10.569-60.263.783-9.87 2.42-18.9 3.628-20.148 1.71-1.71 2.2-1.47 2.205 1.094 0 4.27 21.9 59.7 24.153 61.061.934.578 4.48 6.58 7.885 13.333 3.4 6.76 7.88 14.4 9.955 16.883 3.34 4.08 4.08 4.29 6.465 1.84 4.38-4.49 15.9-37.7 17.127-49.442 1.1-10.5.976-10.9-4.627-15.073-6.77-5.01-7.47-9.08-1.567-9.085 6.75 0 11.9-4.89 13.216-12.447 2.41-14.3 6.6-14.9 9.993-1.384 2.16 8.6 4.62 10 11.213 6.485 1.88-1 4.36-4.94 5.518-8.74 3.85-12.6 7.92-20.7 10.428-20.714 1.39 0 2.48 1.94 2.481 4.394 0 2.42 2.22 11.7 4.941 20.7 3.58 11.8 5.27 22.4 6.134 38.385.987 18.3 2.12 24.5 6.606 35.88 4.71 12 6.01 13.8 9.966 13.8 3.46 0 5.45-1.76 8.294-7.36 4.72-9.28 23.2-37.1 36.065-54.361 24-32.1 29.4-34.8 27.247-13.443-.706 6.93-1.85 31.7-2.537 55.146-1.16 39.4-1.02 42.6 1.95 43.77 2.31.887 6.06-1.54 13.449-8.707 12.1-11.8 25.1-20.8 32.502-22.58 2.94-.719 7.32-2.84 9.731-4.706s5.73-3.4 7.365-3.399c1.64 0 9.18-4.65 16.772-10.343 15.2-11.4 24.1-17.2 26.262-17.25 2.03-.01-3.72 10.7-10.102 18.837-6.26 7.97-22.4 39-24.322 46.744-.711 2.89-4.54 12.9-8.5 22.191-6.34 14.9-7.67 22.7-3.846 22.59.651-.017 4.5-2.02 8.543-4.449s12.7-7.52 19.242-11.313 15.5-9.66 19.921-13.031 9.2-6.14 10.616-6.136 3.86-1.97 5.44-4.37 10.5-8.31 19.822-13.119c20.8-10.7 21.6-11.3 21.559-16.776 0-4.97.556-5.21 5.243-2.281 8.2 5.12 23.9-8.5 21.417-18.608-3.51-14.4-3.56-13.5.628-11.253 2.14 1.15 4.72 5.24 5.782 9.184 2.61 9.68 5.85 12.1 12.85 9.686 6.74-2.35 8.99.241 3.535 4.062l-3.966 2.778 4.699 5.584c2.58 3.07 5.26 8.12 5.935 11.211 1.49 6.79 9.21 12.7 12.418 9.455 6.09-6.09 6.71 1.66.811 10.092-2.22 3.17-7.17 10.3-10.999 15.929s-8.18 11.2-9.66 12.4-2.7 3.4-2.695 4.829-1.08 3.01-2.402 3.514-6.91 6.38-12.42 13.04-17.2 20.3-26.053 30.318c-11.1 12.6-15.7 19.1-14.882 21.206 1.22 3.18-.188 3.19 56.649-.499 9.09-.591 23.1-2.98 31.144-5.306 18.8-5.45 21.5-4.48 13.071 4.816-7.22 8-7.64 9.4-3.766 12.618 2.12 1.76 5.57 1.76 16.1-.007 7.37-1.24 15.2-2.94 17.474-3.786 7.76-2.93 6.01 1.69-3.613 9.533-5.31 4.33-18.8 16.7-29.902 27.479-19.4 18.8-47.2 39-72.397 52.592-20.3 10.9-21.5 15.6-5.667 21.54 9.98 3.74 33.1 8.78 34.95 7.62.722-.446 9.58-1.22 19.683-1.726s23.5-2.23 29.782-3.838c20.1-5.16 21.1-.62 2.994 13.807-11.9 9.46-14.3 10.3-44.304 15.857-9.11 1.68-17.8 4.06-19.32 5.288s-8.14 4.56-14.72 7.394-13.7 6.71-15.758 8.608c-2.83 2.57-6.8 3.49-15.64 3.609-21.2.288-30.2 2.13-30.737 6.279-.368 2.73 2.24 5.38 10.12 10.288 5.84 3.64 15.2 9.43 20.697 12.88 13.3 8.29 37.8 27.6 42.449 33.569 9.61 12.2 36.9 24.7 68.908 31.474 27.1 5.75 35.9 8.22 35.88 10.084 0 2.82-7.9 3.96-41.783 6.047-32.1 1.97-34.4 1.88-55.728-2.221-15.7-3.03-22.8-3.71-24.183-2.322-4.16 4.16 24.3 46.8 42.002 63.036 5.63 5.14 9.79 9.8 9.241 10.348-1.48 1.48-19.4 1.37-28.916-.179-4.55-.742-15.3-3.35-23.783-5.794-8.53-2.44-16.2-3.75-17.048-2.908-.845.846 9.33 12.7 22.611 26.256 13.3 13.6 29.1 30.5 35.122 37.599s12.4 14.5 14.182 16.56c6.71 7.7 15.2 21.4 14.473 23.433-1.33 3.98-19.1 1.38-35.38-5.169-14.1-5.67-21.2-7.56-21.209-5.619 0 1.33 7.2 16.9 8.335 18.075.634.634 3.59 6.31 6.569 12.606l5.417 11.453-6.94-6.264c-5.64-5.09-30.9-23.5-52.723-38.397-8.97-6.13-19.2-14.2-29.51-23.426-17.7-15.8-19.8-12.4-8.58 14.07 3.17 7.5 9.16 25.2 13.319 39.33 4.24 14.4 10.2 30.2 13.671 36.036 11.3 19.1 15.2 27.1 16.413 33.675 1.15 6.14.857 6.69-4.573 8.586-5.42 1.89-6.26 1.57-12.653-4.824-3.77-3.77-15.4-13.1-25.83-20.647-19-13.8-45.9-40.1-54.838-53.58-2.6-3.93-5.46-7.14-6.365-7.139-2.85 0-4.74 7.74-6.06 24.84-1.65 21.3.569 34.3 9.866 57.768 11.1 28 10.1 34-3.866 23.34-5.58-4.26-8.83-8.47-10.282-13.314-1.84-6.16-6.84-15.3-18.567-33.923-1.65-2.62-6.73-11.1-11.28-18.771-7.16-12.1-15.2-19.8-17.839-17.195-.442.442-.757 10.6-.7 22.601.091 19.2-1.11 35.6-4.601 62.753-.971 7.55-3 9.28-7.529 6.397zm227.55-673.73c3.36-2.4 4.94-5.68 5.883-12.21 1.49-10.3-.374-13.7-7.638-13.674-3.94 0-6.16 1.84-10.572 8.74-8.4 13.1-10.1 17-8.97 20.085 1.38 3.61 14.7 1.77 21.297-2.94zm-324.15-101.97c.468-2.43-.287-3.19-2.718-2.718-1.85.357-3.66 2.16-4.014 4.014-.468 2.43.287 3.19 2.718 2.718 1.85-.357 3.66-2.16 4.014-4.014zm-366.66 403.78c-3.32-1.3-3.25-1.49.92-2.606 6.57-1.76 20.1-1.52 20.141.356 0 3.22-14.6 4.78-21.061 2.25z"/> + <path fill="#ccb854" d="m435.34 831.93c-1.18-.752-4.3-7.16-6.931-14.232s-6.68-14.5-8.988-16.545c-9.36-8.19-25.1-26.2-25.865-29.565-1.5-6.93-3.43-11.8-4.65-11.835-.679 0-1.37-1.85-1.544-4.113s-1.18-4.4-2.243-4.757-1.63-1.2-1.256-1.867c.98-1.77-1.79-20.2-4.333-28.823-1.2-4.05-2.41-9.84-2.711-12.88-.296-3.04-1.88-10.5-3.515-16.486-3.77-13.9-3.8-29.7-.085-40.66 3.23-9.51 2.51-13.7-2.373-13.71-2.48-.013-4.3-3.39-7.463-13.8-4.46-14.7-8.23-17.7-11.503-9.055-1.36 3.58-1.13 5.4.966 7.491 3.58 3.58 3.58 12.8.004 14.206-2.16.829-2.76 4.56-2.779 17.217-.01 8.89-1.6 24-3.535 33.587s-3.15 18-2.711 18.733-.05 1.83-1.095 2.477-1.4 1.98-.792 2.968c.61.986.108 3-1.115 4.473s-1.66 2.68-.97 2.679c.69 0 .607 1.04-.183 2.3s-1.57 3.16-1.729 4.21c-.341 2.23-8.88 34.2-12.883 48.229-1.52 5.31-3.4 9.66-4.196 9.66s-1.45 1.04-1.456 2.3c-.024 3.16-11.2 21.4-16.993 27.764-4.84 5.31-13 10.4-16.727 10.416-1.12 0-2.89-2.48-3.951-5.52-1.26-3.6-3.18-5.52-5.533-5.52-1.98 0-3.1.828-2.471 1.84s.26 1.84-.811 1.84c-1.07 0-1.77.621-1.558 1.38.556 1.97-4.65 9.66-6.534 9.66-.868 0-.996-7.24-.284-16.1s1.17-19.3 1.016-23.169.661-8.2 1.809-9.585c1.23-1.48 1.58-4.82.858-8.11-.816-3.72-.514-5.6.898-5.595 1.3 0 1.98-2.68 1.74-6.9-.213-3.8.083-8.14.658-9.66 2.12-5.6 4.96-22.4 4.754-28.15-.117-3.24-.592-4.44-1.055-2.669s-2.07 3.22-3.575 3.22-2.22-.828-1.597-1.84.445-1.84-.402-1.84-3.93 5.59-6.843 12.42-6.48 13.8-7.909 15.478-2.83 4.17-3.108 5.52-1.02 3.7-1.646 5.221c-.629 1.52-2.14 5.24-3.366 8.28-2.11 5.23-2.26 5.3-2.956 1.279-.403-2.33.305-5.49 1.573-7.02s2.4-4.94 2.517-7.59c.116-2.65 1.19-5.14 2.393-5.539 1.54-.513 1.84-4.02 1.012-11.917-.919-8.8-.67-10.9 1.167-9.746 1.79 1.11 2.18-.538 1.659-7.071-.372-4.68.033-8.52.901-8.515s1.29-3.66.932-8.128-.293-7.78.138-7.343c.829.829 5.28-10.2 6.942-17.189.987-4.15-1.89-5.78-4.044-2.3-2.24 3.63-4.23 1.74-3.851-3.68.416-6.01-2.01-7.46-3.851-2.3-.631 1.77-4.06 6.95-7.617 11.5-7.58 9.7-10.7 13.2-8.587 9.376.996-1.75.775-2.15-.68-1.253-1.18.732-1.66 2.14-1.046 3.125 1.71 2.77-3.04 7.35-6.491 6.257-2.9-.921-8.47 3.67-12.065 9.948-1.12 1.95-.707 2.31 1.609 1.421 2.61-1 2.79-.612 1.157 2.447-1.07 2-2.38 3.64-2.911 3.639s-.452-.828.173-1.84.26-1.84-.811-1.84c-1.07 0-1.95.75-1.949 1.666s-2.94 5.18-6.527 9.478c-6.49 7.77-18.3 29.3-16.028 29.336.648 0-.259 1.05-2.016 2.336s-3.33 4.18-3.503 6.44-.961 4.1-1.758 4.104-1.31.621-1.139 1.38c.685 3.05-2.58 14.5-5.113 17.931-2.32 3.15-2.95 3.28-4.428.92-2.13-3.39-1.5-42.3.688-42.305.867-.002 1.1-1.25.518-2.765s-.378-2.76.455-2.76 3.39-6.42 5.684-14.26c2.29-7.84 6.55-19.9 9.468-26.872s5.3-14.2 5.298-16.231c0-3.36-.218-3.4-3.027-.591-2.19 2.19-3.39 2.43-4.357.875-.942-1.52-3.69-.692-9.393 2.846-10.8 6.66-18.3 13.9-16.913 16.16.626 1.01.234 1.28-.872.6-1.11-.684-2.83.223-3.835 2.016s-2.09 3-2.413 2.68c-1.19-1.17-6.98 1.93-6.142 3.286.476.771-.913 2.96-3.087 4.867s-3.31 2.37-2.524 1.03c1.18-2.02.765-2.02-2.466-.004-2.14 1.34-3.51 3.44-3.036 4.668s-1.15 3.81-3.596 5.739c-2.45 1.93-3.96 4-3.347 4.61 1.83 1.83-4.77 10.4-9.741 12.701-3.72 1.7-4.97 1.59-6.315-.544-2.25-3.55-2.21-18.3.046-18.295.98 0 1.31-1.24.723-2.76s-.23-2.76.783-2.76c1.76 0 2.07-1.73 2.455-13.34.091-2.78 1-5.06 2.026-5.06s1.43-1.66.898-3.68-.163-3.68.814-3.68 1.26-.828.639-1.84-.172-1.84 1.008-1.84 1.7-1.17 1.145-2.608.066-3.02 1.37-3.517 5.12-6.78 8.49-13.952 6.71-13 7.437-13.043c.724 0 1.87-1.45 2.543-3.22.983-2.58.767-2.76-1.091-.92-3.81 3.78-5.3 2.64-4.808-3.68.396-5.07-.136-5.96-3.487-5.854-2.76.088-3.64-.695-2.907-2.602.7-1.82.3-2.27-1.208-1.335-1.24.766-1.96 2.76-1.6 4.442.824 3.84-7.38 11.9-10.788 10.58-1.4-.537-2.54-.251-2.543.634s-1.65 1.18-3.658.654c-2.32-.606-4.07.128-4.793 2.002-.624 1.63-1.88 2.5-2.782 1.94s-1.65-.092-1.647 1.039-.834 1.54-1.853.912-2.35.144-2.953 1.721c-.605 1.58-1.84 2.41-2.747 1.848s-1.65-.004-1.647 1.237c0 1.24-.523 1.73-1.163 1.093-.639-.639-4.51 1.7-8.598 5.202s-7.74 6.06-8.102 5.698-3.24 1.73-6.374 4.665-6.13 4.91-6.653 4.387-2.12.491-3.564 2.246c-1.71 2.08-2.19 2.24-1.375.431.684-1.52-.989-.046-3.717 3.271-4.89 5.95-19.3 14.8-19.334 11.844 0-.836 2.12-4.37 4.709-7.857s7.17-10.9 10.173-16.457c4.53-8.38 15.6-24.3 11.848-17.02-.654 1.26-.793 2.3-.31 2.3 1.49 0 9.15-13.2 9.152-15.812 0-1.33.64-2.03 1.423-1.546s3.75-2.2 6.593-5.952c6.91-9.12 50.9-52.2 47.233-46.193-.723 1.17 1.62.312 5.209-1.905s7.79-4.03 9.329-4.032 3.31-1.31 3.923-2.911c1.26-3.27 1.53-13.6.36-13.649-.785 0-23.4 9.61-37.883 16.096-17.3 7.77-38.9 13.3-51.634 13.344-3.98 0-7.25.882-7.246 1.959 0 3.78-24.5 1.24-46.671-4.85-22.3-6.12-26.5-8.13-24.268-11.668 1.51-2.44 18-2.67 20.431-.292 1.08 1.05 5.28.974 10.948-.204 5.06-1.05 13.1-1.93 17.94-1.946s8.74-.723 8.74-1.565c0-.843 3.52-2.47 7.82-3.623s8.82-2.91 10.039-3.909c1.22-1 2.98-1.35 3.91-.774 2.08 1.29 16.6-9.04 18.104-12.841 1.79-4.65-.354-4.87-16.25-1.626-9.83 2-20.1 2.82-28.674 2.269-7.34-.471-13.3-.153-13.349.707s-2.28 1.56-5.06 1.564-11.6 1.24-19.482 2.76c-19.2 3.68-27.5 3.51-32.649-.673l-4.239-3.433 7.99-5.307c4.4-2.92 9.28-6.14 10.861-7.147s4.47-3.77 6.416-6.129c2.3-2.78 4.81-3.96 7.151-3.346 4.69 1.23 9.08-.496 7.557-2.962-.7-1.13-.309-1.38.944-.61 2.36 1.46 24.4-9.92 23.176-11.946-.432-.699.607-2.4 2.308-3.778 2.16-1.75 2.68-1.81 1.703-.195-1.11 1.85-.361 1.86 3.787.038 5.36-2.36 7.86-4.8 7.909-7.732.015-.936-2.25.307-5.032 2.76l-5.06 4.461 4.384-4.979c2.41-2.74 4.9-4.92 5.52-4.842 3.79.456 5.78-.581 4.64-2.424-.762-1.23-.51-1.63.599-.943 1.05.65 6.06-2.12 11.128-6.156s10.4-7.34 11.887-7.337 4.25-1.74 6.177-3.876c4.09-4.53 11.5-8.4 29.265-15.387 15.9-6.26 19.9-9.4 17.416-13.977-1.17-2.18-1.15-3.73.059-4.477 2.78-1.72 2.21-4.6-.915-4.603-1.52 0-2.76 1.24-2.76 2.76 0 3.15-4.82 3.47-15.374 1.026-5.09-1.18-9.2-.902-14.567.991-4.11 1.45-9.03 2.14-10.934 1.538-1.9-.604-4.46-.266-5.691.751-2.82 2.34-36.3 3.67-34.856 1.384.571-.918-.749-1.2-2.932-.632s-3.51.287-2.939-.63-.605-1.67-2.604-1.668-3.95.932-4.325 2.07c-.793 2.38-12.5.438-12.496-2.074 0-.853 3.1-2.55 6.9-3.774 3.8-1.22 8.09-3.15 9.553-4.283 2.05-1.59 2.33-1.52 1.213.334-1.67 2.78 11.4-2.14 14.534-5.461 1.01-1.08-.81-.618-4.049 1.016-8.24 4.16-10 3.7-2.807-.717 3.31-2.02 7.28-3.67 8.826-3.673s4.21-2.48 5.936-5.508c3.54-6.22 6.87-6.71 25.214-3.696 6.07.998 27.6 1.81 47.84 1.799 30.1-.013 39.3-.651 50.6-3.529 13.8-3.5 13.8-3.51 5.169-3.649-4.75-.075-9.14.695-9.772 1.71-.755 1.22-2.39 1.18-4.826-.128-2.57-1.38-4.39-1.39-6.004-.049-1.63 1.36-2.98 1.26-4.574-.332-1.24-1.24-4.08-2.35-6.304-2.469-22.2-1.17-58.6-.192-61.464 1.649-1.22.79-12.8.082-25.76-1.573s-25.4-3.13-27.684-3.277-4.14-.937-4.14-1.755c0-.819-.764-1.02-1.699-.439-.934.578-4.56-.64-8.065-2.706-3.5-2.07-15-7.09-25.441-11.174-22.3-8.67-35.2-15.8-34.208-18.832.396-1.19 1.48-2.21 2.407-2.264 4.88-.3 13.6-3.12 12.918-4.186-.418-.677 2.68-1.3 6.884-1.382 4.2-.083 14.3-.638 22.364-1.234 17.5-1.29 25-.204 23.587 3.428-.54 1.41-.065 2.56 1.056 2.557 1.12 0 2.04-1.19 2.037-2.636 0-3.49 5.6-5.11 15.591-4.496 5.76.354 9.21-.457 11.756-2.76 3.48-3.15 23.5-7.17 26.617-5.334.839.496 5.23-.134 9.755-1.402 5.88-1.65 7.94-3.06 7.215-4.949-.558-1.46-1.02-3.04-1.015-3.523s-.828-.366-1.84.259-1.84-.292-1.84-2.038-.519-2.66-1.153-2.022c-1.32 1.32-10.5-3.1-17.035-8.16-2.92-2.28-7.42-3.42-13.445-3.42-4.98 0-12.5-.78-16.772-1.734s-9.99-2.21-12.775-2.795c-7.64-1.6-6.1-4.05 4.049-6.489 11.5-2.76 15.3-6.65 10.142-10.43-3.26-2.4-2.82-2.52 4.669-1.305 13.5 2.19 15.7 1.95 15.099-1.627-.297-1.77.425-3.22 1.605-3.22 1.57 0 1.53-.74-.145-2.76-3.31-3.99-6.11-3.39-4.951 1.059.929 3.55.462 3.73-6.685 2.54-9.46-1.58-21.5-7.48-21.456-10.536.082-6.59 9-11.5 13.978-7.77 1.91 1.45 5.57 2.66 8.125 2.689s6.54 1.38 8.859 3.006c4.94 3.46 6.62 2.51 4.934-2.809-.67-2.11-2.78-3.82-4.731-3.819-1.94 0-6.86-1.34-10.937-2.968-5.82-2.33-7.99-2.49-10.077-.762-1.46 1.21-3.52 1.67-4.579 1.02-3.5-2.16-1.99-6.4 2.679-7.574 2.53-.635 4.6-1.89 4.6-2.795s1.66-1.64 3.68-1.641 3.68.817 3.68 1.815c0 2.17 11.9 7.38 16.824 7.385 1.99 0 4.44-2.09 5.7-4.84 2.18-4.8 2.34-4.83 16.984-3.704 14.4 1.11 44.2 7.85 51.571 11.671 2.02 1.05 6.99 2.4 11.04 3.011s6.37.662 5.163.123c-1.21-.538-1.69-2.29-1.075-3.901.636-1.66-2.31-9.77-6.792-18.741-4.35-8.7-8.86-17.9-10.026-20.418s-3.95-4.86-6.191-5.188c-2.96-.426-4.08-1.84-4.079-5.144 0-2.51-2.03-6.58-4.501-9.057s-6.98-8.1-10.012-12.511c-3.03-4.4-8.44-10.6-12.02-13.725-6.28-5.52-6.46-6.01-4.946-14.085.882-4.72.866-8.37-.039-8.37-.881 0-1.6-1.66-1.602-3.68 0-2.04 1.23-3.68 2.76-3.68 1.52 0 2.76.917 2.76 2.037s1.24 1.56 2.76.978c1.62-.622 2.76-.025 2.76 1.446 0 3.02 5.01 5.23 7.986 3.53 1.17-.672 1.5-.529.737.318-1.66 1.83 5.64 10.1 8.924 10.091 1.26 0 4 2.28 6.085 5.06 2.88 3.84 4.18 4.48 5.388 2.653 1.26-1.9 3.08-1.52 8.76 1.84 7.76 4.6 17.4 8.55 24.68 10.156 2.53.556 5.98 2.21 7.671 3.68s8.27 5.13 14.622 8.133 16.7 9.98 22.972 15.49c10.3 9.04 17.6 13.1 14.485 8.106-.653-1.06-.195-3.12 1.017-4.576 2.43-2.92 1.66-7.49-3.079-18.45-3.33-7.69-4.16-10.4-5.175-16.768-.35-2.2-1.23-6.69-1.953-9.985-2.08-9.47-2.24-22.7-.286-24.013 1.01-.674 1.14-2.68.308-4.6-2.22-5.13-2.8-15.6-.8-14.383.956.591 1.74-.147 1.738-1.641s1.03-3.06 2.284-3.476c1.64-.547 1.38-1.66-.92-3.965-3.5-3.5-4.27-5.66-1.386-3.875 1.12.695 1.75-2.95 1.645-9.551-.111-6.88 1.28-14.6 3.923-21.715 4.77-12.9 8.69-34.9 10.701-60.263.865-10.9 2.39-18.8 3.879-20.24 2.01-1.88 2.28-1.55 1.458 1.841-.549 2.28-.234 4.61.7 5.187s1.22 1.82.639 2.762-.133 1.71.999 1.713 1.54.828.92 1.84c-.626 1.01-.212 1.84.92 1.84 1.13 0 1.62.709 1.083 1.576-.879 1.42 6.2 22.8 9.848 29.764.815 1.55 2.06 5.44 2.76 8.645.704 3.2 3.79 8.97 6.857 12.82 3.07 3.85 7.36 10.2 9.535 14.136a31297 31297 0 0 0 6.244 11.264c1.26 2.27 3.67 5.26 5.359 6.659 2.64 2.18 2.93 2.15 2.093-.224-.539-1.52.063-4 1.337-5.52 4.3-5.13 15.6-38.5 16.789-49.442 1.1-10.5.976-10.9-4.627-15.073-6.77-5.01-7.47-9.08-1.567-9.085 6.75 0 11.9-4.89 13.216-12.447 2.41-14.3 6.6-14.9 9.993-1.384 2.16 8.6 4.62 10 11.213 6.485 1.88-1 4.36-4.94 5.518-8.74 3.85-12.6 7.92-20.7 10.428-20.714 1.36 0 2.48 1.74 2.481 3.874s1.33 8.96 2.961 15.18c1.63 6.22 3.22 12.5 3.539 14.065s.746 2.97.949 3.22c.204.253.487 1.08.629 1.84s.814 2.25 1.493 3.315.345 10.7-.743 21.488c-1.7 16.8-1.55 20.8 1.037 28.771 1.66 5.07 3.02 11.3 3.015 13.796 0 3.3 1.62 5.39 5.803 7.474 11.6 5.79 13 4.84 27.605-19.645 7.42-12.4 13.3-23.2 13.041-23.92s.517-1.38 1.697-1.38 1.62-.524.982-1.164c-.64-.64.921-2.8 3.47-4.81s4.18-4.1 3.629-4.651.631-2.15 2.631-3.552c4.48-3.14 16.3-20 12.724-18.171-2.52 1.31 1.08-1.84 8.456-7.378 2.02-1.52 2.44-2.18.92-1.465s-2.12.592-1.327-.275c2.05-2.26 6.65-2.66 7.868-.691.57.922.275 1.68-.655 1.676s-2.23 4.35-2.888 9.66-2.05 13.8-3.1 18.86c-4.54 21.9-4.46 20.5-.917 17.562 3.04-2.52 3.15-.995 2.086 28.905-1.08 30.2-.967 31.7 2.514 33.52 2.37 1.27 3.25 3.06 2.526 5.14-.614 1.76 2.94-.663 7.888-5.374s11.9-10.5 15.451-12.88 9.51-6.66 13.26-9.532c6.14-4.7 12.3-5.4 9.654-1.095-2.64 4.27 4.13 1.03 11.833-5.665 4.67-4.06 11.7-10.1 15.571-13.34s9.02-7.74 11.388-9.907c2.37-2.17 4.7-3.55 5.186-3.062.485.485 1.79-.814 2.9-2.887 1.18-2.21 3.13-3.34 4.704-2.738 2.34.9 2.35 1.68.039 6.151-1.46 2.82-4.72 7.59-7.263 10.605-2.54 3.02-4.09 6.01-3.44 6.66s.121 1.18-1.168 1.175c-1.33 0-1.88 1.2-1.284 2.76.583 1.52.119 2.76-1.03 2.76s-1.57.519-.936 1.153c1.36 1.36-3.29 11.1-7.815 16.327-1.74 2.02-5.5 10.3-8.347 18.4s-7.13 18.6-9.5 23.399c-4.79 9.62-5.66 15.3-2.018 13.156 1.8-1.08 1.83-.795.105 1.333-1.21 1.49-1.56 3.74-.792 4.984 1.5 2.43 8.67-.826 26.907-12.23 5.06-3.16 11.3-6.76 13.8-8.001s8.33-5.18 12.88-8.765c9.66-7.6 15.6-11.1 18.835-11.142 1.28-.014 5.95-3.3 10.385-7.295 6.3-5.68 9.43-7.22 14.338-7.033 3.88.146 8.18-1.25 11.26-3.653 11.9-9.28 18.9-13.7 19.997-12.671.632.632.125 2.38-1.127 3.891-4.48 5.4-.88 6.5 5.997 1.831l6.993-4.752-2.225 4.274c-1.22 2.35-2.92 5.52-3.76 7.034-9.03 16.2-9.1 16.5-7.082 23.963 2.23 8.28 3.61 8.77 10.643 3.782 2.74-1.94 7.87-4.12 11.389-4.839 5.85-1.19 6.18-1.04 3.84 1.786-2.3 2.77-2.1 3 1.876 2.244 2.44-.465 5.89-1.42 7.66-2.127 4.62-1.84 3.97.886-1.581 6.682-4.59 4.79-4.68 10.5-.132 7.747 1.24-.743 1.09.036-.352 1.81-2.95 3.64-4.71 4.14-2.833.813 1.01-1.78.768-1.81-1.057-.123-1.3 1.2-2.45 4.1-2.57 6.44-.124 2.47-1.38 4.26-2.975 4.263-1.52 0-2.53-1.11-2.243-2.473.285-1.36-.54-2.12-1.832-1.689s-2.37 1.96-2.395 3.393c-.073 4.16-2.84 10.9-4.473 10.889-.822 0-4.84 4.35-8.922 9.66s-12.5 15-18.766 21.62c-15.1 15.9-17.2 19.2-15.817 24.826 1.04 4.15 2.07 4.61 10.323 4.613 12.9 0 12.1 4.22-1.665 8.28-3.43 1.01-5.91 2.67-5.52 3.68.391 1.01 1.54 1.69 2.55 1.501 6.47-1.19 34.8-9.92 36.524-11.263 3.42-2.63 19.1-6.38 21.252-5.071 1.35.832 1.27 2.29-.245 4.715-2.97 4.76-.399 6.84 3.782 3.054 1.86-1.68 4.32-3.06 5.469-3.055 1.98 0 12.2-4.03 19.212-7.585 4.19-2.12 7.42-2.06 6.077.108-1.4 2.26-11.9 7.48-15.075 7.476-1.36 0-2.48 1.27-2.477 2.825 0 2.24.751 2.42 3.622.886 4-2.14 14.5-1.89 15.946.371.489.791-.037 1.44-1.169 1.438-1.13 0-1.66.649-1.166 1.442s4.36 1.11 8.61.706c5.53-.528 7.01-1.23 5.198-2.473-1.69-1.16-.542-1.35 3.458-.559 4.06.799 5.98.474 5.98-1.013 0-1.52 2.12-1.82 6.9-.998 4.3.744 5.98.571 4.444-.46-1.89-1.27-1.58-1.88 1.378-2.655 7.98-2.09 5.21 2.39-8.578 13.848-7.84 6.52-21.1 18.7-29.444 27.158-8.35 8.42-15.2 14.8-15.18 14.123 0-1.52-29.9 18.8-31.711 21.502-.744 1.13-1.36 1.39-1.38.577-.016-.816-2.47-.043-5.448 1.718s-4.92 4.01-4.316 4.988c.607.983.179 1.22-.953.515-1.13-.699-3.67.346-5.651 2.322s-4.14 3.04-4.818 2.37c-.673-.673-2.19.099-3.373 1.716-2.18 2.98-3.21 3.5-7.056 3.495-1.18 0-1.63.513-1.008 1.139.627.626-.111 2.39-1.639 3.917s-2.35 3.9-1.819 5.279c.528 1.38.368 2.41-.354 2.305-.723-.108-2.56-.068-4.074.087-3.49.358 5.16 5.51 9.412 5.607 1.64.036 5.22 1.84 7.971 3.997 4.35 3.42 6.53 3.79 16.878 2.823 7.45-.696 11.5-.447 10.781.668-.604.978.655 1.78 2.799 1.777 2.46 0 3.42-.777 2.593-2.11-.939-1.52 1.08-1.84 7.218-1.15 4.69.528 8.11.289 7.6-.531s5.1-1.48 12.453-1.466c18 .034 19.8-.183 19.815-2.416 0-1.14 1.89-1.45 4.6-.771 2.65.666 4.6.361 4.6-.721 0-2.58 6.84-2.37 8.456.249.767 1.24.509 1.63-.619.931-1.06-.657-2.42.087-3.023 1.651-.625 1.63-.314 2.36.727 1.721 1-.618 1.82-.733 1.819-.254s-5.23 5.03-11.62 10.116c-12.1 9.63-14.4 10.5-44.5 16.013-9.11 1.68-17.8 4.11-19.32 5.398-2.26 1.92-7.48 4.19-12.88 5.599-13.1 3.43-19.3 6.74-19.32 10.324 0 1.35-7.83 2.2-23.335 2.539-12.8.278-24.2 1.05-25.3 1.72s-1.96 3.16-1.965 5.547c0 3.4 2.48 5.72 11.547 10.791 6.35 3.55 13.1 8.18 15.005 10.278s4.21 3.82 5.135 3.821c.923 0 4.39 2.07 7.709 4.6s6.86 4.6 7.872 4.6c1.88 0 7.93 5.91 7.931 7.75 0 .561-1.86 1.55-4.14 2.187l-4.14 1.167 4.344 3.648c5.23 4.39 9.46 4.72 9.456.735 0-1.6 1.04-2.56 2.3-2.139s2.32 2.61 2.348 4.855c.034 2.92 2.65 5.61 9.2 9.467 5.03 2.96 10.6 5.4 12.268 5.419 1.71.017 4.2 1.48 5.52 3.256 2.85 3.82 24.9 12 27.716 10.284 1.13-.7 1.39-.316.624.927-.725 1.17-.234 2.23 1.096 2.359 1.32.129 4.48.581 7.009 1.003s5.99.908 7.685 1.079 2.63 1.05 2.07 1.954c-.573.928 1.49 1.09 4.735.38 3.92-.861 5.75-.568 5.75.923 0 1.41 1.63 1.78 4.6 1.031 2.79-.701 4.6-.369 4.6.845 0 1.16 1.54 1.51 3.68.831 2.2-.7 3.68-.331 3.68.92 0 1.25 1.48 1.62 3.689.917 2.59-.822 4.06-.173 4.926 2.176.68 1.84 2.12 3.99 3.211 4.783s-.51.891-3.546.224c-6.04-1.33-6.12-1.33-10.12-.829-2 .251-1.74.818.92 2.052 2.64 1.22 1.54 1.41-3.911.668-4.18-.57-18.9-.132-32.76.973s-26 1.47-27.098.817-5.67-1.49-10.244-1.848c-4.57-.36-9.32-1.49-10.559-2.518-1.24-1.02-2.77-1.34-3.411-.697s-2.42.128-3.947-1.142c-1.53-1.27-4.03-1.83-5.564-1.24-1.53.587-2.78.217-2.783-.823s-.842-1.37-1.87-.735c-1.03.636-1.32 2.05-.636 3.153.679 1.1.446 1.51-.518.914s-2.94-.347-4.4.553c-2.2 1.36-1.94 2.3 1.486 5.487 2.27 2.12 6.72 8.99 9.88 15.262 8.18 16.3 14.1 24.4 28.14 38.551 9.91 10 11.5 12.4 8.399 12.42-2.14 0-3.44.739-2.885 1.641.588.951-2.13.936-6.449-.036-4.1-.922-8.18-1.23-9.059-.691-.877.542-2.16.077-2.843-1.033-.686-1.11-3.23-1.52-5.647-.915-2.42.607-4.4.286-4.399-.713 0-1-1.24-1.34-2.76-.758-1.52.583-2.76.055-2.76-1.175s-1.22-1.77-2.701-1.197c-1.49.57-3.22.188-3.866-.849s-2.3-1.45-3.68-.92-3.04.117-3.68-.92-2.32-1.44-3.739-.897c-1.42.543-2.57.186-2.574-.795s-1.1-1.78-2.453-1.782c-4.64 0-2.44 6.06 4.597 12.686 8.3 7.81 8.69 9.39 2.348 9.393-2.92 0-4.24.759-3.472 2 .68 1.1 2.84 1.58 4.79 1.071 2.41-.63 5.96 1.36 11.03 6.183 4.11 3.91 8.84 7.41 10.499 7.778s2.78 1.76 2.486 3.087c-.672 3.03 3.61 7.91 14.698 16.739 4.75 3.79 8.21 7.32 7.675 7.851-.532.532 1.55 2.83 4.626 5.101s5.22 4.74 4.755 5.489.453 1.85 2.029 2.454c1.58.605 2.41 1.84 1.85 2.744-.559.905.375 2.77 2.077 4.153 2.13 1.72 2.66 1.79 1.711.209-.76-1.26-1.04-2.3-.614-2.3 1.79 0 14.3 20.7 13.687 22.605-.963 2.89-16.9 1.82-26.621-1.781-4.36-1.62-7.27-3.73-6.616-4.784.662-1.07.268-1.33-.911-.604-1.14.706-7.85-.723-14.901-3.176l-12.823-4.46 2.962 7.6c1.63 4.18 4.36 9.67 6.076 12.2 6.42 9.48 7.44 12.4 4.657 13.507-1.43.547-3.69-.357-5.026-2.009-1.77-2.18-1.8-2.62-.135-1.622 1.26.76 2.3.594 2.3-.37 0-.963-1.31-2.25-2.911-2.869-4.21-1.62-4.83-1.4-3.337 1.183.731 1.26-.88-.024-3.58-2.864s-5.75-4.64-6.787-4.003-1.65.126-1.372-1.139c.278-1.26-3.48-4.96-8.352-8.206s-10.7-7.66-12.998-9.798c-2.28-2.14-4.96-3.89-5.961-3.89-2.43 0-12.7-11.1-14.227-15.307-.816-2.32-2.28-3-4.772-2.206-2.1.666-4.98-.061-6.909-1.745-9.8-8.53-17.7-14.5-16.446-12.482.764 1.26.568 2.3-.436 2.3-4.36 0-3.46 7.62 2.584 21.956 5.86 13.9 19.3 56.5 19.263 61.245 0 3.42 11.7 25.7 13.916 26.577 1.2.461 3.65 4.1 5.453 8.089 1.8 3.99 3.9 7.25 4.658 7.252.764 0 .955 1.66.426 3.68-.538 2.06-.057 3.68 1.092 3.68 4.78 0 1.85 7.07-3.74 9.02-3.19 1.11-5.93 2.02-6.094 2.02s-2.25-2.69-4.638-5.98c-3.51-4.84-3.64-5.37-.661-2.76 2.02 1.77 4.85 3.21 6.292 3.193 3.54-.037-11.3-12.7-15.023-12.783-1.6-.038-8.23-4.34-14.72-9.56s-13.9-10.8-16.505-12.42-9.16-7.9-14.597-13.969c-9.51-10.6-15.1-15.3-11.882-9.899 1.3 2.15 1.06 2.15-1.564.03-1.7-1.38-2.68-3.18-2.176-3.993.504-.816-1.37-3.28-4.16-5.478-2.79-2.2-5.08-4.78-5.078-5.735 0-.957-.888-2.33-1.974-3.053s-2.54-2.86-3.242-4.74c-1.04-2.8-1.77-3.01-4.006-1.155-1.51 1.25-2.74 3.34-2.738 4.654s-.907 2.68-2.015 3.053c-1.3.435-2.11 9.1-2.278 24.533-.257 23.4.722 29.4 7.137 44.101 7.98 18.3 9.65 22.7 10.647 27.988.61 3.25.409 6.34-.447 6.87-.855.529-5.23-1.84-9.715-5.27-5.58-4.26-8.83-8.47-10.282-13.314-1.84-6.16-6.84-15.3-18.567-33.923-1.65-2.62-6.73-11.1-11.28-18.771s-10.2-14.9-12.658-16.001-4.6-1.76-4.866-1.469c-.692.749-2.53 29.4-3.683 57.568-1.43 34.8-2.55 38.9-9.462 34.457zm139.23-96.731c0-3.47-6.72-9.18-9.084-7.717-1.08.665-1.96 3.23-1.956 5.7 0 3.76.894 4.49 5.52 4.491 3.4 0 5.52-.952 5.52-2.475zm-50.507-11.496c-1.71-1.71-4.4-5.08-5.988-7.505s-3.28-4-3.775-3.507 1.79 4.28 5.071 8.422 6.38 7.12 6.881 6.612c.504-.504-.48-2.32-2.189-4.023zm30.267.113c0-1.55-1.3-3.32-2.884-3.924-3.46-1.33-7.23 1.93-5.495 4.742 1.87 3.03 8.38 2.4 8.379-.817zm-419.52-7.753c0-.506-1.24.111-2.76 1.371s-2.76 2.7-2.76 3.211 1.24-.111 2.76-1.371 2.76-2.7 2.76-3.211zm395.51-.627c-1.13-2.11-2.5-3.39-3.052-2.839-1.52 1.52.913 6.68 3.143 6.677 1.36 0 1.33-1.18-.091-3.838zm-95.257-2.081c-1.32-1.32-2.18-1.43-2.177-.276 0 2.46 2.18 4.63 3.404 3.404.523-.523-.029-1.93-1.227-3.128zm118.26-3.408c-1.58-2.55-2.68-2.08-2.681 1.156 0 1.58.842 2.35 1.87 1.713 1.03-.636 1.39-1.93.811-2.869zm-262.12-3.661c0-1.07-.828-1.44-1.84-.811-1.01.625-1.84 1.5-1.84 1.949 0 .446.828.811 1.84.811s1.84-.877 1.84-1.949zm100.2-7.379c-1.58-2.55-2.68-2.08-2.681 1.156 0 1.58.842 2.35 1.87 1.713 1.03-.636 1.39-1.93.811-2.869zm155.56-6.599c0-6.24-7.18-19-10.683-19.033-.713 0-2.18 2.83-3.262 6.28-2.89 9.23 2.71 19.4 10.725 19.452 2.48.022 3.22-1.51 3.22-6.698zm-123.28 2.126c0-1.52-1.24-2.76-2.76-2.76-4.79 0-3.24 3.63 2.3 5.375.253.08.46-1.1.46-2.615zm211.6-10.011c0-.952-.828-2.24-1.84-2.869s-1.84.154-1.84 1.731.828 2.87 1.84 2.869 1.84-.779 1.84-1.731zm-112.24-7.36c0-.952-.828-2.24-1.84-2.869s-1.84.154-1.84 1.731.828 2.87 1.84 2.869 1.84-.779 1.84-1.731zm-47.899-11.26c-2.82-5.27-5.76-4.4-3.312.974 1.14 2.5 2.78 4.1 3.646 3.568s.717-2.58-.334-4.542zm53.598-5.56c-2.12-2.87-3.86-5.98-3.859-6.908 0-3.06-4.64-5.66-7.23-4.06-3.5 2.16-1.02 7.44 3.492 7.44 2.73 0 3.74 1.2 3.738 4.469 0 2.46 1.45 5.92 3.22 7.689 3.07 3.07 3.25 3.06 3.859-.095.351-1.82-1.1-5.66-3.22-8.534zm-445.88-1.343c1.1-3.31-2.7-2.62-3.983.729-.688 1.79-.276 2.63 1.068 2.185 1.2-.401 2.51-1.71 2.915-2.914zm309.54 1.495c0-1.01-.877-1.84-1.949-1.84s-1.44.828-.811 1.84 1.5 1.84 1.949 1.84c.446 0 .811-.828.811-1.84zm119.6-7.36c0-1.01.207-2.38.46-3.045s-.989-1.42-2.76-1.677c-3.6-.529-3.67-.422-2.103 3.651 1.23 3.21 4.4 3.98 4.403 1.071zm-241.13-8.28c-.033-3.26-.328-3.16-2.57.897-1.39 2.52-2.09 5.3-1.545 6.176 1.37 2.21 4.16-2.59 4.115-7.073zm-116.75 4.6c.625-1.01-.154-1.84-1.731-1.84s-2.87.828-2.869 1.84.779 1.84 1.731 1.84 2.24-.828 2.869-1.84zm56.233-1.953c4.28-4.28 4.1-9.68-.371-10.538-4.13-.796-8.94 4.51-8.942 9.862 0 5.55 4.14 5.85 9.313.676zm-13.884-2.809c.038-4.57 4.83-13 11.854-20.787 3.08-3.43 5.6-7.02 5.597-7.996s1.67-4.11 3.713-6.981c2.1-2.96 2.95-5.69 1.955-6.302-.967-.598-3.26 1.12-5.093 3.827s-5.61 7.19-8.394 9.976-5.06 6.25-5.06 7.711-3.41 6.13-7.576 10.378c-7.37 7.51-7.48 7.83-4.274 11.377 3.89 4.3 7.24 3.75 7.28-1.203zm34.01 2.463c0-2.16-2.68-1.62-3.45.69-.38 1.14.242 1.76 1.38 1.38 1.14-.38 2.07-1.31 2.07-2.07zm159.75-3.492c-.738-4.96-6.16-8.69-8.8-6.052-1.27 1.27-.959 3.18.974 5.939 3.72 5.32 8.61 5.39 7.827.113zm-290.39-1.785c0-1.01-.828-1.33-1.84-.703s-1.84 1.96-1.84 2.977.828 1.33 1.84.703c1.01-.626 1.84-1.96 1.84-2.977zm391.92 1.137c0-1.52-.828-2.76-1.84-2.76s-1.84 1.24-1.84 2.76.828 2.76 1.84 2.76 1.84-1.24 1.84-2.76zm14.72 1.071c0-.929.503-3 1.117-4.6.842-2.2-.062-2.91-3.68-2.911-5.46 0-5.68.481-2.514 5.545 2.39 3.82 5.08 4.86 5.077 1.966zm-333.62-4.151c4.96-4.66 5.56-8.88 1.241-8.879-3.61 0-7.88 5.18-7.964 9.66-.077 4.25 1.57 4.06 6.723-.781zm91.403 1.241c.583-1.52.257-2.76-.723-2.76s-1.78 1.24-1.782 2.76.325 2.76.723 2.76 1.2-1.24 1.782-2.76zm290.05-3.68c-2.37-2.52-4.72-4.17-5.228-3.665s1.02 2.98 3.388 5.505 4.72 4.17 5.228 3.665-1.02-2.98-3.388-5.505zm-396.42-.76c-.68-1.1-2.44-2-3.903-2-2.2 0-2.27.643-.398 3.634 1.32 2.12 2.95 2.95 3.903 2 .899-.899 1.08-2.53.398-3.634zm239.08-3.876c-1.03-1.67-1.72-1.62-2.846.212-1.94 3.14-.034 6.22 2.364 3.825 1.01-1.01 1.23-2.83.482-4.037zm-154.87-1.739c3.12-5.28 3.1-5.58-.646-9.323-5.22-5.22-9.14-1.94-9.142 7.643 0 5.62.697 7.14 3.283 7.135 1.81 0 4.73-2.46 6.505-5.455zm25.837 2.695c.583-1.52.257-2.76-.723-2.76s-1.78 1.24-1.782 2.76.325 2.76.723 2.76 1.2-1.24 1.782-2.76zm-115.34-10.448c2.2-4.37 4.99-10.6 6.203-13.932 1.59-4.33 3.34-5.98 6.357-5.98 2.95 0 8.08-4.62 17.717-15.96 17.3-20.4 17.7-20.8 32.419-30.75 4.3-2.92 7.82-5.52 7.82-5.765 0-.977-15.7 5.04-17.925 6.845-2.2 1.83-3.13.697-2.429-2.981.177-.93-.967-.622-2.542.685s-2.86 3.87-2.864 5.698c0 3.97-8.82 11.4-11.54 9.719-1.1-.683-1.36-.285-.595.945.722 1.17.4 2.12-.715 2.124-2.67 0-18.1 16.9-23.35 25.45-6.65 11-14.7 26.6-16.264 31.575-2.19 7.05 2.8 2.09 7.709-7.673zm13.475 6.77c3.54-6.62 1.35-7.38-2.499-.866-1.78 3-2.49 5.46-1.594 5.463s2.74-2.07 4.093-4.597zm25.416-.808c.46-1.38-.23-2.07-1.61-1.61-1.33.443-2.78 1.89-3.22 3.22-.46 1.38.23 2.07 1.61 1.61 1.33-.443 2.78-1.89 3.22-3.22zm31.181-4.255c8.19-8.74 8.82-18.7.921-14.515-8.03 4.3-13.3 14.4-8.957 17.247 3.06 2.03 3.82 1.77 8.036-2.732zm299.63-.882c-1.87-1.87-3.41.946-1.879 3.429 1.16 1.88 1.59 1.88 2.216.007.426-1.28.275-2.82-.337-3.436zm-337.83-2.338c1.57-2.94 1.4-3.68-.855-3.68-1.55 0-2.82.346-2.825.77 0 .423-.502 2.08-1.117 3.68-1.62 4.23 2.47 3.57 4.797-.77zm207.5 1.495c-.401-1.2-1.71-2.51-2.915-2.914-1.34-.448-1.76.393-1.068 2.185 1.28 3.34 5.09 4.04 3.983.729zm114.5-4.255c0-1.52-.828-2.76-1.84-2.76s-1.84 1.24-1.84 2.76.828 2.76 1.84 2.76 1.84-1.24 1.84-2.76zm29.605-2.451c-.992-1.85-3.09-4.44-4.665-5.745-2.38-1.98-2.86-1.89-2.86.507 0 1.58 1.84 4.17 4.089 5.745 5.23 3.66 5.63 3.6 3.436-.507zm77.114 2.648c0-.398-1.28-1.22-2.856-1.819-1.64-.628-2.38-.32-1.731.723 1.08 1.75 4.59 2.59 4.587 1.096zm-419.49-4.337c.014-.759.524-3.24 1.135-5.52.65-2.42.285-4.14-.88-4.14-2.63 0-6.28 6.94-4.856 9.238 1.31 2.12 4.56 2.42 4.602.422zm403.85-3.172c-4.05-2.49-8.52-4.56-9.945-4.591-3.99-.089 2.99 6.92 7.837 7.869 8.73 1.71 9.15 1.06 2.108-3.279zm-412.62-5.47c5.7-7.15 6.09-8.38 2.646-8.378-2.59 0-10.5 9.64-10.466 12.805 0 3.51 2.71 1.98 7.82-4.427zm187.08 3.746c1.47-1.78 1.54-2.97.225-3.789-2.57-1.59-5.61.435-5.609 3.733 0 3.38 2.6 3.4 5.384.055zm-134.99-11.938c-1.9-3.07-4.36-2.44-6.575 1.692-3.03 5.66-.217 8.38 4.147 4.013 2.02-2.02 3.12-4.59 2.428-5.705zm111.64-1.05c.478-2.5.16-4.11-.706-3.571-1.52.942-2.29 8.12-.869 8.116.388 0 1.1-2.04 1.574-4.544zm222.2 3.367c0-1.31-4.68-5.22-9.799-8.193-2.98-1.73-3.13-1.53-1.357 1.792 2.7 5.05 11.2 9.9 11.157 6.401zm-207.92-3.544c0-2.86-4.08-8.13-5.575-7.205-1 .62-.782 2.54.535 4.652 2.11 3.38 5.04 4.86 5.04 2.554zm-151.16-5.303c.407-2.1-.256-2.98-1.84-2.455-1.36.453-2.76 2.3-3.111 4.104-.407 2.1.256 2.98 1.84 2.455 1.36-.453 2.76-2.3 3.111-4.104zm-49.395-3.943c0-.35-1.24-.16-2.76.422-1.52.583-2.76 1.9-2.76 2.928 0 1.08 1.17.898 2.76-.422 1.52-1.26 2.76-2.58 2.76-2.928zm62.406-11.332c.422-.253.211-1.02-.467-1.694-1.44-1.44-10.4 6.52-10.419 9.235 0 1.01 2.28-.167 5.06-2.621 2.78-2.45 5.4-4.67 5.827-4.921zm-54.126 1.38c1.83-2.02 2.92-3.68 2.41-3.68s-2.42 1.66-4.25 3.68-2.92 3.68-2.41 3.68 2.42-1.66 4.25-3.68zm302.68.811c0-1.58-.828-2.36-1.84-1.731-1.01.625-1.84 1.92-1.84 2.869 0 .952.828 1.73 1.84 1.731s1.84-1.29 1.84-2.869zm58.547-9.078c-2.19-2.52-4.39-4.18-4.883-3.691-1.12 1.12 5.22 8.28 7.328 8.278.849 0-.252-2.06-2.445-4.587zm-311.13-3.358c-1.28-3.82-5.92-2.33-6.545 2.108-.546 3.86-.213 4.07 3.332 2.175 2.17-1.16 3.61-3.09 3.213-4.283zm-102.54-24.385c0-.506-1.66-.034-3.68 1.05-2.02 1.08-3.68 2.38-3.68 2.89s1.66.034 3.68-1.05c2.02-1.08 3.68-2.38 3.68-2.889zm-43.815-.207c-1.33-.532-2.92-.466-3.527.145-.611.611.475 1.05 2.415.966 2.14-.088 2.58-.524 1.112-1.112zm8.855-5.888c0-.894-1.66-2.06-3.68-2.588-2.39-.625-3.68-.057-3.68 1.625 0 1.42 1.66 2.59 3.68 2.588s3.68-.731 3.68-1.625zm111.32-9.415c.626-1.01-.154-1.84-1.731-1.84s-2.87.828-2.869 1.84.779 1.84 1.731 1.84 2.24-.828 2.869-1.84zm-140.92-6.9c3.11-1.77 5.66-3.84 5.669-4.6.017-2.04-5.11-1.68-6.428.46-.625 1.01-2.64 1.84-4.483 1.84s-4.38 1.24-5.637 2.76c-1.91 2.3-1.66 2.76 1.466 2.76 2.07 0 6.3-1.45 9.414-3.22zm67.307-.439c.645-1.04-.094-1.35-1.731-.723-3.19 1.22-3.77 2.54-1.124 2.542.952 0 2.24-.819 2.856-1.819zm-11.947-37.849c0-.446-.828-.811-1.84-.811s-1.84.877-1.84 1.949.828 1.44 1.84.811 1.84-1.5 1.84-1.949zm-66.779-29.098c2.7-2.7-1.35-2.97-7.067-.467l-6.194 2.711 6.054-.546c3.33-.3 6.57-1.06 7.207-1.698zm98.058-10.002c12.2-.913 24.2-2.88 28.252-4.634 3.9-1.68 8.99-2.57 11.299-1.994 2.42.607 4.8.09 5.61-1.215 1.53-2.47-11.6-1.59-29.521 1.967-5.06 1.01-28.8 2.61-52.857 3.564-24 .952-45.1 2.58-46.92 3.607-3.73 2.14 49.1 1.33 84.137-1.295zm-21.033-29.996c1.8-2.92-2.3-4.92-7.899-3.846-4.5.861-4.58 1.06-1.369 3.402 4.13 3.02 7.57 3.19 9.268.444zm-52.197-1.832c3.05-1.63 3.3-2.36 1.259-3.652-3.78-2.4-5.31-2.02-5.309 1.315 0 2.47-.488 2.58-2.804.658-1.54-1.28-3.38-1.75-4.087-1.045-1.28 1.28 2.77 4.68 5.632 4.734.826.016 3.21-.889 5.309-2.01zm22.63.198c.626-1.01-.154-1.84-1.731-1.84s-2.87.828-2.869 1.84.779 1.84 1.731 1.84 2.24-.828 2.869-1.84zm37.72-3.789c0-1.96-1.24-3.57-2.76-3.571-2.73 0-3.86 5.65-1.583 7.923 1.92 1.92 4.34-.511 4.343-4.352zm-86.479-.811c0-1.52-.727-2.76-1.615-2.76s-2.64 1.24-3.905 2.76c-1.91 2.31-1.65 2.76 1.615 2.76 2.24 0 3.9-1.17 3.905-2.76zm-11.96-.92c-.625-1.01-1.5-1.84-1.949-1.84-.446 0-.811.828-.811 1.84s.877 1.84 1.949 1.84 1.44-.828.811-1.84zm-8.28-1.84c0-1.01-1.66-1.84-3.68-1.84s-3.68.828-3.68 1.84 1.66 1.84 3.68 1.84 3.68-.828 3.68-1.84zm84.639-2.913c0-1.6-.983-2.59-2.185-2.185-3.41 1.14-3.98 5.1-.728 5.098 1.6 0 2.91-1.31 2.913-2.913zm-111.32-2.607c-.625-1.01-1.92-1.84-2.869-1.84-.952 0-1.73.828-1.731 1.84s1.29 1.84 2.869 1.84 2.36-.828 1.731-1.84zm96.599-5.52c0-1.01-.828-1.84-1.84-1.84s-1.84.828-1.84 1.84.828 1.84 1.84 1.84 1.84-.828 1.84-1.84zm37.59-1.63c.554-.896-1.07-2.03-3.615-2.513-4.6-.879-7.34.72-5.098 2.966 1.73 1.73 7.55 1.43 8.713-.453zm546.03-3.307c-1.33-.532-2.92-.466-3.527.145-.611.611.475 1.05 2.415.966 2.14-.088 2.58-.524 1.112-1.112zm-624.1-7.943c0-1.01-.828-1.84-1.84-1.84s-1.84.828-1.84 1.84.828 1.84 1.84 1.84 1.84-.828 1.84-1.84zm3.847-53.217c-1.43-.903-3.7-1.22-5.06-.695-3.89 1.49-2.9 2.4 2.593 2.365 3.68-.021 4.35-.475 2.467-1.67zm402.79.68c0-2.24-10.3-13.7-12.26-13.702-3.46 0 1.16 10.1 5.645 12.34 4.64 2.32 6.62 2.73 6.615 1.361zm237.36-10.942c2.38-2.53 3.91-4.6 3.401-4.6s-2.86 2.07-5.241 4.6-3.91 4.6-3.401 4.6 2.86-2.07 5.241-4.6zm-616.39-.92c0-1.01-1.29-1.84-2.869-1.84s-2.36.828-1.731 1.84 1.92 1.84 2.869 1.84 1.73-.828 1.731-1.84zm92.919 0c-.625-1.01-4.76-1.84-9.2-1.84s-8.58-.828-9.2-1.84-4.37-1.84-8.331-1.84c-5.26 0-6.94-.664-6.248-2.465 1.38-3.59-4.31-7.9-6.949-5.263-1.51 1.51-1.41 2.83.381 4.983 2.08 2.51 1.86 3.08-1.55 3.973-8.22 2.15-3.48 4.16 11.197 4.763 8.35.341 18.7.789 23.108.994 4.9.232 7.49-.328 6.791-1.466zm-51.517-3.683c1.29-2.08-6.02-5.31-15.642-6.91-3.54-.589-8.92-2.58-11.96-4.432-6.62-4.03-16.7-4.44-18.094-.75-1.26 3.28 3.41 7.65 5.159 4.824 2.06-3.32 8.95-2.13 20.342 3.533 11.4 5.65 18.2 6.92 20.195 3.734zm-66.241-3.677c-.625-1.01-1.5-1.84-1.949-1.84-.446 0-.811.828-.811 1.84s.877 1.84 1.949 1.84 1.44-.828.811-1.84zm67.416-11.101c-4.34-3.62-9.62-4.69-11.893-2.408-2.53 2.53 3.16 6.15 9.563 6.088l6.675-.061-4.344-3.619zm458.82-3.619c.626-1.01.309-1.84-.703-1.84s-2.35.828-2.977 1.84c-.626 1.01-.309 1.84.703 1.84s2.35-.828 2.977-1.84zm-485.76-3.68c-.625-1.01-2.38-1.84-3.897-1.84s-2.25.828-1.623 1.84c.626 1.01 2.38 1.84 3.897 1.84s2.25-.828 1.623-1.84zm552.91-10.156c14.2-3.74 22.1-9.11 9.069-6.169-4.4.989-8.9 2.55-10.007 3.461-1.1.915-5.5 2.22-9.773 2.905s-8.29 2.08-8.922 3.107c-1.25 2.02.404 1.74 19.634-3.305zm7.36-83.792c0-1.07-.828-1.44-1.84-.811s-1.84 1.5-1.84 1.949c0 .446.828.811 1.84.811s1.84-.877 1.84-1.949zm-23.92-5.862c0-1.03-1.22-.827-2.76.451-1.52 1.26-2.76 3.12-2.76 4.131 0 1.03 1.22.827 2.76-.451 1.52-1.26 2.76-3.12 2.76-4.131zm-47.84-7.938c0-1.58-.828-2.36-1.84-1.731s-1.84 1.92-1.84 2.869.828 1.73 1.84 1.731 1.84-1.29 1.84-2.869zm49.68-18.4c0-.446-1.29-.811-2.869-.811s-2.35.842-1.713 1.87c1.05 1.7 4.58.884 4.581-1.059zm-7.36-6.44c0-1.07-.828-1.44-1.84-.811s-1.84 1.5-1.84 1.949c0 .446.828.811 1.84.811s1.84-.877 1.84-1.949zm0-7.251c0-1.01-.779-1.84-1.731-1.84s-2.24.828-2.869 1.84c-.625 1.01.154 1.84 1.731 1.84s2.87-.828 2.869-1.84zm9.2-5.629c0-.952-1.24-1.73-2.76-1.731-2.84 0-3.66 2.17-1.583 4.243 1.47 1.47 4.34-.192 4.343-2.512zm-258.33-3.073c-.611-.611-1.05.475-.966 2.415.088 2.14.524 2.58 1.112 1.112.532-1.33.466-2.92-.145-3.527zm-90.961-2.764c-1.36-1.36-1.6-.647-.805 2.414.651 2.49 1.48 3.32 1.944 1.944.443-1.33-.07-3.29-1.14-4.358zm165.29-79.817c0-2.42-.393-4.4-.873-4.396-1.59 0-6.49 10.8-6.426 14.168.098 5.3 7.3-4.34 7.299-9.773zm-110.4-1.701c0-1.48-1.04-2.68-2.3-2.667-4.2.051-7.04 2.99-5.858 6.065.904 2.36 1.95 2.62 4.662 1.168 1.92-1.03 3.5-3.08 3.496-4.566zm320.16 679.02c-3.22-3.43-3.61-4.6-1.536-4.6 1.53 0 3.73 2.07 4.881 4.6 1.15 2.53 1.84 4.6 1.536 4.6s-2.5-2.07-4.881-4.6zm-75.674-55.659c-2.29-2.92-2.22-2.98.695-.695 1.77 1.39 3.22 2.84 3.22 3.22 0 1.51-1.51.54-3.915-2.525zm-468.96-81.889c0-.506 1.24-1.95 2.76-3.211s2.76-1.88 2.76-1.371-1.24 1.95-2.76 3.211-2.76 1.88-2.76 1.371zm636.63-57.381c0-.446.828-1.32 1.84-1.949 1.01-.625 1.84-.26 1.84.811 0 1.07-.828 1.95-1.84 1.949s-1.84-.365-1.84-.811zm-747.03-11.856c0-1.65 5.53-4.5 6.62-3.406.315.315-1.04 1.58-3.023 2.819s-3.6 1.5-3.596.587zm638.47-31.492c0-1.01.365-1.84.811-1.84s1.32.828 1.949 1.84c.625 1.01.26 1.84-.811 1.84-1.07 0-1.95-.828-1.949-1.84zm-670.58-36.62c-3.32-1.3-3.25-1.49.92-2.606 6.57-1.76 20.1-1.52 20.141.356 0 3.22-14.6 4.78-21.061 2.25zm602.64-19.346c-.08-1.94.355-3.03.966-2.415.611.612.677 2.2.145 3.527-.587 1.47-1.02 1.03-1.112-1.112zm70.272-57.384c.611-.611 2.2-.677 3.527-.145 1.47.587 1.03 1.02-1.112 1.112-1.94.08-3.03-.355-2.415-.966zm-627.93-70.838c-3.54-2.04-4.92-3.25-3.059-2.679 1.86.57 6.8 1.58 10.973 2.251 6.05.968 6.86 1.5 3.979 2.627-4.93 1.93-4.65 1.98-11.893-2.199zm-30.36-8.759c-4.05-1.84-8.59-4.93-10.088-6.86-2.68-3.45-2.66-3.45 1.376-.01 2.26 1.93 8.45 5 13.768 6.84s8.01 3.35 5.984 3.358-6.99-1.49-11.04-3.328zm33.12-.251c-.625-1.01-3.41-1.84-6.197-1.84-6.53 0-13.2-4.41-9.013-5.997 3.03-1.16 23.4 6.05 23.458 8.297.047 2.06-6.93 1.67-8.249-.46zm-30.085-10.311c-1.37-1.55-2.1-3.19-1.635-3.661 1.4-1.4 10.6 2.69 10.561 4.727 0 2.85-6.1 2.12-8.926-1.066zm32.155 1.648c-.577-.577-.61-1.76-.071-2.633 1.29-2.09 6.28-2.04 6.281.06 0 2.03-4.77 4.01-6.21 2.573zm-45.309-4.217c-4.32-1.38-4.24-1.48 1.489-1.657 3.63-.109 5.63.56 4.951 1.657-.625 1.01-1.3 1.76-1.489 1.657-.193-.101-2.42-.846-4.951-1.657zm80.959-11.04c0-1.01 1.24-1.84 2.76-1.84s2.76.828 2.76 1.84-1.24 1.84-2.76 1.84-2.76-.828-2.76-1.84zm573.16-14.72c.625-1.01 4.19-1.76 7.929-1.657 6.1.165 6.32.333 2.191 1.657-6.65 2.13-11.4 2.13-10.12 0zm46.02-90.853c1.74-2.66 3.51-4.83 3.936-4.827 1.33 0-2.95 7.09-5.077 8.404-1.11.687-.598-.923 1.142-3.578zm6.992-9.696c2.55-3.03 2.77-4.15.92-4.808-1.73-.615-1.11-2.27 2.188-5.859 2.53-2.75 4.19-5.49 3.68-6.079s.185-1.45 1.535-1.897c1.69-.563 2.25.535 1.796 3.527-.374 2.47-1.73 4.11-3.141 3.81-1.57-.338-2.08.51-1.394 2.3.598 1.56.237 2.84-.803 2.835s-1.45.717-.906 1.594-.858 3.15-3.111 5.06l-4.097 3.466zm-101.36-10.916c1.75-1.82 3.57-2.92 4.056-2.436s-.945 1.98-3.176 3.316c-3.88 2.33-3.92 2.29-.88-.88zm86.063-6.404c0-5.87 1.23-5.91 7.82-.246 4.69 4.02 3.96 5.88-2.3 5.875-4.93 0-5.52-.601-5.52-5.629zm-47.84-18.843c0-5.58.487-5.84 5.243-2.874 8.2 5.12 23.9-8.5 21.417-18.608-3.51-14.4-3.56-13.5.628-11.253 2.16 1.16 4.73 5.26 5.819 9.32 1.07 3.99 2.76 7.75 3.743 8.357.985.609 1.79 1.75 1.79 2.542 0 1.44-8.53 6.25-11.96 6.736-1.01.144-4.92 1.63-8.681 3.296s-8.36 3.04-10.212 3.035-4.36.994-5.579 2.208c-1.72 1.72-2.21 1.1-2.208-2.76zm37.558 1.231c.595-1.55 1.08-3.52 1.082-4.374 0-3.41 6.64-2.61 9.66 1.173 1.77 2.21 3.22 4.34 3.22 4.722s-3.38.834-7.522.999c-6.07.242-7.31-.244-6.44-2.52zm12.122-15.398c0-1.01.365-1.84.811-1.84s1.32.828 1.949 1.84.26 1.84-.811 1.84c-1.07 0-1.95-.828-1.949-1.84z"/> + <path fill="#ead716" d="m435.36 825.6c-2.1-2.32-5.36-8.36-7.233-13.415-2.5-6.76-7.16-12.9-17.558-23-13.1-12.8-16.8-18.3-23.956-36.334-1.11-2.79-2.71-11.3-3.549-18.866s-2.73-17.9-4.213-23c-9.53-32.6-10.8-45.8-5.637-60.826 3.13-9.21 2.51-13.7-1.878-13.693-1.53 0-3.3-2.27-3.924-5.06-.628-2.78-2.54-9.2-4.245-14.26-2.6-7.71-3.84-9.2-7.634-9.2-4.02 0-4.49.726-4.168 6.44.199 3.54.899 9.45 1.556 13.123.735 4.12.42 7.16-.822 7.929-1.21.749-2.02 7.64-2.016 17.278 0 17.7-5.77 48.8-13.708 73.954-2.71 8.58-6.53 22.4-8.487 30.828-5.6 24-20.5 50.3-33.28 58.767-5.79 3.83-7.56 4.26-9.832 2.37-1.52-1.27-2.77-3.86-2.773-5.756 0-6.02-6.66-3.99-11.318 3.445l-4.322 6.9-.564-10.974c-.561-10.9 5.49-65.2 8.838-79.186.967-4.05 1.78-9.94 1.801-13.085.038-5-.495-5.62-4.211-4.911-3.21.614-5.55 3.82-9.528 13.085-2.9 6.75-6.75 14.2-8.557 16.574-3.26 4.26-3.28 4.21-2.277-5.52 3.66-35.7 6.38-53.6 8.872-58.38 4.09-7.9 3.69-11.3-1.275-10.76-3.23.342-4.11-.47-3.994-3.702.195-5.53-2.57-5.26-4.748.465-.963 2.53-5.5 8.35-10.074 12.928s-8.32 9.11-8.324 10.08-1.99 2.26-4.426 2.867c-4.84 1.22-11.5 7.52-12.457 11.767-.696 3.13-1.19 3.86-9.871 14.61-3.6 4.45-9.03 13.1-12.075 19.254s-6.22 12-7.063 13.062-3.58 7.66-6.095 14.705c-2.51 7.04-5.39 13.1-6.391 13.407-2.86.953-4.04-13.8-2.314-28.966 1.55-13.6 10.5-44 18.146-61.332 3.92-8.92 5.57-19.6 2.222-14.299-.917 1.45-2.95 2.06-4.651 1.407-3.64-1.4-15.2 5.53-26.863 16.06-4.6 4.16-11.5 10-15.387 13.084-10.7 8.39-14 12.2-18.052 20.758-3.88 8.16-9.24 12.5-12.729 10.369-3.84-2.37 2.94-41.4 9.385-54.099 1.81-3.56 5.92-11.7 9.13-18.195 3.21-6.45 7.04-12.9 8.507-14.391 3.58-3.58 3.4-5.3-.245-2.278-2.59 2.15-2.77 1.69-1.68-4.139 1.14-6.08.826-6.69-4.295-8.479-6.03-2.1-7.68-1.39-7.677 3.315 0 4.28-5.29 8.52-12.565 10.072-8.72 1.85-55.8 31.4-67.849 42.532-4.55 4.21-8.91 5.96-7.589 3.034 4.69-10.4 21.5-35.8 35.947-54.554 18.6-24.1 54.1-54.5 63.575-54.465 1.54 0 3.31-1.31 3.923-2.911 1.26-3.27 1.53-13.6.36-13.649-.785 0-23.4 9.61-37.883 16.096-21.5 9.63-40.8 13.7-66.925 14.003-19 .243-32.4-1.98-54.023-8.985-1.25-.405-1.76-2.07-1.128-3.709.843-2.2 3.12-2.84 8.709-2.48 31.1 2.03 78.5-11.8 81.464-23.732 1.51-6.01.244-6.53-10.38-4.253-5.18 1.11-17.1 2.02-26.584 2.02s-26.6 1.65-38.089 3.661c-26 4.54-35.3 4.7-38.637.64-1.8-2.18-1.92-3.26-.414-3.77 1.16-.391 7.22-4.81 13.462-9.821 6.24-5.01 12.7-9.12 14.449-9.135 3.6-.03 28.8-13.4 32.818-17.471 1.51-1.51 4.65-3.22 6.992-3.805s4.97-2.57 5.851-4.399c2-4.17 25.4-22.1 28.844-22.138 1.4 0 4.12-1.74 6.047-3.876 4.09-4.53 11.5-8.4 29.265-15.387 15.9-6.26 19.9-9.4 17.416-13.977-1.17-2.18-1.15-3.73.059-4.477 2.78-1.72 2.21-4.6-.915-4.603-1.52 0-2.76 1.24-2.76 2.76 0 3.15-4.82 3.47-15.374 1.026-5.09-1.18-9.2-.902-14.567.991-4.11 1.45-9.03 2.14-10.934 1.538-1.9-.604-4.64-.122-6.078 1.073-1.84 1.53-7.95 1.83-20.612 1.007-9.9-.641-21.5-1.17-25.815-1.185s-7.82-.698-7.82-1.525 3.93-2.98 8.74-4.782c15.2-5.72 24.7-11.5 28.257-17.345 3.81-6.27 5.79-6.6 22.802-3.802 6.07.998 27.6 1.81 47.84 1.799 30.1-.013 39.3-.651 50.6-3.529 13.8-3.5 13.8-3.51 5.169-3.649-4.75-.075-9.14.695-9.772 1.71-.752 1.22-2.42 1.16-4.906-.171-2.67-1.43-4.34-1.44-5.733-.049-1.4 1.4-2.76 1.31-4.684-.29-1.5-1.24-4.45-2.35-6.576-2.469-21.2-1.17-58.4-.19-61.22 1.616-2.44 1.58-33.5-1.33-47.517-4.457-5.06-1.13-13-3.95-17.618-6.266s-16.2-7.27-25.76-11.003c-19.2-7.51-34.8-15.4-34.822-17.542 0-1.89 15.4-6.62 26.68-8.215 23.9-3.36 41.9-2.42 40.156 2.1-.544 1.42-.073 2.58 1.047 2.579s2.04-1.19 2.037-2.636c0-3.49 5.6-5.11 15.591-4.496 5.76.354 9.21-.457 11.756-2.76 3.48-3.15 23.5-7.17 26.617-5.334 1.89 1.12 17.8-3.21 17.794-4.844 0-2.3-5.75-9.37-7.612-9.37-1.04 0-6.25-2.9-11.586-6.44-7.65-5.08-11.6-6.46-18.712-6.558-4.96-.065-14-1.2-20.049-2.534l-11.04-2.415 5.52-2.202c3.04-1.21 9.45-2.67 14.261-3.243 7.4-.882 8.28-1.38 5.699-3.265-4.4-3.22-1.39-6.52 5.444-5.996 4.71.363 5.77-.188 5.335-2.767-.297-1.77.425-3.22 1.605-3.22 1.57 0 1.53-.74-.145-2.76-3.31-3.99-6.11-3.39-4.951 1.059.929 3.55.462 3.73-6.685 2.54-9.46-1.58-21.5-7.48-21.456-10.536.082-6.59 9-11.5 13.978-7.77 1.91 1.45 5.57 2.66 8.125 2.689s6.54 1.38 8.859 3.006c4.94 3.46 6.62 2.51 4.934-2.809-.67-2.11-2.78-3.82-4.731-3.819-1.94 0-6.86-1.34-10.937-2.968-5.82-2.33-7.99-2.49-10.077-.762-1.46 1.21-3.52 1.67-4.579 1.02-3.5-2.16-1.99-6.4 2.679-7.574 2.53-.635 4.6-1.89 4.6-2.795s1.66-1.64 3.68-1.641 3.68.817 3.68 1.815c0 2.17 11.9 7.38 16.824 7.385 1.99 0 4.44-2.09 5.7-4.84 2.18-4.8 2.34-4.83 16.984-3.704 14.4 1.11 44.2 7.85 51.571 11.671 2.02 1.05 6.69 2.45 10.366 3.114 10.2 1.84 10.1-2.1-.286-21.956-5.04-9.6-9.16-18.7-9.161-20.137s-2.48-4.51-5.52-6.759-5.52-5.08-5.52-6.306c0-2.08-3.66-6.87-23.46-30.693-5.95-7.16-7.83-11-7.845-15.96-.014-3.6-.549-8.51-1.189-10.899-1.04-3.88-.707-4.2 3.104-2.995 4.59 1.46 4.85 1.63 14.914 10.04 3.68 3.07 7.54 5.58 8.586 5.584s3.61 2.28 5.702 5.06c2.88 3.84 4.18 4.48 5.388 2.654 1.26-1.9 3.08-1.52 8.76 1.84 7.76 4.6 17.4 8.55 24.68 10.156 2.53.556 5.98 2.21 7.671 3.68s8.27 5.13 14.622 8.133 16.8 10.1 23.182 15.674c7.12 6.25 12.7 9.81 14.358 9.165 3.97-1.52 3.37-10.1-1.655-23.483-5.49-14.7-9.2-36.4-8.087-47.452.467-4.63.318-10.9-.331-13.946-1.14-5.34.718-11.3 4.521-14.4 1.21-.998 1.13-1.81-.226-2.375-3.94-1.63.3-27.3 6.959-42.104 1.87-4.16 3.32-11.8 3.346-17.53.022-5.59 1.17-11.8 2.548-13.8 1.47-2.13 2.56-8.75 2.622-16.049.209-22.6.352-24.2 1.993-22.448.881.961 4.67 10 8.411 20.148s7.47 19.7 8.283 21.22 2.05 5.44 2.754 8.645c.704 3.2 3.79 8.97 6.857 12.82 3.07 3.85 7.36 10.2 9.535 14.145 5.96 10.8 7.55 13.3 10.267 16.614 2.29 2.76 2.67 2.74 4.747-.264 3.99-5.76 11.8-26.7 15.917-42.822 4.57-17.8 3.78-24.8-3.105-27.956-5.85-2.67-5.83-5.16.051-5.162 6.39 0 11.3-5.6 12.847-14.525.702-4.16 1.9-7.56 2.659-7.555 1.91 0 5.65 8.59 5.654 12.966 0 2 1.25 3.59 2.825 3.593 2.22 0 2.42.76.927 3.547-3.8 7.1 3.12 13.2 7.041 6.161 1.15-2.06 1.13-4.38-.067-6.616-1.44-2.7-1.02-4.02 1.97-6.113 2.17-1.52 5.1-7.19 6.793-13.164 3.28-11.5 8.11-18.8 8.112-12.195 0 2.03 2.58 11.9 5.741 22.014 5.44 17.4 5.68 19.4 4.518 37.842-.956 15.2-.607 21.3 1.592 27.6 1.55 4.45 2.83 10.3 2.842 13.01.02 3.67 1.5 5.66 5.829 7.82 11.7 5.84 12.7 5.03 29.223-22.405 8.36-13.9 18.7-29.4 22.908-34.5s10-12.7 12.796-16.929c4.23-6.44 11.8-13.4 14.457-13.431.803 0-1.38 15.2-4.228 29.44l-3.127 15.634c-1.02 5.08-.851 5.3 2.11 2.848 3.04-2.52 3.15-1.01 2.118 28.526-.987 28.1-.768 31.7 2.235 36.226l3.329 5.034 7.187-7.361c3.95-4.05 10.5-9.61 14.608-12.368s10.5-7.38 14.18-10.289c6.07-4.74 12.4-5.45 9.722-1.084-.582.942-.067 1.71 1.144 1.713 2.03 0 12.6-8.42 23.774-18.914 7.15-6.73 27.4-20.5 28.527-19.412.546.546-1.84 5.04-5.296 9.999-8.24 11.8-22 39.4-28.744 57.748-2.96 8.04-7.12 18-9.23 22.145-3.38 6.63-4.07 16.7-1.325 19.458.882.882 13-5.47 26.188-13.702 5.06-3.16 11.3-6.76 13.8-8.001s8.33-5.18 12.88-8.765c9.66-7.6 15.6-11.1 18.835-11.142 1.28-.014 5.95-3.3 10.385-7.295 6.3-5.68 9.43-7.22 14.338-7.033 3.88.146 8.18-1.25 11.26-3.653 11.9-9.28 18.9-13.7 19.997-12.671.632.632.125 2.38-1.127 3.891-4.48 5.4-.88 6.5 5.997 1.831l6.993-4.752-2.225 4.274c-1.22 2.35-2.92 5.52-3.76 7.034-9.03 16.2-9.1 16.5-7.082 23.963 2.23 8.28 3.61 8.77 10.643 3.782 2.74-1.94 7.87-4.12 11.389-4.839 5.85-1.19 6.18-1.04 3.84 1.786-2.3 2.77-2.1 3 1.876 2.244 2.44-.465 5.89-1.42 7.66-2.127 4.66-1.85 3.95 1.46-1.386 6.478-2.53 2.38-4.5 5.22-4.36 6.301.474 3.81-4.75 13.9-7.186 13.934-1.36 0-1.89-.929-1.181-2.079.779-1.26.281-1.74-1.264-1.229-1.4.467-2.57 2.02-2.594 3.459-.073 4.16-2.84 10.9-4.473 10.889-.822 0-4.84 4.35-8.922 9.66s-12.5 15-18.766 21.62c-15.1 15.9-17.2 19.2-15.817 24.826 1.04 4.15 2.07 4.61 10.323 4.613 12.9 0 12.1 4.22-1.665 8.28-3.43 1.01-5.91 2.67-5.52 3.68.391 1.01 1.54 1.69 2.55 1.501 6.47-1.19 34.8-9.92 36.524-11.263 3.42-2.63 19.1-6.38 21.252-5.071 1.35.832 1.27 2.29-.245 4.715-2.97 4.76-.399 6.84 3.782 3.054 1.86-1.68 4.32-3.06 5.469-3.055 1.98 0 12.2-4.03 19.212-7.585 4.19-2.12 7.42-2.06 6.077.108-1.4 2.26-11.9 7.48-15.075 7.476-1.36 0-2.48 1.27-2.477 2.825 0 2.22.759 2.42 3.559.92 5.43-2.91 10.8-2.28 12.852 1.496 1.57 2.94 3.03 3.2 10.645 1.902 20.7-3.51 24.5-3.88 24.321-2.333-.079.897-5.67 6.4-12.42 12.22s-20.3 18-30.184 26.995c-15.9 14.6-45.3 34.8-68.572 47.278-4.05 2.16-8.6 6.31-10.12 9.215-1.52 2.9-3.4 5.76-4.192 6.342-1.58 1.17 6.62 5.38 10.471 5.379 1.33 0 4.48 1.62 6.988 3.589 3.82 3.01 7.81 3.64 24.628 3.885 20.6.303 44.4-1.88 60.329-5.54 4.94-1.13 9.31-1.74 9.703-1.339 1.74 1.74-2.18 6.42-11.634 13.898-9.48 7.5-11.8 8.39-34.373 12.994-16.1 3.29-28 6.9-35.648 10.808-6.3 3.23-12.6 5.87-13.991 5.866s-4.64 1.94-7.196 4.312c-4.16 3.85-7.07 4.45-27.234 5.588-12.4.702-23.3 1.71-24.136 2.237s-1.56 2.91-1.555 5.294c0 3.4 2.48 5.72 11.548 10.791 6.35 3.55 13.1 8.18 15.005 10.278s4.21 3.82 5.135 3.821c.923 0 4.39 2.07 7.708 4.6s6.86 4.6 7.872 4.6c1.88 0 7.93 5.91 7.931 7.75 0 .561-1.86 1.55-4.14 2.187l-4.14 1.167 4.344 3.648c5.23 4.39 9.46 4.72 9.456.735 0-1.6 1.04-2.56 2.3-2.139s2.32 2.61 2.348 4.855c.034 2.92 2.65 5.61 9.2 9.467 5.03 2.96 10.6 5.4 12.268 5.419 1.71.017 4.2 1.48 5.52 3.256 4.06 5.45 31.8 14.7 63.584 21.164 12.6 2.58 18.9 4.66 18.86 6.32 0 1.48-2.04 2.46-5.06 2.434-2.78-.02-12.9.86-22.54 1.955-22.3 2.54-54.3.966-70.97-3.491-12.8-3.4-13.1-3.4-17.3.004l-4.29 3.474 3.979 3.707c2.19 2.04 6.56 8.84 9.725 15.118 8.16 16.2 14.1 24.4 27.952 38.361l12.11 12.23-6.107 1.146c-6.73 1.26-17.6-.662-42.127-7.436-22.2-6.15-24.7-4.22-12.096 9.472 6.81 7.38 7.18 8.24 3.571 8.239-2.43 0-3.53.793-2.787 2 .68 1.1 2.9 1.57 4.929 1.035 2.87-.751 8.81 4.21 26.663 22.256 20.7 21 26.4 27.6 43.213 49.936 5.04 6.72 6.46 11.3 3.546 11.252-5.59 0-22.4-4.28-27.807-7.097-3.57-1.84-8.92-3.96-11.907-4.695-3.08-.761-4.54-1.89-3.38-2.604 1.12-.695-1.93-1.26-6.791-1.254l-8.834.01 2.915 7.36c1.6 4.05 5.23 11 8.054 15.507 5.66 8.97 5.42 12.3-.431 5.979-2.05-2.2-4.75-4.01-5.994-4.006s-6.15-3.1-10.899-6.9c-9.66-7.72-22.3-16.9-27.535-19.984-5.96-3.52-12.8-10.7-14.557-15.099-1.21-3.14-2.59-3.96-5.231-3.126-2.09.662-4.97-.069-6.899-1.748-10.3-8.95-16.9-13.9-18.737-13.862-3.84 0-2.08 10.2 4.437 25.631 5.95 14.1 19.2 56.4 19.289 61.477.036 3.26 10.8 24 13.568 26.058 3.9 2.96 10.2 16.7 10.766 23.334.41 5.18-.173 6.19-3.861 6.713-2.39.339-3.86-.163-3.275-1.115 1.27-2.05-12.2-13.3-15.892-13.299-1.41 0-7.88-4.27-14.368-9.491s-13.9-10.8-16.505-12.42-9.08-7.78-14.422-13.708-12.4-13.1-15.694-16.025c-3.29-2.89-8.29-8.59-11.128-12.681s-6.22-7.43-7.519-7.434c-4.24 0-6.78 13-6.991 35.678-.132 14.5.676 24.9 2.3 29.641 2.86 8.42 8.7 22.4 11.28 27.078 2.82 5.08 5.23 17.9 3.556 18.973-3.2 1.98-15.1-11.2-20.102-22.306-2.88-6.36-7.59-15.1-10.467-19.52-5.88-8.95-6.4-9.81-18.031-29.23-8.3-13.9-16.1-20.4-19.875-16.652-.967.967-1.64 12-1.492 24.468.26 22.2-2.45 55.3-5.117 62.506-1.29 3.48-1.46 3.46-5.155-.622zm139.2-90.409c0-3.47-6.72-9.18-9.084-7.717-1.08.665-1.96 3.23-1.956 5.7 0 3.76.894 4.49 5.52 4.491 3.4 0 5.52-.952 5.52-2.475zm-50.507-11.496c-1.71-1.71-4.4-5.08-5.988-7.505s-3.28-4-3.775-3.507 1.79 4.28 5.071 8.422 6.38 7.12 6.881 6.612c.504-.504-.48-2.32-2.189-4.023zm30.267.113c0-1.55-1.3-3.32-2.884-3.924-3.46-1.33-7.23 1.93-5.495 4.742 1.87 3.03 8.38 2.4 8.379-.817zm-24.004-8.38c-1.13-2.11-2.5-3.39-3.052-2.839-1.52 1.52.913 6.68 3.143 6.677 1.36 0 1.33-1.18-.091-3.838zm-95.257-2.081c-1.32-1.32-2.18-1.43-2.177-.276 0 2.46 2.18 4.63 3.404 3.404.523-.523-.029-1.93-1.227-3.128zm118.26-3.408c-1.58-2.55-2.68-2.08-2.681 1.156 0 1.58.842 2.35 1.87 1.713 1.03-.636 1.39-1.93.811-2.869zm-262.12-3.661c0-1.07-.828-1.44-1.84-.811-1.01.625-1.84 1.5-1.84 1.949s.828.811 1.84.811 1.84-.877 1.84-1.949zm100.2-7.379c-1.58-2.55-2.68-2.08-2.681 1.156 0 1.58.842 2.35 1.87 1.713 1.03-.636 1.39-1.93.811-2.869zm155.56-6.599c0-6.24-7.18-19-10.683-19.033-.713 0-2.18 2.83-3.262 6.28-2.89 9.23 2.71 19.4 10.725 19.452 2.48.022 3.22-1.51 3.22-6.698zm-123.28 2.126c0-1.52-1.24-2.76-2.76-2.76-4.79 0-3.24 3.63 2.3 5.375.253.08.46-1.1.46-2.615zm211.6-10.011c0-.952-.828-2.24-1.84-2.869s-1.84.154-1.84 1.731c0 1.58.828 2.87 1.84 2.869s1.84-.779 1.84-1.731zm-112.24-7.36c0-.952-.828-2.24-1.84-2.869s-1.84.154-1.84 1.731c0 1.58.828 2.87 1.84 2.869s1.84-.779 1.84-1.731zm-47.899-11.26c-2.82-5.27-5.76-4.4-3.312.974 1.14 2.5 2.78 4.1 3.646 3.568s.717-2.58-.334-4.542zm53.598-5.56c-2.12-2.87-3.86-5.98-3.859-6.908 0-3.06-4.64-5.66-7.23-4.06-3.5 2.16-1.02 7.44 3.492 7.44 2.73 0 3.74 1.2 3.738 4.469 0 2.46 1.45 5.92 3.22 7.689 3.07 3.07 3.25 3.06 3.859-.095.351-1.82-1.1-5.66-3.22-8.534zm-445.88-1.343c1.1-3.31-2.7-2.62-3.983.729-.688 1.79-.276 2.63 1.068 2.185 1.2-.401 2.51-1.71 2.915-2.914zm309.54 1.495c0-1.01-.877-1.84-1.949-1.84s-1.44.828-.811 1.84 1.5 1.84 1.949 1.84c.446 0 .811-.828.811-1.84zm119.6-7.36c0-1.01.207-2.38.46-3.045s-.989-1.42-2.76-1.677c-3.6-.529-3.67-.422-2.103 3.651 1.23 3.21 4.4 3.98 4.403 1.071zm-241.13-8.28c-.033-3.26-.328-3.16-2.57.897-1.39 2.52-2.09 5.3-1.545 6.176 1.37 2.21 4.16-2.59 4.115-7.073zm-116.75 4.6c.625-1.01-.154-1.84-1.731-1.84s-2.87.828-2.869 1.84.779 1.84 1.731 1.84 2.24-.828 2.869-1.84zm56.233-1.953c4.28-4.28 4.1-9.68-.371-10.538-4.13-.796-8.94 4.51-8.942 9.862 0 5.55 4.14 5.85 9.313.676zm-13.884-2.809c.038-4.57 4.83-13 11.854-20.787 3.08-3.43 5.6-7.02 5.597-7.996s1.67-4.11 3.713-6.981c2.1-2.96 2.95-5.69 1.955-6.302-.967-.598-3.26 1.12-5.093 3.827s-5.61 7.19-8.394 9.976-5.06 6.25-5.06 7.711-3.41 6.13-7.576 10.378c-7.37 7.51-7.48 7.83-4.274 11.377 3.89 4.3 7.24 3.75 7.28-1.203zm34.01 2.463c0-2.16-2.68-1.62-3.45.69-.38 1.14.242 1.76 1.38 1.38 1.14-.38 2.07-1.31 2.07-2.07zm159.75-3.492c-.738-4.96-6.16-8.69-8.8-6.052-1.27 1.27-.959 3.18.974 5.939 3.72 5.32 8.61 5.39 7.827.113zm-290.39-1.785c0-1.01-.828-1.33-1.84-.703s-1.84 1.96-1.84 2.977.828 1.33 1.84.703c1.01-.626 1.84-1.96 1.84-2.977zm391.92 1.137c0-1.52-.828-2.76-1.84-2.76s-1.84 1.24-1.84 2.76.828 2.76 1.84 2.76 1.84-1.24 1.84-2.76zm14.72 1.071c0-.929.503-3 1.117-4.6.842-2.2-.062-2.91-3.68-2.911-5.46 0-5.68.481-2.514 5.545 2.39 3.82 5.08 4.86 5.077 1.966zm-333.62-4.151c4.96-4.66 5.56-8.88 1.241-8.879-3.61 0-7.88 5.18-7.964 9.66-.077 4.25 1.57 4.06 6.723-.781zm91.403 1.241c.583-1.52.257-2.76-.723-2.76s-1.78 1.24-1.782 2.76.325 2.76.723 2.76 1.2-1.24 1.782-2.76zm290.05-3.68c-2.37-2.52-4.72-4.17-5.228-3.665s1.02 2.98 3.388 5.505 4.72 4.17 5.228 3.665-1.02-2.98-3.388-5.505zm-396.42-.76c-.68-1.1-2.44-2-3.903-2-2.2 0-2.27.643-.398 3.634 1.32 2.12 2.95 2.95 3.903 2 .899-.899 1.08-2.53.398-3.634zm239.08-3.876c-1.03-1.67-1.72-1.62-2.846.212-1.94 3.14-.034 6.22 2.364 3.825 1.01-1.01 1.23-2.83.482-4.037zm-154.87-1.739c3.12-5.28 3.1-5.58-.646-9.323-5.22-5.22-9.14-1.94-9.142 7.643 0 5.62.697 7.14 3.283 7.135 1.81 0 4.73-2.46 6.505-5.455zm25.837 2.695c.583-1.52.257-2.76-.723-2.76s-1.78 1.24-1.782 2.76.325 2.76.723 2.76 1.2-1.24 1.782-2.76zm-115.34-10.448c2.2-4.37 4.99-10.6 6.203-13.932 1.59-4.33 3.34-5.98 6.357-5.98 2.95 0 8.08-4.62 17.717-15.96 17.3-20.4 17.7-20.8 32.419-30.75 4.3-2.92 7.82-5.52 7.82-5.765 0-.977-15.7 5.04-17.925 6.845-2.2 1.83-3.13.697-2.429-2.981.177-.93-.967-.622-2.542.685s-2.86 3.87-2.864 5.698c0 3.97-8.82 11.4-11.54 9.719-1.1-.683-1.36-.285-.595.945.722 1.17.4 2.12-.715 2.124-2.67 0-18.1 16.9-23.35 25.45-6.65 11-14.7 26.6-16.264 31.575-2.19 7.05 2.8 2.09 7.709-7.673zm13.475 6.77c3.54-6.62 1.35-7.38-2.499-.866-1.78 3-2.49 5.46-1.594 5.463s2.74-2.07 4.093-4.597zm25.416-.808c.46-1.38-.23-2.07-1.61-1.61-1.33.443-2.78 1.89-3.22 3.22-.46 1.38.23 2.07 1.61 1.61 1.33-.443 2.78-1.89 3.22-3.22zm31.181-4.255c8.19-8.74 8.82-18.7.921-14.515-8.03 4.3-13.3 14.4-8.957 17.247 3.06 2.03 3.82 1.77 8.036-2.732zm299.63-.882c-1.87-1.87-3.41.946-1.879 3.429 1.16 1.88 1.59 1.88 2.216.007.426-1.28.275-2.82-.337-3.436zm-337.83-2.338c1.57-2.94 1.4-3.68-.855-3.68-1.55 0-2.82.346-2.825.77 0 .423-.502 2.08-1.117 3.68-1.62 4.23 2.47 3.57 4.797-.77zm207.5 1.495c-.401-1.2-1.71-2.51-2.915-2.914-1.34-.448-1.76.393-1.068 2.185 1.28 3.34 5.09 4.04 3.983.729zm114.5-4.255c0-1.52-.828-2.76-1.84-2.76s-1.84 1.24-1.84 2.76.828 2.76 1.84 2.76 1.84-1.24 1.84-2.76zm29.605-2.451c-.992-1.85-3.09-4.44-4.665-5.745-2.38-1.98-2.86-1.89-2.86.507 0 1.58 1.84 4.17 4.089 5.745 5.23 3.66 5.63 3.6 3.436-.507zm77.114 2.648c0-.398-1.28-1.22-2.856-1.819-1.64-.628-2.38-.32-1.731.723 1.08 1.75 4.59 2.59 4.587 1.096zm-419.49-4.337c.014-.759.524-3.24 1.135-5.52.65-2.42.285-4.14-.88-4.14-2.63 0-6.28 6.94-4.856 9.238 1.31 2.12 4.56 2.42 4.602.422zm403.85-3.172c-4.05-2.49-8.52-4.56-9.945-4.591-3.99-.089 2.99 6.92 7.837 7.869 8.73 1.71 9.15 1.06 2.108-3.279zm-412.62-5.47c5.7-7.15 6.09-8.38 2.646-8.378-2.59 0-10.5 9.64-10.466 12.805 0 3.51 2.71 1.98 7.82-4.427zm187.08 3.746c1.47-1.78 1.54-2.97.225-3.789-2.57-1.59-5.61.435-5.609 3.733 0 3.38 2.6 3.4 5.384.055zm-134.99-11.938c-1.9-3.07-4.36-2.44-6.575 1.692-3.03 5.66-.217 8.38 4.147 4.013 2.02-2.02 3.12-4.59 2.428-5.705zm114.13-3.17c-.584-1.52-1.9-2.25-2.916-1.624-2.62 1.62-2.3 7.83.447 8.772 2.65.911 4.03-3.08 2.469-7.148zm219.71 5.487c0-1.31-4.68-5.22-9.799-8.193-2.98-1.73-3.13-1.53-1.357 1.792 2.7 5.05 11.2 9.9 11.157 6.401zm-207.92-3.544c0-2.86-4.08-8.13-5.575-7.205-1 .62-.782 2.54.535 4.652 2.11 3.38 5.04 4.86 5.04 2.554zm-151.16-5.303c.407-2.1-.256-2.98-1.84-2.455-1.36.453-2.76 2.3-3.111 4.104-.407 2.1.256 2.98 1.84 2.455 1.36-.454 2.76-2.3 3.111-4.104zm-49.395-3.943c0-.35-1.24-.16-2.76.422-1.52.583-2.76 1.9-2.76 2.928 0 1.08 1.17.898 2.76-.422 1.52-1.26 2.76-2.58 2.76-2.928zm62.406-11.332c.422-.253.211-1.02-.467-1.694-1.44-1.44-10.4 6.52-10.419 9.235 0 1.01 2.28-.167 5.06-2.621s5.4-4.67 5.827-4.921zm-54.126 1.38c1.83-2.02 2.92-3.68 2.41-3.68s-2.42 1.66-4.25 3.68-2.92 3.68-2.41 3.68 2.42-1.66 4.25-3.68zm302.68.811c0-1.58-.828-2.36-1.84-1.731s-1.84 1.92-1.84 2.869c0 .952.828 1.73 1.84 1.731s1.84-1.29 1.84-2.869zm58.547-9.078c-2.19-2.52-4.39-4.18-4.883-3.691-1.12 1.12 5.22 8.28 7.328 8.278.849 0-.252-2.06-2.445-4.587zm-311.13-3.358c-1.28-3.82-5.92-2.33-6.545 2.108-.546 3.86-.213 4.07 3.332 2.175 2.17-1.16 3.61-3.09 3.213-4.283zm-102.54-24.385c0-.506-1.66-.034-3.68 1.05-2.02 1.08-3.68 2.38-3.68 2.89s1.66.034 3.68-1.05c2.02-1.08 3.68-2.38 3.68-2.889zm-43.815-.207c-1.33-.532-2.92-.466-3.527.145-.611.611.475 1.05 2.415.966 2.14-.088 2.58-.524 1.112-1.112zm8.855-5.888c0-.894-1.66-2.06-3.68-2.588-2.39-.625-3.68-.057-3.68 1.625 0 1.42 1.66 2.59 3.68 2.588s3.68-.731 3.68-1.625zm111.32-9.415c.626-1.01-.154-1.84-1.731-1.84s-2.87.828-2.869 1.84.779 1.84 1.731 1.84 2.24-.828 2.869-1.84zm-140.92-6.9c3.11-1.77 5.66-3.84 5.669-4.6.017-2.04-5.11-1.68-6.428.46-.625 1.01-2.64 1.84-4.483 1.84s-4.38 1.24-5.637 2.76c-1.91 2.3-1.66 2.76 1.466 2.76 2.07 0 6.3-1.45 9.414-3.22zm67.307-.439c.645-1.04-.094-1.35-1.731-.723-3.19 1.22-3.77 2.54-1.124 2.542.952 0 2.24-.819 2.856-1.819zm-11.947-37.849c0-.446-.828-.811-1.84-.811s-1.84.877-1.84 1.949.828 1.44 1.84.811 1.84-1.5 1.84-1.949zm-66.779-29.098c2.7-2.7-1.35-2.97-7.067-.467l-6.194 2.711 6.054-.546c3.33-.3 6.57-1.06 7.207-1.698zm98.058-10.002c12.2-.913 24.2-2.88 28.252-4.634 3.9-1.68 8.99-2.57 11.299-1.994 2.42.607 4.8.09 5.61-1.215 1.53-2.47-11.6-1.59-29.521 1.967-5.06 1.01-28.8 2.61-52.857 3.564-24 .952-45.1 2.58-46.92 3.607-3.73 2.14 49.1 1.33 84.137-1.295zm-21.033-29.996c1.8-2.92-2.3-4.92-7.899-3.846-4.5.861-4.58 1.06-1.369 3.402 4.13 3.02 7.57 3.19 9.268.444zm-52.197-1.832c3.05-1.63 3.3-2.36 1.259-3.652-3.78-2.4-5.31-2.02-5.309 1.315 0 2.47-.488 2.58-2.804.658-1.54-1.28-3.38-1.75-4.087-1.045-1.28 1.28 2.77 4.68 5.632 4.734.826.016 3.21-.889 5.309-2.01zm22.63.198c.626-1.01-.154-1.84-1.731-1.84s-2.87.828-2.869 1.84.779 1.84 1.731 1.84 2.24-.828 2.869-1.84zm37.72-3.789c0-1.96-1.24-3.57-2.76-3.571-2.73 0-3.86 5.65-1.583 7.923 1.92 1.92 4.34-.511 4.343-4.352zm-86.479-.811c0-1.52-.727-2.76-1.615-2.76s-2.64 1.24-3.905 2.76c-1.91 2.31-1.65 2.76 1.615 2.76 2.24 0 3.9-1.17 3.905-2.76zm-11.96-.92c-.625-1.01-1.5-1.84-1.949-1.84-.446 0-.811.828-.811 1.84s.877 1.84 1.949 1.84 1.44-.828.811-1.84zm-8.28-1.84c0-1.01-1.66-1.84-3.68-1.84s-3.68.828-3.68 1.84 1.66 1.84 3.68 1.84 3.68-.828 3.68-1.84zm84.639-2.913c0-1.6-.983-2.59-2.185-2.185-3.41 1.14-3.98 5.1-.728 5.098 1.6 0 2.91-1.31 2.913-2.913zm-111.32-2.607c-.625-1.01-1.92-1.84-2.869-1.84-.952 0-1.73.828-1.731 1.84s1.29 1.84 2.869 1.84 2.36-.828 1.731-1.84zm96.599-5.52c0-1.01-.828-1.84-1.84-1.84s-1.84.828-1.84 1.84.828 1.84 1.84 1.84 1.84-.828 1.84-1.84zm37.59-1.63c.554-.896-1.07-2.03-3.615-2.513-4.6-.879-7.34.72-5.098 2.966 1.73 1.73 7.55 1.43 8.713-.453zm-78.069-11.25c0-1.01-.828-1.84-1.84-1.84s-1.84.828-1.84 1.84.828 1.84 1.84 1.84 1.84-.828 1.84-1.84zm406.64-52.538c0-2.24-10.3-13.7-12.26-13.702-3.46 0 1.16 10.1 5.645 12.34 4.64 2.32 6.62 2.73 6.615 1.361zm-379.04-11.863c0-1.01-1.29-1.84-2.869-1.84s-2.36.828-1.731 1.84 1.92 1.84 2.869 1.84c.952 0 1.73-.828 1.731-1.84zm92.919 0c-.625-1.01-4.76-1.84-9.2-1.84s-8.58-.828-9.2-1.84-4.37-1.84-8.331-1.84c-5.26 0-6.94-.664-6.248-2.465 1.38-3.59-4.31-7.9-6.949-5.263-1.51 1.51-1.41 2.83.381 4.983 2.08 2.51 1.86 3.08-1.55 3.973-8.22 2.15-3.48 4.16 11.197 4.763 8.35.341 18.7.788 23.108.994 4.9.232 7.49-.328 6.791-1.465zm-51.517-3.683c1.29-2.08-6.02-5.31-15.642-6.91-3.54-.589-8.92-2.58-11.96-4.432-6.62-4.03-16.7-4.44-18.094-.75-1.26 3.28 3.41 7.65 5.159 4.824 2.06-3.32 8.95-2.13 20.342 3.533 11.4 5.65 18.2 6.92 20.195 3.734zm-66.241-3.677c-.625-1.01-1.5-1.84-1.949-1.84-.446 0-.811.828-.811 1.84s.877 1.84 1.949 1.84 1.44-.828.811-1.84zm67.416-11.101c-4.34-3.62-9.62-4.69-11.893-2.408-2.53 2.53 3.16 6.15 9.563 6.088l6.675-.061-4.344-3.619zm458.82-3.619c.626-1.01.309-1.84-.703-1.84s-2.35.828-2.977 1.84c-.626 1.01-.309 1.84.703 1.84s2.35-.828 2.977-1.84zm-485.76-3.68c-.625-1.01-2.38-1.84-3.897-1.84s-2.25.828-1.623 1.84c.626 1.01 2.38 1.84 3.897 1.84s2.25-.828 1.623-1.84zm552.91-10.156c14.2-3.74 22.1-9.11 9.069-6.169-4.4.989-8.9 2.55-10.007 3.461-1.1.915-5.5 2.22-9.773 2.905s-8.29 2.08-8.922 3.107c-1.25 2.02.404 1.74 19.634-3.305zm7.36-83.792c0-1.07-.828-1.44-1.84-.811-1.01.625-1.84 1.5-1.84 1.949 0 .446.828.811 1.84.811s1.84-.877 1.84-1.949zm-23.92-5.862c0-1.03-1.22-.827-2.76.451-1.52 1.26-2.76 3.12-2.76 4.131 0 1.03 1.22.827 2.76-.451 1.52-1.26 2.76-3.12 2.76-4.131zm-47.84-7.938c0-1.58-.828-2.36-1.84-1.731-1.01.625-1.84 1.92-1.84 2.869 0 .952.828 1.73 1.84 1.731s1.84-1.29 1.84-2.869zm49.68-18.4c0-.446-1.29-.811-2.869-.811s-2.35.842-1.713 1.87c1.05 1.7 4.58.883 4.581-1.059zm-7.36-6.44c0-1.07-.828-1.44-1.84-.811-1.01.625-1.84 1.5-1.84 1.949s.828.811 1.84.811 1.84-.877 1.84-1.949zm0-7.251c0-1.01-.779-1.84-1.731-1.84s-2.24.828-2.869 1.84c-.625 1.01.154 1.84 1.731 1.84s2.87-.828 2.869-1.84zm9.2-5.629c0-.952-1.24-1.73-2.76-1.731-2.84 0-3.66 2.17-1.583 4.243 1.47 1.47 4.34-.192 4.343-2.512zm-258.33-3.073c-.611-.611-1.05.475-.966 2.415.088 2.14.524 2.58 1.112 1.112.532-1.33.466-2.92-.145-3.527zm-90.961-2.764c-1.36-1.36-1.6-.647-.805 2.414.651 2.49 1.48 3.32 1.944 1.944.443-1.33-.07-3.29-1.14-4.358zm165.29-79.817c0-2.42-.393-4.4-.873-4.396-1.59 0-6.49 10.8-6.426 14.168.098 5.3 7.3-4.34 7.299-9.772zm193.2 439.04c0-1.01.365-1.84.811-1.84s1.32.828 1.949 1.84c.625 1.01.26 1.84-.811 1.84-1.07 0-1.95-.828-1.949-1.84zm-622.83-193.2c-.625-1.01-3.41-1.84-6.197-1.84-6.53 0-13.2-4.41-9.013-5.997 3.03-1.16 23.4 6.05 23.458 8.297.047 2.06-6.93 1.67-8.249-.46zm-30.085-10.311c-1.37-1.55-2.1-3.19-1.635-3.662 1.4-1.4 10.6 2.69 10.561 4.727 0 2.85-6.1 2.12-8.926-1.066zm32.155 1.648c-.577-.578-.61-1.76-.071-2.633 1.29-2.09 6.28-2.04 6.281.06 0 2.03-4.77 4.01-6.21 2.573zm-45.309-4.217c-4.32-1.38-4.24-1.48 1.489-1.657 3.63-.109 5.63.56 4.951 1.657-.625 1.01-1.3 1.76-1.489 1.657-.193-.101-2.42-.846-4.951-1.657zm80.959-11.04c0-1.01 1.24-1.84 2.76-1.84s2.76.828 2.76 1.84-1.24 1.84-2.76 1.84-2.76-.828-2.76-1.84zm573.16-14.72c.625-1.01 4.19-1.76 7.929-1.657 6.1.165 6.32.333 2.191 1.657-6.65 2.13-11.4 2.13-10.12 0zm52.439-106.4c0-.836 2.09-3.48 4.636-5.874l4.636-4.355-2.93 5.874c-2.71 5.42-6.34 7.92-6.341 4.355zm-12.88-10.441c0-5.45 1.98-5.85 6.155-1.235 4.16 4.6 3.83 5.84-1.555 5.835-3.68 0-4.6-.92-4.6-4.6zm-5.98-17.778c-5.09-1.86-7.09-7.06-2.709-7.061 3.11 0 10.5 5.26 10.529 7.464 0 2.08-1.18 2.02-7.82-.403zm-17.022-11.201c2.04-6.25 2.28-14.8.519-18.4-.954-1.96-.849-3.22.267-3.22 1.01 0 2.78 3.52 3.925 7.82s2.85 8.75 3.783 9.887c1.12 1.37.15 3.08-2.875 5.06-6.11 4-7.22 3.78-5.619-1.147z"/> + <path fill="#f4c706" d="m435.36 825.6c-2.1-2.32-5.36-8.36-7.233-13.415-2.5-6.76-7.16-12.9-17.558-23-17.6-17.2-27.4-36.9-27.366-55.199 0-4.81-1.12-11.9-2.492-15.869-3.81-10.9-4.99-19.7-3.056-22.771 1.46-2.3 2.63-1.8 7.043 3.02 4.12 4.5 6.38 5.57 10.178 4.845 4.26-.814 4.89-.329 4.887 3.772 0 2.59.784 5.19 1.741 5.782 2.57 1.59.906-25-2.674-42.696-3.73-18.4-2.99-24.9 1.64-14.283 1.77 4.05 3.68 9.84 4.249 12.88.571 3.04 3 9.52 5.401 14.411s4.43 10.7 4.508 12.88c.08 2.19.563 2.95 1.073 1.689 1.53-3.79 5.6-2.62 9.61 2.76 2.08 2.78 3.8 4.13 3.833 2.991.111-3.93-5.57-18-8.634-21.387-1.96-2.17-3.3-7.44-3.702-14.597-.344-6.16-2.25-15.8-4.236-21.469-1.98-5.65-3.62-12.4-3.635-14.934-.038-6.95-2.01-13-3.864-11.894-.897.554-1.63 3.03-1.631 5.499 0 5.78-.945 5.66-8.607-1.069-3.48-3.06-7.06-5.11-7.944-4.565-.886.548-.097 4.5 1.753 8.78s3.94 9.86 4.651 12.385l1.287 4.6-3.39-4.6c-1.86-2.53-5.05-8.68-7.07-13.661-2.02-4.98-4.58-9.35-5.674-9.711-1.1-.358-3.09 3.92-4.434 9.521-2.68 11.2-4.85 12.9-6.604 5.111-.628-2.78-2.54-9.2-4.245-14.26-2.6-7.71-3.84-9.2-7.634-9.2-4.02 0-4.49.726-4.168 6.44.199 3.54.899 9.45 1.556 13.123.735 4.12.42 7.16-.822 7.929-1.21.749-2.02 7.64-2.016 17.278 0 17.7-5.77 48.8-13.708 73.954-2.71 8.58-6.53 22.4-8.487 30.828-5.6 24-20.5 50.3-33.28 58.767-5.79 3.83-7.56 4.26-9.832 2.37-1.52-1.27-2.77-3.86-2.773-5.756 0-6.02-6.66-3.99-11.318 3.445l-4.322 6.9-.543-11.299c-.298-6.22 1.15-24.8 3.22-41.374s3.76-30.6 3.763-31.308 1.66-.8 3.68-.271 3.68 2.01 3.68 3.282 1.13 3.26 2.505 4.399c2 1.66 3.11.495 5.52-5.816 1.66-4.34 3.1-9.94 3.199-12.433l.183-4.538 1.28 4.6c.807 2.9 2.61 4.6 4.877 4.6 2.84 0 3.72-1.48 4.174-7.003.326-3.95 1.73-7.44 3.22-8.017 1.45-.558 2.64-2.33 2.643-3.945 0-2.28-.491-2.44-2.208-.723-1.21 1.21-2.89 2.21-3.726 2.208-2.5 0-5.24-9.28-3.613-12.196 1.19-2.13 2.02-1.61 3.901 2.446 2.37 5.12 2.4 5.13 3.957 1.01 2.06-5.42 6.07-5.25 10.56.46 4.81 6.12 5.85 5.81 5.849-1.731 0-3.48.828-6.84 1.84-7.469 2.58-1.59 2.3-14.4-.361-17.105-1.71-1.71-1.56-2.72.642-4.508 1.71-1.39 3.69-8.15 4.973-17.027 2.58-17.9 2.6-19.3.266-19.32-1.01 0-1.85 1.86-1.868 4.14s-.849 5.38-1.852 6.9c-1.25 1.89-1.44-.737-.598-8.28 1.32-11.9 1.36-12.7.928-18.651-.217-2.94-1.8-4.16-6.27-4.844-7.31-1.12-9.96.817-11.604 8.443-1.74 8.06-8.03 20-7.965 15.053.026-2.02.703-5.34 1.504-7.36 2.04-5.16.424-8.28-4.304-8.28-2.22 0-5.01-.973-6.197-2.162-1.66-1.66-2.71-.902-4.515 3.22-1.29 2.96-3.86 7.6-5.697 10.318-2.57 3.79-2.9 5.77-1.412 8.547 1.45 2.72 1.28 4.15-.695 5.791-1.44 1.2-3.58 5.06-4.74 8.581-1.69 5.11-2.95 6.29-6.278 5.855-2.29-.3-5.49.55-7.101 1.89-5.66 4.7-6.41.383-2.264-13.052 2.27-7.35 5.55-16.1 7.297-19.498 3.73-7.22 2.67-13.1-1.712-9.472-1.51 1.25-2.74 3.69-2.738 5.421 0 5.04-1.88 5.56-5.823 1.618-3.24-3.24-3.36-4.04-1.014-6.747 4.21-4.86 5.24-12.2 2.256-16.113-1.46-1.94-2.69-5.38-2.72-7.657-.041-2.9-1.16-4.14-3.762-4.14-3.56 0-3.52-.29.92-7.323 8.68-13.7 5.28-14.6-10.237-2.689-6 4.61-10.9 9.04-10.9 9.834 0 .795-4.14 6.18-9.2 11.959s-9.2 11.3-9.2 12.283-2.22 5.27-4.926 9.553-7.19 15.5-9.962 24.952-5.48 17.6-6.034 18.167-2.28.509-3.835-.089c-2.49-.956-2.38-2.24.914-10.6 2.06-5.23 4.96-11.2 6.436-13.348s2.69-5.56 2.687-7.667c0-3.5 9.67-20.8 12.842-22.951.738-.506 2.5-3.03 3.91-5.609 5.16-9.43 15.7-22.7 25.548-32.217 5.56-5.36 9.49-10.4 8.751-11.095s-2.87.026-4.725 1.706c-1.86 1.68-3.93 3.06-4.611 3.055-2.36 0-1.22-6.92 1.525-9.2 6.68-5.54.429-11.6-6.764-6.604-5.65 3.96-7.57 3.68-5.196-.756 1.67-3.12 1.4-3.68-1.775-3.68-4.96 0-4.72-1.54 1.181-7.7 6.22-6.49 4.33-8.61-4.091-4.59-3.56 1.7-8.78 3.09-11.584 3.09-4.12 0-9.1 4.18-25.772 21.629-11.4 11.9-22.7 24.9-25.159 28.98-7.32 12-18 34.1-16.949 35.134.53.53 4.78-4.72 9.446-11.677s18.6-23.2 31.018-35.993c20.1-20.9 27.1-26.5 27.126-21.875 0 1.84-18.2 20.6-20.033 20.603-.717 0-5.82 6.26-11.335 13.918-15.8 21.9-25.8 34.8-27.671 35.454-.924.337-1.68 1.58-1.68 2.76s-2.95 4.5-6.555 7.377l-6.555 5.231 1.196-6.375c1.11-5.93.787-6.52-4.666-8.418-4.03-1.41-6.95-1.46-9.36-.171-4.14 2.22-4.71 4.44-.739 2.917 3.82-1.47 3.5 3.12-.46 6.615-1.77 1.56-5.98 3.43-9.345 4.143-8.72 1.85-55.8 31.4-67.849 42.532-4.55 4.21-8.91 5.96-7.589 3.034 8-17.7 35-55.4 53.042-74.033 18.7-19.3 36.3-32.2 44.842-32.778 5.03-.346 5.16-.173 2.625 3.64-1.46 2.2-4.57 5.27-6.91 6.826-4.06 2.7-4.2 2.64-2.961-1.245 1.88-5.94-.678-5.03-9.998 3.561-5.42 5-7.43 7.92-5.818 8.487 1.35.472 3.38-.064 4.508-1.189s2.71-2.05 3.519-2.047c3.2 0 1.09 3.81-7.313 13.192-4.83 5.4-11 12.8-13.68 16.428s-8.74 10.3-13.445 14.72-9.37 9.61-10.38 11.46c-1.61 2.95-1.38 3.12 1.83 1.401 2.01-1.08 3.94-2.67 4.279-3.544.486-1.24 17.3-15.6 30.06-25.647 8.94-7.05 27.9-23.5 28.849-25.088.687-1.1 6.07-6.98 11.96-13.07s15.7-16.7 21.75-23.586c15.5-17.6 27-28.9 35.63-35.092 9.02-6.48 11-10.3 5.252-10.264-2.24.016-5.17.718-6.501 1.562-2.9 1.84-11.4.495-11.381-1.805 0-.894 1.21-1.63 2.695-1.626s3.58-1.66 4.665-3.68c1.5-2.8 1.4-3.68-.421-3.68-5.1 0-21.2 7.02-28.885 12.571-4.42 3.21-9.25 5.83-10.724 5.828s-5.14 2.07-8.145 4.6-6.54 4.6-7.86 4.6-3.42 1.24-4.684 2.76c-1.91 2.3-1.65 2.76 1.569 2.76 3.38 0 3.64.583 2.065 4.72-3.62 9.53-2.12 10.7 5.414 4.234 3.96-3.41 7.75-7.66 8.414-9.444s4.25-4.9 7.971-6.908 9.03-5.46 11.796-7.666c5.47-4.36 8.96-3.4 5.003 1.37-2 2.4-2.02 3.65-.111 6.701 1.29 2.06 1.65 4.34.809 5.056-.842.719-3.97 3.14-6.945 5.386s-12 10-19.98 17.335-15.1 13.5-15.852 13.752-1.22-4.07-1.13-9.66c.151-9.83-1.56-12.4-5.559-8.404-.963.963-10.9 6.23-21.988 11.705-31.9 15.7-48.3 19.9-78.692 20.315-19.2.249-32.5-1.94-54.212-8.978-1.25-.405-1.76-2.07-1.128-3.709.843-2.2 3.12-2.84 8.709-2.48 14.4.942 39.7-2.49 53.95-7.334 18.3-6.21 25.8-10.7 27.926-16.976 1.19-3.41 3.48-5.36 7.303-6.196 3.33-.732 11.5-6.81 20.423-15.145 8.17-7.66 18.8-16.5 23.569-19.552 10.8-6.97 43.6-23.3 46.801-23.345 1.32-.013 6.53-2.06 11.594-4.544l9.2-4.52-7.36 1.017c-4.05.559-12.1 2.16-17.843 3.561-8.74 2.12-11.6 2.14-17.48.122-8.81-3.05-9.32-7.53-.885-7.676 3.36-.057 6.67-.935 7.36-1.951 1.25-1.85 25.1-9.9 29.36-9.904 1.24 0 2.25-.828 2.248-1.84s-4.09-1.84-9.091-1.84-9.6.828-10.228 1.84-3.41 1.84-6.181 1.84-5.98.938-7.128 2.084c-1.15 1.15-3.48 1.55-5.175.898-4.03-1.54-.761-5.82 5.679-7.437 8.12-2.04 5.28-5.35-3.295-3.839-15.4 2.7-23.8 2.55-30.555-.569-9.23-4.26-10.3-6.52-4-8.179 2.94-.771 5.86-3.05 6.503-5.06s1.73-3.66 2.417-3.674c2.3-.031 41.6-5.51 47.977-6.682 4.04-.747 5.83-.493 5.083.719-.637 1.03-4.83 2.42-9.311 3.097s-9.15 2.42-10.368 3.892c-2.68 3.23-13.1 3.53-16.117.462-1.54-1.54-2.21-1.58-2.208-.15 0 1.13-.503 3.37-1.117 4.968-1.89 4.93 16.6 3.83 28.439-1.708 5.41-2.52 11-4.58 12.311-4.582 3.52 0 5.42-3.83 2.725-5.496-1.62-.999-1.68-1.77-.236-2.663 1.12-.692 2.04-2.14 2.036-3.218 0-2.2-8.88-1.51-37.72 2.945-10.1 1.56-29.6 2.9-43.24 2.97-28.9.152-49.4 2.1-51.194 4.863-.685 1.07-3.12 2.53-5.412 3.243-5.53 1.73-3.81 4.02 4.147 5.51 3.55.667 6.46 2.08 6.46 3.152 0 1.3-5.57 1.55-17.02.762-9.36-.648-20.5-1.18-24.84-1.189s-7.82-.688-7.82-1.516c0-.827 3.93-2.98 8.74-4.782 15.4-5.78 24.7-11.6 28.404-17.587 3.5-5.76 3.78-5.85 13.115-4.506 14.3 2.06 72.3 3.86 85.899 2.661 12.5-1.1 42.4-6.69 48.76-9.118 3.5-1.34 3.46-1.5-.818-3.156-4.29-1.66-4.12-1.86 3.68-4.33 4.5-1.42 8.18-3.42 8.178-4.427s-5.81-2.29-12.912-2.847c-14.5-1.13-17.4-2.34-17.447-7.184 0-4.13 4.18-5.93 10.726-4.629 2.7.537-.882-1.28-7.966-4.032s-13.7-5.97-14.72-7.154c-2.94-3.44-16.6-8.06-27.671-9.359-7.5-.882-10.7-2.16-12.154-4.851-1.9-3.55.22-6.75 4.514-6.836.819-.016.977-.856.352-1.868s-3.67-1.84-6.774-1.84c-4.64 0-5.26.457-3.482 2.596 1.42 1.71 1.52 2.99.286 3.751-1.03.635-2.92-.533-4.212-2.596-3.06-4.9-8.82-4.94-8.818-.071 0 5.58-2.89 4.45-9.421-3.68-3.25-4.05-6.67-7.36-7.595-7.36s-6.05-2.9-11.382-6.44c-7.65-5.08-11.6-6.46-18.712-6.558-4.96-.065-14-1.2-20.049-2.534l-11.04-2.415 5.52-2.202c3.04-1.21 9.45-2.67 14.261-3.243 7.4-.882 8.28-1.38 5.699-3.265-4.95-3.62-1.26-6.61 6.6-5.348 4.09.654 7.51.329 8.194-.781.707-1.14 5.12-1.5 11.085-.88 8.4.867 10.4.462 13.059-2.656 2.63-3.08 4.25-3.42 9.846-2.122 3.68.856 15.4 1.58 26.016 1.603 19.1.046 43.9 3.38 53.939 7.252 6.29 2.42 9.18 2.55 7.828.355-1.77-2.86-31.1-19.5-38.767-21.983-4.05-1.31-9.02-3.1-11.04-3.972s-9.26-3.37-16.08-5.542c-12-3.84-18.7-7.97-10.189-6.359 16.8 3.2 25 5.26 29.029 7.254 2.53 1.27 7.61 2.85 11.286 3.513 10.2 1.84 10.1-2.1-.286-21.952-5.04-9.6-9.16-18.7-9.161-20.137s-2.48-4.51-5.52-6.759-5.52-5.08-5.52-6.306c0-2.08-3.66-6.87-23.46-30.693-5.95-7.16-7.83-11-7.845-15.96-.014-3.6-.549-8.51-1.189-10.899-1.04-3.88-.707-4.2 3.104-2.995 4.59 1.46 4.85 1.63 14.914 10.04 3.68 3.07 7.54 5.58 8.586 5.584s3.61 2.28 5.702 5.06c2.95 3.93 4.16 4.51 5.431 2.584 1.31-1.98 3.13-1.53 9.198 2.3 4.16 2.63 8.62 4.79 9.902 4.81 4.26.061 35.7 22.8 38.326 27.771 1.02 1.91 2.81 3.48 3.976 3.475s4.08 1.84 6.477 4.097c4.03 3.78 4.26 3.82 3.059.46-.716-2-2.55-5.09-4.078-6.868-5.59-6.5-.838-4.64 11.261 4.423 7.22 5.41 13.5 8.85 15.118 8.246 3.96-1.52 3.35-10.1-1.685-23.478-5.4-14.4-9.31-37.6-7.988-47.512.542-4.04.325-10.3-.482-13.844s-.811-6.91-.011-7.401c2.36-1.46 3.68 4.17 3.681 15.7 0 10.3 4.1 30.5 6.661 32.877.659.606.678-3.04.043-8.098-2-15.9-4.8-44-4.833-48.408-.018-2.34-.757-3.8-1.642-3.253-3.95 2.44 1.5-27.1 7.424-40.338 1.87-4.16 3.32-11.8 3.346-17.53.022-5.59 1.17-11.8 2.548-13.8 1.47-2.13 2.56-8.75 2.622-16.049.209-22.6.352-24.2 1.993-22.448.881.961 4.67 10 8.411 20.148s7.52 19.7 8.392 21.393 2.18 6.2 2.919 10.114c1.78 9.49 11.9 39.1 22.126 64.601 4.56 11.4 7.7 21.7 6.979 22.845-.911 1.47-2.07 1.09-3.791-1.268-2.24-3.07-2.48-2.75-2.479 3.386 0 4.51 1.1 7.46 3.287 8.829 2.34 1.46 3.09 3.76 2.597 7.965-.38 3.25.625 9.06 2.233 12.908 2.59 6.2 3.27 6.71 5.966 4.47 1.67-1.39 3.54-2.11 4.14-1.605 2.85 2.39 1.85-17.2-1.376-26.925-1.97-5.94-4.5-15.2-5.618-20.572-1.12-5.38-5.76-17.6-10.315-27.133-8.92-18.7-10.4-24.3-4.594-16.867 2.02 2.57 3.68 5.45 3.68 6.403s1.52 3.1 3.382 4.785c3.2 2.89 3.54 2.73 6.372-2.935 10.2-20.5 19.3-52.5 17.19-60.799-.718-2.86-3.29-6.04-5.834-7.193-5.85-2.67-5.83-5.16.051-5.162 6.39 0 11.3-5.6 12.847-14.525.702-4.16 1.9-7.56 2.659-7.555 1.91 0 5.65 8.59 5.654 12.966 0 2 1.25 3.59 2.825 3.593 2.22 0 2.42.76.927 3.547-3.8 7.1 3.12 13.2 7.041 6.161 1.15-2.06 1.13-4.38-.067-6.616-1.44-2.7-1.02-4.02 1.97-6.113 2.17-1.52 5.1-7.19 6.793-13.164 3.28-11.6 8.11-18.8 8.112-12.178 0 2.04 2.47 11.5 5.487 21.094 5.83 18.5 6.52 27.8 3.797 51.399-1.02 8.81-.929 15 .251 17.217 1.24 2.33 1.22 4.07-.064 5.355-1.32 1.32-2.24.261-2.992-3.418-.596-2.93-2.7-10.3-4.679-16.366l-3.595-11.04.636 15.64c.998 24.5 2.39 36.5 6.306 53.978 4.15 18.6 7.73 24.6 7.732 13.038 0-4.93 1.15-8.3 3.517-10.33 1.95-1.67 4.48-7.64 5.675-13.406 1.19-5.72 3.12-10.7 4.303-11.044s4.42-1.15 7.205-1.758 5.06-2.23 5.06-3.608 1.24-3.53 2.76-4.79 2.76-3.42 2.76-4.804c0-3.61 19.5-34.9 28.563-45.796 4.21-5.06 9.93-12.7 12.727-16.929 4.23-6.44 11.8-13.4 14.457-13.431 1.08 0-1.76 18.2-4.963 31.854-1.62 6.89-2.94 14.2-2.945 16.325 0 3.26.412 3.45 2.926 1.363 2.66-2.21 2.83.292 1.817 27.662-.912 24.8-.629 30.8 1.598 34.221 2.01 3.06 2.27 5.65 1.023 10.001-.926 3.23-1.22 8.16-.665 10.966.569 2.84-.169 7.44-1.67 10.411-3.08 6.08-5.88 24.7-3.713 24.584.794-.028 3.51-3.06 6.043-6.726s6.88-8.95 9.66-11.727c2.78-2.78 5.06-6.09 5.06-7.36s2.07-5.02 4.6-8.339 4.6-6.34 4.6-6.718 3.73-4.69 8.28-9.578c9.36-10 11.2-8.85 2.718 1.792-3.06 3.85-6.01 9.14-6.551 11.753s-1.76 6.17-2.692 7.907c-1.29 2.38-1.07 2.91.889 2.158 1.42-.547 3.88-3.71 5.459-7.038 3.07-6.47 7.9-11.4 9.556-9.744 1.29 1.29-3.89 11.4-10.092 19.76-12.6 17-18.5 29.5-16.248 34.492 1.96 4.32 6.84 5.73 6.84 1.985 0-1.18 1.14-3.46 2.529-5.06s5.22-8.29 8.516-14.865 6.72-13.4 7.607-15.181c1.39-2.76 3.84-8.96 11.815-29.899 1.24-3.27.856-3.18-3.486.774-6.8 6.2-8.01 3.66-2.268-4.771 3.88-5.7 4.27-7.16 2.003-7.638-3.82-.811-3.65-1.33 3.182-9.998 14.1-17.9 47.1-46.4 50.179-43.34.528.527-1.87 5.01-5.33 9.966-6.46 9.25-25.1 45.3-25.07 48.5 0 .997-2.49 3.1-5.528 4.671-4.23 2.19-7.69 7.34-14.72 21.915-5.06 10.5-9.19 20.2-9.192 21.671s-2.07 5.42-4.6 8.849-4.6 7.53-4.6 9.115-1.66 3.91-3.68 5.178c-4.09 2.55-4.88 9.53-1.472 12.939 3 3 5.15 2.78 5.152-.552 0-4.11 9.16-3.66 9.329.46.111 2.75.359 2.69 1.711-.46.87-2.02 1.64-2.64 1.711-1.38s.75 2.12 1.509 1.891 3.7 1.14 6.527 3.029l5.147 3.438-4.89 5.104c-5.55 5.79-5.28 9.37.768 10.294 3.17.484 4.57-.599 5.974-4.638 1.01-2.9 3.87-6.19 6.345-7.323 6.64-3.03 5.81.803-1.715 7.901-3.42 3.23-7.58 8.5-9.247 11.717-1.66 3.22-4.2 5.85-5.628 5.848-2.95 0-5.59 3.36-3.937 5.018.601.601 2.55-.122 4.324-1.607s5.51-3.67 8.291-4.856c7.11-3.03 6.51.323-1.38 7.766-3.54 3.34-6.44 7.36-6.44 8.924 0 4.2 9.91 2.84 21.939-3.009 11.2-5.43 13.4-5.28 7.265.47-3.17 2.95-3.65 4.39-2.011 6.023 1.64 1.64 3.31 1.62 7.036-.079 2.69-1.22 5.31-1.8 5.826-1.288 1.21 1.21-7.76 13.3-14.806 19.991-2.99 2.83-5.02 5.57-4.515 6.074 1.26 1.26 21.3-5.64 23.919-8.222 1.15-1.15 3.29-2.08 4.761-2.084 2.21 0 2.14.589-.368 3.365-1.68 1.85-3.04 3.92-3.045 4.6 0 2.15 5.16 1.34 7.707-1.215 1.35-1.35 4.57-2.98 7.166-3.633s7.8-3.28 11.563-5.83c3.77-2.56 8.82-4.65 11.241-4.647 2.6 0 4.82-1.34 5.434-3.275.572-1.8 3.6-4.24 6.722-5.42 4.79-1.81 5.52-1.72 4.662.515-1.5 3.91 2.98 3.39 25.684-2.993 11.1-3.11 23.8-6.1 28.42-6.647 8.04-.961 8.34-.822 8.745 4.125.524 6.33.158 6.08 7.168 5.009 7.02-1.07 13.8-6.86 12.327-10.593-.694-1.81 1.22-3.77 5.822-5.962 6.72-3.2 6.91-3.19 9.404.57 2.26 3.4 3.55 3.67 11.261 2.356 20.5-3.49 24.3-3.86 24.209-2.316-.079.897-5.67 6.4-12.42 12.22s-20.3 18-30.184 26.995c-16 14.7-46 35.3-68.572 47.224-4.3 2.27-8.51 6.32-10.12 9.76-2.51 5.35-3.34 5.79-9.2 4.858-3.54-.562-9.13-.988-12.42-.947-4.12.051-5.98-.784-5.98-2.686 0-4.02-4.33-1.71-7.799 4.166-3.67 6.2-1.74 10.8 3.425 8.121 4.88-2.51 18.3-4.34 19.901-2.719.755.746 4.82 1.36 9.023 1.357 5.14 0 7.5.755 7.19 2.3-.253 1.26.368 2.3 1.38 2.3s1.84-.828 1.84-1.84c0-2.69 3.86-2.25 7.254.824 5.67 5.13 56.9 3.56 83.609-2.571 4.94-1.13 9.31-1.74 9.703-1.339 1.74 1.74-2.18 6.42-11.634 13.898-9.47 7.49-11.8 8.4-34.373 13.016-14.6 3-28.9 7.22-36.16 10.676-6.58 3.14-14.7 6.7-17.94 7.907s-5.98 3.34-5.98 4.731c0 1.71-2.25 2.53-6.9 2.509-5.39-.022-6.3-.458-4.14-1.989 2.07-1.47.916-1.72-4.6-.98-4.05.539-11.9 1.48-17.48 2.1-17.6 1.94-17.8 2.04-17.854 8.675-.069 6.15 5.46 14.3 9.701 14.302 4.23 0 14.1 10.9 12.89 14.109-.897 2.34-1.69 2.56-3.324.919-2.63-2.63-5.09-2.78-5.092-.308 0 1.01 1.25 1.84 2.778 1.84s4.2 1.66 5.929 3.68 4.19 3.68 5.453 3.68c4.84 0 18.8 8.13 20.956 12.251 1.27 2.37 3.34 4.31 4.604 4.309 4.42 0 8.12-2.26 8.12-4.95 0-1.49 1.04-2.37 2.3-1.942s2.32 2.72 2.339 5.093c.03 3.25 2.31 5.59 9.2 9.438 5.04 2.82 10.6 5.15 12.276 5.181 1.71.033 4.2 1.51 5.52 3.285 4.06 5.45 31.8 14.7 63.584 21.164 12.6 2.58 18.9 4.66 18.86 6.32 0 1.48-2.04 2.46-5.06 2.434-2.78-.02-12.9.86-22.54 1.955-22.4 2.55-54.3.96-71.239-3.561-11.3-3.01-13.6-3.15-15.405-.978-2.84 3.42-5.3 3.24-14.814-1.079-4.41-2-9.26-3.65-10.781-3.666-3-.028-7.86 8.68-6.28 11.244.538.87-.265 1.58-1.783 1.582s-3.27-.828-3.897-1.84c-.626-1.01-2.06-1.84-3.189-1.84s-.108 2.07 2.269 4.6 5.45 4.6 6.832 4.6c3.1 0 16.1 12.6 17.716 17.138.653 1.84 2.64 3.19 4.419 3.008 6.61-.674 9.67.164 9.673 2.643 0 3.22 8.68 9.03 11.173 7.489 2.81-1.74 10.5 3.85 24.151 17.648l12.324 12.42-6.088 1.142c-6.71 1.26-17.6-.669-42.109-7.439-22.2-6.15-24.7-4.22-12.096 9.472 7.45 8.08 7.5 8.24 2.891 8.239-2.59 0-5.8-1.04-7.134-2.3-4.12-3.9-25.7-14.3-29.731-14.26-3.39 0-3.18.626 2.098 6.068 3.24 3.34 5.88 7.22 5.881 8.624 0 3.67-10.9-7.24-12.173-12.124-.932-3.72-9.08-10.3-27.921-22.519-4.34-2.82-11.9-9-16.781-13.746-4.89-4.74-9.41-8.62-10.046-8.622-3.61 0 .069 6.16 8.793 14.72 6.71 6.58 10.2 11.6 10.76 15.46.445 3.14 1.41 7.36 2.151 9.379 2 5.47-23.9-22.3-31.745-34.043-13.6-20.3-17.1-24.1-21.268-22.812-5.09 1.56-5.08 1.56-3.734 5.072.638 1.66 2.22 3.02 3.526 3.023s2.84 1.24 3.425 2.76c.583 1.52.167 2.76-.923 2.76-1.24 0-1.51 1.88-.714 5.05 1.63 6.5 4.85 10.5 6.418 7.95 2.5-4.05 13.6 4.64 18.874 14.77l5.184 9.951-8.918-9.66c-5.49-5.95-10.5-9.66-12.912-9.66-4.68 0-4.66-.115-1.694 6.741 7.19 16.6 39.4 55.8 45.828 55.818 1.41 0 8.73 6.21 16.272 13.8 13.4 13.5 15.5 19.2 3.041 8.28-3.46-3.04-7.21-5.52-8.344-5.52-3.52 0-2.27 10.1 2.62 21.158 2.57 5.82 4.32 11.5 3.894 12.649s-1.35.416-2.042-1.608c-4.74-13.8-26.9-50.6-30.511-50.6-.703 0-3.66-3.52-6.569-7.82-9.46-14-18.1-23.6-20.41-22.656-1.26.482-2.85-.044-3.545-1.168-.765-1.24-.425-1.53.861-.731 1.17.722 2.12.492 2.124-.512s-1.66-2.35-3.687-2.995-7.88-5.25-13.003-10.244-10.1-9.07-10.974-9.074-2.8-2.19-4.206-4.863c-1.76-3.36-2.98-4.16-3.938-2.613-.83 1.34.085 3.28 2.271 4.814 2.51 1.76 4.04 5.63 4.879 12.31.67 5.36 2.38 11.8 3.797 14.308 3.6 6.36 22.4 42.6 29.554 57.002 5.43 10.9 9.77 18.5 25.749 44.861 17.4 28.8 38.9 58 43.965 59.788 1.07.38.917-.407-.348-1.748-2.69-2.85-3.08-9.06-.569-9.062.952 0 2.33.97 3.063 2.155.867 1.4 1.92.6 3.005-2.3 1.64-4.36 1.75-4.3 5.251 2.905 1.97 4.05 4.68 8.19 6.035 9.206 3.91 2.94 10.3 16.7 10.791 23.334.41 5.18-.173 6.19-3.861 6.713-2.39.339-3.86-.163-3.275-1.115 1.3-2.1-12.2-13.3-16.056-13.299-1.5 0-6.76-3.99-11.691-8.866s-9.85-8.57-10.947-8.203-2.38-1.4-2.866-3.932c-.607-3.18.032-4.84 2.071-5.383 1.95-.523 1.59-.861-1.082-1.003-3.96-.21-8.13-3.89-4.403-3.893 2.81 0-.797-8.45-6.985-16.365-7.18-9.18-32.6-51.5-36.776-61.263-1.88-4.39-4.78-9.11-6.433-10.482-1.66-1.38-3.01-3.93-3.011-5.669s-1.61-4.63-3.576-6.405c-1.97-1.78-4.13-5.84-4.799-9.025-1.28-6.08-6.72-13.1-12.575-16.276-3.1-1.67-3.34-1.35-2.227 3.082.683 2.72 3.48 8.4 6.217 12.618s7.05 11.6 9.587 16.316c15.3 28.7 19.9 37.8 21.174 41.95 1.38 4.52 1.34 4.54-2.359 1.239-3.76-3.36-18.8-24.4-18.803-26.274 0-1.34-15.2-27.2-16.676-28.324-.637-.506-1.82-3.4-2.625-6.44-1.44-5.41-1.49-5.43-2.625-1.093-1.1 4.19-1.32 4.26-4.336 1.249-1.75-1.75-3.18-4.26-3.178-5.581s-1.15-3.36-2.547-4.517c-4.7-3.9.454 14.3 9.075 32.023 9.01 18.5 24.2 39 21.809 29.328-1.22-4.9-1.06-5.17 1.725-2.877 4.04 3.33 30.3 39.4 31.852 43.753 1.7 4.75-8.88-5.26-15.21-14.395-5.96-8.6-8.9-8.89-11.613-1.114l-2.069 5.935-2.839-5.475c-1.56-3.01-6.3-10-10.531-15.552-8.37-11-9.96-13.2-19.791-27.918-9.89-14.8-12-18.6-13.364-23.645-.663-2.53-2.85-6.67-4.85-9.2-2.95-3.73-3.65-3.99-3.685-1.387-.047 3.66 6.56 24.5 9.401 29.653 1.04 1.88 4.74 12.1 8.234 22.804s7.48 21.5 8.863 24.174c1.38 2.64 4.05 9.73 5.928 15.769s5.22 13.1 7.423 15.64l4.011 4.667-.556-4.6c-.306-2.53-2.74-10.3-5.421-17.317-2.68-7-4.41-14.2-3.848-15.92.575-1.81-1.01-6.19-3.65-10.079-2.62-3.85-4.63-9.39-4.585-12.6l.081-5.723 3.323 6.44c1.83 3.54 4.81 11 6.632 16.56 7.79 23.8 8.92 26 13.23 24.899 5.72-1.41 7.19 2.33 2.591 6.61-3.16 2.95-3.52 4.33-1.894 7.363 2.45 4.58 1.01 8.97-2.95 8.968-3.94 0-1.83 7.2 3.309 11.264 2.2 1.74 3.32 4.16 2.688 5.807-.596 1.55.366 4.13 2.138 5.737 1.77 1.6 5.08 6.86 7.351 11.673s4.9 10.2 5.832 11.916c2.8 5.2 5.16 18 3.505 18.973-3.2 1.98-15.1-11.2-20.102-22.306-2.88-6.36-7.59-15.1-10.467-19.52-5.88-8.95-6.4-9.81-18.031-29.23-8.3-13.9-16.1-20.4-19.875-16.652-.967.967-1.64 12-1.492 24.468.26 22.2-2.45 55.3-5.117 62.506-1.29 3.48-1.46 3.46-5.155-.622zm-121.9-97.698c-1.46-1.46-2.65-1.37-4.313.319-1.84 1.87-1.57 2.87 1.38 5.06 3.29 2.44 3.75 2.41 4.313-.319.348-1.68-.273-3.95-1.38-5.06zm5.347-8.637c0-2.02-.779-3.68-1.731-3.68-2.47 0-4.21 3.35-2.869 5.52 1.92 3.11 4.6 2.04 4.6-1.84zm104.88.109c0-.952-.828-2.24-1.84-2.869s-1.84.154-1.84 1.731c0 1.58.828 2.87 1.84 2.869s1.84-.779 1.84-1.731zm10.255-7.052c-3.18-3.04-3.23-2.99-1.121 1.121 1.21 2.36 2.71 3.79 3.325 3.176.617-.617-.375-2.55-2.204-4.298zm-92.547-29.76c.932-3.56-3.25-9.01-5.328-6.93-1.57 1.57 1.2 12.5 2.907 11.478.808-.499 1.9-2.55 2.42-4.548zm2.989-19.065c-.175-5.61-.25-5.66-1.657-1.271-2.12 6.61-2.12 9.59 0 8.28 1.01-.626 1.76-3.78 1.657-7.009zm-71.106-17.011c.482-2.52.195-5.01-.638-5.524-2.04-1.26-7.65 9.83-6.183 12.207 1.72 2.78 5.77-1.2 6.821-6.683zm71.933 5.679c.57-1.49.245-3.19-.723-3.789-.968-.598-1.76.617-1.76 2.701 0 4.44 1.02 4.89 2.483 1.088zm-246.58-25.47c11.3-10.7 14.8-16 10.602-15.988-1.97 0-19.7 19.1-22.364 24.107-1.03 1.92-1.56 3.49-1.182 3.493s6.2-5.22 12.945-11.612zm318.32-10.014-3.312-10.574-.601 7.783c-.683 8.85 5.54 25.3 6.636 17.511.324-2.28-.902-8.9-2.723-14.72zm52.459-11.589c-5.51-9.8-6.7-6.28-1.382 4.098 2.24 4.38 4.42 6.94 4.848 5.697s-1.14-5.65-3.465-9.795zm-74.112 2.374c-.612-.612-2.13-.099-3.367 1.141-1.78 1.78-1.68 2.62.491 3.969 1.96 1.22 2.92.894 3.367-1.141.342-1.57.122-3.36-.491-3.969zm-23.199 2.402c3.03-3.65.644-7.45-2.857-4.545-2.87 2.38-3.52 7.22-.982 7.224.888 0 2.62-1.21 3.838-2.679zm-20.924-15.025c-.584-1.52-1.9-2.25-2.916-1.624-2.62 1.62-2.3 7.83.447 8.772 2.65.911 4.03-3.08 2.469-7.148zm11.791 1.943c0-2.86-4.08-8.13-5.575-7.205-1 .62-.782 2.54.535 4.652 2.11 3.38 5.04 4.86 5.04 2.554zm96.124-12.786c-1.07-5.61-4.12-7.98-4.125-3.209 0 2.69 3.1 7.84 4.713 7.837.163 0-.101-2.08-.588-4.627zm132.03 2.787c0-1.01-.877-1.84-1.949-1.84s-1.44.828-.811 1.84c.625 1.01 1.5 1.84 1.949 1.84.446 0 .811-.828.811-1.84zm-7.36-3.654c0-.998-3.52-4.07-7.82-6.825-7.43-4.76-21.9-16.8-33.319-27.731-8.66-8.28-4.7-1.44 7.1 12.281 6.07 7.06 12.7 13.4 14.72 14.12s6.56 3.24 10.087 5.628c6.96 4.71 9.23 5.34 9.233 2.526zm-491.95-8.295c2.9-1.51 7.93-2.75 11.179-2.76 3.57-.007 7.3-1.5 9.406-3.766 1.92-2.06 6.72-4.24 10.652-4.839 9.44-1.43 22.7-13.5 14.84-13.486-2.98 0-22.8 10.6-24.32 12.999-.585.946-2.46 1.76-4.175 1.802-4.18.109-29.7 12.7-25.861 12.747 1.66.029 5.38-1.18 8.28-2.697zm502.99-7.174c0-.398-1.28-1.22-2.856-1.819-1.64-.628-2.38-.32-1.731.723 1.08 1.75 4.59 2.59 4.587 1.096zm-29.44-20.141c0-1.36-2.28-3.5-5.06-4.762l-5.06-2.298 4.461 4.762c5.12 5.46 5.66 5.68 5.659 2.298zm-447.12-5.945c0-.506-1.66-.034-3.68 1.05-2.02 1.08-3.68 2.38-3.68 2.89s1.66.034 3.68-1.05c2.02-1.08 3.68-2.38 3.68-2.889zm478.88-1.89c2.04-2.04-.817-6.16-6.866-9.903-9.71-6-11.5-4.28-3.74 3.643 7.27 7.45 8.62 8.24 10.606 6.26zm-46.486-4.42c0-1.01-.877-1.84-1.949-1.84s-1.44.828-.811 1.84 1.5 1.84 1.949 1.84c.446 0 .811-.828.811-1.84zm52.918-14.314c.673-2.02-20.6-13.3-25.036-13.286-1.17 0-2.12 1.24-2.122 2.76s1.49 2.76 3.31 2.76 7 2.42 11.5 5.368c8.45 5.54 11.1 6.06 12.348 2.398zm-12.504-23.319c-3.58-3.55-16.5-8.86-16.494-6.776 0 2.47 4.65 5.84 10.462 7.579 7.73 2.32 9.01 2.15 6.032-.803zm18.466-6.418c0-2.17-3.59-4.49-4.907-3.175s1 4.91 3.175 4.907c.952 0 1.73-.779 1.731-1.731zm-11.04-3.789c0-1.01-.877-1.84-1.949-1.84s-1.44.828-.811 1.84c.625 1.01 1.5 1.84 1.949 1.84s.811-.828.811-1.84zm-556.21-35.647c2.7-2.7-1.35-2.97-7.067-.467l-6.194 2.711 6.054-.546c3.33-.3 6.57-1.06 7.207-1.698zm89.204-4.25c-1.33-.532-2.92-.466-3.527.145-.611.611.475 1.05 2.415.966 2.14-.088 2.58-.524 1.112-1.112zm64.054-52.103c0-1.01-.877-1.84-1.949-1.84s-1.44.828-.811 1.84 1.5 1.84 1.949 1.84c.446 0 .811-.828.811-1.84zm418.43-7.093c.535-.865-1.48-1.49-4.487-1.38-3 .106-5.46.814-5.464 1.573-.006 1.91 8.76 1.74 9.951-.193zm-413.48-16.173c-2.87-2.87-28.4-13.5-32.481-13.5-4.22-.032-4.33.174-1.479 3.021 3.64 3.64 15.2 7.91 21.653 7.985 2.53.031 5.84.859 7.36 1.84 3.1 2 6.78 2.49 4.947.654zm-40.909-16.581c-3.46-2.53-5.64-2.09-3.863.779.563.911 2.41 1.66 4.108 1.656 2.76 0 2.74-.254-.245-2.434zm403.95-7.056c3.56-9.35-1.18-12.5-11.125-7.329-6.48 3.35-6.93 6.62-1.289 9.41 6.91 3.42 10.6 2.81 12.414-2.082zm-106.71-22.194c0-2.24-10.3-13.7-12.26-13.702-3.46 0 1.16 10.1 5.645 12.34 4.64 2.32 6.62 2.73 6.615 1.361zm126.02-11.892c-.636-1.03-1.93-1.39-2.869-.811-2.55 1.58-2.08 2.68 1.156 2.681 1.58 0 2.35-.842 1.713-1.87zm44.178-14.69c.625-1.01.309-1.84-.703-1.84s-2.35.828-2.977 1.84c-.626 1.01-.309 1.84.703 1.84s2.35-.828 2.977-1.84zm10.12-1.84c0-1.01-1.24-1.84-2.76-1.84s-2.76.828-2.76 1.84 1.24 1.84 2.76 1.84 2.76-.828 2.76-1.84zm28.52-9.2c.625-1.01-.105-1.84-1.623-1.84s-3.27.828-3.897 1.84.105 1.84 1.623 1.84 3.27-.828 3.897-1.84zm-161.06-47.605c-.049-2.52-.491-2.42-2.76.577-3.52 4.65-3.48 7.64.059 4.708 1.52-1.26 2.73-3.64 2.702-5.285zm-330.21-7.583c-1.84-2.03-4.18-3.69-5.216-3.691s.066 2.07 2.439 4.593c5.06 5.39 7.7 4.53 2.777-.902zm65.223-7.657c-3.5-11.5-7.27-17.9-7.273-12.206 0 4.26 7.6 23.5 9.287 23.531.779 0-.127-5.1-2.013-11.326zm41.27-10.294c-.681-6.83-4.32-21.5-8.089-32.66s-9.2-28-12.064-37.525c-2.87-9.51-5.54-16.3-5.941-15.104-1.53 4.59 15.9 77.1 20.879 86.669 1.31 2.53 2.84 6.05 3.389 7.82 2.16 6.91 3.01 2.64 1.826-9.2zm12.176 3.195c0-2.04-.73-5.14-1.623-6.9-1.53-3.02-5.03-16.2-6.915-26.066-.47-2.46-1.35-5.28-1.963-6.264-2.37-3.83-2.03-10.4.542-10.425 3.14 0 3.15-.23.5-6.78l-2.098-5.18-1.199 4.576c-1.03 3.92-2.08 2.4-7.337-10.651-3.38-8.38-6.42-14.9-6.763-14.603-1.37 1.37 19.3 79.4 22.353 84.314 1.84 2.98 4.5 1.79 4.503-2.023zm-42.591-19.415-2.279-5.399-.678 4.969c-.373 2.73.389 6.87 1.695 9.2 2.31 4.11 2.39 4.12 2.957.43.321-2.09-.441-6.23-1.695-9.2zm59.071-32.423c-4-13.5-6.35-18.1-9.346-18.056-.888 0-1.62 1.55-1.615 3.446 0 4.2 6.78 19.9 9.252 21.426.983.608 1.79 2.99 1.788 5.29s.621 4.81 1.38 5.576c2.98 3.01 2.33-4.87-1.46-17.682zm22.977-4.154c-.693-3.69-1.67-6.3-2.18-5.794s-.353 3.94.34 7.634 1.67 6.3 2.18 5.794.353-3.94-.34-7.634zm-89.883-4.786c-1.5-4.8-2.65-6.57-2.752-4.286-.313 6.72 2.08 15.7 3.743 14.061.879-.879.439-5.21-.991-9.775zm105.61-5.544c-1.44-7.9-5.32-14-5.712-9-.617 7.76 2.94 19.1 5.489 17.538.882-.545.983-4.39.224-8.539zm-3.66-20.943c0-2.47-.721-4.94-1.602-5.482s-2.01-5.2-2.5-10.337c-1.23-12.8-5.1-16.6-5.097-5.007 0 4.7.9 9.1 2 9.776s1.56 2.93 1.014 5.006c-1.08 4.13 1.6 10.5 4.41 10.535.976 0 1.78-2.02 1.775-4.491zm.207-36.517c-1.5-1.5-2.05-1.3-2.047.774 0 3.66 2.47 6.13 3.389 3.389.388-1.16-.216-3.04-1.342-4.163zm-10.91-3.55c-1.32-1.32-2.18-1.43-2.177-.276 0 2.46 2.18 4.63 3.404 3.404.523-.523-.029-1.93-1.227-3.128zm115.58-33.845c0-2.42-.393-4.4-.873-4.396-1.59 0-6.49 10.8-6.426 14.168.098 5.3 7.3-4.34 7.299-9.772zm-278.35 714.64c-2.14-16.3 6.25-57.6 13.096-64.446 1.18-1.18 2.14-2.91 2.136-3.849 0-3.69 13.6-30.6 15.939-31.451 1.35-.519 2.52-.349 2.585.378s.496 4.2.951 7.728c.589 4.56-.274 7.9-2.995 11.575-4.79 6.47-4.43 17.3.54 16.438 4.58-.769 4 3.48-1.603 11.734-2.65 3.91-4.98 7.96-5.172 8.997-.915 4.95-3.8 11.7-7.534 17.605-2.26 3.58-6.17 12.2-8.688 19.239s-5.4 13-6.4 13.331-2.29-2.94-2.854-7.279zm24.694-47.73c4.08-5.83 4.43-10.8.766-10.756-3.59 0-4.17 1.28-5.447 11.96-.603 5.06-.566 7.96.083 6.44s2.72-4.96 4.598-7.644zm297.81 43.466c0-1.49 1.24-2.7 2.76-2.702s2.76.739 2.76 1.643-1.24 2.12-2.76 2.702c-1.68.645-2.76.002-2.76-1.643zm-241.73-28.76c5.2-50.6 7.54-61.7 11.683-54.988 1.79 2.9 1.31 7.94-2.427 25.527-2.35 11.1-2.3 11.6.923 10.752 1.87-.489 3.4-.083 3.397.9 0 3.02-3.79 9.06-5.152 8.219-.708-.435-1.37 1.53-1.475 4.371s-1.94 7.38-4.073 10.101l-3.886 4.94zm288.81 2.794c-1.75-4.57.179-5.19 2.522-.814 1.13 2.11 1.29 3.84.346 3.838-.939 0-2.23-1.36-2.868-3.023zm-427.28-7.089c-1.34-3.5-.22-12.8 3.701-30.735 5.33-24.4 9.49-30.9 19.634-30.912 3.56 0 3.87.7 2.838 6.227-1.84 9.82 2.96 9.74 7.03-.106 2.24-5.41 4.24-7.85 5.909-7.211 1.6.615 3.91-1.74 6.311-6.451 6.59-12.9 11.3-6.1 5.232 7.519-4.21 9.39-4.37 11.8-.725 10.396 8.2-3.15-2.33 9.51-18.16 21.825-10.6 8.23-14.2 12.2-17.058 18.902-2.83 6.58-8.76 13.3-11.759 13.297-1.04 0-2.37-1.24-2.954-2.753zm421.2-1.388c-3.6-4.65-4.82-7.51-2.646-6.162 2.18 1.35 6.54 8.46 5.184 8.462-.418 0-1.56-1.04-2.538-2.3zm114.91-10.58c-1.73-2.02-4.28-3.68-5.67-3.68s-6.16-3.12-10.598-6.933-10.4-8.13-13.296-9.595-6.33-4.81-7.682-7.429-4.56-5.72-7.128-6.892c-2.56-1.17-6.88-5.47-9.582-9.558s-5.49-7.43-6.187-7.433c-1.65 0-39.2-42-49.808-55.659-4.5-5.82-8.73-10.6-9.393-10.58s-1.72-1.34-2.347-2.971c-1.34-3.5 11.1 6.99 16.386 13.867 2.02 2.61 6.58 7.75 10.12 11.415s13.1 14 21.16 22.862c22.2 24.4 52.6 52.8 57.305 53.494 4.31.632 4.92-4.07 1.254-9.695l-3.36-5.164 5.002 3.636c2.75 2 5.03 4.3 5.06 5.105.077 1.95 5.79 13.4 10.976 21.991 4.43 7.34 3.04 9.36-2.212 3.22zm-381.23-12.283c1.35-6.2 4.72-13.5 6.235-13.477.598 0 2.14 1.69 3.433 3.757 3.16 5.06-.73 13.5-6.608 14.32-3.72.53-4.07.017-3.06-4.6zm416.89-2.587c-4.44-.872-11.1-3.13-14.72-5.024s-9.08-4.04-12.068-4.779c-3.45-.852-4.62-1.84-3.207-2.711 1.22-.754-1.58-1.32-6.218-1.254-8.2.113-8.51-.09-11.136-7.244-2.68-7.3-3.7-20.6-1.738-22.569.562-.562 2.48.228 4.253 1.754 5.35 4.6 7.89 5.64 6.798 2.784-.545-1.42-4.63-5.31-9.087-8.648-10-7.51-12.4-12-5.308-10.231 4.13 1.04 4.66.728 3.599-2.052-1.11-2.9-.775-2.86 2.987.391 6.22 5.37 16.2 10.5 16.202 8.408 0-1.02-1.45-2.7-3.22-3.728-1.77-1.03-2.35-1.9-1.291-1.931 2.96-.086 21.2 18 30.35 30.092 16.7 22.1 18.2 24.2 18.245 26.432.084 2.57-2.64 2.63-14.441.311zm-115.78-6.283c-1.16-2.53-1.39-4.61-.514-4.608 1.53 0 4.28 7.55 3.161 8.667-.302.301-1.49-1.52-2.648-4.06zm-292.69-8.538c-4.31-1.63-4.33-1.73-.967-5.445 2.5-2.76 3.63-3.13 4.181-1.345.415 1.34 1.51 3.4 2.436 4.577 2.39 3.04-.488 4.16-5.65 2.213zm-48.658-8.455c2.42-4.79 5.21-9.51 6.19-10.488.98-.98 1.78-3.3 1.782-5.152s1.14-3.81 2.543-4.346 3.06-4.21 3.692-8.164c.716-4.48 2.53-7.93 4.817-9.151 2.02-1.08 3.72-1.31 3.784-.518s.866-.418 1.781-2.695 2.5-4.14 3.517-4.14c5.93 0-9.64 36.2-18.339 42.643-3.01 2.23-5.48 5.05-5.475 6.265 0 2.06-3.91 4.45-7.26 4.451-.792 0 .544-3.92 2.968-8.706zm-12.754 5.766c-1.66-1.66.625-6.39 2.519-5.221.906.56 1.65 2.21 1.647 3.67 0 2.71-2.19 3.53-4.167 1.552zm.487-9.633c0-2.8 8.94-15.6 12.135-17.44 1.46-.821 2.18-2.27 1.595-3.22s-.239-1.73.773-1.727c3.22 0 3.99 3.25 1.04 4.383-1.56.599-2.59 2.16-2.291 3.46.573 2.5-4.62 9.73-10.044 14.003-1.96 1.54-3.21 1.75-3.208.542zm-7.215-6.594c-.08-1.94.355-3.03.966-2.415s.677 2.2.145 3.527c-.587 1.47-1.02 1.03-1.112-1.112zm371.53-1.073c0-1.01.365-1.84.811-1.84s1.32.828 1.949 1.84.26 1.84-.811 1.84-1.95-.828-1.949-1.84zm-375.36-7.36c0-2.02.828-3.68 1.84-3.68s1.84 1.66 1.84 3.68-.828 3.68-1.84 3.68-1.84-1.66-1.84-3.68zm-60.719.217c0-1.01.828-2.35 1.84-2.977s1.84-.309 1.84.703-.828 2.35-1.84 2.977-1.84.309-1.84-.703zm179.4-2.057c-.625-1.01-.26-1.84.811-1.84 1.07 0 1.95.828 1.949 1.84s-.365 1.84-.811 1.84-1.32-.828-1.949-1.84zm-109.5-4.62c-1.89-2.28-1.62-2.74 1.632-2.74 2.15 0 3.9.779 3.905 1.731 0 3.19-3.24 3.78-5.537 1.008zm93.884-1.251c.016-1.32.831-3.65 1.812-5.169 1.45-2.24 1.79-2.01 1.812 1.271.016 2.22-.8 4.54-1.812 5.169s-1.83.053-1.812-1.271zm336.08-11.915c-.675-.675-1.23-2.43-1.227-3.905 0-2.17.522-2.25 2.76-.388 1.52 1.26 2.76 3.02 2.76 3.905 0 1.9-2.55 2.14-4.293.388zm-120.83-4.293c-1.08-2.02-1.56-3.68-1.05-3.68s1.81 1.66 2.89 3.68 1.56 3.68 1.05 3.68-1.81-1.66-2.889-3.68zm-276-24.731c0-.446.828-1.32 1.84-1.949 1.01-.625 1.84-.26 1.84.811 0 1.07-.828 1.95-1.84 1.949s-1.84-.365-1.84-.811zm-287.27-55.607c-1.8-2.18-1.92-3.26-.414-3.77 1.16-.391 7.22-4.81 13.462-9.821 6.24-5.01 12.7-9.12 14.449-9.135 3.6-.03 28.8-13.4 32.818-17.471 1.51-1.5 4.72-3.24 7.143-3.843s4.86-2.52 5.406-4.259 4.93-6 9.726-9.477c12.9-9.33 14.8-10.2 9.185-4.184-6.04 6.47-6.4 9.36-1.258 10.152 3.16.489 2.23 1.76-5.52 7.524-5.13 3.82-9.32 8.09-9.322 9.507s-.975 2.9-2.166 3.293-1.6 1.63-.918 2.741c1.85 2.99 8.75.581 8.174-2.852-.848-5.08 5.71-4.68 8.065.485 3.26 7.15-.3 13.4-8.491 14.96-6.27 1.18-9.75 3.7-7.787 5.662.509.509 8.25-.251 17.204-1.69 19.4-3.12 27.3-3.19 24.032-.208-5.78 5.25-18.4 8.09-36.089 8.087-9.98 0-27.6 1.65-39.062 3.661-26 4.54-35.3 4.7-38.637.64zm193.43-12.332c0-1.32 1.24-2.4 2.76-2.396s2.76.602 2.76 1.337-1.24 1.81-2.76 2.396c-1.58.607-2.76.037-2.76-1.337zm-99.359-19.569c0-2.86 1.23-3.68 5.52-3.68 6.33 0 6.61.484 2.628 4.469-4.01 4.01-8.15 3.61-8.149-.789zm588.79-33.12c0-1.01.365-1.84.811-1.84s1.32.828 1.949 1.84.26 1.84-.811 1.84c-1.07 0-1.95-.828-1.949-1.84zm-27.6-16.56c0-2.02 1.11-3.68 2.475-3.68s3.97 1.66 5.805 3.68c3.26 3.61 3.21 3.68-2.475 3.68-4.58 0-5.8-.778-5.805-3.68zm-474.72-5.52c0-1.01 1.29-1.84 2.869-1.84s2.36.828 1.731 1.84c-.625 1.01-1.92 1.84-2.869 1.84-.952 0-1.73-.828-1.731-1.84zm-20.24-4.6c0-1.53 1.64-2.76 3.68-2.76s3.68 1.23 3.68 2.76-1.64 2.76-3.68 2.76-3.68-1.23-3.68-2.76zm480.24.92c0-1.01.365-1.84.811-1.84s1.32.828 1.949 1.84.26 1.84-.811 1.84c-1.07 0-1.95-.828-1.949-1.84zm-574.08-53.24c-2.53-.772-7.95-3.12-12.052-5.211-4.1-2.09-15.3-6.87-24.84-10.612-19.1-7.48-34.9-15.4-34.868-17.528 0-3.94 40.8-12 45.86-9.056 2.22 1.3 1.54 1.71-2.855 1.752-3.16.031-6.78 1.3-8.045 2.816s-3.98 2.76-6.052 2.76-3.28.479-2.697 1.064c1.81 1.81 10.6 2.21 11.662.528.541-.876 2.8-1.58 5.015-1.564 3.01.021 3.39.435 1.496 1.634-3.25 2.06-1.05 5.7 3.456 5.698 4.19 0 6.45-3 3.231-4.298-1.58-.638-1.43-.978.472-1.077 1.53-.08 3.6 1.71 4.6 3.984s3.47 4.42 5.496 4.779c2.02.357 4.47 1.4 5.428 2.311 1.69 1.61-7.8 2.66-16.928 1.878-8.08-.695-3.98 3.25 6.44 6.186 19.5 5.5 31 9.86 26.483 10.012-3.07.103-4.03.952-3.278 2.905 1.15 2.99-.803 3.24-8.025 1.039zm-32.2-20.359c-.625-1.01-1.92-1.84-2.869-1.84-.952 0-1.73.828-1.731 1.84s1.29 1.84 2.869 1.84 2.36-.828 1.731-1.84zm189.52 20.24c-.625-1.01-.309-1.84.703-1.84s2.35.828 2.977 1.84c.626 1.01.309 1.84-.703 1.84s-2.35-.828-2.977-1.84zm-176.64-42.32c-.645-1.04.901-1.84 3.571-1.84 2.59 0 4.71.828 4.709 1.84s-1.61 1.84-3.571 1.84-4.08-.828-4.709-1.84zm-17.427-82.727c-1.49-.941-2.28-2.14-1.76-2.659 1.43-1.43 9.07.935 9.066 2.802 0 2.11-3.86 2.04-7.307-.143zm-12.933-1.912c-4.32-1.38-4.24-1.48 1.489-1.657 3.63-.109 5.63.56 4.951 1.657-.625 1.01-1.3 1.76-1.489 1.657-.193-.101-2.42-.846-4.951-1.657zm697.77-13.225c1.14-3.41 5.1-3.98 5.098-.728 0 1.6-1.31 2.91-2.913 2.913s-2.59-.983-2.185-2.185zm-33.541-4.394c3.54-1.67 10.7-5.01 15.824-7.426 9.66-4.53 16.5-5.75 14.571-2.612-.921 1.49-10.8 5.06-33.155 11.935-2.02.624-.782-.23 2.76-1.897zm-344.13-72.643c-1.11-2.08-1.69-4.77-1.281-5.98s2.14.493 3.847 3.782c1.71 3.29 2.28 5.98 1.281 5.98s-2.73-1.7-3.847-3.782zm211.65-3.469c0-1.07.828-1.95 1.84-1.949s1.84.365 1.84.811-.828 1.32-1.84 1.949-1.84.26-1.84-.811zm154.52-9.253c5.6-7.87 7.35-8.31 3.922-.985-1.63 3.48-4.05 6.36-5.388 6.389-1.66.041-1.2-1.66 1.466-5.404zm2.233-13.72c8.32-8.1 12.5-10.3 12.527-6.669 0 2.01-9.8 9.64-16.56 12.878-3.2 1.53-1.96-.365 4.033-6.209zm-64.752-15.414c0-2.12 11.8-13.2 14.026-13.241 1.04 0 6.69-3.73 12.554-8.28s11.4-8.28 12.282-8.28c4.1 0 .752 4.05-8.659 10.47-5.65 3.86-14.1 10.1-18.826 13.91-8.51 6.87-11.4 8.24-11.376 5.421zm82.799-.04c0-.836 2.09-3.48 4.636-5.874l4.636-4.355-2.93 5.874c-2.71 5.42-6.34 7.92-6.341 4.355zm-316.48-8.709c0-2.67.797-4.22 1.84-3.571 1.01.626 1.84 2.74 1.84 4.709 0 1.96-.828 3.57-1.84 3.571s-1.84-2.12-1.84-4.709zm303.6-1.731c0-5.45 1.98-5.85 6.155-1.235 4.16 4.6 3.83 5.84-1.555 5.835-3.68 0-4.6-.92-4.6-4.6zm-71.759.197c0-.398 1.28-1.22 2.856-1.819 1.64-.628 2.38-.32 1.731.723-1.08 1.75-4.59 2.59-4.587 1.096zm65.779-17.975c-5.09-1.86-7.09-7.06-2.709-7.061 3.11 0 10.5 5.26 10.529 7.464 0 2.08-1.18 2.02-7.82-.403zm-17.022-11.201c2.04-6.25 2.28-14.8.519-18.4-.954-1.96-.849-3.22.267-3.22 1.01 0 2.78 3.52 3.925 7.82s2.85 8.75 3.783 9.887c1.12 1.37.15 3.08-2.875 5.06-6.11 4-7.22 3.78-5.619-1.147zm-371.75-7.022c-.667-1.08-.818-2.36-.336-2.839s1.37.401 1.967 1.962c1.24 3.24.184 3.81-1.631.877z"/> + <path fill="#e7c807" d="m435.36 825.6c-2.1-2.32-5.36-8.36-7.233-13.415-2.5-6.76-7.16-12.9-17.558-23-17.6-17.2-27.4-36.9-27.366-55.199 0-4.81-1.12-11.9-2.492-15.869-3.81-10.9-4.99-19.7-3.056-22.771 1.46-2.3 2.63-1.8 7.043 3.02 4.12 4.5 6.38 5.57 10.178 4.845 4.26-.814 4.89-.329 4.887 3.772 0 2.59.784 5.19 1.741 5.782 2.55 1.58.902-25.3-2.596-42.223-1.63-7.88-2.51-14.8-1.972-15.303s.986-.02.986 1.161 1.66 3.8 3.68 5.827 3.68 5.42 3.68 7.553 2.07 7.99 4.6 13.031 4.66 11 4.745 13.147.563 2.95 1.073 1.689c1.51-3.75 5.84-2.63 9.108 2.357 4.98 7.6 4.96 3.97-.072-11.94-5.71-18.1-5.82-20.3-.997-20.317 2.06 0 4.26-1.36 4.898-3.023 1.16-3.02-3.14-28.4-7.754-45.737-1.34-5.06-3.37-12.7-4.494-17.02-2.01-7.66-6.07-10.3-8.003-5.295-.533 1.39-1.55 6.56-2.262 11.5s-2.54 10.4-4.07 12.148c-2.62 3-3.06 2.97-7.879-.46-5.41-3.85-9.13-4.68-9.133-2.027 0 .883 1.57 5.23 3.483 9.66s4.06 10.1 4.77 12.654l1.287 4.6-3.39-4.6c-1.86-2.53-5.05-8.68-7.07-13.661-2.02-4.98-4.58-9.35-5.674-9.711-1.1-.358-3.09 3.92-4.434 9.521-2.68 11.2-4.85 12.9-6.604 5.111-.628-2.78-2.54-9.2-4.245-14.26-2.6-7.71-3.84-9.2-7.634-9.2-4 0-4.5.747-4.246 6.44.156 3.54.871 8.7 1.589 11.469s.741 6.49.052 8.28c-1.19 3.09-1.35 3.08-3.123-.081-1.03-1.83-1.45-4.44-.928-5.788.947-2.47-7.57-33-10.458-37.428-1.08-1.67-3.89-2.04-9.38-1.213-7.53 1.13-7.99.913-11.761-5.476-5.22-8.85-8.28-9.68-17.924-4.856-8.67 4.33-12 3.94-10.683-1.249.442-1.77-1.18-5.5-3.609-8.281-3.75-4.3-5.35-4.88-10.636-3.867-3.42.658-8.29 2.61-10.823 4.342-2.53 1.73-6.67 4.2-9.2 5.497l-4.6 2.351 3.91-4.39c5.65-6.34 8.05-11.7 8.05-17.889 0-4.44-1.06-5.83-5.648-7.43-4.07-1.42-6.45-4.01-8.521-9.283-2.53-6.44-3.67-7.38-9.532-7.871-5.74-.48-6.74-1.26-7.243-5.633-.394-3.42-2.34-5.99-5.98-7.867-4.08-2.11-5.4-4.09-5.396-8.113 0-8.36-1.8-11.1-7.189-11.143-10.2 0-12-7.13-4.624-18.292 5.5-8.32 5.29-14.8-.595-17.705-2.27-1.13-5.65-3.42-7.505-5.106s-5.12-3.06-7.253-3.057-6.09-.842-8.795-1.871c-6.53-2.48-3.64-6.07 7.354-9.145 7.36-2.06 11-4.99 19.406-15.552 2.64-3.33 2.42-3.42-5.429-2.172-4.5.716-9.06 1.99-10.12 2.821-1.86 1.46-8.7 2.7-47.011 8.486-9.61 1.45-28.7 2.7-42.32 2.772-28.9.152-49.4 2.1-51.194 4.863-.685 1.07-3.12 2.53-5.412 3.243-5.53 1.73-3.81 4.02 4.147 5.51 3.55.667 6.46 2.08 6.46 3.152 0 1.3-5.57 1.55-17.02.762-9.36-.648-20.5-1.18-24.84-1.189s-7.82-.688-7.82-1.516 3.93-2.98 8.74-4.782c15.2-5.72 24.7-11.5 28.257-17.345 3.81-6.27 5.79-6.6 22.802-3.804 6.07.997 27.2 1.86 46.92 1.919 30 .09 38.4-.504 51.52-3.65 8.6-2.07 18.6-3.76 22.16-3.769 9.67-.019 25.9-8.93 28.06-15.361 1.52-4.61.953-6.03-4.732-11.96-5.53-5.77-6.18-7.32-4.528-10.872 1.6-3.45 3.39-4.14 10.733-4.14 4.85 0 9.36-.888 10.03-1.974s-.863-5.99-3.41-10.898l-4.63-8.924 6.278 1.019c8.54 1.39 8.19-2.02-1.222-11.864-4.1-4.29-6.96-8.61-6.354-9.59.608-.984-2.44-4.08-6.78-6.868s-12.5-9.24-18.11-14.329c-5.62-5.09-12.5-10.4-15.201-11.874-4.48-2.36-5.22-2.29-7.433.737-2.37 3.24-2.72 3.22-9.639-.417-3.95-2.08-10.1-4.77-13.622-5.982s-8.1-2.89-10.12-3.728c-2.02-.837-9.26-3.3-16.08-5.478-12-3.84-18.7-7.97-10.189-6.359 16.8 3.2 25 5.26 29.029 7.254 2.53 1.27 7.61 2.85 11.286 3.513 10.2 1.84 10.1-2.1-.286-21.952-5.04-9.6-9.16-18.7-9.161-20.137s-2.48-4.51-5.52-6.759-5.52-5.08-5.52-6.306c0-2.08-3.66-6.87-23.46-30.693-5.95-7.16-7.83-11-7.845-15.96-.014-3.6-.549-8.51-1.189-10.899-1.04-3.88-.707-4.2 3.104-2.995 4.59 1.46 4.85 1.63 14.914 10.04 3.68 3.07 7.54 5.58 8.586 5.584s3.61 2.28 5.702 5.06c2.95 3.93 4.16 4.51 5.431 2.584 1.31-1.98 3.13-1.53 9.198 2.3 4.16 2.63 8.62 4.79 9.903 4.81 4.26.061 35.7 22.8 38.326 27.771 1.02 1.91 2.81 3.48 3.977 3.475s4.08 1.84 6.477 4.097c4.03 3.78 4.26 3.82 3.059.46-.716-2-2.55-5.09-4.077-6.868-5.59-6.5-.838-4.64 11.261 4.423 7.22 5.41 13.5 8.85 15.118 8.246 3.96-1.52 3.35-10.1-1.685-23.478-5.4-14.4-9.31-37.6-7.988-47.512.542-4.04.325-10.3-.482-13.844s-.811-6.91-.011-7.401c2.36-1.46 3.68 4.17 3.681 15.7 0 10.3 4.1 30.5 6.661 32.877.659.606.678-3.04.043-8.098-2-15.9-4.8-44-4.833-48.408-.018-2.34-.756-3.8-1.642-3.253-3.95 2.44 1.5-27.1 7.424-40.338 1.87-4.16 3.32-11.8 3.346-17.53.022-5.59 1.17-11.8 2.548-13.8 1.47-2.13 2.56-8.75 2.622-16.049.209-22.6.352-24.2 1.993-22.448.881.961 4.67 10 8.411 20.148s7.52 19.7 8.392 21.393 2.18 6.2 2.919 10.114c1.78 9.49 11.9 39.1 22.126 64.601 4.56 11.4 7.7 21.7 6.979 22.845-.911 1.47-2.07 1.09-3.791-1.268-2.24-3.07-2.48-2.75-2.479 3.386 0 4.51 1.1 7.46 3.287 8.829 2.32 1.45 3.09 3.76 2.61 7.855-.381 3.26 1.32 11.1 3.888 17.932 4.35 11.6 4.18 18.4-.38 15.558-1.17-.721-2.05-.032-2.046 1.604 0 1.58 1.23 2.87 2.725 2.869 3.39 0 5.71 8.44 3.164 11.524-2.44 2.96-.63 12.4 2.381 12.396 1.28 0 3.35 1.24 4.611 2.76s3.16 2.76 4.212 2.76 1.4-.523.759-1.162c-.639-.639-.332-2.71.682-4.607 2.82-5.27 2.31-25.6-.831-33.051-1.54-3.64-3.63-13.3-4.648-21.378s-3.07-18-4.568-21.9-3.6-11.5-4.688-16.919c-1.08-5.38-5.69-17.6-10.244-27.133-8.92-18.7-10.4-24.3-4.594-16.867 2.02 2.57 3.68 5.45 3.68 6.403s1.52 3.1 3.382 4.785c3.2 2.89 3.54 2.73 6.372-2.935 10.2-20.5 19.3-52.5 17.19-60.799-.718-2.86-3.29-6.04-5.834-7.193-5.85-2.67-5.83-5.16.051-5.162 6.39 0 11.3-5.6 12.847-14.525.702-4.16 1.9-7.56 2.659-7.555 1.91 0 5.65 8.59 5.654 12.966 0 2 1.25 3.59 2.825 3.593 2.22 0 2.42.76.927 3.547-3.8 7.1 3.12 13.2 7.041 6.161 1.15-2.06 1.13-4.38-.067-6.616-1.44-2.7-1.02-4.02 1.97-6.113 2.17-1.52 5.1-7.19 6.793-13.164 3.28-11.6 8.11-18.8 8.112-12.178 0 2.04 2.47 11.5 5.487 21.094 5.83 18.5 6.52 27.8 3.797 51.399-1.02 8.81-.929 15 .251 17.217 1.24 2.33 1.22 4.07-.064 5.355-1.32 1.32-2.24.261-2.992-3.418-.596-2.93-2.7-10.3-4.679-16.366l-3.595-11.04.636 15.64c1.02 25.1 2.42 36.7 6.584 54.28 4.97 21.1 4.74 19.2 3.306 26.68-.675 3.54-1.74 12.9-2.376 20.7s-1.91 14.3-2.833 14.26-1.71-1.86-1.741-4.14c-.057-4.02-.192-3.99-4.626 1.053-2.51 2.86-4.19 5.81-3.72 6.566.467.755.998 9.4 1.181 19.223s1.06 18.3 1.938 18.843 1.74-.506 1.893-2.337c.159-1.83.555-5.4.882-7.929s.675-8.33.775-12.88c.266-12.1 1.44-16.6 4.121-15.529 1.47.566 2.22 3.8 2.004 8.675-.189 4.28.816 9.61 2.233 11.849s2.58 5.8 2.577 7.902c0 8.92 5.9 26.9 9.58 29.233 5.3 3.31 6.91.15 6.966-13.61.023-6.07.902-16.3 1.954-22.822 1.44-8.86 1.37-12.3-.284-13.8-1.61-1.48-1.87-1.44-.97.164 1.04 1.86.043 8.05-3.367 20.818-.405 1.52-1.9 6.04-3.33 10.053l-2.593 7.293-1.25-7.815c-.687-4.3-.512-9.24.389-10.973 3.12-6.01 5.18-56.6 3.047-74.917-.354-3.04-.711-6.14-.793-6.9-.322-2.97-3.48-1.16-4.794 2.76-1.33 3.94-1.43 3.89-2.195-1.112-.553-3.63.336-6.31 2.876-8.678 2.02-1.88 4.64-8.06 5.816-13.725 1.18-5.66 3.1-10.6 4.283-10.948s4.42-1.15 7.205-1.758 5.06-2.23 5.06-3.608 1.24-3.53 2.76-4.79 2.76-3.42 2.76-4.804c0-3.61 19.5-34.9 28.562-45.796 4.21-5.06 9.93-12.7 12.727-16.929 4.23-6.44 11.8-13.4 14.457-13.431 1.08 0-1.76 18.2-4.963 31.854-1.62 6.89-2.94 14.2-2.945 16.325 0 3.26.413 3.45 2.926 1.363 2.66-2.21 2.83.292 1.817 27.662-.912 24.8-.629 30.8 1.598 34.221 2.01 3.06 2.27 5.65 1.023 10.001-.926 3.23-1.22 8.16-.665 10.966.571 2.86-.17 7.43-1.686 10.411-1.49 2.92-3.28 10.1-3.988 15.866s-2.05 11-2.994 11.608c-2.72 1.68-2.16 17.9.589 16.955 3.45-1.13 6.93-12.8 4.641-15.654-1.31-1.61-.958-3.54 1.173-6.44 1.67-2.28 4.77-6.85 6.875-10.168 2.11-3.32 5.39-6.86 7.302-7.885s3.47-3.2 3.47-4.839 2.07-5.7 4.6-9.012 4.6-6.34 4.6-6.718 3.73-4.69 8.28-9.578c9.36-10 11.2-8.85 2.718 1.792-3.06 3.85-6.01 9.14-6.551 11.753s-1.76 6.17-2.692 7.907c-1.29 2.38-1.07 2.91.889 2.158 1.42-.547 3.88-3.71 5.459-7.038 3.07-6.47 7.9-11.4 9.556-9.744 1.29 1.29-3.89 11.4-10.092 19.76-12.6 17-18.5 29.5-16.248 34.492 1.96 4.32 6.84 5.73 6.84 1.985 0-1.18 1.14-3.46 2.529-5.06s5.22-8.29 8.516-14.865 6.72-13.4 7.607-15.181c1.39-2.76 3.84-8.96 11.815-29.899 1.24-3.27.856-3.18-3.486.774-6.8 6.2-8.01 3.66-2.268-4.771 3.88-5.7 4.27-7.16 2.003-7.638-3.82-.812-3.65-1.33 3.182-9.998 14.1-17.9 47.1-46.4 50.179-43.34.528.527-1.87 5.01-5.33 9.966-6.46 9.25-25.1 45.3-25.07 48.5 0 .997-2.49 3.1-5.528 4.671-4.23 2.19-7.69 7.34-14.72 21.915-5.06 10.5-9.19 20.2-9.192 21.671s-2.07 5.42-4.6 8.849-4.6 7.28-4.6 8.554-2.07 4.39-4.6 6.919c-5.26 5.26-5.9 9.39-1.723 10.997 1.58.607 2.36 1.94 1.728 2.962-.753 1.22-2.3 1.24-4.485.072-2.49-1.33-4.1-.944-6.328 1.52-1.64 1.82-2.99 4.03-2.992 4.913s-2.33 4.13-5.176 7.215c-7.55 8.18-10.1 14.9-6.804 18.204 2.24 2.24 1.81 3.84-3.171 11.563-3.18 4.93-7.9 13.1-10.491 18.108l-4.718 9.148 3.68 7.542c3.33 6.82 11.2 13.2 13.52 10.935.499-.499-.889-2.82-3.086-5.159-7.2-7.67-5.42-9.8 10.136-12.108 15.4-2.29 19.7-.942 15.14 4.681-2.3 2.83-2.22 3.04.781 1.918 1.85-.696 3.72-1.26 4.14-1.265s.77-1.49.77-3.312c0-4.68 3.63-7.74 9.108-7.667l4.692.061-4.14 3.454c-2.28 1.9-4.14 4-4.14 4.67s-1.24 2.46-2.76 3.976c-4.6 4.6-3.28 6.74 3.463 5.649 3.42-.556 6.94-.32 7.82.523s3.6 1.81 6.053 2.149c7.01.969 6.47 4.5-1.159 7.55-6.6 2.64-18.9 15.4-18.936 19.638 0 1.07 3.43 1.95 7.631 1.948 6.85 0 8.71-1.08 18.146-10.613 10.6-10.7 22.7-18.8 24.964-16.538.664.664-5.51 7.82-13.727 15.901-14.2 14-17.4 18.6-12.894 18.61 1.22 0 1.6 1.74.95 4.342-.924 3.68-.184 4.62 4.861 6.144l5.95 1.802-6.181 3.516c-3.4 1.93-7.95 4.94-10.12 6.674l-3.939 3.159 5.242.061c5.59.065 17.8 5.1 17.758 7.346 0 .74-1.64 2.83-3.637 4.636-4.35 3.94-3.28 6.48 2.717 6.479 2.41 0 4.85.75 5.413 1.667 1.28 2.06 13.9-1.58 13.907-4.011 0-2.42 9.48-9.59 12.851-9.725 5.84-.228 22.1-9.12 22.108-12.075 0-1.65 1.32-4.1 2.924-5.432 2.44-2.03 2.86-1.99 2.542.235-.848 5.91.056 7.65 3.274 6.311 6.18-2.58 19.3-4.52 21.364-3.173 1.15.749 5.41 1.36 9.456 1.363 4.91 0 7.21.767 6.9 2.3-.253 1.26.368 2.3 1.38 2.3s1.84-.828 1.84-1.84c0-2.69 3.86-2.25 7.254.824 5.67 5.13 56.9 3.56 83.609-2.571 4.94-1.13 9.31-1.74 9.703-1.339 1.74 1.74-2.18 6.42-11.634 13.898-9.47 7.49-11.8 8.4-34.373 13.016-14.6 3-28.9 7.22-36.16 10.676-6.58 3.14-14.7 6.7-17.94 7.907s-5.98 3.34-5.98 4.731c0 1.71-2.25 2.53-6.9 2.509-5.39-.022-6.3-.458-4.14-1.989 2.07-1.47.916-1.72-4.6-.98-4.05.539-11.9 1.48-17.48 2.1-17.1 1.9-18.7 2.47-17.509 6.323 1.43 4.52-1 5.91-5.105 2.908-2.81-2.06-2.87-2.52-.44-3.459 1.55-.594 2.81-3.08 2.814-5.526 0-5-2.91-5.62-36.8-7.821-9.61-.624-18.2-1.58-19.144-2.136s-1.07-.046-.351 1.122c.722 1.17 2.35 2.12 3.613 2.124s3.9 1.17 5.847 2.594c3.48 2.55 3.48 2.66.059 6.448-1.92 2.12-6.67 4.71-10.555 5.757-8.6 2.32-8.86 4.93-1.548 15.561 3.04 4.41 5.52 8.62 5.52 9.341 0 2.34 17.2 20 23.869 24.488 3.57 2.41 9.52 7.27 13.224 10.791 3.7 3.52 7.58 5.88 8.608 5.244 1.94-1.2 16.4 7.72 20.497 12.646 1.28 1.54 3.68 2.78 5.326 2.748 2.33-.047 2.03-.866-1.349-3.68-6.54-5.45-2.13-4.35 7.783 1.936 8.2 5.2 12.2 5.76 12.201 1.694 0-1.57-21.6-12.8-24.632-12.769-2.95 0-25-18.6-25.047-21.036 0-1.81 7.02-1.13 7.667.738.391 1.13 1.62 1.14 3.373.028 2.41-1.53 2.39-1.76-.175-1.781-1.61-.016-4.43-1.68-6.25-3.692s-6.92-5.78-11.325-8.358c-10.8-6.31-10.4-8.91 1.19-7.803 8.22.79 9.2.5 9.2-2.74 0-3.72 1.49-3.76 12.336-.391 3.32 1.03 4.27.393 5.259-3.531.662-2.64 1.69-4.79 2.285-4.793 2.68 0 15.1 9.95 15.079 12.102 0 3.2-3.13 5-4.581 2.648-1.49-2.4-4.62-2.42-4.619-.03 0 1.01 1.25 1.84 2.778 1.84s4.2 1.66 5.929 3.68 4.19 3.68 5.453 3.68c4.84 0 18.8 8.13 20.956 12.251 1.27 2.37 3.34 4.31 4.605 4.309 4.42 0 8.12-2.26 8.12-4.95 0-1.49 1.04-2.37 2.3-1.942s2.32 2.72 2.339 5.093c.03 3.25 2.31 5.59 9.2 9.438 5.04 2.82 10.6 5.15 12.276 5.181 1.71.033 4.2 1.51 5.52 3.285 4.06 5.45 31.8 14.7 63.584 21.164 12.6 2.58 18.9 4.66 18.86 6.32 0 1.48-2.04 2.46-5.06 2.434-2.78-.02-12.9.86-22.54 1.955-22.4 2.55-54.3.96-71.239-3.561-11.3-3.01-13.6-3.15-15.405-.978-2.84 3.42-5.3 3.24-14.814-1.079-4.41-2-9.26-3.65-10.781-3.666-3-.028-7.86 8.68-6.28 11.244.538.87-.265 1.58-1.783 1.582s-3.27-.828-3.897-1.84c-.626-1.01-2.06-1.84-3.189-1.84s-.108 2.07 2.269 4.6 5.45 4.6 6.832 4.6c3.1 0 16.1 12.6 17.716 17.138.653 1.84 2.64 3.19 4.419 3.008 6.61-.674 9.67.164 9.673 2.643 0 3.22 8.68 9.03 11.173 7.489 2.81-1.74 10.5 3.85 24.151 17.648l12.324 12.42-6.088 1.142c-6.71 1.26-17.6-.669-42.109-7.439-22.2-6.15-24.7-4.22-12.096 9.472 7.45 8.08 7.5 8.24 2.891 8.239-2.59 0-5.8-1.04-7.134-2.3-4.12-3.9-25.7-14.3-29.731-14.26-3.39 0-3.18.626 2.098 6.068 3.24 3.34 5.88 7.22 5.881 8.624 0 3.67-10.9-7.24-12.173-12.124-.945-3.76-9.61-10.7-28.365-22.781-14.5-9.34-42.5-39.5-49.724-53.614-5.86-11.4-19.9-20.7-18.896-12.453 4.1 32.6 13.4 58.1 30.907 84.38 10.1 15.1 30.3 36.9 34.379 36.861 1.41 0 8.73 6.21 16.272 13.8 13.4 13.5 15.5 19.2 3.041 8.28-3.46-3.04-7.21-5.52-8.344-5.52-3.52 0-2.27 10.1 2.621 21.158 2.57 5.82 4.32 11.5 3.894 12.649s-1.35.416-2.042-1.608c-4.74-13.8-26.9-50.6-30.511-50.6-.703 0-3.65-3.52-6.55-7.82s-8.64-12-12.752-17.02c-8.62-10.6-19.4-28.1-23.682-38.409-2.74-6.61-3.38-7.05-8.693-5.983-4.7.939-7.36-.043-14.687-5.424-10.1-7.39-15.6-7.26-17.528.415-2.59 10.3.501 39.9 5.644 54.001 2.76 7.59 5.85 17.5 6.867 22.08 2.71 12.1 16.8 40 25.491 50.488 6.87 8.27 7.44 8.6 6.209 3.68-1.22-4.9-1.06-5.17 1.725-2.877 4.04 3.33 30.3 39.4 31.852 43.753 1.7 4.75-8.88-5.26-15.21-14.395-5.96-8.6-8.9-8.89-11.613-1.114l-2.069 5.935-2.839-5.475c-1.56-3.01-6.3-10-10.531-15.552-8.37-11-9.96-13.2-19.791-27.918-11-16.4-12.7-19.7-12.74-23.496 0-6.27-8.84-28.4-12.546-31.353-1.94-1.56-6.2-8.19-9.462-14.732-7.67-15.4-11.1-20.4-11.111-16.276 0 6.82 12.2 36.2 19.417 46.89 2.22 3.26 5.95 12 8.301 19.369s4.93 14.3 5.737 15.437 4.4 11 7.976 21.884 7.64 22 9.028 24.676 4.05 9.73 5.928 15.769 5.22 13.1 7.423 15.64l4.011 4.667-.556-4.6c-.306-2.53-2.74-10.3-5.42-17.317-2.68-7-4.41-14.2-3.848-15.92.575-1.81-1.01-6.19-3.65-10.079-2.62-3.85-4.63-9.39-4.585-12.6l.081-5.723 3.323 6.44c1.83 3.54 4.81 11 6.632 16.56 7.79 23.8 8.92 26 13.23 24.899 5.72-1.41 7.19 2.33 2.591 6.61-3.16 2.95-3.52 4.33-1.894 7.363 2.45 4.58 1.01 8.97-2.95 8.968-3.94 0-1.83 7.2 3.309 11.264 2.2 1.74 3.32 4.16 2.688 5.807-.596 1.55.366 4.13 2.138 5.737 1.77 1.6 5.08 6.86 7.351 11.673s4.9 10.2 5.832 11.916c2.8 5.2 5.16 18 3.505 18.973-3.2 1.98-15.1-11.2-20.102-22.306-2.88-6.36-7.59-15.1-10.467-19.52-5.88-8.95-6.4-9.81-18.031-29.23-8.3-13.9-16.1-20.4-19.875-16.652-.967.967-1.64 12-1.492 24.468.26 22.2-2.45 55.3-5.117 62.506-1.29 3.48-1.46 3.46-5.155-.622zm-11.677-106.23c0-.952-.828-2.24-1.84-2.869-1.01-.625-1.84.154-1.84 1.731s.828 2.87 1.84 2.869 1.84-.779 1.84-1.731zm10.255-7.052c-3.18-3.04-3.23-2.99-1.121 1.121 1.21 2.36 2.71 3.79 3.325 3.176.617-.617-.375-2.55-2.204-4.298zm-36.015-104.62c0-6.88-.545-8.2-3.182-7.694-1.75.337-3.97 2.86-4.936 5.599-1.38 3.93-1.05 5.76 1.588 8.679 4.62 5.1 6.53 3.17 6.53-6.584zm-23.156-4.61c-1.71-2.77-8.13 3.88-8.065 8.358.054 3.56.402 3.46 4.626-1.338 2.51-2.86 4.06-6.02 3.439-7.02zm-23.595-8.251c-.584-1.52-1.9-2.25-2.916-1.624-2.62 1.62-2.3 7.83.447 8.772 2.65.911 4.03-3.08 2.469-7.148zm11.016-1.695c-.624-2.49-2.43-4.52-4.013-4.521s-2.58.621-2.206 1.38c4.64 9.52 6.04 11.6 6.644 9.79.39-1.17.199-4.16-.426-6.649zm228.93-6.361c0-1.01-.877-1.84-1.949-1.84s-1.44.828-.811 1.84 1.5 1.84 1.949 1.84c.446 0 .811-.828.811-1.84zm-7.36-3.654c0-.998-3.52-4.07-7.82-6.825-7.43-4.76-21.9-16.8-33.319-27.731-8.66-8.28-4.7-1.44 7.1 12.281 6.07 7.06 12.7 13.4 14.72 14.12s6.56 3.24 10.087 5.628c6.96 4.71 9.23 5.34 9.233 2.526zm11.04-15.469c0-.398-1.28-1.22-2.856-1.819-1.64-.628-2.38-.32-1.731.723 1.08 1.75 4.59 2.59 4.587 1.096zm-29.44-20.141c0-1.36-2.28-3.5-5.06-4.762l-5.06-2.298 4.461 4.762c5.12 5.46 5.66 5.68 5.659 2.298zm-42.569-13.635c-2.13-3.8-7.48-12.5-11.891-19.32-7.79-12.1-8.45-17.2-.997-7.73 3.94 5.01 15.8 13.7 18.74 13.71 3.52 0 1.56-3.45-7.902-13.895-17.1-18.8-23.6-24.3-23.415-19.684.361 11.1 13.1 37.5 23.547 48.76 6.21 6.7 6.53 6.39 1.918-1.84zm74.335 5.8c2.04-2.04-.817-6.16-6.866-9.903-9.71-6-11.5-4.28-3.74 3.643 7.27 7.45 8.62 8.24 10.606 6.26zm-46.486-4.42c0-1.01-.877-1.84-1.949-1.84s-1.44.828-.811 1.84 1.5 1.84 1.949 1.84c.446 0 .811-.828.811-1.84zm40.414-37.633c-3.58-3.55-16.5-8.86-16.494-6.776 0 2.47 4.65 5.84 10.462 7.579 7.73 2.32 9.01 2.15 6.032-.803zm18.466-6.418c0-2.17-3.59-4.49-4.907-3.175s1 4.91 3.175 4.907c.952 0 1.73-.779 1.731-1.731zm-11.04-3.789c0-1.01-.877-1.84-1.949-1.84s-1.44.828-.811 1.84c.625 1.01 1.5 1.84 1.949 1.84.446 0 .811-.828.811-1.84zm-556.21-35.647c2.7-2.7-1.35-2.97-7.067-.467l-6.194 2.711 6.054-.546c3.33-.3 6.57-1.06 7.207-1.698zm483.42-34.465c-1.61-2.6-4.48-1.92-4.481 1.055 0 1.64 1.08 2.29 2.749 1.647 1.51-.58 2.29-1.8 1.731-2.702zm8.399 1.31c0-.398-1.28-1.22-2.856-1.819-1.64-.628-2.38-.32-1.731.723 1.08 1.75 4.59 2.59 4.587 1.096zm79.874-30.29c.535-.865-1.48-1.49-4.487-1.38-3 .106-5.46.814-5.464 1.573-.006 1.91 8.76 1.74 9.951-.193zm-357.71-45.807c-.002-3.55-28.1-24.4-32.876-24.38-4.66 0-1.4 3.86 11.257 13.357 15.1 11.4 21.6 14.7 21.619 11.023zm28.324-51.547c-1.8-5.8-5.91-14.3-9.119-18.832-4.69-6.65-6.82-8.21-10.82-7.915-3.64.267-6.48-1.34-10.554-5.98-6.21-7.07-8.87-7.98-8.87-3.032 0 4.11 4.11 13.2 5.98 13.232.759.007 1.38 2.16 1.38 4.774 0 3.32 3.03 7.77 10.04 14.72 10.2 10.2 13.2 12.1 11.397 7.259-2.18-5.68 1.81-4 7.056 2.972 6.72 8.94 7.83 6.68 3.51-7.198zm40.579-9.789c-.592-.959-1.86-1.26-2.82-.666s-1.26 1.86-.666 2.82 1.86 1.26 2.82.666 1.26-1.86.666-2.82zm92.706-6.657c-2-2.41-2.84-2.1-6.407 2.372-5.42 6.8-3.62 9.18 3.242 4.295 4.56-3.24 5.08-4.36 3.164-6.667zm-78.17-4.686c3.63-14.5 3.48-44-.212-43.471-4.79.736-8.08-.774-9.523-4.369-.911-2.28-3.48-9.11-5.707-15.18s-5.51-14.4-7.287-18.4-5.07-13.6-7.312-21.16c-4.08-13.8-6.44-18.4-9.464-18.4-3.83 0 .589 15.7 6.744 23.92 2.21 2.96 8.2 26.7 8.202 32.571 0 1.94 1.22 5.13 2.702 7.097s2.73 5.38 2.76 7.58 1.33 5.28 2.884 6.834 2.68 3.06 2.504 3.351.282 7.77 1.02 16.626c1.01 12.1 1.99 16.1 3.982 16.1 1.46 0 3.13 2.46 3.745 5.52 1.31 6.54 3.52 7.16 4.964 1.38zm104.22-34.78c.011-.66-2.43-2.05-5.416-3.095-4.69-1.64-5.59-1.41-6.564 1.66-.621 1.96-1.9 3.56-2.844 3.555s-1.72 1.3-1.716 2.891c0 2.63.263 2.63 2.891 0 3.63-3.63 4.47-3.63 4.469-.023 0 1.58-.778 2.39-1.729 1.8s-1.61.553-1.457 2.536c.24 3.18.977 2.92 6.309-2.26 3.32-3.22 6.05-6.4 6.057-7.064zm-269.53-1.549c-1.84-2.03-4.18-3.69-5.216-3.691-1.03 0 .066 2.07 2.439 4.593 5.06 5.39 7.7 4.53 2.777-.902zm65.223-7.657c-3.5-11.5-7.27-17.9-7.273-12.206 0 4.26 7.6 23.5 9.287 23.531.779 0-.127-5.1-2.013-11.326zm41.27-10.294c-.681-6.83-4.32-21.5-8.089-32.66s-9.2-28-12.064-37.525c-2.87-9.51-5.54-16.3-5.941-15.104-1.53 4.59 15.9 77.1 20.879 86.669 1.31 2.53 2.84 6.05 3.389 7.82 2.16 6.91 3.01 2.64 1.826-9.2zm12.176 3.195c0-2.04-.73-5.14-1.623-6.9-1.53-3.02-5.03-16.2-6.915-26.066-.47-2.46-1.35-5.28-1.963-6.264-2.37-3.83-2.03-10.4.542-10.425 3.14 0 3.15-.23.5-6.78l-2.098-5.18-1.199 4.576c-1.03 3.92-2.08 2.4-7.337-10.651-3.38-8.38-6.42-14.9-6.763-14.603-1.37 1.37 19.3 79.4 22.353 84.314 1.84 2.98 4.5 1.79 4.503-2.023zm-42.591-19.415-2.279-5.399-.678 4.969c-.373 2.73.389 6.87 1.695 9.2 2.31 4.11 2.39 4.12 2.957.43.321-2.09-.441-6.23-1.695-9.2zm82.048-36.577c-.693-3.69-1.67-6.3-2.18-5.794s-.353 3.94.34 7.634 1.67 6.3 2.18 5.794.353-3.94-.34-7.634zm-89.883-4.786c-1.5-4.8-2.65-6.57-2.752-4.286-.313 6.72 2.08 15.7 3.743 14.061.879-.879.439-5.21-.991-9.775zm105.61-5.544c-1.44-7.9-5.32-14-5.712-9-.617 7.76 2.94 19.1 5.489 17.538.882-.545.983-4.39.224-8.539zm-3.66-20.943c0-2.47-.721-4.94-1.602-5.482s-2.01-5.2-2.5-10.337c-1.23-12.8-5.1-16.6-5.097-5.007 0 4.7.9 9.1 2 9.776s1.56 2.93 1.014 5.006c-1.08 4.13 1.6 10.5 4.41 10.535.976 0 1.78-2.02 1.775-4.491zm.207-36.517c-1.5-1.5-2.05-1.3-2.047.774 0 3.66 2.47 6.13 3.389 3.389.388-1.16-.216-3.04-1.342-4.163zm-10.91-3.55c-1.32-1.32-2.18-1.43-2.177-.276 0 2.46 2.18 4.63 3.404 3.404.523-.523-.029-1.93-1.227-3.128zm115.58-33.845c0-2.42-.393-4.4-.873-4.396-1.59 0-6.49 10.8-6.426 14.168.098 5.3 7.3-4.34 7.299-9.772zm-184 753.27c0-6.41 1.66-24.9 3.68-40.996s3.68-29.9 3.68-30.596 1.66-.827 3.68-.297 3.68 2.01 3.68 3.282 1.13 3.26 2.505 4.399c2 1.66 3.11.495 5.52-5.816 1.66-4.34 3.1-9.94 3.199-12.433l.183-4.538 1.28 4.6c.807 2.9 2.61 4.6 4.877 4.6 2.84 0 3.72-1.48 4.174-7.003.326-3.95 1.73-7.44 3.22-8.017 1.45-.558 2.64-2.33 2.643-3.945 0-2.28-.491-2.44-2.208-.723-1.21 1.21-2.89 2.21-3.726 2.208-2.5 0-5.24-9.28-3.613-12.196 1.19-2.13 2.02-1.61 3.901 2.446 2.37 5.12 2.4 5.13 3.957 1.01 2.06-5.42 6.07-5.25 10.56.46 4.81 6.12 5.85 5.81 5.849-1.731 0-3.48.828-6.84 1.84-7.469 2.62-1.62 2.28-14.5-.46-17.226-1.84-1.86-1.66-2.68.92-4.139 1.77-.999 3.22-3.74 3.22-6.095 0-9.42 2.28-15.8 5.641-15.778 4.1 0 5.78 2.55 7.216 10.977l1.109 6.502 2.557-4.6c1.41-2.53 3.14-7.5 3.845-11.04 1.2-6.02 1.3-5.84 1.499 2.801.254 11.1-6.68 45.6-13.497 67.162-2.71 8.58-6.53 22.4-8.487 30.828-5.6 24-20.5 50.3-33.28 58.767-5.79 3.83-7.56 4.26-9.832 2.37-1.52-1.27-2.77-3.86-2.773-5.756 0-5.57-6.86-4.24-10.06 1.949-4.88 9.44-6.5 8.45-6.5-3.967zm48.012-82.959c-1.46-1.46-2.65-1.37-4.313.319-1.84 1.87-1.57 2.87 1.38 5.06 3.29 2.44 3.75 2.41 4.313-.319.348-1.68-.273-3.95-1.38-5.06zm5.347-8.637c0-2.02-.779-3.68-1.731-3.68-2.47 0-4.21 3.35-2.869 5.52 1.92 3.11 4.6 2.04 4.6-1.84zm22.588-36.703c.932-3.56-3.25-9.01-5.328-6.93-1.57 1.57 1.2 12.5 2.907 11.478.808-.499 1.9-2.55 2.42-4.548zm259.59 118.08c1.3-2.1-12.2-13.3-16.056-13.299-1.5 0-6.76-3.99-11.691-8.866s-9.85-8.57-10.947-8.203-2.38-1.4-2.866-3.932c-.607-3.18.032-4.84 2.071-5.383 1.95-.523 1.59-.861-1.082-1.003-3.96-.21-8.13-3.89-4.403-3.893 2.81 0-.797-8.45-6.985-16.365-7.18-9.18-32.6-51.5-36.776-61.263-1.88-4.39-4.78-9.11-6.433-10.482-1.66-1.38-3.01-3.93-3.011-5.669s-1.64-4.65-3.644-6.467c-2-1.81-4.16-6.05-4.792-9.42s-2.36-7.13-3.837-8.353c-3.42-2.84-7.97-11.6-7.966-15.288 0-1.57 1.21-2.85 2.687-2.851 2.45 0 7.61 9.14 25.933 46 5.42 10.9 9.76 18.5 25.741 44.861 17.4 28.8 38.9 58 43.965 59.788 1.07.38.917-.407-.348-1.748-2.69-2.85-3.08-9.06-.569-9.062.952 0 2.33.97 3.063 2.155.867 1.4 1.92.6 3.005-2.3 1.64-4.36 1.75-4.3 5.251 2.905 1.97 4.05 4.68 8.19 6.035 9.206 3.91 2.94 10.3 16.7 10.791 23.334.41 5.18-.173 6.19-3.861 6.713-2.39.339-3.86-.163-3.275-1.115zm-429.89-28.412c-2.14-16.3 6.25-57.6 13.096-64.446 1.18-1.18 2.14-2.91 2.136-3.849 0-3.69 13.6-30.6 15.939-31.451 1.35-.519 2.52-.349 2.585.378s.496 4.2.951 7.728c.589 4.56-.274 7.9-2.995 11.575-4.79 6.47-4.43 17.3.54 16.438 4.58-.769 4 3.48-1.603 11.734-2.65 3.91-4.98 7.96-5.172 8.997-.915 4.95-3.8 11.7-7.534 17.605-2.26 3.58-6.17 12.2-8.688 19.239s-5.4 13-6.4 13.331-2.29-2.94-2.854-7.279zm24.694-47.73c4.08-5.83 4.43-10.8.766-10.756-3.59 0-4.17 1.28-5.447 11.96-.603 5.06-.566 7.96.083 6.44s2.72-4.96 4.598-7.644zm297.81 43.466c0-1.49 1.24-2.7 2.76-2.702s2.76.739 2.76 1.643-1.24 2.12-2.76 2.702c-1.68.645-2.76.002-2.76-1.643zm-241.73-28.76c5.2-50.6 7.54-61.7 11.684-54.988 1.79 2.9 1.31 7.94-2.427 25.527-2.35 11.1-2.3 11.6.923 10.752 1.87-.489 3.4-.083 3.397.9 0 3.02-3.79 9.06-5.152 8.219-.708-.435-1.37 1.53-1.475 4.371s-1.94 7.38-4.073 10.101l-3.886 4.94zm288.81 2.794c-1.75-4.57.179-5.19 2.522-.814 1.13 2.11 1.29 3.84.346 3.838-.939 0-2.23-1.36-2.868-3.023zm-427.28-7.089c-1.34-3.5-.22-12.8 3.701-30.735 5.33-24.4 9.49-30.9 19.634-30.912 3.56 0 3.87.7 2.838 6.227-1.84 9.82 2.96 9.74 7.03-.106 2.24-5.41 4.24-7.85 5.909-7.211 1.6.615 3.91-1.74 6.311-6.451 6.59-12.9 11.3-6.1 5.232 7.519-4.21 9.39-4.37 11.8-.725 10.396 8.2-3.15-2.33 9.51-18.16 21.825-10.6 8.23-14.2 12.2-17.058 18.902-2.83 6.58-8.76 13.3-11.759 13.297-1.04 0-2.37-1.24-2.954-2.753zm421.2-1.388c-3.6-4.65-4.82-7.51-2.646-6.162 2.18 1.35 6.54 8.46 5.184 8.462-.418 0-1.56-1.04-2.538-2.3zm114.91-10.58c-1.73-2.02-4.28-3.68-5.67-3.68s-6.16-3.12-10.598-6.933-10.4-8.13-13.296-9.595-6.33-4.81-7.682-7.429-4.56-5.72-7.128-6.892c-2.56-1.17-6.88-5.47-9.582-9.558s-5.49-7.43-6.187-7.433c-1.65 0-39.2-42-49.808-55.659-4.5-5.82-8.73-10.6-9.393-10.58s-1.72-1.34-2.347-2.971c-1.34-3.5 11.1 6.99 16.386 13.867 2.02 2.61 6.58 7.75 10.12 11.415s13.1 14 21.16 22.862c22.2 24.4 52.6 52.8 57.305 53.494 4.31.632 4.92-4.07 1.254-9.695l-3.36-5.164 5.002 3.636c2.75 2 5.03 4.3 5.06 5.105.077 1.95 5.79 13.4 10.976 21.991 4.43 7.34 3.04 9.36-2.212 3.22zm-381.23-12.283c1.35-6.2 4.72-13.5 6.235-13.477.598 0 2.14 1.69 3.433 3.757 3.16 5.06-.73 13.5-6.608 14.32-3.72.53-4.07.017-3.06-4.6zm416.89-2.587c-4.44-.872-11.1-3.13-14.72-5.024s-9.08-4.04-12.068-4.779c-3.45-.852-4.62-1.84-3.207-2.711 1.22-.754-1.58-1.32-6.218-1.254-8.2.113-8.51-.09-11.136-7.244-2.68-7.3-3.7-20.6-1.738-22.569.562-.562 2.48.228 4.253 1.754 5.35 4.6 7.89 5.64 6.798 2.784-.545-1.42-4.63-5.31-9.087-8.648-10-7.51-12.4-12-5.308-10.231 4.13 1.04 4.66.728 3.599-2.052-1.11-2.9-.775-2.86 2.987.391 6.22 5.37 16.2 10.5 16.202 8.408 0-1.02-1.45-2.7-3.22-3.728-1.77-1.03-2.35-1.9-1.291-1.931 2.96-.086 21.2 18 30.35 30.092 16.7 22.1 18.2 24.2 18.245 26.432.084 2.57-2.64 2.63-14.441.311zm-172.61-3.998c-4.54-5-17.1-23-17.111-24.492 0-1.83-15.5-27.4-16.985-28.094-.778-.337-1.42-2.13-1.415-3.987 0-1.86-1.68-7.3-3.738-12.094-6.24-14.6-3.06-13.3 7.514 3.064 10.8 16.7 14.3 23 28.232 50.28 9.17 18 10.2 22.7 3.502 15.322zm56.827-2.285c-1.16-2.53-1.39-4.61-.514-4.608 1.53 0 4.28 7.55 3.161 8.667-.302.302-1.49-1.52-2.648-4.06zm-529.94-7.828c8-17.7 35-55.4 53.042-74.033 18.7-19.3 36.3-32.2 44.842-32.778 5.03-.346 5.16-.173 2.625 3.64-1.46 2.2-4.57 5.27-6.91 6.826-4.06 2.7-4.2 2.64-2.961-1.245 1.88-5.94-.678-5.03-9.997 3.561-5.42 5-7.43 7.92-5.818 8.487 1.35.472 3.38-.064 4.508-1.189 1.13-1.13 2.71-2.05 3.519-2.047 3.2 0 1.09 3.81-7.313 13.192-4.83 5.4-11 12.8-13.68 16.428s-8.74 10.3-13.445 14.72-9.37 9.61-10.38 11.46c-1.61 2.95-1.38 3.12 1.83 1.401 2.01-1.08 3.94-2.67 4.279-3.544.486-1.24 17.3-15.6 30.06-25.648 8.94-7.05 27.9-23.5 28.849-25.088.687-1.1 6.07-6.98 11.96-13.07s15.7-16.7 21.75-23.586c12.5-14.2 28.3-30.7 29.331-30.664 1.51 0-.172 5.18-3.043 9.384-1.66 2.43-6.16 7.73-9.99 11.776-11.8 12.5-25.2 28.5-30.557 36.534-6.89 10.4-18.6 34.2-17.45 35.409.53.53 4.8-4.68 9.484-11.569s15.7-20 24.573-29.201c8.83-9.17 13.9-14.1 11.211-11.04-5.39 6.26-13.9 19.3-18.145 27.709-3.64 7.25-17 24.8-18.805 24.838-.796 0-1.45 1.04-1.447 2.3s-2.95 4.65-6.555 7.53l-6.555 5.23 1.196-6.375c1.11-5.93.787-6.52-4.666-8.418-4.03-1.41-6.95-1.46-9.36-.171-4.14 2.22-4.71 4.44-.738 2.917 3.82-1.47 3.5 3.12-.46 6.615-1.77 1.56-5.98 3.43-9.345 4.143-8.72 1.85-55.8 31.4-67.849 42.532-4.55 4.21-8.91 5.96-7.589 3.034zm59.185-67.271c11.3-10.7 14.8-16 10.602-15.988-1.97 0-19.7 19.1-22.364 24.107-1.03 1.92-1.56 3.49-1.182 3.493s6.2-5.22 12.945-11.612zm178.06 66.56c-4.31-1.63-4.33-1.73-.967-5.445 2.5-2.76 3.63-3.13 4.181-1.345.415 1.34 1.51 3.4 2.436 4.577 2.39 3.04-.488 4.16-5.65 2.213zm-48.658-8.455c2.42-4.79 5.21-9.51 6.19-10.488.98-.98 1.78-3.3 1.782-5.152s1.14-3.81 2.543-4.346 3.06-4.21 3.692-8.164c.716-4.48 2.53-7.93 4.817-9.151 2.02-1.08 3.72-1.31 3.784-.518s.866-.418 1.781-2.695 2.5-4.14 3.517-4.14c5.93 0-9.64 36.2-18.339 42.643-3.01 2.23-5.48 5.05-5.475 6.265 0 2.06-3.91 4.45-7.26 4.451-.792 0 .544-3.92 2.968-8.706zm-12.754 5.766c-1.66-1.66.625-6.39 2.519-5.221.906.56 1.65 2.21 1.647 3.669 0 2.71-2.19 3.53-4.167 1.552zm.487-9.633c0-2.8 8.94-15.6 12.135-17.44 1.46-.821 2.18-2.27 1.595-3.22s-.239-1.73.773-1.727c3.22 0 3.99 3.25 1.04 4.383-1.56.599-2.59 2.16-2.291 3.46.573 2.5-4.62 9.73-10.044 14.003-1.96 1.54-3.21 1.75-3.208.542zm-29.947-5.108c-1.31-1.31 4.95-17.9 8.86-23.461 1.48-2.11 2.69-5.56 2.687-7.667 0-3.79 8.81-19.1 13.917-24.25 1.45-1.45 2.64-3.27 2.643-4.03 0-1.95 15.2-22.2 21.206-28.25 2.76-2.78 5.9-5.06 6.972-5.06s.119 1.71-2.125 3.802-6.24 7.27-8.887 11.5-8 11.2-11.906 15.477-7.1 8.61-7.1 9.632-2.39 5.8-5.314 10.621-5.77 10.4-6.321 12.447c-7.84 28.6-10.3 33.6-14.632 29.239zm22.732-1.486c-.08-1.94.355-3.03.966-2.415s.677 2.2.145 3.527c-.587 1.47-1.02 1.03-1.112-1.112zm371.53-1.073c0-1.01.365-1.84.811-1.84s1.32.828 1.949 1.84.26 1.84-.811 1.84c-1.07 0-1.95-.828-1.949-1.84zm-324.4-3.22c-1.06-1.86 17-54.7 20.732-60.555 4.45-7.07.644 13.1-5.247 27.738-3.87 9.63-5.23 15.2-4.023 16.388 1.21 1.21 2.94-.137 5.125-3.971 3.82-6.72 5.22-7.14 7.796-2.333 1.38 2.57 1.18 4.06-.761 5.667-1.44 1.2-3.59 5.09-4.762 8.649-1.79 5.43-2.84 6.33-6.523 5.63-2.41-.461-5.32.287-6.464 1.664-2.3 2.78-4.68 3.23-5.874 1.123zm-50.952-4.14c0-2.02.828-3.68 1.84-3.68s1.84 1.66 1.84 3.68-.828 3.68-1.84 3.68-1.84-1.66-1.84-3.68zm-60.719.217c0-1.01.828-2.35 1.84-2.977 1.01-.626 1.84-.309 1.84.703s-.828 2.35-1.84 2.977-1.84.309-1.84-.703zm179.4-2.057c-.626-1.01-.26-1.84.811-1.84s1.95.828 1.949 1.84-.365 1.84-.811 1.84-1.32-.828-1.949-1.84zm-109.5-4.62c-1.89-2.28-1.62-2.74 1.632-2.74 2.15 0 3.9.779 3.905 1.731 0 3.19-3.24 3.78-5.537 1.008zm93.884-1.251c.016-1.32.831-3.65 1.812-5.169 1.45-2.24 1.79-2.01 1.812 1.271.016 2.22-.8 4.54-1.812 5.169-1.01.625-1.83.053-1.812-1.271zm336.08-11.915c-.675-.675-1.23-2.43-1.227-3.905 0-2.17.522-2.25 2.76-.388 1.52 1.26 2.76 3.02 2.76 3.905 0 1.9-2.55 2.14-4.293.388zm-343.32-3.22c-.08-1.94.355-3.03.966-2.415s.677 2.2.145 3.527c-.587 1.47-1.02 1.03-1.112-1.112zm222.49-1.073c-1.08-2.02-1.56-3.68-1.05-3.68s1.81 1.66 2.89 3.68 1.56 3.68 1.05 3.68-1.81-1.66-2.889-3.68zm-268.64-11.04c0-1.01.828-1.84 1.84-1.84s1.84.828 1.84 1.84-.828 1.84-1.84 1.84-1.84-.828-1.84-1.84zm283.6-34.296c-8.88-9.96-9.23-10.7-6.343-13.922 2.95-3.26 3.24-3.2 8.257 1.605 2.86 2.74 5.2 6.95 5.2 9.359s.895 6.05 1.989 8.093c3.94 7.37.115 5.21-9.103-5.135zm-519.15 2.442c-.522-.559-7.97-2.78-16.56-4.936-20.9-5.25-20.3-4.98-19.008-8.363.843-2.2 3.12-2.84 8.709-2.48 14.4.942 39.7-2.49 53.95-7.334 18.3-6.21 25.8-10.7 27.926-16.976 1.19-3.41 3.48-5.36 7.303-6.196 3.31-.727 11.4-6.72 20.033-14.78 15-14.1 31.5-26.2 36.913-27.081 1.72-.285 3.95-1.47 4.961-2.632 2.63-3.02 10.1-4.98 10.12-2.652 0 1.06-2.07 3.28-4.6 4.936-4.02 2.64-6.44 8.11-3.576 8.111.563 0 8.12-2.94 16.783-6.523s16.1-6.21 16.465-5.817c.6.6-8.04 5.77-22.132 13.245-1.92 1.02-4.07 3.1-4.774 4.616s-2.29 4.7-3.528 7.079c-2.79 5.35-1.16 7.31 3.605 4.336 3.47-2.17 5.04-.59 2.216 2.232-.759.759-1.38 2.1-1.38 2.987s-1.56 2.75-3.468 4.143c-1.91 1.4-3.67 5.16-3.926 8.355-.768 9.76-5.17 13.9-25.917 24.064-22.6 11.1-29.7 13.8-46.257 17.681-12.1 2.81-52.2 5.78-53.861 3.988zm72.958-24.253c2.9-1.51 7.93-2.75 11.179-2.76 3.57-.007 7.3-1.5 9.406-3.766 1.92-2.06 6.72-4.24 10.652-4.839 9.44-1.43 22.7-13.5 14.84-13.486-2.98 0-22.8 10.6-24.32 12.999-.585.946-2.46 1.76-4.175 1.802-4.18.109-29.7 12.7-25.861 12.747 1.66.029 5.38-1.18 8.28-2.697zm26.43-33.261c0-.506-1.66-.034-3.68 1.05-2.02 1.08-3.68 2.38-3.68 2.89s1.66.034 3.68-1.05c2.02-1.08 3.68-2.38 3.68-2.889zm401.34 49.349c-3.12-3.8-7-8.42-8.624-10.273-3.61-4.13-2.35-5.87 2.409-3.32 2.94 1.57 14.5 20.5 12.535 20.493-.353 0-3.2-3.1-6.32-6.9zm-57.197-7.699c-2.34-4.38-2.5-9.91-.246-8.513 2.46 1.52 5.81 12.1 3.83 12.072-.924 0-2.54-1.6-3.584-3.559zm-317.19-1.092c1.23-3.21 8.01-7.36 8.006-4.899 0 1.8-6.06 7.71-7.907 7.71-.648 0-.692-1.26-.099-2.811zm-1.153-8.585c-.025-3.07 1.52-6.05 4.048-7.82 8.18-5.73 8.05-2.25-.316 8.176l-3.691 4.6zm-184.27-11.903c-1.8-2.18-1.92-3.26-.414-3.77 1.16-.391 7.22-4.81 13.462-9.821 6.24-5.01 12.7-9.12 14.449-9.135 3.6-.03 28.8-13.4 32.818-17.471 1.51-1.51 4.72-3.24 7.143-3.843s4.86-2.52 5.406-4.259 4.93-6 9.726-9.477c12.9-9.33 14.8-10.2 9.185-4.184-6.04 6.47-6.4 9.36-1.258 10.152 3.16.489 2.23 1.76-5.52 7.524-5.13 3.82-9.32 8.09-9.322 9.507s-.975 2.9-2.166 3.293-1.6 1.63-.918 2.741c1.85 2.99 8.75.581 8.174-2.852-.848-5.08 5.71-4.68 8.065.485 3.26 7.15-.3 13.4-8.491 14.96-6.27 1.18-9.75 3.7-7.787 5.662.509.509 8.25-.251 17.204-1.69 19.4-3.12 27.3-3.19 24.032-.208-5.78 5.25-18.4 8.09-36.089 8.087-9.98 0-27.6 1.65-39.062 3.661-26 4.54-35.3 4.7-38.637.64zm222.87-11.552c0-1.07.828-1.95 1.84-1.949s1.84.365 1.84.811-.828 1.32-1.84 1.949-1.84.26-1.84-.811zm-27.6-.92c0-.446.828-1.32 1.84-1.949s1.84-.26 1.84.811c0 1.07-.828 1.95-1.84 1.949s-1.84-.365-1.84-.811zm-101.2-19.428c0-2.86 1.23-3.68 5.52-3.68 6.33 0 6.61.484 2.629 4.469-4.01 4.01-8.15 3.61-8.149-.789zm130.47-25.902c-1.89-1.2-1.22-1.65 2.467-1.67 5.5-.031 6.48.872 2.593 2.365-1.36.521-3.63.208-5.06-.695zm458.32-7.218c0-1.01.365-1.84.811-1.84s1.32.828 1.949 1.84c.625 1.01.26 1.84-.811 1.84-1.07 0-1.95-.828-1.949-1.84zm-494.95-6.968c-5.64-1.93-6.34-7.75-.935-7.752 1.39 0 3.07 1.72 3.739 3.819 1.43 4.5.921 5.21-2.804 3.934zm467.36-9.592c0-2.02 1.11-3.68 2.475-3.68s3.97 1.66 5.805 3.68c3.26 3.61 3.21 3.68-2.475 3.68-4.58 0-5.8-.778-5.805-3.68zm-494.95-10.12c0-1.53 1.64-2.76 3.68-2.76s3.68 1.23 3.68 2.76-1.64 2.76-3.68 2.76-3.68-1.23-3.68-2.76zm29.44 1.071c0-2.52 7.74-5.67 13.92-5.671 6.6 0 5.45 3.14-1.5 4.118-3.29.463-7.43 1.47-9.2 2.238-1.99.865-3.22.604-3.22-.685zm450.8-.151c0-1.01.365-1.84.811-1.84s1.32.828 1.949 1.84c.625 1.01.26 1.84-.811 1.84-1.07 0-1.95-.828-1.949-1.84zm-482.38-10.546c-4.55-1.04-5.88-6.01-1.61-6.014 1.92 0 4.69-1.2 6.163-2.672 3.04-3.04 4.95-1.92 4.951 2.914 0 3.78-4.98 6.81-9.503 5.772zm-91.696-42.694c-2.53-.772-7.95-3.12-12.052-5.211-4.1-2.09-15.3-6.87-24.84-10.612-19.1-7.48-34.9-15.4-34.868-17.528 0-3.94 40.8-12 45.86-9.056 2.22 1.3 1.54 1.71-2.855 1.752-3.16.031-6.78 1.3-8.045 2.816s-3.98 2.76-6.052 2.76-3.28.479-2.697 1.064c1.81 1.81 10.6 2.21 11.662.528.541-.876 2.8-1.58 5.015-1.564 3.01.021 3.39.435 1.496 1.634-3.25 2.06-1.05 5.7 3.456 5.698 4.19 0 6.45-3 3.231-4.298-1.58-.638-1.43-.978.472-1.077 1.53-.08 3.6 1.71 4.6 3.984s3.47 4.42 5.496 4.779c2.02.357 4.47 1.4 5.428 2.311 1.69 1.61-7.8 2.66-16.928 1.878-8.08-.695-3.98 3.25 6.44 6.187 19.5 5.5 31 9.86 26.483 10.012-3.07.103-4.03.952-3.278 2.905 1.15 2.99-.803 3.24-8.025 1.039zm-32.2-20.359c-.626-1.01-1.92-1.84-2.869-1.84-.952 0-1.73.828-1.731 1.84s1.29 1.84 2.869 1.84 2.36-.828 1.731-1.84zm182.04 1.641c-1.27-2.05 2.17-5.26 5.643-5.265 2.51 0 7.46 3.24 6.387 4.185-2.44 2.14-10.9 2.9-12.03 1.08zm-169.15-23.721c-.645-1.04.901-1.84 3.571-1.84 2.59 0 4.71.828 4.709 1.84s-1.61 1.84-3.571 1.84-4.08-.828-4.709-1.84zm514.28-2.651c0-.446.828-1.32 1.84-1.949s1.84-.26 1.84.811-.828 1.95-1.84 1.949-1.84-.365-1.84-.811zm83.961-.48c-.711-.71-4.16-1.1-7.667-.862-4.47.301-6.38-.348-6.375-2.174 0-3.25-5.32-4.76-10.149-2.877-5.86 2.29-12.4 1.87-18.244-1.151-4.08-2.13-6.68-2.36-10.663-.975-4.1 1.43-5.49 1.26-6.27-.768-.55-1.43-.326-3.68.497-4.993s1.26-3.84.967-5.608c-.568-3.45 4.2-4.52 6.142-1.38 2.23 3.62 8.35 1.89 10.162-2.871 1.82-4.78 5.48-4.63 5.478.219 0 1.46.828 2.65 1.84 2.651 1.58 0 2.8-6.97 2.033-11.574-.134-.8.626-3.08 1.687-5.06 1.68-3.13 1.33-3.6-2.627-3.605-6.72 0-7.23-2.66-1.781-9.141l4.857-5.772-4.939 1.24c-3.65.917-5.58.362-7.4-2.126-2.67-3.65-1.88-8.12 1.431-8.12 3.55 0 21.5-7.96 21.459-9.539 0-.826 2.01-1.5 4.476-1.501 2.68 0 4.89-1.32 5.515-3.275.572-1.8 3.6-4.24 6.722-5.42 4.79-1.81 5.52-1.72 4.662.515-1.5 3.91 2.98 3.39 25.684-2.993 11.1-3.11 23.8-6.1 28.42-6.647 8.04-.961 8.34-.822 8.745 4.125.524 6.33.158 6.08 7.167 5.009 7.02-1.07 13.8-6.86 12.327-10.593-.694-1.81 1.22-3.77 5.822-5.962 6.72-3.2 6.91-3.19 9.404.57 2.26 3.4 3.55 3.67 11.261 2.356 20.5-3.49 24.3-3.86 24.209-2.316-.079.897-5.67 6.4-12.42 12.22s-20.3 18-30.184 26.995c-16 14.7-46 35.3-68.572 47.224-4.18 2.2-8.55 6.37-10.12 9.635-2.03 4.22-4.02 5.76-7.513 5.795-2.61.022-5.34-.541-6.045-1.252zm-22.34-57.618c-.636-1.03-1.93-1.39-2.869-.811-2.55 1.58-2.08 2.68 1.156 2.681 1.58 0 2.35-.842 1.713-1.87zm44.178-14.69c.625-1.01.309-1.84-.703-1.84s-2.35.828-2.977 1.84-.309 1.84.703 1.84 2.35-.828 2.977-1.84zm10.12-1.84c0-1.01-1.24-1.84-2.76-1.84s-2.76.828-2.76 1.84 1.24 1.84 2.76 1.84 2.76-.828 2.76-1.84zm28.52-9.2c.625-1.01-.105-1.84-1.623-1.84s-3.27.828-3.897 1.84c-.626 1.01.105 1.84 1.623 1.84s3.27-.828 3.897-1.84zm-569.7 69.919c-3.25-4.05-6.67-7.36-7.595-7.36s-6.05-2.9-11.382-6.44c-7.65-5.08-11.6-6.46-18.712-6.558-4.96-.065-14-1.2-20.049-2.534l-11.04-2.416 5.52-2.202c3.04-1.21 9.45-2.67 14.261-3.243 7.4-.882 8.28-1.38 5.699-3.265-4.95-3.62-1.26-6.61 6.6-5.348 4.09.654 7.51.329 8.194-.781.707-1.14 5.12-1.5 11.085-.88 8.4.867 10.4.462 13.059-2.656 2.63-3.08 4.25-3.42 9.846-2.122 3.68.856 15.4 1.58 26.016 1.603 35.5.085 62.6 7.75 59.715 16.866-.748 2.36 1.12 4.62 6.888 8.326 4.35 2.8 10.4 7.1 13.435 9.559 5.24 4.25 5.29 4.4.92 3.042-2.53-.785-8.5-3.39-13.279-5.789-4.77-2.4-9.79-4.36-11.154-4.362-1.36 0-5.74-1.54-9.721-3.428-9.18-4.34-17.4-6.33-17.365-4.205 0 .901 7.04 4.77 15.64 8.606s15.6 7.77 15.64 8.755c0 2.08-17.3.168-22.253-2.461-4.38-2.34-26-.062-28.497 3.001-3.21 3.98-11.3 6.29-22.05 6.292-8.77 0-10 .451-10 3.68 0 5.58-2.89 4.45-9.421-3.68zm443.66-47.743c1.52-1.03 4.11-1.89 5.755-1.908 1.65-.016 4.02-1.27 5.285-2.788s3.62-2.76 5.234-2.76c5.87 0-4.02 6.89-11.674 8.139-5.28.86-6.58.667-4.6-.683zm-6.907-9.755c.389-4.98-.228-6.08-3.7-6.572-2.29-.326-3.69-1.36-3.111-2.301.954-1.54-1.57-2.49-5.141-1.926-.759.12-1.38-.608-1.38-1.618 0-1.92 18.5-11.6 19.76-10.297.397.398-1.15 2.47-3.437 4.598-3.17 2.95-3.65 4.39-2.011 6.023 1.64 1.64 3.31 1.62 7.036-.079 2.69-1.22 5.29-1.82 5.79-1.325.888.888-12 19.5-13.502 19.475-.424 0-.56-2.69-.303-5.979zm-543.19-8.669c-1.49-.942-2.28-2.14-1.76-2.659 1.43-1.43 9.07.935 9.066 2.802 0 2.11-3.86 2.04-7.307-.143zm-12.933-1.912c-4.32-1.38-4.24-1.48 1.489-1.657 3.63-.109 5.63.56 4.951 1.657-.626 1.01-1.3 1.76-1.489 1.657-.193-.101-2.42-.846-4.951-1.657zm526.89-1.264c1.83-1.83 8.55-2.07 7.435-.262-.519.839-2.69 1.53-4.821 1.526s-3.31-.569-2.614-1.264zm170.89-11.961c1.14-3.41 5.1-3.98 5.098-.728 0 1.6-1.31 2.91-2.913 2.913s-2.59-.983-2.185-2.185zm-33.541-4.394c3.54-1.67 10.7-5.01 15.824-7.426 9.66-4.53 16.5-5.75 14.571-2.612-.921 1.49-10.8 5.06-33.155 11.935-2.02.624-.782-.23 2.76-1.897zm-126.96-3.314c2.53-1.48 4.94-2.34 5.367-1.917 1.14 1.14-.239 2.01-5.364 3.378l-4.6 1.225zm-12.877-12.689c0-2.11 1.02-6.66 2.271-10.117 1.98-5.48 1.86-6.58-.92-8.613-1.76-1.28-3.18-3.48-3.163-4.89.023-2.04.378-2 1.773.203.96 1.52 1.98 2.4 2.272 1.956s2.84.714 5.674 2.569l5.147 3.372-5.091 5.314c-4.26 4.44-4.74 5.88-2.949 8.743 1.79 2.86 1.55 3.58-1.436 4.366-2.7.706-3.58-.006-3.578-2.901zm-11.04-5.83c0-.446.828-1.32 1.84-1.949s1.84-.26 1.84.811c0 1.07-.828 1.95-1.84 1.949s-1.84-.365-1.84-.811zm26.839-1.699c.951-2.48 9.96-7.55 9.961-5.609 0 .551-.857 2.6-1.905 4.561-2.18 4.07-9.58 5.03-8.056 1.048zm-24.999-6.338c0-1.2-1.33-2.19-2.957-2.192-1.94 0-2.57-1-1.84-2.911.614-1.6 1.12-3.67 1.117-4.6s2.07-1.69 4.6-1.69c3.18 0 4.58.996 4.542 3.22-.065 3.58-5.46 11.7-5.461 8.172zm-195.09-42.773c-1.11-2.08-1.69-4.77-1.281-5.98s2.14.493 3.847 3.782c1.71 3.29 2.28 5.98 1.281 5.98s-2.73-1.7-3.847-3.782zm211.65-3.469c0-1.07.828-1.95 1.84-1.949s1.84.365 1.84.811-.828 1.32-1.84 1.949c-1.01.625-1.84.26-1.84-.811zm154.52-9.253c5.6-7.87 7.35-8.31 3.922-.985-1.63 3.48-4.05 6.36-5.388 6.389-1.66.041-1.2-1.66 1.466-5.404zm2.232-13.72c8.32-8.1 12.5-10.3 12.527-6.669 0 2.01-9.8 9.64-16.56 12.878-3.2 1.53-1.96-.365 4.033-6.209zm-64.752-15.414c0-2.12 11.8-13.2 14.026-13.241 1.04 0 6.69-3.73 12.554-8.28s11.4-8.28 12.281-8.28c4.1 0 .752 4.05-8.659 10.47-5.65 3.86-14.1 10.1-18.826 13.91-8.51 6.87-11.4 8.24-11.376 5.421zm82.799-.04c0-.836 2.09-3.48 4.636-5.874l4.636-4.355-2.93 5.874c-2.71 5.42-6.34 7.92-6.341 4.355zm-316.48-8.709c0-2.67.797-4.22 1.84-3.571 1.01.625 1.84 2.74 1.84 4.709s-.828 3.57-1.84 3.571-1.84-2.12-1.84-4.709zm303.6-1.731c0-5.45 1.98-5.85 6.155-1.235 4.16 4.6 3.83 5.84-1.555 5.835-3.68 0-4.6-.92-4.6-4.6zm-71.759.197c0-.398 1.28-1.22 2.856-1.819 1.64-.628 2.38-.32 1.731.723-1.08 1.75-4.59 2.59-4.587 1.096zm65.779-17.975c-5.09-1.86-7.09-7.06-2.709-7.061 3.11 0 10.5 5.26 10.529 7.464 0 2.08-1.18 2.02-7.82-.403zm-17.022-11.201c2.04-6.25 2.28-14.8.519-18.4-.954-1.96-.849-3.22.267-3.22 1.01 0 2.78 3.52 3.925 7.82s2.85 8.75 3.783 9.887c1.12 1.37.15 3.08-2.875 5.06-6.11 4-7.22 3.78-5.619-1.147zm-371.75-7.022c-.667-1.08-.818-2.36-.336-2.839s1.37.401 1.967 1.962c1.24 3.24.184 3.81-1.631.877z"/> + <path fill="#d9c70d" d="m435.36 825.6c-2.1-2.32-5.36-8.36-7.233-13.415-2.5-6.76-7.16-12.9-17.558-23-17.6-17.2-27.4-36.9-27.366-55.199 0-4.81-1.11-11.9-2.476-15.869-1.36-3.92-3.01-9.87-3.655-13.218-1.07-5.51-.909-5.82 1.689-3.218 1.75 1.75 4.5 2.46 7.075 1.813 3.06-.767 5.9.491 10.404 4.605l6.197 5.66 1.567-4.146c.862-2.28 2.24-7.46 3.061-11.506 1.22-6.02 1.53-6.42 1.696-2.179.111 2.85.991 6.66 1.956 8.46s2.58 8.41 3.592 14.689c1.74 10.8 9.11 23.8 11.928 20.941 2.67-2.67.721-12.8-4.395-22.879-10.8-21.3-4.62-30.2 7.176-10.246 3.44 5.83 6.56 10.3 6.934 9.917s-.983-5.98-3.012-12.45c-5.05-16.1-4.91-18.9.862-17.762 3.78.724 4.6.159 4.6-3.191 0-4.49-2.65-13.4-6.622-22.377-1.42-3.19-2.58-7.03-2.578-8.529s-1.17-6.76-2.607-11.682-3.85-13.9-5.362-19.991c-5.9-23.6-6.97-26.7-9.384-26.68-3.05 0-4.06 2.47-5.723 14.025-.711 4.94-2.54 10.4-4.07 12.148-2.62 3-3.06 2.97-7.879-.46-5.91-4.2-8.48-4.56-9.689-1.333-.603 1.61-1.67 1.25-3.554-1.201-3.86-5.02-6.27-2.52-7.661 7.984-1.41 10.6-4.17 13.6-5.842 6.172-.638-2.82-2.56-9.28-4.264-14.335-2.6-7.71-3.84-9.2-7.634-9.2-4.02 0-4.49.726-4.168 6.44.199 3.54.899 9.45 1.556 13.123.735 4.12.42 7.16-.822 7.929-1.27.786-2.02-.596-2.016-3.747 0-5.82-8.99-37.4-11.642-40.834-1.24-1.63-4.22-2.01-9.521-1.213-7.38 1.11-7.88.872-11.64-5.494-5.22-8.85-8.28-9.68-17.924-4.856-8.67 4.33-12 3.94-10.683-1.249.442-1.77-1.18-5.5-3.609-8.281-3.75-4.3-5.35-4.88-10.636-3.867-3.42.658-8.29 2.61-10.823 4.342-2.53 1.73-6.67 4.2-9.2 5.497l-4.6 2.351 3.91-4.39c5.65-6.34 8.05-11.7 8.05-17.889 0-4.44-1.06-5.83-5.648-7.43-4.07-1.42-6.45-4.01-8.521-9.283-2.53-6.44-3.67-7.38-9.532-7.871-5.74-.48-6.74-1.26-7.243-5.633-.394-3.42-2.34-5.99-5.98-7.867-4.08-2.11-5.4-4.09-5.396-8.113 0-8.36-1.8-11.1-7.189-11.143-10.2 0-12-7.13-4.624-18.292 5.35-8.08 5.3-14.4-.133-17.399-2.02-1.12-6.01-3.89-8.881-6.168-3.07-2.44-7.76-4.14-11.406-4.14-11.8 0-9.51-5.24 4.112-9.283 7.04-2.09 10.7-5.04 18.921-15.445 2.64-3.33 2.42-3.42-5.429-2.172-4.5.716-9.06 1.99-10.12 2.821-1.86 1.46-8.7 2.7-47.011 8.486-9.61 1.45-28.7 2.7-42.32 2.772-28.9.152-49.4 2.1-51.194 4.863-.685 1.07-3.12 2.53-5.412 3.243-5.53 1.73-3.81 4.02 4.146 5.51 3.55.667 6.46 2.08 6.46 3.152 0 1.3-5.57 1.55-17.02.762-9.36-.648-20.5-1.18-24.84-1.189s-7.82-.688-7.82-1.516 3.93-2.98 8.74-4.782c15.2-5.72 24.7-11.5 28.257-17.345 3.81-6.27 5.79-6.6 22.802-3.802 18.1 2.97 82.9 2.38 94.759-.866 5.57-1.52 15.4-3.31 21.774-3.975 15.1-1.58 29.8-8.88 32.125-16.022 1.52-4.61.953-6.03-4.732-11.96-5.53-5.77-6.18-7.32-4.528-10.872 1.6-3.45 3.39-4.14 10.733-4.14 4.85 0 9.36-.888 10.03-1.974s-.863-5.99-3.41-10.898l-4.63-8.924 6.278 1.019c8.54 1.39 8.19-2.02-1.222-11.864-4.1-4.29-6.96-8.61-6.355-9.59s-2.44-4.06-6.78-6.844c-7.9-5.06-22.1-17-35.055-29.63-6.36-6.17-7.37-6.55-12.304-4.69-4.29 1.62-7.9 1.31-17.91-1.544-19.3-5.51-26.9-7.43-31.627-8.054-2.4-.315-5.24-1.44-6.305-2.507-1.35-1.35-.589-1.68 2.531-1.083 17.1 3.26 25.3 5.3 29.305 7.307 2.53 1.27 7.61 2.85 11.286 3.513 10.2 1.84 10.1-2.1-.286-21.952-5.04-9.6-9.16-18.7-9.161-20.137s-2.48-4.51-5.52-6.759-5.52-5.08-5.52-6.306c0-2.08-3.66-6.87-23.46-30.693-5.95-7.16-7.83-11-7.845-15.96-.014-3.6-.549-8.51-1.189-10.899-1.04-3.88-.707-4.2 3.104-2.995 4.59 1.46 4.85 1.63 14.914 10.04 3.68 3.07 7.54 5.58 8.586 5.584s3.61 2.28 5.702 5.06c2.95 3.93 4.16 4.51 5.431 2.584 1.31-1.98 3.13-1.53 9.198 2.3 4.16 2.63 8.53 4.78 9.712 4.776 2.73 0 19.3 11 26.082 17.286 2.84 2.64 5.92 4.79 6.858 4.794s3.06 2.07 4.717 4.6 3.9 4.6 4.984 4.6 3.93 1.84 6.331 4.097c4.06 3.81 4.28 3.84 3.221.46-.627-2 .262-1.21 1.974 1.763 2.92 5.07 3.26 5.2 5.568 2.043 2.33-3.19 2.69-3.2 7.272-.2 6.16 4.04 10 2.54 10.17-3.965.114-4.52.315-4.69 1.711-1.438 2.79 6.5 2.08 12.2-1.625 13.21-3.75.98-6.21 10.4-4.463 17.016 1.2 4.58 10.6 5.39 12.273 1.054 1.83-4.76 4.67-3.13 17.609 10.12 12.4 12.7 16.2 15.4 14.203 10.179-2.18-5.68 1.81-4 7.056 2.972 3.02 4.01 5.78 6.4 6.136 5.32 1-3.01-5.2-22.2-9.861-30.434-4.83-8.57-13.8-35-13.664-40.425.059-3.36.326-3.28 2.695.869 1.45 2.53 2.66 5.97 2.695 7.648.044 2.07 1.18 2.76 3.526 2.143 1.96-.511 4.56.454 5.98 2.217 2.62 3.24 11.3 12.1 16.61 16.813 2.73 2.46 3.18 2.35 4.264-1.078 1.44-4.53 3.35-4.84 6.485-1.063 1.26 1.52 3.16 2.76 4.212 2.76s1.4-.523.759-1.162-.252-2.86.86-4.94c1.12-2.09 2.03-12.9 2.031-24.138.005-11.2.403-18.7.884-16.68.482 2.02 3.18 5.75 6.001 8.28s5.09 5.01 5.053 5.52.531 8.16 1.269 17.02c1.01 12.1 1.99 16.1 3.982 16.1 1.46 0 3.13 2.46 3.745 5.52.607 3.04 1.74 5.52 2.515 5.52 2.12 0 3.37-6.58 4.564-23.92 1.79-26 2.96-35 4.539-34.96 2.44 0 3.54 7.17 3.898 25.341.184 9.38 1.05 17.5 1.932 18.048s1.73-.511 1.885-2.341c.158-1.83.555-5.4.882-7.929s.675-8.33.775-12.88c.266-12.1 1.44-16.6 4.121-15.529 1.47.566 2.22 3.8 2.004 8.675-.189 4.28.816 9.61 2.233 11.849s2.58 5.8 2.577 7.902c0 8.92 5.9 26.9 9.58 29.233 5.33 3.33 6.92.138 6.952-13.93.044-17.5 3.55-30.1 9.933-35.824 4.69-4.17 5.84-4.5 8.051-2.283 1.42 1.42 3.29 2.14 4.154 1.608s2.14 2.77 2.821 7.343c1.39 9.27 2.97 10.2 7.122 4.287 3.03-4.32 3.19-4.29 6.16 1.223 1.08 2 3.89 3.66 6.251 3.68 2.85.031 4.09.974 3.682 2.806-.337 1.52 2.51-.362 6.325-4.178 10.3-10.3 11.8-8.75 9.199 9.161l-1.134 7.743 14.722-5.194-2.644 6.328c-2.26 5.41-2.27 6.7-.078 8.894s1.73 3.86-3.207 11.526c-3.18 4.93-7.9 13.1-10.491 18.108l-4.717 9.148 3.68 7.542c3.33 6.82 11.2 13.2 13.52 10.935.499-.499-.889-2.82-3.086-5.159-7.2-7.67-5.42-9.8 10.136-12.108 15.4-2.29 19.7-.942 15.14 4.681-2.3 2.83-2.22 3.04.781 1.918 1.85-.696 3.72-1.26 4.14-1.265s.77-1.49.77-3.312c0-4.68 3.63-7.74 9.108-7.667l4.692.061-4.14 3.454c-2.28 1.9-4.14 4-4.14 4.67s-1.24 2.46-2.76 3.976c-4.6 4.6-3.28 6.74 3.463 5.649 3.42-.556 6.94-.32 7.82.523s3.6 1.81 6.053 2.149c7.01.969 6.47 4.5-1.159 7.55-6.6 2.64-18.9 15.4-18.936 19.638 0 1.08 3.64 1.95 8.146 1.948 7.07 0 8.85-.851 13.433-6.414 6.15-7.46 24-21.2 27.513-21.186 4.42 0 2.54 3.02-6.981 11.218-13.2 11.3-21.3 21.8-18.285 23.683 1.34.828 1.84 2.98 1.174 5.072-.928 2.92.02 3.99 4.863 5.454l6.016 1.821-6.181 3.516c-3.4 1.93-7.95 4.94-10.12 6.674l-3.939 3.159 5.242.061c5.59.065 17.8 5.1 17.758 7.346 0 .74-1.64 2.83-3.637 4.636-4.35 3.94-3.28 6.48 2.717 6.479 2.41 0 4.9.842 5.539 1.87.636 1.03 1.87 1.43 2.741.89 3.25-2.01 3.92 3.12.857 6.509-3.05 3.37-2.97 3.6 1.78 5.404 2.73 1.04 10.1 1.99 16.343 2.117l11.38.23-8.28 1.462c-8.29 1.46-38.1.384-41.224-1.494-.915-.549-1.07-.042-.351 1.127.722 1.17 2.35 2.12 3.613 2.124s3.9 1.17 5.847 2.594c3.48 2.55 3.48 2.66.06 6.448-1.92 2.12-6.67 4.71-10.555 5.757-8.6 2.32-8.86 4.93-1.548 15.561 3.04 4.41 5.53 8.7 5.533 9.531.015 1.66 16.5 18.3 29.415 29.785 4.55 4.02 7.7 7.89 6.996 8.591s-4.89-.478-9.31-2.618c-9.9-4.79-11-4.81-15.155-.211-1.83 2.02-4.25 3.68-5.371 3.68s-6-4.14-10.83-9.2c-8.12-8.5-12.4-11.2-12.275-7.82.234 7.17 5.46 20.7 13.354 34.431 15.5 27 42.6 51 71.701 63.381 4.81 2.04 8.74 3.28 8.74 2.741 0-2.72-4.1-8.09-6.184-8.094-1.31 0-4.32-2.07-6.696-4.6s-5.31-4.6-6.519-4.6c-1.91 0-22.9-19.4-22.92-21.21 0-2.58 3.91-2.02 7.475 1.07 2.35 2.04 5.39 3.28 6.75 2.752 2.69-1.03 5.52.315 20.33 9.677 5.34 3.38 10.7 5.73 11.96 5.232 1.72-.697 1.73-.944.029-1.055-1.22-.08-4.29-2.22-6.816-4.745s-5.78-4.6-7.232-4.6-3.99-2.07-5.646-4.6-4.14-4.6-5.508-4.6c-2.22 0-4.25-3.68-7.198-13.047-.507-1.61-.155-4.09.783-5.52 1.41-2.14 2.19-1.96 4.494 1.066 1.53 2.01 3.88 3.67 5.205 3.68 2.93.026 9.71 4.77 21.702 15.201 4.95 4.3 9.63 7.82 10.394 7.82.769 0 2.19 2.69 3.159 5.98.968 3.29 3 6.02 4.521 6.065s4.49 1.04 6.603 2.205 5.63 1.65 7.82 1.08c2.77-.725 3.98-.203 3.977 1.723 0 3.38 8.59 9.3 11.173 7.704 2.81-1.74 10.5 3.85 24.151 17.648l12.324 12.42-6.088 1.142c-6.71 1.26-17.6-.669-42.109-7.439-22.2-6.15-24.7-4.22-12.096 9.472 7.45 8.08 7.5 8.24 2.891 8.239-2.59 0-5.8-1.04-7.134-2.3-3.78-3.58-25.6-14.3-29.093-14.26-1.73 0-6.79-2.51-11.241-5.583s-12.7-8.63-18.217-12.344c-14.4-9.64-44.8-40.6-51.575-52.726-6.08-10.8-15.5-20.2-19.036-18.924-2.36.839-2.37.761 1.354 20.846 3.3 17.8 12.1 43.5 18.979 55.502 8.68 15.1 42.9 53.5 47.938 53.789 2.5.141 25.4 21.9 23.105 21.969-1.23.017-5.06-2.45-8.523-5.49s-7.21-5.52-8.344-5.52c-2.91 0-2.44 11.1.703 16.56 1.45 2.53 2.64 5.43 2.662 6.44s-3.32-3.91-7.424-10.939c-7.68-13.2-16.6-25.6-21.741-30.461-1.62-1.52-7.5-9.2-13.061-17.066-5.56-7.87-13.3-18.6-17.278-23.92s-9.15-14.1-11.572-19.489c-4.21-9.43-4.67-9.82-10.075-8.743-4.6.92-7.32-.08-14.434-5.304-4.82-3.54-9.63-6.44-10.691-6.437-9.22 0-10.7 26.8-3.025 56.378 6.36 24.7 11.1 37.9 18.958 53.101 7.92 15.3 25.4 37.8 28.465 36.714 3.05-1.11 4.85.518 13.282 12.045 9.06 12.4 13.7 19.7 13.735 21.439 0 2.2-10.6-8.68-15.855-16.23-5.65-8.16-9.35-8.98-10.989-2.449-.635 2.53-1.69 4.55-2.335 4.484s-7.77-9.38-15.834-20.7c-15.8-22.2-28-44.8-34.33-63.692-2.19-6.5-5.79-13.5-8.009-15.64s-6.74-9.17-10.035-15.709c-7.31-14.5-11.2-20.3-11.172-16.71 0 3.65 8.29 27.1 13.036 36.831 4.76 9.79 10.9 27.2 10.884 30.88 0 1.46 1.86 5.26 4.14 8.441 4.29 6 5.67 9.3 13.654 32.495 2.61 7.59 6.24 16.7 8.057 20.353 1.82 3.6 5.57 13.5 8.328 22.08s6.96 18.6 9.339 22.39 4.32 7.52 4.322 8.321 2.42 4.39 5.37 7.972c2.95 3.58 7.16 10.2 9.348 14.679s4.73 9.58 5.647 11.322c2.79 5.27 5.11 18 3.472 18.973-3.2 1.98-15.1-11.2-20.102-22.306-2.88-6.36-7.59-15.1-10.467-19.52-5.88-8.95-6.4-9.81-18.031-29.23-8.3-13.9-16.1-20.4-19.875-16.652-.967.967-1.64 12-1.492 24.468.26 22.2-2.45 55.3-5.117 62.506-1.29 3.48-1.46 3.46-5.155-.622zm7.987-61.02c-.533-1.39-1.52-6.22-2.2-10.735-1.31-8.74-3.68-14-5.483-12.215-1.65 1.65 4.74 25.5 6.838 25.475.997 0 1.38-1.14.844-2.525zm-45.424-156.88c0-6.88-.545-8.2-3.182-7.694-1.75.337-3.97 2.86-4.936 5.599-1.38 3.93-1.05 5.76 1.588 8.679 4.62 5.1 6.53 3.17 6.53-6.584zm-25.697 3.464c1.39-2.78 2.78-5.62 3.101-6.313s-.198-1.73-1.145-2.317c-2.69-1.66-7.54 4.27-7.538 9.221 0 5.92 2.46 5.66 5.582-.591zm-21.053-16.324c-.584-1.52-1.9-2.25-2.916-1.624-2.62 1.62-2.3 7.83.447 8.772 2.65.911 4.03-3.08 2.469-7.148zm11.016-1.695c-.624-2.49-2.43-4.52-4.013-4.521s-2.58.621-2.206 1.38c4.64 9.52 6.04 11.6 6.644 9.79.39-1.17.199-4.16-.426-6.649zm226.61-40.751c-1.71-1.71-3.63-2.59-4.259-1.962-1.81 1.81.969 5.07 4.323 5.073 2.81 0 2.8-.242-.065-3.11zm-546.53-100.62c2.7-2.7-1.35-2.97-7.067-.467l-6.194 2.711 6.054-.546c3.33-.3 6.57-1.06 7.207-1.698zm483.42-34.465c-1.61-2.6-4.48-1.92-4.481 1.055 0 1.64 1.08 2.29 2.749 1.647 1.51-.58 2.29-1.8 1.731-2.702zm-269.44-74.868c0-2.31-32.3-28-35.213-27.978-8.73 0 23.9 28.2 33.833 29.294.759.08 1.38-.512 1.38-1.316zm68.902-61.255c-.592-.959-1.86-1.26-2.82-.666s-1.26 1.86-.666 2.82 1.86 1.26 2.82.666 1.26-1.86.666-2.82zm92.706-6.657c-2-2.41-2.84-2.1-6.407 2.372-5.42 6.8-3.62 9.18 3.242 4.295 4.56-3.24 5.08-4.36 3.164-6.667zm-243.48-41.015c-1.84-2.03-4.18-3.69-5.216-3.691s.066 2.07 2.439 4.593c5.06 5.39 7.7 4.53 2.777-.902zm91.069 577.37c0-11.7 6.87-71.5 8.39-73.026.782-.782 1.55 14.9.955 19.553-.183 1.42.937 1.84 3.002 1.11 5.92-2.09 12.8-9.86 15.234-17.121 1.35-4.1 3.81-7.5 5.785-8.017 1.89-.494 3.44-2.49 3.435-4.444s.545-4.09 1.211-4.756c1.9-1.9 6.04 2.42 4.977 5.191-.524 1.37.593 3.31 2.483 4.323 3.68 1.97 4.57.624 9.928-14.897 2.75-7.96 5.32-9.02 5.321-2.191 0 2.59-.731 4.26-1.624 3.705s-1.42 1.64-1.162 4.871 1.23 6.13 2.165 6.442c1.73.576 6.75-10.8 7.208-16.316.139-1.67 1.93-5.39 3.971-8.28s5.03-9.39 6.629-14.45l2.911-9.2-1.065 8.28c-.586 4.55-3.04 14.9-5.464 23s-6.97 24.7-10.108 36.8-7.79 26.2-10.342 31.28c-12.4 24.7-28.2 41.1-34.504 35.89-1.52-1.27-2.77-3.86-2.773-5.756 0-5.57-6.86-4.24-10.06 1.949-4.88 9.43-6.5 8.45-6.5-3.94zm335.54-10.245c1.31-2.12-12.2-13.3-16.11-13.299-4.06 0-12.5-9.02-10.853-11.619.753-1.2 1.11-3.84.796-5.861-.462-2.97-.116-3.24 1.794-1.38 1.3 1.26 3.2 2.3 4.207 2.3 1.02 0 .859-.981-.368-2.208-2.62-2.62-2.95-8.83-.477-8.832.952 0 2.33.97 3.063 2.155.867 1.4 1.92.6 3.005-2.3 1.64-4.36 1.75-4.3 5.251 2.905 1.97 4.05 4.68 8.19 6.035 9.206 3.91 2.94 10.3 16.7 10.791 23.334.41 5.18-.173 6.19-3.861 6.713-2.39.339-3.86-.163-3.275-1.115zm-429.89-28.412c-2.26-17.3 7.22-61.7 13.658-63.781 2.03-.67 2.06-.3.171 1.991-1.89 2.29-1.82 3.24.379 5.058 1.49 1.23 3.52 1.74 4.508 1.127 2.04-1.26 1.16 5.39-1.723 12.966-2.35 6.18-.939 7.72 3.432 3.768 1.86-1.68 3.91-3.06 4.572-3.055 1.52 0-2.02 8.2-7.181 16.635-2.19 3.58-6.04 12.2-8.562 19.239s-5.4 13-6.4 13.331-2.29-2.94-2.854-7.279zm388.75-4.316c0-1.58.828-2.36 1.84-1.731 1.01.625 1.84 1.92 1.84 2.869s-.828 1.73-1.84 1.731-1.84-1.29-1.84-2.869zm3.048-6.791c.467-.759-.807-1.38-2.831-1.38s-4.19-.828-4.817-1.84-.281-1.84.766-1.84c2.78 0-.754-8.38-6.898-16.365-10.4-13.5-20.8-32-18.98-33.779 1.13-1.13 2.98.122 5.146 3.487 1.86 2.89 4.02 6.08 4.795 7.097s6.91 10.1 13.614 20.24c6.71 10.1 13.9 20.2 15.887 22.487l3.691 4.087-5.612-.407c-3.09-.224-5.23-1.03-4.763-1.787zm-311.02-21.917c5.2-50.7 7.54-61.7 11.693-54.973 1.66 2.68 1.47 4.48-2.633 25.511-2.15 11-2.09 11.6 1.122 10.752 1.87-.488 3.4-.083 3.395.901 0 3.02-3.79 9.06-5.152 8.219-.708-.435-1.37 1.53-1.475 4.371s-1.94 7.38-4.073 10.101l-3.886 4.94 1.008-9.822zm-138.47-4.295c-3.05-7.95 8.23-55.3 14.024-58.87 1.03-.635 1.9.343 1.929 2.174.054 2.94.47 2.84 3.515-.811 5.2-6.23 8.1-5.32 6.705 2.087-1.84 9.82 2.96 9.74 7.03-.106 2.1-5.07 4.28-7.84 5.743-7.274 1.3.498 3.81-.695 5.578-2.65 6.61-7.31 10.5-3.26 5.408 5.644-3.48 6.09-3.48 9.87 0 8.535 8.2-3.15-2.33 9.51-18.16 21.825-10.6 8.23-14.2 12.2-17.058 18.902-2.83 6.58-8.76 13.3-11.759 13.297-1.04 0-2.37-1.24-2.954-2.753zm421.53-1.05c-.667-1.08-.818-2.36-.336-2.839s1.37.401 1.967 1.962c1.24 3.24.184 3.81-1.631.877zm114.58-10.917c-1.73-2.02-4.28-3.68-5.67-3.68s-6.28-3.31-10.88-7.36-9.15-7.36-10.11-7.36c-2.61 0-11.5-8.69-11.486-11.237 0-1.42 1.2-1.12 3.365.832 1.85 1.68 4.15 3.04 5.111 3.045.96 0 3.79 1.43 6.283 3.178 9.24 6.47 13.8 2.87 7.922-6.205l-3.36-5.164 5.002 3.636c2.75 2 5.03 4.3 5.06 5.105.077 1.95 5.79 13.4 10.976 21.991 4.43 7.34 3.04 9.36-2.212 3.22zm-382.22-8.16c0-3.65 4.15-10.2 6.452-10.24 3.89 0 5.52 4.94 2.728 8.303-2.03 2.44-9.18 3.95-9.181 1.936zm417.88-6.709c-4.44-.872-11.1-3.13-14.72-5.024s-9.08-4.04-12.068-4.779c-3.45-.852-4.62-1.84-3.207-2.711 1.22-.754-1.65-1.32-6.375-1.254-7.61.103-8.75-.408-9.989-4.484-.768-2.53-2.18-7.09-3.125-10.137-.977-3.13-1.05-7.36-.179-9.725 1.49-4.02 1.77-4.08 7.104-1.316 7.61 3.93 6.97 2.1-2.219-6.388-12.7-11.7-6.51-11.8 12.758-.096l5.904 3.583-2.124-4.98c-1.17-2.74-3-6.22-4.064-7.74-2.71-3.86 11.8 8.45 17.053 14.424 2.35 2.69 7.73 9.35 11.96 14.804 22.9 29.6 23 29.7 3.291 25.822zm-114.98-4.522c-.631-1.64-1.1-3.96-1.031-5.139s.91-.166 1.88 2.258 1.43 4.74 1.031 5.139c-.403.403-1.25-.613-1.88-2.258zm-375.28-.236c-.675-.675-1.23-2.08-1.227-3.128 0-1.15.857-1.04 2.177.276 1.2 1.2 1.75 2.6 1.227 3.128s-1.5.399-2.177-.276zm328.34-6.714c-4.2-6.8-5.12-11.4-1.862-9.424 2.37 1.47 7.77 13.7 6.57 14.899-.45.45-2.57-2.01-4.708-5.476zm-483.81-2.64c2.6-5.74 13.1-22.9 20.307-33.188 19.4-27.6 34.5-44.6 52.975-59.451 20.9-16.8 20.5-14.4-1.173 6.809-18.8 18.4-28.9 30.2-25.869 30.171.378 0 6.37-5.38 13.312-11.96 8.36-7.92 13.2-11.3 14.453-10.132 1.21 1.21.275 3.54-2.772 6.9-2.53 2.79-6.78 8.05-9.435 11.691-2.66 3.64-8.68 10.3-13.386 14.72s-9.37 9.61-10.38 11.46c-1.61 2.95-1.38 3.12 1.83 1.401 2.01-1.08 3.94-2.67 4.279-3.544.545-1.39 8.52-8.17 33.909-28.816 3.73-3.04 7.71-5.85 8.83-6.262 4.15-1.51 13.9-10.5 19.103-17.669 7.01-9.62 57.3-61.6 59.611-61.628 2.19 0-3.34 7.68-12.571 17.48-22.2 23.6-31.9 36.7-42.259 57.569-6.67 13.4-7.52 20.3-1.242 10.14 4.59-7.45 26.9-33.4 28.843-33.53.882-.076.468 1.4-.92 3.292s-7.61 10.8-13.821 19.78-14.3 19.7-17.968 23.709l-6.671 7.36 1.109-6.664c1.04-6.22.721-6.8-4.753-8.708-4.03-1.41-6.95-1.46-9.36-.171-4.14 2.22-4.71 4.44-.738 2.917 3.82-1.47 3.5 3.12-.46 6.615-1.77 1.56-5.98 3.43-9.345 4.143-8.72 1.85-55.8 31.4-67.849 42.532-4.55 4.21-8.91 5.96-7.589 3.034zm188.9-9.278c5.59-10.1 16.7-24.3 19.007-24.302 2.78 0 1.58 8.17-2.067 14.16-1.97 3.23-5.7 7.26-8.273 8.952-2.58 1.69-4.69 4.13-4.688 5.423 0 2.19-3.84 4.58-7.35 4.585-.841 0 .676-3.97 3.371-8.818zm-42.421-8.756c-1.24-1.24 5.14-18.4 8.788-23.617 1.46-2.08 2.65-5.51 2.653-7.617 0-3.51 9.68-20.8 12.853-22.951.744-.506 2.66-3.4 4.248-6.44s5.57-7.99 8.836-11.019c4.63-4.28 5.47-4.62 3.823-1.54-1.16 2.18-2.75 4.24-3.519 4.579-4.31 1.91-26.2 41.3-26.241 47.186 0 1.85-1.27 7.66-2.831 12.9-2.52 8.49-5.6 11.5-8.609 8.52zm394.16-2.666c0-1.01.365-1.84.811-1.84s1.32.828 1.949 1.84.26 1.84-.811 1.84c-1.07 0-1.95-.828-1.949-1.84zm-324.33-2.948c-1.4-1.4 4.33-13.6 6.39-13.612 1.35 0 .731 5.53-1.392 12.42-.754 2.45-3.17 3.02-4.998 1.193zm7.913-23.071c-.032-1.66 1.58-6.63 3.581-11.04s3.68-9.68 3.728-11.701 1.73-6.99 3.728-11.04l3.639-7.36-.712 8.28c-1.12 13-13.8 42.8-13.965 32.861zm380.2-.968c-.675-.675-1.23-2.43-1.227-3.905 0-2.17.522-2.25 2.76-.388 1.52 1.26 2.76 3.02 2.76 3.905 0 1.9-2.55 2.14-4.293.388zm-625.01-47.188c-.522-.559-7.97-2.78-16.56-4.936-20.9-5.25-20.3-4.98-19.008-8.363.843-2.2 3.12-2.84 8.709-2.48 14.4.942 39.7-2.49 53.95-7.333 18.5-6.29 25.8-10.7 28.047-17.323 1.06-3.04 2.86-4.96 4.193-4.487 4.09 1.46 11.2-3.53 25.292-17.846 14.1-14.3 17.7-16.6 16.081-10.287-.823 3.15-.453 3.38 2.689 1.698 10.1-5.38 11.1 5.94 1.452 15.879-5.5 5.68-5.82 7.3-1.316 6.592.759-.12 1.38.926 1.38 2.324 0 2.88-11.4 12.1-15.057 12.259-3.71.124-28.6 12.7-25.245 12.747 1.62.029 5.34-1.12 8.28-2.554 5.04-2.46 14.9-3.75 24.202-3.172 15.5.964-12.8 16.2-43.227 23.294-12.1 2.81-52.2 5.78-53.861 3.988zm99.388-57.514c0-.506-1.66-.034-3.68 1.05-2.02 1.08-3.68 2.38-3.68 2.89s1.66.034 3.68-1.05c2.02-1.08 3.68-2.38 3.68-2.889zm113.88 51.189c1.2-2.28 2.97-4.14 3.948-4.14 2.61 0 2.21.881-2.172 4.775-3.93 3.49-3.94 3.48-1.775-.635zm230.27-9.539c-2.34-4.38-2.5-9.91-.246-8.513 2.46 1.52 5.81 12.1 3.83 12.072-.924 0-2.54-1.6-3.584-3.559zm-502.61-21.58c-1.8-2.18-1.92-3.26-.414-3.77 1.16-.391 7.22-4.81 13.462-9.821 6.24-5.01 12.7-9.12 14.449-9.135 3.6-.03 28.8-13.4 32.818-17.471 1.51-1.51 4.72-3.24 7.143-3.843s4.86-2.52 5.406-4.259c.551-1.73 4.93-6 9.726-9.477 12.9-9.33 14.8-10.2 9.185-4.184-6.04 6.47-6.4 9.36-1.258 10.152 3.16.489 2.23 1.76-5.52 7.524-5.13 3.82-9.32 8.09-9.322 9.507s-.975 2.9-2.166 3.293-1.6 1.63-.918 2.741c1.76 2.85 9.03.614 7.868-2.419-.519-1.35-.131-2.96.862-3.575s1.69-.433 1.542.401c-.807 4.64.455 6.47 3.852 5.584 5.3-1.38 4.9 5.59-.46 8.034-9.08 4.14-14.3 7.51-14.26 9.261 0 1.74 3.29 1.6 27.286-1.101 5.81-.655 7.76-.282 7.215 1.38-1.58 4.8-9.93 6.82-28.298 6.851-10.3.015-28.1 1.68-39.56 3.688-26 4.54-35.3 4.7-38.637.64zm703.11-19.039c-4.55-.784-13-2.67-18.794-4.192-8.98-2.36-10.8-2.39-12.645-.198-2.74 3.3-7.16 3.18-11.792-.323-3.15-2.38-3.28-3.02-.92-4.513 1.51-.957 3.37-1.75 4.131-1.767 3.58-.073.564-3.99-7.784-10.122-6.93-5.09-9.64-8.5-11.118-13.983-1.45-5.39-3.82-8.44-9.236-11.853-4-2.53-7.28-5.1-7.282-5.719s1.04-.357 2.3.579 5.08 1.94 8.488 2.226c4.65.395 5.83-.061 4.728-1.838-.803-1.3 1.17-.491 4.38 1.796s6.69 3.64 7.722 2.995c2.44-1.51.302-5-2.486-4.065-2.71.915-6.6-4.25-5.452-7.237 1.27-3.32 8.78.526 11.709 5.996 1.29 2.42 3.39 4.4 4.652 4.397 4.42 0 8.12-2.26 8.12-4.95 0-1.49 1.04-2.37 2.3-1.942s2.32 2.72 2.339 5.093c.03 3.25 2.31 5.59 9.2 9.438 5.04 2.82 10.6 5.15 12.276 5.181 1.71.033 4.2 1.51 5.52 3.285 4.06 5.45 31.8 14.7 63.584 21.164 12.6 2.58 18.9 4.66 18.86 6.32 0 1.47-2.04 2.46-5.06 2.449-2.78-.011-11.7.744-19.78 1.68-17.6 2.03-46.5 2.08-57.959.105zm-525.31-9.182c.626-1.01 1.96-1.84 2.977-1.84s1.33.828.703 1.84-1.96 1.84-2.977 1.84-1.33-.828-.703-1.84zm-83.574-2.607c-.08-1.94.355-3.03.966-2.415s.677 2.2.145 3.527c-.587 1.47-1.02 1.03-1.112-1.112zm93.694-9.577c0-2.47 16.7-11.2 27.702-14.428 4.32-1.28 4.36-1.22.818 1.341-2.02 1.47-9.27 5.62-16.1 9.223-9.13 4.82-12.4 5.84-12.42 3.864zm362-8.672c-3.8-5.73-6.15-10.4-5.215-10.423 2.94 0 13.4 14.5 12.732 17.763-.403 2.07-2.86-.331-7.518-7.34zm-368.44.617c.626-1.01 1.96-1.84 2.977-1.84s1.33.828.703 1.84-1.96 1.84-2.977 1.84-1.33-.828-.703-1.84zm43.073-9.342c-1.89-1.2-1.22-1.65 2.467-1.67 5.5-.031 6.48.872 2.593 2.365-1.36.521-3.63.208-5.06-.695zm458.32-7.218c0-1.01.365-1.84.811-1.84s1.32.828 1.949 1.84c.625 1.01.26 1.84-.811 1.84-1.07 0-1.95-.828-1.949-1.84zm-27.6-16.56c0-2.02 1.11-3.68 2.475-3.68s3.97 1.66 5.805 3.68c3.26 3.61 3.21 3.68-2.475 3.68-4.58 0-5.8-.778-5.805-3.68zm-493.11-9.2c0-1.01.828-1.84 1.84-1.84s1.84.828 1.84 1.84-.828 1.84-1.84 1.84-1.84-.828-1.84-1.84zm-8.025-13.8c-.583-1.52-.257-2.76.723-2.76s1.78 1.24 1.782 2.76-.325 2.76-.723 2.76-1.2-1.24-1.782-2.76zm495.62-26.68c2.55-1.65 1.26-2.67-2.509-1.988-.874.158-6.01-.998-11.418-2.57-5.41-1.57-10.5-2.75-11.291-2.612-3.82.641-7.9-.366-7.902-1.947 0-.966 1.97-3.73 4.38-6.137 2.83-2.83 4.2-6.07 3.856-9.157-.461-4.2.872-5.47 11.04-10.528 6.76-3.36 14.9-5.9 19.604-6.106 6.38-.282 8.41-1.21 9.856-4.495 2.11-4.82 4.11-5.18 8.198-1.476 5.67 5.13 56.9 3.56 83.609-2.571 4.94-1.13 9.31-1.74 9.703-1.339 1.74 1.74-2.18 6.42-11.634 13.898-9.47 7.49-11.8 8.4-34.373 13.016-14.6 3-28.9 7.22-36.16 10.676-6.58 3.14-14.7 6.7-17.94 7.907s-5.98 3.34-5.98 4.731c0 1.71-2.25 2.53-6.9 2.509-5.13-.021-6.19-.485-4.14-1.812zm-16.56-18.4c0-1.01-.828-1.84-1.84-1.84s-1.84.828-1.84 1.84.828 1.84 1.84 1.84 1.84-.828 1.84-1.84zm-566.71 5.639c-2.53-.772-7.95-3.12-12.052-5.211-4.1-2.09-15.3-6.87-24.84-10.612-19.1-7.48-34.9-15.4-34.868-17.528 0-3.94 40.8-12 45.86-9.056 2.22 1.3 1.54 1.71-2.855 1.752-3.16.031-6.78 1.3-8.045 2.816s-3.98 2.76-6.052 2.76-3.28.479-2.697 1.064c1.81 1.81 10.6 2.21 11.662.528.541-.876 2.8-1.58 5.015-1.564 3.01.021 3.39.435 1.496 1.634-3.63 2.3-.642 6.02 4.311 5.367 2.3-.302 6.16.403 8.564 1.565s6.04 2.74 8.06 3.502c2.88 1.09 1.9 1.66-4.556 2.646-4.53.691-9.7.873-11.5.403-4.24-1.11-4.28 2.72-.044 3.914 20.9 5.88 35.7 11.2 32.985 11.782-1.99.451-2.95 1.82-2.358 3.36 1.08 2.83-.972 3.05-8.087.878zm-32.2-20.359c-.625-1.01-1.92-1.84-2.869-1.84-.952 0-1.73.828-1.731 1.84s1.29 1.84 2.869 1.84 2.36-.828 1.731-1.84zm12.88-22.08c-.645-1.04.901-1.84 3.571-1.84 2.59 0 4.71.828 4.709 1.84s-1.61 1.84-3.571 1.84-4.08-.828-4.709-1.84zm514.28-2.651c0-.446.828-1.32 1.84-1.949 1.01-.625 1.84-.26 1.84.811s-.828 1.95-1.84 1.949-1.84-.365-1.84-.811zm87.605-2.075c-1.6-4.16 4.45-11.7 10.412-13.032 5.69-1.25 7.22-2.99 7.88-8.985.356-3.24-.298-3.9-3.123-3.161-2.33.61-3.38.093-3.034-1.492.296-1.33-.911-2.74-2.682-3.13-2-.438-3.22.392-3.22 2.191 0 3.34-6.43 3.86-13.68 1.1-5.64-2.14-6.15-5.54-1.04-6.872 2.09-.546 3.68-2.51 3.68-4.536 0-1.97.842-3.05 1.87-2.418 1.03.636 1.43 1.87.89 2.741s-.233 2.05.681 2.612c2.28 1.41 3.64-4.62 2.049-9.081-1.89-5.3-.367-7.79 4.434-7.261 3.58.393 4.08-.226 3.332-4.139-.965-5.05 1.88-7.82 8.079-7.862 2.12-.016 5.35-1.68 7.185-3.708 1.96-2.17 5.67-3.68 9.025-3.687 3.13-.004 8.41-1.66 11.719-3.68s7.45-3.68 9.2-3.684 5.55-1.25 8.446-2.76 6.68-2.75 8.393-2.749c4.42 0 11.2-6.87 10.018-10.079-.694-1.81 1.22-3.77 5.822-5.962 6.72-3.2 6.91-3.19 9.404.57 2.26 3.4 3.55 3.67 11.261 2.356 20.5-3.49 24.3-3.86 24.209-2.316-.079.897-5.67 6.4-12.42 12.22s-20.3 18-30.184 26.995c-16 14.7-46 35.3-68.572 47.224-4.18 2.2-8.55 6.37-10.12 9.635-2.95 6.16-8.1 7.68-9.914 2.948zm-515.26-14.642c-1.64-2.5-3.86-4.55-4.928-4.552s-6.31-2.9-11.648-6.44c-7.65-5.08-11.6-6.46-18.712-6.558-4.96-.065-14-1.2-20.049-2.534l-11.04-2.416 5.52-2.202c3.04-1.21 9.45-2.67 14.261-3.243 7.4-.882 8.28-1.38 5.699-3.265-4.83-3.53-1.27-6.75 5.964-5.391 4 .751 7.34.335 9.111-1.134 2.16-1.8 3.85-1.84 7.478-.185 2.58 1.17 5.41 1.69 6.289 1.142 3.85-2.38 21.4-3.65 48.718-3.531 24 .1 30.5.697 34.96 3.209 3.04 1.7 7.01 3.09 8.831 3.097s5.8 1.3 8.834 2.867c4.12 2.13 5.24 3.74 4.413 6.351-.85 2.68.739 4.68 6.806 8.584 4.35 2.8 10.4 7.1 13.435 9.559 5.24 4.25 5.29 4.4.92 3.042-2.53-.785-8.5-3.39-13.279-5.789-4.77-2.4-9.66-4.36-10.862-4.362s-6.65-2.11-12.114-4.698c-5.46-2.58-14.2-5.09-19.497-5.571-9.44-.863-9.5-.839-4.048 1.793 3.04 1.47 12.1 5.24 20.24 8.374s15.9 6.47 17.427 7.405c5.05 3.17.095 4.36-9.608 2.321-17.6-3.7-20.7-4.58-23.213-6.592-5.68-4.51-14.4-6.23-18.903-3.729-2.39 1.32-6.62 2.44-9.403 2.473-5.9.076-6.9 4.7-1.84 8.544 2.78 2.11 1.54 2.45-9.069 2.503-8.31.04-13.2.937-15 2.77-2.39 2.39-3.07 2.17-5.694-1.84zm-104.04-63.359c-1.49-.942-2.28-2.14-1.76-2.659 1.43-1.43 9.07.935 9.066 2.802 0 2.11-3.86 2.04-7.307-.143zm-12.933-1.912c-4.32-1.38-4.24-1.48 1.489-1.657 3.63-.109 5.63.56 4.951 1.657-.625 1.01-1.3 1.76-1.489 1.657-.193-.101-2.42-.846-4.951-1.657zm667.91-4.6c0-1.85-.873-2.48-2.3-1.679-1.56.878-1.7.683-.46-.605 1.01-1.05 3.91-2.45 6.44-3.118 3.88-1.02 4.09-.896 1.341.826-1.79 1.12-2.81 2.76-2.27 3.641s.147 2.12-.881 2.756c-1.03.636-1.87-.184-1.87-1.821zm-3.68-13.018c3.54-1.67 10.7-5.01 15.824-7.426 9.66-4.53 16.5-5.75 14.571-2.612-.921 1.49-10.8 5.06-33.155 11.935-2.02.624-.782-.23 2.76-1.897zm-401.12-8.141c0-1.01.365-1.84.811-1.84s1.32.828 1.949 1.84.26 1.84-.811 1.84c-1.07 0-1.95-.828-1.949-1.84zm133.66-7.079c-.692-4.33-.639-8.85.117-10.053s1.9-7.83 2.539-14.715c1.44-15.5 4.32-19.4 7-9.327 1.76 6.6 1.42 10-2.476 24.614-.405 1.52-1.9 6.04-3.329 10.053l-2.593 7.293zm59.686-17.608c-.08-1.94.355-3.03.966-2.415s.677 2.2.145 3.527c-.587 1.47-1.02 1.03-1.112-1.112zm-188.74-8.895c-10.1-17.6-13.4-31.6-16.686-69.894-.672-7.83-1.85-13.8-2.618-13.373-3.77 2.33 1.9-27.7 7.638-40.47 1.87-4.16 3.32-11.8 3.346-17.53.022-5.59 1.17-11.8 2.548-13.8 1.47-2.13 2.56-8.75 2.622-16.049.209-22.6.352-24.2 1.993-22.448.881.961 4.67 10 8.411 20.148s7.52 19.7 8.392 21.393 2.18 6.2 2.919 10.114 4.16 15.4 7.608 25.526 6.56 22.5 6.912 27.605 1.24 12 1.965 15.441c2.14 10.1-1.69 5.36-7.325-9.011-2.82-7.19-5.44-12.8-5.827-12.381s1.76 10.2 4.771 21.723c6.28 24.2 6.67 27.1 3.162 23.458-2.79-2.86-6.4-12.6-13.461-36.277-2.83-9.51-5.48-16.3-5.879-15.104-.726 2.18 6.48 37.4 11.871 58.009 1.57 6 3.51 15.5 4.326 21.16s2.06 12.5 2.775 15.32c.835 3.26.571 5.06-.742 5.06-1.12 0-2.04-.855-2.039-1.899 0-3.62-5.57-15.2-6.75-14.044-.65.65-1.73 4.3-2.403 8.102l-1.221 6.92-2.466-10.58c-1.36-5.82-3.1-10.6-3.867-10.58s-1.94-2.48-2.609-5.499-1.84-5.89-2.618-6.37c-1.74-1.07-1.03 35.1.801 40.849 2.1 6.57.397 4.88-5.548-5.522zm-1.704-73.352c-2.71-8.64-3.6-5.24-1.682 6.397.836 5.06 1.61 6.32 2.694 4.385.878-1.57.451-6.12-1.012-10.782zm32.422 78.414c-.038-3.04.344-4.5.848-3.255s.535 3.73.068 5.52-.879.771-.916-2.265zm141.32-4.6c0-1.01 1.29-1.84 2.869-1.84s2.36.828 1.731 1.84-1.92 1.84-2.869 1.84c-.952 0-1.73-.828-1.731-1.84zm-188.38-8.74c-4.32-13.3-7.2-33-6.174-42.131.508-4.51.279-11.1-.509-14.554s-.778-6.76.023-7.254c2.36-1.46 3.68 4.17 3.681 15.7 0 5.94 1.14 15.2 2.533 20.549 2.78 10.7 5.77 36.4 4.242 36.429-.527 0-2.24-3.93-3.795-8.74zm180.47.218c-.673-.673-.752-3.1-.175-5.401.834-3.32.198-4.3-3.109-4.787-4.91-.719-7.1-5.21-2.535-5.209 2.87 0 2.89-.356.301-4.14-1.56-2.28-3.73-3.93-4.826-3.68-1.34.309-1.82-4.68-1.488-15.18.416-13 .027-15.6-2.299-15.655-1.54-.007-3.76-2.08-4.934-4.616-2.09-4.5-1.32-9.21 3.313-20.21 1.59-3.77 1.52-12-.103-11.96-.496 0-3.62 2.63-6.941 5.854-6.78 6.57-8.94 6.22-6.192-.999 1.12-2.95 3.25-4.86 5.421-4.855 5.38 0 9.4-1.95 9.396-4.572 0-1.29 1.24-3.37 2.76-4.628s2.76-3.42 2.76-4.804c0-3.61 19.5-34.9 28.563-45.796 4.21-5.06 9.93-12.7 12.727-16.929 4.23-6.44 11.8-13.4 14.457-13.431 1.08 0-1.76 18.2-4.963 31.854-1.62 6.89-2.94 14.2-2.945 16.325 0 3.26.412 3.45 2.926 1.363 2.66-2.21 2.83.292 1.817 27.662-.919 24.9-.638 30.8 1.638 34.282 2.48 3.78 2.39 4.97-.857 12.132-1.98 4.37-3.62 10.2-3.644 13.065-.034 4.31-1.36 5.69-8.32 8.675-4.55 1.95-8.38 4.41-8.51 5.455s-.437 2.73-.69 3.745-.564 2.95-.69 4.305c-.127 1.36-2.3 3.41-4.83 4.561-4.43 2.02-4.6 1.86-4.6-4.305 0-3.52-.75-6.4-1.668-6.401-.917 0-1.2 1.79-.63 3.968.678 2.59.343 3.54-.965 2.73-2.85-1.76-4.37 1.51-5.291 11.369-.809 8.66-2.62 12.5-4.875 10.21zm41.029-165.56c0-2.42-.393-4.4-.873-4.396-1.59 0-6.49 10.8-6.426 14.168.098 5.3 7.3-4.34 7.299-9.773zm-91.999 155.68c0-2.02.828-3.68 1.84-3.68s1.84 1.66 1.84 3.68-.828 3.68-1.84 3.68-1.84-1.66-1.84-3.68zm305.4-25.704c5.6-7.87 7.35-8.31 3.922-.985-1.63 3.48-4.05 6.36-5.388 6.389-1.66.041-1.2-1.66 1.466-5.404zm-167.4 2.326c0-.962 2.9-9.13 6.44-18.152s6.39-17.7 6.323-19.177c-.071-1.68-.743-1.22-1.711 1.179-1.7 4.2-5.18 7.14-6.684 5.63-.499-.499 1.19-4.93 3.754-9.844s5.14-11.3 5.714-14.195c.639-3.19 5.92-10.1 13.425-17.48 12.6-12.4 32.7-27.4 34.418-25.675.528.528-1.87 5.01-5.33 9.966-6.39 9.16-25.1 45.2-25.07 48.439 0 .963-.819 2.26-1.819 2.875-1.04.645-1.35-.094-.723-1.731 1.82-4.74-2.32-3.21-5.841 2.16-1.81 2.76-6.46 11.4-10.334 19.097-6.48 13-12.6 21.1-12.563 16.91zm-173.93-11.273c-3.11-2.74-7.44-9.79-9.804-15.948-2.33-6.07-4.98-12.9-5.89-15.18s-2.82-4.14-4.231-4.14-3.6-1.24-4.865-2.76-3.76-2.76-5.564-2.76c-3.52 0-10.2-9.93-12.157-18.019l-1.191-4.98 3.936 4.89c2.16 2.69 3.94 5.67 3.936 6.615s1.52 3.1 3.382 4.785c3.2 2.89 3.54 2.73 6.372-2.935 10.2-20.5 19.3-52.5 17.19-60.799-.718-2.86-3.29-6.04-5.834-7.193-5.85-2.67-5.83-5.16.051-5.162 6.39 0 11.3-5.6 12.847-14.525.702-4.16 1.9-7.56 2.659-7.555 1.91 0 5.65 8.59 5.654 12.966 0 2 1.25 3.59 2.825 3.593 2.22 0 2.42.76.927 3.547-2.25 4.21-.701 9.33 2.821 9.333 3.82 0 6.32-5.96 4.131-9.867-1.46-2.61-1.03-3.92 1.97-6.018 2.2-1.54 5.11-7.17 6.815-13.18 3.28-11.5 8.11-18.8 8.112-12.195 0 2.03 2.58 11.9 5.741 22.014 5.54 17.7 5.69 19 4.306 38.566-.79 11.1-1.51 22.1-1.601 24.38-.276 6.89-1.82 4.74-5.599-7.764l-3.594-11.904-2.298 5.464c-2.5 5.93-4.22 6.67-7.627 3.256-1.72-1.72-2.21-1.51-2.208.92 0 4.63-3.52 3.79-5.452-1.293-.925-2.43-2.56-4.96-3.634-5.629-2.48-1.54-2.55 8.96-.17 26.936.981 7.41 2.22 17.2 2.751 21.753s1.78 13.7 2.779 20.24c2.29 15.1 2.34 20.7.187 19.407-.934-.577-2.22-3.73-2.853-7.009-2.1-10.8-5.43-21.6-6.694-21.599-2.52 0-3.23 5.48-1.472 11.394 2.31 7.77 2.59 19.7.516 21.723-.879.847-4.11-.669-7.17-3.369zm343.56-4.773c8.32-8.1 12.5-10.3 12.527-6.669 0 2.01-9.8 9.64-16.56 12.878-3.2 1.53-1.96-.365 4.033-6.209zm-64.752-15.414c0-2.12 11.8-13.2 14.026-13.241 1.04 0 6.69-3.73 12.554-8.28s11.4-8.28 12.282-8.28c4.1 0 .752 4.05-8.659 10.47-5.65 3.86-14.1 10.1-18.826 13.91-8.51 6.87-11.4 8.24-11.376 5.421zm82.799-.04c0-.836 2.09-3.48 4.636-5.874l4.636-4.355-2.93 5.874c-2.71 5.42-6.34 7.92-6.341 4.355zm-12.88-10.441c0-5.45 1.98-5.85 6.155-1.235 4.16 4.6 3.83 5.84-1.555 5.835-3.68 0-4.6-.92-4.6-4.6zm-71.759.197c0-.398 1.28-1.22 2.856-1.819 1.64-.628 2.38-.32 1.731.723-1.08 1.75-4.59 2.59-4.587 1.096zm65.779-17.975c-5.09-1.86-7.09-7.06-2.709-7.061 3.11 0 10.5 5.26 10.529 7.464 0 2.08-1.18 2.02-7.82-.403zm-17.022-11.201c2.04-6.25 2.28-14.8.519-18.4-.954-1.96-.849-3.22.267-3.22 1.01 0 2.78 3.52 3.925 7.82s2.85 8.75 3.783 9.887c1.12 1.37.15 3.08-2.875 5.06-6.11 4-7.22 3.78-5.619-1.147zm-371.75-7.022c-.667-1.08-.818-2.36-.336-2.839s1.37.401 1.967 1.962c1.24 3.24.184 3.81-1.631.877z"/> + <path fill="#edb705" d="m435.36 825.6c-2.1-2.32-5.36-8.36-7.233-13.415-2.53-6.84-7.09-12.7-17.727-23.015-14.3-13.8-19.3-22.5-16.945-29.842 1.3-4.1 5.91-4.19 10.314-.207 4.98 4.51 5.96 1.94 3.653-9.575-2.03-10.1-12.5-30.1-15.795-30.228-.932-.029-3.19 1.3-5.013 2.951-3.11 2.81-3.44 2.69-5.19-1.921-1.03-2.71-2.36-6.89-2.968-9.289-1.05-4.2-.786-4.33 6.885-3.343 6.12.784 9.2 2.47 13.189 7.224 5.87 6.99 8.59 6.61 8.592-1.193 0-2.92.828-5.82 1.84-6.44 1.1-.679 1.88 1.69 1.932 5.871.376 28.7 1.84 38.2 9.343 60.421 4.24 12.5 8.4 22.4 9.254 21.849.853-.527 1.55-9.77 1.551-20.538 0-22.9 2.27-23.1 5.44-.443 1.2 8.6 3.47 17.6 5.041 20.059 2.19 3.4 2.57 7.12 1.656 16.07-.657 6.41-1.82 13.4-2.594 15.436-1.39 3.76-1.43 3.76-5.226-.43zm72.039-3.545c-3.72-3.26-8.98-11-11.902-17.405-2.88-6.36-7.59-15.1-10.467-19.52-5.88-8.95-6.4-9.81-18.031-29.23-11.9-19.9-22.6-23.8-21.544-7.956.281 4.17-.256 6.15-1.464 5.404-1.05-.649-1.91-3.14-1.908-5.53s-2.98-8.25-6.615-13.017c-8.86-11.6-19.9-33-18.347-35.577 2.33-3.77 4.74-2.09 10.999 7.701 5.6 8.75 12.1 16.1 12.124 13.704 0-.509-1.96-6.2-4.346-12.645s-4.94-14.2-5.66-17.239l-1.315-5.52 5.512 5.262c3.03 2.89 8.14 10.2 11.357 16.23 7.21 13.5 8.98 13 2.861-.782-2.48-5.62-5.92-15.1-7.634-20.983-1.71-5.92-5.07-15.1-7.465-20.308s-4.35-10.7-4.349-12.209-1.17-6.7-2.607-11.618-3.85-13.9-5.362-19.991c-5.9-23.6-6.97-26.7-9.384-26.68-3.05 0-4.06 2.47-5.723 14.025-.711 4.94-2.54 10.4-4.07 12.148-2.62 3-3.06 2.97-7.879-.46-5.91-4.2-8.48-4.56-9.689-1.333-.604 1.61-1.67 1.25-3.554-1.201-3.86-5.02-5.98-2.73-8.712 9.397-2.64 11.7-2.48 11.8-8.606-7.736-3.01-9.61-4.05-11-8.035-11.04-4.95 0-5.29 2.49-2.834 20.24.561 4.05-1.92-1.75-5.503-12.88-8.61-26.7-8.01-25.9-17.889-25.231-7.75.496-8.51.117-12.134-6.024-5.16-8.75-8.24-9.57-17.866-4.758-8.67 4.33-12 3.94-10.683-1.249.442-1.77-1.18-5.5-3.609-8.281-3.75-4.3-5.35-4.88-10.636-3.867-3.42.658-8.29 2.61-10.823 4.342-2.53 1.73-6.67 4.2-9.2 5.497l-4.6 2.351 3.91-4.39c5.65-6.34 8.05-11.7 8.05-17.889 0-4.44-1.06-5.83-5.648-7.43-4.07-1.42-6.45-4.01-8.521-9.283-2.53-6.44-3.67-7.38-9.532-7.871-5.74-.48-6.74-1.26-7.243-5.633-.394-3.42-2.34-5.99-5.98-7.867-4.08-2.11-5.4-4.09-5.396-8.113 0-8.36-1.8-11.1-7.189-11.143-10.2 0-12-7.13-4.624-18.292 5.82-8.8 5.29-14.9-1.594-18.163-2.82-1.35-6.12-4.05-7.343-5.997-1.62-2.59-4.3-3.55-9.944-3.547-13.3 0-11.9-5 2.573-9.283 7.04-2.09 10.7-5.04 18.921-15.445 2.64-3.33 2.42-3.42-5.429-2.172-4.5.716-9.06 1.98-10.12 2.82s-8.14 2.49-15.731 3.67c-7.59 1.18-17.9 2.92-23 3.862-9.22 1.71-85.2 5.47-107.64 5.327-6.58-.043-10.5-.657-8.701-1.366 1.79-.709 4.95-4.07 7.015-7.465 3.65-6 4.01-6.14 12.381-4.845 30.1 4.64 92 4.8 105.87.27 4.91-1.6 14.3-3.46 20.854-4.13 15.4-1.58 30-8.81 32.4-16.03 1.52-4.61.953-6.03-4.732-11.96-5.53-5.77-6.18-7.32-4.528-10.872 1.6-3.45 3.39-4.14 10.733-4.14 4.85 0 9.36-.888 10.03-1.974s-.863-5.99-3.41-10.898l-4.63-8.924 6.278 1.019c8.54 1.39 8.19-2.02-1.222-11.864-4.1-4.29-6.96-8.61-6.355-9.59s-2.44-4.06-6.78-6.844c-6.92-4.43-12.7-9.19-31.09-25.706-2.42-2.17-5.46-5.27-6.768-6.9-1.38-1.72-5.12-2.96-8.937-2.959-5.13 0-6.33-.614-5.487-2.808.595-1.55-3.02-10.6-8.083-20.267-5.04-9.6-9.16-18.7-9.161-20.137s-2.48-4.51-5.52-6.759-5.52-5.08-5.52-6.306c0-2.08-3.66-6.87-23.46-30.693-6.12-7.36-7.82-10.9-7.82-16.269 0-3.77-.505-8.18-1.123-9.786-2.51-6.54 6.83.321 19.869 14.593 7.4 8.1 16.6 18 20.345 22.08 3.79 4.04 6.9 7.91 6.9 8.585.018 2.49 48.9 42 57.048 46.159 2.53 1.28 8.1 4.6 12.383 7.369s8.14 5.04 8.578 5.038c1.71 0-.345-9.3-2.732-12.381-2.41-3.11-2.35-3.11 1.268-.039 4.73 4.01 16.5 4.31 17.969.46 1.83-4.76 4.67-3.13 17.609 10.12 12.4 12.7 16.2 15.4 14.203 10.179-2.18-5.68 1.81-4 7.056 2.972 3.02 4.01 5.78 6.4 6.136 5.32 1.03-3.09-5.32-21.9-11.825-35.031-7.77-15.7-9.31-23.1-5.161-24.648 4.68-1.8 9.16.267 11.433 5.266 1.12 2.46 4.35 5.95 7.179 7.759s6.07 4.49 7.211 5.961c1.74 2.25 2.27 2.03 3.344-1.355 1.5-4.72 3.38-5.08 6.549-1.264 1.26 1.52 3.16 2.76 4.212 2.76s1.4-.523.759-1.162c-.639-.639-.252-2.86.86-4.94 1.12-2.09 2.03-12.9 2.031-24.138.005-11.2.403-18.7.884-16.68.482 2.02 3.18 5.75 6.001 8.28s5.13 5.43 5.13 6.44c.002 1.01.574 8.67 1.269 17.02.948 11.4 1.93 15.2 3.905 15.18 1.46 0 3.13 2.46 3.745 5.52.607 3.04 1.74 5.52 2.515 5.52 2.12 0 3.37-6.58 4.564-23.92 1.79-26 2.96-35 4.539-34.96 2.44 0 3.54 7.17 3.898 25.341.184 9.38 1.05 17.5 1.932 18.048s1.73-.511 1.885-2.342.555-5.4.882-7.929.675-8.33.775-12.88c.266-12.1 1.44-16.6 4.121-15.529 1.47.566 2.22 3.8 2.004 8.675-.189 4.28.816 9.61 2.233 11.849s2.58 5.8 2.577 7.902c0 8.92 5.9 26.9 9.58 29.233 5.33 3.33 6.92.138 6.952-13.93.044-17.5 3.55-30.1 9.933-35.824 4.69-4.17 5.84-4.5 8.051-2.283 1.42 1.42 3.29 2.14 4.154 1.608s2.14 2.77 2.821 7.343c1.39 9.27 2.97 10.2 7.122 4.287 3.03-4.32 3.19-4.29 6.16 1.223 1.08 2 3.89 3.66 6.251 3.68 2.85.031 4.09.974 3.682 2.806-.337 1.52 2.51-.362 6.325-4.178 10.3-10.3 11.8-8.75 9.199 9.161l-1.134 7.743 14.722-5.194-2.644 6.328c-2.26 5.41-2.27 6.7-.078 8.894s1.73 3.86-3.207 11.526c-3.18 4.93-7.9 13.1-10.491 18.108l-4.718 9.148 3.68 7.542c3.33 6.82 11.2 13.2 13.52 10.935.499-.499-.889-2.82-3.086-5.159-7.2-7.67-5.42-9.8 10.136-12.108 15.4-2.29 19.7-.942 15.14 4.681-2.3 2.83-2.22 3.04.781 1.918 1.85-.696 3.72-1.26 4.14-1.265s.77-1.49.77-3.312c0-4.68 3.63-7.74 9.108-7.667l4.692.061-4.14 3.454c-2.28 1.9-4.14 4-4.14 4.67s-1.24 2.46-2.76 3.976c-4.6 4.6-3.28 6.74 3.463 5.649 3.42-.555 6.94-.32 7.82.523.878.843 3.6 1.81 6.053 2.149 7.01.969 6.47 4.5-1.159 7.549-6.6 2.64-18.9 15.4-18.936 19.638 0 1.08 3.64 1.95 8.146 1.948 7.07 0 8.85-.851 13.433-6.414 6.15-7.46 24-21.2 27.513-21.186 4.42 0 2.54 3.02-6.981 11.218-13.2 11.3-21.3 21.8-18.285 23.683 1.34.828 1.84 2.98 1.174 5.072-.928 2.92.02 3.99 4.863 5.454l6.016 1.821-6.181 3.516c-3.4 1.93-7.95 4.94-10.12 6.674l-3.939 3.159 5.242.061c5.59.065 17.8 5.1 17.758 7.346 0 .74-1.64 2.83-3.637 4.636-4.35 3.94-3.28 6.48 2.717 6.479 2.41 0 4.9.842 5.539 1.87.636 1.03 1.87 1.43 2.741.89 3.25-2.01 3.92 3.12.857 6.509-3.05 3.37-2.97 3.6 1.78 5.404 2.73 1.04 10.1 1.99 16.343 2.117l11.38.23-8.28 1.462c-8.29 1.46-38.1.384-41.224-1.494-.915-.549-1.07-.042-.351 1.127s2.35 2.12 3.613 2.124 3.9 1.17 5.847 2.594c3.48 2.55 3.48 2.66.059 6.448-1.92 2.12-6.67 4.71-10.555 5.757-8.6 2.32-8.86 4.93-1.548 15.561 3.04 4.41 5.53 8.7 5.533 9.531.015 1.66 16.5 18.3 29.415 29.785 4.55 4.02 7.7 7.89 6.996 8.591s-4.89-.478-9.31-2.618c-9.9-4.79-11-4.81-15.155-.211-1.83 2.02-4.25 3.68-5.371 3.68s-6-4.14-10.83-9.2c-8.12-8.5-12.4-11.2-12.275-7.82.36 11 12.9 36.6 27.028 55.323 7.15 9.44 22.1 23.3 33.646 31.027 8.21 5.54 40.4 22.3 50.103 26.115 3.28 1.28 4.66 2.9 3.99 4.656-.616 1.6 2.19 6.21 6.936 11.388l7.97 8.694-5.52-1.355c-3.04-.745-6.76-2.42-8.28-3.733-2.71-2.33-31.5-15.7-33.838-15.736-.646 0-10.4-6.41-21.633-14.235-22.4-15.6-44.5-37.7-53.449-53.354-5.83-10.3-15.3-19.5-18.731-18.308-2.36.839-2.37.761 1.354 20.846 8.65 46.6 29.1 79.9 70.415 114.56 3.33 2.8 4.43 4.72 2.982 5.213-1.26.429-2.3 1.95-2.3 3.387 0 3.95-1.59 3.19-7.019-3.336-2.72-3.27-8.67-10.2-13.221-15.403-7.69-8.78-14.1-17.1-33.471-43.053-4.14-5.57-9.52-14.6-11.943-19.995-4.21-9.43-4.67-9.82-10.075-8.743-4.61.922-7.33-.089-14.617-5.438-10-7.36-15.6-7.26-17.506.327-4.6 18.3 7.36 74.4 21.937 102.85 7.22 14.1 22 35.3 29.147 41.683 3 2.7 3.11 3.69.949 8.823l-2.43 5.779-6.73-9.743c-3.7-5.36-11.7-16.8-17.696-25.382-11.9-16.9-21.6-35.6-26.795-51.384-1.8-5.49-5.1-11.7-7.32-13.8s-6.74-9.17-10.038-15.712c-7.31-14.5-11.2-20.3-11.172-16.71 0 3.65 8.29 27.1 13.036 36.831 5.27 10.8 10.9 27.3 10.943 32.084.032 2.12 1.31 5.51 2.839 7.531s5.12 11.1 7.971 20.24 8.51 24.4 12.571 34.04 8.84 22 10.632 27.6c4.62 14.4 34.5 72.5 36.364 70.631.479-.479 1.35.381 1.937 1.91 2.03 5.29-2.26 4.8-8.895-1.031zm-109.48-214.35c0-6.88-.545-8.2-3.182-7.694-1.75.337-3.97 2.86-4.936 5.599-1.38 3.93-1.05 5.76 1.588 8.679 4.62 5.1 6.53 3.17 6.53-6.584zm-25.697 3.464c1.39-2.78 2.78-5.62 3.101-6.313s-.198-1.73-1.145-2.317c-2.69-1.66-7.54 4.27-7.538 9.221 0 5.92 2.46 5.66 5.582-.591zm-21.053-16.324c-.584-1.52-1.9-2.25-2.916-1.624-2.62 1.62-2.3 7.83.447 8.772 2.65.911 4.03-3.08 2.469-7.148zm11.016-1.695c-.624-2.49-2.36-4.52-3.86-4.521-3.49 0-3.43 1 .472 7.605 3.45 5.84 5.22 4.23 3.387-3.084zm163.5-175.83c-1.61-2.6-4.48-1.92-4.481 1.055 0 1.64 1.08 2.29 2.749 1.647 1.51-.58 2.29-1.8 1.731-2.702zm-269.44-74.868c0-2.31-32.3-28-35.213-27.978-8.73 0 23.9 28.2 33.833 29.294.759.08 1.38-.512 1.38-1.316zm68.902-61.255c-.592-.959-1.86-1.26-2.82-.666s-1.26 1.86-.666 2.82 1.86 1.26 2.82.666 1.26-1.86.666-2.82zm92.706-6.657c-2-2.41-2.84-2.1-6.407 2.372-5.42 6.8-3.62 9.18 3.242 4.295 4.56-3.24 5.08-4.36 3.164-6.667zm-151.59 532.89c.343-8.51.835-15.9 1.092-16.396.258-.506 1.07 5.29 1.811 12.88 1.01 10.4.746 14.4-1.092 16.396-2.03 2.16-2.33.021-1.811-12.88zm17.948 10.835c-1.21-1.21-2.21-3.7-2.208-5.52s-1.24-3.31-2.76-3.312c-3.79 0-3.52-1.6 2.299-14.038 4.69-10 5.1-10.4 5.67-5.456.336 2.94 2.41 6.81 4.601 8.602 3.9 3.18 4.14 3.1 10.436-3.506 3.55-3.72 7.75-8.83 9.344-11.361 4.51-7.16 13.9-31 17.017-43.24 2.99-11.7 10.2-29.3 11.511-28.055.424.424-.851 5.48-2.833 11.245s-5.77 19.3-8.414 30.058c-6.9 28.1-20.6 53.4-33.744 62.292-7.62 5.18-7.96 5.25-10.919 2.291zm317.95-17.533c1.52-.578 3.34-1.94 4.04-3.021 1.65-2.55 4.08-.195 2.476 2.4-.667 1.08-3.03 1.9-5.244 1.817-2.74-.099-3.15-.481-1.271-1.196zm-430.56-24.189c0-1.9-.518-6.04-1.15-9.2-1.32-6.62 1.92-8.02 3.726-1.61 1.16 4.11 1.19 4.11 4.085.46 2.84-3.58 2.88-3.55 1.564.92-2.75 9.32-4.5 12.9-6.339 12.88-1.04 0-1.89-1.55-1.886-3.45zm-57.653-40.096c-2.1-2.1-1.3-14 1.53-22.693l2.701-8.28-1.08 8.618c-1.01 8.08-.84 8.56 2.791 7.605 2.31-.605 3.87-.142 3.871 1.151 0 1.19.828 1.65 1.84 1.026 3.66-2.26 1.73 4.18-2.672 8.931-4.59 4.95-6.78 5.84-8.981 3.642zm157.01-23.505c0-1.46.828-3.16 1.84-3.789 1.01-.625 1.84.568 1.84 2.651 0 2.08-.828 3.79-1.84 3.789s-1.84-1.19-1.84-2.651zm417.68-4.142c-8.9-1.49-17.5-4.77-20.374-7.745-1.59-1.66-8.42-6.67-15.18-11.145-6.76-4.48-12.3-9.22-12.285-10.546s.351-2.41.781-2.41 10.4 5.49 22.152 12.195 21.8 11.8 22.245 11.321-.888-3.11-3.042-5.852-3.52-5.37-3.041-5.852c2.23-2.23 10.3 3.26 14.818 10.044 7.43 11.2 6.86 12.2-6.073 9.991zm-33.12-11.607c-1.52-.981-1.93-1.78-.92-1.784s3.08.803 4.6 1.784 1.93 1.78.92 1.784-3.08-.803-4.6-1.784zm-616.39-2.537c0-1.04 12.2-21.6 15.891-26.787 2.38-3.34 3.42-3.81 4.05-1.84.468 1.45 1.67 3.18 2.675 3.834 1.09.712.123 3.67-2.409 7.36-6.6 9.62-20.2 21.4-20.208 17.433zm603.51-2.063c0-3.48 2-3.5 6.548-.059 3.42 2.59 3.36 2.7-1.488 2.76-3.3.038-5.06-.903-5.06-2.701zm-411.72-6.473c2.29-4.01 4.79-7.3 5.548-7.313 2.32-.024 1.54 3.08-1.38 5.506-1.52 1.26-2.76 3.34-2.76 4.628s-1.26 2.82-2.788 3.408c-2.08.798-1.73-.785 1.38-6.229zm-165.88-9.688c.422-.286 2.42-1.74 4.447-3.22 3.4-2.5 3.49-2.46 1.155.521-1.39 1.77-3.39 3.22-4.447 3.22s-1.58-.234-1.155-.521zm121.37-1.779c.046-1.26 2.14-6.03 4.65-10.58l4.567-8.28-1.204 6.44c-1.73 9.24-4.04 14.7-6.21 14.72-1.04 0-1.85-1.04-1.802-2.3zm-112.32-4.062c0-.886 23.1-19.5 27.323-22.035 2.01-1.2 2.09-.745.395 2.415-1.15 2.15-2.72 3.9-3.489 3.902-.771 0-3.02 1.24-4.995 2.755s-6.81 5.24-10.747 8.28c-7.15 5.53-8.49 6.26-8.487 4.684zm182.19-.538c.016-.759.831-2.62 1.812-4.14 1.44-2.23 1.79-1.97 1.812 1.38.016 2.28-.8 4.14-1.812 4.14s-1.83-.621-1.812-1.38zm7.39-22.799c-.032-1.66 1.58-6.63 3.581-11.04s3.68-9.68 3.728-11.701 1.73-6.99 3.728-11.04l3.639-7.36-.712 8.28c-1.12 13-13.8 42.8-13.965 32.861zm-145.42-.449c0-.39 2.28-2.17 5.06-3.965l5.06-3.256-3.505 3.965c-3.1 3.51-6.62 5.24-6.615 3.256zm21.407-4.263c.968-5.2.542-6.03-3.604-7.072-4.2-1.05-4.51-1.69-2.88-5.972 2.48-6.54 10.5-19.2 17.972-28.54 10-12.4 52.1-56.5 53.923-56.484 2.34 0-1.15 4.71-15.114 20.385-22 24.7-24.9 28.3-32.473 40.334-8.65 13.8-14.4 28.1-12.869 32.04.578 1.51-.548 4.64-2.502 6.969l-3.553 4.23 1.098-5.892zm10.807-12.788c8.64-13.2 26.4-34.6 27.631-33.407 1.18 1.18-26.9 38.3-28.966 38.287-1.02 0-.424-2.2 1.335-4.88zm74.505-26.4c1.08-2.02 2.38-3.68 2.889-3.68s.034 1.66-1.05 3.68c-1.08 2.02-2.38 3.68-2.89 3.68s-.034-1.66 1.05-3.68zm-206.26-4.476c-.438-.438-7.82-2.56-16.406-4.716-20.9-5.25-20.3-4.98-19.008-8.363.843-2.2 3.12-2.84 8.709-2.48 29.6 1.93 77.7-11.5 81.293-22.683.656-2.07 2.86-3.28 5.937-3.282 3.64 0 8.55-3.63 19.196-14.217l14.301-14.217v5.89c0 4.63-1.14 6.48-5.301 8.631-2.92 1.51-7.3 5.11-9.737 8.013-4.8 5.7-27.7 21.3-35.804 24.392-2.74 1.04-5.87 2.98-6.967 4.303-5.23 6.34-37.2 11-51.15 7.531-2.69-.674-5.25-.327-5.947.805-.676 1.09-.146 2.12 1.179 2.277 9.47 1.13 16.4 1.41 39.046 1.542 25.9.154 29.3 1.48 13.608 5.28-8.34 2.02-31.3 2.92-32.947 1.295zm213.42-6.104c1.2-2.28 2.97-4.14 3.948-4.14 2.61 0 2.21.881-2.172 4.775-3.93 3.49-3.94 3.48-1.775-.635zm230.27-9.539c-2.34-4.38-2.5-9.91-.246-8.513 2.46 1.52 5.81 12.1 3.83 12.072-.924 0-2.54-1.6-3.584-3.559zm-502.61-21.58c-1.95-2.36-2-3.23-.25-3.825 1.25-.421 6.2-4.01 11.006-7.981 8.42-6.96 11.6-8.58 11.558-5.98 0 .679-1.37 2.75-3.045 4.6-2.85 3.15-2.82 3.36.46 3.3 1.93-.036 8.89-1.25 15.465-2.695s14.4-2.62 17.48-2.61c5.24.02 5.05.277-3.68 4.995l-9.2 4.974 8.28.687c7.47.62 6.48 1.01-10.12 4.022-23.9 4.34-34.7 4.48-37.954.511zm71.493-5.629c3.27-.406 9.06-.413 12.88-.015s1.14.731-5.939.739c-7.08.009-10.2-.318-6.941-.724zm630.05-13.618c-10.7-1.78-18.8-5.13-12.588-5.238 1.83-.031 2.82-.884 2.191-1.896-1.5-2.42 5.06-2.36 10.46.1 18.8 8.58 18.8 10.2-.064 7.033zm-523.75-8.974c.626-1.01 1.96-1.84 2.977-1.84s1.33.828.703 1.84-1.96 1.84-2.977 1.84-1.33-.828-.703-1.84zm10.12-12.184c0-2.47 16.7-11.2 27.702-14.428 4.32-1.28 4.36-1.22.818 1.341-2.02 1.47-9.27 5.62-16.1 9.223-9.13 4.82-12.4 5.84-12.42 3.864zm362-8.672c-3.8-5.73-6.15-10.4-5.215-10.423 2.94 0 13.4 14.5 12.732 17.763-.403 2.07-2.86-.331-7.518-7.34zm-368.44.617c.625-1.01 1.96-1.84 2.977-1.84s1.33.828.703 1.84-1.96 1.84-2.977 1.84-1.33-.828-.703-1.84zm43.073-9.342c-1.89-1.2-1.22-1.65 2.467-1.67 5.5-.031 6.48.872 2.593 2.365-1.36.521-3.63.208-5.06-.695zm-174.63-49.083c0-1.99 12.3-7.09 21.62-8.929 7.96-1.58 7.56.234-1.006 4.604-8.45 4.31-20.6 6.86-20.614 4.326zm607.31-39.784c6.64-2.24 17-5.18 23-6.518s20.1-4.82 31.319-7.737 22.8-5.31 25.76-5.337c2.95-.022 9.01-1.69 13.461-3.713 4.45-2.02 8.38-3.38 8.739-3.027s-2.75 3.37-6.896 6.705c-6.44 5.18-11.1 6.78-31.739 10.995-13.3 2.71-27.7 6.75-31.945 8.967-6.51 3.39-10.6 4.01-25.76 3.886l-18.013-.146 12.073-4.077zm-602.71-2.456c-3.04-1.65-14.6-6.62-25.667-11.055-21.7-8.68-34.1-15-34.132-17.419 0-2.1 5.07-1.88 6.408.286 1.19 1.93 8.4 5.39 36.581 17.589 9.98 4.32 19.5 9.18 21.094 10.798 3.66 3.66 2.75 3.62-4.283-.2zm668.83-26.295c-2.23-1.44-1.97-1.79 1.38-1.812 2.28-.016 4.14.8 4.14 1.812 0 2.3-1.95 2.3-5.52 0zm12.88.009c-2.11-1.37-1.42-1.8 2.945-1.821 3.14-.016 8.36-.952 11.594-2.081s6.34-1.6 6.9-1.041c.557.557-2.44 1.94-6.649 3.075s-8.64 2.42-9.846 2.862c-1.2.439-3.43-.007-4.945-.994zm-174.8-13.7c0-.446.828-1.32 1.84-1.949s1.84-.26 1.84.811-.828 1.95-1.84 1.949-1.84-.365-1.84-.811zm91.437-1.299c-2.62-1.48-2.87-2.42-1.155-4.478 2.27-2.73 7.33-3.61 7.107-1.232-.493 5.26-2.81 7.48-5.953 5.71zm-520.19-17.248c-1.24-1.5-3.05-2.72-4.021-2.721-.97 0-6.13-2.9-11.465-6.44-7.65-5.08-11.6-6.46-18.712-6.558-4.96-.065-14-1.2-20.049-2.534l-11.04-2.416 5.52-2.281c3.04-1.26 16.1-2.95 28.947-3.777s24.1-1.93 24.986-2.46c2.12-1.31 23.7-4.72 42.667-6.76 12.2-1.31 19.3-1.02 32.2 1.292 20.3 3.64 27.3 6.82 25.758 11.699-.85 2.68.739 4.68 6.806 8.584 4.35 2.8 10.4 7.1 13.435 9.559 5.24 4.25 5.29 4.4.92 3.042-2.53-.785-8.5-3.39-13.279-5.789-4.77-2.4-9.98-4.36-11.565-4.362-1.59 0-4.72-1.18-6.961-2.615-8.83-5.66-38.1-12.2-38.115-8.447 0 1.02 1.45 1.86 3.228 1.862 7.12 0 46.5 16 46.452 18.863 0 2.15-17.2.289-22.277-2.409-1.78-.954-4.68-1.73-6.437-1.734s-4.5-1.07-6.101-2.379c-6.89-5.64-16.5-7.1-37.945-5.779-11.6.717-21.6 1.95-22.064 2.743-.91 1.47 4.08 3.28 20.305 7.335 14.3 3.58 14.7 5.95.693 4.491-7.67-.8-13.6-.533-15.907.72-2.87 1.53-4.24 1.37-5.978-.731zm43.272-21.121c.664-1.07-1.21-1.84-4.491-1.84-3.1 0-5.63.828-5.629 1.84s2.02 1.84 4.491 1.84 5-.828 5.629-1.84zm-85.252-11.04c.926-2.78 3.88-3.06 4.753-.46.422 1.26-.613 2.3-2.3 2.3s-2.79-.828-2.453-1.84zm654.73-20.183c0-1.75-2.01-2.04-7.706-1.135l-7.706 1.232 4.486-3.504c2.47-1.93 6.19-4.04 8.268-4.688s9.45-4.9 16.373-9.453 13.3-8.27 14.066-8.27c.812 0 2.28-1.44 3.269-3.205s2.37-2.62 3.082-1.916c.709.709-1.51 3.58-4.922 6.392s-11.4 10-17.711 16.007-11.5 9.84-11.5 8.537zm-465.52-36.856c0-1.01.365-1.84.811-1.84s1.32.828 1.949 1.84c.625 1.01.26 1.84-.811 1.84-1.07 0-1.95-.828-1.949-1.84zm133.66-7.078c-.692-4.33-.639-8.85.117-10.053s1.9-7.83 2.539-14.715c1.44-15.5 4.32-19.4 7-9.327 1.76 6.6 1.42 10-2.476 24.614-.405 1.52-1.9 6.04-3.329 10.053l-2.593 7.293zm-141.02-5.693c0-.952.828-2.24 1.84-2.869s1.84.154 1.84 1.731-.828 2.87-1.84 2.869-1.84-.779-1.84-1.731zm200.7-11.915c-.08-1.94.355-3.03.966-2.415s.677 2.2.145 3.527c-.587 1.47-1.02 1.03-1.112-1.112zm-16.705-8.433c0-1.01 1.29-1.84 2.869-1.84s2.36.828 1.731 1.84-1.92 1.84-2.869 1.84c-.952 0-1.73-.828-1.731-1.84zm-58.879-18.4c0-2.02.828-3.68 1.84-3.68s1.84 1.66 1.84 3.68-.828 3.68-1.84 3.68-1.84-1.66-1.84-3.68zm-133.4-5.52c-.691-2.18-.842-4.37-.336-4.877s1.48.861 2.176 3.037c.691 2.18.842 4.37.336 4.877s-1.48-.861-2.176-3.037zm12.041-8.567c-1.12-3.89-3.28-20.3-4.811-36.512s-3.44-30.7-4.247-32.136c-1.5-2.76.848-12.2 6.052-24.384 1.61-3.76 2.92-11.2 2.925-16.61s1.13-11.4 2.507-13.399c1.47-2.13 2.56-8.75 2.622-16.049.203-22 .362-23.7 2.159-22.584.973.601 2.34 4.17 3.037 7.929s5.33 19.2 10.285 34.234c9.76 29.7 11.1 40.1 3.543 28.721l-4.242-6.44 1.026 10.12c1.06 10.5.882 10.4-5.569-4.6-3.09-7.16-3.19-7.23-3.872-2.323-.383 2.77 1.07 13.8 3.233 24.451 4.05 20 4.15 29.1.181 17.072-1.36-4.11-3.16-6.45-4.551-5.917-1.57.601-3.06-2.95-4.69-11.14-1.31-6.61-3.13-12-4.03-12.022-2.23 0-2.02 58.5.268 74.334 2.07 14.4 1.2 17.8-1.827 7.257zm-13.543-1.336c-.692-1.8-1.18-5.49-1.092-8.187.155-4.58.286-4.49 1.937 1.241 1.91 6.64 1.22 12.3-.845 6.946zm89.163-42.898c-2.17-8.04-4.03-19.9-4.133-26.443l-.192-11.835-2.681 9.2c-4.57 15.7-4.16 15.2-7.961 10.14-1.92-2.54-2.78-5.38-1.943-6.428 3.02-3.79 11.2-26.2 15.102-41.434 4.57-17.8 3.78-24.8-3.105-27.956-5.85-2.67-5.83-5.16.051-5.162 6.39 0 11.3-5.6 12.847-14.525.702-4.16 1.9-7.55 2.659-7.554 1.91 0 5.65 8.59 5.654 12.966 0 2 1.25 3.59 2.825 3.593 2.4 0 2.47.618.46 4.14-1.64 2.87-2.28 11.6-2.103 28.52.144 13.4-.031 24.4-.389 24.38s-1.55-3.34-2.648-7.415c-3.49-13-5.94-6.65-4.56 11.761 1.23 16.4-1.55 50.8-4.536 56.138-.888 1.59-2.86-2.86-5.347-12.085zm119.48 2.355c-.08-1.94.355-3.03.966-2.415s.677 2.2.145 3.527c-.587 1.47-1.02 1.03-1.112-1.112zm20.095-.211c0-2.98 2.88-3.65 4.481-1.055.56.906-.219 2.12-1.731 2.702-1.67.641-2.75-.006-2.749-1.647zm218.96-9.2c0-5.09 2.69-6.09 4.403-1.632 1.5 3.92 1.5 3.91-1.643 5.115-1.99.765-2.76-.202-2.76-3.483zm-154.56 1.086c0-.952.819-2.24 1.819-2.856 1.04-.645 1.35.094.723 1.731-1.22 3.19-2.54 3.77-2.542 1.124zm-82.799-3.571c0-2.02.828-4.19 1.84-4.817s1.84.519 1.84 2.543-.828 4.19-1.84 4.817c-1.01.626-1.84-.519-1.84-2.543zm89.956-7.117c1.2-2.28 2.97-4.14 3.948-4.14 2.61 0 2.21.881-2.172 4.775-3.93 3.49-3.94 3.48-1.775-.635zm-88.06-3.628c-.067-4.93 5.77-32.1 6.693-31.176 1.1 1.1-3.29 29.5-5.014 32.494-1.29 2.19-1.64 1.92-1.679-1.318zm95.016-.794c-1.19-4.57 2.19-12 7.778-17.028 3.47-3.14 3.87-3.18 3.868-.395 0 2.98-8.55 21.4-9.936 21.384-.371 0-1.14-1.78-1.711-3.962zm131.71-4.617c-3.13-1.26-2.92-6.14.256-6.141 1.41 0 4.51 1.63 6.9 3.619l4.344 3.619-4.6-.084c-2.53-.046-5.64-.502-6.9-1.012zm-395.77-9.821c0-2.53.418-3.56.928-2.3s.51 3.34 0 4.6-.928.23-.928-2.3zm381.61-1.38c2.03-4.61 2.24-13.7.413-17.48-.954-1.96-.849-3.22.267-3.22 1.01 0 2.78 3.52 3.925 7.82s2.89 8.8 3.87 9.992c1.22 1.5.633 2.78-1.899 4.14-5.57 2.98-8.22 2.48-6.576-1.252zm-224.62-14.686c1.41-7.52 4.44-14.2 5.814-12.814 1.02 1.02-4.84 19.7-6.189 19.68-.502 0-.333-3.09.375-6.866zm-79.703-19.335c-1.17-1.17-2.14-4.87-2.135-8.207 0-4.78-.758-6.07-3.571-6.072-5.82 0-6.3-3.56-1.121-8.356 4.1-3.8 4.52-5.08 2.768-8.361-1.73-3.23-1.44-4.32 1.739-6.544 2.17-1.52 5.1-7.19 6.793-13.164 3.27-11.5 8.09-18.8 8.137-12.268.014 1.99 2.4 11.5 5.311 21.094 3.03 10 4.62 18.3 3.736 19.411-.853 1.06-2.11 5.41-2.786 9.66-.68 4.25-1.83 7.73-2.546 7.729-.721 0-2.42-3.36-3.774-7.464-2.76-8.37-4.34-7.09-6.359 5.154-1.43 8.68-3.01 10.6-6.193 7.388zm86.882-3.112c1.24-6.62 10-23.1 11.532-21.63 1.09 1.09-8.23 23.6-10.803 26.104-1.32 1.27-1.54-.126-.729-4.474z"/> + <path fill="#d0b50d" d="m435.36 825.6c-2.1-2.32-5.36-8.36-7.233-13.415-2.53-6.84-7.09-12.7-17.727-23.015-14.3-13.8-19.3-22.5-16.945-29.842 1.3-4.1 5.91-4.19 10.314-.207 4.98 4.51 5.96 1.94 3.653-9.575-2.03-10.1-12.5-30.1-15.795-30.228-.932-.029-3.19 1.3-5.013 2.951-3.11 2.81-3.44 2.69-5.19-1.921-1.03-2.71-2.36-6.89-2.968-9.289-1.05-4.2-.786-4.33 6.885-3.343 6.12.784 9.2 2.47 13.189 7.224 5.87 6.99 8.59 6.61 8.592-1.193 0-2.92.828-5.82 1.84-6.44 1.1-.679 1.88 1.69 1.932 5.871.376 28.7 1.84 38.2 9.343 60.421 4.24 12.5 8.4 22.4 9.254 21.849.853-.527 1.55-9.77 1.551-20.538 0-22.9 2.27-23.1 5.44-.443 1.2 8.6 3.47 17.6 5.041 20.059 2.19 3.4 2.57 7.12 1.656 16.07-.657 6.41-1.82 13.4-2.594 15.436-1.39 3.76-1.43 3.76-5.226-.43zm72.039-3.545c-3.72-3.26-8.98-11-11.902-17.405-2.88-6.36-7.59-15.1-10.467-19.52-5.88-8.95-6.4-9.81-18.031-29.23-11.9-19.9-22.6-23.8-21.544-7.956.281 4.17-.256 6.15-1.464 5.404-1.05-.649-1.91-3.14-1.908-5.53s-2.98-8.25-6.615-13.017c-8.86-11.6-19.9-33-18.347-35.577 2.33-3.77 4.74-2.09 10.999 7.701 5.6 8.75 12.1 16.1 12.124 13.704 0-.509-1.96-6.2-4.346-12.645s-4.94-14.2-5.66-17.239l-1.315-5.52 5.512 5.262c3.03 2.89 8.14 10.2 11.357 16.23 3.22 6.03 6.24 10.6 6.725 10.089.483-.483-.439-3.43-2.05-6.541-3.79-7.32-17.6-49.2-17.552-53.226.021-2.07 2.73-.212 8.208 5.624 6.66 7.1 9.17 11.9 13.518 25.76 2.94 9.37 8.66 24.9 12.722 34.523s8.84 22 10.632 27.6c4.62 14.4 34.5 72.5 36.364 70.631.479-.479 1.35.381 1.937 1.91 2.03 5.29-2.26 4.8-8.895-1.031zm-241.14-14.634c.343-8.51.835-15.9 1.092-16.396.258-.506 1.07 5.29 1.811 12.88 1.01 10.4.746 14.4-1.092 16.396-2.03 2.16-2.33.021-1.811-12.88zm17.948 10.835c-1.21-1.21-2.21-3.7-2.208-5.52s-1.24-3.31-2.76-3.312c-3.79 0-3.52-1.6 2.299-14.038 4.69-10 5.1-10.4 5.67-5.456.336 2.94 2.41 6.81 4.601 8.602 3.9 3.18 4.14 3.1 10.436-3.506 3.55-3.72 7.75-8.83 9.344-11.361 4.51-7.16 13.9-31 17.017-43.24 2.99-11.7 10.2-29.3 11.511-28.055.424.424-.851 5.48-2.833 11.245s-5.77 19.3-8.414 30.058c-6.9 28.1-20.6 53.4-33.744 62.292-7.62 5.18-7.96 5.25-10.919 2.291zm317.95-17.533c1.52-.578 3.34-1.94 4.04-3.021 1.65-2.55 4.08-.195 2.476 2.4-.667 1.08-3.03 1.9-5.244 1.817-2.74-.099-3.15-.481-1.271-1.196zm-430.56-24.189c0-1.9-.518-6.04-1.15-9.2-1.32-6.62 1.92-8.02 3.726-1.61 1.16 4.11 1.19 4.11 4.085.46 2.84-3.58 2.88-3.55 1.564.92-2.75 9.32-4.5 12.9-6.339 12.88-1.04 0-1.89-1.55-1.886-3.45zm-57.653-40.096c-2.1-2.1-1.3-14 1.53-22.693l2.701-8.28-1.08 8.618c-1.01 8.08-.84 8.56 2.791 7.605 2.31-.605 3.87-.142 3.871 1.151 0 1.19.828 1.65 1.84 1.026 3.66-2.26 1.73 4.18-2.672 8.931-4.59 4.95-6.78 5.84-8.981 3.642zm379.05-21.23c-3.71-5.36-12.1-17.5-18.684-27.028s-14.5-24-17.704-32.2c-8.76-22.6-17.2-55.8-17.273-68.274-.056-6.07-.73-12-1.498-13.259-2.38-3.79-6.56-.517-7.153 5.596-.588 6.06-.463 6.02-12.486 4.543-3.69-.452-5.67 1.13-10.345 8.26-4.95 7.55-5.92 8.28-6.766 5.06-1.75-6.69-6.08-4.18-16.967 9.86-2.02 2.61-4.82 4.75-6.205 4.762-1.87.014-2.01-.603-.525-2.391 1.44-1.74 1.42-4.3-.083-9.2-1.62-5.26-3.04-6.79-6.333-6.79-2.5 0-5.49-1.89-7.263-4.6-3.28-5-7.3-5.73-14.236-2.568-3.57 1.63-5.44 1.39-9.362-1.181-4.11-2.69-5.7-2.85-9.813-.976-4.2 1.91-5.26 1.76-7.285-1.011-1.31-1.79-2.38-4.2-2.375-5.371 0-3.06-5.67-7.54-11.214-8.85-3.62-.857-5.81-.025-9.061 3.433-5.54 5.9-6.55 5.76-8.991-1.248-2.36-6.78-8.02-11.3-15.792-12.589-4.14-.69-6.32-2.62-8.706-7.691-1.75-3.72-5.96-8.88-9.342-11.468s-7.21-6.66-8.487-9.049-5.15-5.46-8.608-6.815c-3.89-1.53-6.28-3.72-6.279-5.758 0-1.81-2.13-4.69-4.736-6.397-3.1-2.03-4.43-4.27-3.858-6.461 1.38-5.27-5.51-12.6-11.837-12.601-6.97 0-8.77-4.46-3.951-9.754 10.8-11.8 9.87-19.9-2.815-25.553-4.78-2.12-11.5-4.36-14.971-4.977-9.26-1.66-9.14-5.25.246-7.617 5.06-1.28 11.3-5 16.808-10.086 7.96-7.31 8.58-8.45 6.585-12.176-2.29-4.27-.826-6.3 8.517-11.832 3.17-1.87 3.16-2.32-.242-10.724-1.95-4.82-4.99-9.56-6.765-10.529s-3.22-2.97-3.22-4.456c0-2.04 2.47-2.7 10.178-2.695 8.09 0 10.4-.662 11.174-3.22.548-1.77 1.75-4.64 2.672-6.367.922-1.73 1.24-4.29.702-5.685s.227-3.54 1.695-4.753c2.3-1.91 2.02-3.37-1.967-10.51-2.55-4.56-4.09-8.84-3.415-9.517s6.23.084 12.35 1.678c8.56 2.23 12.2 2.43 15.728.857 4.39-1.95 4.55-2.58 3.6-14.002-.55-6.58-3.11-18.1-5.698-25.622-5.34-15.5-5.52-16.7-2.565-16.698 1.89 0 9.52 6.57 30.699 26.43l6.153 5.769 3.047-4.496c1.68-2.47 5.71-7.32 8.963-10.77s6.42-7.84 7.024-9.764c1.69-5.34 7.97-4.24 11.525 2.018 3.86 6.78 5.24 6.85 11.808.555 5.08-4.87 5.31-4.91 10.504-1.84 6.58 3.88 7.5 3.9 7.502.162 0-2.08 1.12-2.68 3.739-1.997 5.24 1.37 9.2-8.26 6.885-16.758-.912-3.35-1.34-7.03-.958-8.188 1-3.02 11.7 17.5 13.188 25.189 1.89 10.1 5.95 11 15.156 3.471 7.55-6.19 13-6.78 10.881-1.184-1.46 3.81 2.15 9.8 5.913 9.793 1.74-.005 6.88-2.48 11.435-5.512 12.6-8.35 18.3-6.51 12.688 4.039-1.7 3.17-1.29 4.44 2.467 7.699 2.47 2.15 5.82 6.07 7.433 8.717 3.12 5.11 9.79 7.99 11.63 5.017.606-.981-.221-3.24-1.838-5.032s-2.94-4.24-2.94-5.45c0-2.77 7.75-5.79 14.84-5.79 6.25 0 6.76 2.38 2.64 12.244-5.62 13.4-1.85 17.8 10.153 11.659 15-7.68 16.9-3.32 4.14 9.651-7.31 7.42-8.37 9.35-6.611 12.023 1.15 1.75 3.21 2.83 4.567 2.397 1.36-.433 5.99-1.14 10.291-1.565 6.7-.667 7.82-.284 7.82 2.677 0 3.37-3.89 10.1-8.665 14.986-3.35 3.43-3 12.6.535 13.932 1.6.614 6.98 1.12 11.96 1.117 11.3 0 12.3 3.97 1.767 7.119-4 1.2-7.65 2.78-8.091 3.511-.444.731-1.1 6.3-1.457 12.369-.467 7.95-.024 10.9 1.585 10.602 2.33-.457 1.68 2.32-2.394 10.219-2.72 5.27.045 11.6 8.564 19.531 3.17 2.97 7.64 8.35 9.926 11.96 2.29 3.61 9.15 11.7 15.251 18.068 6.1 6.32 10.5 11.5 9.826 11.5-1.38 0-11.6-6.64-24.894-16.218-9.48-6.82-16.6-7.26-20.462-1.262-2.04 3.17-1.42 5.98 4.547 20.418 3.8 9.21 9.92 21.7 13.583 27.719 7.91 13 31.2 36.9 45.458 46.578 9.65 6.55 41.3 23.3 51.943 27.411 3.28 1.28 4.66 2.9 3.99 4.657-.616 1.6 2.19 6.21 6.936 11.388l7.97 8.694-5.52-1.355c-3.04-.745-6.76-2.42-8.28-3.733-2.69-2.32-31.5-15.7-33.812-15.736-.632 0-8.81-5.33-18.168-11.846-26.8-18.7-42.1-34.9-56.408-59.618-9-15.6-16.8-23.4-21.576-21.616-2.19.839-2.66 2.8-1.924 7.996 1.71 12.1 6.67 36.1 8.601 41.682 1.03 2.95 1.43 5.8.893 6.33-1.9 1.9-6.62-4.77-10.974-15.51-4.4-10.9-8.68-15.7-11.407-13.014-.789.789 0 3.93 1.752 6.984 4.63 8.07 4.17 12.6-1.283 12.612-2.46 0-5.71-1.24-7.229-2.76-3.46-3.46-6.83-3.5-11.411-.147-3.27 2.39-3.52 4.55-2.93 25.3.607 21.4 1.14 24.2 9.749 50.094 5.01 15.1 12.1 33.3 15.835 40.48 6.56 12.7 21.5 33.9 28.325 40.035 3 2.7 3.11 3.69.949 8.823l-2.43 5.779zm-222.03-2.274c0-1.46.828-3.16 1.84-3.789 1.01-.625 1.84.568 1.84 2.651 0 2.08-.828 3.79-1.84 3.789s-1.84-1.19-1.84-2.651zm417.68-4.142c-8.9-1.49-17.5-4.77-20.374-7.745-1.59-1.66-8.42-6.67-15.18-11.145-6.76-4.48-12.3-9.22-12.285-10.546s.351-2.41.781-2.41 10.4 5.49 22.152 12.195 21.8 11.8 22.245 11.321-.888-3.11-3.042-5.852-3.52-5.37-3.041-5.852c2.23-2.23 10.3 3.26 14.818 10.044 7.43 11.2 6.86 12.2-6.073 9.991zm-33.12-11.607c-1.52-.981-1.93-1.78-.92-1.784s3.08.803 4.6 1.784 1.93 1.78.92 1.784-3.08-.803-4.6-1.784zm-616.39-2.537c0-1.04 12.2-21.6 15.891-26.787 2.38-3.34 3.42-3.81 4.05-1.84.468 1.45 1.67 3.18 2.675 3.834 1.09.712.123 3.67-2.409 7.36-6.6 9.62-20.2 21.4-20.208 17.433zm603.51-2.063c0-3.48 2-3.5 6.548-.059 3.42 2.59 3.36 2.7-1.488 2.76-3.3.038-5.06-.903-5.06-2.702zm-411.72-6.473c2.29-4.01 4.79-7.3 5.548-7.313 2.32-.024 1.54 3.08-1.38 5.506-1.52 1.26-2.76 3.34-2.76 4.628s-1.26 2.82-2.788 3.408c-2.08.798-1.73-.785 1.38-6.229zm-165.88-9.688c.422-.286 2.42-1.74 4.447-3.22 3.4-2.5 3.49-2.46 1.155.521-1.39 1.77-3.39 3.22-4.447 3.22s-1.58-.234-1.155-.521zm121.37-1.779c.046-1.26 2.14-6.03 4.65-10.58l4.567-8.28-1.204 6.44c-1.73 9.24-4.04 14.7-6.21 14.72-1.04 0-1.85-1.04-1.802-2.3zm-112.32-4.062c0-.886 23.1-19.5 27.323-22.035 2.01-1.2 2.09-.745.395 2.415-1.15 2.15-2.72 3.9-3.489 3.902s-3.02 1.24-4.995 2.755-6.81 5.24-10.747 8.28c-7.15 5.53-8.49 6.26-8.487 4.684zm182.19-.538c.016-.759.831-2.62 1.812-4.14 1.44-2.23 1.79-1.97 1.812 1.38.016 2.28-.8 4.14-1.812 4.14s-1.83-.621-1.812-1.38zm287.93-19.275c-13.6-16-27.4-34.4-30.249-40.246-1.19-2.43 1.37-.278 5.685 4.782 8.76 10.3 29.2 30.8 37.543 37.552 3.39 2.77 4.56 4.73 3.121 5.213-1.26.429-2.3 1.95-2.3 3.387 0 4.56-2.5 2.63-13.8-10.689zm-425.96-3.973c0-.39 2.28-2.17 5.06-3.965l5.06-3.256-3.505 3.965c-3.1 3.51-6.62 5.24-6.615 3.256zm21.381-4.136c.934-5.02.451-5.97-3.744-7.37l-4.817-1.606 4.17-7.701c2.29-4.24 5.95-10.9 8.126-14.737 4.42-7.87 35.6-41.7 37.019-40.219.517.517-2.69 5.72-7.124 11.569-18.8 24.7-30.5 47-28.62 54.243.477 1.82-.696 5.18-2.607 7.452l-3.475 4.133zm227.84-11.038c-3.44-15.2-7.46-23.7-11.477-24.266-2.88-.415-4.6.676-5.801 3.68-1.68 4.19-1.71 4.19-1.829.28-.064-2.19-.674-5.44-1.356-7.219-.956-2.49-.534-2.96 1.84-2.048 2.32.891 3.08.154 3.079-2.993 0-2.3-.994-5.17-2.208-6.382-1.72-1.72-1.3-2.21 1.863-2.208 3.16 0 5.06 2.23 8.457 9.918 2.41 5.46 4.95 12.5 5.643 15.64 1.15 5.25 4.64 8.17 4.644 3.882 0-1.01.721-1.84 1.602-1.84 1.53 0-.668 16.2-2.435 18.006-.456.456-1.37-1.55-2.024-4.449zm-216.99-2.057c4.08-6.43 10.5-13.5 11.408-12.633 1.18 1.18-10.7 17.7-12.702 17.693-1.06 0-.474-2.28 1.294-5.06zm200.77-1.108c-.771-3.9-.974-7.52-.452-8.037 1.39-1.39 3.41 7.83 2.574 11.759-.435 2.03-1.28.554-2.122-3.723zm-332.54-29.587c-.438-.438-7.82-2.56-16.406-4.716-20.9-5.25-20.3-4.98-19.008-8.363.843-2.2 3.12-2.84 8.709-2.48 29.6 1.93 77.7-11.5 81.293-22.683.656-2.07 2.86-3.28 5.937-3.282 3.64 0 8.55-3.63 19.196-14.217l14.301-14.217v5.89c0 4.63-1.14 6.48-5.301 8.631-2.92 1.51-7.3 5.11-9.737 8.013-4.8 5.7-27.7 21.3-35.804 24.392-2.74 1.04-5.87 2.98-6.967 4.303-5.23 6.34-37.2 11-51.15 7.531-2.69-.674-5.25-.327-5.947.805-.676 1.09-.146 2.12 1.179 2.277 9.47 1.13 16.4 1.41 39.046 1.542 25.9.153 29.3 1.48 13.608 5.28-8.34 2.02-31.3 2.92-32.947 1.295zm-58.932-37.223c-1.95-2.36-2-3.23-.25-3.825 1.25-.421 6.2-4.01 11.006-7.981 8.42-6.96 11.6-8.58 11.558-5.98 0 .679-1.37 2.75-3.045 4.6-2.85 3.15-2.82 3.36.46 3.3 1.93-.036 8.89-1.25 15.465-2.695s14.4-2.62 17.48-2.61c5.24.02 5.05.277-3.68 4.995l-9.2 4.974 8.28.687c7.47.62 6.48 1.01-10.12 4.022-23.9 4.34-34.7 4.48-37.954.511zm71.493-5.629c3.27-.406 9.06-.413 12.88-.015s1.14.731-5.939.739c-7.08.009-10.2-.318-6.941-.724zm630.05-13.618c-10.7-1.78-18.8-5.13-12.588-5.238 1.83-.031 2.82-.884 2.191-1.896-1.5-2.42 5.06-2.36 10.46.1 18.8 8.58 18.8 10.2-.064 7.033zm-651.63-87.637c0-1.99 12.3-7.09 21.62-8.929 7.96-1.58 7.56.234-1.006 4.604-8.45 4.31-20.6 6.86-20.614 4.326zm29.939-14.79c1.79-.759 4.95-4.16 7.015-7.557 3.65-6 4.01-6.14 12.381-4.845 23.6 3.65 84 4.83 104.3 2.046l9.2-1.263-9.889 3.721c-5.44 2.05-16.2 4.52-23.92 5.493-17.4 2.2-104 4.29-99.09 2.406zm461.97-10.584c-.599-1.56-.633-3.3-.074-3.855 1.95-1.95 12.3 1.49 12.319 4.081 0 3.67-10.8 3.47-12.245-.226zm115.4-14.41c6.64-2.24 17-5.18 23-6.518s20.1-4.82 31.319-7.737 22.8-5.31 25.76-5.337c2.95-.022 9.01-1.69 13.461-3.713 4.45-2.02 8.38-3.38 8.739-3.027s-2.75 3.37-6.896 6.705c-6.44 5.18-11.1 6.78-31.739 10.995-13.3 2.71-27.7 6.75-31.945 8.967-6.51 3.39-10.6 4.01-25.76 3.886l-18.013-.146 12.073-4.077zm-602.71-2.456c-3.04-1.65-14.6-6.62-25.667-11.055-21.7-8.68-34.1-15-34.133-17.419 0-2.1 5.07-1.88 6.408.287 1.19 1.93 8.4 5.39 36.581 17.589 9.98 4.32 19.5 9.18 21.094 10.798 3.66 3.66 2.75 3.62-4.283-.2zm668.83-26.295c-2.23-1.44-1.97-1.79 1.38-1.812 2.28-.016 4.14.8 4.14 1.812 0 2.3-1.95 2.3-5.52 0zm12.88.009c-2.11-1.37-1.42-1.8 2.945-1.821 3.14-.016 8.36-.952 11.594-2.081s6.34-1.6 6.9-1.041c.557.557-2.44 1.94-6.649 3.075s-8.64 2.42-9.846 2.862c-1.2.439-3.43-.007-4.945-.994zm-83.361-14.999c-2.62-1.48-2.87-2.42-1.155-4.478 2.27-2.73 7.33-3.61 7.107-1.232-.493 5.26-2.81 7.48-5.953 5.71zm-520.19-17.248c-1.24-1.5-3.05-2.72-4.021-2.721-.97 0-6.13-2.9-11.465-6.44-7.65-5.08-11.6-6.46-18.712-6.558-4.96-.065-14-1.2-20.049-2.534l-11.04-2.415 5.52-2.281c3.04-1.26 16.1-2.95 28.947-3.777s24.1-1.92 24.954-2.44 9.76-2.29 19.813-3.936c21.9-3.58 51.4-4.42 54.256-1.544 1.47 1.47.724 2.34-2.705 3.205-2.6.652-4.52 2.19-4.275 3.427.301 1.5-4.26 2.78-13.811 3.867-15.6 1.77-19.3 4.87-5.871 4.867 4.61 0 7.93.745 7.366 1.654-.562.91-11.4 2.25-24.058 2.983-12.7.731-23.4 1.99-23.943 2.797-.928 1.5 6.41 4.24 17.045 6.375 9.28 1.86 9.01 4.59-.451 4.59-4.68 0-10 .811-11.875 1.801-2.44 1.31-3.98 1.06-5.624-.92zm-41.981-32.161c.926-2.78 3.88-3.06 4.753-.46.422 1.26-.613 2.3-2.3 2.3s-2.79-.828-2.453-1.84zm141.33-15.67c-3.56-1.3-9.71-4.27-13.654-6.593-3.99-2.35-9.58-4.05-12.592-3.819-4.23.322-5.18-.213-4.325-2.441.618-1.61-2.9-10.5-8.066-20.312-5.04-9.6-9.16-18.7-9.161-20.137s-2.48-4.51-5.52-6.759-5.52-5.08-5.52-6.306c0-2.08-3.66-6.87-23.46-30.693-6.12-7.36-7.82-10.9-7.82-16.269 0-3.77-.505-8.18-1.123-9.786-2.51-6.54 6.83.321 19.869 14.593 7.4 8.1 16.6 18 20.345 22.08 3.79 4.04 6.9 7.91 6.9 8.585.018 2.53 48.8 42 57.048 46.097 14.4 7.24 23.5 17.1 21.292 22.907-.691 1.8-2.13 1.94-5.741.568-5.74-2.18-8.19-1.04-8.191 3.822 0 2.58-1.27 3.57-4.6 3.571-2.53 0-4.6.828-4.6 1.84 0 2.3-2.82 2.06-11.082-.95zm513.4-4.513c0-1.75-2.01-2.04-7.706-1.135l-7.706 1.232 4.486-3.504c2.47-1.93 6.19-4.04 8.268-4.688s9.45-4.9 16.373-9.453 13.3-8.27 14.066-8.27c.812 0 2.28-1.44 3.269-3.205s2.37-2.62 3.082-1.916c.709.709-1.51 3.58-4.922 6.392s-11.4 10-17.711 16.007-11.5 9.84-11.5 8.537zm-480.99-24.896c-1.66-2.53-2.72-4.6-2.372-4.6s2.59 2.07 4.963 4.6 3.44 4.6 2.372 4.6-3.3-2.07-4.963-4.6zm8.111-24.731c0-.952.828-2.24 1.84-2.869s1.84.154 1.84 1.731-.828 2.87-1.84 2.869-1.84-.779-1.84-1.731zm-8.28-44.268c-.691-2.18-.842-4.37-.336-4.877s1.48.861 2.176 3.037c.691 2.18.842 4.37.336 4.877s-1.48-.861-2.176-3.037zm12.041-8.567c-1.12-3.89-3.28-20.3-4.811-36.512s-3.44-30.7-4.247-32.136c-1.5-2.76.848-12.2 6.052-24.384 1.61-3.76 2.92-11.2 2.925-16.61s1.13-11.4 2.507-13.399c1.47-2.13 2.56-8.75 2.622-16.049.203-22 .362-23.7 2.159-22.584.973.601 2.34 4.17 3.037 7.929.698 3.76 5.33 19.2 10.285 34.234 9.76 29.7 11.1 40.1 3.543 28.721l-4.242-6.44 1.026 10.12c1.06 10.5.882 10.4-5.569-4.6-3.09-7.16-3.19-7.23-3.872-2.323-.383 2.77 1.07 13.8 3.233 24.451 4.05 20 4.15 29.1.181 17.072-1.36-4.11-3.16-6.45-4.551-5.917-1.57.601-3.06-2.95-4.69-11.14-1.31-6.61-3.13-12-4.03-12.022-2.23 0-2.02 58.5.268 74.334 2.08 14.4 1.2 17.8-1.827 7.257zm-13.543-1.336c-.692-1.8-1.18-5.49-1.092-8.187.155-4.58.286-4.49 1.937 1.241 1.91 6.64 1.22 12.3-.845 6.946zm89.163-42.898c-2.17-8.04-4.03-19.9-4.133-26.443l-.192-11.835-2.681 9.2c-4.57 15.7-4.16 15.2-7.961 10.14-1.92-2.54-2.78-5.38-1.943-6.428 3.02-3.79 11.2-26.2 15.102-41.434 4.57-17.8 3.78-24.8-3.105-27.956-5.85-2.67-5.83-5.16.051-5.162 6.39 0 11.3-5.6 12.847-14.525.702-4.16 1.9-7.56 2.659-7.555 1.91 0 5.65 8.59 5.654 12.966 0 2 1.25 3.59 2.825 3.593 2.4 0 2.47.618.46 4.14-1.64 2.87-2.28 11.6-2.103 28.52.144 13.4-.031 24.4-.389 24.38s-1.55-3.34-2.648-7.415c-3.49-13-5.94-6.65-4.56 11.761 1.23 16.4-1.55 50.8-4.536 56.138-.888 1.59-2.86-2.86-5.347-12.085zm119.48 2.355c-.08-1.94.355-3.03.966-2.415.611.612.677 2.2.145 3.527-.587 1.47-1.02 1.03-1.112-1.112zm20.095-.211c0-2.98 2.88-3.65 4.481-1.055.56.906-.219 2.12-1.731 2.702-1.67.641-2.75-.006-2.749-1.647zm218.96-9.2c0-5.09 2.69-6.09 4.403-1.632 1.5 3.92 1.5 3.91-1.643 5.115-1.99.765-2.76-.202-2.76-3.483zm-154.56 1.086c0-.952.819-2.24 1.819-2.856 1.04-.645 1.35.094.723 1.731-1.22 3.19-2.54 3.77-2.542 1.124zm-82.799-3.571c0-2.02.828-4.19 1.84-4.817 1.01-.626 1.84.519 1.84 2.543s-.828 4.19-1.84 4.817c-1.01.626-1.84-.519-1.84-2.543zm89.956-7.117c1.2-2.28 2.97-4.14 3.948-4.14 2.61 0 2.21.881-2.172 4.775-3.93 3.49-3.94 3.48-1.775-.635zm-88.06-3.628c-.067-4.93 5.77-32.1 6.693-31.176 1.1 1.1-3.29 29.5-5.014 32.494-1.29 2.19-1.64 1.92-1.679-1.318zm95.016-.794c-1.19-4.57 2.19-12 7.778-17.028 3.47-3.14 3.87-3.18 3.868-.395 0 2.98-8.55 21.4-9.936 21.384-.371 0-1.14-1.78-1.711-3.962zm131.71-4.617c-3.13-1.26-2.92-6.14.256-6.141 1.41 0 4.51 1.63 6.9 3.619l4.344 3.619-4.6-.084c-2.53-.046-5.64-.502-6.9-1.012zm-395.77-9.821c0-2.53.418-3.56.928-2.3s.51 3.34 0 4.6-.928.23-.928-2.3zm381.61-1.38c2.03-4.61 2.24-13.7.413-17.48-.954-1.96-.849-3.22.267-3.22 1.01 0 2.78 3.52 3.925 7.82s2.89 8.8 3.87 9.992c1.22 1.5.633 2.78-1.899 4.14-5.57 2.98-8.22 2.48-6.576-1.252zm-224.62-14.686c1.41-7.52 4.44-14.2 5.814-12.814 1.02 1.02-4.84 19.7-6.189 19.68-.502 0-.333-3.09.375-6.866zm-79.703-19.335c-1.17-1.17-2.14-4.87-2.135-8.207 0-4.78-.758-6.07-3.571-6.072-5.82 0-6.3-3.56-1.121-8.356 4.1-3.8 4.52-5.08 2.768-8.361-1.73-3.23-1.44-4.32 1.739-6.544 2.17-1.52 5.1-7.19 6.793-13.164 3.27-11.5 8.09-18.8 8.137-12.268.014 1.99 2.4 11.5 5.311 21.094 3.03 10 4.62 18.3 3.736 19.411-.853 1.06-2.11 5.41-2.786 9.66-.68 4.25-1.83 7.73-2.546 7.729-.721 0-2.42-3.36-3.774-7.464-2.76-8.37-4.34-7.09-6.359 5.154-1.43 8.68-3.01 10.6-6.193 7.388zm86.882-3.112c1.24-6.62 10-23.1 11.532-21.63 1.09 1.09-8.23 23.6-10.803 26.104-1.32 1.27-1.54-.126-.729-4.474z"/> + <path fill="#d18b0d" d="m436.03 826.41c-3.41-3.76-4.23-16.1-1.371-20.609 1.51-2.38 1.82-2.38 2.632 0 3.13 9.22 4.4 17.3 3.229 20.431-1.32 3.57-1.42 3.57-4.49.177zm-151.11-7.533c-.793-1.28-.944-2.83-.337-3.436 1.65-1.65 3.44.775 2.553 3.443-.623 1.87-1.06 1.87-2.216-.007zm126.87-28.411c-4.87-4.8-8.32-9.28-7.654-9.943s2.19-.227 3.385.97c2.98 2.98 5.12 2.73 5.121-.583 0-5.46 3.44-2.6 6.486 5.385 4.86 12.7 2.63 14-7.338 4.171zm75.795-3.416c-4.67-7.64-10.5-18.3-10.544-19.125 0-.448.816-.815 1.814-.815 2.07 0 13.6 22 12.254 23.346-.491.491-2.08-1.04-3.524-3.406zm-16.799-38.59c-2.69-6.21-4.48-11.7-3.967-12.22.899-.899 6.48 10.9 9.16 19.371 2.53 7.98-.344 4.03-5.193-7.151zm-33.304-13.679c-8.08-12.1-17.4-29-17.428-31.61-.092-4.1 2.75-2.44 6.296 3.68 4.35 7.52 17.8 23.9 18.789 22.856.413-.413-.032-4.23-.988-8.489-1.66-7.38-1.59-7.6 1.575-4.74 3.1 2.8 14.8 23.1 14.756 25.638 0 .643-2.63-.191-5.847-1.854-5.38-2.78-6.02-2.79-8.023-.047-1.2 1.64-2.5 2.95-2.893 2.909-.395-.037-3.2-3.79-6.237-8.343zm-32.966-1.973c-.638-1.66-.782-3.4-.319-3.864 1.46-1.46 4.77 1.47 4.766 4.236 0 3.61-3.02 3.36-4.446-.372zm-23.839-14.178c-.626-2.5-1.6-5.75-2.171-7.226-.873-2.28-.023-2.37 5.512-.641 3.6 1.13 6.54 2.53 6.544 3.117s-1.97 2.92-4.373 5.178l-4.373 4.109zm110.1-10.051c-25.5-34.6-31.8-46.7-42.327-80.874-10.5-34.1-10.6-34.8-9.45-43.402.758-5.53.375-8.82-1.179-10.11-3.35-2.78-6.36-.158-7.073 6.165-.648 5.71-.613 5.7-12.548 4.233-3.69-.452-5.67 1.13-10.345 8.26-4.95 7.55-5.92 8.28-6.766 5.06-1.43-5.47-4.62-4.64-11.634 3.013-3.41 3.72-6.52 6.42-6.914 5.98s-2.08-3.48-3.753-6.772c-2.18-4.29-4.31-5.98-7.552-5.98-2.78 0-5.67-1.76-7.524-4.6-3.28-5-7.3-5.73-14.236-2.568-3.57 1.63-5.44 1.39-9.362-1.181-4.11-2.69-5.7-2.85-9.813-.976-4.2 1.91-5.26 1.76-7.285-1.011-1.31-1.79-2.38-4.2-2.375-5.371 0-3.06-5.67-7.54-11.214-8.85-3.62-.857-5.81-.025-9.061 3.433-5.54 5.9-6.55 5.76-8.991-1.248-2.36-6.78-8.02-11.3-15.792-12.589-4.14-.69-6.32-2.62-8.706-7.691-1.75-3.72-5.96-8.88-9.342-11.468s-7.21-6.66-8.487-9.049-5.15-5.46-8.608-6.815c-3.89-1.53-6.28-3.72-6.279-5.758 0-1.81-2.13-4.69-4.736-6.397-3.02-1.98-4.43-4.28-3.883-6.363 1.21-4.63-3.45-10.5-10.824-13.551-7.54-3.15-7.69-4.31-1.717-13.122 2.53-3.73 4.6-8.43 4.6-10.444 0-5.29-11.1-14.9-20.282-17.695-5.84-1.75-7.24-2.81-5.321-4.021 1.43-.906 4.44-1.66 6.678-1.676 2.32-.016 5.02-1.81 6.286-4.168 1.22-2.28 4.61-6.38 7.533-9.119 4.66-4.36 5.05-5.49 3.129-9.077-2.28-4.26-.81-6.29 8.524-11.819 3.17-1.87 3.16-2.32-.242-10.724-1.95-4.82-4.99-9.56-6.765-10.529s-3.22-2.97-3.22-4.456c0-2.04 2.47-2.7 10.178-2.695 8.09 0 10.4-.662 11.174-3.22.548-1.77 1.75-4.64 2.672-6.367.922-1.73 1.24-4.29.702-5.685s.256-3.56 1.759-4.806c2.38-1.98 2.14-3.33-1.904-10.574-2.55-4.57-4.16-8.78-3.573-9.369s5.92.288 11.867 1.94c8.79 2.44 11.7 2.59 15.629.763 4.56-2.12 4.83-2.98 4.841-15.727.011-10.2-1.13-16.4-4.763-25.429-2.63-6.57-4.3-12.4-3.708-13.012.588-.588 5.19 2.78 10.219 7.489s9.92 8.56 10.85 8.558c2.78 0 13.2 11.5 13.205 14.609.016 1.58.88 4.11 1.922 5.631 1.5 2.18 1.79 1.8 1.397-1.871-.55-5.12 6.22-17.4 10.493-19.049 1.5-.575 4.12-3.97 5.824-7.543 3.85-8.06 8.84-8.44 13.082-.988 3.82 6.72 5.83 6.88 11.414.932 5.12-5.45 6.86-5.61 12.638-1.166 3.72 2.86 4.05 3.93 2.235 7.319-1.36 2.55-1.45 3.97-.24 3.967 1.04 0 2.42-3.37 3.082-7.495 1.04-6.49 1.72-7.36 5.114-6.512 3.18.797 4.27-.159 5.806-5.057 1.14-3.64 1.27-8.43.331-12.058-2.73-10.5-.273-10.6 5.174-.158 5.91 11.3 10.3 24.6 10.146 30.82-.117 5.74 2.2 5.17 5.032-1.228 2.77-6.25 14.2-15.6 17.008-13.899 1.05.647 1.4 2.77.782 4.711-.69 2.17.345 5.4 2.685 8.373 2.09 2.66 3.81 4.06 3.807 3.116 0-2.54 23.4-14.6 25.087-12.939.785.785.433 4.06-.781 7.275-2.01 5.32-1.81 6.19 2.225 9.59 2.44 2.06 4.95 5.54 5.586 7.728.635 2.19 3.4 4.8 6.139 5.792s6.53 2.43 8.417 3.192c2.95 1.19 3.24.779 2.063-2.929-.753-2.37-3.13-5.75-5.272-7.508-5.1-4.17-2.69-6.47 8.517-8.111 10.3-1.5 10.7-.315 5.145 12.739-3.22 7.52-3.3 8.68-.789 11.192 3.45 3.45 2.4 3.52 12.663-.874 4.72-2.02 9.34-3.68 10.272-3.68 4.06 0 1.02 5.64-7.151 13.284-6.81 6.37-8.53 9.07-7.491 11.752.741 1.92 1.84 5.76 2.434 8.544s1.99 5.06 3.088 5.06 1.5-1.3.892-2.893c-2.16-5.64 2.18-9.99 9.981-9.987 5.97 0 7.3.642 7.295 3.538 0 1.95-2.48 6.02-5.52 9.058-4.33 4.33-5.52 7.14-5.52 13.021v7.502h11.96c9.07 0 12 .627 11.96 2.598 0 1.6-2.83 3.08-7.35 3.84-4.04.683-7.68 1.79-8.083 2.462s-1.03 6.6-1.39 13.18c-.477 8.68-.044 11.8 1.576 11.522 2.33-.457 1.68 2.32-2.394 10.219-2.71 5.25.041 11.6 8.443 19.416 3.11 2.9 6.97 7.87 8.588 11.04 1.62 3.17 6.22 9.34 10.221 13.722s6.8 8.44 6.217 9.023-5.97-2.38-11.959-6.58c-12.1-8.47-18.8-9.6-22.886-3.84-2.38 3.4-2.12 5.34 2.525 18.475 14 39.7 47.8 76.4 87.063 94.747 5.21 2.43 12.4 6.07 15.877 8.093s7.43 3.68 8.675 3.681 3.22 1.86 4.394 4.14c1.17 2.28 4.25 6.42 6.849 9.2s4.07 5.06 3.275 5.06-9.1-3.73-18.467-8.28-17.9-8.28-18.964-8.28c-2.75 0-38.7-24.2-46.791-31.592-11.5-10.4-25.4-27.6-33.213-41.087-7.41-12.8-14.9-21-19.407-21.094-3.61-.101-5.63 7.49-3.647 13.717.97 3.04 2.86 11.3 4.191 18.417 1.34 7.08 3.35 15.3 4.473 18.195s1.59 5.77 1.03 6.33c-1.94 1.94-6.63-4.64-11.017-15.467-4.4-10.9-8.68-15.7-11.407-13.014-.789.789 0 3.93 1.752 6.984 4.63 8.07 4.17 12.6-1.283 12.612-2.46 0-5.71-1.24-7.229-2.76-3.45-3.45-6.68-3.49-11.462-.142-3.45 2.42-3.7 4.3-3.255 24.38.424 19.1 1.39 24.9 7.917 47.521 9.35 32.4 20.1 54.6 35.707 74.098 6.73 8.37 12.2 16 12.23 16.911 0 5.08-3.95 2.2-12.025-8.782zm.985-309.36c0-.952-.828-2.24-1.84-2.869s-1.84.154-1.84 1.731.828 2.87 1.84 2.869 1.84-.779 1.84-1.731zm-38.272-53.836c-1.18-1.18-2.76-1.54-3.504-.789s-.163 2.1 1.296 2.997c3.44 2.12 4.99.572 2.208-2.208zm98.157 309.57c-5.91-6.17-4.44-7.46 2.457-2.158 2.41 1.85 4.05 4.36 3.65 5.569-.44 1.32-2.88-.044-6.107-3.411zm-416.29-19.677c-3.03-1.23-.827-6.48 9.22-21.962 7.53-11.6 17.8-23.4 17.828-20.438 0 .667-2.48 5.25-5.517 10.179-3.03 4.93-8.01 14.5-11.058 21.187-5.48 12.1-6.15 12.8-10.473 11.034zm220.71-27.919c-3.22-.458-4.14-1.79-4.14-5.981 0-6.58 2.59-6.92 6.571-.851 3.67 5.6 2.96 7.6-2.431 6.832zm-311.42-170.04c0-1.34 1.21-4.16 2.687-6.265 2.58-3.69 3.22-3.74 16.233-1.481 7.45 1.3 29.2 3 48.372 3.792 42.5 1.75 34.2 3.38-26.353 5.173-33.3.984-40.9.756-40.94-1.219zm457.14-7.088c-.68-1.1-.337-2.9.762-3.998 2.31-2.31 11.3.966 11.297 4.119 0 2.52-10.5 2.41-12.059-.121zm-464.15-94.428c-5.38-1.14-9.17-2.69-8.433-3.426 1.67-1.67 43.8-1.8 45.488-.134.666.666.289 2.32-.839 3.68-2.49 3-21.9 2.94-36.216-.12zm122.81-55.294c-4.52-2.96-8.11-7.74-11.5-15.302-2.71-6.05-4.93-11.9-4.934-13.01s-2.48-3.85-5.52-6.096-5.52-5.08-5.52-6.306c0-2.08-3.66-6.87-23.46-30.693-4.3-5.18-7.8-10.3-7.766-11.36.059-2.13 4.69 2.88 20.186 21.822 5.57 6.8 15.3 18.6 21.658 26.187 9.61 11.5 19.5 25.2 26.817 36.98 2.25 3.65-2.69 2.54-9.962-2.224zm500.6-153.71c0-1.01.828-1.84 1.84-1.84s1.84.828 1.84 1.84-.828 1.84-1.84 1.84-1.84-.828-1.84-1.84zm-431.33-8.96c-.677-1.1.014-4.29 1.536-7.096l2.768-5.104.046 4.6c.057 5.76-2.61 10.4-4.35 7.6zm420.51-6.918c-1.21-2.66-1.79-5.25-1.28-5.762s.096-2.47-.916-4.362c-1.22-2.28-1.22-3.44-.006-3.438 1.01 0 2.78 3.52 3.931 7.82 1.15 4.3 2.48 8.44 2.94 9.2.463.759.098 1.38-.811 1.38s-2.64-2.18-3.858-4.838zm-410.92-17.242c-2.74-10.2-3.08-14-1.491-16.522 2.79-4.52 3.93-.983 3.313 10.333-.423 7.77-.932 9.5-1.823 6.189zm73.179.206c-.769-1.24-.821-8.01-.116-15.041 1.27-12.7 1.24-12.8-4.619-18.291l-5.902-5.513h4.795c6.57 0 11.5-5.51 13.042-14.525 1.32-7.84 3.43-9.66 5.356-4.644 2.3 5.99 1.13 13.5-2.389 15.396-2.92 1.56-3.73 4.88-4.842 19.845-1.46 19.7-3.05 26.5-5.325 22.774zm40.402-47.583c-1.18-4.7-1.44-4.83-3.703-1.73-4.2 5.74-5.01.083-1.613-11.137 4.36-14.4 6.75-17.4 8.268-10.423 1.81 8.34 1.78 28.3-.043 28.347-.902 0-2.21-2.28-2.91-5.058z"/> + <path fill="#b29412" d="m436.03 826.41c-3.41-3.76-4.23-16.1-1.371-20.609 1.51-2.38 1.82-2.38 2.632 0 3.13 9.22 4.4 17.3 3.229 20.431-1.32 3.57-1.42 3.57-4.49.177zm-151.11-7.533c-.793-1.28-.944-2.83-.337-3.436 1.65-1.65 3.44.775 2.553 3.443-.623 1.87-1.06 1.87-2.216-.007zm126.87-28.411c-4.87-4.8-8.32-9.28-7.654-9.943s2.19-.227 3.385.97c2.98 2.98 5.12 2.73 5.121-.583 0-5.46 3.44-2.6 6.486 5.385 4.86 12.7 2.63 14-7.338 4.171zm75.795-3.416c-4.67-7.64-10.5-18.3-10.544-19.125 0-.448.816-.815 1.814-.815 2.07 0 13.6 22 12.254 23.346-.491.491-2.08-1.04-3.524-3.406zm-16.799-38.59c-2.69-6.21-4.48-11.7-3.967-12.22.899-.899 6.48 10.9 9.16 19.371 2.53 7.98-.344 4.03-5.193-7.151zm-33.738-14.11c-8.31-12.1-17.4-29.7-16.56-32.177.381-1.14 4.06 2.86 8.178 8.891 7.59 11.1 17.1 21.3 17.052 18.187-.024-.935-.779-4.87-1.677-8.739-1.56-6.7-1.48-6.9 1.682-4.037 3.1 2.8 14.8 23.1 14.759 25.64 0 .643-2.63-.191-5.847-1.854-5.38-2.78-6.02-2.79-8.023-.047-1.2 1.64-2.5 2.93-2.893 2.876s-3.4-3.99-6.671-8.74zm-32.532-1.543c-.638-1.66-.782-3.4-.319-3.864 1.46-1.46 4.77 1.47 4.766 4.236 0 3.61-3.02 3.36-4.446-.372zm-23.839-14.178c-.626-2.5-1.6-5.75-2.171-7.226-.873-2.28-.023-2.37 5.512-.641 3.6 1.13 6.54 2.53 6.544 3.117s-1.97 2.92-4.373 5.178l-4.373 4.109zm112.88-6.336c-20.9-29.4-27.5-40.4-30.183-50.063-1.11-4.07 2.84 1.83 12.846 19.212 1.72 2.98 8.4 11.8 14.848 19.707s11.7 15.1 11.731 16.099c0 4.84-3.67 2.87-9.241-4.956zm59.85-55.571c-3.05-3.37-3.07-3.69-.238-3.691 1.71 0 3.59 1.28 4.192 2.839 1.71 4.46-.294 4.9-3.955.852zm-101.03-22.617c-2.77-8.89-4.68-17.2-4.239-18.4 1.03-2.87 11 29.4 10.022 32.331-.41 1.23-3.01-5.04-5.783-13.931zm-317.02 1.178c-3.03-1.23-.834-6.46 9.282-22.095 7.09-11 16.5-22 13.831-16.277-.469 1.01-4.22 8.88-8.325 17.48s-7.98 17.1-8.589 18.86c-1.13 3.27-2.25 3.64-6.2 2.032zm460.17-27.157c-40.8-20.5-74.9-50.6-90.39-79.712-4.27-8.01-9.44-16.1-11.489-17.942s-3.72-4.51-3.725-5.903-1.24-3.01-2.76-3.592c-3.73-1.43-3.49-5.51.412-7.009 3.83-1.47 6.6 1.95 10.976 13.544 5.49 14.6 19.1 33.6 35.198 49.379 8.54 8.35 16.2 15.2 17.116 15.18s7.18 3.58 14.019 7.954c6.84 4.38 15.2 8.9 18.5 10.053s8.35 3.73 11.152 5.723 7.34 4.19 10.087 4.879 5.9 3.02 7.013 5.182c1.11 2.16 4.14 6.2 6.736 8.988 6.84 7.33 2.59 6.08-22.844-6.725zm-243.6-6.615c0-6.28 2.64-7.23 5.455-1.961 2.84 5.31 2.33 7.48-1.775 7.481-2.86 0-3.68-1.23-3.68-5.52zm28.218.796c-1.53-4 2.36-7.76 5.146-4.968 2.36 2.36.896 7.85-2.084 7.852-1.08 0-2.45-1.3-3.062-2.884zm62.853-4.936c-2.04-5.76-2.15-30.8-.144-30.82 1.42 0 2.08 5.38 2.044 16.56-.051 16.5-.344 18.7-1.899 14.26zm-76.964-8.127c-2.51-2.51-1.24-8.14 1.717-7.594 2.22.408 3.1-1.27 3.573-6.819l.63-7.36-6.474 7.36c-6.15 6.99-6.6 7.19-9.027 3.879-1.4-1.92-2.84-4.36-3.201-5.426-.372-1.12-3.16-.158-6.529 2.242-4.3 3.06-7.3 3.88-11.145 3.031-3.83-.84-5.56-.376-6.36 1.699-.603 1.57-2.06 2.86-3.228 2.855-1.46 0-1.76-2.33-.956-7.36.946-5.92.62-7.36-1.663-7.36-1.56 0-3.34-1.3-3.951-2.897-.774-2.02-2.46-2.56-5.559-1.781-3.97.996-4.24.727-2.506-2.511 3-5.6-.881-6.39-6.042-1.231-2.49 2.49-5.04 5.61-5.657 6.935-.619 1.32-.738-.218-.264-3.424.6-4.06-.277-7.28-2.889-10.598l-3.751-4.769-4.701 3.698c-4.84 3.81-17.1 5.14-17.084 1.858 0-1.01 2.14-1.84 4.76-1.84 3.6 0 5.27-1.35 6.843-5.52 2.18-5.79 9.13-7.78 11.226-3.22.581 1.26.594.437.029-1.84-.865-3.48-.28-4.14 3.697-4.14 2.6 0 4.72-.859 4.724-1.91s-2.26-1.67-5.018-1.38c-3.44.364-5.04-.336-5.098-2.23-.204-7.08-3.16-10.9-9.242-12.088-3.45-.647-7.23-2.33-8.402-3.744-1.73-2.09-1.22-2.57 2.694-2.568 6.75 0 6.09-4.56-.699-4.796-4.58-.163-5.52.518-5.516 4.031 0 2.32-.884 4.77-1.965 5.442s-1.61 2.17-1.175 3.329c1.53 4.1-1.27 8.54-4.22 6.703-2.33-1.45-2.38-2.32-.332-5.632 3.29-5.3 1.64-6.34-4.089-2.585-4.28 2.8-4.85 2.82-5.856.201-.617-1.61.561-5.04 2.638-7.677 3.21-4.08 3.7-10.1.82-10.057-4.09 0-13.4 6.54-13.421 9.41 0 1.91-1.19 3.47-2.651 3.47-3.7 0-5.53-3.59-3.076-6.048 1.13-1.13 2.05-3.5 2.048-5.268s1.37-3.99 3.044-4.924c1.97-1.1 2.6-2.86 1.789-4.974-1.12-2.9-1.51-2.96-3.504-.448-1.24 1.55-4.44 3.33-7.108 3.947-3.8.881-5.48.178-7.722-3.245-1.58-2.4-2.76-5.92-2.625-7.804s-.343-5.71-1.053-8.495c-1.36-5.32-.757-5.7 5.219-3.354 2.88 1.14 3.68 3.16 3.68 9.355 0 10.7 3.23 11.1 6.245.888 2.39-8.11 2.33-8.42-2.353-12.111-2.65-2.08-4.81-5.35-4.812-7.267s-1.65-4.36-3.661-5.441c-2.01-1.08-4.93-4.42-6.487-7.425s-4.05-5.46-5.539-5.465c-4.07 0-3.26 3.88 1.043 5.007 2.06.54 3.42 1.91 3.017 3.048-.841 2.35-7.75 2.01-13.212-.661-2.02-.989-6.16-2.74-9.2-3.895l-5.52-2.097 5.52-1.855c3.04-1.02 7.28-3.45 9.421-5.397s5.46-3.52 7.36-3.501c7.59.09 15.4 2.54 15.419 4.829 0 1.7 2.96 2.42 10.012 2.42 8.17 0 9.82-.511 8.946-2.777-.625-1.63-2.48-2.41-4.492-1.881-1.88.493-3.43.125-3.426-.817s-2.05-2.49-4.548-3.442c-2.59-.984-5.72-4.53-7.266-8.234-1.5-3.58-4-6.5-5.572-6.505s-2.85-.828-2.854-1.84 1.99-1.84 4.42-1.84c3.26 0 4.93 1.45 6.344 5.52 1.38 3.95 3.13 5.53 6.16 5.561 2.33.023 6.31 1.66 8.836 3.639 7.28 5.7 8.37 4.26 1.582-2.081l-6.167-5.761 4.132-2.744c4.54-3.02 5.35-7.7 1.924-11.127-1.72-1.72-1.48-2.21 1.044-2.208 2.42 0 2.95-.945 2.074-3.712-1.11-3.49-.583-3.65 8.616-2.668 5.39.574 13.5.357 18.074-.482 7.9-1.46 8.25-1.79 7.7-7.269-.319-3.16.316-6.3 1.41-6.974 1.09-.676 1.48-2.06.845-3.081-.672-1.09-2.61-.282-4.685 1.949-2.99 3.21-4.11 3.45-7.166 1.536-5.42-3.38-4.45-6.9 1.895-6.899 3.04 0 5.52-.828 5.52-1.84 0-1.82-3.84-2.7-9.2-2.118-5.88.643-23.8-3.99-24.673-6.39-.903-2.35 2.49-3.57 7.193-2.581 9.36 1.97 20.4 3.09 23.244 2.358 3.94-1.03 4.66-4.15.961-4.149-3.68 0-8.56-6.15-8.565-10.783 0-4.37 5.74-7.88 6.949-4.251.401 1.2 3.3 4.75 6.43 7.889 5.06 5.06 5.94 5.37 7.864 2.742 2.4-3.28 7.38-3.93 9.08-1.179.605.979 3.52 1.3 6.467.706 3.64-.727 6.33-.114 8.34 1.9 1.64 1.64 4.78 2.92 6.982 2.857l4.009-.117-4.02-1.62c-2.21-.891-4.97-3.4-6.138-5.578-1.74-3.25-3.2-3.76-8.145-2.828-8.17 1.53-11.8-2.49-6.486-7.266 2.85-2.58 4.22-2.86 5.881-1.199 3.39 3.39 5.11 2.57 5.109-2.435 0-5.53 2.8-6 5.52-.92 2.11 3.95 5.52 4.98 5.52 1.67 0-1.1-1.66-4.12-3.68-6.688-4.02-5.12-4.82-9.7-1.687-9.702 3.48 0 14.6 12.8 14.566 16.793 0 3.13.812 3.64 4.389 2.744 2.85-.715 5.24-.079 6.809 1.814 2.06 2.48 1.75 3.43-2.089 6.381-5.49 4.22-1.82 4.63 5.869.654 5.13-2.65 5.88-2.64 8.971.161 3.19 2.89 3.41 2.77 3.973-2.166.467-4.08 1.9-5.6 6.578-6.981 4.03-1.19 5.98-2.9 5.98-5.257 0-3.48.146-3.48 8.74.031 1.26.517 2.3-.034 2.3-1.225 0-4.13 8.25-1.18 8.871 3.171.478 3.37-.494 4.38-5.098 5.298-7.16 1.43-9.2 4.34-3.033 4.342 2.55 0 6.29 1.78 8.317 3.95l3.68 3.95-1.089-6.71c-1.06-6.52-.928-6.71 4.672-6.71 3.17 0 5.76-.887 5.761-1.972 0-1.08-2.28-1.7-5.06-1.38-4.2.491-5.17-.192-5.705-4.008-.355-2.53-1.6-5.2-2.76-5.922-2.58-1.61-16 .244-19.033 2.634-1.21.952-4.11 1.46-6.44 1.129-3.21-.455-4.26-1.81-4.325-5.592-.046-2.74-.667-5.57-1.38-6.287-2.48-2.48-1.27-5.87 1.924-5.389 2.04.309 3.03 1.82 2.699 4.114-.342 2.38 1.06 4.34 4.074 5.72 5.36 2.44 7.41.438 5.553-5.422-1.02-3.22-.666-3.72 1.954-2.712 1.76.677 4.14.485 5.272-.426 1.14-.911 4.77-1.24 8.065-.74 4.39.671 6.29 2.09 7.099 5.305.606 2.41 1.81 4.39 2.67 4.389s3.24 1.8 5.287 3.991c3.39 3.64 4.17 3.76 8.812 1.439 2.8-1.4 5.73-2.86 6.503-3.234s1.24 1.67 1.044 4.541-.214 7.63-.029 10.568c.325 5.17.456 5.24 3.901 2.12 4.33-3.92 7.48-2.37 7.476 3.684 0 5.07.559 5.31 5.816 2.493 3.02-1.62 4.4-1.28 7.239 1.763 3.61 3.88 4.71 6.72 1.93 5-.866-.535-1.21.919-.771 3.231.664 3.47 1.74 4.07 6.174 3.415 4.78-.702 5.37-.252 5.371 4.08 0 3.32-1.27 5.34-3.995 6.346-2.67.987-3.27 1.92-1.826 2.818 1.19.737 3.43.081 4.968-1.459 3.14-3.14 7.39-2.23 8.987 1.928.742 1.93 3.11 2.58 7.931 2.167l6.872-.592.031 8.214c.026 6.9-.692 8.58-4.49 10.471-3.15 1.57-4.54 3.82-4.6 7.416-.068 4.49-.796 5.16-5.599 5.16-4.24 0-5.39-.749-4.979-3.22.321-1.91-.615-3.22-2.3-3.22-3.19 0-3.81 2.86-1.001 4.6 2.78 1.72 2.2 4.6-.92 4.6-4.07 0-3.36 3.87.92 4.987 4.9 1.28 4.67 2.32-1.951 8.813-3.1 3.04-7.63 7.49-10.083 9.891-5.05 4.95-4.32 8.59 1.144 5.668 4.13-2.21 7.21-.933 7.21 2.995 0 1.5-2.35 3.17-5.299 3.757-3.98.795-5.08 1.89-4.429 4.386.572 2.19-.279 3.55-2.485 3.973-2.16.417-3.37 2.28-3.391 5.228-.026 3.34-1.16 4.74-4.175 5.17-8.68 1.23-3.48 6.4 6.978 6.937 5.63.288 7.22-.6 11.069-6.176 2.47-3.58 4.91-9.9 5.412-14.05.841-6.89 1.42-7.59 6.755-8.104 5.28-.512 5.73-.166 4.741 3.68-.602 2.34-2.4 5.25-3.995 6.487-2.62 2.02-2.6 2.25.211 2.3 4.4.083 5.68 3.02 3.286 7.498-1.56 2.92-1.47 4.54.375 6.783 2.15 2.61 1.85 2.8-2.632 1.687-5.74-1.43-6.28-.075-2.28 5.64 2.75 3.93.979 7.45-2.625 5.226-.927-.573-3.84-.222-6.476.779-4.12 1.57-4.49 2.3-2.624 5.289 3.3 5.28.667 10.1-4.759 8.744-5.71-1.43-7.82 1.76-2.907 4.384 4.53 2.42 4.72 5.09.686 9.543-2.88 3.18-2.78 3.36 1.84 3.365 2.69 0 4.88-.828 4.885-1.84 0-1.96 11.5-2.6 13.366-.74.605.605.646 2.28.092 3.727-.749 1.95-1.63 2.11-3.436.612-1.76-1.46-3.5-1.44-6.344.081-3.17 1.7-3.49 2.61-1.695 4.772 1.22 1.47 1.9 2.86 1.499 3.092-10.1 5.81-13.6 5.97-9.002.416 2.87-3.46 2.57-3.76-5.284-5.255-4.81-.918-5.8-.668-4.391 1.116 2.54 3.21 2.17 14.3-.466 14.259-1.19 0-3.67-1.66-5.498-3.68-3.73-4.12-8.3-4.89-8.252-1.38.036 2.97 2.23 6.39 4.572 7.13 1.01.32 3.76 2.87 6.112 5.658 6.38 7.58 3.1 9.86-4.818 3.342-8.79-7.24-12.9-7.3-12.552-.156.149 2.97.88 6 1.625 6.747 2.35 2.35 1.47 6.26-1.407 6.26-1.53 0-2.76-1.64-2.76-3.68 0-4.34-4.1-4.85-7.36-.92-2.59 3.12-7.36 3.71-7.36.92 0-3.9-2.9-1.43-5.947 5.065-2.78 5.92-2.84 6.98-.46 8.311 3.5 1.96 3.56 8.7.075 8.703-1.46 0-3.16-.828-3.789-1.84s-2.83-1.84-4.908-1.84c-3.1 0-3.57-.814-2.616-4.6.794-3.16.398-4.6-1.273-4.6-3.21 0-6.84 3.75-6.843 7.065 0 1.46-1.45 3.75-3.22 5.093-3.7 2.81-4.88 3.05-6.593 1.335zm-17.787-31.919c0-1.89-.851-3.96-1.891-4.606-2.33-1.44-9 6.25-9.087 10.471-.056 2.81.426 2.84 5.459.325 3.18-1.59 5.52-4.21 5.52-6.19zm-18.4 3.623c0-1.06 2.08-4 4.613-6.537 3.68-3.68 4.23-5.32 2.732-8.128-1.11-2.07-3.02-3.08-4.636-2.458-1.52.582-3.95.068-5.404-1.141s-4.3-1.67-6.325-1.031-6.08-.075-9.013-1.593c-5.15-2.66-5.48-2.57-9.376 2.705-4.08 5.52-3.84 9.06.612 9.065 1.33 0 3.48-1.27 4.767-2.821 2.08-2.51 2.77-2.42 6.255.855 2.64 2.48 5.3 3.32 8.169 2.564 3.63-.949 4.2-.466 3.887 3.285-.203 2.42-.278 5.02-.165 5.778.315 2.13 3.88 1.63 3.884-.544zm32.77-1.054c-1.64-1.64-3.9-2.41-5.024-1.713-3 1.85-.552 4.69 4.036 4.691 3.65 0 3.73-.234.988-2.978zm5.387-5.653c-1.71-1.71-3.73-2.49-4.481-1.74s-.153 2.14 1.336 3.082c4.48 2.83 6.47 1.98 3.145-1.342zm17.042-2.41c0-1.01-.828-1.84-1.84-1.84s-1.84.828-1.84 1.84.828 1.84 1.84 1.84 1.84-.828 1.84-1.84zm-42.113-15.249c-1.5-1.5-2.05-1.3-2.047.774 0 3.66 2.47 6.13 3.389 3.389.388-1.16-.216-3.04-1.342-4.163zm-22.287-4.991c0-1.01-.828-1.84-1.84-1.84s-1.84.828-1.84 1.84.828 1.84 1.84 1.84 1.84-.828 1.84-1.84zm11.04.109c0-.952-.828-2.24-1.84-2.869s-1.84.154-1.84 1.731.828 2.87 1.84 2.869 1.84-.779 1.84-1.731zm-24.84-5.629c.625-1.01-.617-1.84-2.76-1.84s-3.38.828-2.76 1.84 1.87 1.84 2.76 1.84 2.14-.828 2.76-1.84zm-39.523-15.684c1.28-1.54 1.82-3.32 1.19-3.942-1.34-1.34-6.75 2.78-6.747 5.132 0 2.54 3 1.89 5.557-1.19zm26.261-.855c-.526-2.01-1.69-3.21-2.588-2.651-2.6 1.61-1.89 6.31.957 6.311 1.68 0 2.25-1.29 1.631-3.659zm138.88 1.474c-1.14-3.41-5.1-3.98-5.098-.728 0 1.6 1.31 2.91 2.913 2.913s2.59-.983 2.185-2.185zm-146.78-9.56c0-1.4-1.66-2.98-3.688-3.51-2.57-.671-3.55-2.28-3.22-5.275.306-2.81-.49-4.31-2.292-4.31-3.73 0-2.59 5.55 2.277 11.147 4.38 5.04 6.92 5.75 6.923 1.948zm137.27-2.476c-1.87-1.87-3.41.946-1.879 3.429 1.16 1.88 1.59 1.88 2.216.007.426-1.28.275-2.82-.337-3.436zm-155.8-4.313c-3.82-3.82-7.23-3.33-7.226 1.035 0 1.39 1.86 2.83 4.14 3.206 6.27 1.03 7.15-.178 3.086-4.241zm177.88-1.207c-.611-.611-1.05.475-.966 2.415.088 2.14.524 2.58 1.112 1.112.532-1.33.466-2.92-.145-3.527zm-13.538-1.434c.714-3.74.404-4.22-1.626-2.535-2.8 2.32-3.4 7.15-.882 7.151.894 0 2.02-2.08 2.508-4.616zm-160.8-9.04c-.358-.3-3.14-1.11-6.172-1.799l-5.52-1.253 5.52 3.728c3.23 2.18 5.79 2.93 6.172 1.799.358-1.06.358-2.18 0-2.475zm-16.842-2.706c2.48-3.97 1.43-5.72-3.436-5.718-3.56 0-4.09 1.5-2.256 6.289 1.47 3.83 3.04 3.67 5.692-.571zm22.631-3.987c0-1.07-.828-1.44-1.84-.811-1.01.625-1.84 1.5-1.84 1.949 0 .446.828.811 1.84.811s1.84-.877 1.84-1.949zm-25.76-10.482c0-3.49-9.53-8.68-13.339-7.262-1.3.481-.089 1.74 2.759 2.868 2.78 1.11 5.06 3.28 5.06 4.819s1.24 2.81 2.76 2.806 2.76-1.45 2.76-3.231zm18.4-6.889c0-1.52-1.2-2.76-2.656-2.76s-3.91-1.8-5.449-3.989c-2.5-3.58-2.5-4.21.062-6.077 2.57-1.88 2.58-2.32.017-4.444-2.36-1.96-3.54-1.71-6.953 1.477-2.26 2.11-3.11 3.83-1.882 3.833s3.05 2.15 4.049 4.778 3.46 5.21 5.474 5.735 3.66 1.69 3.658 2.582.828 1.62 1.84 1.625 1.84-1.24 1.84-2.76zm-31.28-10.255c0-1.53-6.01-.918-8.969.912-1.97 1.22-1.99 1.81-.132 2.964 2.22 1.37 9.1-1.56 9.101-3.876zm50.048-9.433c-1.72-1.72-2.21-1.23-2.208 2.208s.491 3.92 2.208 2.208 1.72-2.7 0-4.416zm165.23-8.941c0-.952-.828-1.73-1.84-1.731s-1.84 1.29-1.84 2.869.828 2.36 1.84 1.731 1.84-1.92 1.84-2.869zm-195.04-3.203c0-.81-1.04-2.52-2.3-3.804-1.84-1.87-1.71-2.77.665-4.524 2.14-1.58 2.54-3.34 1.439-6.316-2.11-5.7-5.02-5.2-3.897.672.528 2.76-.055 5.4-1.372 6.21-2.97 1.84-.702 9.23 2.829 9.234 1.45 0 2.64-.662 2.636-1.472zm22.08-6.925c0-2.35.842-4.79 1.87-5.422 1.03-.636 1.37-1.97.756-2.958-1.56-2.52-6.07 1.51-6.024 5.399.019 1.7-.594 5.17-1.363 7.697-1.26 4.14-1.09 4.35 1.681 2.075 1.69-1.39 3.08-4.44 3.079-6.791zm-9.228-10.463c.016-.759-1.21-1.38-2.732-1.38-3.12 0-3.23.323-1.584 4.604.938 2.44 1.49 2.57 2.732.611.856-1.35 1.57-3.08 1.584-3.834zm185.87-2.409c0-.446-1.29-.811-2.869-.811s-2.35.842-1.713 1.87c1.05 1.7 4.58.883 4.581-1.059zm16.56-2.48c0-1.71 1.02-4.14 2.274-5.389 1.8-1.8.952-2.16-4.14-1.748-5.23.429-6.36-.088-6.142-2.793.457-5.58-5.72-2.79-6.374 2.874-.476 4.12.145 5.04 3.392 5.044 2.38 0 4.35 1.43 4.904 3.553 1.12 4.27 6.09 3.01 6.086-1.542zm-171.12-.388c0-1.01-.828-1.33-1.84-.703-1.01.626-1.84 1.96-1.84 2.977s.828 1.33 1.84.703c1.01-.626 1.84-1.96 1.84-2.977zm153.68-10.48c-1.15-1.15-12 3.46-11.996 5.094 0 3.36 2.7 3.24 7.545-.345 2.91-2.15 4.91-4.29 4.451-4.749zm-11.996-1.398c0-1.71-1.25-2.65-3.068-2.3-4.62.895-5.25 5.2-.766 5.195 2.26 0 3.83-1.19 3.833-2.895zm-141.45-5.707c-1.6-2.76-1.96-2.84-2.009-.445-.06 3.1 1.88 5.89 3.179 4.585.43-.43-.097-2.29-1.171-4.14zm-7.507-5.291c2-2.41 1.75-3.02-1.615-3.895-2.3-.603-3.98-2.5-3.983-4.507 0-1.91-1.24-3.46-2.76-3.465s-2.76 1.14-2.76 2.535 1.24 3.56 2.76 4.825 2.76 3.43 2.76 4.825c0 3.37 2.66 3.22 5.597-.318zm155.01-.827c-.529-2.02-2.11-3.68-3.508-3.68-3.13 0-3.28 2.21-.337 5.152 3.3 3.3 4.93 2.67 3.845-1.472zm-28.555-8.569c3.01-.755 5.1-.408 5.539.919 1.32 3.95 4.52 2.18 3.455-1.914-.582-2.22-.197-5.08.855-6.349 1.5-1.8.416-2.06-4.985-1.185-5.91.96-6.73.684-5.727-1.931.898-2.34.099-3.05-3.429-3.051-5.49 0-7.7-4.4-4.289-8.516 2.12-2.55 1.96-2.86-1.174-2.258-2.21.421-3.87 2.48-4.258 5.272-.35 2.52-1.5 5.64-2.562 6.926-2.76 3.36-.009 5.26 4.001 2.756 2.58-1.61 4.11-1.59 6.349.07 2.65 1.96 2.67 2.73.211 7.441-1.51 2.89-2.15 6.2-1.416 7.36.878 1.4 1.54 1.02 1.965-1.11.351-1.77 2.81-3.76 5.466-4.431zm20.662-1.659c0-.446-.828-.811-1.84-.811s-1.84.877-1.84 1.949.828 1.44 1.84.811 1.84-1.5 1.84-1.949zm-145.36-2.651c0-1.01-.779-1.84-1.731-1.84s-2.24.828-2.869 1.84c-.625 1.01.154 1.84 1.731 1.84s2.87-.828 2.869-1.84zm81.861-12.91c-.636-1.03-1.93-1.39-2.869-.811-2.55 1.58-2.08 2.68 1.156 2.681 1.58 0 2.35-.842 1.713-1.87zm-49.661-3.65c-.625-1.01-1.5-1.84-1.949-1.84s-.811.828-.811 1.84.877 1.84 1.949 1.84 1.44-.828.811-1.84zm77.289 228.15c1.84-2.03 3.74-3.29 4.227-2.804 1.24 1.24-3.35 6.5-5.668 6.496-1.04 0-.397-1.66 1.441-3.691zm11.95.011c0-1.01.365-1.84.811-1.84s1.32.828 1.949 1.84.26 1.84-.811 1.84-1.95-.828-1.949-1.84zm64.548-25.481c-1.09-2.04-1.99-4.81-2-6.138s-1.24-4.78-2.748-7.668-2.27-7.12-1.692-9.411c.702-2.8.095-4.53-1.852-5.275-3.68-1.41-3.78-4.91-.137-4.907 1.52 0 2.76.97 2.76 2.155s1.14 3.46 2.541 5.06c2.24 2.56 7.1 27.7 5.667 29.282-.302.34-1.44-1.06-2.538-3.099zm-16.112-.709c-3.8-5.92-6.1-11.2-5.222-12.118 1.39-1.39 10.1 7.24 10.146 10 0 3.43-3.19 4.81-4.923 2.118zm-202.99-13.31c0-2.76 6.2-10.2 8.517-10.179 1.42 0 4.24-1.04 6.285-2.3 3-1.86 4-1.83 5.245.164 2.59 4.16-1.81 10.8-7.076 10.653-2.58-.065-6.55.532-8.829 1.327s-4.14.946-4.14.336zm201.83-25.012c-.664-2.54.025-4.1 2.085-4.734 1.69-.518 4.52-1.71 6.272-2.647 6.68-3.57 6.96-.582.573 6.306-5.43 5.86-7.61 6.12-8.93 1.076zm-8.637-2.724c0-3.72 6.92-11.1 8.718-9.299.768.768-.051 2.46-1.821 3.749s-3.22 3.71-3.217 5.37-.828 3.02-1.84 3.017-1.84-1.28-1.84-2.837zm-245.53-22.51c-2.08-2.08-.916-4.25 3.113-5.776 4.96-1.87 7.09-.956 5.772 2.481-1.04 2.71-7.19 4.99-8.886 3.296zm265.37-10.073c1.04-1.26 2.18-4.3 2.525-6.756.761-5.33 4.77-7.19 6.388-2.964.702 1.83-.503 4.77-3.08 7.513-4.3 4.58-9.35 6.49-5.834 2.206zm37.066-4.144c-1.52-1.52-6.4-3.82-10.834-5.1-7.85-2.27-12.4-6.86-6.792-6.856 1.53 0 3.05-1.86 3.373-4.14.823-5.79 3.59-4.99 8.304 2.409 2.22 3.48 5.8 8.61 7.96 11.391 4.14 5.34 2.69 7-2.011 2.296zm-44.944-26.562c-6.83-1.32-7.6-7.5-1.263-10.234 3.08-1.33 4.04-2.98 3.475-5.98-.43-2.28-.094-4.14.746-4.14s1.1-1.11.581-2.465c-1.36-3.55 3.91-7.25 8.333-5.843 4.38 1.39 4.86 5.93 1.192 11.167-2.21 3.15-2.21 4.18 0 7.201 3.61 4.93 3.21 7.09-1.104 5.967-2.34-.611-3.68-.057-3.68 1.517 0 3.43-1.85 4.06-8.28 2.81zm-424.12-11.381c0-1.45 1.21-4.36 2.681-6.462 2.58-3.68 3.2-3.74 16.1-1.426 7.38 1.32 19.2 2.51 26.299 2.635 7.08.128 16.6.826 21.16 1.551l8.28 1.318-12.88 1.275c-7.08.701-23.9 1.83-37.26 2.509-20.5 1.04-24.4.814-24.38-1.4zm435.11-23.773c-1.8-2.91 2.72-7.28 7.527-7.279 5.76 0 7.66 3.67 3.493 6.719-4.05 2.96-9.37 3.23-11.019.56zm-247.43-7.279c0-1.01 1.19-1.84 2.651-1.84s3.16.828 3.789 1.84-.568 1.84-2.651 1.84c-2.08 0-3.79-.828-3.789-1.84zm24.84-13.926c-8.04-4.17-8.73-5.34-5.103-8.618 3.02-2.73 3.73-2.57 9.524 2.157 3.66 2.99 5.72 5.99 4.951 7.229-1.7 2.75-2.75 2.67-9.372-.768zm240.12 1.046c0-1.01.828-1.84 1.84-1.84s1.84.828 1.84 1.84-.828 1.84-1.84 1.84-1.84-.828-1.84-1.84zm-279.68-7.36c0-2.16 1.41-2.16 6.44 0 3.26 1.4 3.1 1.6-1.38 1.711-2.78.071-5.06-.699-5.06-1.711zm262.55-3.017c-.647-.647-.728-1.9-.18-2.79 1.18-1.9 4.42-.262 4.423 2.235 0 1.98-2.49 2.3-4.243.555zm-12.93-14.77c-2.74-2.74-1.14-7.97 2.453-7.973 2.7 0 3.68 1.23 3.68 4.6 0 4.33-3.34 6.17-6.133 3.373zm20.853-2.303c0-4.19 2.52-7.51 5.717-7.51 3.93 0 4.6 3.67 1.275 6.992-2.61 2.61-6.99 2.93-6.992.519zm-225.82-12.302c.611-.611 2.2-.677 3.527-.145 1.47.587 1.03 1.02-1.112 1.112-1.94.08-3.03-.355-2.415-.966zm22.577-4.262c-2.15-4.15-2.4-7.4-1.119-14.258.913-4.89 1.32-9.22.903-9.641-1.29-1.29-8.14 5.78-8.139 8.399 0 4.93-2.82 2.29-5.728-5.352-4.35-11.4-8.99-27.9-8.992-31.796 0-2.9.909-2.58 5.98 2.11 3.29 3.04 9.08 7.8 12.876 10.572 5.16 3.78 7.42 7.14 8.998 13.388 3.07 12.2 10.7 13 10.757 1.132.016-2.28.856-4.14 1.868-4.14s1.84 1.74 1.84 3.856 1.41 6.24 3.123 9.143c3.58 6.05 2.16 9-2.503 5.203-2.77-2.25-3.01-2.18-1.965.599 1.44 3.86-1.87 6.32-4.703 3.487-1.13-1.13-3.12-2.05-4.44-2.048-2.99 0-3.18 6.79-.221 7.777 3 .999.441 6.94-2.986 6.943-1.52 0-4.02-2.42-5.549-5.374zm-44.241-.153c-3.24-3.58-3.2-3.67 1.452-3.674 5.71 0 7.74 2.48 4.333 5.305-1.87 1.55-3.26 1.16-5.785-1.632zm221.72-1.834c0-1.01.828-1.84 1.84-1.84s1.84.828 1.84 1.84-.828 1.84-1.84 1.84-1.84-.828-1.84-1.84zm11.04-1.924c0-2.97 8.68-11 11.919-10.956 2.58 0 2.56.504-.177 4.675-4.23 6.45-11.7 10.5-11.742 6.282zm-201.3-1.469c-.637-1.03-.261-2.43.835-3.105 2.83-1.75 4.65.647 2.293 3.008-1.32 1.32-2.35 1.35-3.127.097zm78.022-2.063c0-2.12-1.16-4.3-2.579-4.85-1.42-.544-3-2.6-3.513-4.561-1.18-4.53-12.3-9.5-15.455-6.893-1.69 1.41-2.05.159-1.486-5.217.407-3.89.789-8.1.847-9.365.127-2.76 3.79-3.13 3.786-.386 0 3.6 7.83 12.5 10.19 11.604 1.3-.498 2.9.811 3.568 2.908 1.37 4.33 2.96 4.76 6.054 1.665 1.64-1.64 2.44-1.4 3.355.999.664 1.73.76 3.59.214 4.141s.645 2.63 2.648 4.636c4.61 4.61 3.59 7.85-2.71 8.594-3.95.468-4.92-.175-4.918-3.278zm-312.45-6.334c-5.38-1.14-9.17-2.69-8.433-3.426 1.67-1.67 43.8-1.8 45.488-.134.666.666.289 2.32-.839 3.68-2.49 3-21.9 2.94-36.216-.12zm403.11-5.231c.871-2.49 6.7-2.11 9.53.614 1.07 1.03-.588 1.69-4.293 1.686-4.04 0-5.77-.764-5.237-2.3zm17.194-7.755c-1.63-2.49-2.97-5.3-2.972-6.235 0-1.79 12.6-4.79 14.096-3.347 1.32 1.32-4.51 14.1-6.43 14.117-.947 0-3.06-2.04-4.694-4.535zm-41.553-7.885c.056-4.85.172-4.91 2.76-1.488 3.44 4.55 3.42 6.55-.059 6.548-1.8 0-2.74-1.76-2.702-5.06zm-110.46.402c0-2.78 4.85-5.82 6.563-4.113.486.486.362 2.24-.276 3.907-1.46 3.82-6.29 3.97-6.286.206zm10.58-6.011c-1.77-.353-3.22-1.77-3.22-3.147 0-5.13 3.68-11.9 6.452-11.945 3.46 0 5.9 5.41 3.201 7.086-1.06.657-2.21 2.87-2.568 4.921-.417 2.41-1.78 3.5-3.866 3.085zm79.01.14c-5.55-.834-5.79-3.64-.594-6.82 2.53-1.55 3.79-1.2 5.87 1.6 2.88 3.88 3.46 6.71 1.272 6.273-.759-.152-3.71-.625-6.549-1.053zm30.009-5.047c0-2.94 6.2-7.05 7.973-5.278s-2.34 7.97-5.278 7.973c-1.48 0-2.7-1.21-2.695-2.695zm-54.921-9.973c-3.2-2.03-1.99-8.49 1.586-8.491 1.62 0 2.97 2.07 3.317 5.06.603 5.24-.655 6.12-4.903 3.431zm-210.16-13.935c-4.52-2.96-8.11-7.74-11.5-15.302-2.71-6.05-4.93-11.9-4.934-13.01s-2.48-3.85-5.52-6.096-5.52-5.08-5.52-6.306c0-2.08-3.66-6.87-23.46-30.693-4.3-5.18-7.8-10.3-7.766-11.36.059-2.13 4.69 2.88 20.186 21.822 5.57 6.8 15.3 18.6 21.658 26.187 9.61 11.5 19.5 25.2 26.817 36.98 2.25 3.65-2.69 2.54-9.962-2.224zm500.6-153.71c0-1.01.828-1.84 1.84-1.84s1.84.828 1.84 1.84-.828 1.84-1.84 1.84-1.84-.828-1.84-1.84zm-431.33-8.96c-.677-1.1.014-4.29 1.536-7.096l2.768-5.104.046 4.6c.057 5.76-2.61 10.4-4.35 7.6zm420.51-6.918c-1.21-2.66-1.79-5.25-1.28-5.762s.096-2.47-.916-4.362c-1.22-2.28-1.22-3.44-.006-3.438 1.01 0 2.78 3.52 3.931 7.82 1.15 4.3 2.48 8.44 2.94 9.2s.098 1.38-.811 1.38-2.64-2.18-3.858-4.838zm-410.92-17.242c-2.74-10.2-3.08-14-1.49-16.522 2.79-4.52 3.93-.983 3.313 10.333-.423 7.77-.932 9.5-1.823 6.189zm73.179.206c-.769-1.24-.821-8.01-.116-15.041 1.27-12.7 1.24-12.8-4.619-18.291l-5.902-5.513h4.795c6.57 0 11.5-5.51 13.042-14.525 1.32-7.84 3.43-9.66 5.356-4.644 2.3 5.99 1.13 13.5-2.389 15.396-2.92 1.56-3.73 4.88-4.842 19.845-1.46 19.7-3.05 26.5-5.325 22.774zm40.402-47.583c-1.18-4.7-1.44-4.83-3.703-1.73-4.2 5.74-5.01.084-1.613-11.137 4.36-14.4 6.75-17.4 8.268-10.423 1.81 8.34 1.78 28.3-.043 28.347-.902 0-2.21-2.28-2.91-5.058z"/> + <path fill="#c87607" d="m436.97 729.85c-8.18-12.1-8.78-13.8-2.972-8.363 6.33 5.88 12.8 16.2 10.122 16.182-1.02 0-4.24-3.52-7.151-7.82zm-55.601-13.34c0-1.52.828-2.76 1.84-2.76s1.84 1.24 1.84 2.76-.828 2.76-1.84 2.76-1.84-1.24-1.84-2.76zm71.015-82.405c-2.77-8.89-4.68-17.2-4.239-18.4 1.03-2.87 11 29.4 10.022 32.331-.41 1.23-3.01-5.04-5.783-13.931zm-313.72-6.522c1.08-3.09 3.12-6.59 4.552-7.77 2.2-1.82 2.29-1.3.635 3.466-1.08 3.09-3.12 6.59-4.552 7.77-2.2 1.82-2.29 1.3-.635-3.466zm454.14-24.305c-26.1-12.4-31.7-15.5-42.83-23.931-17.1-13-36.1-34.5-44.874-51.015-4.25-7.97-9.4-16-11.444-17.859-2.05-1.85-3.72-4.51-3.725-5.903s-1.24-3.01-2.76-3.592c-3.73-1.43-3.49-5.51.412-7.009 3.83-1.47 6.6 1.95 10.976 13.544 4.72 12.5 17 30.7 30.884 45.697 11.8 12.7 46.4 39.1 51.271 39.102 1.28 0 6.23 2.47 10.991 5.489s10.7 6.01 13.24 6.639c4.81 1.21 6.36 4.43 2.12 4.432-1.36 0-7.77-2.52-14.26-5.594zm-210.8-2.766c-.599-1.56-.628-3.3-.065-3.864 1.61-1.61 4.95 1.12 4.95 4.052 0 3.53-3.51 3.4-4.885-.188zm60.996-3.14c-2.04-5.76-2.15-30.8-.144-30.82 1.42 0 2.08 5.38 2.044 16.56-.051 16.5-.344 18.7-1.899 14.26zm-76.964-8.127c-2.51-2.51-1.24-8.14 1.717-7.594 2.22.408 3.1-1.27 3.573-6.819l.63-7.36-6.474 7.36c-6.15 6.99-6.6 7.19-9.027 3.879-1.4-1.92-2.84-4.36-3.201-5.426-.372-1.12-3.16-.158-6.529 2.242-4.3 3.06-7.3 3.88-11.145 3.031-3.83-.84-5.56-.376-6.36 1.699-.603 1.57-2.06 2.86-3.228 2.855-1.46 0-1.76-2.33-.956-7.36.946-5.92.62-7.36-1.663-7.36-1.56 0-3.34-1.3-3.951-2.897-.774-2.02-2.46-2.56-5.559-1.781-3.97.996-4.24.727-2.506-2.511 3-5.6-.881-6.39-6.042-1.231-2.49 2.49-5.04 5.61-5.657 6.935s-.738-.218-.264-3.424c.6-4.06-.277-7.28-2.889-10.598l-3.751-4.769-4.701 3.698c-4.84 3.81-17.1 5.14-17.084 1.858 0-1.01 2.14-1.84 4.76-1.84 3.6 0 5.27-1.35 6.843-5.52 2.18-5.79 9.13-7.78 11.226-3.22.581 1.26.594.437.029-1.84-.865-3.48-.28-4.14 3.697-4.14 2.6 0 4.72-.859 4.724-1.91s-2.26-1.67-5.018-1.38c-3.44.364-5.04-.336-5.098-2.23-.204-7.08-3.16-10.9-9.242-12.088-3.45-.647-7.23-2.33-8.402-3.744-1.73-2.09-1.22-2.57 2.694-2.568 6.75 0 6.09-4.56-.699-4.796-4.58-.163-5.52.518-5.516 4.031 0 2.32-.884 4.77-1.965 5.442s-1.61 2.17-1.175 3.329c1.53 4.1-1.27 8.54-4.22 6.703-2.33-1.45-2.38-2.32-.332-5.632 3.29-5.3 1.64-6.34-4.089-2.585-4.28 2.8-4.85 2.82-5.856.201-.617-1.61.561-5.04 2.638-7.677 3.21-4.08 3.7-10.1.82-10.057-4.09 0-13.4 6.54-13.421 9.41 0 1.91-1.19 3.47-2.651 3.47-3.7 0-5.53-3.59-3.076-6.048 1.13-1.13 2.05-3.5 2.048-5.268s1.37-3.99 3.044-4.924c1.97-1.1 2.6-2.86 1.789-4.974-1.12-2.9-1.51-2.96-3.504-.448-1.24 1.55-4.44 3.33-7.108 3.947-3.8.881-5.48.178-7.722-3.245-1.58-2.4-2.76-5.92-2.625-7.804s-.343-5.71-1.053-8.495c-1.36-5.32-.757-5.7 5.219-3.354 2.88 1.14 3.68 3.16 3.68 9.355 0 10.7 3.23 11.1 6.245.888 2.39-8.11 2.33-8.42-2.353-12.111-2.65-2.08-4.81-5.35-4.812-7.267s-1.65-4.36-3.661-5.441c-2.01-1.08-4.93-4.42-6.487-7.425s-3.95-5.46-5.314-5.465-3.59-1.33-4.943-2.959c-2.08-2.51-1.94-3.34.949-5.449 2.36-1.73 4.42-1.95 6.71-.721 1.82.973 5.02 1.77 7.106 1.769s3.8 1.18 3.801 2.629c0 1.96 2.56 2.63 10.012 2.629 8.17 0 9.82-.511 8.946-2.777-.625-1.63-2.48-2.41-4.492-1.881-1.88.493-3.43.125-3.426-.817s-2.05-2.49-4.548-3.442c-2.59-.984-5.72-4.53-7.266-8.234-1.5-3.58-4-6.5-5.572-6.505s-2.85-.828-2.854-1.84 1.99-1.84 4.42-1.84c3.26 0 4.93 1.45 6.344 5.52 1.38 3.95 3.13 5.53 6.16 5.561 2.33.023 6.31 1.66 8.836 3.639 7.28 5.7 8.37 4.26 1.582-2.081l-6.167-5.761 4.132-2.744c4.54-3.02 5.35-7.7 1.924-11.127-1.72-1.72-1.48-2.21 1.044-2.208 2.42 0 2.95-.945 2.074-3.712-1.11-3.49-.583-3.65 8.616-2.668 5.39.574 13.5.357 18.074-.482 7.9-1.46 8.25-1.79 7.7-7.269-.319-3.16.316-6.3 1.41-6.974 1.09-.676 1.48-2.06.845-3.081-.672-1.09-2.61-.282-4.685 1.949-2.99 3.21-4.11 3.45-7.166 1.536-5.42-3.38-4.45-6.9 1.895-6.899 3.04 0 5.52-.828 5.52-1.84 0-1.82-3.84-2.7-9.2-2.118-5.88.643-23.8-3.99-24.673-6.39-.903-2.35 2.49-3.57 7.193-2.581 9.36 1.97 20.4 3.09 23.244 2.358 3.94-1.03 4.66-4.15.961-4.149-3.68 0-8.56-6.15-8.565-10.783 0-4.37 5.74-7.88 6.949-4.251.401 1.2 3.3 4.75 6.43 7.889 5.06 5.06 5.94 5.37 7.864 2.742 2.4-3.28 7.38-3.93 9.08-1.179.605.979 3.52 1.3 6.467.706 3.64-.727 6.33-.114 8.34 1.9 1.64 1.64 4.78 2.92 6.982 2.857l4.009-.117-4.02-1.62c-2.21-.891-4.97-3.4-6.138-5.578-1.74-3.25-3.2-3.76-8.145-2.828-8.17 1.53-11.8-2.49-6.486-7.266 2.85-2.58 4.22-2.86 5.881-1.199 3.39 3.39 5.11 2.57 5.109-2.435 0-5.53 2.8-6 5.52-.92 2.11 3.95 5.52 4.98 5.52 1.67 0-1.1-1.66-4.12-3.68-6.688-4.02-5.12-4.82-9.7-1.687-9.702 3.48 0 14.6 12.8 14.566 16.793 0 3.13.812 3.64 4.389 2.744 2.85-.715 5.24-.079 6.809 1.814 2.06 2.48 1.75 3.43-2.089 6.381-5.49 4.22-1.82 4.63 5.869.654 5.13-2.65 5.88-2.64 8.971.161 3.19 2.89 3.41 2.77 3.973-2.166.467-4.08 1.9-5.6 6.578-6.981 4.03-1.19 5.98-2.9 5.98-5.257 0-3.48.146-3.48 8.74.031 1.26.517 2.3-.034 2.3-1.225 0-4.13 8.25-1.18 8.871 3.171.478 3.37-.494 4.38-5.098 5.298-7.16 1.43-9.2 4.34-3.033 4.342 2.55 0 6.29 1.78 8.317 3.95l3.68 3.95-1.089-6.71c-1.06-6.52-.928-6.71 4.672-6.71 3.17 0 5.76-.887 5.761-1.972 0-1.08-2.28-1.7-5.06-1.38-4.2.491-5.17-.192-5.705-4.008-.355-2.53-1.6-5.2-2.76-5.922-2.58-1.61-16 .244-19.033 2.634-1.21.952-4.11 1.46-6.44 1.129-3.21-.455-4.26-1.81-4.325-5.592-.046-2.74-.667-5.57-1.38-6.287-2.48-2.48-1.27-5.87 1.924-5.389 2.04.309 3.03 1.82 2.699 4.114-.342 2.38 1.06 4.34 4.074 5.72 5.36 2.44 7.41.438 5.553-5.422-1.02-3.22-.666-3.72 1.954-2.712 1.76.677 4.14.485 5.272-.426s4.77-1.24 8.065-.74c4.39.671 6.29 2.09 7.099 5.305.606 2.41 1.81 4.39 2.67 4.389s3.24 1.8 5.287 3.991c3.39 3.64 4.17 3.76 8.812 1.439 2.8-1.4 5.73-2.86 6.503-3.234s1.24 1.67 1.044 4.541-.214 7.63-.029 10.568c.325 5.17.456 5.24 3.901 2.12 4.33-3.92 7.48-2.37 7.476 3.684 0 5.07.559 5.31 5.816 2.493 3.02-1.62 4.4-1.28 7.239 1.763 3.61 3.88 4.71 6.72 1.93 5-.866-.535-1.21.919-.771 3.231.664 3.47 1.74 4.07 6.174 3.415 4.78-.702 5.37-.252 5.371 4.08 0 3.32-1.27 5.34-3.995 6.346-2.67.987-3.27 1.92-1.826 2.818 1.19.737 3.43.081 4.968-1.459 3.14-3.14 7.39-2.23 8.987 1.928.742 1.93 3.11 2.58 7.931 2.167l6.872-.592.031 8.214c.026 6.9-.692 8.58-4.49 10.471-3.15 1.57-4.54 3.82-4.6 7.416-.068 4.49-.796 5.16-5.599 5.16-4.24 0-5.39-.749-4.979-3.22.321-1.91-.615-3.22-2.3-3.22-3.19 0-3.81 2.86-1.001 4.6 2.78 1.72 2.2 4.6-.92 4.6-4.07 0-3.36 3.87.92 4.987 4.9 1.28 4.67 2.32-1.951 8.813-3.1 3.04-7.63 7.49-10.083 9.891-5.05 4.95-4.32 8.59 1.144 5.668 4.13-2.21 7.21-.933 7.21 2.995 0 1.5-2.35 3.17-5.299 3.757-3.98.795-5.08 1.89-4.429 4.386.572 2.19-.279 3.55-2.485 3.973-2.16.417-3.37 2.28-3.391 5.228-.026 3.34-1.16 4.74-4.175 5.17-8.68 1.23-3.48 6.4 6.978 6.937 5.63.288 7.22-.6 11.069-6.176 2.47-3.58 4.91-9.9 5.412-14.05.841-6.89 1.42-7.59 6.755-8.104 5.28-.512 5.73-.166 4.741 3.68-.602 2.34-2.4 5.25-3.995 6.487-2.62 2.02-2.6 2.25.211 2.3 4.4.083 5.68 3.02 3.286 7.498-1.56 2.92-1.47 4.54.375 6.783 2.15 2.61 1.85 2.8-2.632 1.687-5.74-1.43-6.28-.075-2.28 5.64 2.75 3.93.979 7.45-2.625 5.226-.927-.573-3.84-.222-6.476.779-4.12 1.57-4.49 2.3-2.624 5.289 3.3 5.28.667 10.1-4.759 8.744-5.71-1.43-7.82 1.76-2.907 4.384 4.53 2.42 4.72 5.09.686 9.543-2.88 3.18-2.78 3.36 1.84 3.365 2.69 0 4.88-.828 4.885-1.84 0-1.96 11.5-2.6 13.366-.74.605.605.646 2.28.092 3.727-.749 1.95-1.63 2.11-3.436.612-1.76-1.46-3.5-1.44-6.344.081-3.17 1.7-3.49 2.61-1.695 4.772 1.22 1.47 1.9 2.86 1.499 3.092-10.1 5.81-13.6 5.97-9.002.416 2.87-3.46 2.57-3.76-5.284-5.255-4.81-.918-5.8-.668-4.391 1.116 2.54 3.21 2.17 14.3-.466 14.259-1.19 0-3.67-1.66-5.498-3.68-3.73-4.12-8.3-4.89-8.252-1.38.036 2.97 2.23 6.39 4.572 7.13 1.01.32 3.76 2.87 6.112 5.658 6.38 7.58 3.1 9.86-4.818 3.342-8.79-7.24-12.9-7.3-12.552-.156.149 2.97.88 6 1.625 6.747 2.35 2.35 1.47 6.26-1.407 6.26-1.53 0-2.76-1.64-2.76-3.68 0-4.34-4.1-4.85-7.36-.92-2.59 3.12-7.36 3.71-7.36.92 0-3.9-2.9-1.43-5.947 5.065-2.78 5.92-2.84 6.98-.46 8.311 3.5 1.96 3.56 8.7.075 8.703-1.46 0-3.16-.828-3.789-1.84-.625-1.01-2.83-1.84-4.908-1.84-3.1 0-3.57-.814-2.616-4.6.794-3.16.398-4.6-1.273-4.6-3.21 0-6.84 3.75-6.843 7.065 0 1.46-1.45 3.75-3.22 5.094-3.7 2.81-4.88 3.05-6.593 1.335zm-17.787-31.919c0-1.89-.851-3.96-1.891-4.606-2.33-1.44-9 6.25-9.087 10.471-.056 2.81.426 2.84 5.459.325 3.18-1.59 5.52-4.21 5.52-6.19zm-18.4 3.623c0-1.06 2.08-4 4.613-6.537 3.68-3.68 4.23-5.32 2.732-8.128-1.11-2.07-3.02-3.08-4.636-2.458-1.52.582-3.95.068-5.404-1.141s-4.3-1.67-6.325-1.031-6.08-.075-9.013-1.593c-5.15-2.66-5.48-2.57-9.376 2.705-4.08 5.52-3.84 9.06.612 9.065 1.33 0 3.48-1.27 4.767-2.821 2.08-2.51 2.77-2.42 6.255.855 2.64 2.48 5.3 3.32 8.169 2.564 3.63-.949 4.2-.466 3.887 3.285-.203 2.42-.278 5.02-.165 5.778.314 2.13 3.88 1.63 3.884-.544zm32.77-1.054c-1.64-1.64-3.9-2.41-5.024-1.713-3 1.85-.552 4.69 4.036 4.691 3.65 0 3.73-.234.988-2.978zm5.387-5.653c-1.71-1.71-3.73-2.49-4.481-1.74s-.153 2.14 1.336 3.082c4.48 2.83 6.47 1.98 3.145-1.342zm17.042-2.41c0-1.01-.828-1.84-1.84-1.84s-1.84.828-1.84 1.84.828 1.84 1.84 1.84 1.84-.828 1.84-1.84zm-42.113-15.249c-1.5-1.5-2.05-1.3-2.047.774 0 3.66 2.47 6.13 3.389 3.389.388-1.16-.216-3.04-1.342-4.163zm-22.287-4.991c0-1.01-.828-1.84-1.84-1.84s-1.84.828-1.84 1.84.828 1.84 1.84 1.84 1.84-.828 1.84-1.84zm11.04.109c0-.952-.828-2.24-1.84-2.869s-1.84.154-1.84 1.731.828 2.87 1.84 2.869 1.84-.779 1.84-1.731zm20.24-2.057c0-.952-.828-1.73-1.84-1.731s-1.84 1.29-1.84 2.869.828 2.36 1.84 1.731 1.84-1.92 1.84-2.869zm-45.08-3.571c.625-1.01-.617-1.84-2.76-1.84s-3.38.828-2.76 1.84 1.87 1.84 2.76 1.84 2.14-.828 2.76-1.84zm-39.523-15.684c1.28-1.54 1.82-3.32 1.19-3.942-1.34-1.34-6.75 2.78-6.747 5.132 0 2.54 3 1.89 5.557-1.19zm26.774-.897c0-4.35-3.54-3.84-4.406.634-.327 1.69.53 3.07 1.906 3.068s2.5-1.67 2.501-3.702zm138.37 1.517c-1.14-3.41-5.1-3.98-5.098-.728 0 1.6 1.31 2.91 2.913 2.913s2.59-.983 2.185-2.185zm-146.78-9.56c0-1.4-1.66-2.98-3.688-3.51-2.57-.671-3.55-2.28-3.22-5.275.306-2.81-.49-4.31-2.292-4.31-3.73 0-2.59 5.55 2.277 11.147 4.38 5.04 6.92 5.75 6.923 1.948zm137.27-2.476c-1.87-1.87-3.41.946-1.879 3.429 1.16 1.88 1.59 1.88 2.216.007.426-1.28.275-2.82-.337-3.436zm-155.8-4.313c-3.82-3.82-7.23-3.33-7.226 1.035 0 1.39 1.86 2.83 4.14 3.206 6.27 1.03 7.15-.178 3.086-4.241zm177.88-1.207c-.611-.611-1.05.475-.966 2.415.088 2.14.524 2.58 1.112 1.112.532-1.33.466-2.92-.145-3.527zm-13.538-1.434c.714-3.74.404-4.22-1.626-2.535-2.8 2.32-3.4 7.15-.882 7.151.894 0 2.02-2.08 2.508-4.616zm-160.8-9.04c-.358-.3-3.14-1.11-6.172-1.799l-5.52-1.253 5.52 3.728c3.23 2.18 5.79 2.93 6.172 1.799.358-1.06.358-2.18 0-2.475zm-16.842-2.705c2.48-3.97 1.43-5.72-3.436-5.718-3.56 0-4.09 1.5-2.256 6.289 1.47 3.83 3.04 3.67 5.692-.571zm23.532-3.908c-.636-1.03-1.93-1.39-2.869-.811-2.55 1.58-2.08 2.68 1.156 2.681 1.58 0 2.35-.842 1.713-1.87zm26.698-.89c0-1.52-.779-2.76-1.731-2.76-2.32 0-3.98 2.87-2.512 4.343 2.07 2.07 4.24 1.26 4.243-1.583zm84.639-2.76c0-1.01-.877-1.84-1.949-1.84s-1.44.828-.811 1.84c.625 1.01 1.5 1.84 1.949 1.84s.811-.828.811-1.84zm-68.501-3.335c.401-1.2-.583-2.18-2.185-2.185s-2.91 1.31-2.913 2.913c0 3.25 3.96 2.68 5.098-.728zm-69.498-3.576c0-3.49-9.53-8.68-13.339-7.262-1.3.481-.089 1.74 2.759 2.868 2.78 1.11 5.06 3.28 5.06 4.819s1.24 2.81 2.76 2.806 2.76-1.45 2.76-3.231zm42.32-1.478c0-3.03-6.84-3.53-11.04-.811-2.24 1.45-2.01 1.79 1.271 1.812 2.22.016 4.55.87 5.187 1.898 1.51 2.44 4.58.498 4.581-2.899zm102.12 2.869c-.626-1.01-1.96-1.84-2.977-1.84s-1.33.828-.703 1.84 1.96 1.84 2.977 1.84 1.33-.828.703-1.84zm-67.159-3.68c0-1.01-.877-1.84-1.949-1.84s-1.44.828-.811 1.84c.625 1.01 1.5 1.84 1.949 1.84.446 0 .811-.828.811-1.84zm-58.879-4.6c0-1.52-1.2-2.76-2.656-2.76s-3.91-1.8-5.449-3.989c-2.5-3.58-2.5-4.21.062-6.077 2.57-1.88 2.58-2.32.017-4.444-2.36-1.96-3.54-1.71-6.953 1.477-2.26 2.11-3.11 3.83-1.882 3.833s3.05 2.15 4.049 4.778 3.46 5.21 5.474 5.735 3.66 1.69 3.658 2.582.828 1.62 1.84 1.625 1.84-1.24 1.84-2.76zm144.9-7.034c5.15-4.64 5.17-6.35.139-11.707-5.04-5.36-8.15-5.41-9.524-.15-1.17 4.47 2.32 9.57 3.788 5.552 1.18-3.21 4.22-2.88 4.217.46 0 1.52-1.29 2.76-2.869 2.76s-2.39.771-1.81 1.713.217 2.23-.811 2.869c-2.72 1.68-2.3 5.08.43 3.533 1.26-.716 4.16-2.98 6.44-5.029zm-176.18-3.221c0-1.53-6.01-.918-8.969.912-1.97 1.22-1.99 1.81-.132 2.964 2.22 1.37 9.1-1.56 9.101-3.876zm138.66 2.895c-1.12-2.92-4.34-3.83-4.345-1.227 0 1.95 2.01 3.99 3.929 3.987.812 0 .999-1.24.417-2.76zm-85.305-7.003c0-1.47-1.2-3.66-2.668-4.881-2.26-1.88-2.62-1.1-2.379 5.045.237 5.94.723 6.83 2.668 4.881 1.31-1.31 2.38-3.58 2.379-5.045zm98.821 1.709c-1.06-3.18-5.78-2.44-6.444 1.01-.446 2.32.361 2.83 3.27 2.066 2.12-.556 3.55-1.94 3.174-3.076zm9.738 1.614c0-1.52-1.24-2.76-2.76-2.76s-2.76 1.24-2.76 2.76 1.24 2.76 2.76 2.76 2.76-1.24 2.76-2.76zm-66.239-.811c0-.952-.828-2.24-1.84-2.869-1.01-.625-1.84.154-1.84 1.731s.828 2.87 1.84 2.869 1.84-.779 1.84-1.731zm31.28-4.766c0-4.3-4.38-8.14-6.666-5.849-.942.942 4.48 10.5 5.958 10.507.39 0 .708-2.1.708-4.658zm12.458-2.357c.401-1.2-.583-2.18-2.185-2.185s-2.91 1.31-2.913 2.913c0 3.25 3.96 2.68 5.098-.728zm50.101-2.734c0-3.77-.048-3.77-2.702-.263-3.5 4.62-3.52 6.48-.059 5.157 1.52-.583 2.76-2.78 2.76-4.894zm-40.48 1.469c0-1.52-.346-2.76-.77-2.76-.423 0-2.08-.503-3.68-1.117-1.87-.717-2.91-.114-2.911 1.687 0 2.54 2.34 4.42 5.98 4.805.759.08 1.38-1.1 1.38-2.615zm34.96-5.629c0-.446-.828-.811-1.84-.811s-1.84.877-1.84 1.949.828 1.44 1.84.811 1.84-1.5 1.84-1.949zm-97.519-1.731c0-1.52-.828-2.76-1.84-2.76s-1.84 1.24-1.84 2.76.828 2.76 1.84 2.76 1.84-1.24 1.84-2.76zm109.48.92c-.626-1.01-1.92-1.84-2.869-1.84-.952 0-1.73.828-1.731 1.84s1.29 1.84 2.869 1.84 2.36-.828 1.731-1.84zm19.32-1.949c0-.952-.828-1.73-1.84-1.731s-1.84 1.29-1.84 2.869.828 2.36 1.84 1.731 1.84-1.92 1.84-2.869zm-89.791-2.099c-1.72-1.72-2.7-1.72-4.416 0s-1.23 2.21 2.208 2.208 3.92-.491 2.208-2.208zm-105.25-1.104c0-.81-1.04-2.52-2.3-3.804-1.84-1.87-1.71-2.77.665-4.524 2.14-1.58 2.54-3.34 1.439-6.316-2.11-5.7-5.02-5.2-3.897.672.528 2.76-.055 5.4-1.372 6.21-2.97 1.84-.702 9.23 2.829 9.234 1.45 0 2.64-.662 2.636-1.472zm22.08-6.925c0-2.35.842-4.79 1.87-5.422 1.03-.636 1.37-1.97.756-2.958-1.56-2.52-6.07 1.51-6.024 5.399.019 1.7-.594 5.17-1.363 7.697-1.26 4.14-1.09 4.35 1.681 2.075 1.69-1.39 3.08-4.44 3.079-6.791zm62.904 7.14c-1.33-.532-2.92-.466-3.527.145-.611.612.475 1.05 2.415.966 2.14-.088 2.58-.524 1.112-1.112zm10.695-3.343c0-2.86-1.04-4.6-2.76-4.6-3.35 0-3.42.826-.477 5.545 2.93 4.7 3.24 4.61 3.237-.945zm25.76-2.76c0-2.02-.828-3.68-1.84-3.68s-1.84 1.66-1.84 3.68.828 3.68 1.84 3.68 1.84-1.66 1.84-3.68zm14.72.197c0-2.07-4.79-4-6.26-2.523-2.22 2.22-1.01 4.17 2.58 4.167 2.02 0 3.68-.739 3.68-1.643zm-123.31-11.697c.016-.759-1.21-1.38-2.732-1.38-3.12 0-3.23.322-1.584 4.604.938 2.44 1.49 2.57 2.732.61.856-1.35 1.57-3.08 1.584-3.834zm104.49 1.955c-.401-1.2-1.71-2.51-2.915-2.914-1.34-.448-1.76.393-1.068 2.185 1.28 3.34 5.09 4.04 3.983.729zm81.381-4.364c0-.446-1.29-.811-2.869-.811s-2.35.841-1.713 1.87c1.05 1.7 4.58.883 4.581-1.059zm16.56-2.48c0-1.71 1.02-4.14 2.274-5.389 1.8-1.8.952-2.16-4.14-1.748-5.23.429-6.36-.088-6.142-2.793.457-5.58-5.72-2.79-6.374 2.874-.476 4.12.145 5.04 3.392 5.044 2.38 0 4.35 1.43 4.904 3.553 1.12 4.27 6.09 3.01 6.086-1.542zm-171.12.64c0-1.58-.828-2.36-1.84-1.731s-1.84 1.92-1.84 2.869c0 .952.828 1.73 1.84 1.731s1.84-1.29 1.84-2.869zm153.68-11.508c-1.15-1.15-12 3.46-11.996 5.094 0 3.36 2.7 3.24 7.545-.345 2.91-2.15 4.91-4.29 4.451-4.749zm-11.996-1.398c0-1.71-1.25-2.65-3.068-2.3-4.62.895-5.25 5.2-.766 5.195 2.26 0 3.83-1.19 3.833-2.895zm-141.45-5.707c-1.6-2.76-1.96-2.84-2.009-.445-.06 3.1 1.88 5.89 3.179 4.585.43-.43-.097-2.29-1.171-4.14zm82.859-1.05c-2.11-2.11-6.34-.067-4.855 2.339.555.898 2.28 1.14 3.834.549 1.84-.708 2.2-1.71 1.021-2.887zm-90.366-4.241c2-2.41 1.75-3.02-1.615-3.895-2.3-.603-3.98-2.5-3.983-4.507 0-1.91-1.24-3.46-2.76-3.465s-2.76 1.14-2.76 2.535 1.24 3.56 2.76 4.825 2.76 3.43 2.76 4.825c0 3.37 2.66 3.22 5.597-.318zm155.01-.827c-.529-2.02-2.11-3.68-3.508-3.68-3.13 0-3.28 2.21-.337 5.152 3.3 3.3 4.93 2.67 3.845-1.472zm-28.555-8.569c3.01-.755 5.1-.408 5.539.919 1.32 3.95 4.52 2.18 3.455-1.914-.582-2.22-.197-5.08.855-6.349 1.5-1.8.416-2.06-4.985-1.185-5.91.96-6.73.684-5.727-1.931.898-2.34.098-3.05-3.429-3.051-5.49 0-7.7-4.4-4.289-8.516 2.12-2.55 1.96-2.86-1.174-2.258-2.21.421-3.87 2.48-4.258 5.272-.35 2.52-1.5 5.64-2.562 6.926-2.76 3.36-.009 5.26 4.001 2.756 2.58-1.61 4.11-1.59 6.349.07 2.65 1.96 2.67 2.73.211 7.441-1.51 2.89-2.15 6.2-1.416 7.36.878 1.4 1.54 1.02 1.965-1.11.351-1.77 2.81-3.76 5.466-4.431zm20.662-1.659c0-.446-.828-.811-1.84-.811s-1.84.877-1.84 1.949.828 1.44 1.84.811 1.84-1.5 1.84-1.949zm-145.36-2.651c0-1.01-.779-1.84-1.731-1.84s-2.24.828-2.869 1.84.154 1.84 1.731 1.84 2.87-.828 2.869-1.84zm81.861-12.91c-.636-1.03-1.93-1.39-2.869-.811-2.55 1.58-2.08 2.68 1.156 2.681 1.58 0 2.35-.842 1.713-1.87zm-49.661-3.65c-.626-1.01-1.5-1.84-1.949-1.84-.446 0-.811.828-.811 1.84s.877 1.84 1.949 1.84 1.44-.828.811-1.84zm77.289 228.15c1.84-2.03 3.74-3.29 4.227-2.804 1.24 1.24-3.35 6.5-5.668 6.496-1.04 0-.397-1.66 1.441-3.691zm11.95.011c0-1.01.365-1.84.811-1.84s1.32.828 1.949 1.84c.625 1.01.26 1.84-.811 1.84-1.07 0-1.95-.828-1.949-1.84zm64.548-25.481c-1.09-2.04-1.99-4.81-2-6.137-.006-1.33-1.24-4.78-2.748-7.668s-2.27-7.12-1.692-9.411c.702-2.8.095-4.53-1.852-5.275-3.68-1.41-3.78-4.91-.137-4.907 1.52 0 2.76.97 2.76 2.155s1.14 3.46 2.541 5.06c2.24 2.56 7.1 27.7 5.667 29.282-.302.34-1.44-1.06-2.538-3.099zm-16.112-.709c-3.8-5.92-6.1-11.2-5.222-12.118 1.39-1.39 10.1 7.24 10.146 10 0 3.43-3.19 4.81-4.923 2.118zm-202.99-13.31c0-2.76 6.2-10.2 8.517-10.179 1.42 0 4.24-1.04 6.285-2.3 3-1.86 4-1.83 5.245.164 2.59 4.16-1.81 10.8-7.076 10.653-2.58-.065-6.55.532-8.829 1.327s-4.14.946-4.14.336zm201.83-25.012c-.664-2.54.025-4.1 2.085-4.734 1.69-.518 4.52-1.71 6.272-2.647 6.68-3.57 6.96-.582.573 6.306-5.43 5.86-7.61 6.12-8.93 1.076zm-8.637-2.724c0-3.72 6.92-11.1 8.718-9.299.768.768-.051 2.46-1.821 3.749s-3.22 3.71-3.217 5.369-.828 3.02-1.84 3.017-1.84-1.28-1.84-2.837zm-244.72-24.698c0-2.2 6.5-5.83 7.911-4.42.569.569.59 2.2.045 3.615-1.11 2.89-7.96 3.58-7.956.805zm264.56-7.885c1.04-1.26 2.18-4.3 2.525-6.756.761-5.33 4.77-7.19 6.388-2.964.702 1.83-.503 4.77-3.08 7.513-4.3 4.58-9.35 6.49-5.834 2.206zm37.066-4.144c-1.52-1.52-6.4-3.82-10.834-5.1-7.85-2.27-12.4-6.86-6.792-6.856 1.53 0 3.05-1.86 3.373-4.14.823-5.79 3.59-4.99 8.304 2.409 2.22 3.48 5.8 8.61 7.96 11.391 4.14 5.34 2.69 7-2.011 2.296zm-300.36-18.664c-2.4-2.4-1.25-4.33 2.568-4.332 2.14 0 3.51.965 3.105 2.185-.896 2.69-3.97 3.85-5.673 2.147zm255.41-7.898c-6.83-1.32-7.6-7.5-1.263-10.234 3.08-1.33 4.04-2.98 3.475-5.98-.43-2.28-.094-4.14.746-4.14s1.1-1.11.581-2.465c-1.36-3.55 3.91-7.25 8.333-5.843 4.38 1.39 4.86 5.93 1.192 11.167-2.21 3.15-2.21 4.18 0 7.201 3.61 4.93 3.21 7.09-1.104 5.967-2.34-.611-3.68-.057-3.68 1.517 0 3.43-1.85 4.06-8.28 2.81zm-421.83-15.294c1.1-3.33 8.23-3.57 19.791-.656l10.12 2.549-15.333.204c-11.5.153-15.1-.37-14.578-2.097zm432.82-19.86c-1.8-2.91 2.72-7.28 7.526-7.279 5.76 0 7.66 3.67 3.493 6.719-4.05 2.96-9.37 3.23-11.019.56zm-247.43-7.279c0-1.01 1.19-1.84 2.651-1.84s3.16.828 3.789 1.84-.568 1.84-2.651 1.84c-2.08 0-3.79-.828-3.789-1.84zm24.84-13.926c-8.04-4.17-8.73-5.34-5.103-8.618 3.02-2.73 3.73-2.57 9.524 2.157 3.66 2.99 5.72 5.99 4.951 7.228-1.7 2.75-2.75 2.67-9.372-.768zm240.12 1.046c0-1.01.828-1.84 1.84-1.84s1.84.828 1.84 1.84-.828 1.84-1.84 1.84-1.84-.828-1.84-1.84zm-279.68-7.36c0-2.16 1.41-2.16 6.44 0 3.26 1.4 3.1 1.6-1.38 1.711-2.78.071-5.06-.699-5.06-1.711zm262.55-3.017c-.647-.647-.728-1.9-.18-2.79 1.18-1.9 4.42-.262 4.423 2.235 0 1.98-2.49 2.3-4.243.555zm-12.93-14.77c-2.74-2.74-1.14-7.97 2.453-7.973 2.7 0 3.68 1.23 3.68 4.6 0 4.33-3.34 6.17-6.133 3.373zm23.904-1.856c-2.73-2.73-1.11-7.96 2.469-7.957 2.02 0 3.68 1.14 3.68 2.535 0 3.12-4.49 7.08-6.149 5.423zm-228.87-12.749c.611-.611 2.2-.677 3.527-.145 1.47.587 1.03 1.02-1.112 1.112-1.94.08-3.03-.355-2.415-.966zm22.577-4.262c-2.14-4.14-2.4-7.4-1.127-14.219 1.78-9.52.051-15.4-4.534-15.367-1.48 0-2.7-1.1-2.695-2.439 0-1.34-2.15-4.45-4.775-6.9-4.32-4.03-9.94-12.8-9.945-15.454 0-.581 2.69 1.39 5.98 4.384s8.88 7.38 12.42 9.761c4.67 3.13 7.23 6.8 9.314 13.35 1.58 4.96 3.95 9.39 5.273 9.828 2.98.992 5.59-2.9 5.625-8.389.016-2.28.856-4.14 1.868-4.14s1.84 1.74 1.84 3.856 1.4 6.24 3.123 9.143c3.58 6.05 2.16 9-2.503 5.203-2.77-2.25-3.01-2.18-1.965.599 1.44 3.86-1.87 6.32-4.703 3.487-1.13-1.13-3.12-2.05-4.44-2.048-2.99 0-3.18 6.79-.221 7.777 3 .999.442 6.94-2.986 6.943-1.52 0-4.02-2.42-5.549-5.374zm-44.235-1.26c-3.54-2.72-3.47-2.81 1.84-2.238 3.04.326 5.31 1.42 5.06 2.432-.73 2.92-2.93 2.86-6.9-.194zm221.72-.726c0-1.01.828-1.84 1.84-1.84s1.84.828 1.84 1.84-.828 1.84-1.84 1.84-1.84-.828-1.84-1.84zm-190.26-3.393c-.637-1.03-.261-2.43.835-3.105 2.83-1.75 4.65.647 2.293 3.008-1.32 1.32-2.35 1.35-3.127.097zm78.022-2.063c0-2.12-1.16-4.3-2.579-4.85-1.42-.544-3-2.6-3.513-4.561-1.18-4.53-12.3-9.5-15.455-6.893-1.69 1.41-2.05.159-1.486-5.217.407-3.89.789-8.1.847-9.365.127-2.76 3.79-3.13 3.786-.386 0 3.6 7.83 12.5 10.19 11.604 1.3-.498 2.9.811 3.568 2.908 1.37 4.33 2.96 4.76 6.054 1.665 1.64-1.64 2.44-1.4 3.355.999.664 1.73.76 3.59.214 4.141s.645 2.63 2.648 4.636c4.61 4.61 3.59 7.85-2.71 8.594-3.95.468-4.92-.175-4.918-3.278zm126.1 1.499c2.96-5.16 7.05-8.92 9.712-8.924 2.22 0 2.08.75-.725 3.85-4.5 4.97-11 8.67-8.988 5.073zm-203.38-8.924c0-1.01.828-1.84 1.84-1.84s1.84.828 1.84 1.84-.828 1.84-1.84 1.84-1.84-.828-1.84-1.84zm167.94-4.14c.871-2.49 6.7-2.11 9.53.614 1.07 1.03-.588 1.69-4.293 1.686-4.04 0-5.77-.764-5.237-2.3zm-166.71-2.607c-.675-.675-1.23-2.33-1.227-3.68 0-3.26 4.86-3.16 6.116.127 1.49 3.87-2.02 6.42-4.89 3.553zm189.74-9.813c.479-3.26 1.92-5.52 3.515-5.52 1.51 0 2.23 1.02 1.632 2.3-.59 1.26-1.58 3.75-2.208 5.52-1.84 5.22-3.82 3.68-2.939-2.3zm-47.389-3.22c.056-4.85.172-4.91 2.76-1.488 3.44 4.55 3.42 6.55-.059 6.548-1.8 0-2.74-1.76-2.702-5.06zm-110.46.402c0-2.78 4.85-5.82 6.563-4.113.486.486.362 2.24-.276 3.907-1.46 3.82-6.29 3.97-6.286.206zm149.04.978c0-1.01.828-1.84 1.84-1.84s1.84.828 1.84 1.84-.828 1.84-1.84 1.84-1.84-.828-1.84-1.84zm-138.21-9.728c-3.46-4.77-1.64-12.4 2.965-12.352 4.26 0 5.76 5.65 2.045 7.724-2.02 1.13-2.73 3-2 5.292 1.45 4.58.663 4.4-3.01-.665zm78.757 2.88c-5.55-.834-5.79-3.64-.594-6.82 2.53-1.55 3.79-1.2 5.87 1.6 2.88 3.88 3.46 6.71 1.272 6.273-.759-.152-3.71-.625-6.549-1.053zm32.093-4.817c-1.92-2.32-1.69-3.14 1.365-4.771 4.55-2.44 6.44.068 3.295 4.372-2.08 2.84-2.6 2.89-4.66.399zm-57.005-10.203c-3.2-2.03-1.99-8.49 1.586-8.491 1.62 0 2.97 2.07 3.317 5.06.603 5.24-.655 6.12-4.903 3.431z"/> + <path fill="#a86d0c" d="m436.97 729.85c-8.18-12.1-8.78-13.8-2.972-8.363 6.33 5.88 12.8 16.2 10.122 16.182-1.02 0-4.24-3.52-7.151-7.82zm-55.601-13.34c0-1.52.828-2.76 1.84-2.76s1.84 1.24 1.84 2.76-.828 2.76-1.84 2.76-1.84-1.24-1.84-2.76zm-242.71-88.927c1.08-3.09 3.12-6.59 4.552-7.77 2.2-1.82 2.29-1.3.635 3.466-1.08 3.09-3.12 6.59-4.552 7.77-2.2 1.82-2.29 1.3-.635-3.466zm455.03-24.208c-5.96-3.02-11.6-5.51-12.551-5.52-3.08-.042-24.1-14.6-29.663-20.48-5.19-5.53-5.23-5.68-.825-3.452 2.53 1.28 9.82 5.94 16.188 10.358s12.6 8.03 13.9 8.03c1.27 0 6.21 2.47 10.966 5.489s10.7 6.01 13.24 6.639c4.83 1.21 6.35 4.43 2.085 4.432-1.38 0-7.38-2.47-13.34-5.497zm-211.24-1.616c-.793-1.28-.944-2.83-.337-3.436 1.65-1.65 3.44.775 2.553 3.443-.623 1.87-1.06 1.87-2.216-.007zm-53.826-28.921c-1.32-3.44 1.95-7.2 4.754-5.464 2.92 1.81 2.44 5.98-.829 7.231-1.64.629-3.29-.114-3.924-1.767zm46.783-1.685c.484-2.53 2.02-4.6 3.425-4.6 3.13 0 3.32 4 .338 6.992-3.44 3.44-4.72 2.62-3.762-2.392zm10.965 3.328c-2.43-4.13 1.16-12.8 6.654-16.139 3.21-1.93 6.24-3.56 6.751-3.628 2.18-.286 9.49-8.92 11.068-13.074 1.9-4.99 7.48-6.02 10.818-2 2.89 3.48.598 8.45-4.857 10.525-3.48 1.32-4.08 2.3-2.547 4.141 2.69 3.24-7.44 11.2-10.435 8.198-2.84-2.84-7.34-.503-8.044 4.186-.638 4.28-7.92 10.3-9.408 7.791zm-46.012-4.228c.605-2.31 2.22-3.65 3.996-3.304 4.41.848 3.62 5.95-1.014 6.613-3.26.465-3.81-.144-2.982-3.309zm20.778-.787c0-1.6 1.31-2.91 2.913-2.913s2.59.983 2.185 2.185c-1.14 3.41-5.1 3.98-5.098.728zm-11.04-1.885c0-.446.828-1.32 1.84-1.949s1.84-.26 1.84.811c0 1.07-.828 1.95-1.84 1.949s-1.84-.365-1.84-.811zm184.74-5.169-3.505-4.14 4.14 3.505c2.28 1.93 4.14 3.79 4.14 4.14 0 1.47-1.48.385-4.775-3.505zm-67.752-10.333c-.793-1.28-.944-2.83-.337-3.436 1.65-1.65 3.44.775 2.553 3.443-.623 1.87-1.06 1.87-2.216-.007zm-181.39-4.738c0-1.58.828-2.87 1.84-2.869s1.84.779 1.84 1.731-.828 2.24-1.84 2.869c-1.01.625-1.84-.154-1.84-1.731zm231.28-3.329c-2.43-3.29-5.05-7.22-5.816-8.74-1.75-3.46 7.58 7.12 10.14 11.5 3.13 5.36.387 3.61-4.324-2.76zm-139.95 1.369c-.58-1.51-.302-2.75.619-2.749 2.49 0 4.04 3.27 2.114 4.462-.922.57-2.15-.201-2.732-1.713zm-20.983-4.589c-1.26-2.02-3.82-3.68-5.677-3.68s-4.86-1.64-6.67-3.637c-3.86-4.26-7.12-3.11-5.51 1.951.728 2.3.245 3.52-1.385 3.525-1.38 0-3.3-2.64-4.264-5.859-2.47-8.22-7.33-9.58-5.74-1.616.991 4.95.667 5.8-2.021 5.276-1.76-.342-3.2-2.26-3.203-4.271-.001-2.02-1.24-3.65-2.76-3.65-1.76 0-2.6 1.49-2.319 4.14.516 4.88-2.85 5.59-4.343.92-2.36-7.4-5.17-11.5-7.906-11.558-5.62-.113-9.35-4.76-9.349-11.644 0-6.42-2.2-8.74-4.6-4.857-2.62 4.25-4.58 1.34-3.719-5.52.535-4.26.156-7.36-.898-7.36-1 0-1.82.828-1.823 1.84s-.828 1.84-1.84 1.84-1.84-2.07-1.84-4.6c0-2.9-1.04-4.6-2.818-4.6-4.42 0-5.43-5.38-1.553-8.255 3.26-2.42 3.27-2.69.256-4.972-1.76-1.33-3.7-4.98-4.314-8.112-.887-4.52-.133-6.76 3.655-10.849 5.66-6.1 5.69-6.3 1.578-9.304-3.02-2.21-3.01-2.54.254-6.148 2.68-2.96 2.97-4.38 1.322-6.375-1.68-2.02-.956-3.82 3.419-8.502 3.05-3.27 5.08-6.7 4.501-7.629-1.52-2.45 6.91-20.2 9.225-19.448 1.08.353 2.42 3.89 2.995 7.858l1.041 7.216 2.226-5.303c1.22-2.92 1.73-6.85 1.133-8.749-.666-2.1-.071-3.84 1.52-4.449 1.64-.631 2.29-2.68 1.752-5.511-.505-2.64.002-4.51 1.228-4.508 1.31 0 1.66-1.72.935-4.6-.859-3.42-.426-4.6 1.696-4.6 1.57 0 3.3.734 3.859 1.632.555.898 4.45.445 8.669-1.008 5-1.72 8.29-2.01 9.463-.837 2.66 2.66 12.1-4.86 11.093-8.82-.541-2.07.823-3.9 3.987-5.337 6.46-2.94 8.32-2.76 8.316.826 0 2.93 4.9 7.85 7.944 7.964.827.032.978-1.6.336-3.621-1.58-4.98 2.26-4.76 7.961.46l4.518 4.14-1.215-5.06c-1.45-6.04-.375-6.18 10.829-1.374 4.73 2.03 9.24 3.29 10.027 2.803 2.61-1.62 7.59 5.69 6.254 9.18-1.06 2.76-.561 3.14 2.919 2.225 3.14-.822 4.43-.206 5.125 2.464.512 1.96 1.87 3.57 3.017 3.585 2.39.028 22.2 17.1 33.825 29.172 8.52 8.84 9.87 13.1 4.14 13.123-3.66 0-4.58 2.42-3.938 10.315.173 2.13-.935 6.27-2.463 9.2-1.53 2.93-2.78 6.36-2.788 7.625s-1.25 2.3-2.771 2.3c-3.33 0-3.56 2.15-.552 5.152 3.56 3.56-.822 6.76-5.69 4.154-3.16-1.69-3.88-1.55-3.878.75 0 1.79 1.69 2.82 4.6 2.825 2.53 0 4.6.828 4.6 1.84s-1.09 1.84-2.414 1.84c-2.64 0-10.5 9.66-10.466 12.929 0 1.2-1.51 1.56-3.664.876-4.73-1.5-8.17.503-5.789 3.379 2.62 3.17.313 12.1-3.684 14.233-3.34 1.79-3.3 2.11 1.145 7.938 5.8 7.61 5.79 9.48-.063 13.316-3.61 2.37-5.2 2.57-6.868.902s-1.22-2.42 1.935-3.248c4.52-1.18 5.8-8 1.502-8.005-1.43 0-2.88-.7-3.22-1.555s-3.1-2.11-6.133-2.788l-5.52-1.233 5.06 3.862c2.78 2.12 5.06 4.92 5.06 6.213 0 3.32-8.88 1.35-13.145-2.924-3.43-3.43-8.16-4.8-6.328-1.823.541.875.006 6.25-1.189 11.947-2.03 9.66-2.58 10.4-8.255 11.497-3.35.628-6.49 1.8-6.985 2.6s-2.56 1.03-4.58.497c-2.06-.538-3.68-.056-3.678 1.093 0 3.23-2.57 2.41-5.093-1.625zm-4.107-10.228c0-3.04-2.91-3.55-4.6-.811-1.5 2.43.7 5.87 2.887 4.521.942-.582 1.71-2.25 1.713-3.71zm-47.84-55.091c0-1.52-.779-2.76-1.731-2.76-2.32 0-3.98 2.87-2.512 4.343 2.07 2.07 4.24 1.26 4.243-1.583zm84.639-2.76c0-1.01-.877-1.84-1.949-1.84s-1.44.828-.811 1.84 1.5 1.84 1.949 1.84c.446 0 .811-.828.811-1.84zm-68.501-3.335c.401-1.2-.583-2.18-2.185-2.185s-2.91 1.31-2.913 2.913c0 3.25 3.96 2.68 5.098-.728zm-27.178-4.949c0-1.86-2.49-2.49-9.2-2.338-5.06.115-9.2.896-9.2 1.736 0 1.66 2.39 2.11 8.564 1.621 2.18-.172 4.52.578 5.187 1.666 1.54 2.49 4.65.698 4.649-2.686zm102.12 2.764c-.625-1.01-1.96-1.84-2.977-1.84s-1.33.828-.703 1.84 1.96 1.84 2.977 1.84 1.33-.828.703-1.84zm-67.159-3.68c0-1.01-.877-1.84-1.949-1.84s-1.44.828-.811 1.84 1.5 1.84 1.949 1.84.811-.828.811-1.84zm86.019-11.634c5.15-4.64 5.17-6.35.139-11.707-5.04-5.36-8.15-5.41-9.524-.15-1.17 4.47 2.32 9.57 3.788 5.552 1.18-3.21 4.22-2.88 4.217.46 0 1.52-1.29 2.76-2.869 2.76s-2.39.771-1.81 1.713.217 2.23-.811 2.869c-2.72 1.68-2.3 5.08.43 3.533 1.26-.716 4.16-2.98 6.44-5.029zm-123.63-9.764c-1.51-6.03-5.78-4.51-5.095 1.812.291 2.68-.304 4.87-1.322 4.867s-1.36 1.28-.756 2.856c1.92 5.01 8.6-3.86 7.173-9.535zm86.12 9.439c-1.12-2.92-4.34-3.83-4.345-1.227 0 1.95 2.01 3.99 3.929 3.987.812 0 .999-1.24.417-2.76zm13.516-5.294c-1.06-3.18-5.78-2.44-6.444 1.01-.446 2.32.361 2.83 3.27 2.066 2.12-.556 3.55-1.94 3.174-3.076zm9.738 1.614c0-1.52-1.24-2.76-2.76-2.76s-2.76 1.24-2.76 2.76 1.24 2.76 2.76 2.76 2.76-1.24 2.76-2.76zm-66.239-.811c0-.952-.828-2.24-1.84-2.869s-1.84.154-1.84 1.731.828 2.87 1.84 2.869 1.84-.779 1.84-1.731zm31.28-4.766c0-4.3-4.38-8.14-6.666-5.849-.942.942 4.48 10.5 5.958 10.507.39 0 .708-2.1.708-4.658zm12.458-2.357c.401-1.2-.583-2.18-2.185-2.185s-2.91 1.31-2.913 2.913c0 3.25 3.96 2.68 5.098-.728zm50.101-2.734c0-3.77-.048-3.77-2.702-.263-3.5 4.62-3.52 6.48-.059 5.157 1.52-.583 2.76-2.78 2.76-4.894zm-40.48 1.469c0-1.52-.346-2.76-.77-2.76-.423 0-2.08-.503-3.68-1.117-1.87-.717-2.91-.114-2.911 1.687 0 2.54 2.34 4.42 5.98 4.805.759.08 1.38-1.1 1.38-2.615zm34.96-5.629c0-.446-.828-.811-1.84-.811s-1.84.877-1.84 1.949.828 1.44 1.84.811 1.84-1.5 1.84-1.949zm-97.519-1.731c0-1.52-.828-2.76-1.84-2.76s-1.84 1.24-1.84 2.76.828 2.76 1.84 2.76 1.84-1.24 1.84-2.76zm110.4.92c-3.57-2.3-5.52-2.3-5.52 0 0 1.01 1.86 1.83 4.14 1.812 3.35-.023 3.61-.37 1.38-1.812zm-149.04-1.84c0-1.01-.828-1.84-1.84-1.84s-1.84.828-1.84 1.84.828 1.84 1.84 1.84 1.84-.828 1.84-1.84zm77.647-2.208c-1.72-1.72-2.7-1.72-4.416 0s-1.23 2.21 2.208 2.208 3.92-.491 2.208-2.208zm-20.263-.889c-1.33-.531-2.92-.466-3.527.145-.611.611.475 1.05 2.415.966 2.14-.088 2.58-.524 1.112-1.112zm10.695-3.343c0-2.86-1.04-4.6-2.76-4.6-3.35 0-3.42.826-.477 5.545 2.93 4.7 3.24 4.61 3.237-.945zm25.76-2.76c0-2.02-.828-3.68-1.84-3.68s-1.84 1.66-1.84 3.68.828 3.68 1.84 3.68 1.84-1.66 1.84-3.68zm14.72.197c0-2.07-4.79-4-6.26-2.524-2.22 2.22-1.01 4.17 2.58 4.167 2.02 0 3.68-.739 3.68-1.643zm-18.821-9.742c-.401-1.2-1.71-2.51-2.915-2.914-1.34-.448-1.76.393-1.068 2.185 1.28 3.34 5.09 4.04 3.983.729zm9.906-25.867c-2.11-2.11-6.34-.067-4.855 2.339.555.898 2.28 1.14 3.834.549 1.84-.708 2.2-1.71 1.021-2.887zm16.276 149.49c0-1.01.779-1.84 1.731-1.84s2.24.828 2.869 1.84-.154 1.84-1.731 1.84-2.87-.828-2.869-1.84zm76.074-.999c-.599-1.56-.628-3.3-.065-3.864 1.61-1.61 4.95 1.12 4.95 4.052 0 3.53-3.51 3.4-4.885-.188zm-56.885-.687c-2.11-2.04-.328-3.83 3.81-3.833 2.53 0 4.7-.828 4.83-1.84.127-1.01.334-2.88.46-4.14.127-1.26 2.51-2.56 5.29-2.882 3.48-.4 5.06-1.64 5.06-3.968 0-2.48.985-3.13 3.68-2.423 4.32 1.13 4.44 1.86 1.38 8.432-1.26 2.72-3.8 4.96-5.644 4.967-2.43.01-3.04.957-2.249 3.466.969 3.05.12 3.42-7.366 3.22-4.65-.127-8.82-.576-9.251-.998zm-31.725-7.628c.443-1.33 1.89-2.78 3.22-3.22 1.38-.46 2.07.23 1.61 1.61-.443 1.33-1.89 2.78-3.22 3.22-1.38.46-2.07-.23-1.61-1.61zm-103.38-11.953c0-1.58.828-2.36 1.84-1.731 1.01.625 1.84 1.92 1.84 2.869 0 .952-.828 1.73-1.84 1.731s-1.84-1.29-1.84-2.869zm132.79-4.491c.926-2.78 3.88-3.06 4.753-.46.422 1.26-.613 2.3-2.3 2.3s-2.79-.828-2.453-1.84zm18.229-.756c-1.47-1.78-1.54-2.97-.225-3.789 2.57-1.59 5.61.435 5.609 3.733 0 3.38-2.6 3.4-5.384.055zm56.115-.295c-3.18-3.18-3.93-9.99-1.099-9.989 1.6 0 7.41 9.31 7.407 11.869 0 1.99-3.47.959-6.309-1.88zm-217.25-4.469c-.625-1.01-.26-1.84.811-1.84s1.95.828 1.949 1.84-.365 1.84-.811 1.84-1.32-.828-1.949-1.84zm172.04-.92c0-1.85 1.21-2.8 3.089-2.435 4.1.79 4.19 4.06.131 4.845-2.01.388-3.22-.515-3.22-2.41zm-204.24-.723c0-2.26 5.18-4.07 6.331-2.213.511.827.399 2.03-.248 2.68-1.75 1.75-6.08 1.42-6.083-.467zm191.36-5.717c0-4.18 4.62-5.01 6.116-1.1 1.16 3.01-.202 4.78-3.663 4.78-1.35 0-2.45-1.66-2.453-3.68zm-222.22-9.545c1.14-3.41 5.1-3.98 5.098-.728 0 1.6-1.31 2.91-2.913 2.913s-2.59-.983-2.185-2.185zm25.338.57c0-.888 1.17-2.58 2.596-3.769 2.88-2.39 5.83.326 3.844 3.544-1.4 2.27-6.44 2.44-6.44.225zm218.15-1.889c-1.46-2.37 2.82-9.38 5.728-9.377 3.26 0 1.64 10-1.728 10.682-1.56.309-3.36-.278-4-1.305zm-191.93-9.837c1.16-3.48 6.9-3.98 6.901-.595 0 1.71-1.57 2.9-3.833 2.895-2.25 0-3.52-.951-3.068-2.3zm-28.672-4.447c-2.6-2.6-1.16-7.97 2.147-7.973 4.52 0 5.61 1.36 4.492 5.627-.925 3.54-4.27 4.72-6.639 2.347zm267.78-4.661c-2.52-2.52-2.99-8.83-.653-8.832 2.21 0 7.64 6.32 7.645 8.885 0 2.8-4.17 2.77-6.992-.053zm-39.008-6.992c0-1.01 1.24-1.84 2.76-1.84s2.76.828 2.76 1.84-1.24 1.84-2.76 1.84-2.76-.828-2.76-1.84zm-217.86-1.553c-.637-1.03-.261-2.43.835-3.105 2.83-1.75 4.65.647 2.293 3.008-1.32 1.32-2.35 1.35-3.127.096zm21.827-5.93c-.667-1.08-.771-2.4-.231-2.944 1.32-1.32 4.91 1 4.907 3.175 0 2.35-3.18 2.2-4.676-.231zm-45.004-7.183c0-.982-3.02-1.6-6.7-1.38-4.02.243-7.02-.515-7.513-1.895-.873-2.47 4.84-3.04 11.785-1.174 4.04 1.08 7.52 6.23 4.21 6.234-.98 0-1.78-.803-1.782-1.785zm242.88-1.698c0-.904 1.31-2.15 2.911-2.76 4.11-1.58 4.45-1.45 4.45 1.643 0 1.53-1.64 2.76-3.68 2.76-2.02 0-3.68-.739-3.68-1.643zm-419.07-9.857c1.1-3.33 8.23-3.57 19.791-.656l10.12 2.549-15.333.204c-11.5.153-15.1-.37-14.578-2.097zm221.37-1.223c-.592-.959-.293-2.23.666-2.82s2.23-.293 2.82.666c.593.959.293 2.23-.666 2.82-.959.593-2.23.293-2.82-.666zm209.92-5.114c-2.07-2.07-1.26-4.24 1.583-4.243 1.52 0 2.76.779 2.76 1.731 0 2.32-2.87 3.98-4.343 2.512zm-233.01-2.403c0-1.01.365-1.84.811-1.84s1.32.828 1.949 1.84c.625 1.01.26 1.84-.811 1.84s-1.95-.828-1.949-1.84zm222.64-11.04c0-1.01 1.24-1.84 2.76-1.84s2.76.828 2.76 1.84-1.24 1.84-2.76 1.84-2.76-.828-2.76-1.84zm15.567-1.957c-1.74-2.82.025-3.96 4.975-3.211l4.298.649-4.028 2.265c-2.81 1.58-4.4 1.67-5.244.297zm-6.083-10.098c.35-1.8 1.75-3.65 3.111-4.104 1.58-.527 2.25.357 1.84 2.455-.35 1.8-1.75 3.65-3.111 4.104-1.58.527-2.25-.357-1.84-2.455zm-24.204-.824c0-1.01.365-1.84.811-1.84s1.32.828 1.949 1.84c.625 1.01.26 1.84-.811 1.84-1.07 0-1.95-.828-1.949-1.84zm15.201-7.917c.398-1.21 3.85-2.46 7.675-2.786 5-.419 6.73.076 6.17 1.762-.43 1.29-3.88 2.54-7.675 2.786-4.68.299-6.66-.266-6.17-1.762zm-172.52-3.123c-.625-1.01-.26-1.84.811-1.84s1.95.828 1.949 1.84-.365 1.84-.811 1.84-1.32-.828-1.949-1.84zm151.8 0c0-1.01 1.24-1.84 2.76-1.84s2.76.828 2.76 1.84-1.24 1.84-2.76 1.84-2.76-.828-2.76-1.84zm12.88-3.68c0-1.01 1.24-1.84 2.76-1.84s2.76.828 2.76 1.84-1.24 1.84-2.76 1.84-2.76-.828-2.76-1.84zm-23.254-2.76c.72-1.88-.099-2.76-2.563-2.76-4.18 0-4.88-3.32-1.005-4.8 3.09-1.19 10.9 5.98 9.301 8.547-1.83 2.96-6.91 2.09-5.733-.987zm15.894-7.36c0-1.52 1.63-2.76 3.622-2.76 2.46 0 3.28.883 2.563 2.76-.583 1.52-2.21 2.76-3.622 2.76s-2.56-1.24-2.563-2.76zm-138-6.44c0-1.01.828-1.84 1.84-1.84s1.84.828 1.84 1.84-.828 1.84-1.84 1.84-1.84-.828-1.84-1.84zm95.679-2.76c0-1.52.828-2.76 1.84-2.76s1.84 1.24 1.84 2.76-.828 2.76-1.84 2.76-1.84-1.24-1.84-2.76zm-77.279-1.84c0-1.52 1.24-2.76 2.76-2.76s2.76 1.24 2.76 2.76-1.24 2.76-2.76 2.76-2.76-1.24-2.76-2.76zm103.04.225c0-1.39 1.28-3.6 2.838-4.89 2.24-1.86 3.31-1.88 5.06-.101 1.74 1.76 1.45 2.83-1.35 4.89-4.49 3.32-6.55 3.35-6.548.101zm31.28-.072c0-1.6 1.31-2.91 2.913-2.913 3.25 0 2.68 3.96-.728 5.098-1.2.401-2.18-.583-2.185-2.185zm22.08-1.885c0-3.3 3.04-5.32 5.609-3.733 1.32.815 1.25 2.01-.225 3.789-2.78 3.35-5.38 3.32-5.384-.055zm-168.36-4.709c-1.5-2.43.7-5.87 2.887-4.521 2.24 1.38 2.22 6.36-.019 6.361-.952 0-2.24-.828-2.869-1.84zm104.25-1.09c.829-4.3 7.06-5.9 7.065-1.805 0 1.59-.346 2.9-.77 2.895-.423 0-2.16.535-3.867 1.188-2.33.895-2.93.331-2.429-2.279zm-26.054-3.51c0-1.52.828-2.76 1.84-2.76s1.84 1.24 1.84 2.76-.828 2.76-1.84 2.76-1.84-1.24-1.84-2.76zm14.72 1.071c0-3.72 2.37-7.51 4.688-7.51 4.21 0 5.24 4.12 1.681 6.719-3.95 2.89-6.37 3.19-6.369.791zm-49.278-2.275c.956-2.87 4.9-3.34 5.579-.661.253.998-1.08 2.11-2.972 2.476-2.24.43-3.14-.203-2.607-1.815zm-122.82-3.488c-1.69-2.74-.346-3.7 2.607-1.878 1.58.978 1.77 1.93.534 2.69-1.05.649-2.46.283-3.141-.813zm134.45-1.621c-.582-.942-.217-2.23.811-2.869 1.03-.636 1.87.135 1.87 1.713 0 3.23-1.1 3.71-2.681 1.156zm-49.433-2.705c-.596-1.55-.349-3.28.549-3.834 2.41-1.49 4.45 2.75 2.339 4.855-1.18 1.18-2.18.824-2.887-1.021zm59.475.846c0-.952.828-2.24 1.84-2.869 1.01-.625 1.84.154 1.84 1.731s-.828 2.87-1.84 2.869-1.84-.779-1.84-1.731zm90.317-3.688c1.6-2.48 3.98-4.86 5.29-5.29 3.87-1.29 1.17 3.71-3.708 6.872l-4.499 2.917zm-122.44.026c-.582-.942-.217-2.23.811-2.869 1.03-.636 1.87.135 1.87 1.713 0 3.23-1.1 3.71-2.681 1.156zm45.001-.939c0-3.3 3.04-5.32 5.609-3.733 1.32.815 1.25 2.01-.225 3.789-2.78 3.35-5.38 3.32-5.384-.055zm11.04 1.84c0-.446.828-1.32 1.84-1.949s1.84-.26 1.84.811c0 1.07-.828 1.95-1.84 1.949s-1.84-.365-1.84-.811zm-122.01-9.19c-2.1-1.6-2.61-2.97-1.38-3.73 1.07-.663 1.95-.455 1.95.462s1.86 2.57 4.14 3.664c2.5 1.2 3.04 2.02 1.38 2.063-1.52.036-4.26-1.07-6.09-2.459zm76.929.802c.626-1.01 1.92-1.84 2.869-1.84.952 0 1.73.828 1.731 1.84s-1.29 1.84-2.869 1.84-2.36-.828-1.731-1.84zm15.64-4.375c0-3.72 4.87-7.37 6.439-4.827 1.82 2.94-.355 7.36-3.622 7.361-1.55 0-2.82-1.14-2.818-2.535zm11.04-1.037c0-.952.828-2.24 1.84-2.869 1.01-.625 1.84.154 1.84 1.731s-.828 2.87-1.84 2.869-1.84-.779-1.84-1.731zm-118.37-1.335c-.675-.675-1.23-2.33-1.227-3.68 0-3.26 4.86-3.16 6.116.127 1.49 3.87-2.02 6.42-4.89 3.553zm6.593-6.796c-2.28-1.13-4.14-2.95-4.14-4.053s-2.15-4.01-4.775-6.464c-2.63-2.45-5.99-6.79-7.472-9.645-2.53-4.86-2.49-5.07.635-3.363 6.31 3.45 24.7 22.3 23.578 24.177-1.34 2.17-2.28 2.09-7.826-.652zm49.854-.337c-.599-1.56-.628-3.3-.065-3.864 1.61-1.61 4.95 1.12 4.95 4.052 0 3.53-3.51 3.4-4.885-.188zm133.23-1.761c.484-2.53 1.7-4.6 2.702-4.6s1.32 1.31.706 2.911-1.12 3.67-1.117 4.6-.713 1.69-1.585 1.69-1.19-2.07-.706-4.6zm-8.75-1.731c0-.446.828-1.32 1.84-1.949 1.01-.625 1.84-.26 1.84.811s-.828 1.95-1.84 1.949-1.84-.365-1.84-.811zm-138.62-11.467c-2.13-2.13-1.31-7.44 1.523-9.783 2.21-1.84 2.95-1.72 3.844.609 1.22 3.18-3.43 11.1-5.367 9.174zm111.37-2.557c.443-1.33 1.89-2.78 3.22-3.22 1.38-.46 2.07.23 1.61 1.61-.443 1.33-1.89 2.78-3.22 3.22-1.38.46-2.07-.23-1.61-1.61zm-58.403-11.085c-.68-1.1-.387-2.85.651-3.888 2.32-2.32 5.89-.361 5.888 3.237 0 3.1-4.74 3.57-6.539.651z"/> +</svg> diff --git a/images/minetest_logo.svg b/images/minetest_logo.svg new file mode 100644 index 00000000..db6bdbf7 --- /dev/null +++ b/images/minetest_logo.svg @@ -0,0 +1 @@ +<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="48" height="48" id="svg2856" version="1.1"><style>.s0{fill:#2e3436;filter:url(#filter3864);opacity:0.3;}.s1{fill:#4e9a06;stroke-linecap:round;stroke:#316004;}</style><defs id="defs2858"><filter id="filter3864"><feGaussianBlur stdDeviation="0.2" id="feGaussianBlur3866"/></filter></defs><metadata id="metadata2861"/><g id="layer1"><path d="M0 16 0 28 21 40.1l21-12.4 0-11.5L20.8 4 0 16z" id="path3047" transform="translate(3.4641013,6)" style="fill:#e9b96e;stroke-linecap:square;stroke:#573a0d"/><path d="m8.5 30.9-2-1.2 0 6L17.3 42l0-2-1.7-1 0-2L13.5 35.8l0-4-5-2.9 0 2z" id="path3831" style="fill:#2e3436;stroke-linecap:round;stroke:#2e3436"/><path d="m6.9 36 3.5-2 3.5 2 1.6 0.9 0 2 2 1.2 0 2L6.9 36z" id="path3870" style="fill:#555753;stroke:#2e3436"/><path d="M26 19 31.5 22.2l0 2L38.1 28 41.6 26 45.5 23.7l0 2.5 0-4L32.9 15 26 19z" id="path3851" style="fill:#fce94f;stroke-linecap:round;stroke-linejoin:round;stroke:#625802"/><path d="m24.8 18.3 8.7-5 0 2-8.7 5 0-2z" id="path5684" style="fill:#e9b96e;stroke-dashoffset:0.5;stroke-linecap:round;stroke-linejoin:round;stroke:#573a0d"/><path d="M26 5 3.5 18 17.5 26.1 31.5 18.2 24.8 14.3 33.5 9.3 26 5z" id="path3821" transform="translate(0,4)" style="fill:#73d216;stroke-linecap:square;stroke-linejoin:round;stroke:#325b09"/><path d="m17.5 28.1 0 2 1.6 0.9 0 2 5.4 3.1 12-7.1 0-2.1 2-1.2 0-1.5-7-4-14 7.9z" id="path3825" transform="translate(0,4)" style="fill:#729fcf;stroke-linecap:round;stroke:#19314b"/><g id="g5691"><path id="path3862" d="m13.9 20 6.9 4-6.9 4-6.9-4 6.9-4z" class="s0"/><g id="g3858"><path d="m15.6 21 1.7 1 1.7-1 0-6-1.7-1-1.7 1 0 6z" id="path3833" transform="translate(-3.4641015,2)" style="fill:#c17d11;stroke-linecap:round;stroke:#8f5902"/><path d="M10 13.8 17.3 18l6.6-3.8 0-8.3L17.3 2 10 6.2l0 7.5z" id="path3837" transform="translate(-3.4641015,2)" class="s1"/></g></g><g id="g5686" transform="translate(-4.2591582e-7,2)"><path transform="translate(24.248712,-2)" d="m13.9 20 5.2 3-5.2 3-5.2-3 5.2-3z" id="path3868" class="s0"/><path d="M15.7 21.1 17.3 22l1.4-0.8 0-8.4L17.3 12l-1.6 1.1 0 8z" id="path3853" transform="translate(20.78461,0)" class="s1"/></g><path d="M12.1 33 11.3 32.5" id="path3872" style="fill:none;stroke-dasharray:0.5;stroke-dashoffset:0.3;stroke-width:0.5;stroke:#ef2929"/><path d="m45.5 26.7-4 2.3 0 1-2 1.2 0 2-2 1.2 0 4 8-4.6 0-7z" id="path3874" style="fill:#888a85;stroke-dashoffset:0.5;stroke-linecap:round;stroke:#2e3436"/></g></svg> \ No newline at end of file diff --git a/images/mobilizon_logo.png b/images/mobilizon_logo.png new file mode 100644 index 00000000..5f50cf05 Binary files /dev/null and b/images/mobilizon_logo.png differ diff --git a/images/mobilizon_logo.svg b/images/mobilizon_logo.svg new file mode 100644 index 00000000..1130b11f --- /dev/null +++ b/images/mobilizon_logo.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 248.16 46.78"><title>Fichier 1</title><g id="e11b986d-bcba-4466-9834-a5e44ebfe12a" data-name="Calque 2"><g id="ab18705c-9f78-4d57-8f04-bd2f1ccdd04c" data-name="header"><path d="M0,46.07,3.18,5.27a29.88,29.88,0,0,1,5.07-.36,27.74,27.74,0,0,1,4.95.36l4.86,17.16A92.19,92.19,0,0,1,20.4,32.51h.36A92.19,92.19,0,0,1,23.1,22.43L28,5.27a29.23,29.23,0,0,1,5-.36,29.23,29.23,0,0,1,5,.36l3.18,40.8a13.61,13.61,0,0,1-3.63.42,23.41,23.41,0,0,1-3.63-.24l-1.2-19.92q-.36-5.52-.48-12.84H31.8L24.48,40a25.62,25.62,0,0,1-4,.3,23.36,23.36,0,0,1-3.84-.3L9.36,13.49H9q-.3,8.94-.48,12.84L7.26,46.25a22.47,22.47,0,0,1-3.6.24A13.75,13.75,0,0,1,0,46.07Z" transform="translate(0 -0.25)" style="fill:#3f3d56"/><path d="M74,31.31q0,8-4.26,12.3a12.21,12.21,0,0,1-9,3.42,12.21,12.21,0,0,1-9-3.42q-4.26-4.26-4.26-12.3T51.72,19a12.21,12.21,0,0,1,9-3.42,12.21,12.21,0,0,1,9,3.42Q74,23.27,74,31.31ZM60.75,21.23q-5.67,0-5.67,10.08t5.67,10.08q5.67,0,5.67-10.08T60.75,21.23Z" transform="translate(0 -0.25)" style="fill:#3f3d56"/><path d="M103.2,20q2.7,4.11,2.7,11.28T102,42.56a13.18,13.18,0,0,1-10,4.11,31.41,31.41,0,0,1-11.34-2V2.45L81.06,2h2.76A4,4,0,0,1,87,3.08a5.38,5.38,0,0,1,.93,3.57V18.59a12.08,12.08,0,0,1,7.56-2.7A8.71,8.71,0,0,1,103.2,20ZM93.48,22a7.28,7.28,0,0,0-5.58,2.82v16a15,15,0,0,0,4.08.54,5.25,5.25,0,0,0,4.68-2.67q1.68-2.67,1.68-7.59Q98.34,22.07,93.48,22Z" transform="translate(0 -0.25)" style="fill:#3f3d56"/><path d="M121,22.25V46.19a20.85,20.85,0,0,1-3.66.3,23,23,0,0,1-3.78-.3V25q0-3.24-2.7-3.24h-.72a9.32,9.32,0,0,1-.3-2.58,10.7,10.7,0,0,1,.3-2.7,39.63,39.63,0,0,1,4.38-.24h1a5.19,5.19,0,0,1,4,1.62A6.27,6.27,0,0,1,121,22.25Z" transform="translate(0 -0.25)" style="fill:#3f3d56"/><path d="M119.82,1.09a7.37,7.37,0,0,1,.6,3,7.37,7.37,0,0,1-.6,3,7.46,7.46,0,0,1-3.87.84A6.49,6.49,0,0,1,112.26,7a7.37,7.37,0,0,1-.6-3,7.37,7.37,0,0,1,.6-3,8.09,8.09,0,0,1,3.87-.84A7.05,7.05,0,0,1,119.82,1.09Z" transform="translate(0 -0.25)" style="fill:#fff"/><path d="M139.08,40.67h2a10.23,10.23,0,0,1,.6,3.18,9.24,9.24,0,0,1-.18,2.1,38.47,38.47,0,0,1-5.64.54q-6.48,0-6.48-7v-37l.36-.42h2.88a3.94,3.94,0,0,1,3.12,1.05,5.52,5.52,0,0,1,.9,3.57V38Q136.62,40.67,139.08,40.67Z" transform="translate(0 -0.25)" style="fill:#3f3d56"/><path d="M155.94,22.25V46.19a20.85,20.85,0,0,1-3.66.3,23,23,0,0,1-3.78-.3V25q0-3.24-2.7-3.24h-.72a9.32,9.32,0,0,1-.3-2.58,10.7,10.7,0,0,1,.3-2.7,39.63,39.63,0,0,1,4.38-.24h1a5.19,5.19,0,0,1,4.05,1.62A6.27,6.27,0,0,1,155.94,22.25Z" transform="translate(0 -0.25)" style="fill:#3f3d56"/><path d="M154.8,3.09a7.37,7.37,0,0,1,.6,3,7.37,7.37,0,0,1-.6,3,7.46,7.46,0,0,1-3.87.84A6.49,6.49,0,0,1,147.24,9a7.37,7.37,0,0,1-.6-3,7.37,7.37,0,0,1,.6-3,8.09,8.09,0,0,1,3.87-.84A7.05,7.05,0,0,1,154.8,3.09Z" transform="translate(0 -0.25)" style="fill:#fff"/><path d="M163.08,39.47l8.76-11.82q1.32-1.8,4.8-5.7l-.18-.3a63.09,63.09,0,0,1-7.74.42H163a9.79,9.79,0,0,1-.24-2.34,15.8,15.8,0,0,1,.42-3.3h20.4a16.31,16.31,0,0,1,1,4.26,4.1,4.1,0,0,1-.78,2.34L175,34.91a64.65,64.65,0,0,1-4.56,5.7l.18.24q3.12-.3,5.22-.3h2.58a15.35,15.35,0,0,0,6.12-.9,9.4,9.4,0,0,1,.72,3.12q0,3.42-4.32,3.42h-18a14.27,14.27,0,0,1-.9-3.93A5.08,5.08,0,0,1,163.08,39.47Z" transform="translate(0 -0.25)" style="fill:#3f3d56"/><path d="M215.88,31.31q0,8-4.26,12.3a13.63,13.63,0,0,1-18.06,0q-4.26-4.26-4.26-12.3T193.56,19a13.63,13.63,0,0,1,18.06,0Q215.88,23.27,215.88,31.31ZM202.59,21.23q-5.67,0-5.67,10.08t5.67,10.08q5.67,0,5.67-10.08T202.59,21.23Z" transform="translate(0 -0.25)" style="fill:#3f3d56"/><path d="M247,26.09V39.41a11,11,0,0,0,1.2,5.64,7,7,0,0,1-4.41,1.56q-2.43,0-3.33-1.14a5.69,5.69,0,0,1-.9-3.54V27.65a7.74,7.74,0,0,0-.72-3.87,2.78,2.78,0,0,0-2.58-1.17,8.62,8.62,0,0,0-6.3,3V46.19a20.85,20.85,0,0,1-3.66.3,23,23,0,0,1-3.78-.3V16.49l.42-.36h2.76q3.42,0,4.08,3.6,4.38-3.84,8.73-3.84t6.42,2.82A12.17,12.17,0,0,1,247,26.09Z" transform="translate(0 -0.25)" style="fill:#3f3d56"/><path d="M57.26,11a7.37,7.37,0,0,1-.6-3,7.37,7.37,0,0,1,.6-3,8.09,8.09,0,0,1,3.87-.84,7.05,7.05,0,0,1,3.69.84,7.37,7.37,0,0,1,.6,3,7.37,7.37,0,0,1-.6,3,7.46,7.46,0,0,1-3.87.84A6.49,6.49,0,0,1,57.26,11Z" transform="translate(0 -0.25)" style="fill:#fff"/><path d="M198.26,11a7.37,7.37,0,0,1-.6-3,7.37,7.37,0,0,1,.6-3,8.09,8.09,0,0,1,3.87-.84,7.05,7.05,0,0,1,3.69.84,7.37,7.37,0,0,1,.6,3,7.37,7.37,0,0,1-.6,3,7.46,7.46,0,0,1-3.87.84A6.49,6.49,0,0,1,198.26,11Z" transform="translate(0 -0.25)" style="fill:#fff"/></g></g></svg> \ No newline at end of file diff --git a/images/monitorix_log.png b/images/monitorix_log.png new file mode 100644 index 00000000..11f53426 Binary files /dev/null and b/images/monitorix_log.png differ diff --git a/images/moodle_logo.svg b/images/moodle_logo.svg new file mode 100644 index 00000000..47ceb363 --- /dev/null +++ b/images/moodle_logo.svg @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 1231.2 315.2" style="enable-background:new 0 0 1231.2 315.2;" xml:space="preserve"> +<g> + <path style="fill:#F98012;" d="M289.6,309.8V201.5c0-22.6-9.4-34-28-34c-18.7,0-28.1,11.3-28.1,34v108.3h-55.1V201.5 + c0-22.6-9.2-34-27.6-34c-18.7,0-28,11.3-28,34v108.3H67.7V195.1c0-23.6,8.2-41.5,24.6-53.6c14.4-10.8,34-16.3,58.6-16.3 + c24.9,0,43.3,6.4,55.1,19.2c10.2-12.8,28.7-19.2,55.6-19.2c24.6,0,44.1,5.4,58.5,16.3c16.4,12.1,24.6,30,24.6,53.6v114.7H289.6z"/> + <path style="fill:#F98012;" d="M965.1,309.3V0h55.2v309.3H965.1z"/> + <path style="fill:#F98012;" d="M894.8,309.3v-18.2c-4.9,6.6-13.3,11.8-25.1,15.8c-10.5,3.6-20.5,5.4-30,5.4 + c-26.3,0-47.4-9-63.3-27.1c-15.9-18-23.9-40.4-23.9-67c0-26.3,7.8-48.3,23.4-66c13.8-15.7,36.4-26.6,62.3-26.6 + c29.2,0,46.3,11,56.6,23.6V0h53.7v309.3H894.8z M894.8,206.3c0-9.8-4.7-19.3-14-28.3c-9.3-9-19-13.5-28.8-13.5 + c-14.1,0-25.3,5.8-33.5,17.2c-7.2,10.2-10.8,22.7-10.8,37.4c0,14.5,3.6,26.8,10.8,36.9c8.2,11.8,19.4,17.7,33.5,17.7 + c8.5,0,17.8-4,27.8-12.1c10-8,15-16.3,15-24.9V206.3z"/> + <path style="fill:#F98012;" d="M648.6,314.2c-27.9,0-51-8.9-69.2-26.6c-18.2-17.7-27.3-40.5-27.3-68.5c0-27.9,9.1-50.7,27.3-68.4 + c18.2-17.7,41.3-26.6,69.2-26.6c27.9,0,51.1,8.9,69.4,26.6c18.4,17.7,27.6,40.6,27.6,68.4c0,27.9-9.2,50.7-27.6,68.5 + C699.6,305.3,676.5,314.2,648.6,314.2z M648.6,168.4c-13.3,0-23.5,5-30.7,15.1c-7.1,10.1-10.7,22-10.7,35.9 + c0,13.9,3.3,25.6,10,35.1c7.6,10.9,18.1,16.3,31.4,16.3c13.3,0,23.7-5.4,31.4-16.3c7-9.6,10.5-21.3,10.5-35.1 + c0-13.9-3.3-25.6-10-35.1C672.8,173.7,662.2,168.4,648.6,168.4z"/> + <path style="fill:#F98012;" d="M449.1,314.2c-27.9,0-51-8.9-69.2-26.6c-18.2-17.7-27.3-40.5-27.3-68.5c0-27.9,9.1-50.7,27.3-68.4 + c18.2-17.7,41.3-26.6,69.2-26.6c27.9,0,51,8.9,69.4,26.6c18.4,17.7,27.6,40.6,27.6,68.4c0,27.9-9.2,50.7-27.6,68.5 + C500.2,305.3,477,314.2,449.1,314.2z M449.1,168.4c-13.3,0-23.5,5-30.7,15.1c-7.1,10.1-10.7,22-10.7,35.9c0,13.9,3.3,25.6,10,35.1 + c7.6,10.9,18.1,16.3,31.4,16.3c13.3,0,23.7-5.4,31.4-16.3c7-9.6,10.5-21.3,10.5-35.1c0-13.9-3.3-25.6-10-35.1 + C473.4,173.7,462.8,168.4,449.1,168.4z"/> + <path style="fill:#F98012;" d="M1085.6,235.9c1.2,13.1,18.2,41.4,46.3,41.4c27.3,0,40.2-15.8,40.9-22.2l58.1-0.5 + c-6.3,19.4-32.1,60.6-100,60.6c-28.2,0-54.1-8.8-72.6-26.3c-18.5-17.6-27.8-40.5-27.8-68.7c0-29.2,9.3-52.4,27.8-69.7 + c18.6-17.2,42.6-25.9,72.2-25.9c32.2,0,57.3,10.7,75.3,32c16.7,19.7,25.1,46.1,25.1,79.3H1085.6z M1175.7,201.9 + c-2.3-11.8-7.2-21.5-14.8-29.1c-8.6-8.2-18.4-12.3-29.6-12.3c-11.5,0-21.1,3.9-28.8,11.8c-7.7,7.9-12.9,17.7-15.5,29.6H1175.7z"/> + <path style="fill:#333333;" d="M174.7,116.9l54.7-40l-0.7-2.4C130,86.6,85.1,95.2,0,144.5l0.8,2.2l6.8,0.1 + c-0.6,6.8-1.7,23.6-0.3,49c-9.4,27.3-0.2,45.9,8.4,66.1c1.4-21,1.2-44-5.2-66.9c-1.3-25.1-0.2-41.7,0.4-48.1l56.4,0.5 + c0,0-0.4,17,1.7,33.1c50.4,17.7,101.1-0.1,128-43.7C189.4,128.3,174.7,116.9,174.7,116.9z"/> +</g> +</svg> diff --git a/images/mumbleserver_logo.svg b/images/mumbleserver_logo.svg new file mode 100644 index 00000000..9414a0a7 --- /dev/null +++ b/images/mumbleserver_logo.svg @@ -0,0 +1,2252 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="400" + height="400" + id="svg2" + sodipodi:version="0.32" + inkscape:version="0.47pre1" + version="1.0" + sodipodi:docname="mumble.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + style="display:inline"> + <title + id="title3169">Mumble logo</title> + <defs + id="defs4"> + <linearGradient + id="linearGradient4117"> + <stop + style="stop-color:#000000;stop-opacity:0;" + offset="0" + id="stop4119" /> + <stop + id="stop4125" + offset="0.81720757" + style="stop-color:#000000;stop-opacity:0.01960784;" /> + <stop + style="stop-color:#000000;stop-opacity:0.14509804;" + offset="0.89931339" + id="stop4127" /> + <stop + id="stop4129" + offset="0.91198522" + style="stop-color:#000000;stop-opacity:0.20784314;" /> + <stop + style="stop-color:#000000;stop-opacity:0.25098039;" + offset="0.95598048" + id="stop4131" /> + <stop + style="stop-color:#000000;stop-opacity:0.33333334;" + offset="1" + id="stop4121" /> + </linearGradient> + <linearGradient + id="linearGradient4105"> + <stop + style="stop-color:#000000;stop-opacity:0.792;" + offset="0" + id="stop4107" /> + <stop + id="stop4113" + offset="0" + style="stop-color:#000000;stop-opacity:0.49803922;" /> + <stop + style="stop-color:#000000;stop-opacity:0.24705882;" + offset="0.75" + id="stop4115" /> + <stop + style="stop-color:#000000;stop-opacity:0;" + offset="1" + id="stop4109" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient3972"> + <stop + style="stop-color:#b3b3b3;stop-opacity:1;" + offset="0" + id="stop3974" /> + <stop + style="stop-color:#b3b3b3;stop-opacity:0;" + offset="1" + id="stop3976" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient1134"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop1136" /> + <stop + style="stop-color:#000000;stop-opacity:0;" + offset="1" + id="stop1138" /> + </linearGradient> + <linearGradient + id="linearGradient4267"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop4269" /> + <stop + style="stop-color:#ffffff;stop-opacity:1" + offset="1" + id="stop4271" /> + </linearGradient> + <linearGradient + id="linearGradient4257"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop4259" /> + <stop + id="stop4265" + offset="0.61084718" + style="stop-color:#7f7f7f;stop-opacity:1;" /> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="1" + id="stop4261" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient1066"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop1068" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop1070" /> + </linearGradient> + <linearGradient + id="linearGradient1284"> + <stop + style="stop-color:#b4b4b4;stop-opacity:1;" + offset="0" + id="stop1286" /> + <stop + style="stop-color:#b3b3b3;stop-opacity:0;" + offset="1" + id="stop1288" /> + </linearGradient> + <linearGradient + id="linearGradient1125"> + <stop + style="stop-color:#afafaf;stop-opacity:1;" + offset="0" + id="stop1127" /> + <stop + style="stop-color:#e6e6e6;stop-opacity:0;" + offset="1" + id="stop1129" /> + </linearGradient> + <linearGradient + id="linearGradient1117"> + <stop + style="stop-color:#afafaf;stop-opacity:1;" + offset="0" + id="stop1119" /> + <stop + style="stop-color:#e6e6e6;stop-opacity:0;" + offset="1" + id="stop1121" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient961"> + <stop + style="stop-color:#999999;stop-opacity:1;" + offset="0" + id="stop963" /> + <stop + style="stop-color:#999999;stop-opacity:0;" + offset="1" + id="stop965" /> + </linearGradient> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective10" /> + <inkscape:perspective + id="perspective20" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective809" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective846" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective880" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective918" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective940" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective962" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective1031" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective1059" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective119" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective916" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective939" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient961" + id="radialGradient967" + cx="172.61411" + cy="303.20566" + fx="172.61411" + fy="303.20566" + r="22.630014" + gradientTransform="matrix(1,0,0,0.63328545,0,119.49923)" + gradientUnits="userSpaceOnUse" /> + <inkscape:perspective + id="perspective977" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective1007" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient991-8" + id="radialGradient997-6" + cx="382.39243" + cy="210.48412" + fx="382.39243" + fy="210.48412" + r="29.875" + gradientTransform="matrix(0.96367,-0.26709575,0.78568784,2.834728,-208.78184,-339.03429)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + id="linearGradient991-8"> + <stop + style="stop-color:#b3b3b3;stop-opacity:1;" + offset="0" + id="stop993-8" /> + <stop + style="stop-color:#b3b3b3;stop-opacity:0;" + offset="1" + id="stop995-2" /> + </linearGradient> + <inkscape:perspective + id="perspective1047" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective1086" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient1070-2" + id="radialGradient1076-1" + cx="-91.229462" + cy="30.343792" + fx="-91.229462" + fy="30.343792" + r="38.625" + gradientTransform="matrix(1.030385,-0.20612748,0.11791959,0.58945355,220.70182,0.74849181)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + id="linearGradient1070-2"> + <stop + style="stop-color:#808080;stop-opacity:1;" + offset="0" + id="stop1072-6" /> + <stop + style="stop-color:#808080;stop-opacity:0;" + offset="1" + id="stop1074-0" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient1117" + id="radialGradient1123" + cx="260.74927" + cy="27.422483" + fx="260.74927" + fy="27.422483" + r="38.624973" + gradientTransform="matrix(1.2025669,0.44564719,-0.20888604,0.56367331,-43.775525,-92.733799)" + gradientUnits="userSpaceOnUse" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient1125" + id="radialGradient1131" + cx="333.52826" + cy="217.58252" + fx="333.52826" + fy="217.58252" + r="29.875" + gradientTransform="matrix(0.90592799,-0.3616515,0.75242512,1.8848062,-145.07737,-100.14494)" + gradientUnits="userSpaceOnUse" /> + <inkscape:perspective + id="perspective1141" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <radialGradient + r="29.875" + fy="210.48412" + fx="382.39243" + cy="210.48412" + cx="382.39243" + gradientTransform="matrix(-0.96367,-0.26709575,-0.78568784,2.834728,603.11856,-336.29584)" + gradientUnits="userSpaceOnUse" + id="radialGradient1016-9" + xlink:href="#linearGradient991-8-4" + inkscape:collect="always" /> + <linearGradient + inkscape:collect="always" + id="linearGradient991-8-4"> + <stop + style="stop-color:#b3b3b3;stop-opacity:1;" + offset="0" + id="stop993-8-6" /> + <stop + style="stop-color:#b3b3b3;stop-opacity:0;" + offset="1" + id="stop995-2-0" /> + </linearGradient> + <inkscape:perspective + id="perspective1179" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient1125-2" + id="radialGradient1131-6" + cx="333.52826" + cy="217.58252" + fx="333.52826" + fy="217.58252" + r="29.875" + gradientTransform="matrix(-0.95122439,-0.37973408,-0.79004638,1.9790465,561.77552,-104.77634)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + id="linearGradient1125-2"> + <stop + style="stop-color:#e6e6e6;stop-opacity:1;" + offset="0" + id="stop1127-4" /> + <stop + style="stop-color:#e6e6e6;stop-opacity:0;" + offset="1" + id="stop1129-5" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient1117-8" + id="radialGradient1123-8" + cx="260.74927" + cy="27.422483" + fx="260.74927" + fy="27.422483" + r="38.624973" + gradientTransform="matrix(1.2025669,0.44564719,-0.20888604,0.56367331,-43.775525,-92.733799)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + id="linearGradient1117-8"> + <stop + style="stop-color:#afafaf;stop-opacity:1;" + offset="0" + id="stop1119-1" /> + <stop + style="stop-color:#e6e6e6;stop-opacity:0;" + offset="1" + id="stop1121-2" /> + </linearGradient> + <radialGradient + r="38.624973" + fy="27.422483" + fx="260.74927" + cy="27.422483" + cx="260.74927" + gradientTransform="matrix(-1.2025669,0.44564719,0.20888604,0.56367331,438.82295,-92.861143)" + gradientUnits="userSpaceOnUse" + id="radialGradient1193" + xlink:href="#linearGradient1117-8" + inkscape:collect="always" /> + <inkscape:perspective + id="perspective1232" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient1125-8" + id="radialGradient1131-9" + cx="333.52826" + cy="217.58252" + fx="333.52826" + fy="217.58252" + r="29.875" + gradientTransform="matrix(0.90592799,-0.3616515,0.75242512,1.8848062,-145.07737,-100.14494)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + id="linearGradient1125-8"> + <stop + style="stop-color:#afafaf;stop-opacity:1;" + offset="0" + id="stop1127-2" /> + <stop + style="stop-color:#e6e6e6;stop-opacity:0;" + offset="1" + id="stop1129-4" /> + </linearGradient> + <radialGradient + r="29.875" + fy="217.58252" + fx="333.52826" + cy="217.58252" + cx="333.52826" + gradientTransform="matrix(-0.90592799,-0.3616515,-0.75242512,1.8848062,539.501,-98.99361)" + gradientUnits="userSpaceOnUse" + id="radialGradient1241" + xlink:href="#linearGradient1125-8" + inkscape:collect="always" /> + <inkscape:perspective + id="perspective1270" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient1284" + id="radialGradient1290" + cx="458.02847" + cy="230.12292" + fx="458.02847" + fy="230.12292" + r="103.51558" + gradientTransform="matrix(0.39746772,-0.01013694,0.00845518,0.33152627,13.513117,52.832542)" + gradientUnits="userSpaceOnUse" /> + <filter + id="filter1350" + inkscape:label="Cross-smooth" + width="1.5" + height="1.5" + x="-0.25" + y="-0.25" + inkscape:menu="Blurs" + inkscape:menu-tooltip="Blur inner borders and intersections" + color-interpolation-filters="sRGB"> + <feGaussianBlur + id="feGaussianBlur1352" + in="SourceAlpha" + stdDeviation="2,000000" + result="blur" /> + <feColorMatrix + id="feColorMatrix1354" + result="bluralpha" + type="matrix" + values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0,650000 0 " /> + <feOffset + id="feOffset1356" + in="bluralpha" + dx="4,000000" + dy="4,000000" + result="offsetBlur" /> + <feMerge + id="feMerge1358" + result="fbSourceGraphic"> + <feMergeNode + id="feMergeNode1360" + in="offsetBlur" /> + <feMergeNode + id="feMergeNode1362" + in="SourceGraphic" /> + </feMerge> + <feColorMatrix + result="fbSourceGraphicAlpha" + in="fbSourceGraphic" + values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0" + id="feColorMatrix1919" /> + <feGaussianBlur + id="feGaussianBlur1921" + stdDeviation="3" + in="fbSourceGraphic" /> + <feColorMatrix + id="feColorMatrix1923" + result="fbSourceGraphic" + values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 6 -2.5 " /> + </filter> + <filter + id="filter1640" + inkscape:menu-tooltip="Highly flexible specular bump" + inkscape:menu="Bumps" + inkscape:label="HSL Bumps" + color-interpolation-filters="sRGB"> + <feGaussianBlur + id="feGaussianBlur1642" + result="result0" + in="SourceGraphic" + stdDeviation="0.5" /> + <feComposite + id="feComposite1644" + in2="result0" + in="result0" + result="result2" + operator="arithmetic" + k1="0.5" + k2="0.29999999999999999" + k3="0.29999999999999999" /> + <feColorMatrix + id="feColorMatrix1646" + type="matrix" + values="1 0 0 -1 0 1 0 1 -1 0 1 0 0 -1 0 -0.8 -1 0 4.4 -2.9 " + in="result2" + result="fbSourceGraphicAlpha" /> + <feGaussianBlur + id="feGaussianBlur1648" + stdDeviation="0.69999999999999996" + in="fbSourceGraphicAlpha" + result="result0" /> + <feSpecularLighting + id="feSpecularLighting1650" + in="result0" + result="result1" + lighting-color="rgb(255,255,255)" + surfaceScale="8" + specularConstant="1" + specularExponent="15"> + <feDistantLight + id="feDistantLight1652" + elevation="50" + azimuth="235" /> + </feSpecularLighting> + <feBlend + id="feBlend1654" + in="result2" + in2="result1" + result="result5" + mode="screen" + blend="normal" /> + <feComposite + id="feComposite1656" + in2="SourceGraphic" + result="result4" + operator="in" + k2="1.5" + k3="0.59999999999999998" + in="result5" /> + </filter> + <inkscape:perspective + id="perspective1813" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient961-9" + id="radialGradient967-9" + cx="172.61411" + cy="303.20566" + fx="172.61411" + fy="303.20566" + r="22.630014" + gradientTransform="matrix(1,0,0,0.63328545,0,119.49923)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + id="linearGradient961-9"> + <stop + style="stop-color:#999999;stop-opacity:1;" + offset="0" + id="stop963-8" /> + <stop + style="stop-color:#999999;stop-opacity:0;" + offset="1" + id="stop965-3" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient1125-6" + id="radialGradient1131-8" + cx="335.08649" + cy="219.03677" + fx="335.08649" + fy="219.03677" + r="29.875" + gradientTransform="matrix(0.54659184,-0.27740671,0.6404924,1.2620022,11.607646,18.444794)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + id="linearGradient1125-6"> + <stop + style="stop-color:#969696;stop-opacity:1;" + offset="0" + id="stop1127-9" /> + <stop + style="stop-color:#e6e6e6;stop-opacity:0;" + offset="1" + id="stop1129-8" /> + </linearGradient> + <radialGradient + r="29.875" + fy="217.58252" + fx="333.52826" + cy="217.58252" + cx="333.52826" + gradientTransform="matrix(-0.90592799,-0.3616515,-0.75242512,1.8848062,539.5484,-99.256869)" + gradientUnits="userSpaceOnUse" + id="radialGradient1241-6" + xlink:href="#linearGradient1125-8-6" + inkscape:collect="always" /> + <linearGradient + id="linearGradient1125-8-6"> + <stop + style="stop-color:#afafaf;stop-opacity:1;" + offset="0" + id="stop1127-2-2" /> + <stop + style="stop-color:#e6e6e6;stop-opacity:0;" + offset="1" + id="stop1129-4-3" /> + </linearGradient> + <radialGradient + r="38.624973" + fy="25.979427" + fx="250.46019" + cy="25.979427" + cx="250.46019" + gradientTransform="matrix(-1.1864466,0.79500993,0.21180507,0.31609089,435.38812,-174.97097)" + gradientUnits="userSpaceOnUse" + id="radialGradient1193-8" + xlink:href="#linearGradient1117-8-2" + inkscape:collect="always" /> + <linearGradient + id="linearGradient1117-8-2"> + <stop + style="stop-color:#afafaf;stop-opacity:1;" + offset="0" + id="stop1119-1-6" /> + <stop + style="stop-color:#e6e6e6;stop-opacity:0;" + offset="1" + id="stop1121-2-2" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient1117-5" + id="radialGradient1123-7" + cx="260.74927" + cy="27.422483" + fx="260.74927" + fy="27.422483" + r="38.624973" + gradientTransform="matrix(1.2025669,0.44564719,-0.20888604,0.56367331,-42.783663,-93.388266)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + id="linearGradient1117-5"> + <stop + style="stop-color:#afafaf;stop-opacity:1;" + offset="0" + id="stop1119-7" /> + <stop + style="stop-color:#e6e6e6;stop-opacity:0;" + offset="1" + id="stop1121-8" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient1284-7" + id="radialGradient1290-2" + cx="458.02847" + cy="230.12292" + fx="458.02847" + fy="230.12292" + r="103.51558" + gradientTransform="matrix(0.39746772,-0.01013694,0.00845518,0.33152627,13.513117,52.832542)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + id="linearGradient1284-7"> + <stop + style="stop-color:#bebebe;stop-opacity:1;" + offset="0" + id="stop1286-8" /> + <stop + style="stop-color:#b3b3b3;stop-opacity:0;" + offset="1" + id="stop1288-0" /> + </linearGradient> + <radialGradient + r="103.51558" + fy="230.12292" + fx="458.02847" + cy="230.12292" + cx="458.02847" + gradientTransform="matrix(0.41734111,-0.01064379,0.00887794,0.34810258,9.439031,55.321448)" + gradientUnits="userSpaceOnUse" + id="radialGradient1847" + xlink:href="#linearGradient1284-7" + inkscape:collect="always" /> + <filter + id="filter1961" + inkscape:label="Cross-smooth" + inkscape:menu="Blurs" + inkscape:menu-tooltip="Blur inner borders and intersections" + color-interpolation-filters="sRGB"> + <feGaussianBlur + id="feGaussianBlur1963" + stdDeviation="3" /> + <feColorMatrix + id="feColorMatrix1965" + result="fbSourceGraphic" + values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 6 -2.5 " /> + </filter> + <filter + id="filter1967" + inkscape:label="Cross-smooth" + inkscape:menu="Blurs" + inkscape:menu-tooltip="Blur inner borders and intersections" + color-interpolation-filters="sRGB"> + <feGaussianBlur + id="feGaussianBlur1969" + stdDeviation="3" /> + <feColorMatrix + id="feColorMatrix1971" + result="fbSourceGraphic" + values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 6 -2.5 " /> + </filter> + <filter + id="filter1973" + inkscape:label="Cross-smooth" + inkscape:menu="Blurs" + inkscape:menu-tooltip="Blur inner borders and intersections" + color-interpolation-filters="sRGB"> + <feGaussianBlur + id="feGaussianBlur1975" + stdDeviation="3" /> + <feColorMatrix + id="feColorMatrix1977" + result="fbSourceGraphic" + values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 6 -2.5 " /> + </filter> + <filter + id="filter1979" + inkscape:label="Cross-smooth" + inkscape:menu="Blurs" + inkscape:menu-tooltip="Blur inner borders and intersections" + color-interpolation-filters="sRGB"> + <feGaussianBlur + id="feGaussianBlur1981" + stdDeviation="3" /> + <feColorMatrix + id="feColorMatrix1983" + result="fbSourceGraphic" + values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 6 -2.5 " /> + </filter> + <filter + id="filter1985" + inkscape:label="Evanescent" + inkscape:menu="Blurs" + inkscape:menu-tooltip="Blur the contents of objects, preserving the outline and adding progressive transparency at edges" + color-interpolation-filters="sRGB"> + <feGaussianBlur + id="feGaussianBlur1987" + result="result6" + stdDeviation="3" + in="SourceGraphic" /> + <feColorMatrix + id="feColorMatrix1989" + type="matrix" + values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 " + result="result7" + in="SourceGraphic" /> + <feComposite + id="feComposite1991" + in2="result7" + operator="atop" + in="result7" + result="result8" /> + <feComposite + id="feComposite1993" + operator="in" + in="result6" + in2="result8" /> + </filter> + <filter + id="filter2235" + inkscape:label="Evanescent" + inkscape:menu="Blurs" + inkscape:menu-tooltip="Blur the contents of objects, preserving the outline and adding progressive transparency at edges" + color-interpolation-filters="sRGB"> + <feGaussianBlur + id="feGaussianBlur2237" + result="result6" + stdDeviation="3" + in="SourceGraphic" /> + <feColorMatrix + id="feColorMatrix2239" + type="matrix" + values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 " + result="result7" + in="SourceGraphic" /> + <feComposite + id="feComposite2241" + in2="result7" + operator="atop" + in="result7" + result="result8" /> + <feComposite + id="feComposite2243" + operator="in" + in="result6" + in2="result8" /> + </filter> + <inkscape:perspective + id="perspective2253" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <radialGradient + r="38.624973" + fy="25.979427" + fx="250.46019" + cy="25.979427" + cx="250.46019" + gradientTransform="matrix(-1.1299491,0.75715231,0.20171911,0.30103894,420.80965,-169.23193)" + gradientUnits="userSpaceOnUse" + id="radialGradient1193-8-2" + xlink:href="#linearGradient1117-8-2-0" + inkscape:collect="always" /> + <linearGradient + id="linearGradient1117-8-2-0"> + <stop + style="stop-color:#afafaf;stop-opacity:1;" + offset="0" + id="stop1119-1-6-8" /> + <stop + style="stop-color:#e6e6e6;stop-opacity:0;" + offset="1" + id="stop1121-2-2-9" /> + </linearGradient> + <radialGradient + r="38.624973" + fy="25.979427" + fx="250.46019" + cy="25.979427" + cx="250.46019" + gradientTransform="matrix(1.1864466,0.79500993,-0.21180507,0.31609089,-32.887133,-175.8174)" + gradientUnits="userSpaceOnUse" + id="radialGradient2262" + xlink:href="#linearGradient1117-8-2-0" + inkscape:collect="always" /> + <inkscape:perspective + id="perspective2291" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient1125-6-2" + id="radialGradient1131-8-8" + cx="335.08649" + cy="219.03677" + fx="335.08649" + fy="219.03677" + r="29.875" + gradientTransform="matrix(0.52056366,-0.26419687,0.60999276,1.2019069,16.15539,17.081182)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + id="linearGradient1125-6-2"> + <stop + style="stop-color:#969696;stop-opacity:1;" + offset="0" + id="stop1127-9-0" /> + <stop + style="stop-color:#e6e6e6;stop-opacity:0;" + offset="1" + id="stop1129-8-5" /> + </linearGradient> + <radialGradient + r="29.875" + fy="219.03677" + fx="335.08649" + cy="219.03677" + cx="335.08649" + gradientTransform="matrix(-0.54659184,-0.27740671,-0.6404924,1.2620022,394.97125,17.340932)" + gradientUnits="userSpaceOnUse" + id="radialGradient2300" + xlink:href="#linearGradient1125-6-2" + inkscape:collect="always" /> + <inkscape:perspective + id="perspective200" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <filter + id="filter2235-1" + inkscape:label="Evanescent" + inkscape:menu="Blurs" + inkscape:menu-tooltip="Blur the contents of objects, preserving the outline and adding progressive transparency at edges" + color-interpolation-filters="sRGB"> + <feGaussianBlur + id="feGaussianBlur2237-7" + result="result6" + stdDeviation="3" + in="SourceGraphic" /> + <feColorMatrix + id="feColorMatrix2239-4" + type="matrix" + values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 " + result="result7" + in="SourceGraphic" /> + <feComposite + id="feComposite2241-0" + in2="result7" + operator="atop" + in="result7" + result="result8" /> + <feComposite + id="feComposite2243-9" + operator="in" + in="result6" + in2="result8" /> + </filter> + <inkscape:perspective + id="perspective237" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <filter + id="filter1640-8" + inkscape:menu-tooltip="Highly flexible specular bump" + inkscape:menu="Bumps" + inkscape:label="HSL Bumps" + color-interpolation-filters="sRGB"> + <feGaussianBlur + id="feGaussianBlur1642-8" + result="result0" + in="SourceGraphic" + stdDeviation="0.5" /> + <feComposite + id="feComposite1644-2" + in2="result0" + in="result0" + result="result2" + operator="arithmetic" + k1="0.5" + k2="0.29999999999999999" + k3="0.29999999999999999" /> + <feColorMatrix + id="feColorMatrix1646-4" + type="matrix" + values="1 0 0 -1 0 1 0 1 -1 0 1 0 0 -1 0 -0.8 -1 0 4.4 -2.9 " + in="result2" + result="fbSourceGraphicAlpha" /> + <feGaussianBlur + id="feGaussianBlur1648-5" + stdDeviation="0.69999999999999996" + in="fbSourceGraphicAlpha" + result="result0" /> + <feSpecularLighting + id="feSpecularLighting1650-5" + in="result0" + result="result1" + lighting-color="rgb(255,255,255)" + surfaceScale="8" + specularConstant="1" + specularExponent="15"> + <feDistantLight + id="feDistantLight1652-1" + elevation="50" + azimuth="235" /> + </feSpecularLighting> + <feBlend + id="feBlend1654-7" + in="result2" + in2="result1" + result="result5" + mode="screen" + blend="normal" /> + <feComposite + id="feComposite1656-1" + in2="SourceGraphic" + result="result4" + operator="in" + k2="1.5" + k3="0.59999999999999998" + in="result5" /> + </filter> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient1066" + id="linearGradient1072" + x1="233.125" + y1="217.67747" + x2="264.59375" + y2="217.67747" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(253.44937,21.483607)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient1066" + id="linearGradient1074" + x1="196.5" + y1="217.67747" + x2="227.5625" + y2="217.67747" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(253.44937,21.483607)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient1066" + id="linearGradient1076" + x1="152.625" + y1="217.67747" + x2="189.84375" + y2="217.67747" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(253.44937,21.483607)" /> + <filter + id="filter1078" + inkscape:label="Cross-smooth" + inkscape:menu="Blurs" + inkscape:menu-tooltip="Blur inner borders and intersections" + color-interpolation-filters="sRGB"> + <feGaussianBlur + id="feGaussianBlur1080" + stdDeviation="3" /> + <feColorMatrix + id="feColorMatrix1082" + result="fbSourceGraphic" + values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 6 -2.5 " /> + </filter> + <filter + id="filter1084" + inkscape:label="Cross-smooth" + inkscape:menu="Blurs" + inkscape:menu-tooltip="Blur inner borders and intersections" + color-interpolation-filters="sRGB"> + <feGaussianBlur + id="feGaussianBlur1086" + stdDeviation="3" /> + <feColorMatrix + id="feColorMatrix1088" + result="fbSourceGraphic" + values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 6 -2.5 " /> + </filter> + <inkscape:perspective + id="perspective218" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <filter + id="filter1640-1" + inkscape:menu-tooltip="Highly flexible specular bump" + inkscape:menu="Bumps" + inkscape:label="HSL Bumps" + color-interpolation-filters="sRGB"> + <feGaussianBlur + id="feGaussianBlur1642-7" + result="result0" + in="SourceGraphic" + stdDeviation="0.5" /> + <feComposite + id="feComposite1644-4" + in2="result0" + in="result0" + result="result2" + operator="arithmetic" + k1="0.5" + k2="0.29999999999999999" + k3="0.29999999999999999" /> + <feColorMatrix + id="feColorMatrix1646-0" + type="matrix" + values="1 0 0 -1 0 1 0 1 -1 0 1 0 0 -1 0 -0.8 -1 0 4.4 -2.9 " + in="result2" + result="fbSourceGraphicAlpha" /> + <feGaussianBlur + id="feGaussianBlur1648-9" + stdDeviation="0.69999999999999996" + in="fbSourceGraphicAlpha" + result="result0" /> + <feSpecularLighting + id="feSpecularLighting1650-4" + in="result0" + result="result1" + lighting-color="rgb(255,255,255)" + surfaceScale="8" + specularConstant="1" + specularExponent="15"> + <feDistantLight + id="feDistantLight1652-8" + elevation="50" + azimuth="235" /> + </feSpecularLighting> + <feBlend + id="feBlend1654-8" + in="result2" + in2="result1" + result="result5" + mode="screen" + blend="normal" /> + <feComposite + id="feComposite1656-2" + in2="SourceGraphic" + result="result4" + operator="in" + k2="1.5" + k3="0.59999999999999998" + in="result5" /> + </filter> + <filter + id="filter2235-4" + inkscape:label="Evanescent" + inkscape:menu="Blurs" + inkscape:menu-tooltip="Blur the contents of objects, preserving the outline and adding progressive transparency at edges" + color-interpolation-filters="sRGB"> + <feGaussianBlur + id="feGaussianBlur2237-5" + result="result6" + stdDeviation="3" + in="SourceGraphic" /> + <feColorMatrix + id="feColorMatrix2239-5" + type="matrix" + values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 " + result="result7" + in="SourceGraphic" /> + <feComposite + id="feComposite2241-1" + in2="result7" + operator="atop" + in="result7" + result="result8" /> + <feComposite + id="feComposite2243-7" + operator="in" + in="result6" + in2="result8" /> + </filter> + <filter + id="filter1061" + inkscape:label="Drop shadow" + width="1.5" + height="1.5" + x="-.25" + y="-.25"> + <feGaussianBlur + id="feGaussianBlur1063" + in="SourceAlpha" + stdDeviation="1,000000" + result="blur" /> + <feColorMatrix + id="feColorMatrix1065" + result="bluralpha" + type="matrix" + values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0,500000 0 " /> + <feOffset + id="feOffset1067" + in="bluralpha" + dx="2,000000" + dy="2,000000" + result="offsetBlur" /> + <feMerge + id="feMerge1069"> + <feMergeNode + id="feMergeNode1071" + in="offsetBlur" /> + <feMergeNode + id="feMergeNode1073" + in="SourceGraphic" /> + </feMerge> + </filter> + <inkscape:perspective + id="perspective247" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective2928" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient2912-6" + id="radialGradient2918-1" + cx="206.64375" + cy="214.43469" + fx="206.64375" + fy="214.43469" + r="179.48123" + gradientTransform="matrix(1.1773155,-0.62314413,0.6529458,1.1665457,-176.65537,93.055648)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + id="linearGradient2912-6"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop2914-8" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop2916-8" /> + </linearGradient> + <inkscape:perspective + id="perspective2966" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient2912-7" + id="radialGradient2918-7" + cx="206.64375" + cy="214.43469" + fx="206.64375" + fy="214.43469" + r="179.48123" + gradientTransform="matrix(1.1773155,-0.62314413,0.6529458,1.1665457,-176.65537,93.055648)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + id="linearGradient2912-7"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop2914-1" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop2916-2" /> + </linearGradient> + <inkscape:perspective + id="perspective3004" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <radialGradient + r="179.48123" + fy="214.43469" + fx="206.64375" + cy="214.43469" + cx="206.64375" + gradientTransform="matrix(1.1773155,-0.62314413,0.6529458,1.1665457,-176.65537,93.055648)" + gradientUnits="userSpaceOnUse" + id="radialGradient2975-0" + xlink:href="#linearGradient2912-7-4" + inkscape:collect="always" /> + <linearGradient + inkscape:collect="always" + id="linearGradient2912-7-4"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop2914-1-9" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop2916-2-4" /> + </linearGradient> + <inkscape:perspective + id="perspective3042" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <radialGradient + r="179.48123" + fy="214.43469" + fx="206.64375" + cy="214.43469" + cx="206.64375" + gradientTransform="matrix(1.1773155,-0.62314413,0.6529458,1.1665457,-176.65537,93.055648)" + gradientUnits="userSpaceOnUse" + id="radialGradient3013-0" + xlink:href="#linearGradient2912-7-4-3" + inkscape:collect="always" /> + <linearGradient + inkscape:collect="always" + id="linearGradient2912-7-4-3"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop2914-1-9-6" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop2916-2-4-2" /> + </linearGradient> + <inkscape:perspective + id="perspective3080" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <radialGradient + r="179.48123" + fy="214.43469" + fx="206.64375" + cy="214.43469" + cx="206.64375" + gradientTransform="matrix(1.1773155,-0.62314413,0.6529458,1.1665457,-176.65537,93.055648)" + gradientUnits="userSpaceOnUse" + id="radialGradient3051-5" + xlink:href="#linearGradient2912-7-4-3-8" + inkscape:collect="always" /> + <linearGradient + inkscape:collect="always" + id="linearGradient2912-7-4-3-8"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop2914-1-9-6-8" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop2916-2-4-2-1" /> + </linearGradient> + <inkscape:perspective + id="perspective3134" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <radialGradient + r="179.48123" + fy="214.43469" + fx="206.64375" + cy="214.43469" + cx="206.64375" + gradientTransform="matrix(0.724346,-0.38065173,0.33538303,0.60350321,-14.955578,163.68195)" + gradientUnits="userSpaceOnUse" + id="radialGradient2975-9" + xlink:href="#linearGradient2912-7-8" + inkscape:collect="always" /> + <linearGradient + inkscape:collect="always" + id="linearGradient2912-7-8"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop2914-1-2" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop2916-2-45" /> + </linearGradient> + <inkscape:perspective + id="perspective3393" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective3415" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective3437" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective3475" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3459-9" + id="radialGradient3465-6" + cx="206.64375" + cy="214.43469" + fx="206.64375" + fy="214.43469" + r="178.98123" + gradientTransform="matrix(1.705768,-1.4102775e-8,1.4756808e-8,1.6878279,-145.84255,-147.49416)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + id="linearGradient3459-9"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop3461-8" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop3463-6" /> + </linearGradient> + <inkscape:perspective + id="perspective3521" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3505-3" + id="radialGradient3511-2" + cx="206.64375" + cy="214.43469" + fx="206.64375" + fy="214.43469" + r="178.98123" + gradientTransform="matrix(2.0291647,0,0,1.8112503,-212.67045,-173.96022)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + id="linearGradient3505-3"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop3507-8" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop3509-2" /> + </linearGradient> + <inkscape:perspective + id="perspective3567" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3551-7" + id="radialGradient3557-2" + cx="206.64375" + cy="214.43469" + fx="206.64375" + fy="214.43469" + r="178.98123" + gradientTransform="matrix(2.2489816,-4.4844011e-8,2.970474e-8,1.4087294,-258.09425,-87.645761)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + id="linearGradient3551-7"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop3553-5" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop3555-7" /> + </linearGradient> + <inkscape:perspective + id="perspective3605" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective3651" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3627-2" + id="radialGradient3633-0" + cx="206.64375" + cy="214.43469" + fx="206.64375" + fy="214.43469" + r="178.98123" + gradientTransform="matrix(2.6714439,-2.2664943e-7,1.7043002e-7,1.899581,-345.39346,-192.90132)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + id="linearGradient3627-2"> + <stop + style="stop-color:#4d4d4d;stop-opacity:1;" + offset="0" + id="stop3629-0" /> + <stop + style="stop-color:#4d4d4d;stop-opacity:0;" + offset="1" + id="stop3631-8" /> + </linearGradient> + <inkscape:perspective + id="perspective3763" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective3811" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective3849" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3833-6" + id="radialGradient3839-1" + cx="206.64375" + cy="214.43469" + fx="206.64375" + fy="214.43469" + r="180.89742" + gradientTransform="matrix(1,0,0,0.97272594,0,5.8485051)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + id="linearGradient3833-6"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop3835-0" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop3837-9" /> + </linearGradient> + <inkscape:perspective + id="perspective3887" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <radialGradient + r="180.89742" + fy="214.43469" + fx="206.64375" + cy="214.43469" + cx="206.64375" + gradientTransform="matrix(1,0,0,0.97272594,0,5.8485051)" + gradientUnits="userSpaceOnUse" + id="radialGradient3858-8" + xlink:href="#linearGradient3833-6-9" + inkscape:collect="always" /> + <linearGradient + inkscape:collect="always" + id="linearGradient3833-6-9"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop3835-0-0" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop3837-9-0" /> + </linearGradient> + <inkscape:perspective + id="perspective4287" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4267-5" + id="radialGradient4273-5" + cx="206.64375" + cy="214.43469" + fx="206.64375" + fy="214.43469" + r="194.02312" + gradientTransform="matrix(2.3430407,3.8828181e-8,-4.2128848e-8,2.4040002,-277.53097,-301.06636)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + id="linearGradient4267-5"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop4269-2" /> + <stop + style="stop-color:#ffffff;stop-opacity:1" + offset="1" + id="stop4271-1" /> + </linearGradient> + <inkscape:perspective + id="perspective4548" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <filter + id="filter1350-8" + inkscape:label="Cross-smooth" + width="1.5" + height="1.5" + x="-0.25" + y="-0.25" + inkscape:menu="Blurs" + inkscape:menu-tooltip="Blur inner borders and intersections" + color-interpolation-filters="sRGB"> + <feGaussianBlur + id="feGaussianBlur1352-9" + in="SourceAlpha" + stdDeviation="2,000000" + result="blur" /> + <feColorMatrix + id="feColorMatrix1354-8" + result="bluralpha" + type="matrix" + values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0,650000 0 " /> + <feOffset + id="feOffset1356-3" + in="bluralpha" + dx="4,000000" + dy="4,000000" + result="offsetBlur" /> + <feMerge + id="feMerge1358-5" + result="fbSourceGraphic"> + <feMergeNode + id="feMergeNode1360-5" + in="offsetBlur" /> + <feMergeNode + id="feMergeNode1362-1" + in="SourceGraphic" /> + </feMerge> + <feColorMatrix + result="fbSourceGraphicAlpha" + in="fbSourceGraphic" + values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0" + id="feColorMatrix1919-5" /> + <feGaussianBlur + id="feGaussianBlur1921-5" + stdDeviation="3" + in="fbSourceGraphic" /> + <feColorMatrix + id="feColorMatrix1923-8" + result="fbSourceGraphic" + values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 6 -2.5 " /> + </filter> + <inkscape:perspective + id="perspective4849" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective1114" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient1134" + id="radialGradient1140" + cx="206.64375" + cy="214.43469" + fx="206.64375" + fy="214.43469" + r="183.43082" + gradientTransform="matrix(1,0,0,0.97379026,0,5.6202766)" + gradientUnits="userSpaceOnUse" /> + <inkscape:perspective + id="perspective1150" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective1202" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient1134-8" + id="radialGradient1140-8" + cx="206.64375" + cy="214.43469" + fx="206.64375" + fy="214.43469" + r="183.43082" + gradientTransform="matrix(1,0,0,0.97379026,0,5.6202766)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + id="linearGradient1134-8"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop1136-2" /> + <stop + style="stop-color:#000000;stop-opacity:0;" + offset="1" + id="stop1138-4" /> + </linearGradient> + <inkscape:perspective + id="perspective1278" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective1330" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective1154" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective1247" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective3162" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3972" + id="radialGradient3978" + cx="171.23438" + cy="217.67747" + fx="171.23438" + fy="217.67747" + r="19.572203" + gradientTransform="matrix(1,0,0,1.278095,0,-60.535026)" + gradientUnits="userSpaceOnUse" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3972" + id="radialGradient3980" + cx="212.03125" + cy="217.67747" + fx="212.03125" + fy="217.67747" + r="16.494078" + gradientTransform="matrix(1,0,0,1.5166132,0,-112.45505)" + gradientUnits="userSpaceOnUse" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3972" + id="radialGradient3982" + cx="248.85938" + cy="217.67747" + fx="248.85938" + fy="217.67747" + r="16.697203" + gradientTransform="matrix(1,0,0,1.4981632,0,-108.43892)" + gradientUnits="userSpaceOnUse" /> + <inkscape:perspective + id="perspective3992" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4020" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4049" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4077" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4117" + id="radialGradient4123" + cx="206.64375" + cy="214.43469" + fx="206.64375" + fy="214.43469" + r="190.25014" + gradientTransform="matrix(0.97267227,0.01617535,-0.01665626,0.97473856,9.2187856,2.0743911)" + gradientUnits="userSpaceOnUse" /> + <inkscape:perspective + id="perspective3189" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective3176" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective3204" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective3226" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1.8075" + inkscape:cx="200" + inkscape:cy="200" + inkscape:document-units="px" + inkscape:current-layer="layer3" + showgrid="false" + inkscape:snap-page="false" + inkscape:snap-global="false" + inkscape:window-width="1680" + inkscape:window-height="989" + inkscape:window-x="-9" + inkscape:window-y="-9" + inkscape:window-maximized="1" + inkscape:snap-object-midpoints="true" + inkscape:snap-nodes="true" + inkscape:snap-grids="false" + inkscape:snap-to-guides="false" + inkscape:snap-center="true" + inkscape:snap-bbox="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="true" + inkscape:bbox-paths="true" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title>Mumble logo</dc:title> + <dc:date>2009.08.17</dc:date> + <dc:creator> + <cc:Agent> + <dc:title>Martin Skilnand</dc:title> + </cc:Agent> + </dc:creator> + <dc:rights> + <cc:Agent> + <dc:title>Martin Skilnand</dc:title> + </cc:Agent> + </dc:rights> + <dc:publisher> + <cc:Agent> + <dc:title>Mumble team</dc:title> + </cc:Agent> + </dc:publisher> + <dc:identifier>mumble.svg</dc:identifier> + <dc:source>git://mumble.git.sourceforge.net/gitroot/mumble</dc:source> + <dc:description>Logo for voice chat program mumble</dc:description> + <cc:license + rdf:resource="BSD" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Circle" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-652.36218)" + style="display:inline" + sodipodi:insensitive="true"> + <path + sodipodi:type="arc" + style="fill:#1a1a1a;stroke:#000000;stroke-width:4.57597017;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" + id="path26" + sodipodi:cx="206.64375" + sodipodi:cy="214.43469" + sodipodi:rx="178.98123" + sodipodi:ry="174.04742" + d="m 385.62498,214.43469 c 0,96.12374 -80.13262,174.04743 -178.98123,174.04743 c -98.8486,0 -178.981229,-77.92369 -178.981229,-174.04743 c 0,-96.12374 80.132629,-174.047422 178.981229,-174.047422 c 98.84861,0 178.98123,77.923682 178.98123,174.047422 z" + transform="matrix(1.0811038,0,0,1.1043488,-22.437604,617.97608)" /> + <path + sodipodi:type="arc" + style="opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" + id="path26-9-9-8-6" + sodipodi:cx="206.64375" + sodipodi:cy="214.43469" + sodipodi:rx="178.98123" + sodipodi:ry="174.04742" + d="m 385.62498,214.43469 c 0,96.12374 -80.13262,174.04743 -178.98123,174.04743 c -98.8486,0 -178.981229,-77.92369 -178.981229,-174.04743 c 0,-96.12374 80.132629,-174.047422 178.981229,-174.047422 c 98.84861,0 178.98123,77.923682 178.98123,174.047422 z" + transform="matrix(1.070643,0,0,1.1009928,-22.08154,583.61968)" /> + <path + sodipodi:type="arc" + style="opacity:0.9;fill:#ffffff;stroke:none;display:inline" + id="path26-9-0" + sodipodi:cx="206.64375" + sodipodi:cy="214.43469" + sodipodi:rx="178.98123" + sodipodi:ry="174.04742" + d="m 385.62498,214.43469 c 0,96.12374 -80.13262,174.04743 -178.98123,174.04743 c -98.8486,0 -178.981229,-77.92369 -178.981229,-174.04743 c 0,-96.12374 80.132629,-174.047422 178.981229,-174.047422 c 98.84861,0 178.98123,77.923682 178.98123,174.047422 z" + transform="matrix(1.0422741,0,0,1.0695007,-13.735541,622.74462)" /> + <path + sodipodi:type="arc" + style="fill:#ffffff;stroke:#333333;stroke-width:1.41267002;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" + id="path26-9" + sodipodi:cx="206.64375" + sodipodi:cy="214.43469" + sodipodi:rx="178.98123" + sodipodi:ry="174.04742" + d="m 385.62498,214.43469 c 0,96.12374 -80.13262,174.04743 -178.98123,174.04743 c -98.8486,0 -178.981229,-77.92369 -178.981229,-174.04743 c 0,-96.12374 80.132629,-174.047422 178.981229,-174.047422 c 98.84861,0 178.98123,77.923682 178.98123,174.047422 z" + transform="matrix(1.0641261,0,0,1.0786838,-20.794262,620.64438)" /> + <path + sodipodi:type="arc" + style="fill:none;stroke:#000000;stroke-width:1.83038807;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" + id="path26-8" + sodipodi:cx="206.64375" + sodipodi:cy="214.43469" + sodipodi:rx="178.98123" + sodipodi:ry="174.04742" + d="m 385.62498,214.43469 c 0,96.12374 -80.13262,174.04743 -178.98123,174.04743 c -98.8486,0 -178.981229,-77.92369 -178.981229,-174.04743 c 0,-96.12374 80.132629,-174.047422 178.981229,-174.047422 c 98.84861,0 178.98123,77.923682 178.98123,174.047422 z" + transform="matrix(1.0856629,0,0,1.109006,-24.345467,616.20735)" /> + </g> + <g + inkscape:groupmode="layer" + id="layer6" + inkscape:label="Effects" + style="display:inline" + sodipodi:insensitive="true"> + <path + sodipodi:type="arc" + style="opacity:0.75;fill:url(#radialGradient4123);fill-opacity:1;stroke:none;display:inline" + id="path26-9-5" + sodipodi:cx="206.64375" + sodipodi:cy="214.43469" + sodipodi:rx="178.98123" + sodipodi:ry="174.04742" + d="m 385.62498,214.43469 a 178.98123,174.04742 0 1 1 -357.962459,0 178.98123,174.04742 0 1 1 357.962459,0 z" + transform="matrix(1.0764906,0,0,1.1009349,-20.513668,-34.695518)" /> + </g> + <g + inkscape:groupmode="layer" + id="layer4" + inkscape:label="Headstrap" + style="display:inline" + sodipodi:insensitive="true"> + <path + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff" + d="m 152.40625,31.610002 c -24.65159,-0.615413 -49.62289,15.704618 -55.852503,40.126444 -1.451111,5.920437 -2.042948,11.533344 -2.147497,17.25104 0,21.207504 0,42.415014 0,63.622514 8.33333,0 16.66667,0 25,0 0.0881,-22.3821 -0.12668,-44.64411 0.1701,-67.071988 0.76858,-14.243077 11.77335,-29.258147 27.0486,-29.08431 0.11203,22.668722 -0.22918,45.351398 0.18004,68.010988 1.30284,18.42605 18.76217,33.67641 37.24339,32.11401 11.54558,-0.2802 23.17762,0.67313 34.64753,-0.72475 17.46577,-3.27442 29.55308,-21.06252 27.92904,-38.4493 0,-20.285732 0,-40.571465 0,-60.857198 15.88808,-1.160259 27.93757,14.263321 28.64235,29.08431 0.29501,22.427208 0.0825,44.692338 0.1701,67.071988 8.33333,0 16.66667,0 25,0 0,-22.5 0,-45 0,-67.499998 -0.81797,-7.276075 -1.9718,-16.180186 -5.9149,-23.198476 -10.22889,-20.751216 -34.15317,-31.947919 -56.71743,-30.261229 -6.591,-0.83713 -13.68143,3.619737 -15.48689,9.866559 0.10876,26.738504 0.18577,53.486212 -0.015,80.219854 -0.75343,11.19988 -11.79041,19.76398 -22.80523,18.34204 -7.79212,0.33854 -16.59364,0.0136 -21.90827,-6.68171 -7.16232,-7.57045 -4.76318,-18.40537 -5.18362,-27.81167 0.0193,-21.718966 -0.0713,-43.418377 0.1249,-65.100368 -3.25934,-6.591257 -10.50309,-9.993605 -17.67905,-8.911927 l -1.18772,-0.01641 -1.25823,-0.04042 2.5e-4,0 z" + id="rect1019" + transform="matrix(1.05,0,0,1.05,-5.3555131,0.50955272)" /> + <path + style="opacity:0.96660007;fill:url(#radialGradient1131-6);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" + d="m 107.26989,156.26167 0,177.84375 c -35.128105,-3.85349 -62.737498,-42.18816 -62.737498,-88.92187 0,-46.73372 27.609393,-85.06839 62.737498,-88.92188 z" + id="path833-1-4" /> + </g> + <g + inkscape:groupmode="layer" + id="layer2" + inkscape:label="Headphones" + style="display:inline" + sodipodi:insensitive="true"> + <path + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff" + d="m 290.42422,313.15625 c -0.69916,-0.007 -3.31052,-0.57507 -3.94043,-0.16697 0,0 -1.03559,3.01675 -4.60424,5.67254 -3.13272,2.33137 -6.10765,4.56617 -9.29463,6.66254 -2.86157,1.88231 -5.93275,3.91773 -8.80984,5.30245 -2.26396,1.08961 -4.11397,1.24819 -4.11397,1.24819 l -32.21955,0 c -2.01273,0 -3.66178,1.58716 -3.66178,3.5625 l 0,0.875 c 0,1.97534 1.64905,3.59375 3.66178,3.59375 l 33.87945,0 c 0.77968,0 3.59712,-0.82022 5.27249,-1.55528 4.17684,-1.83257 6.89898,-4.16602 11.7099,-7.02744 5.11436,-3.27118 14.57263,-10.88603 14.57263,-10.88603 1.67973,-1.08826 2.12779,-3.28897 1.01893,-4.9375 l -0.47763,-0.75 c -0.69304,-1.03033 -1.82785,-1.58241 -2.99311,-1.59375 z" + id="rect134" + sodipodi:nodetypes="ccsasccccccaccccc" + transform="matrix(1.05,0,0,1.05,-5.3555131,0.50955272)" /> + <path + style="opacity:0.96660007;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff" + d="m 288.25,148.4375 0,169.375 C 321.70534,314.14251 348,277.6333 348,233.125 c 0,-44.5083 -26.29466,-81.01751 -59.75,-84.6875 z" + id="path833" + transform="matrix(1.05,0,0,1.05,-5.3555131,0.50955272)" /> + <path + style="opacity:0.96660007;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;display:inline" + d="m 106.22355,149.3374 0,169.375 c -33.455343,-3.66999 -59.750003,-40.1792 -59.750003,-84.6875 0,-44.5083 26.29466,-81.01751 59.750003,-84.6875 z" + id="path833-2" + transform="matrix(1.05,0,0,1.05,-5.3555131,0.50955272)" /> + <path + sodipodi:type="arc" + style="opacity:0.96660007;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff" + id="path906" + sodipodi:cx="172.61411" + sodipodi:cy="325.86444" + sodipodi:rx="22.130014" + sodipodi:ry="13.831259" + d="m 194.74412,325.86444 a 22.130014,13.831259 0 1 1 -44.26003,0 22.130014,13.831259 0 1 1 44.26003,0 z" + transform="matrix(1.304789,0,0,1.21464,-20.460693,-43.799678)" /> + <rect + style="opacity:0.96660007;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.05377054;display:inline" + id="rect908-1" + width="13.329355" + height="171.94623" + x="274.71799" + y="146.09026" + rx="3.8877287" + ry="3.5400696" + transform="matrix(1.0433338,0,0,1.0500168,-4.6562937,0.09487302)" /> + <rect + style="opacity:0.96660007;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.04323161;display:inline" + id="rect908-1-6" + width="13.063269" + height="171.95677" + x="106.56075" + y="147.08498" + rx="3.8101201" + ry="3.5402865" + transform="matrix(1.0433338,0,0,1.0500168,-3.8347589,0.09487302)" /> + </g> + <g + inkscape:groupmode="layer" + id="layer3" + inkscape:label="Sign" + style="display:inline" + sodipodi:insensitive="true"> + <rect + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" + id="rect287" + width="140.83455" + height="111.88522" + x="131.63644" + y="188.83058" /> + <path + id="path1297-8" + style="font-size:64px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;text-anchor:middle;fill:url(#radialGradient3978);fill-opacity:1;stroke:none;display:inline;font-family:Tahoma;-inkscape-font-specification:Tahoma Bold" + d="m 189.84375,226.6931 c -4e-5,2.31252 -0.43754,4.34376 -1.3125,6.09375 c -0.87504,1.75001 -2.05212,3.19793 -3.53125,4.34375 c -1.75004,1.37501 -3.67191,2.35417 -5.76563,2.9375 c -2.09377,0.58334 -4.75523,0.875 -7.98437,0.875 l -18.625,0 l 0,-46.53125 l 16.4375,0 c 3.41664,5e-5 6.00518,0.13026 7.76562,0.39063 c 1.76039,0.26046 3.41143,0.80734 4.95313,1.64062 c 1.66663,0.89588 2.91142,2.0938 3.73437,3.59375 c 0.82288,1.50004 1.23434,3.22921 1.23438,5.1875 c -4e-5,2.27087 -0.56775,4.2917 -1.70313,6.0625 c -1.13545,1.77087 -2.70315,3.07295 -4.70312,3.90625 l 0,0.25 c 2.87496,0.6042 5.17705,1.83857 6.90625,3.70313 c 1.72913,1.8646 2.59371,4.38023 2.59375,7.54687 z M 174.875,207.5681 c -3e-5,-0.74996 -0.19274,-1.52079 -0.57813,-2.3125 c -0.38544,-0.79163 -0.9844,-1.36454 -1.79687,-1.71875 c -0.77086,-0.33329 -1.68231,-0.51558 -2.73438,-0.54687 c -1.0521,-0.0312 -2.61981,-0.0468 -4.70312,-0.0469 l -0.8125,0 l 0,9.84375 l 1.46875,0 c 1.99998,3e-5 3.40102,-0.0208 4.20312,-0.0625 c 0.80207,-0.0416 1.63019,-0.26038 2.48438,-0.65625 c 0.93747,-0.43747 1.58331,-1.04163 1.9375,-1.8125 c 0.35414,-0.7708 0.53122,-1.66663 0.53125,-2.6875 z m 2.9375,18.90625 c -3e-5,-1.43748 -0.2917,-2.56248 -0.875,-3.375 c -0.58336,-0.81248 -1.45836,-1.42706 -2.625,-1.84375 c -0.70836,-0.27081 -1.68232,-0.42185 -2.92188,-0.45312 c -1.2396,-0.0312 -2.90106,-0.0469 -4.98437,-0.0469 l -2.15625,0 l 0,11.65625 l 0.625,0 c 3.04165,1e-5 5.14581,-0.0208 6.3125,-0.0625 c 1.16664,-0.0416 2.35414,-0.3229 3.5625,-0.84375 c 1.06247,-0.45832 1.83851,-1.13019 2.32812,-2.01562 c 0.48956,-0.88541 0.73435,-1.89061 0.73438,-3.01563 z" + transform="matrix(1.100722,0,0,2.0000717,-23.811797,-190.28066)" /> + <path + id="path1297" + style="font-size:64px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Tahoma;-inkscape-font-specification:Tahoma Bold" + d="m 189.84375,226.6931 c -4e-5,2.31252 -0.43754,4.34376 -1.3125,6.09375 c -0.87504,1.75001 -2.05212,3.19793 -3.53125,4.34375 c -1.75004,1.37501 -3.67191,2.35417 -5.76563,2.9375 c -2.09377,0.58334 -4.75523,0.875 -7.98437,0.875 l -18.625,0 l 0,-46.53125 l 16.4375,0 c 3.41664,5e-5 6.00518,0.13026 7.76562,0.39063 c 1.76039,0.26046 3.41143,0.80734 4.95313,1.64062 c 1.66663,0.89588 2.91142,2.0938 3.73437,3.59375 c 0.82288,1.50004 1.23434,3.22921 1.23438,5.1875 c -4e-5,2.27087 -0.56775,4.2917 -1.70313,6.0625 c -1.13545,1.77087 -2.70315,3.07295 -4.70312,3.90625 l 0,0.25 c 2.87496,0.6042 5.17705,1.83857 6.90625,3.70313 c 1.72913,1.8646 2.59371,4.38023 2.59375,7.54687 z M 174.875,207.5681 c -3e-5,-0.74996 -0.19274,-1.52079 -0.57813,-2.3125 c -0.38544,-0.79163 -0.9844,-1.36454 -1.79687,-1.71875 c -0.77086,-0.33329 -1.68231,-0.51558 -2.73438,-0.54687 c -1.0521,-0.0312 -2.61981,-0.0468 -4.70312,-0.0469 l -0.8125,0 l 0,9.84375 l 1.46875,0 c 1.99998,3e-5 3.40102,-0.0208 4.20312,-0.0625 c 0.80207,-0.0416 1.63019,-0.26038 2.48438,-0.65625 c 0.93747,-0.43747 1.58331,-1.04163 1.9375,-1.8125 c 0.35414,-0.7708 0.53122,-1.66663 0.53125,-2.6875 z m 2.9375,18.90625 c -3e-5,-1.43748 -0.2917,-2.56248 -0.875,-3.375 c -0.58336,-0.81248 -1.45836,-1.42706 -2.625,-1.84375 c -0.70836,-0.27081 -1.68232,-0.42185 -2.92188,-0.45312 c -1.2396,-0.0312 -2.90106,-0.0469 -4.98437,-0.0469 l -2.15625,0 l 0,11.65625 l 0.625,0 c 3.04165,1e-5 5.14581,-0.0208 6.3125,-0.0625 c 1.16664,-0.0416 2.35414,-0.3229 3.5625,-0.84375 c 1.06247,-0.45832 1.83851,-1.13019 2.32812,-2.01562 c 0.48956,-0.88541 0.73435,-1.89061 0.73438,-3.01563 z" + transform="matrix(1.100722,0,0,2.0000717,-28.290859,-190.59736)" /> + <path + id="path1299-8" + style="font-size:64px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;text-anchor:middle;fill:url(#radialGradient3980);fill-opacity:1;stroke:none;display:inline;font-family:Tahoma;-inkscape-font-specification:Tahoma Bold" + d="m 227.5625,240.9431 l -31.0625,0 l 0,-46.53125 l 11.6875,0 l 0,37.65625 l 19.375,0 z" + transform="matrix(1.100722,0,0,2.0000717,-23.811797,-190.28066)" /> + <path + style="fill:#ffffff;fill-opacity:1;stroke:none" + d="m 187.3125,197.5625 l 0,94.53125 l 14.125,0 l 0.0625,0 l 21.375,0 l 0,-19.25 l -21.375,0 l 0,-75.28125 l -14.1875,0 z" + id="rect3178" /> + <path + id="path1301-2" + style="font-size:64px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;text-anchor:middle;fill:url(#radialGradient3982);fill-opacity:1;stroke:none;display:inline;font-family:Tahoma;-inkscape-font-specification:Tahoma Bold" + d="m 233.125,240.9431 l 0,-46.53125 l 31.46875,0 l 0,8.875 l -19.84375,0 l 0,8.15625 l 18.28125,0 l 0,8.875 l -18.28125,0 l 0,11.75 l 19.84375,0 l 0,8.875 z" + transform="matrix(1.100722,0,0,2.0000717,-23.811797,-190.28066)" /> + <path + style="fill:#ffffff;fill-opacity:1;stroke:none;display:inline" + d="m 227.8125,197.5 l 0,94.53125 l 14.1875,0 l 21.375,0 l 0,-19.25 l -21.375,0 L 242,250.5 l 19.65625,0 l 0,-18.65625 l -19.65625,0 L 242,216.75 l 21.375,0 l 0,-19.25 l -21.375,0 l -0.0625,0 l -14.125,0 z" + id="rect3178-7" /> + </g> + <g + inkscape:groupmode="layer" + id="layer5" + inkscape:label="Shadow-Glows" + style="display:inline" + sodipodi:insensitive="true"> + <path + style="fill:url(#radialGradient1847);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" + d="m 155.36979,33.010124 c -25.88417,-0.646184 -52.10402,16.489853 -58.645119,42.132764 -1.523665,6.216465 -2.145097,12.11002 -2.254875,18.113595 0,22.267867 0,44.535757 0,66.803627 8.750004,0 17.499994,0 26.249994,0 0.0925,-23.5012 -0.13301,-46.87631 0.17861,-70.425571 0.807,-14.955237 12.36201,-30.72106 28.40103,-30.538528 0.11763,23.802159 -0.24064,47.618949 0.18905,71.411529 1.36798,19.34735 19.70027,35.36023 39.10555,33.71971 12.12286,-0.29421 24.3365,0.70678 36.37991,-0.76099 18.33906,-3.43814 31.03074,-22.11565 29.32549,-40.37177 0,-21.30001 0,-42.600022 0,-63.900042 16.68248,-1.218273 29.33444,14.976486 30.07447,30.538529 0.30976,23.548553 0.0866,46.926943 0.17861,70.425573 8.74998,0 17.5,0 26.25,0 0,-23.625 0,-47.25 0,-70.874984 -0.85887,-7.639884 -2.07039,-16.989202 -6.21065,-24.358407 -10.74033,-21.788774 -35.86083,-33.545313 -59.5533,-31.774288 -6.92055,-0.878987 -14.3655,3.800724 -16.26123,10.359887 0.1142,28.075433 0.19506,56.160521 -0.0157,84.230832 -0.7911,11.75988 -12.37993,20.75218 -23.94549,19.25915 -8.18173,0.35546 -17.42333,0.0143 -23.00369,-7.0158 -7.52043,-7.94897 -5.00134,-19.32564 -5.4428,-29.20225 0.0203,-22.804904 -0.0749,-45.589287 0.13115,-68.355379 -3.42231,-6.92082 -11.02825,-10.493285 -18.56301,-9.357523 l -1.2471,-0.01723 -1.32114,-0.04244 2.6e-4,0 z" + id="rect1019-2" /> + <path + style="fill:url(#radialGradient1193-8);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" + d="m 154.53194,34.268657 c -31.65505,0 -56.16894,21.233495 -59.981238,48.759372 l 26.971868,0 c 3.64479,-12.426072 13.11379,-21.517343 24.51094,-22.574997 0.74035,-0.69976 1.77197,-1.148438 2.92031,-1.148438 l 26.61094,0 0.0984,-15.61875 c 0,0 -2.37838,-3.725289 -4.29844,-5.479687 -2.17544,-1.987733 -5.11175,-3.428347 -8.00625,-3.740625 -2.4252,-0.261648 -5.19957,-0.04115 -8.82656,-0.196875 z" + id="rect1019-7-4-1" /> + <path + sodipodi:type="arc" + style="opacity:0.96660007;fill:url(#radialGradient967-9);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" + id="path906-4" + sodipodi:cx="172.61411" + sodipodi:cy="325.86444" + sodipodi:rx="22.130014" + sodipodi:ry="13.831259" + d="m 194.74412,325.86444 a 22.130014,13.831259 0 1 1 -44.26003,0 22.130014,13.831259 0 1 1 44.26003,0 z" + transform="matrix(1.304789,0,0,1.21464,-20.43351,-43.907478)" /> + <path + style="opacity:0.96660007;fill:url(#radialGradient1131-8);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" + d="m 298.65695,157.25586 0,177.84375 c 35.12811,-3.85349 62.7375,-42.18816 62.7375,-88.92188 0,-46.73371 -27.60939,-85.06838 -62.7375,-88.92187 z" + id="path833-1" /> + <path + style="fill:url(#radialGradient2262);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" + d="m 247.96904,33.42223 c 31.65505,0 56.16894,21.233495 59.98124,48.759372 l -26.97187,0 C 277.33362,69.75553 267.86462,60.664259 256.46748,59.606605 c -0.74036,-0.69976 -1.77197,-1.148438 -2.92032,-1.148438 l -26.61093,0 -0.0984,-15.61875 c 0,0 2.37838,-3.725289 4.29844,-5.479687 2.17544,-1.987733 5.11176,-3.428347 8.00625,-3.740625 2.4252,-0.261648 5.19957,-0.04115 8.82656,-0.196875 z" + id="rect1019-7-4-1-2" /> + <path + style="opacity:0.96660007;fill:url(#radialGradient2300);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" + d="m 107.92195,156.152 0,177.84375 c -35.128104,-3.85349 -62.737497,-42.18816 -62.737497,-88.92187 0,-46.73372 27.609393,-85.06839 62.737497,-88.92188 z" + id="path833-1-5" /> + </g> +</svg> diff --git a/images/mytinytodo_logo.png b/images/mytinytodo_logo.png new file mode 100644 index 00000000..1720924a Binary files /dev/null and b/images/mytinytodo_logo.png differ diff --git a/images/navidrome_logo.png b/images/navidrome_logo.png new file mode 100644 index 00000000..993c8e09 Binary files /dev/null and b/images/navidrome_logo.png differ diff --git a/images/netdata_logo.svg b/images/netdata_logo.svg new file mode 100644 index 00000000..18152fb7 --- /dev/null +++ b/images/netdata_logo.svg @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg width="500px" height="500px" viewBox="0 0 500 500" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <g id="Artboard" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> + <g id="logo_green_fill" transform="translate(0.000000, 49.000000)" fill="#00FF00" fill-rule="nonzero"> + <path d="M307.477876,400.442478 L206.814159,400.442478 L0.486725664,2.21238938 L293.318584,2.21238938 C407.146221,2.33432589 499.391338,94.5794427 499.513274,208.40708 C499.391356,314.41476 413.485557,400.32056 307.477876,400.442478 L307.477876,400.442478 Z" id="Path"></path> + </g> + </g> +</svg> \ No newline at end of file diff --git a/images/odroidhc4.png b/images/odroidhc4.png new file mode 100644 index 00000000..c7f0b1c0 Binary files /dev/null and b/images/odroidhc4.png differ diff --git a/images/opensondage_logo.png b/images/opensondage_logo.png new file mode 100644 index 00000000..3a3603ee Binary files /dev/null and b/images/opensondage_logo.png differ diff --git a/orga/organization_schema.png b/images/organization_schema.png similarity index 100% rename from orga/organization_schema.png rename to images/organization_schema.png diff --git a/images/osticket_logo.svg b/images/osticket_logo.svg new file mode 100644 index 00000000..2733d70b --- /dev/null +++ b/images/osticket_logo.svg @@ -0,0 +1,96 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + id="svg1173" + width="764.79999" + height="312.64001" + viewBox="0 0 764.79999 312.64001" + sodipodi:docname="osticket_logo.svg" + inkscape:version="0.92.5 (0.92.5+68)"> + <metadata + id="metadata1179"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs1177" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1366" + inkscape:window-height="720" + id="namedview1175" + showgrid="false" + inkscape:zoom="0.85120294" + inkscape:cx="368.18016" + inkscape:cy="24.24267" + inkscape:window-x="0" + inkscape:window-y="680" + inkscape:window-maximized="1" + inkscape:current-layer="svg1173" /> + <g + id="g1183"> + <path + style="fill:#fefefe;stroke-width:0.31999999" + d="M 1.1748078,157.49481 V 1.1748062 H 383.5748 h 382.4 V 157.49481 313.81482 H 383.5748 1.1748078 Z" + id="path1199" + inkscape:connector-curvature="0" /> + <path + style="fill:#cecfcf;stroke-width:0.31999999" + d="m 592.60069,313.47962 c -0.68455,-0.27472 -0.72778,-0.45172 -0.64,-2.61972 l 0.0941,-2.32508 h 2.18771 c 2.54058,0 3.00327,-0.36337 3.89991,-3.06291 l 0.53488,-1.61039 -4.55357,-11.9623 c -2.50445,-6.57927 -4.46704,-12.18777 -4.36128,-12.46336 0.15581,-0.40606 0.76835,-0.50104 3.23104,-0.50104 2.67072,0 3.07869,0.0745 3.36813,0.61535 0.32236,0.60239 5.76374,15.95953 5.78291,16.32113 0.0314,0.5911 0.87005,-1.64099 3.17088,-8.43874 1.42224,-4.20201 2.74608,-7.83301 2.94182,-8.06888 0.50973,-0.61418 5.98992,-0.60542 6.22605,0.01 0.17386,0.45305 -8.96547,25.60598 -10.6625,29.34495 -1.28275,2.82619 -2.71337,4.21414 -4.8528,4.70798 -1.9534,0.4509 -5.3064,0.47884 -6.36729,0.0531 z m -308.7887,-17.33318 0.0828,-17.05162 h 2.88 2.88 l 0.0994,0.86065 0.0994,0.86066 1.44043,-0.9135 c 4.1327,-2.62088 10.38441,-1.9042 13.87974,1.59113 4.81023,4.81024 4.96612,15.1777 0.3049,20.27781 -2.25123,2.46321 -4.13916,3.2415 -7.82385,3.22538 -2.29579,-0.0101 -3.21874,-0.16268 -4.54992,-0.75244 -0.91846,-0.40691 -1.83609,-0.94006 -2.03918,-1.18477 -0.20309,-0.24471 -0.49206,-0.44492 -0.64215,-0.44492 -0.15009,0 -0.31246,2.34 -0.36082,5.2 l -0.0879,5.2 -3.12281,0.0916 -3.12281,0.0916 z m 14.9312,3.12472 c 2.33828,-1.20917 3.61858,-3.80655 3.63596,-7.37634 0.0236,-4.838 -2.10827,-7.8278 -5.77034,-8.09269 -3.45988,-0.25027 -5.37179,1.27681 -6.34251,5.06586 -1.14216,4.4583 0.40967,9.01223 3.5485,10.41327 1.27809,0.57049 3.81572,0.56529 4.92839,-0.0101 z m 13.86881,-3.13634 0.0828,-17.04 h 2.88 2.88 l 0.10126,0.88 c 0.0557,0.484 0.16494,0.88 0.24277,0.88 0.0778,0 0.7268,-0.42398 1.44214,-0.94217 2.54039,-1.84026 7.29028,-2.09719 10.61678,-0.57428 3.41913,1.56534 5.51709,4.24761 6.46384,8.26417 1.656,7.02543 -0.88119,14.10198 -5.93287,16.54744 -3.06393,1.48324 -7.83235,1.20692 -10.7145,-0.6209 -0.7929,-0.50284 -1.50864,-0.91426 -1.59053,-0.91426 -0.0819,0 -0.14889,2.376 -0.14889,5.28 v 5.28 h -3.2028 -3.20281 z m 16.01164,2.55598 c 1.81324,-1.38303 2.6182,-3.41782 2.62524,-6.63598 0.007,-3.36306 -0.6656,-5.28035 -2.4047,-6.85154 -1.48112,-1.3381 -2.31651,-1.59357 -4.59347,-1.40474 -2.13981,0.17745 -3.43063,1.073 -4.40844,3.05851 -0.63991,1.29936 -0.74724,2.00126 -0.74587,4.87777 0.002,4.35846 0.78931,6.03935 3.51911,7.51383 1.50787,0.81446 4.58333,0.5289 6.00813,-0.55785 z m -94.72418,5.99071 c -3.98637,-1.07358 -6.88554,-3.33282 -8.34028,-6.49935 -0.97979,-2.1327 -1.35253,-5.40299 -0.66542,-5.83819 0.53408,-0.33828 5.41737,-0.37482 5.91489,-0.0443 0.19461,0.12931 0.45895,0.80613 0.58743,1.50405 0.12848,0.69792 0.43208,1.65276 0.67466,2.12188 1.19672,2.3142 4.53361,3.69689 8.18335,3.39091 3.58184,-0.30029 5.38875,-1.67949 5.64111,-4.30583 0.12721,-1.32393 0.0278,-1.68839 -0.69499,-2.54735 -0.93031,-1.10562 -2.34345,-1.64184 -8.66541,-3.28814 -6.44248,-1.67769 -8.76304,-3.09001 -10.07034,-6.12889 -0.58887,-1.36887 -0.69044,-2.09837 -0.59068,-4.24233 0.13917,-2.99102 0.761,-4.52917 2.55714,-6.32531 2.39046,-2.39046 5.53586,-3.45431 10.23018,-3.46009 5.24064,-0.006 9.13767,1.68323 11.37713,4.93289 1.22952,1.78415 2.16289,4.67679 1.87683,5.81653 -0.19604,0.7811 -0.23013,0.78807 -3.41191,0.69788 l -3.21389,-0.0911 -0.59352,-1.75522 c -0.92853,-2.74597 -2.81771,-3.84479 -6.61026,-3.84479 -2.69049,0 -4.59945,1.00029 -5.19088,2.72001 -0.38226,1.11151 -0.37492,1.43546 0.0558,2.46114 0.66233,1.57725 1.81617,2.11341 8.0644,3.74731 5.89448,1.5414 8.02124,2.46455 9.46431,4.10811 1.75336,1.99698 2.37271,3.74602 2.35245,6.64344 -0.0141,2.01993 -0.17947,2.89469 -0.78382,4.14649 -1.43713,2.97678 -4.2485,5.06308 -8.21479,6.09617 -2.30026,0.59914 -7.68159,0.59049 -9.93349,-0.016 z m 28.39534,-5.4e-4 c -3.24966,-0.90468 -5.13648,-3.20677 -5.76268,-7.03098 -0.17249,-1.05335 -0.31444,-5.53354 -0.31546,-9.95599 -0.002,-6.51184 0.0835,-8.11167 0.44713,-8.41344 0.28475,-0.23633 1.42602,-0.33845 3.12,-0.27919 l 2.67101,0.0935 0.17739,8.8 c 0.10852,5.38369 0.31665,9.12531 0.5361,9.63797 0.64298,1.50203 1.88985,2.20203 3.92235,2.20203 2.24138,0 3.70959,-0.86124 4.64416,-2.72423 0.57615,-1.14849 0.65597,-2.10584 0.8,-9.59577 l 0.16,-8.32 2.67102,-0.0935 c 1.69398,-0.0593 2.83525,0.0429 3.12,0.27919 0.61042,0.5066 0.6725,24.26274 0.065,24.87026 -0.2313,0.2313 -1.35111,0.384 -2.816,0.384 -2.51089,0 -3.2,-0.28943 -3.2,-1.344 0,-0.62535 -0.47957,-0.77447 -0.80376,-0.24992 -0.11084,0.17935 -0.94734,0.70465 -1.85888,1.16733 -2.06577,1.04855 -5.05628,1.2746 -7.57736,0.57274 z m 87.11364,0.0194 c -2.38711,-0.67334 -3.48173,-1.30348 -5.37533,-3.09437 -1.04391,-0.98727 -1.99978,-2.30699 -2.57856,-3.56001 -0.86925,-1.88183 -0.91975,-2.22838 -0.91975,-6.31116 0,-4.18347 0.032,-4.38735 1.00951,-6.45077 2.27161,-4.79469 6.8383,-7.30555 12.55526,-6.90314 5.31024,0.37378 9.08387,3.08165 10.96407,7.86756 1.03843,2.64328 1.02611,8.35949 -0.0237,11.03632 -1.14122,2.90961 -3.00436,4.96172 -5.79892,6.38701 -2.11475,1.07858 -2.71366,1.23332 -5.26611,1.36061 -1.97318,0.0984 -3.41097,-0.006 -4.56637,-0.33205 z m 6.12057,-5.40579 c 3.432,-1.43397 5.04205,-7.53191 3.12995,-11.85446 -2.10905,-4.76781 -8.61283,-5.00874 -10.98012,-0.40675 -0.86733,1.68609 -1.16468,5.66763 -0.57936,7.75818 0.53068,1.89536 1.87932,3.72865 3.23382,4.39592 1.32067,0.65061 3.77392,0.70118 5.19571,0.10711 z m 106.45632,5.36797 c -5.05686,-1.359 -8.17882,-5.56902 -8.56819,-11.55432 -0.6433,-9.88819 6.14877,-16.31493 15.33277,-14.50809 4.79641,0.94364 8.25657,4.24202 8.37747,7.98578 l 0.0474,1.46891 h -2.88 -2.88 l -0.8,-1.6 c -0.5488,-1.09758 -1.15171,-1.77569 -1.92,-2.15951 -1.33984,-0.66932 -3.78141,-0.72726 -5.22521,-0.124 -4.86487,2.03266 -4.99978,12.6091 -0.19255,15.095 1.14896,0.59415 3.58925,0.60395 4.71367,0.0189 1.22918,-0.63955 2.16588,-1.76489 2.60105,-3.12481 0.55632,-1.7386 0.91568,-1.90386 3.91203,-1.79904 l 2.67101,0.0934 -0.0579,1.33314 c -0.12326,2.83697 -2.71811,6.67259 -5.4488,8.05416 -2.63478,1.33304 -6.54307,1.6642 -9.68275,0.82042 z m 51.9031,0.0162 c -3.11305,-0.83811 -5.07507,-2.25658 -6.73993,-4.87271 -1.54765,-2.43199 -2.06042,-4.74642 -1.92087,-8.67022 0.10685,-3.00527 0.23796,-3.64962 1.12669,-5.53842 1.34288,-2.85393 3.22205,-4.82625 5.81431,-6.10254 1.93561,-0.95301 2.36755,-1.03998 5.16483,-1.03998 2.79702,0 3.22953,0.0871 5.16617,1.03998 2.59101,1.27488 4.47552,3.25057 5.79975,6.08039 0.86902,1.85704 0.99267,2.46968 1.01267,5.01747 l 0.0227,2.90216 -8.88,0.0851 -8.88,0.0851 0.007,0.71494 c 0.01,1.0215 1.05722,3.15456 1.95075,3.97362 1.06963,0.9805 2.29651,1.38132 4.22803,1.38132 2.16935,0 3.69351,-0.82542 4.63815,-2.51183 l 0.74396,-1.32817 h 2.85604 2.85603 l -0.007,0.88 c -0.0109,1.37696 -1.10099,3.44494 -2.61146,4.95455 -2.99872,2.99703 -7.85884,4.15788 -12.34787,2.94932 z m 8.77725,-16.00108 c 0.29898,-0.77914 -0.86755,-3.00293 -2.04726,-3.90274 -1.12077,-0.85487 -3.50909,-1.29379 -5.0016,-0.91919 -1.74109,0.43698 -4.36352,3.69975 -3.9144,4.87016 0.26925,0.70161 10.69312,0.65575 10.96326,-0.0482 z m 46.82912,15.91663 c -5.10157,-1.33347 -8.57206,-5.12625 -9.1441,-9.99327 -0.28195,-2.39911 0.003,-2.59719 3.55863,-2.47909 3.06192,0.1017 3.17088,0.17078 3.49606,2.21717 0.27367,1.72235 1.40794,3.17413 3.20077,4.09679 1.36138,0.70061 2.00877,0.81897 4.48,0.81897 4.46733,0 6.62198,-1.43273 6.62198,-4.40325 0,-2.91659 -0.74236,-3.3885 -8.61817,-5.4784 -6.47226,-1.71747 -7.50759,-2.19304 -9.43053,-4.3318 -2.16109,-2.40367 -2.76765,-5.81931 -1.62835,-9.16955 0.7575,-2.22749 3.50608,-4.91839 6.02608,-5.89959 2.32051,-0.90354 8.20845,-1.26193 10.64979,-0.64823 5.1103,1.28459 8.75715,5.11958 8.83501,9.29082 l 0.0328,1.76 -3.2711,0.0911 -3.27114,0.0911 -0.19488,-0.8911 c -0.74819,-3.42085 -2.7441,-4.88483 -6.66576,-4.88931 -3.47834,-0.004 -5.63712,1.46589 -5.63712,3.83822 0,1.64588 1.16944,3.00855 3.12944,3.64649 0.83082,0.27041 3.52656,1.01689 5.99056,1.65886 5.08531,1.3249 6.52541,1.9535 8.2671,3.60857 2.10989,2.00493 2.60413,3.28676 2.6088,6.76608 0.004,2.60366 -0.10892,3.26123 -0.78329,4.58136 -0.90583,1.77321 -2.88848,3.71701 -4.77072,4.67727 -3.18131,1.62298 -9.41379,2.10413 -13.48189,1.0408 z m 53.8463,0.26459 c -4.63904,-0.98867 -7.95484,-4.34458 -7.70313,-7.79632 l 0.0968,-1.3277 2.69024,-0.0938 c 2.90675,-0.1013 3.1704,0.0118 3.69354,1.58354 0.56022,1.68333 1.78236,2.33325 4.59782,2.44507 3.39366,0.13478 4.6984,-0.51007 4.6984,-2.32211 0,-1.76233 -1.03123,-2.37351 -5.87827,-3.48385 -4.68378,-1.07295 -5.72461,-1.47977 -7.28007,-2.84547 -3.20022,-2.80986 -3.1104,-7.41703 0.19991,-10.25052 2.01347,-1.72345 4.00371,-2.29719 7.99843,-2.30572 4.41296,-0.009 6.25859,0.6085 8.48746,2.8417 1.15635,1.15857 1.75059,2.07084 2.05123,3.14895 0.61683,2.21197 0.28441,2.48217 -3.05386,2.48217 h -2.6768 l -0.81587,-1.29243 c -0.95693,-1.51587 -1.80954,-1.90757 -4.15216,-1.90757 -2.07542,0 -3.20278,0.38829 -3.67181,1.26468 -0.8191,1.53053 0.75328,2.60594 5.21181,3.56453 1.61699,0.34766 3.86326,0.9348 4.99171,1.30475 4.09405,1.3422 6.07901,4.66926 5.14579,8.62505 -0.54979,2.33043 -2.864,4.68867 -5.5975,5.704 -2.16038,0.80245 -6.78294,1.14069 -9.0337,0.66101 z m 41.5137,-0.10305 c -3.31734,-0.96073 -6.01568,-3.0259 -7.33654,-5.615 -1.49613,-2.93266 -2.04516,-7.5889 -1.2841,-10.89021 0.87232,-3.78377 3.49914,-7.20712 6.7495,-8.79612 3.42231,-1.67304 8.25981,-1.4295 11.42919,0.5754 1.75513,1.11029 3.83923,3.53725 4.78211,5.56891 0.72083,1.55317 0.84406,2.25608 0.85133,4.85605 l 0.009,3.04 -8.8,0.16 -8.8,0.16 0.10387,0.96 c 0.16336,1.50973 1.00813,3.00133 2.22586,3.93012 0.89977,0.68629 1.53504,0.87461 3.23494,0.95892 2.62518,0.1302 3.96963,-0.4888 5.25856,-2.42108 l 0.91523,-1.37203 2.77075,0.092 2.77079,0.092 -0.0583,0.86595 c -0.17216,2.55641 -3.27811,6.1155 -6.35158,7.27823 -2.34599,0.88752 -6.40643,1.15444 -8.47008,0.55679 z m 8.75107,-15.82181 c 0.25984,-0.42044 -0.66777,-2.66906 -1.44381,-3.49991 -1.10716,-1.18538 -2.29916,-1.69925 -3.94166,-1.69925 -1.76419,0 -3.26256,0.59206 -4.27286,1.68841 -0.77792,0.84413 -1.70247,3.09226 -1.44381,3.51075 0.0819,0.13246 2.57984,0.24084 5.55107,0.24084 2.97123,0 5.46922,-0.10838 5.55107,-0.24084 z m -303.71488,15.3347 c -0.31616,-0.20071 -0.38563,-2.96057 -0.32,-12.71511 l 0.0838,-12.45875 2.51034,-0.094 c 2.89782,-0.10852 3.40966,0.15777 3.40966,1.77394 v 1.12158 l 1.37879,-1.27091 c 1.852,-1.70712 3.8758,-2.46098 5.87683,-2.18907 0.84941,0.11542 2.26438,0.23879 3.14438,0.27416 l 1.6,0.0643 0.0919,-3.3485 c 0.06,-2.18456 0.22685,-3.43423 0.48,-3.59511 0.63488,-0.40345 5.17641,-0.30004 5.60406,0.1276 0.24874,0.24875 0.384,1.54 0.384,3.66599 v 3.28198 l 2.32,0.094 2.32,0.094 v 2.4 2.4 l -2.32,0.094 -2.32,0.094 0.005,7.10598 c 0.003,3.91644 0.14106,7.32136 0.30823,7.58581 0.19584,0.30978 1.01622,0.53658 2.3151,0.64 l 2.01178,0.16018 0.0958,2.21135 c 0.0673,1.55272 -0.0282,2.28991 -0.32,2.4751 -0.60681,0.38492 -6.45945,0.33214 -7.51494,-0.0678 -1.13194,-0.42889 -2.3,-1.49886 -2.77143,-2.53868 -0.22502,-0.4964 -0.42467,-3.95752 -0.52604,-9.12 l -0.16336,-8.32 -1.6,0.0859 c -0.88,0.0473 -2.176,0.0854 -2.88,0.0848 -2.14695,-0.002 -3.89232,0.62827 -5.10858,1.84453 -1.80342,1.80343 -2.09142,3.30974 -2.09142,10.93884 0,4.70505 -0.11018,6.70808 -0.384,6.98192 -0.43338,0.43337 -4.9728,0.52857 -5.61981,0.11786 z m 53.72644,-0.16251 c -0.24602,-0.29643 -0.38148,-4.71352 -0.4392,-14.32 l -0.0834,-13.89136 -5.12,-0.16 -5.12,-0.16 v -2.88 -2.88 h 13.92 13.92 v 2.88 2.88 l -5.2,0.0879 -5.2,0.0879 v 14.00807 c 0,10.4685 -0.097,14.10511 -0.384,14.39208 -0.55533,0.55531 -5.82649,0.51792 -6.29337,-0.0446 z m 19.86137,0.0446 c -0.60752,-0.60752 -0.54544,-24.36366 0.065,-24.87026 0.28474,-0.23633 1.42602,-0.33845 3.12,-0.27919 l 2.67101,0.0935 0.0838,12.45875 c 0.0656,9.75454 -0.004,12.5144 -0.32,12.71511 -0.64701,0.41071 -5.18643,0.31551 -5.61981,-0.11786 z m 37.76,0 c -0.28886,-0.28886 -0.384,-4.52108 -0.384,-17.08082 0,-13.93863 0.0742,-16.75838 0.44899,-17.06944 0.28474,-0.23633 1.42602,-0.33845 3.12,-0.27919 l 2.67101,0.0934 0.17274,8.96001 c 0.095,4.928 0.20301,9.00592 0.24,9.06206 0.037,0.0561 2.04726,-1.92674 4.46726,-4.40639 l 4.4,-4.50846 3.44,0.006 c 3.12487,0.006 3.44,0.0603 3.44,0.59529 0,0.33408 -1.87171,2.42034 -4.32563,4.82144 -2.67974,2.62208 -4.23888,4.37658 -4.0976,4.6111 0.12541,0.20821 2.36528,3.59738 4.9775,7.53148 3.79216,5.7112 4.67466,7.24304 4.3784,7.6 -0.2718,0.32752 -1.21577,0.44708 -3.52985,0.44708 H 497.4988 L 496.55,303.225 c -0.52185,-0.7204 -2.1911,-3.30927 -3.70941,-5.75306 l -2.76057,-4.44325 -1.22311,0.9829 c -0.67267,0.5406 -1.3064,1.29348 -1.40822,1.67307 -0.10182,0.37959 -0.1871,2.43876 -0.1895,4.57593 -0.004,3.24543 -0.0878,3.91777 -0.51056,4.08 -0.9225,0.35399 -5.11031,0.20976 -5.50983,-0.18977 z m 55.76557,-0.25527 c -2.4336,-1.20464 -2.52835,-1.59637 -2.70957,-11.20073 l -0.16,-8.48 -1.92,-0.16 -1.92,-0.16 v -2.4 -2.4 l 1.92,-0.16 1.92,-0.16 0.0919,-3.3485 c 0.06,-2.18456 0.22684,-3.43423 0.48,-3.59511 0.63488,-0.40345 5.17641,-0.30004 5.60406,0.1276 0.24874,0.24875 0.384,1.54 0.384,3.66599 v 3.28198 l 2.32,0.094 2.32,0.094 v 2.4 2.4 l -2.32,0.094 -2.32,0.094 0.005,7.10598 c 0.003,3.91644 0.14106,7.32136 0.30822,7.58581 0.19584,0.30978 1.01623,0.53658 2.31511,0.64 l 2.01177,0.16018 0.096,2.02794 c 0.0577,1.21964 -0.0535,2.20812 -0.2792,2.48 -0.62739,0.75597 -6.51513,0.62068 -8.14723,-0.18721 z m 108.65677,-0.0807 c -2.54032,-1.29787 -2.70151,-1.95129 -2.83808,-11.50507 l -0.1176,-8.22507 -1.80535,-0.0949 -1.80531,-0.0949 v -2.4 -2.4 l 1.84,-0.096 1.84,-0.096 v -3.28003 c 0,-2.12447 0.1353,-3.41532 0.384,-3.66404 0.42765,-0.42764 4.96918,-0.53105 5.60406,-0.1276 0.25316,0.16088 0.42,1.41055 0.48,3.59511 l 0.0919,3.3485 2.06774,0.097 c 1.13725,0.0534 2.25325,0.251 2.48,0.43919 0.24896,0.20662 0.41226,1.07163 0.41226,2.18379 0,1.11216 -0.1633,1.97716 -0.41226,2.18378 -0.22675,0.18819 -1.34275,0.38582 -2.48,0.43919 l -2.06774,0.097 v 7.14617 c 0,8.2166 -0.0587,8.05383 2.90691,8.05383 1.22272,0 1.71619,0.13437 1.85885,0.50617 0.34061,0.88757 0.20851,3.83154 -0.18976,4.22983 -0.2479,0.24791 -1.52803,0.384 -3.61219,0.384 -2.71687,0 -3.45143,-0.11405 -4.63747,-0.72 z m 38.14985,0.45386 c -0.31616,-0.20071 -0.38563,-2.96057 -0.32,-12.71511 l 0.0838,-12.45875 h 2.88 2.88 l 0.0978,1.0064 0.0978,1.0064 1.59885,-1.07595 c 0.87936,-0.59178 2.13136,-1.22385 2.78224,-1.40462 2.9215,-0.81141 6.6527,-0.0254 8.52893,1.79684 0.60649,0.58901 1.19494,1.07093 1.30771,1.07093 0.11273,0 0.79757,-0.50725 1.52189,-1.12721 3.26755,-2.79691 9.36291,-2.74784 12.34944,0.0994 2.08336,1.9862 2.27539,3.16616 2.27539,13.98188 0,6.8206 -0.10291,9.42083 -0.384,9.70192 -0.2313,0.2313 -1.35111,0.384 -2.816,0.384 -1.4649,0 -2.58471,-0.1527 -2.816,-0.384 -0.27917,-0.27919 -0.384,-2.67945 -0.384,-8.79353 0,-9.20522 -0.21235,-10.53909 -1.79242,-11.25902 -1.12761,-0.51378 -3.51037,-0.45085 -4.61805,0.12196 -1.92422,0.99506 -2.05875,1.6777 -2.17376,11.031 -0.0649,5.27711 -0.23065,8.62873 -0.4392,8.88 -0.4432,0.53403 -5.10192,0.55023 -5.63257,0.0196 -0.27891,-0.27892 -0.38448,-2.66519 -0.38579,-8.72 -0.003,-8.7663 -0.19949,-10.39241 -1.36186,-11.20657 -0.95629,-0.6698 -3.71789,-0.63796 -4.72515,0.0545 -2.28112,1.56818 -2.49879,2.57019 -2.52685,11.63208 -0.0176,5.65509 -0.13194,7.96358 -0.40835,8.24 -0.43338,0.43337 -4.9728,0.52858 -5.61981,0.11786 z M 443.29346,275.24014 c -0.3977,-1.03639 -0.21536,-4.8531 0.25033,-5.23958 0.28474,-0.23633 1.42602,-0.33845 3.12,-0.27919 l 2.67101,0.0934 v 2.88 2.88 l -2.92134,0.0915 c -2.45111,0.0768 -2.95335,0.008 -3.12,-0.42617 z M 86.390343,256.24877 c -1.295725,-0.81661 -1.949165,-2.0768 -2.204829,-4.25212 -0.26288,-2.23668 0.351373,-3.70429 2.288105,-5.46687 1.933652,-1.75978 2.38017,-2.68412 2.385917,-4.93907 0.0094,-3.69359 1.063559,-6.6865 4.060135,-11.52747 1.335772,-2.15793 1.449795,-2.51949 1.71558,-5.44 1.155332,-12.695 1.193895,-21.65028 0.139556,-32.40843 -0.917108,-9.35785 -0.994938,-13.32486 -0.329645,-16.80202 1.043021,-5.45138 2.543757,-7.23613 12.510358,-14.87798 15.8371,-12.14302 20.05254,-17.04566 23.29187,-27.08884 2.31632,-7.18151 4.35218,-20.60331 4.36411,-28.77129 0.003,-2.10944 -0.0624,-2.3228 -0.9822,-3.2 -1.49318,-1.42403 -3.71318,-4.926485 -4.68054,-7.384386 -0.76412,-1.941526 -0.8658,-2.639667 -0.87901,-6.035485 -0.0132,-3.394762 0.0899,-4.14945 0.88951,-6.508874 0.49746,-1.467881 0.8439,-2.729434 0.76989,-2.80345 -0.074,-0.07401 -1.12902,0.368087 -2.34446,0.982449 -7.87414,3.980102 -17.49856,14.895974 -24.95381,28.302226 -3.355232,6.03349 -9.703846,20.28245 -11.924905,26.76451 -1.506007,4.3952 -2.390592,8.21091 -5.33289,23.00371 -7.427753,37.344 -12.759222,56.63801 -18.682288,67.60916 -0.590812,1.09435 -2.283516,3.49921 -3.761564,5.34415 -7.125146,8.89378 -16.130202,14.63703 -26.701584,17.02977 -3.363151,0.76121 -10.476817,0.76689 -14.052841,0.0112 -7.902012,-1.66984 -18.7300421,-6.73707 -20.408305,-9.55055 -1.16866169,-1.95917 0.8631302,-2.33323 6.6114449,-1.21718 9.5398301,1.85218 17.2075721,2.2407 22.4368591,1.13687 7.542564,-1.59213 12.293635,-4.40957 18.054163,-10.70633 3.356516,-3.66895 5.03272,-6.10205 6.890474,-10.00189 2.772368,-5.8198 3.652528,-9.90616 6.090304,-28.27579 0.724048,-5.456 1.732416,-12.368 2.240819,-15.36 0.884189,-5.20352 1.402902,-9.35411 2.899389,-23.2 0.79279,-7.3351 1.871033,-13.98673 3.046048,-18.7909 1.59512,-6.52179 8.290384,-27.31853 11.680096,-36.280541 10.449436,-27.627114 23.98969,-45.544686 43.88675,-58.074533 4.54578,-2.86263 13.62345,-7.359006 18.86317,-9.343359 25.26166,-9.56693 57.43325,-10.932751 80.29304,-3.408782 6.03826,1.987404 8.55746,3.51885 20.45574,12.435264 6.77375,5.076154 11.87727,7.931172 16.16,9.040237 3.51644,0.910628 13.99177,0.821175 17.92,-0.153024 6.70973,-1.664006 9.8,-4.255929 13.43705,-11.270134 1.23037,-2.372827 2.95837,-5.394231 3.84,-6.714231 l 1.60295,-2.4 0.0163,-6.24 c 0.0139,-5.30434 0.12085,-6.659508 0.71346,-9.037735 1.50075,-6.0227802 4.31811,-9.2022658 8.15419,-9.2022658 0.86821,0 2.79602,1.8830703 2.79602,2.7311349 0,0.5842329 0.2788,0.5871286 1.64315,0.017066 1.61383,-0.6743009 2.90333,-0.029828 3.90026,1.9492883 2.23746,4.4418616 1.97554,10.7084476 -0.67283,16.0976586 -0.64999,1.322669 -1.18377,2.529222 -1.18619,2.681229 -0.003,0.152006 1.04458,0.542763 2.32664,0.868347 3.10836,0.789376 6.48667,2.60918 8.77262,4.725553 3.0673,2.839784 6.91123,9.162364 9.23693,15.193046 0.94502,2.450589 1.15571,2.717405 5.57568,7.061748 5.38342,5.291312 7.20742,7.84719 7.1967,10.084544 -0.0141,2.919258 -2.11516,5.704589 -4.86764,6.452499 -0.75092,0.204039 -1.55152,0.424397 -1.77911,0.489687 -0.30787,0.08832 -0.32835,0.278365 -0.08,0.742416 0.49034,0.916192 0.41936,1.249302 -0.45165,2.120329 -0.59356,0.593543 -1.12131,0.783738 -2.16,0.778429 -1.82345,-0.0093 -3.35257,-0.753737 -6.81456,-3.317478 -1.584,-1.173018 -3.384,-2.261735 -4,-2.41937 -0.616,-0.157635 -2.92,-0.448288 -5.12,-0.645894 -4.31258,-0.38736 -6.95822,-0.941005 -9.16829,-1.918624 l -1.39855,-0.618647 -0.43189,0.70352 c -0.23754,0.386938 -1.04055,1.85552 -1.78446,3.26352 -1.56549,2.96298 -5.33439,8.746833 -7.49588,11.503389 -7.08277,9.032666 -16.40478,16.092919 -24.89471,18.854635 l -2.45379,0.798198 -6.79039,6.82189 c -6.25297,6.28199 -12.60706,13.55673 -15.86454,18.16317 -0.72738,1.0286 -1.64521,2.8576 -2.03963,4.06445 -0.91317,2.79416 -1.74573,4.16882 -2.8801,4.75543 -0.56845,0.29395 -2.41533,0.54202 -5.00911,0.67281 -3.26723,0.16474 -4.72489,0.40176 -7.11772,1.15734 -3.38069,1.06752 -4.81913,1.04444 -8.65952,-0.13896 -3.87231,-1.19323 -5.58401,-2.43533 -5.96225,-4.32652 -0.27398,-1.36993 0.95956,-2.64583 2.558,-2.64583 0.61394,0 1.63136,-0.30392 2.26093,-0.67538 0.92053,-0.54312 1.42958,-0.63265 2.59965,-0.45719 1.07439,0.16112 1.65569,0.0867 2.22235,-0.28462 1.06264,-0.69627 2.5913,-0.62831 3.88756,0.17283 0.9761,0.60325 1.15154,0.62453 1.63777,0.19858 1.2628,-1.10621 2.68508,-1.57781 4.11275,-1.36372 1.38875,0.20825 1.43054,0.18643 3.87785,-2.02538 1.36069,-1.22975 2.93357,-3.00298 3.49531,-3.94051 2.30799,-3.85207 5.98325,-14.34802 5.27284,-15.05843 -0.47925,-0.47925 -1.68182,0.35836 -4.25691,2.96501 -2.20284,2.22983 -3.52975,4.54924 -5.21104,9.10881 -0.45429,1.232 -1.10629,2.69875 -1.44889,3.25943 -0.75933,1.24269 -5.00807,4.4964 -6.38841,4.89227 -1.28199,0.36767 -7.64775,0.48317 -9.97092,0.1809 -1.28238,-0.16684 -2.26903,-0.0872 -3.51914,0.28403 -3.52248,1.04607 -7.1593,-0.69443 -7.94144,-3.80058 -0.66324,-2.63395 0.47887,-3.92226 3.16165,-3.56638 1.48448,0.19693 1.52317,0.17931 2.35019,-1.0704 1.20767,-1.82491 2.60724,-2.184 5.26312,-1.35035 l 2.01237,0.63168 0.673,-0.91027 c 1.06217,-1.43668 2.22957,-1.7747 4.50556,-1.3046 l 1.92212,0.39701 1.0975,-1.06137 c 1.02481,-0.99108 4.27656,-5.82593 4.75253,-7.06628 0.19478,-0.50758 -0.11219,-0.55509 -3.58669,-0.55509 -9.10511,0 -21.26053,-1.33728 -28.69317,-3.15669 l -3.78439,-0.92636 -0.27836,0.68152 c -0.1531,0.37484 -0.80955,2.04953 -1.45877,3.72153 -2.49171,6.41707 -7.317,15.16409 -11.29737,20.47922 -2.55484,3.41159 -6.00238,6.94726 -10.43671,10.70354 -7.52912,6.37784 -11.99584,9.58126 -24.3019,17.42877 -9.96602,6.35528 -13.92041,9.09161 -19.10541,13.22042 -12.14011,9.66715 -21.10676,19.69657 -23.66402,26.46878 -2.02201,5.35472 -3.86106,19.22588 -5.2472,39.57721 -0.55704,8.17847 -0.83176,9.90941 -1.93038,12.16301 -2.04765,4.20036 -10.811573,10.46418 -15.217615,10.87646 -1.378762,0.12902 -1.94311,0.0301 -2.757942,-0.48345 z m 400.328527,-1.66451 c -11.76157,-1.37045 -21.76154,-5.95283 -29.24628,-13.40186 -9.1534,-9.1097 -13.71129,-21.11758 -13.73155,-36.17598 -0.016,-11.95076 2.84202,-21.82007 8.99085,-31.04671 4.11405,-6.17333 11.67939,-12.64225 18.70838,-15.99705 10.89757,-5.2012 25.24112,-6.99181 38.2065,-4.7696 6.04992,1.03694 12.56851,3.05604 12.93302,4.00594 0.23085,0.60156 -3.90371,18.0764 -4.4006,18.59925 -0.28132,0.29603 -1.2033,0.0978 -4.04439,-0.86952 -5.0959,-1.73505 -8.79721,-2.33587 -14.4,-2.33752 -9.02089,-0.003 -15.90429,2.58288 -21.22662,7.97316 -5.38426,5.453 -8.09703,12.28889 -8.44288,21.27535 -0.62803,16.31649 7.05782,27.90206 21.02966,31.70003 2.39261,0.65039 3.4513,0.73968 8.79984,0.74221 6.88957,0.003 9.47245,-0.38621 15.24455,-2.2987 2.20934,-0.73204 3.60604,-1.04585 3.79846,-0.85343 0.37702,0.37702 3.58336,17.26118 3.45216,18.17854 -0.23059,1.61209 -10.56451,4.38673 -19.72909,5.29722 -3.82982,0.38048 -12.59417,0.36876 -15.94201,-0.0213 z m 170.13593,0.0162 c -11.73872,-1.44589 -21.58368,-5.79074 -28.91658,-12.7617 -4.08646,-3.88473 -8.49897,-10.81403 -10.56089,-16.58459 -2.44467,-6.84164 -3.20586,-12.39638 -2.99229,-21.83582 0.13837,-6.11473 0.28762,-7.78747 0.98726,-11.06675 1.16717,-5.47051 2.46887,-9.27044 4.8153,-14.0568 5.69293,-11.61278 14.32333,-19.44859 25.86307,-23.4819 5.28112,-1.84582 9.22394,-2.42466 16.40413,-2.40829 6.9737,0.0159 10.45334,0.52861 15.27478,2.25069 15.03251,5.36919 24.68259,19.27038 26.78672,38.58689 0.57671,5.29422 0.31699,14.75981 -0.47328,17.24975 -0.18576,0.58527 -1.13981,0.60286 -32.69574,0.60286 H 638.8429 l 0.20467,2.20213 c 0.88614,9.53456 7.44781,17.21773 17.32723,20.28879 4.37878,1.36117 6.9183,1.67084 13.44,1.63891 8.31318,-0.0407 14.39299,-0.87269 21.14982,-2.89422 4.18487,-1.25204 4.80615,-1.29971 5.02666,-0.38569 0.0996,0.41255 0.92758,4.27017 1.84009,8.57249 l 1.65914,7.8224 -0.70394,0.57 c -1.683,1.36282 -11.46851,3.9635 -19.19862,5.10238 -4.96259,0.73115 -18.68989,1.08649 -22.73315,0.58847 z m 23.58201,-64.38566 c -0.44416,-6.0746 -2.57766,-11.21663 -6.14201,-14.80306 -2.60086,-2.61699 -4.58096,-3.76249 -8.02733,-4.64393 -4.97699,-1.2729 -10.61933,-0.60353 -15.19917,1.8031 -5.35088,2.81182 -9.69299,9.0751 -11.51088,16.60389 -0.33996,1.408 -0.61913,2.812 -0.62038,3.12 -0.003,0.52763 1.20298,0.56 20.84528,0.56 h 20.84755 z m 60.40186,64.27523 c -3.68317,-0.70635 -5.89699,-1.44914 -8.94387,-3.0009 -2.29309,-1.16785 -3.43607,-2.02593 -5.60858,-4.21055 -3.05616,-3.0732 -4.77789,-5.9881 -6.18089,-10.46424 -1.95434,-6.23501 -1.92906,-5.79663 -2.04983,-35.55954 l -0.11072,-27.28 -6.62499,-0.005 c -3.64374,-0.003 -6.8072,-0.12057 -7.02992,-0.26193 -0.31478,-0.19982 -0.38602,-2.35358 -0.32,-9.6751 l 0.0849,-9.41808 6.88,-0.16 6.88,-0.16 0.0842,-10.8088 0.0843,-10.80881 0.71571,-0.30553 c 1.45908,-0.62283 23.30477,-5.72564 23.76164,-5.55033 0.4086,0.15681 0.47411,2.07784 0.47411,13.90771 v 13.72576 h 11.01382 c 6.0576,0 11.2416,0.0874 11.52,0.19424 0.44563,0.171 0.50618,1.31535 0.50618,9.56576 0,8.25041 -0.0605,9.39477 -0.50618,9.56576 -0.2784,0.10684 -5.46982,0.19424 -11.53654,0.19424 h -11.03037 l 0.10902,24.4 c 0.1049,23.467 0.13412,24.48646 0.76448,26.66103 1.35677,4.68038 3.5401,7.28949 6.9464,8.30105 2.12666,0.63155 7.71274,0.62015 11.10128,-0.0227 1.93748,-0.36753 2.73354,-0.40593 2.99533,-0.14449 0.24135,0.241 0.38819,3.40459 0.4544,9.78945 l 0.0978,9.43337 -1.21783,0.50976 c -0.66979,0.28037 -2.65782,0.78351 -4.41782,1.1181 -4.2793,0.81352 -15.63168,1.09565 -18.89613,0.46961 z M 203.89481,252.8164 c -13.01553,-1.87237 -23.65622,-8.06151 -31.29314,-18.20159 -2.62039,-3.47928 -6.20841,-10.55112 -7.71197,-15.2 -2.26681,-7.00875 -3.07489,-12.64319 -3.07489,-21.44 0,-11.95448 1.75177,-19.97181 6.39764,-29.28 4.74284,-9.50249 11.82614,-16.6806 20.96236,-21.24295 3.80933,-1.90227 6.81747,-2.94046 11.36,-3.92067 2.9164,-0.62932 4.31055,-0.72666 10.56,-0.7373 5.71886,-0.01 7.79006,0.10698 10.06839,0.56746 14.80532,2.9923 26.81552,12.30278 33.46137,25.93971 2.81516,5.77658 4.94747,13.39287 5.74317,20.51375 0.41394,3.70445 0.41394,12.61556 0,16.32 -0.7733,6.92045 -2.85167,14.45894 -5.56623,20.18946 -1.90936,4.03068 -4.80892,8.45054 -5.54382,8.45054 -0.53882,0 -9.36289,-8.53089 -9.36289,-9.05181 0,-0.13394 0.86069,-2.00408 1.91264,-4.15586 3.49888,-7.15703 5.20843,-14.91281 5.20028,-23.59233 -0.0196,-20.84484 -10.5125,-37.85861 -26.1419,-42.38784 -8.2257,-2.38371 -17.65225,-1.50905 -24.89991,2.31038 -11.66665,6.14818 -18.9398,18.9238 -20.45181,35.92454 -0.80437,9.04409 1.0928,19.48522 5.0282,27.67292 3.61364,7.51826 8.94994,13.23324 15.52937,16.63138 8.26391,4.26814 18.955,4.7394 27.78355,1.22467 l 2.04042,-0.81231 4.29411,4.29411 c 3.06526,3.06526 4.23742,4.44182 4.09603,4.81027 -0.19761,0.51498 -3.99917,2.27282 -7.03098,3.25112 -4.81292,1.55304 -7.14834,1.86099 -14.87999,1.96211 -4.136,0.0541 -7.952,0.0362 -8.48,-0.0398 z m 94.23999,-0.01 c -11.38957,-1.72707 -18.52945,-4.79157 -24.6784,-10.59218 -2.12214,-2.00192 -4.89985,-5.78215 -6.2894,-8.55935 -1.8838,-3.76501 -3.70919,-10.54683 -4.11276,-15.28 l -0.21145,-2.48 h 6.75151 6.7515 l 0.18274,1.2 c 1.01912,6.69235 2.10032,9.83285 4.62065,13.42118 6.65953,9.48155 21.57288,13.51292 36.27426,9.80564 l 3.20201,-0.80746 4.2815,4.27032 c 2.35482,2.34868 4.24208,4.47781 4.19392,4.7314 -0.1887,0.99358 -7.5239,3.14464 -13.68608,4.01346 -3.06893,0.4327 -14.99269,0.62384 -17.28,0.27699 z m 67.88317,-0.21953 c -0.26486,-0.31911 -0.38301,-15.60112 -0.44227,-57.20372 l -0.0809,-56.76829 -19.04,-0.16 -19.04,-0.16 v -10.56 -10.56 l 39.18032,-0.0813 c 31.13293,-0.0646 39.23267,0.001 39.43511,0.32 0.32976,0.51939 0.3342,20.11624 0.005,20.63499 -0.18301,0.28812 -2.17696,0.41684 -7.43511,0.48 l -7.18512,0.0863 -0.16,57.12 -0.16,57.12 -12.35773,0.0837 c -10.10902,0.0685 -12.42348,0.004 -12.7191,-0.35172 z m 42.90448,0.0477 c -0.60896,-0.60898 -0.55981,-97.31841 0.0497,-97.82428 0.31347,-0.26017 3.96157,-0.33924 12.88,-0.27918 l 12.44262,0.0838 v 49.12 49.12 l -12.49235,0.0837 c -9.44931,0.0633 -12.58678,-0.0108 -12.88,-0.304 z m 121.10934,0.17067 c -0.11933,-0.11935 -0.21699,-32.2042 -0.21699,-71.29967 0,-54.85985 0.0877,-71.17031 0.384,-71.46667 0.2849,-0.28491 3.45728,-0.384 12.29382,-0.384 6.5504,0 12.1376,0.0874 12.416,0.19424 0.45808,0.17578 0.50618,4.27956 0.50618,43.2 0,23.65317 0.108,42.99976 0.24,42.99242 0.132,-0.007 1.09674,-1.33934 2.14387,-2.96 1.04714,-1.62066 7.92397,-10.97608 15.28183,-20.78982 l 13.37798,-17.84317 14.95382,0.0832 c 13.17584,0.0733 14.96512,0.14183 15.0488,0.57661 0.0546,0.28362 -7.3936,8.77011 -17.51564,19.95736 -9.68586,10.70515 -17.61066,19.61561 -17.61066,19.80103 0,0.18541 8.964,12.86502 19.92,28.17691 10.956,15.31189 20.1064,28.17879 20.33421,28.59311 0.22781,0.41433 0.32729,0.8939 0.22109,1.06573 -0.12119,0.19611 -5.83876,0.31241 -15.35789,0.31241 h -15.16483 l -0.78039,-1.04 c -0.42921,-0.572 -6.57731,-9.968 -13.6624,-20.88 -7.08509,-10.912 -13.05555,-20.02917 -13.26771,-20.26039 -0.31034,-0.33824 -1.12986,0.44288 -4.19389,3.99741 l -3.80819,4.4178 -0.16,16.80259 -0.16,16.80259 -12.50301,0.0837 c -6.87664,0.046 -12.60064,-0.014 -12.72,-0.13334 z M 326.8502,243.17037 c -2.24148,-2.24645 -4.0754,-4.25006 -4.0754,-4.45247 0,-0.2024 0.94164,-0.8946 2.09252,-1.53821 2.56988,-1.43715 5.96579,-4.55618 7.40896,-6.80488 0.59299,-0.924 1.2414,-1.68 1.44086,-1.68 0.5023,0 8.53037,7.98688 8.76218,8.71725 0.39424,1.24211 -5.0314,6.43793 -9.2328,8.84172 -0.96228,0.55057 -1.87818,1.00103 -2.0353,1.00103 -0.15709,0 -2.11958,-1.838 -4.36102,-4.08444 z m -95.08051,-1.32059 c -2.39246,-2.39779 -4.02361,-4.27432 -3.89553,-4.48156 0.12118,-0.19608 1.08608,-0.94442 2.1442,-1.66298 2.29281,-1.55702 5.8196,-4.83472 7.15644,-6.65101 0.57304,-0.77854 1.22436,-1.30734 1.61582,-1.31185 0.77895,-0.009 8.78418,7.93323 8.78418,8.71503 0,1.26609 -9.68022,9.5174 -11.16555,9.5174 -0.28802,0 -2.37582,-1.85626 -4.63956,-4.12503 z m 107.02454,-10.73549 -4.61229,-4.62054 0.0734,-3.29946 c 0.1614,-7.25912 -2.77613,-11.55915 -10.36052,-15.16595 -3.85471,-1.83314 -8.67948,-3.20952 -20.16,-5.75114 -14.03969,-3.10817 -20.93844,-5.51275 -26.57367,-9.26229 -4.81642,-3.20475 -8.5305,-8.12972 -9.89426,-13.1201 -0.70842,-2.59232 -0.99018,-9.29156 -0.51784,-12.31249 1.92886,-12.33641 12.12359,-20.99125 28.34577,-24.06422 5.12179,-0.97021 15.97221,-1.05463 20.48,-0.15933 8.58026,1.70414 14.61248,4.75586 19.57661,9.90387 4.00141,4.14964 6.47498,8.5305 7.93946,14.06145 0.84128,3.17718 1.53568,8.27931 1.23385,9.06581 -0.15584,0.40614 -1.17126,0.46474 -6.78092,0.39129 l -6.59764,-0.0864 -0.37974,-2.67336 c -1.14483,-8.05918 -5.2111,-13.67486 -12.30571,-16.99465 -4.58905,-2.14736 -11.6013,-3.18236 -17.53907,-2.58875 -9.76489,0.97621 -16.17247,4.49806 -19.15279,10.52709 -1.17909,2.38522 -1.19405,2.4638 -1.19405,6.27258 0,3.57001 0.0656,3.98809 0.88148,5.61709 2.2347,4.46195 7.24395,7.86179 15.27852,10.36971 3.1899,0.99569 18.17967,4.53242 23.84,5.62487 9.4466,1.82319 17.86397,6.54459 22.43082,12.58167 1.76736,2.33633 3.7431,6.32534 4.46944,9.02375 0.68922,2.56037 0.95149,8.98133 0.49021,12 -0.69795,4.56744 -2.62256,9.28 -3.78989,9.28 -0.31286,0 -2.64438,-2.07923 -5.18115,-4.62052 z m 69.93622,-93.16201 c -0.29274,-0.76279 -0.22646,-20.07349 0.0705,-20.54124 0.20074,-0.31621 2.99252,-0.3856 12.87511,-0.32 l 12.61878,0.0838 v 10.56 10.56 l -12.68435,0.0836 c -11.35853,0.0749 -12.70483,0.0303 -12.88,-0.42617 z" + id="path1197" + inkscape:connector-curvature="0" /> + <path + style="fill:#facea4;stroke-width:0.31999999" + d="m 593.1748,313.57898 c -1.03206,-0.19182 -1.27008,-0.59717 -1.27072,-2.16416 0,-2.53726 0.1175,-2.66372 2.44576,-2.6089 1.89667,0.0447 2.14227,-0.0272 2.83386,-0.82926 0.41648,-0.48299 0.99043,-1.63499 1.27542,-2.56 l 0.51818,-1.68184 -4.51178,-11.82179 c -2.48147,-6.50199 -4.43955,-12.00999 -4.3513,-12.24 0.11476,-0.29902 0.93783,-0.41821 2.88781,-0.41821 2.28755,0 2.78579,0.0936 3.08986,0.58048 0.19939,0.31926 1.61734,4.17126 3.15101,8.56 1.53369,4.38873 2.91392,7.97952 3.0672,7.97952 0.15328,0 1.58054,-3.816 3.17171,-8.48 l 2.89299,-8.48 2.69024,-0.0938 c 1.47965,-0.0516 2.81936,0.0353 2.97715,0.19313 0.25319,0.25319 -6.64912,19.55059 -9.88912,27.64797 -1.44841,3.61985 -3.06749,5.5043 -5.2984,6.16681 -1.56198,0.46386 -3.96105,0.56946 -5.67987,0.25001 z m -308.97326,-0.80416 c -0.0842,-0.22 -0.11573,-7.816 -0.07,-16.88 l 0.0832,-16.48 h 2.56 2.56 l 0.10028,1.04 c 0.0551,0.572 0.18014,1.04 0.27775,1.04 0.0976,0 0.66514,-0.42817 1.26115,-0.95148 2.42774,-2.13158 7.69054,-2.52039 11.15723,-0.8243 5.50876,2.69518 7.89889,10.2578 5.5657,17.61041 -0.75297,2.37281 -1.95753,4.14423 -3.74535,5.50784 -3.36689,2.56801 -8.63727,2.66634 -12.25955,0.22873 -0.89184,-0.60016 -1.67905,-1.0912 -1.74936,-1.0912 -0.0703,0 -0.12785,2.29222 -0.12785,5.09382 0,2.80161 -0.0874,5.32161 -0.19423,5.6 -0.15451,0.40264 -0.71292,0.50618 -2.73004,0.50618 -1.73362,0 -2.58427,-0.12654 -2.68899,-0.4 z m 15.04194,-13.4491 c 0.74506,-0.42199 1.66957,-1.36699 2.24,-2.28964 0.92877,-1.50225 0.97132,-1.72638 0.97132,-5.11617 0,-2.84511 -0.11778,-3.76624 -0.59653,-4.66509 -0.7624,-1.43143 -2.04559,-2.81287 -3.14757,-3.38857 -1.10197,-0.5757 -3.81268,-0.58141 -5.14617,-0.0109 -5.2141,2.23096 -5.34611,12.95359 -0.1909,15.50535 1.87503,0.9281 4.19379,0.91427 5.86985,-0.035 z m 13.76305,13.46212 c -0.087,-0.22716 -0.12072,-7.82902 -0.075,-16.89302 l 0.0832,-16.48 h 2.55562 c 2.30791,0 2.56561,0.062 2.65874,0.64 0.23482,1.4574 0.35242,1.49647 1.58239,0.52578 4.34133,-3.42618 11.9925,-2.19617 15.18284,2.44081 1.50195,2.183 2.21088,4.38231 2.41168,7.48155 0.52102,8.04219 -3.37952,13.71599 -9.79927,14.2542 -2.59507,0.21756 -5.25686,-0.46342 -7.29647,-1.8667 -0.99949,-0.68767 -1.42466,-0.83529 -1.53589,-0.53327 -0.0846,0.22969 -0.19112,2.72163 -0.23672,5.53763 l -0.0829,5.12 -2.64504,0.093 c -1.93497,0.068 -2.68751,-0.0179 -2.80323,-0.32 z m 15.75493,-13.90155 c 4.27142,-3.45716 3.72166,-12.49069 -0.90378,-14.85041 -2.01702,-1.02901 -4.93683,-0.78828 -6.59097,0.54341 -1.94025,1.56203 -2.69264,3.75798 -2.56132,7.47553 0.1178,3.335 0.67742,4.86715 2.36011,6.46165 1.31042,1.24175 2.25282,1.54364 4.4974,1.4407 1.66528,-0.0764 2.18464,-0.25025 3.19856,-1.07088 z m -94.86644,5.47408 c -4.9407,-1.33041 -8.28194,-4.80908 -9.00353,-9.37384 -0.38679,-2.44681 -0.12282,-2.66019 3.14932,-2.54585 l 2.69391,0.0941 0.38193,1.50055 c 0.57771,2.26977 1.53948,3.56795 3.41012,4.60292 1.53662,0.85017 1.96072,0.93329 4.72803,0.92659 3.35739,-0.008 5.25448,-0.68104 6.26414,-2.22199 0.75912,-1.15856 0.91675,-3.05145 0.36422,-4.37382 -0.63327,-1.51565 -2.02021,-2.15692 -8.22836,-3.80453 -7.56455,-2.00759 -9.29356,-2.96555 -10.75915,-5.96111 -2.22248,-4.54257 -0.18302,-10.13421 4.56734,-12.52244 2.46632,-1.23993 6.25552,-1.79609 9.28751,-1.36317 6.1282,0.87501 10.04725,4.20543 10.84904,9.21956 0.2631,1.64537 -0.29079,1.99744 -3.14254,1.99744 -2.39016,0 -2.82932,-0.28032 -3.55902,-2.27179 -0.2966,-0.80948 -0.86376,-1.77661 -1.26034,-2.14918 -2.20892,-2.07518 -7.96828,-2.18698 -10.16678,-0.19736 -0.34187,0.30938 -0.78292,1.10101 -0.98011,1.75917 -0.30219,1.00861 -0.26404,1.38871 0.24277,2.41899 0.33071,0.67229 1.08045,1.49814 1.6661,1.83521 0.58566,0.33707 3.46566,1.25169 6.4,2.03248 6.34206,1.68755 7.49944,2.16996 9.13857,3.80909 1.92687,1.92687 2.59382,3.65644 2.57723,6.68339 -0.0111,2.02355 -0.16851,2.86174 -0.75125,4 -1.52914,2.98683 -4.13727,4.93446 -7.93122,5.92266 -2.30201,0.5996 -7.68209,0.59033 -9.93793,-0.0171 z m 28.23978,-0.0806 c -2.6677,-0.92401 -3.8932,-2.08325 -4.86722,-4.60411 -0.43805,-1.13369 -0.5562,-2.94689 -0.66018,-10.13136 -0.0696,-4.8128 -0.0397,-9.0968 0.0665,-9.52 0.18368,-0.73185 0.3174,-0.76945 2.73576,-0.76945 2.18634,0 2.58907,0.0867 2.87391,0.61896 0.20366,0.38054 0.33125,3.78238 0.33125,8.83164 0,9.02599 0.12879,9.7604 1.89455,10.80346 0.55264,0.32645 1.59442,0.54594 2.59126,0.54594 2.23264,0 3.9488,-0.97366 4.79417,-2.71995 0.58609,-1.21071 0.64002,-1.97602 0.64002,-9.08213 0,-4.73721 0.12904,-8.00111 0.33126,-8.37896 0.28436,-0.53134 0.68726,-0.61896 2.84577,-0.61896 1.9977,0 2.55442,0.10403 2.70874,0.50617 0.10683,0.27839 0.19423,5.72159 0.19423,12.096 0,8.58764 -0.0995,11.68929 -0.384,11.97383 -0.39752,0.39752 -3.96605,0.53657 -4.86982,0.18976 -0.30016,-0.11518 -0.50618,-0.57102 -0.50618,-1.12 0,-0.50917 -0.0755,-0.92576 -0.16771,-0.92576 -0.0922,0 -0.8948,0.50014 -1.78346,1.11143 -2.70363,1.85978 -5.67684,2.26444 -8.76883,1.19349 z m 87.20775,0.0826 c -4.89795,-1.37344 -7.8953,-4.99192 -8.65408,-10.44755 -1.2776,-9.1855 4.60745,-15.82175 13.49085,-15.21287 7.74208,0.53065 12.4703,7.0122 11.25734,15.43173 -0.92,6.38609 -5.22576,10.33298 -11.56621,10.60219 -1.85264,0.0787 -3.35833,-0.0455 -4.5279,-0.3735 z m 6.57549,-4.95874 c 4.86464,-2.35492 5.19753,-12.09102 0.515,-15.0606 -2.37628,-1.50699 -5.55977,-1.24807 -7.52755,0.61221 -1.83459,1.73441 -2.29069,3.08427 -2.29069,6.77965 0,2.82969 0.10874,3.56201 0.68887,4.64 1.8167,3.37571 5.33923,4.61421 8.61437,3.02874 z m 106.61545,5.12422 c -3.49398,-0.88275 -6.69245,-3.69081 -7.93718,-6.96844 -0.86071,-2.26634 -1.16404,-6.57423 -0.64042,-9.09476 1.20816,-5.81545 5.16934,-9.37304 10.87162,-9.76388 5.02134,-0.34417 9.07164,1.43991 11.09075,4.88526 0.47232,0.80597 0.83712,1.96095 0.87373,2.76627 l 0.0628,1.38259 -2.62787,0.0927 -2.6279,0.0927 -0.7321,-1.5138 c -1.01402,-2.09668 -2.05827,-2.77534 -4.49558,-2.92168 -2.88218,-0.17305 -4.5394,0.76159 -5.83655,3.29179 -0.86937,1.69576 -0.96,2.16166 -0.96,4.93536 0,2.71301 0.10323,3.27304 0.90375,4.90326 1.13731,2.31611 2.84384,3.44222 5.20438,3.43431 2.72077,-0.009 4.28042,-1.29387 5.54502,-4.56769 0.34336,-0.88889 0.35696,-0.89254 2.98589,-0.8 l 2.64096,0.093 -0.0704,1.19945 c -0.17907,3.05245 -3.2968,6.97963 -6.41148,8.07608 -1.81114,0.63757 -6.15783,0.90229 -7.83946,0.47743 z m 51.29184,-0.16463 c -4.62662,-1.2979 -7.64189,-5.03119 -8.28995,-10.26414 -0.79424,-6.41306 1.95437,-12.14441 6.93654,-14.46395 1.56519,-0.72871 2.25261,-0.8495 4.86288,-0.85446 2.63309,-0.005 3.284,0.10859 4.86288,0.84867 2.42547,1.13693 4.55677,3.3302 5.79283,5.96132 0.87885,1.87073 1.00842,2.49116 1.01581,4.86423 l 0.008,2.72 -8.8,0.16 -8.8,0.16 0.0342,1.17367 c 0.0868,2.98244 2.83472,5.38633 6.15712,5.38633 2.21789,0 3.612,-0.62952 4.70825,-2.12605 1.33696,-1.8251 1.7,-2.03395 3.53543,-2.03395 2.09075,0 2.68502,0.22233 2.68502,1.00451 0,2.14819 -2.8559,5.50644 -5.81024,6.83227 -2.46297,1.10532 -6.25187,1.37421 -8.89923,0.63155 z m 9.26947,-15.84423 c 0,-1.43693 -1.6775,-3.829 -3.26409,-4.65451 -1.27053,-0.66105 -3.89472,-0.56524 -5.38829,0.19673 -1.40816,0.71839 -2.74483,2.49975 -3.06067,4.07891 l -0.20695,1.03477 h 5.96 c 5.79482,0 5.96,-0.0182 5.96,-0.6559 z m 46.19226,15.72715 c -4.86756,-1.39304 -8.07072,-5.00277 -8.62512,-9.71988 -0.20106,-1.71048 -0.17389,-1.80744 0.55747,-1.991 0.42281,-0.10613 1.75872,-0.14963 2.96867,-0.0967 2.4048,0.10527 2.44141,0.13431 3.05146,2.4216 0.76089,2.85291 3.11904,4.44973 7.05904,4.78004 2.91027,0.24399 5.3576,-0.48686 6.68224,-1.99554 0.84892,-0.96688 0.99398,-1.38369 0.99398,-2.85639 0,-1.37777 -0.16269,-1.91764 -0.80944,-2.68628 -0.91133,-1.08306 -1.72294,-1.38371 -8.72026,-3.23031 -5.33766,-1.40863 -6.21427,-1.77062 -7.92483,-3.27251 -1.61491,-1.4179 -2.4543,-3.2474 -2.63318,-5.73904 -0.17466,-2.43295 0.23875,-3.98829 1.58307,-5.95617 3.8199,-5.59167 15.15299,-6.37621 20.77696,-1.43829 1.5095,1.32536 2.83248,3.84615 3.06966,5.84897 0.24151,2.03914 0.0208,2.20879 -2.883,2.21532 -2.45703,0.005 -3.41898,-0.36 -3.41898,-1.29911 0,-1.25838 -1.19661,-3.0111 -2.60698,-3.81851 -1.1846,-0.67818 -1.79996,-0.79749 -4.11302,-0.79749 -2.02186,0 -3.03162,0.15482 -3.93411,0.60315 -2.96243,1.47172 -2.86746,5.41506 0.16537,6.86622 0.7528,0.36021 3.72676,1.26744 6.6088,2.01607 5.8649,1.52345 7.88695,2.51658 9.53402,4.68265 1.28141,1.68518 1.7039,3.13699 1.69712,5.83192 -0.0118,4.64455 -3.06112,8.21127 -8.25066,9.65028 -2.80281,0.7772 -8.07849,0.76793 -10.82828,-0.019 z m 54.09788,0.30026 c -3.23856,-0.69481 -5.37788,-2.13722 -6.65792,-4.48904 -0.61043,-1.12159 -0.84124,-1.95959 -0.77161,-2.80139 l 0.0994,-1.20108 2.56307,-0.0917 2.56307,-0.0917 0.63693,1.35626 c 1.03277,2.19916 1.95866,2.66714 5.27693,2.66714 2.37808,0 2.97818,-0.10794 3.73654,-0.67211 1.6233,-1.20762 1.39575,-3.30225 -0.46166,-4.24945 -0.65718,-0.33513 -2.56288,-0.90906 -4.23488,-1.27539 -6.42294,-1.40727 -8.24832,-2.4216 -9.42474,-5.23714 -1.53257,-3.66797 0.55952,-7.66246 4.7746,-9.11622 2.29571,-0.79178 7.73424,-0.77727 10.04262,0.0268 2.15283,0.74989 4.24634,2.73923 5.00026,4.75143 0.85052,2.27 0.63932,2.49207 -2.37008,2.49207 -1.66272,0 -2.66887,-0.13994 -2.87597,-0.4 -2.07562,-2.60622 -2.07962,-2.60873 -4.38919,-2.73477 -2.5416,-0.13869 -3.70867,0.2175 -4.45756,1.36049 -0.49341,0.753 -0.49444,0.87397 -0.0138,1.60762 0.75292,1.14909 1.89984,1.63825 5.99081,2.5551 4.81469,1.07904 7.38579,2.33468 8.41671,4.11041 1.05584,1.81871 1.29337,3.39398 0.81347,5.39454 -0.5376,2.24093 -2.63827,4.37447 -5.28611,5.36885 -2.12551,0.79822 -6.75872,1.14388 -8.97095,0.66927 z m 41.70855,-0.0389 c -3.41187,-0.80412 -6.65123,-3.62875 -7.96816,-6.94806 -0.6064,-1.52838 -0.72605,-2.4478 -0.73722,-5.66452 -0.0128,-3.71027 0.0234,-3.91829 1.07274,-6.15714 1.26166,-2.69182 3.64182,-5.15293 6.02089,-6.22571 1.20724,-0.54435 2.17917,-0.69615 4.57306,-0.71421 2.65146,-0.02 3.27213,0.0859 4.85603,0.82839 2.49098,1.16771 4.55654,3.16505 5.69766,5.50944 1.13872,2.33952 1.84407,6.30285 1.32461,7.44297 l -0.34457,0.75626 h -8.62797 c -5.48141,0 -8.70106,0.11823 -8.82835,0.3242 -0.40599,0.65687 0.77027,3.67894 1.82963,4.70083 1.32086,1.27414 2.42426,1.69497 4.44406,1.69497 2.05927,0 3.47133,-0.60958 4.53216,-1.95649 1.73869,-2.20759 1.73184,-2.20351 3.69559,-2.20351 1.03936,0 2.11481,0.18717 2.43948,0.42458 0.55856,0.40844 0.55559,0.4812 -0.0785,1.91466 -0.93975,2.12448 -2.12435,3.56143 -3.84755,4.66721 -2.64778,1.69906 -6.82666,2.36667 -10.0536,1.60613 z m 8.77168,-16.29258 c -0.1961,-1.4309 -1.45434,-3.24567 -2.79504,-4.03138 -2.33616,-1.36908 -5.40979,-0.91488 -7.28064,1.07589 -0.90877,0.96703 -1.88791,3.21816 -1.60135,3.68178 0.0843,0.13638 2.77076,0.20876 5.96996,0.16084 l 5.8167,-0.0871 z m -281.37299,16.00844 c -1.83744,-0.32804 -3.02637,-1.08462 -3.73373,-2.37596 -0.45971,-0.83928 -0.56835,-2.30152 -0.70365,-9.47248 l -0.16,-8.48 -1.54486,-0.0985 c -0.84967,-0.0542 -1.74378,0.0665 -1.98688,0.2683 -0.26727,0.22179 -0.83962,0.27953 -1.44749,0.14602 -1.55824,-0.34225 -3.77091,0.43435 -5.1409,1.80435 -1.89206,1.89208 -2.19987,3.43378 -2.19987,11.01877 0,5.16551 -0.0904,6.53777 -0.4504,6.83654 -0.27926,0.23176 -1.34323,0.33785 -2.8,0.27918 l -2.3496,-0.0946 v -12.32 -12.32 l 2.37181,-0.0951 c 2.67882,-0.10737 2.89565,0.0404 2.9033,1.97885 l 0.005,1.24379 1.52902,-1.43021 c 1.98442,-1.8562 3.98781,-2.63617 6.04659,-2.35409 0.84941,0.11638 2.33639,0.23976 3.30439,0.27417 l 1.76,0.0626 0.16,-3.52001 0.16,-3.52 2.07011,-0.0971 c 3.59648,-0.16867 3.49408,-0.27395 3.5991,3.70048 l 0.0909,3.43662 2.24,0.16 2.24,0.16 v 2.08 2.08 l -2.24,0.16 -2.24,0.16 -0.086,7.274 c -0.082,6.93096 -0.0555,7.30448 0.56,7.92 0.49139,0.49139 1.0672,0.646 2.40598,0.646 h 1.76 v 2.06111 c 0,1.13361 -0.108,2.12696 -0.24,2.20743 -0.52608,0.32074 -4.48819,0.46884 -5.88262,0.2199 z m 146.2831,-0.0237 c -1.84621,-0.3829 -2.8823,-1.15152 -3.67376,-2.72542 -0.57078,-1.13506 -0.64528,-2.07114 -0.75469,-9.48442 l -0.12137,-8.22507 -1.80535,-0.0949 -1.80531,-0.0949 v -2.08 -2.08 l 1.84,-0.096 1.84,-0.096 v -3.04507 c 0,-4.14605 0.0963,-4.28299 3.01206,-4.28299 1.54301,0 2.46864,0.14347 2.69642,0.41793 0.19075,0.22986 0.38838,1.84986 0.43917,3.6 l 0.0924,3.18208 2.24,0.16 2.24,0.16 v 2.08 2.08 l -2.24,0.16 -2.24,0.16 -0.0858,7.21086 c -0.10112,8.49347 -0.13943,8.37083 2.69542,8.62285 l 1.8704,0.16629 0.0974,1.88664 c 0.0535,1.03765 -0.0186,1.99908 -0.16,2.13651 -0.42314,0.41083 -4.62922,0.60259 -6.1769,0.28162 z m 108.8,0.001 c -1.73434,-0.3612 -2.82349,-1.12455 -3.68048,-2.57948 -0.58278,-0.98943 -0.6543,-1.83023 -0.8,-9.40655 l -0.16,-8.32 -1.76,-0.16 -1.76,-0.16 v -2.08 -2.08 l 1.76,-0.16 1.76,-0.16 0.0924,-3.18208 c 0.0508,-1.75014 0.24842,-3.37014 0.43917,-3.6 0.22778,-0.27445 1.15341,-0.41792 2.69642,-0.41792 2.91705,0 3.01206,0.13558 3.01206,4.29896 v 3.06104 h 2.20576 c 2.45533,0 2.59424,0.11996 2.59424,2.24 0,2.12005 -0.13891,2.24 -2.59424,2.24 h -2.20576 v 7.48082 c 0,8.57436 -0.10678,8.25509 2.84915,8.51918 l 1.79085,0.16 0.0944,1.78883 c 0.0635,1.20264 -0.0459,1.90533 -0.33389,2.14432 -0.604,0.50128 -4.28508,0.73005 -6.00006,0.37288 z m -223.59705,-0.2477 c -0.30352,-0.19276 -0.4162,-3.5528 -0.48,-14.31511 l -0.0834,-14.06324 -5.10633,-0.0885 c -3.59376,-0.0623 -5.18004,-0.20444 -5.35511,-0.48 -0.39894,-0.62791 -0.29603,-3.89814 0.14144,-4.49454 0.36759,-0.50115 1.48906,-0.53851 13.84,-0.46116 l 13.44,0.0842 v 2.56 2.56 l -5.12,0.16 -5.12,0.16 -0.0834,13.89136 c -0.0577,9.60648 -0.19319,14.02357 -0.4392,14.32 -0.39373,0.47442 -4.93783,0.60909 -5.63395,0.16697 z m 19.82057,-0.12234 c -0.28454,-0.28454 -0.384,-3.38619 -0.384,-11.97383 0,-6.37441 0.0874,-11.81761 0.19424,-12.096 0.15431,-0.40214 0.71104,-0.50617 2.70874,-0.50617 2.15853,0 2.56141,0.0876 2.84576,0.61896 0.2103,0.39297 0.33126,4.72354 0.33126,11.86104 0,7.13749 -0.12096,11.46806 -0.33126,11.86103 -0.28083,0.52475 -0.68509,0.61897 -2.656,0.61897 -1.38147,0 -2.48055,-0.15582 -2.70874,-0.384 z m 37.76,0 c -0.28857,-0.28858 -0.384,-4.4173 -0.384,-16.61383 0,-8.92641 0.0874,-16.45761 0.19424,-16.736 0.15431,-0.40214 0.71104,-0.50618 2.70874,-0.50618 2.15853,0 2.56141,0.0876 2.84576,0.61897 0.20451,0.38211 0.33126,3.87197 0.33126,9.12 0,4.67557 0.1177,8.50104 0.26154,8.50104 0.14381,0 2.24793,-2.016 4.67577,-4.48 l 4.41428,-4.48 h 3.16419 c 2.31117,0 3.16768,0.10783 3.17709,0.4 0.007,0.22 -1.96474,2.28897 -4.38186,4.59772 l -4.39472,4.19772 4.88586,7.42892 c 2.7719,4.21461 4.81062,7.62507 4.7119,7.88228 -0.23056,0.60081 -5.58704,0.64589 -6.34006,0.0534 -0.27959,-0.22 -1.977,-2.74008 -3.772,-5.60017 -1.79501,-2.8601 -3.38794,-5.27699 -3.53988,-5.37088 -0.1519,-0.0939 -0.85801,0.35494 -1.56915,0.99741 l -1.29296,1.16811 v 3.9838 c 0,2.19109 -0.14905,4.26233 -0.33126,4.60276 -0.28083,0.52475 -0.68509,0.61897 -2.656,0.61897 -1.38147,0 -2.48055,-0.15582 -2.70874,-0.384 z m 202.32198,-0.0171 c -0.0847,-0.22063 -0.11613,-5.80063 -0.0699,-12.4 l 0.084,-11.99888 h 2.56 2.56 l 0.0993,1.2 c 0.11753,1.42021 0.32998,1.47762 1.36489,0.36885 1.52416,-1.63292 3.08752,-2.20117 6.05578,-2.20117 3.0303,0 4.50547,0.55833 6.20662,2.34917 l 0.92659,0.97547 1.44013,-1.26764 c 3.30474,-2.90895 9.40253,-2.97976 12.32333,-0.1431 1.95843,1.902 2.14333,3.09092 2.14333,13.78226 0,10.59659 0.25453,9.73616 -2.88,9.73616 -3.11843,0 -2.87898,0.71269 -2.88765,-8.59424 -0.008,-8.67407 -0.18618,-10.3018 -1.24285,-11.35848 -0.97517,-0.97517 -4.29913,-1.11458 -5.69398,-0.23881 -2.05626,1.29105 -2.1641,1.82216 -2.27975,11.22762 -0.0743,6.04002 -0.21222,8.54478 -0.48,8.7151 -0.45174,0.28733 -4.11516,0.32873 -4.8296,0.0546 -0.44364,-0.17024 -0.5064,-1.22778 -0.50796,-8.56 0,-4.74613 -0.14423,-8.87867 -0.33101,-9.55121 -0.47533,-1.71137 -1.62535,-2.49455 -3.66304,-2.49455 -2.05149,0 -3.49773,0.88273 -4.45632,2.72 -0.61747,1.18347 -0.67507,1.89463 -0.76365,9.43088 -0.0694,5.90257 -0.20179,8.21825 -0.48,8.3951 -0.66621,0.42348 -5.02659,0.30007 -5.19821,-0.14712 z M 443.62815,275.2015 c -0.26672,-0.26672 -0.28199,-4.03547 -0.0192,-4.7205 0.1543,-0.40214 0.71104,-0.50617 2.70873,-0.50617 2.92522,0 3.17703,0.22452 3.17703,2.83279 0,2.5806 -0.0307,2.60721 -3.0209,2.60721 -1.44784,0 -2.72845,-0.096 -2.84576,-0.21333 z M 86.390343,256.24877 c -1.295725,-0.81661 -1.949165,-2.0768 -2.204829,-4.25212 -0.26288,-2.23668 0.351373,-3.70429 2.288105,-5.46687 1.933652,-1.75978 2.38017,-2.68412 2.385917,-4.93907 0.0094,-3.69359 1.063559,-6.6865 4.060135,-11.52747 1.335772,-2.15793 1.449795,-2.51949 1.71558,-5.44 1.155332,-12.695 1.193895,-21.65028 0.139556,-32.40843 -0.917108,-9.35785 -0.994938,-13.32486 -0.329645,-16.80202 1.043021,-5.45138 2.543757,-7.23613 12.510358,-14.87798 15.8371,-12.14302 20.05254,-17.04566 23.29187,-27.08884 2.31632,-7.18151 4.35218,-20.60331 4.36411,-28.77129 0.003,-2.10944 -0.0624,-2.3228 -0.9822,-3.2 -1.49318,-1.42403 -3.71318,-4.926485 -4.68054,-7.384386 -0.76412,-1.941526 -0.8658,-2.639667 -0.87901,-6.035485 -0.0132,-3.394762 0.0899,-4.14945 0.88951,-6.508874 0.49746,-1.467881 0.8439,-2.729434 0.76989,-2.80345 -0.074,-0.07401 -1.12902,0.368087 -2.34446,0.982449 -7.87414,3.980102 -17.49856,14.895974 -24.95381,28.302226 -3.355232,6.03349 -9.703846,20.28245 -11.924905,26.76451 -1.506007,4.3952 -2.390592,8.21091 -5.33289,23.00371 -7.427753,37.344 -12.759222,56.63801 -18.682288,67.60916 -0.590812,1.09435 -2.283516,3.49921 -3.761564,5.34415 -7.125146,8.89378 -16.130202,14.63703 -26.701584,17.02977 -3.363151,0.76121 -10.476817,0.76689 -14.052841,0.0112 -7.902012,-1.66984 -18.7300421,-6.73707 -20.408305,-9.55055 -1.16866169,-1.95917 0.8631302,-2.33323 6.6114449,-1.21718 9.5398301,1.85218 17.2075721,2.2407 22.4368591,1.13687 7.542564,-1.59213 12.293635,-4.40957 18.054163,-10.70633 3.356516,-3.66895 5.03272,-6.10205 6.890474,-10.00189 2.772368,-5.8198 3.652528,-9.90616 6.090304,-28.27579 0.724048,-5.456 1.732416,-12.368 2.240819,-15.36 0.884189,-5.20352 1.402902,-9.35411 2.899389,-23.2 0.79279,-7.3351 1.871033,-13.98673 3.046048,-18.7909 1.59512,-6.52179 8.290384,-27.31853 11.680096,-36.280541 10.449436,-27.627114 23.98969,-45.544686 43.88675,-58.074533 4.54578,-2.86263 13.62345,-7.359006 18.86317,-9.343359 25.26166,-9.56693 57.43325,-10.932751 80.29304,-3.408782 6.03826,1.987404 8.55746,3.51885 20.45574,12.435264 6.77375,5.076154 11.87727,7.931172 16.16,9.040237 3.51644,0.910628 13.99177,0.821175 17.92,-0.153024 6.70973,-1.664006 9.8,-4.255929 13.43705,-11.270134 1.23037,-2.372827 2.95837,-5.394231 3.84,-6.714231 l 1.60295,-2.4 0.0163,-6.24 c 0.0139,-5.30434 0.12085,-6.659508 0.71346,-9.037735 1.50075,-6.0227802 4.31811,-9.2022658 8.15419,-9.2022658 0.86821,0 2.79602,1.8830703 2.79602,2.7311349 0,0.5842329 0.2788,0.5871286 1.64315,0.017066 1.61383,-0.6743009 2.90333,-0.029828 3.90026,1.9492883 2.23746,4.4418616 1.97554,10.7084476 -0.67283,16.0976586 -0.64999,1.322669 -1.18377,2.529222 -1.18619,2.681229 -0.003,0.152006 1.04458,0.542763 2.32664,0.868347 3.10836,0.789376 6.48667,2.60918 8.77262,4.725553 3.0673,2.839784 6.91123,9.162364 9.23693,15.193046 0.94502,2.450589 1.15571,2.717405 5.57568,7.061748 5.38342,5.291312 7.20742,7.84719 7.1967,10.084544 -0.0141,2.919258 -2.11516,5.704589 -4.86764,6.452499 -0.75092,0.204039 -1.55152,0.424397 -1.77911,0.489687 -0.30787,0.08832 -0.32835,0.278365 -0.08,0.742416 0.49034,0.916192 0.41936,1.249302 -0.45165,2.120329 -0.59356,0.593543 -1.12131,0.783738 -2.16,0.778429 -1.82345,-0.0093 -3.35257,-0.753737 -6.81456,-3.317478 -1.584,-1.173018 -3.384,-2.261735 -4,-2.41937 -0.616,-0.157635 -2.92,-0.448288 -5.12,-0.645894 -4.31258,-0.38736 -6.95822,-0.941005 -9.16829,-1.918624 l -1.39855,-0.618647 -0.43189,0.70352 c -0.23754,0.386938 -1.04055,1.85552 -1.78446,3.26352 -1.56549,2.96298 -5.33439,8.746833 -7.49588,11.503389 -7.08277,9.032666 -16.40478,16.092919 -24.89471,18.854635 l -2.45379,0.798198 -6.79039,6.82189 c -6.25297,6.28199 -12.60706,13.55673 -15.86454,18.16317 -0.72738,1.0286 -1.64521,2.8576 -2.03963,4.06445 -0.91317,2.79416 -1.74573,4.16882 -2.8801,4.75543 -0.56845,0.29395 -2.41533,0.54202 -5.00911,0.67281 -3.26723,0.16474 -4.72489,0.40176 -7.11772,1.15734 -3.38069,1.06752 -4.81913,1.04444 -8.65952,-0.13896 -3.87231,-1.19323 -5.58401,-2.43533 -5.96225,-4.32652 -0.27398,-1.36993 0.95956,-2.64583 2.558,-2.64583 0.61394,0 1.63136,-0.30392 2.26093,-0.67538 0.92053,-0.54312 1.42958,-0.63265 2.59965,-0.45719 1.07439,0.16112 1.65569,0.0867 2.22235,-0.28462 1.06264,-0.69627 2.5913,-0.62831 3.88756,0.17283 0.9761,0.60325 1.15154,0.62453 1.63777,0.19858 1.2628,-1.10621 2.68508,-1.57781 4.11275,-1.36372 1.38875,0.20825 1.43054,0.18643 3.87785,-2.02538 1.36069,-1.22975 2.93357,-3.00298 3.49531,-3.94051 2.30799,-3.85207 5.98325,-14.34802 5.27284,-15.05843 -0.47925,-0.47925 -1.68182,0.35836 -4.25691,2.96501 -2.20284,2.22983 -3.52975,4.54924 -5.21104,9.10881 -0.45429,1.232 -1.10629,2.69875 -1.44889,3.25943 -0.75933,1.24269 -5.00807,4.4964 -6.38841,4.89227 -1.28199,0.36767 -7.64775,0.48317 -9.97092,0.1809 -1.28238,-0.16684 -2.26903,-0.0872 -3.51914,0.28403 -3.52248,1.04607 -7.1593,-0.69443 -7.94144,-3.80058 -0.66324,-2.63395 0.47887,-3.92226 3.16165,-3.56638 1.48448,0.19693 1.52317,0.17931 2.35019,-1.0704 1.20767,-1.82491 2.60724,-2.184 5.26312,-1.35035 l 2.01237,0.63168 0.673,-0.91027 c 1.06217,-1.43668 2.22957,-1.7747 4.50556,-1.3046 l 1.92212,0.39701 1.0975,-1.06137 c 1.02481,-0.99108 4.27656,-5.82593 4.75253,-7.06628 0.19478,-0.50758 -0.11219,-0.55509 -3.58669,-0.55509 -9.10511,0 -21.26053,-1.33728 -28.69317,-3.15669 l -3.78439,-0.92636 -0.27836,0.68152 c -0.1531,0.37484 -0.80955,2.04953 -1.45877,3.72153 -2.49171,6.41707 -7.317,15.16409 -11.29737,20.47922 -2.55484,3.41159 -6.00238,6.94726 -10.43671,10.70354 -7.52912,6.37784 -11.99584,9.58126 -24.3019,17.42877 -9.96602,6.35528 -13.92041,9.09161 -19.10541,13.22042 -12.14011,9.66715 -21.10676,19.69657 -23.66402,26.46878 -2.02201,5.35472 -3.86106,19.22588 -5.2472,39.57721 -0.55704,8.17847 -0.83176,9.90941 -1.93038,12.16301 -2.04765,4.20036 -10.811573,10.46418 -15.217615,10.87646 -1.378762,0.12902 -1.94311,0.0301 -2.757942,-0.48345 z M 485.6548,254.15119 c -16.68761,-2.40967 -29.11693,-10.74786 -35.95824,-24.12256 -3.95555,-7.73305 -5.64835,-15.29219 -5.63552,-25.16542 0.0198,-15.1769 4.86739,-27.71951 14.40551,-37.27203 12.69526,-12.71442 32.70355,-17.79169 53.62076,-13.60669 3.9946,0.79922 9.25424,2.4656 9.97952,3.16176 0.33472,0.32127 0.0182,2.03773 -1.68556,9.14596 -1.1537,4.81276 -2.24624,8.92954 -2.42788,9.14841 -0.25836,0.31131 -0.90006,0.18998 -2.9479,-0.55739 -10.37168,-3.7852 -22.43635,-3.49549 -30.28646,0.72727 -9.1857,4.94119 -14.47565,14.08873 -14.96871,25.88431 -0.69981,16.74234 7.03187,28.46654 21.34464,32.36676 2.40195,0.65453 3.43047,0.74062 8.79984,0.73653 6.87735,-0.005 9.61034,-0.41403 15.14288,-2.26507 2.24771,-0.75202 3.45018,-1.01315 3.66701,-0.79632 0.32016,0.32015 3.42448,16.19877 3.42819,17.53511 0,0.54947 -0.3537,0.82815 -1.67808,1.31653 -4.31753,1.59214 -8.27907,2.60002 -13.52,3.43972 -4.46035,0.71463 -17.22627,0.90848 -21.28,0.32312 z m 170.12125,-0.0115 c -17.59559,-2.51341 -30.01914,-11.14583 -36.62803,-25.45076 -7.76743,-16.81256 -5.7913,-40.74012 4.64182,-56.20406 6.86378,-10.17349 16.5504,-16.61389 28.66083,-19.05591 5.13939,-1.03634 14.85146,-1.03163 19.67891,0.01 10.42029,2.24743 18.40666,7.55056 23.91002,15.87677 6.03987,9.13792 8.81609,20.10971 8.38541,33.13954 -0.10762,3.256 -0.31284,6.424 -0.45604,7.04 l -0.26038,1.12 -32.46688,0.16 -32.46691,0.16 0.0334,1.92 c 0.0448,2.57112 0.84138,5.53737 2.32032,8.64 3.35331,7.03477 9.95062,11.59462 19.54349,13.50785 3.67286,0.73252 13.58435,0.7018 19.38275,-0.0601 3.58109,-0.47053 8.93952,-1.67174 13.82992,-3.10028 0.74246,-0.21688 1.44627,-0.29795 1.56406,-0.18016 0.11779,0.11778 1.00298,3.91608 1.96711,8.44065 1.69036,7.93286 1.73161,8.24207 1.15593,8.66302 -1.77357,1.29687 -12.48131,4.0508 -19.67571,5.0604 -5.14704,0.72229 -18.94809,0.90942 -23.12006,0.31348 z m 25.0166,-62.6529 c 0.0538,-0.84042 -0.13417,-2.76643 -0.41782,-4.28004 -2.08768,-11.14125 -9.08432,-17.36392 -19.54883,-17.38638 -8.28589,-0.0178 -15.14432,4.50376 -19.18685,12.64932 -1.49737,3.01716 -3.28336,9.24862 -2.92118,10.19238 0.18048,0.47037 2.09651,0.5099 21.08768,0.43506 l 20.88915,-0.0823 0.0978,-1.52802 z m 59.81892,62.64241 c -10.55943,-1.99754 -17.13764,-7.65666 -20.20224,-17.37969 -1.94128,-6.15903 -1.91828,-5.77036 -2.10404,-35.5747 l -0.17049,-27.36001 -6.88,-0.16 -6.88,-0.16 v -9.28 -9.28 l 6.88,-0.16 6.88,-0.16 0.0842,-10.93976 c 0.0774,-10.06764 0.12848,-10.95302 0.64,-11.10604 3.3503,-1.00227 23.30397,-5.57405 23.49485,-5.38315 0.13965,0.13964 0.29149,6.36828 0.33744,13.84142 l 0.0835,13.58753 11.6,0.084 11.6,0.084 v 9.276 c 0,5.10181 -0.036,9.30745 -0.08,9.34587 -0.044,0.0384 -5.264,0.14642 -11.6,0.24 l -11.52,0.17014 v 23.84 c 0,26.35881 0.032,26.85876 1.96259,30.71787 1.2137,2.42604 2.6983,3.91524 4.90115,4.91629 2.02039,0.91813 7.68368,1.10358 11.83149,0.38743 2.13552,-0.36871 3.07798,-0.41906 3.23034,-0.17258 0.26048,0.42145 0.66198,17.78686 0.4255,18.40311 -0.21837,0.56907 -2.45552,1.28531 -6.03107,1.93088 -4.10227,0.74068 -15.18461,0.91539 -18.48323,0.29139 z m -534.73482,-1.45369 c -11.2795,-1.00088 -20.72981,-5.37943 -28.5598,-13.23245 -8.26125,-8.28554 -13.12875,-19.00736 -14.90343,-32.82826 -0.50213,-3.9105 -0.50213,-13.36949 0,-17.28 2.07901,-16.19098 8.99288,-29.17329 19.86012,-37.29174 3.14389,-2.34866 8.99445,-5.46203 12.50117,-6.65247 5.44351,-1.84794 8.50003,-2.26871 16.48,-2.26871 6.40218,0 7.78428,0.0922 10.62029,0.7085 20.88182,4.53789 34.92536,21.0327 38.00679,44.64081 1.03912,7.96109 0.49744,18.74077 -1.31314,26.13202 -1.55735,6.35752 -4.54172,13.45476 -7.39539,17.58726 -2.00073,2.89734 -1.77667,2.95314 -6.33771,-1.57853 -2.21268,-2.19843 -4.15566,-4.23613 -4.31774,-4.52824 -0.21683,-0.39078 0.20689,-1.57449 1.60365,-4.48 2.23489,-4.64898 3.54106,-8.8713 4.50004,-14.54689 0.93099,-5.50993 0.79467,-14.71697 -0.29735,-20.08315 -2.90463,-14.27324 -10.03979,-24.59498 -20.593,-29.78986 -3.58438,-1.76444 -6.98669,-2.67159 -11.38114,-3.03454 -14.73753,-1.21721 -26.78609,5.76766 -33.76997,19.57733 -4.12356,8.1538 -6.15539,18.92009 -5.36122,28.40814 2.13648,25.52452 17.96929,41.58021 39.13244,39.6833 3.57167,-0.32013 7.41963,-1.20002 9.74346,-2.22796 0.99067,-0.43822 1.63019,-0.55279 1.98991,-0.3565 0.29154,0.15909 2.24187,2.02633 4.33407,4.14944 3.05008,3.09514 3.73109,3.94805 3.43611,4.30347 -0.63013,0.75926 -6.95437,3.09551 -10.53914,3.89329 -5.7581,1.28144 -11.37144,1.63414 -17.43902,1.09574 z m 94.19609,0.006 c -7.11246,-0.6848 -12.89017,-2.25936 -18.20171,-4.96041 -7.92186,-4.02847 -13.00821,-9.76508 -15.95282,-17.99228 -1.94766,-5.44173 -3.23129,-12.958 -2.31233,-13.53981 0.24685,-0.15629 2.99454,-0.28637 6.10597,-0.28906 4.46649,-0.004 5.75282,0.0908 6.11176,0.44971 0.25004,0.25005 0.54729,1.34126 0.66055,2.42494 0.32396,3.09942 1.09185,5.67794 2.65695,8.92179 2.49167,5.16429 7.44925,9.48659 13.63653,11.88912 7.13072,2.76887 16.82983,3.10635 25.31127,0.88072 l 2.5142,-0.65975 4.19934,4.19932 c 4.76774,4.76776 4.73161,4.59228 1.19293,5.79153 -7.09519,2.40454 -18.1405,3.63346 -25.92264,2.88418 z m 66.0962,-0.49264 c -0.10684,-0.27839 -0.19424,-25.98239 -0.19424,-57.12 v -56.61383 h -18.65884 c -14.42247,0 -18.78282,-0.0908 -19.20496,-0.4 -0.49805,-0.36478 -0.53866,-1.28759 -0.46119,-10.48 l 0.085,-10.08 h 39.04 39.04 l 0.085,10.08 c 0.0775,9.19241 0.0369,10.11522 -0.46118,10.48 -0.39648,0.2904 -2.4145,0.4 -7.36496,0.4 h -6.81885 v 56.50104 c 0,38.33565 -0.10649,56.70004 -0.33126,57.12 -0.31856,0.59522 -0.796,0.61896 -12.44576,0.61896 -10.75165,0 -12.13635,-0.0569 -12.30874,-0.50617 z m 42.88144,0.004 c -0.29497,-0.76869 -0.22537,-96.55533 0.0705,-97.02142 0.20067,-0.31611 2.92861,-0.38564 12.5551,-0.32 l 12.29872,0.0839 v 48.8 48.8 l -12.36432,0.0837 c -11.06665,0.0749 -12.38489,0.0302 -12.56,-0.42617 z m 121.30141,0.29286 C 530.2325,252.36635 530.1348,220.3274 530.1348,181.28809 V 110.307 l 0.72,-0.17528 c 0.396,-0.0964 5.976,-0.13514 12.4,-0.0861 l 11.68,0.0892 0.0811,43.28 c 0.0522,27.8154 0.19251,43.28 0.39283,43.28 0.17146,0 1.34964,-1.548 2.61821,-3.44 2.48051,-3.69954 27.98381,-37.84341 28.56055,-38.23694 0.191,-0.13032 6.89926,-0.20232 14.90726,-0.16 10.90998,0.0576 14.56,0.17137 14.56,0.4536 0,0.20717 -7.89805,9.10968 -17.5512,19.78336 -12.40333,13.71456 -17.5081,19.57163 -17.40416,19.96903 0.0809,0.30928 9.16691,13.17481 20.1912,28.59008 11.02429,15.41526 20.04416,28.25712 20.04416,28.53745 0,0.46022 -1.46454,0.50162 -15.09053,0.42656 l -15.09049,-0.0831 -13.78951,-21.19631 c -7.58419,-11.65797 -13.93347,-21.1887 -14.10947,-21.17939 -0.176,0.009 -2.048,2.05236 -4.16,4.54013 l -3.84,4.52321 -0.16,16.65618 -0.16,16.65618 -12.18291,0.0838 c -6.70061,0.0461 -12.28061,-0.0139 -12.4,-0.13333 z M 326.8502,243.17037 c -2.24148,-2.24645 -4.0754,-4.25006 -4.0754,-4.45247 0,-0.2024 0.94164,-0.8946 2.09252,-1.53821 2.56988,-1.43715 5.96579,-4.55618 7.40896,-6.80488 0.59299,-0.924 1.2414,-1.68 1.44086,-1.68 0.5023,0 8.53037,7.98688 8.76218,8.71725 0.39424,1.24211 -5.0314,6.43793 -9.2328,8.84172 -0.96228,0.55057 -1.87818,1.00103 -2.0353,1.00103 -0.15709,0 -2.11958,-1.838 -4.36102,-4.08444 z m -95.08051,-1.32059 c -2.39246,-2.39779 -4.02361,-4.27432 -3.89553,-4.48156 0.12118,-0.19608 1.08608,-0.94442 2.1442,-1.66298 2.29281,-1.55702 5.8196,-4.83472 7.15644,-6.65101 0.57304,-0.77854 1.22436,-1.30734 1.61582,-1.31185 0.77895,-0.009 8.78418,7.93323 8.78418,8.71503 0,1.26609 -9.68022,9.5174 -11.16555,9.5174 -0.28802,0 -2.37582,-1.85626 -4.63956,-4.12503 z m 107.18441,-10.89564 -4.45213,-4.46067 0.0742,-3.29933 c 0.16355,-7.27428 -2.65949,-11.53291 -10.04135,-15.14759 -4.40509,-2.15705 -8.66178,-3.40275 -20.8,-6.08701 -14.76241,-3.26458 -22.57726,-6.14382 -27.98893,-10.312 -3.95548,-3.04659 -6.93877,-7.38241 -8.19663,-11.91273 -0.67617,-2.43532 -0.94316,-9.19167 -0.48021,-12.15249 2.44629,-15.64571 18.66719,-25.32278 41.14577,-24.54678 7.73581,0.26706 13.51908,1.63536 18.72,4.42909 9.83706,5.28405 15.54477,13.92929 16.96845,25.70142 0.31495,2.60404 0.29523,2.90928 -0.21174,3.28 -0.78221,0.57196 -11.2985,0.57963 -12.01981,0.009 -0.31776,-0.25147 -0.6969,-1.56616 -1.02109,-3.54055 -1.18806,-7.23542 -5.11609,-12.59896 -11.54363,-15.76236 -3.53882,-1.74168 -6.92854,-2.62801 -11.4498,-2.99385 -12.34534,-0.99893 -22.72219,3.11012 -26.29841,10.41371 -1.1578,2.36453 -1.5583,4.58738 -1.40484,7.79706 0.17012,3.55813 1.18157,5.74307 3.91802,8.46367 2.60625,2.59116 6.35448,4.63666 11.68188,6.37509 3.81013,1.24332 15.36556,4.02005 24.7437,5.94583 14.91094,3.06193 24.76393,11.46323 26.9855,23.00955 0.53296,2.77007 0.59005,8.11396 0.11529,10.79308 -0.70124,3.95748 -2.53772,8.45876 -3.45104,8.45876 -0.29756,0 -2.54451,-2.0073 -4.99318,-4.46067 z m 70.43689,-92.89933 c -0.49804,-0.36478 -0.53865,-1.28759 -0.46118,-10.48 l 0.085,-10.08 h 12.48 12.48 l 0.085,10.08 c 0.0775,9.19241 0.0369,10.11522 -0.46118,10.48 -0.41306,0.30253 -3.36227,0.4 -12.10381,0.4 -8.74153,0 -11.69075,-0.0975 -12.10381,-0.4 z" + id="path1195" + inkscape:connector-curvature="0" /> + <path + style="fill:#f6a75c;stroke-width:0.31999999" + d="m 593.1748,313.57898 c -1.03206,-0.19182 -1.27008,-0.59717 -1.27072,-2.16416 0,-2.53726 0.1175,-2.66372 2.44576,-2.6089 1.89667,0.0447 2.14227,-0.0272 2.83386,-0.82926 0.41648,-0.48299 0.99043,-1.63499 1.27542,-2.56 l 0.51818,-1.68184 -4.51178,-11.82179 c -2.48147,-6.50199 -4.43955,-12.00999 -4.3513,-12.24 0.11476,-0.29902 0.93783,-0.41821 2.88781,-0.41821 2.28755,0 2.78579,0.0936 3.08986,0.58048 0.19939,0.31926 1.61734,4.17126 3.15101,8.56 1.53369,4.38873 2.91392,7.97952 3.0672,7.97952 0.15328,0 1.58054,-3.816 3.17171,-8.48 l 2.89299,-8.48 2.69024,-0.0938 c 1.47965,-0.0516 2.81936,0.0353 2.97715,0.19313 0.25319,0.25319 -6.64912,19.55059 -9.88912,27.64797 -1.44841,3.61985 -3.06749,5.5043 -5.2984,6.16681 -1.56198,0.46386 -3.96105,0.56946 -5.67987,0.25001 z m -308.97326,-0.80416 c -0.0842,-0.22 -0.11573,-7.816 -0.07,-16.88 l 0.0832,-16.48 h 2.56 2.56 l 0.10028,1.04 c 0.0551,0.572 0.18014,1.04 0.27775,1.04 0.0976,0 0.66514,-0.42817 1.26115,-0.95148 2.42774,-2.13158 7.69054,-2.52039 11.15723,-0.8243 5.50876,2.69518 7.89889,10.2578 5.5657,17.61041 -0.75297,2.37281 -1.95753,4.14423 -3.74535,5.50784 -3.36689,2.56801 -8.63727,2.66634 -12.25955,0.22873 -0.89184,-0.60016 -1.67905,-1.0912 -1.74936,-1.0912 -0.0703,0 -0.12785,2.29222 -0.12785,5.09382 0,2.80161 -0.0874,5.32161 -0.19423,5.6 -0.15451,0.40264 -0.71292,0.50618 -2.73004,0.50618 -1.73362,0 -2.58427,-0.12654 -2.68899,-0.4 z m 15.04194,-13.4491 c 0.74506,-0.42199 1.66957,-1.36699 2.24,-2.28964 0.92877,-1.50225 0.97132,-1.72638 0.97132,-5.11617 0,-2.84511 -0.11778,-3.76624 -0.59653,-4.66509 -0.7624,-1.43143 -2.04559,-2.81287 -3.14757,-3.38857 -1.10197,-0.5757 -3.81268,-0.58141 -5.14617,-0.0109 -5.2141,2.23096 -5.34611,12.95359 -0.1909,15.50535 1.87503,0.9281 4.19379,0.91427 5.86985,-0.035 z m 13.76305,13.46212 c -0.087,-0.22716 -0.12072,-7.82902 -0.075,-16.89302 l 0.0832,-16.48 h 2.55562 c 2.30791,0 2.56561,0.062 2.65874,0.64 0.23482,1.4574 0.35242,1.49647 1.58239,0.52578 4.34133,-3.42618 11.9925,-2.19617 15.18284,2.44081 1.50195,2.183 2.21088,4.38231 2.41168,7.48155 0.52102,8.04219 -3.37952,13.71599 -9.79927,14.2542 -2.59507,0.21756 -5.25686,-0.46342 -7.29647,-1.8667 -0.99949,-0.68767 -1.42466,-0.83529 -1.53589,-0.53327 -0.0846,0.22969 -0.19112,2.72163 -0.23672,5.53763 l -0.0829,5.12 -2.64504,0.093 c -1.93497,0.068 -2.68751,-0.0179 -2.80323,-0.32 z m 15.75493,-13.90155 c 4.27142,-3.45716 3.72166,-12.49069 -0.90378,-14.85041 -2.01702,-1.02901 -4.93683,-0.78828 -6.59097,0.54341 -1.94025,1.56203 -2.69264,3.75798 -2.56132,7.47553 0.1178,3.335 0.67742,4.86715 2.36011,6.46165 1.31042,1.24175 2.25282,1.54364 4.4974,1.4407 1.66528,-0.0764 2.18464,-0.25025 3.19856,-1.07088 z m -94.86644,5.47408 c -4.9407,-1.33041 -8.28194,-4.80908 -9.00353,-9.37384 -0.38679,-2.44681 -0.12282,-2.66019 3.14932,-2.54585 l 2.69391,0.0941 0.38193,1.50055 c 0.57771,2.26977 1.53948,3.56795 3.41012,4.60292 1.53662,0.85017 1.96072,0.93329 4.72803,0.92659 3.35739,-0.008 5.25448,-0.68104 6.26414,-2.22199 0.75912,-1.15856 0.91675,-3.05145 0.36422,-4.37382 -0.63327,-1.51565 -2.02021,-2.15692 -8.22836,-3.80453 -7.56455,-2.00759 -9.29356,-2.96555 -10.75915,-5.96111 -2.22248,-4.54257 -0.18302,-10.13421 4.56734,-12.52244 2.46632,-1.23993 6.25552,-1.79609 9.28751,-1.36317 6.1282,0.87501 10.04725,4.20543 10.84904,9.21956 0.2631,1.64537 -0.29079,1.99744 -3.14254,1.99744 -2.39016,0 -2.82932,-0.28032 -3.55902,-2.27179 -0.2966,-0.80948 -0.86376,-1.77661 -1.26034,-2.14918 -2.20892,-2.07518 -7.96828,-2.18698 -10.16678,-0.19736 -0.34187,0.30938 -0.78292,1.10101 -0.98011,1.75917 -0.30219,1.00861 -0.26404,1.38871 0.24277,2.41899 0.33071,0.67229 1.08045,1.49814 1.6661,1.83521 0.58566,0.33707 3.46566,1.25169 6.4,2.03248 6.34206,1.68755 7.49944,2.16996 9.13857,3.80909 1.92687,1.92687 2.59382,3.65644 2.57723,6.68339 -0.0111,2.02355 -0.16851,2.86174 -0.75125,4 -1.52914,2.98683 -4.13727,4.93446 -7.93122,5.92266 -2.30201,0.5996 -7.68209,0.59033 -9.93793,-0.0171 z m 28.23978,-0.0806 c -2.6677,-0.92401 -3.8932,-2.08325 -4.86722,-4.60411 -0.43805,-1.13369 -0.5562,-2.94689 -0.66018,-10.13136 -0.0696,-4.8128 -0.0397,-9.0968 0.0665,-9.52 0.18368,-0.73185 0.3174,-0.76945 2.73576,-0.76945 2.18634,0 2.58907,0.0867 2.87391,0.61896 0.20366,0.38054 0.33125,3.78238 0.33125,8.83164 0,9.02599 0.12879,9.7604 1.89455,10.80346 0.55264,0.32645 1.59442,0.54594 2.59126,0.54594 2.23264,0 3.9488,-0.97366 4.79417,-2.71995 0.58609,-1.21071 0.64002,-1.97602 0.64002,-9.08213 0,-4.73721 0.12904,-8.00111 0.33126,-8.37896 0.28436,-0.53134 0.68726,-0.61896 2.84577,-0.61896 1.9977,0 2.55442,0.10403 2.70874,0.50617 0.10683,0.27839 0.19423,5.72159 0.19423,12.096 0,8.58764 -0.0995,11.68929 -0.384,11.97383 -0.39752,0.39752 -3.96605,0.53657 -4.86982,0.18976 -0.30016,-0.11518 -0.50618,-0.57102 -0.50618,-1.12 0,-0.50917 -0.0755,-0.92576 -0.16771,-0.92576 -0.0922,0 -0.8948,0.50014 -1.78346,1.11143 -2.70363,1.85978 -5.67684,2.26444 -8.76883,1.19349 z m 87.20775,0.0826 c -4.89795,-1.37344 -7.8953,-4.99192 -8.65408,-10.44755 -1.2776,-9.1855 4.60745,-15.82175 13.49085,-15.21287 7.74208,0.53065 12.4703,7.0122 11.25734,15.43173 -0.92,6.38609 -5.22576,10.33298 -11.56621,10.60219 -1.85264,0.0787 -3.35833,-0.0455 -4.5279,-0.3735 z m 6.57549,-4.95874 c 4.86464,-2.35492 5.19753,-12.09102 0.515,-15.0606 -2.37628,-1.50699 -5.55977,-1.24807 -7.52755,0.61221 -1.83459,1.73441 -2.29069,3.08427 -2.29069,6.77965 0,2.82969 0.10874,3.56201 0.68887,4.64 1.8167,3.37571 5.33923,4.61421 8.61437,3.02874 z m 106.61545,5.12422 c -3.49398,-0.88275 -6.69245,-3.69081 -7.93718,-6.96844 -0.86071,-2.26634 -1.16404,-6.57423 -0.64042,-9.09476 1.20816,-5.81545 5.16934,-9.37304 10.87162,-9.76388 5.02134,-0.34417 9.07164,1.43991 11.09075,4.88526 0.47232,0.80597 0.83712,1.96095 0.87373,2.76627 l 0.0628,1.38259 -2.62787,0.0927 -2.6279,0.0927 -0.7321,-1.5138 c -1.01402,-2.09668 -2.05827,-2.77534 -4.49558,-2.92168 -2.88218,-0.17305 -4.5394,0.76159 -5.83655,3.29179 -0.86937,1.69576 -0.96,2.16166 -0.96,4.93536 0,2.71301 0.10323,3.27304 0.90375,4.90326 1.13731,2.31611 2.84384,3.44222 5.20438,3.43431 2.72077,-0.009 4.28042,-1.29387 5.54502,-4.56769 0.34336,-0.88889 0.35696,-0.89254 2.98589,-0.8 l 2.64096,0.093 -0.0704,1.19945 c -0.17907,3.05245 -3.2968,6.97963 -6.41148,8.07608 -1.81114,0.63757 -6.15783,0.90229 -7.83946,0.47743 z m 51.29184,-0.16463 c -4.62662,-1.2979 -7.64189,-5.03119 -8.28995,-10.26414 -0.79424,-6.41306 1.95437,-12.14441 6.93654,-14.46395 1.56519,-0.72871 2.25261,-0.8495 4.86288,-0.85446 2.63309,-0.005 3.284,0.10859 4.86288,0.84867 2.42547,1.13693 4.55677,3.3302 5.79283,5.96132 0.87885,1.87073 1.00842,2.49116 1.01581,4.86423 l 0.008,2.72 -8.8,0.16 -8.8,0.16 0.0342,1.17367 c 0.0868,2.98244 2.83472,5.38633 6.15712,5.38633 2.21789,0 3.612,-0.62952 4.70825,-2.12605 1.33696,-1.8251 1.7,-2.03395 3.53543,-2.03395 2.09075,0 2.68502,0.22233 2.68502,1.00451 0,2.14819 -2.8559,5.50644 -5.81024,6.83227 -2.46297,1.10532 -6.25187,1.37421 -8.89923,0.63155 z m 9.26947,-15.84423 c 0,-1.43693 -1.6775,-3.829 -3.26409,-4.65451 -1.27053,-0.66105 -3.89472,-0.56524 -5.38829,0.19673 -1.40816,0.71839 -2.74483,2.49975 -3.06067,4.07891 l -0.20695,1.03477 h 5.96 c 5.79482,0 5.96,-0.0182 5.96,-0.6559 z m 46.19226,15.72715 c -4.86756,-1.39304 -8.07072,-5.00277 -8.62512,-9.71988 -0.20106,-1.71048 -0.17389,-1.80744 0.55747,-1.991 0.42281,-0.10613 1.75872,-0.14963 2.96867,-0.0967 2.4048,0.10527 2.44141,0.13431 3.05146,2.4216 0.76089,2.85291 3.11904,4.44973 7.05904,4.78004 2.91027,0.24399 5.3576,-0.48686 6.68224,-1.99554 0.84892,-0.96688 0.99398,-1.38369 0.99398,-2.85639 0,-1.37777 -0.16269,-1.91764 -0.80944,-2.68628 -0.91133,-1.08306 -1.72294,-1.38371 -8.72026,-3.23031 -5.33766,-1.40863 -6.21427,-1.77062 -7.92483,-3.27251 -1.61491,-1.4179 -2.4543,-3.2474 -2.63318,-5.73904 -0.17466,-2.43295 0.23875,-3.98829 1.58307,-5.95617 3.8199,-5.59167 15.15299,-6.37621 20.77696,-1.43829 1.5095,1.32536 2.83248,3.84615 3.06966,5.84897 0.24151,2.03914 0.0208,2.20879 -2.883,2.21532 -2.45703,0.005 -3.41898,-0.36 -3.41898,-1.29911 0,-1.25838 -1.19661,-3.0111 -2.60698,-3.81851 -1.1846,-0.67818 -1.79996,-0.79749 -4.11302,-0.79749 -2.02186,0 -3.03162,0.15482 -3.93411,0.60315 -2.96243,1.47172 -2.86746,5.41506 0.16537,6.86622 0.7528,0.36021 3.72676,1.26744 6.6088,2.01607 5.8649,1.52345 7.88695,2.51658 9.53402,4.68265 1.28141,1.68518 1.7039,3.13699 1.69712,5.83192 -0.0118,4.64455 -3.06112,8.21127 -8.25066,9.65028 -2.80281,0.7772 -8.07849,0.76793 -10.82828,-0.019 z m 54.09788,0.30026 c -3.23856,-0.69481 -5.37788,-2.13722 -6.65792,-4.48904 -0.61043,-1.12159 -0.84124,-1.95959 -0.77161,-2.80139 l 0.0994,-1.20108 2.56307,-0.0917 2.56307,-0.0917 0.63693,1.35626 c 1.03277,2.19916 1.95866,2.66714 5.27693,2.66714 2.37808,0 2.97818,-0.10794 3.73654,-0.67211 1.6233,-1.20762 1.39575,-3.30225 -0.46166,-4.24945 -0.65718,-0.33513 -2.56288,-0.90906 -4.23488,-1.27539 -6.42294,-1.40727 -8.24832,-2.4216 -9.42474,-5.23714 -1.53257,-3.66797 0.55952,-7.66246 4.7746,-9.11622 2.29571,-0.79178 7.73424,-0.77727 10.04262,0.0268 2.15283,0.74989 4.24634,2.73923 5.00026,4.75143 0.85052,2.27 0.63932,2.49207 -2.37008,2.49207 -1.66272,0 -2.66887,-0.13994 -2.87597,-0.4 -2.07562,-2.60622 -2.07962,-2.60873 -4.38919,-2.73477 -2.5416,-0.13869 -3.70867,0.2175 -4.45756,1.36049 -0.49341,0.753 -0.49444,0.87397 -0.0138,1.60762 0.75292,1.14909 1.89984,1.63825 5.99081,2.5551 4.81469,1.07904 7.38579,2.33468 8.41671,4.11041 1.05584,1.81871 1.29337,3.39398 0.81347,5.39454 -0.5376,2.24093 -2.63827,4.37447 -5.28611,5.36885 -2.12551,0.79822 -6.75872,1.14388 -8.97095,0.66927 z m 41.70855,-0.0389 c -3.41187,-0.80412 -6.65123,-3.62875 -7.96816,-6.94806 -0.6064,-1.52838 -0.72605,-2.4478 -0.73722,-5.66452 -0.0128,-3.71027 0.0234,-3.91829 1.07274,-6.15714 1.26166,-2.69182 3.64182,-5.15293 6.02089,-6.22571 1.20724,-0.54435 2.17917,-0.69615 4.57306,-0.71421 2.65146,-0.02 3.27213,0.0859 4.85603,0.82839 2.49098,1.16771 4.55654,3.16505 5.69766,5.50944 1.13872,2.33952 1.84407,6.30285 1.32461,7.44297 l -0.34457,0.75626 h -8.62797 c -5.48141,0 -8.70106,0.11823 -8.82835,0.3242 -0.40599,0.65687 0.77027,3.67894 1.82963,4.70083 1.32086,1.27414 2.42426,1.69497 4.44406,1.69497 2.05927,0 3.47133,-0.60958 4.53216,-1.95649 1.73869,-2.20759 1.73184,-2.20351 3.69559,-2.20351 1.03936,0 2.11481,0.18717 2.43948,0.42458 0.55856,0.40844 0.55559,0.4812 -0.0785,1.91466 -0.93975,2.12448 -2.12435,3.56143 -3.84755,4.66721 -2.64778,1.69906 -6.82666,2.36667 -10.0536,1.60613 z m 8.77168,-16.29258 c -0.1961,-1.4309 -1.45434,-3.24567 -2.79504,-4.03138 -2.33616,-1.36908 -5.40979,-0.91488 -7.28064,1.07589 -0.90877,0.96703 -1.88791,3.21816 -1.60135,3.68178 0.0843,0.13638 2.77076,0.20876 5.96996,0.16084 l 5.8167,-0.0871 z m -281.37299,16.00844 c -1.83744,-0.32804 -3.02637,-1.08462 -3.73373,-2.37596 -0.45971,-0.83928 -0.56835,-2.30152 -0.70365,-9.47248 l -0.16,-8.48 -1.54486,-0.0985 c -0.84967,-0.0542 -1.74378,0.0665 -1.98688,0.2683 -0.26727,0.22179 -0.83962,0.27953 -1.44749,0.14602 -1.55824,-0.34225 -3.77091,0.43435 -5.1409,1.80435 -1.89206,1.89208 -2.19987,3.43378 -2.19987,11.01877 0,5.16551 -0.0904,6.53777 -0.4504,6.83654 -0.27926,0.23176 -1.34323,0.33785 -2.8,0.27918 l -2.3496,-0.0946 v -12.32 -12.32 l 2.37181,-0.0951 c 2.67882,-0.10737 2.89565,0.0404 2.9033,1.97885 l 0.005,1.24379 1.52902,-1.43021 c 1.98442,-1.8562 3.98781,-2.63617 6.04659,-2.35409 0.84941,0.11638 2.33639,0.23976 3.30439,0.27417 l 1.76,0.0626 0.16,-3.52001 0.16,-3.52 2.07011,-0.0971 c 3.59648,-0.16867 3.49408,-0.27395 3.5991,3.70048 l 0.0909,3.43662 2.24,0.16 2.24,0.16 v 2.08 2.08 l -2.24,0.16 -2.24,0.16 -0.086,7.274 c -0.082,6.93096 -0.0555,7.30448 0.56,7.92 0.49139,0.49139 1.0672,0.646 2.40598,0.646 h 1.76 v 2.06111 c 0,1.13361 -0.108,2.12696 -0.24,2.20743 -0.52608,0.32074 -4.48819,0.46884 -5.88262,0.2199 z m 146.2831,-0.0237 c -1.84621,-0.3829 -2.8823,-1.15152 -3.67376,-2.72542 -0.57078,-1.13506 -0.64528,-2.07114 -0.75469,-9.48442 l -0.12137,-8.22507 -1.80535,-0.0949 -1.80531,-0.0949 v -2.08 -2.08 l 1.84,-0.096 1.84,-0.096 v -3.04507 c 0,-4.14605 0.0963,-4.28299 3.01206,-4.28299 1.54301,0 2.46864,0.14347 2.69642,0.41793 0.19075,0.22986 0.38838,1.84986 0.43917,3.6 l 0.0924,3.18208 2.24,0.16 2.24,0.16 v 2.08 2.08 l -2.24,0.16 -2.24,0.16 -0.0858,7.21086 c -0.10112,8.49347 -0.13943,8.37083 2.69542,8.62285 l 1.8704,0.16629 0.0974,1.88664 c 0.0535,1.03765 -0.0186,1.99908 -0.16,2.13651 -0.42314,0.41083 -4.62922,0.60259 -6.1769,0.28162 z m 108.8,0.001 c -1.73434,-0.3612 -2.82349,-1.12455 -3.68048,-2.57948 -0.58278,-0.98943 -0.6543,-1.83023 -0.8,-9.40655 l -0.16,-8.32 -1.76,-0.16 -1.76,-0.16 v -2.08 -2.08 l 1.76,-0.16 1.76,-0.16 0.0924,-3.18208 c 0.0508,-1.75014 0.24842,-3.37014 0.43917,-3.6 0.22778,-0.27445 1.15341,-0.41792 2.69642,-0.41792 2.91705,0 3.01206,0.13558 3.01206,4.29896 v 3.06104 h 2.20576 c 2.45533,0 2.59424,0.11996 2.59424,2.24 0,2.12005 -0.13891,2.24 -2.59424,2.24 h -2.20576 v 7.48082 c 0,8.57436 -0.10678,8.25509 2.84915,8.51918 l 1.79085,0.16 0.0944,1.78883 c 0.0635,1.20264 -0.0459,1.90533 -0.33389,2.14432 -0.604,0.50128 -4.28508,0.73005 -6.00006,0.37288 z m -223.59705,-0.2477 c -0.30352,-0.19276 -0.4162,-3.5528 -0.48,-14.31511 l -0.0834,-14.06324 -5.10633,-0.0885 c -3.59376,-0.0623 -5.18004,-0.20444 -5.35511,-0.48 -0.39894,-0.62791 -0.29603,-3.89814 0.14144,-4.49454 0.36759,-0.50115 1.48906,-0.53851 13.84,-0.46116 l 13.44,0.0842 v 2.56 2.56 l -5.12,0.16 -5.12,0.16 -0.0834,13.89136 c -0.0577,9.60648 -0.19319,14.02357 -0.4392,14.32 -0.39373,0.47442 -4.93783,0.60909 -5.63395,0.16697 z m 19.82057,-0.12234 c -0.28454,-0.28454 -0.384,-3.38619 -0.384,-11.97383 0,-6.37441 0.0874,-11.81761 0.19424,-12.096 0.15431,-0.40214 0.71104,-0.50617 2.70874,-0.50617 2.15853,0 2.56141,0.0876 2.84576,0.61896 0.2103,0.39297 0.33126,4.72354 0.33126,11.86104 0,7.13749 -0.12096,11.46806 -0.33126,11.86103 -0.28083,0.52475 -0.68509,0.61897 -2.656,0.61897 -1.38147,0 -2.48055,-0.15582 -2.70874,-0.384 z m 37.76,0 c -0.28857,-0.28858 -0.384,-4.4173 -0.384,-16.61383 0,-8.92641 0.0874,-16.45761 0.19424,-16.736 0.15431,-0.40214 0.71104,-0.50618 2.70874,-0.50618 2.15853,0 2.56141,0.0876 2.84576,0.61897 0.20451,0.38211 0.33126,3.87197 0.33126,9.12 0,4.67557 0.1177,8.50104 0.26154,8.50104 0.14381,0 2.24793,-2.016 4.67577,-4.48 l 4.41428,-4.48 h 3.16419 c 2.31117,0 3.16768,0.10783 3.17709,0.4 0.007,0.22 -1.96474,2.28897 -4.38186,4.59772 l -4.39472,4.19772 4.88586,7.42892 c 2.7719,4.21461 4.81062,7.62507 4.7119,7.88228 -0.23056,0.60081 -5.58704,0.64589 -6.34006,0.0534 -0.27959,-0.22 -1.977,-2.74008 -3.772,-5.60017 -1.79501,-2.8601 -3.38794,-5.27699 -3.53988,-5.37088 -0.1519,-0.0939 -0.85801,0.35494 -1.56915,0.99741 l -1.29296,1.16811 v 3.9838 c 0,2.19109 -0.14905,4.26233 -0.33126,4.60276 -0.28083,0.52475 -0.68509,0.61897 -2.656,0.61897 -1.38147,0 -2.48055,-0.15582 -2.70874,-0.384 z m 202.32198,-0.0171 c -0.0847,-0.22063 -0.11613,-5.80063 -0.0699,-12.4 l 0.084,-11.99888 h 2.56 2.56 l 0.0993,1.2 c 0.11753,1.42021 0.32998,1.47762 1.36489,0.36885 1.52416,-1.63292 3.08752,-2.20117 6.05578,-2.20117 3.0303,0 4.50547,0.55833 6.20662,2.34917 l 0.92659,0.97547 1.44013,-1.26764 c 3.30474,-2.90895 9.40253,-2.97976 12.32333,-0.1431 1.95843,1.902 2.14333,3.09092 2.14333,13.78226 0,10.59659 0.25453,9.73616 -2.88,9.73616 -3.11843,0 -2.87898,0.71269 -2.88765,-8.59424 -0.008,-8.67407 -0.18618,-10.3018 -1.24285,-11.35848 -0.97517,-0.97517 -4.29913,-1.11458 -5.69398,-0.23881 -2.05626,1.29105 -2.1641,1.82216 -2.27975,11.22762 -0.0743,6.04002 -0.21222,8.54478 -0.48,8.7151 -0.45174,0.28733 -4.11516,0.32873 -4.8296,0.0546 -0.44364,-0.17024 -0.5064,-1.22778 -0.50796,-8.56 0,-4.74613 -0.14423,-8.87867 -0.33101,-9.55121 -0.47533,-1.71137 -1.62535,-2.49455 -3.66304,-2.49455 -2.05149,0 -3.49773,0.88273 -4.45632,2.72 -0.61747,1.18347 -0.67507,1.89463 -0.76365,9.43088 -0.0694,5.90257 -0.20179,8.21825 -0.48,8.3951 -0.66621,0.42348 -5.02659,0.30007 -5.19821,-0.14712 z M 443.62815,275.2015 c -0.26672,-0.26672 -0.28199,-4.03547 -0.0192,-4.7205 0.1543,-0.40214 0.71104,-0.50617 2.70873,-0.50617 2.92522,0 3.17703,0.22452 3.17703,2.83279 0,2.5806 -0.0307,2.60721 -3.0209,2.60721 -1.44784,0 -2.72845,-0.096 -2.84576,-0.21333 z M 86.934807,255.9823 c -1.48338,-0.7516 -2.238877,-2.32479 -2.239504,-4.66338 -6.4e-4,-2.2433 0.524131,-3.34551 2.239504,-4.70411 1.882825,-1.49122 2.32399,-2.56132 2.572531,-6.24 0.240429,-3.5586 1.021216,-5.68102 3.648169,-9.91684 1.751364,-2.82399 1.970999,-3.969 2.486573,-12.96316 0.568263,-9.91333 0.455719,-16.8226 -0.403961,-24.8 -0.889098,-8.25034 -0.961162,-15.07779 -0.192202,-18.2092 1.152086,-4.6916 2.561747,-6.26083 12.428823,-13.83579 17.24119,-13.23607 21.07284,-18.1577 24.37975,-31.31501 0.91137,-3.62611 1.92078,-9.42655 2.4224,-13.92 0.57759,-5.17403 0.94095,-12.21614 0.6669,-12.92485 -0.1436,-0.37133 -0.65683,-1.03515 -1.14053,-1.47515 -1.50557,-1.369549 -3.84738,-5.252846 -4.65539,-7.719774 -1.17557,-3.589097 -1.0731,-7.755331 0.2887,-11.738435 0.56003,-1.638013 1.01824,-3.042013 1.01824,-3.12 0,-0.43801 -1.50305,-0.0013 -3.40183,0.988419 -9.96759,5.195462 -21.21096,19.456346 -29.465329,37.37328 -7.486265,16.24969 -8.878214,20.52653 -12.099561,37.17651 -7.537114,38.95666 -14.010653,62.47216 -19.791984,71.89552 -4.468605,7.28366 -11.835734,14.06851 -19.384246,17.85218 -9.697235,4.8607 -20.202944,5.51726 -30.637343,1.91469 -5.456418,-1.88388 -13.7619309,-6.47978 -14.3330378,-7.93126 -0.50908295,-1.29385 0.950128,-1.30843 7.6926037,-0.0768 11.0601891,2.02028 17.0705651,2.13599 23.7936961,0.45808 5.170164,-1.29033 9.532161,-3.82384 13.902206,-8.07459 5.005427,-4.8688 8.022576,-9.2225 10.45183,-15.08183 1.773091,-4.27668 2.642922,-8.84921 4.951626,-26.02967 0.800704,-5.95854 1.874585,-13.30254 2.3864,-16.32 0.511814,-3.01746 1.380348,-9.73429 1.930076,-14.92629 2.123293,-20.05384 2.772157,-23.3318 7.696202,-38.88 8.896022,-28.090132 13.55254,-38.971288 22.526931,-52.640002 3.64397,-5.550051 7.28449,-10.004016 12.17112,-14.89064 16.95983,-16.959841 39.47487,-26.965798 68.17064,-30.295865 5.54525,-0.643512 22.89282,-0.540627 28.64,0.169858 9.08893,1.123605 17.22366,3.084143 22.79772,5.494439 3.102,1.341346 7.11399,3.968535 14.48227,9.483481 9.37315,7.01553 12.57499,8.917731 17.13988,10.182723 7.26459,2.013124 18.28162,1.298164 24.14012,-1.566598 3.74609,-1.831808 6.12902,-4.581434 9.07082,-10.466685 0.89331,-1.787108 2.4387,-4.445468 3.43421,-5.907468 l 1.81002,-2.65818 -0.0498,-5.772533 c -0.0587,-6.815435 0.44062,-10.088169 2.05259,-13.4525336 1.1678,-2.4373548 2.18859,-3.5685964 4.15737,-4.6072339 1.89447,-0.99942788 2.57134,-0.87899687 3.68274,0.6552461 0.5291,0.7304068 0.962,1.5139083 0.962,1.7411146 0,0.7438069 0.67557,0.8525019 1.73901,0.2797982 2.21313,-1.1918457 3.63841,0.1363101 4.71501,4.3937042 1.14231,4.5172154 0.40748,9.2350854 -2.17785,13.9825774 -0.61256,1.124864 -0.9973,2.148451 -0.85496,2.274639 0.14234,0.126188 1.19479,0.420728 2.33879,0.654534 2.86572,0.585682 6.68999,2.57534 8.92218,4.641954 3.21235,2.97409 6.58976,8.418979 9.00323,14.51456 l 1.31882,3.330893 4.00384,3.847149 c 6.20518,5.96234 8.05462,8.679658 7.64617,11.234423 -0.46425,2.90384 -2.60153,5.01201 -5.56102,5.485248 -1.46858,0.234839 -1.92413,0.62848 -1.36934,1.183277 0.58601,0.585997 0.40425,1.758118 -0.35508,2.289974 -1.623,1.136807 -3.63548,0.440688 -8.15916,-2.822256 -1.62272,-1.170464 -3.29898,-2.260656 -3.72506,-2.422649 -0.42608,-0.161994 -2.4824,-0.450893 -4.56963,-0.641997 -5.0975,-0.466723 -7.25595,-0.874823 -9.63193,-1.821114 -1.09833,-0.43744 -2.13049,-0.712829 -2.29367,-0.611977 -0.16318,0.100851 -1.11504,1.730188 -2.11524,3.620752 -6.10056,11.531187 -14.92838,21.252909 -24.37973,26.848397 -2.91592,1.726317 -4.43234,2.417226 -7.95231,3.623213 l -2.57793,0.883232 -7.08641,7.161275 c -8.64602,8.73735 -16.15839,17.76949 -17.23601,20.72291 -2.29889,6.30054 -2.18531,6.20776 -7.90107,6.45421 -3.62647,0.15636 -4.66056,0.32967 -7.34549,1.23107 l -3.12484,1.04908 -2.58576,-0.52394 c -5.33546,-1.0811 -8.28456,-2.78309 -8.28456,-4.78121 0,-1.30837 0.49762,-1.79085 1.84702,-1.79085 0.59346,0 1.7284,-0.38056 2.52208,-0.84569 1.28487,-0.75298 1.56961,-0.80684 2.59758,-0.49135 0.98473,0.30222 1.30412,0.26188 2.1717,-0.27431 1.28863,-0.79643 2.28681,-0.79319 3.50162,0.0114 1.23714,0.81932 1.48945,0.80431 2.93166,-0.1744 0.98521,-0.66858 1.52915,-0.80252 3.03793,-0.74808 l 1.83785,0.0663 2.17628,-2.02419 c 1.19696,-1.1133 2.69476,-2.70648 3.32846,-3.5404 1.89082,-2.48827 6.04782,-13.38631 6.04782,-15.85507 0,-1.26556 -1.30886,-0.96843 -3.32932,0.7558 -3.52988,3.01235 -4.98644,5.21908 -6.91735,10.48 -0.58137,1.584 -1.41093,3.36098 -1.84347,3.94885 -0.85475,1.1617 -4.22959,3.77927 -5.50019,4.26602 -0.43469,0.16653 -3.60269,0.36194 -7.04,0.43427 -3.43732,0.0723 -7.18567,0.21706 -8.32967,0.32166 -1.78103,0.16284 -2.28357,0.0837 -3.49632,-0.55031 -1.63699,-0.85586 -2.58367,-2.3831 -2.58367,-4.16812 0,-1.70799 1.06863,-2.39026 2.96233,-1.89133 1.293,0.34067 1.38815,0.31654 1.99766,-0.50656 1.87346,-2.52994 2.98311,-2.8602 6.07283,-1.80742 l 1.54684,0.52706 0.83017,-0.9948 c 1.19161,-1.42792 2.16891,-1.69882 4.53874,-1.2581 l 1.9892,0.36993 1.31111,-1.46742 c 1.54935,-1.73405 4.721,-6.73002 4.78582,-7.53859 0.0418,-0.52198 -0.57795,-0.57992 -8.11471,-0.75868 -9.37385,-0.22232 -16.07418,-0.98203 -23.66601,-2.68333 -2.70132,-0.60535 -5.01477,-1.03681 -5.14101,-0.95879 -0.12623,0.078 -0.71,1.47696 -1.29726,3.10875 -2.41589,6.71297 -8.17519,17.13472 -12.5922,22.78625 -5.77294,7.38642 -16.74541,16.15465 -33.61538,26.86243 -12.84295,8.15173 -19.89526,13.37126 -27.66958,20.47872 -6.49387,5.93684 -12.45293,13.19681 -14.74136,17.95951 -2.53332,5.27236 -4.47846,18.36097 -5.92076,39.84 -0.75755,11.2817 -1.0091,12.44817 -3.35423,15.55428 -2.40424,3.18439 -10.05893,8.13983 -13.282203,8.59854 -0.889191,0.12654 -1.621959,0.009 -2.4,-0.38533 z M 485.6548,254.15119 c -16.68761,-2.40967 -29.11693,-10.74786 -35.95824,-24.12256 -3.95555,-7.73305 -5.64835,-15.29219 -5.63552,-25.16542 0.0198,-15.1769 4.86739,-27.71951 14.40551,-37.27203 12.69526,-12.71442 32.70355,-17.79169 53.62076,-13.60669 3.9946,0.79922 9.25424,2.4656 9.97952,3.16176 0.33472,0.32127 0.0182,2.03773 -1.68556,9.14596 -1.1537,4.81276 -2.24624,8.92954 -2.42788,9.14841 -0.25836,0.31131 -0.90006,0.18998 -2.9479,-0.55739 -10.37168,-3.7852 -22.43635,-3.49549 -30.28646,0.72727 -9.1857,4.94119 -14.47565,14.08873 -14.96871,25.88431 -0.69981,16.74234 7.03187,28.46654 21.34464,32.36676 2.40195,0.65453 3.43047,0.74062 8.79984,0.73653 6.87735,-0.005 9.61034,-0.41403 15.14288,-2.26507 2.24771,-0.75202 3.45018,-1.01315 3.66701,-0.79632 0.32016,0.32015 3.42448,16.19877 3.42819,17.53511 0,0.54947 -0.3537,0.82815 -1.67808,1.31653 -4.31753,1.59214 -8.27907,2.60002 -13.52,3.43972 -4.46035,0.71463 -17.22627,0.90848 -21.28,0.32312 z m 170.12125,-0.0115 c -17.59559,-2.51341 -30.01914,-11.14583 -36.62803,-25.45076 -7.76743,-16.81256 -5.7913,-40.74012 4.64182,-56.20406 6.86378,-10.17349 16.5504,-16.61389 28.66083,-19.05591 5.13939,-1.03634 14.85146,-1.03163 19.67891,0.01 10.42029,2.24743 18.40666,7.55056 23.91002,15.87677 6.03987,9.13792 8.81609,20.10971 8.38541,33.13954 -0.10762,3.256 -0.31284,6.424 -0.45604,7.04 l -0.26038,1.12 -32.46688,0.16 -32.46691,0.16 0.0334,1.92 c 0.0448,2.57112 0.84138,5.53737 2.32032,8.64 3.35331,7.03477 9.95062,11.59462 19.54349,13.50785 3.67286,0.73252 13.58435,0.7018 19.38275,-0.0601 3.58109,-0.47053 8.93952,-1.67174 13.82992,-3.10028 0.74246,-0.21688 1.44627,-0.29795 1.56406,-0.18016 0.11779,0.11778 1.00298,3.91608 1.96711,8.44065 1.69036,7.93286 1.73161,8.24207 1.15593,8.66302 -1.77357,1.29687 -12.48131,4.0508 -19.67571,5.0604 -5.14704,0.72229 -18.94809,0.90942 -23.12006,0.31348 z m 25.0166,-62.6529 c 0.0538,-0.84042 -0.13417,-2.76643 -0.41782,-4.28004 -2.08768,-11.14125 -9.08432,-17.36392 -19.54883,-17.38638 -8.28589,-0.0178 -15.14432,4.50376 -19.18685,12.64932 -1.49737,3.01716 -3.28336,9.24862 -2.92118,10.19238 0.18048,0.47037 2.09651,0.5099 21.08768,0.43506 l 20.88915,-0.0823 0.0978,-1.52802 z m 59.81892,62.64241 c -10.55943,-1.99754 -17.13764,-7.65666 -20.20224,-17.37969 -1.94128,-6.15903 -1.91828,-5.77036 -2.10404,-35.5747 l -0.17049,-27.36001 -6.88,-0.16 -6.88,-0.16 v -9.28 -9.28 l 6.88,-0.16 6.88,-0.16 0.0842,-10.93976 c 0.0774,-10.06764 0.12848,-10.95302 0.64,-11.10604 3.3503,-1.00227 23.30397,-5.57405 23.49485,-5.38315 0.13965,0.13964 0.29149,6.36828 0.33744,13.84142 l 0.0835,13.58753 11.6,0.084 11.6,0.084 v 9.276 c 0,5.10181 -0.036,9.30745 -0.08,9.34587 -0.044,0.0384 -5.264,0.14642 -11.6,0.24 l -11.52,0.17014 v 23.84 c 0,26.35881 0.032,26.85876 1.96259,30.71787 1.2137,2.42604 2.6983,3.91524 4.90115,4.91629 2.02039,0.91813 7.68368,1.10358 11.83149,0.38743 2.13552,-0.36871 3.07798,-0.41906 3.23034,-0.17258 0.26048,0.42145 0.66198,17.78686 0.4255,18.40311 -0.21837,0.56907 -2.45552,1.28531 -6.03107,1.93088 -4.10227,0.74068 -15.18461,0.91539 -18.48323,0.29139 z m -534.73482,-1.45369 c -11.2795,-1.00088 -20.72981,-5.37943 -28.5598,-13.23245 -8.26125,-8.28554 -13.12875,-19.00736 -14.90343,-32.82826 -0.50213,-3.9105 -0.50213,-13.36949 0,-17.28 2.07901,-16.19098 8.99288,-29.17329 19.86012,-37.29174 3.14389,-2.34866 8.99445,-5.46203 12.50117,-6.65247 5.44351,-1.84794 8.50003,-2.26871 16.48,-2.26871 6.40218,0 7.78428,0.0922 10.62029,0.7085 20.88182,4.53789 34.92536,21.0327 38.00679,44.64081 1.03912,7.96109 0.49744,18.74077 -1.31314,26.13202 -1.55735,6.35752 -4.54172,13.45476 -7.39539,17.58726 -2.00073,2.89734 -1.77667,2.95314 -6.33771,-1.57853 -2.21268,-2.19843 -4.15566,-4.23613 -4.31774,-4.52824 -0.21683,-0.39078 0.20689,-1.57449 1.60365,-4.48 2.23489,-4.64898 3.54106,-8.8713 4.50004,-14.54689 0.93099,-5.50993 0.79467,-14.71697 -0.29735,-20.08315 -2.90463,-14.27324 -10.03979,-24.59498 -20.593,-29.78986 -3.58438,-1.76444 -6.98669,-2.67159 -11.38114,-3.03454 -14.73753,-1.21721 -26.78609,5.76766 -33.76997,19.57733 -4.12356,8.1538 -6.15539,18.92009 -5.36122,28.40814 2.13648,25.52452 17.96929,41.58021 39.13244,39.6833 3.57167,-0.32013 7.41963,-1.20002 9.74346,-2.22796 0.99067,-0.43822 1.63019,-0.55279 1.98991,-0.3565 0.29154,0.15909 2.24187,2.02633 4.33407,4.14944 3.05008,3.09514 3.73109,3.94805 3.43611,4.30347 -0.63013,0.75926 -6.95437,3.09551 -10.53914,3.89329 -5.7581,1.28144 -11.37144,1.63414 -17.43902,1.09574 z m 94.19609,0.006 c -7.11246,-0.6848 -12.89017,-2.25936 -18.20171,-4.96041 -7.92186,-4.02847 -13.00821,-9.76508 -15.95282,-17.99228 -1.94766,-5.44173 -3.23129,-12.958 -2.31233,-13.53981 0.24685,-0.15629 2.99454,-0.28637 6.10597,-0.28906 4.46649,-0.004 5.75282,0.0908 6.11176,0.44971 0.25004,0.25005 0.54729,1.34126 0.66055,2.42494 0.32396,3.09942 1.09185,5.67794 2.65695,8.92179 2.49167,5.16429 7.44925,9.48659 13.63653,11.88912 7.13072,2.76887 16.82983,3.10635 25.31127,0.88072 l 2.5142,-0.65975 4.19934,4.19932 c 4.76774,4.76776 4.73161,4.59228 1.19293,5.79153 -7.09519,2.40454 -18.1405,3.63346 -25.92264,2.88418 z m 66.0962,-0.49264 c -0.10684,-0.27839 -0.19424,-25.98239 -0.19424,-57.12 v -56.61383 h -18.65884 c -14.42247,0 -18.78282,-0.0908 -19.20496,-0.4 -0.49805,-0.36478 -0.53866,-1.28759 -0.46119,-10.48 l 0.085,-10.08 h 39.04 39.04 l 0.085,10.08 c 0.0775,9.19241 0.0369,10.11522 -0.46118,10.48 -0.39648,0.2904 -2.4145,0.4 -7.36496,0.4 h -6.81885 v 56.50104 c 0,38.33565 -0.10649,56.70004 -0.33126,57.12 -0.31856,0.59522 -0.796,0.61896 -12.44576,0.61896 -10.75165,0 -12.13635,-0.0569 -12.30874,-0.50617 z m 42.88144,0.004 c -0.29497,-0.76869 -0.22537,-96.55533 0.0705,-97.02142 0.20067,-0.31611 2.92861,-0.38564 12.5551,-0.32 l 12.29872,0.0839 v 48.8 48.8 l -12.36432,0.0837 c -11.06665,0.0749 -12.38489,0.0302 -12.56,-0.42617 z m 121.30141,0.29286 C 530.2325,252.36635 530.1348,220.3274 530.1348,181.28809 V 110.307 l 0.72,-0.17528 c 0.396,-0.0964 5.976,-0.13514 12.4,-0.0861 l 11.68,0.0892 0.0811,43.28 c 0.0522,27.8154 0.19251,43.28 0.39283,43.28 0.17146,0 1.34964,-1.548 2.61821,-3.44 2.48051,-3.69954 27.98381,-37.84341 28.56055,-38.23694 0.191,-0.13032 6.89926,-0.20232 14.90726,-0.16 10.90998,0.0576 14.56,0.17137 14.56,0.4536 0,0.20717 -7.89805,9.10968 -17.5512,19.78336 -12.40333,13.71456 -17.5081,19.57163 -17.40416,19.96903 0.0809,0.30928 9.16691,13.17481 20.1912,28.59008 11.02429,15.41526 20.04416,28.25712 20.04416,28.53745 0,0.46022 -1.46454,0.50162 -15.09053,0.42656 l -15.09049,-0.0831 -13.78951,-21.19631 c -7.58419,-11.65797 -13.93347,-21.1887 -14.10947,-21.17939 -0.176,0.009 -2.048,2.05236 -4.16,4.54013 l -3.84,4.52321 -0.16,16.65618 -0.16,16.65618 -12.18291,0.0838 c -6.70061,0.0461 -12.28061,-0.0139 -12.4,-0.13333 z m -203.36281,-9.81601 -3.9361,-3.94558 2.16749,-1.25442 c 2.60595,-1.50814 6.24957,-4.84863 7.36537,-6.75263 0.44538,-0.75998 0.97824,-1.38178 1.18416,-1.38178 0.62365,0 8.2048,7.80164 8.2048,8.44341 0,1.42781 -8.82508,8.83659 -10.52585,8.83659 -0.28807,0 -2.29501,-1.77551 -4.45987,-3.94559 z m -94.77908,-1.04209 -3.9952,-4.02769 0.93269,-0.69231 c 3.54597,-2.63207 5.7708,-4.58968 7.38191,-6.49525 1.02164,-1.20838 2.01977,-2.23725 2.21805,-2.28638 0.19829,-0.0491 2.21067,1.78054 4.47197,4.06593 l 4.11145,4.15526 -1.04064,1.31391 c -1.57636,1.99032 -9.02354,7.99422 -9.91596,7.99422 -0.093,0 -1.96691,-1.81246 -4.16427,-4.02769 z m 106.7441,-10.67298 -4.45213,-4.46067 0.0742,-3.29933 c 0.16355,-7.27428 -2.65949,-11.53291 -10.04135,-15.14759 -4.40509,-2.15705 -8.66178,-3.40275 -20.8,-6.08701 -14.76241,-3.26458 -22.57726,-6.14382 -27.98893,-10.312 -3.95548,-3.04659 -6.93877,-7.38241 -8.19663,-11.91273 -0.67617,-2.43532 -0.94316,-9.19167 -0.48021,-12.15249 2.44629,-15.64571 18.66719,-25.32278 41.14577,-24.54678 7.73581,0.26706 13.51908,1.63536 18.72,4.42909 9.83706,5.28405 15.54477,13.92929 16.96845,25.70142 0.31495,2.60404 0.29523,2.90928 -0.21174,3.28 -0.78221,0.57196 -11.2985,0.57963 -12.01981,0.009 -0.31776,-0.25147 -0.6969,-1.56616 -1.02109,-3.54055 -1.18806,-7.23542 -5.11609,-12.59896 -11.54363,-15.76236 -3.53882,-1.74168 -6.92854,-2.62801 -11.4498,-2.99385 -12.34534,-0.99893 -22.72219,3.11012 -26.29841,10.41371 -1.1578,2.36453 -1.5583,4.58738 -1.40484,7.79706 0.17012,3.55813 1.18157,5.74307 3.91802,8.46367 2.60625,2.59116 6.35448,4.63666 11.68188,6.37509 3.81013,1.24332 15.36556,4.02005 24.7437,5.94583 14.91094,3.06193 24.76393,11.46323 26.9855,23.00955 0.53296,2.77007 0.59005,8.11396 0.11529,10.79308 -0.70124,3.95748 -2.53772,8.45876 -3.45104,8.45876 -0.29756,0 -2.54451,-2.0073 -4.99318,-4.46067 z m 70.43689,-92.89933 c -0.49804,-0.36478 -0.53865,-1.28759 -0.46118,-10.48 l 0.085,-10.08 h 12.48 12.48 l 0.085,10.08 c 0.0775,9.19241 0.0369,10.11522 -0.46118,10.48 -0.41306,0.30253 -3.36227,0.4 -12.10381,0.4 -8.74153,0 -11.69075,-0.0975 -12.10381,-0.4 z" + id="path1193" + inkscape:connector-curvature="0" /> + <path + style="fill:#9c9d9d;stroke-width:0.31999999" + d="m 593.1748,313.57898 c -1.03206,-0.19182 -1.27008,-0.59717 -1.27072,-2.16416 0,-2.53726 0.1175,-2.66372 2.44576,-2.6089 1.89667,0.0447 2.14227,-0.0272 2.83386,-0.82926 0.41648,-0.48299 0.99043,-1.63499 1.27542,-2.56 l 0.51818,-1.68184 -4.51178,-11.82179 c -2.48147,-6.50199 -4.43955,-12.00999 -4.3513,-12.24 0.11476,-0.29902 0.93783,-0.41821 2.88781,-0.41821 2.28755,0 2.78579,0.0936 3.08986,0.58048 0.19939,0.31926 1.61734,4.17126 3.15101,8.56 1.53369,4.38873 2.91392,7.97952 3.0672,7.97952 0.15328,0 1.58054,-3.816 3.17171,-8.48 l 2.89299,-8.48 2.69024,-0.0938 c 1.47965,-0.0516 2.81936,0.0353 2.97715,0.19313 0.25319,0.25319 -6.64912,19.55059 -9.88912,27.64797 -1.44841,3.61985 -3.06749,5.5043 -5.2984,6.16681 -1.56198,0.46386 -3.96105,0.56946 -5.67987,0.25001 z m -308.97326,-0.80416 c -0.0842,-0.22 -0.11573,-7.816 -0.07,-16.88 l 0.0832,-16.48 h 2.56 2.56 l 0.10028,1.04 c 0.0551,0.572 0.18014,1.04 0.27775,1.04 0.0976,0 0.66514,-0.42817 1.26115,-0.95148 2.42774,-2.13158 7.69054,-2.52039 11.15723,-0.8243 5.50876,2.69518 7.89889,10.2578 5.5657,17.61041 -0.75297,2.37281 -1.95753,4.14423 -3.74535,5.50784 -3.36689,2.56801 -8.63727,2.66634 -12.25955,0.22873 -0.89184,-0.60016 -1.67905,-1.0912 -1.74936,-1.0912 -0.0703,0 -0.12785,2.29222 -0.12785,5.09382 0,2.80161 -0.0874,5.32161 -0.19423,5.6 -0.15451,0.40264 -0.71292,0.50618 -2.73004,0.50618 -1.73362,0 -2.58427,-0.12654 -2.68899,-0.4 z m 15.04194,-13.4491 c 0.74506,-0.42199 1.66957,-1.36699 2.24,-2.28964 0.92877,-1.50225 0.97132,-1.72638 0.97132,-5.11617 0,-2.84511 -0.11778,-3.76624 -0.59653,-4.66509 -0.7624,-1.43143 -2.04559,-2.81287 -3.14757,-3.38857 -1.10197,-0.5757 -3.81268,-0.58141 -5.14617,-0.0109 -5.2141,2.23096 -5.34611,12.95359 -0.1909,15.50535 1.87503,0.9281 4.19379,0.91427 5.86985,-0.035 z m 13.76305,13.46212 c -0.087,-0.22716 -0.12072,-7.82902 -0.075,-16.89302 l 0.0832,-16.48 h 2.55562 c 2.30791,0 2.56561,0.062 2.65874,0.64 0.23482,1.4574 0.35242,1.49647 1.58239,0.52578 4.34133,-3.42618 11.9925,-2.19617 15.18284,2.44081 1.50195,2.183 2.21088,4.38231 2.41168,7.48155 0.52102,8.04219 -3.37952,13.71599 -9.79927,14.2542 -2.59507,0.21756 -5.25686,-0.46342 -7.29647,-1.8667 -0.99949,-0.68767 -1.42466,-0.83529 -1.53589,-0.53327 -0.0846,0.22969 -0.19112,2.72163 -0.23672,5.53763 l -0.0829,5.12 -2.64504,0.093 c -1.93497,0.068 -2.68751,-0.0179 -2.80323,-0.32 z m 15.75493,-13.90155 c 4.27142,-3.45716 3.72166,-12.49069 -0.90378,-14.85041 -2.01702,-1.02901 -4.93683,-0.78828 -6.59097,0.54341 -1.94025,1.56203 -2.69264,3.75798 -2.56132,7.47553 0.1178,3.335 0.67742,4.86715 2.36011,6.46165 1.31042,1.24175 2.25282,1.54364 4.4974,1.4407 1.66528,-0.0764 2.18464,-0.25025 3.19856,-1.07088 z m -94.86644,5.47408 c -4.9407,-1.33041 -8.28194,-4.80908 -9.00353,-9.37384 -0.38679,-2.44681 -0.12282,-2.66019 3.14932,-2.54585 l 2.69391,0.0941 0.38193,1.50055 c 0.57771,2.26977 1.53948,3.56795 3.41012,4.60292 1.53662,0.85017 1.96072,0.93329 4.72803,0.92659 3.35739,-0.008 5.25448,-0.68104 6.26414,-2.22199 0.75912,-1.15856 0.91675,-3.05145 0.36422,-4.37382 -0.63327,-1.51565 -2.02021,-2.15692 -8.22836,-3.80453 -7.56455,-2.00759 -9.29356,-2.96555 -10.75915,-5.96111 -2.22248,-4.54257 -0.18302,-10.13421 4.56734,-12.52244 2.46632,-1.23993 6.25552,-1.79609 9.28751,-1.36317 6.1282,0.87501 10.04725,4.20543 10.84904,9.21956 0.2631,1.64537 -0.29079,1.99744 -3.14254,1.99744 -2.39016,0 -2.82932,-0.28032 -3.55902,-2.27179 -0.2966,-0.80948 -0.86376,-1.77661 -1.26034,-2.14918 -2.20892,-2.07518 -7.96828,-2.18698 -10.16678,-0.19736 -0.34187,0.30938 -0.78292,1.10101 -0.98011,1.75917 -0.30219,1.00861 -0.26404,1.38871 0.24277,2.41899 0.33071,0.67229 1.08045,1.49814 1.6661,1.83521 0.58566,0.33707 3.46566,1.25169 6.4,2.03248 6.34206,1.68755 7.49944,2.16996 9.13857,3.80909 1.92687,1.92687 2.59382,3.65644 2.57723,6.68339 -0.0111,2.02355 -0.16851,2.86174 -0.75125,4 -1.52914,2.98683 -4.13727,4.93446 -7.93122,5.92266 -2.30201,0.5996 -7.68209,0.59033 -9.93793,-0.0171 z m 28.23978,-0.0806 c -2.6677,-0.92401 -3.8932,-2.08325 -4.86722,-4.60411 -0.43805,-1.13369 -0.5562,-2.94689 -0.66018,-10.13136 -0.0696,-4.8128 -0.0397,-9.0968 0.0665,-9.52 0.18368,-0.73185 0.3174,-0.76945 2.73576,-0.76945 2.18634,0 2.58907,0.0867 2.87391,0.61896 0.20366,0.38054 0.33125,3.78238 0.33125,8.83164 0,9.02599 0.12879,9.7604 1.89455,10.80346 0.55264,0.32645 1.59442,0.54594 2.59126,0.54594 2.23264,0 3.9488,-0.97366 4.79417,-2.71995 0.58609,-1.21071 0.64002,-1.97602 0.64002,-9.08213 0,-4.73721 0.12904,-8.00111 0.33126,-8.37896 0.28436,-0.53134 0.68726,-0.61896 2.84577,-0.61896 1.9977,0 2.55442,0.10403 2.70874,0.50617 0.10683,0.27839 0.19423,5.72159 0.19423,12.096 0,8.58764 -0.0995,11.68929 -0.384,11.97383 -0.39752,0.39752 -3.96605,0.53657 -4.86982,0.18976 -0.30016,-0.11518 -0.50618,-0.57102 -0.50618,-1.12 0,-0.50917 -0.0755,-0.92576 -0.16771,-0.92576 -0.0922,0 -0.8948,0.50014 -1.78346,1.11143 -2.70363,1.85978 -5.67684,2.26444 -8.76883,1.19349 z m 87.20775,0.0826 c -4.89795,-1.37344 -7.8953,-4.99192 -8.65408,-10.44755 -1.2776,-9.1855 4.60745,-15.82175 13.49085,-15.21287 7.74208,0.53065 12.4703,7.0122 11.25734,15.43173 -0.92,6.38609 -5.22576,10.33298 -11.56621,10.60219 -1.85264,0.0787 -3.35833,-0.0455 -4.5279,-0.3735 z m 6.57549,-4.95874 c 4.86464,-2.35492 5.19753,-12.09102 0.515,-15.0606 -2.37628,-1.50699 -5.55977,-1.24807 -7.52755,0.61221 -1.83459,1.73441 -2.29069,3.08427 -2.29069,6.77965 0,2.82969 0.10874,3.56201 0.68887,4.64 1.8167,3.37571 5.33923,4.61421 8.61437,3.02874 z m 106.61545,5.12422 c -3.49398,-0.88275 -6.69245,-3.69081 -7.93718,-6.96844 -0.86071,-2.26634 -1.16404,-6.57423 -0.64042,-9.09476 1.20816,-5.81545 5.16934,-9.37304 10.87162,-9.76388 5.02134,-0.34417 9.07164,1.43991 11.09075,4.88526 0.47232,0.80597 0.83712,1.96095 0.87373,2.76627 l 0.0628,1.38259 -2.62787,0.0927 -2.6279,0.0927 -0.7321,-1.5138 c -1.01402,-2.09668 -2.05827,-2.77534 -4.49558,-2.92168 -2.88218,-0.17305 -4.5394,0.76159 -5.83655,3.29179 -0.86937,1.69576 -0.96,2.16166 -0.96,4.93536 0,2.71301 0.10323,3.27304 0.90375,4.90326 1.13731,2.31611 2.84384,3.44222 5.20438,3.43431 2.72077,-0.009 4.28042,-1.29387 5.54502,-4.56769 0.34336,-0.88889 0.35696,-0.89254 2.98589,-0.8 l 2.64096,0.093 -0.0704,1.19945 c -0.17907,3.05245 -3.2968,6.97963 -6.41148,8.07608 -1.81114,0.63757 -6.15783,0.90229 -7.83946,0.47743 z m 51.29184,-0.16463 c -4.62662,-1.2979 -7.64189,-5.03119 -8.28995,-10.26414 -0.79424,-6.41306 1.95437,-12.14441 6.93654,-14.46395 1.56519,-0.72871 2.25261,-0.8495 4.86288,-0.85446 2.63309,-0.005 3.284,0.10859 4.86288,0.84867 2.42547,1.13693 4.55677,3.3302 5.79283,5.96132 0.87885,1.87073 1.00842,2.49116 1.01581,4.86423 l 0.008,2.72 -8.8,0.16 -8.8,0.16 0.0342,1.17367 c 0.0868,2.98244 2.83472,5.38633 6.15712,5.38633 2.21789,0 3.612,-0.62952 4.70825,-2.12605 1.33696,-1.8251 1.7,-2.03395 3.53543,-2.03395 2.09075,0 2.68502,0.22233 2.68502,1.00451 0,2.14819 -2.8559,5.50644 -5.81024,6.83227 -2.46297,1.10532 -6.25187,1.37421 -8.89923,0.63155 z m 9.26947,-15.84423 c 0,-1.43693 -1.6775,-3.829 -3.26409,-4.65451 -1.27053,-0.66105 -3.89472,-0.56524 -5.38829,0.19673 -1.40816,0.71839 -2.74483,2.49975 -3.06067,4.07891 l -0.20695,1.03477 h 5.96 c 5.79482,0 5.96,-0.0182 5.96,-0.6559 z m 46.19226,15.72715 c -4.86756,-1.39304 -8.07072,-5.00277 -8.62512,-9.71988 -0.20106,-1.71048 -0.17389,-1.80744 0.55747,-1.991 0.42281,-0.10613 1.75872,-0.14963 2.96867,-0.0967 2.4048,0.10527 2.44141,0.13431 3.05146,2.4216 0.76089,2.85291 3.11904,4.44973 7.05904,4.78004 2.91027,0.24399 5.3576,-0.48686 6.68224,-1.99554 0.84892,-0.96688 0.99398,-1.38369 0.99398,-2.85639 0,-1.37777 -0.16269,-1.91764 -0.80944,-2.68628 -0.91133,-1.08306 -1.72294,-1.38371 -8.72026,-3.23031 -5.33766,-1.40863 -6.21427,-1.77062 -7.92483,-3.27251 -1.61491,-1.4179 -2.4543,-3.2474 -2.63318,-5.73904 -0.17466,-2.43295 0.23875,-3.98829 1.58307,-5.95617 3.8199,-5.59167 15.15299,-6.37621 20.77696,-1.43829 1.5095,1.32536 2.83248,3.84615 3.06966,5.84897 0.24151,2.03914 0.0208,2.20879 -2.883,2.21532 -2.45703,0.005 -3.41898,-0.36 -3.41898,-1.29911 0,-1.25838 -1.19661,-3.0111 -2.60698,-3.81851 -1.1846,-0.67818 -1.79996,-0.79749 -4.11302,-0.79749 -2.02186,0 -3.03162,0.15482 -3.93411,0.60315 -2.96243,1.47172 -2.86746,5.41506 0.16537,6.86622 0.7528,0.36021 3.72676,1.26744 6.6088,2.01607 5.8649,1.52345 7.88695,2.51658 9.53402,4.68265 1.28141,1.68518 1.7039,3.13699 1.69712,5.83192 -0.0118,4.64455 -3.06112,8.21127 -8.25066,9.65028 -2.80281,0.7772 -8.07849,0.76793 -10.82828,-0.019 z m 54.09788,0.30026 c -3.23856,-0.69481 -5.37788,-2.13722 -6.65792,-4.48904 -0.61043,-1.12159 -0.84124,-1.95959 -0.77161,-2.80139 l 0.0994,-1.20108 2.56307,-0.0917 2.56307,-0.0917 0.63693,1.35626 c 1.03277,2.19916 1.95866,2.66714 5.27693,2.66714 2.37808,0 2.97818,-0.10794 3.73654,-0.67211 1.6233,-1.20762 1.39575,-3.30225 -0.46166,-4.24945 -0.65718,-0.33513 -2.56288,-0.90906 -4.23488,-1.27539 -6.42294,-1.40727 -8.24832,-2.4216 -9.42474,-5.23714 -1.53257,-3.66797 0.55952,-7.66246 4.7746,-9.11622 2.29571,-0.79178 7.73424,-0.77727 10.04262,0.0268 2.15283,0.74989 4.24634,2.73923 5.00026,4.75143 0.85052,2.27 0.63932,2.49207 -2.37008,2.49207 -1.66272,0 -2.66887,-0.13994 -2.87597,-0.4 -2.07562,-2.60622 -2.07962,-2.60873 -4.38919,-2.73477 -2.5416,-0.13869 -3.70867,0.2175 -4.45756,1.36049 -0.49341,0.753 -0.49444,0.87397 -0.0138,1.60762 0.75292,1.14909 1.89984,1.63825 5.99081,2.5551 4.81469,1.07904 7.38579,2.33468 8.41671,4.11041 1.05584,1.81871 1.29337,3.39398 0.81347,5.39454 -0.5376,2.24093 -2.63827,4.37447 -5.28611,5.36885 -2.12551,0.79822 -6.75872,1.14388 -8.97095,0.66927 z m 41.70855,-0.0389 c -3.41187,-0.80412 -6.65123,-3.62875 -7.96816,-6.94806 -0.6064,-1.52838 -0.72605,-2.4478 -0.73722,-5.66452 -0.0128,-3.71027 0.0234,-3.91829 1.07274,-6.15714 1.26166,-2.69182 3.64182,-5.15293 6.02089,-6.22571 1.20724,-0.54435 2.17917,-0.69615 4.57306,-0.71421 2.65146,-0.02 3.27213,0.0859 4.85603,0.82839 2.49098,1.16771 4.55654,3.16505 5.69766,5.50944 1.13872,2.33952 1.84407,6.30285 1.32461,7.44297 l -0.34457,0.75626 h -8.62797 c -5.48141,0 -8.70106,0.11823 -8.82835,0.3242 -0.40599,0.65687 0.77027,3.67894 1.82963,4.70083 1.32086,1.27414 2.42426,1.69497 4.44406,1.69497 2.05927,0 3.47133,-0.60958 4.53216,-1.95649 1.73869,-2.20759 1.73184,-2.20351 3.69559,-2.20351 1.03936,0 2.11481,0.18717 2.43948,0.42458 0.55856,0.40844 0.55559,0.4812 -0.0785,1.91466 -0.93975,2.12448 -2.12435,3.56143 -3.84755,4.66721 -2.64778,1.69906 -6.82666,2.36667 -10.0536,1.60613 z m 8.77168,-16.29258 c -0.1961,-1.4309 -1.45434,-3.24567 -2.79504,-4.03138 -2.33616,-1.36908 -5.40979,-0.91488 -7.28064,1.07589 -0.90877,0.96703 -1.88791,3.21816 -1.60135,3.68178 0.0843,0.13638 2.77076,0.20876 5.96996,0.16084 l 5.8167,-0.0871 z m -281.37299,16.00844 c -1.83744,-0.32804 -3.02637,-1.08462 -3.73373,-2.37596 -0.45971,-0.83928 -0.56835,-2.30152 -0.70365,-9.47248 l -0.16,-8.48 -1.54486,-0.0985 c -0.84967,-0.0542 -1.74378,0.0665 -1.98688,0.2683 -0.26727,0.22179 -0.83962,0.27953 -1.44749,0.14602 -1.55824,-0.34225 -3.77091,0.43435 -5.1409,1.80435 -1.89206,1.89208 -2.19987,3.43378 -2.19987,11.01877 0,5.16551 -0.0904,6.53777 -0.4504,6.83654 -0.27926,0.23176 -1.34323,0.33785 -2.8,0.27918 l -2.3496,-0.0946 v -12.32 -12.32 l 2.37181,-0.0951 c 2.67882,-0.10737 2.89565,0.0404 2.9033,1.97885 l 0.005,1.24379 1.52902,-1.43021 c 1.98442,-1.8562 3.98781,-2.63617 6.04659,-2.35409 0.84941,0.11638 2.33639,0.23976 3.30439,0.27417 l 1.76,0.0626 0.16,-3.52001 0.16,-3.52 2.07011,-0.0971 c 3.59648,-0.16867 3.49408,-0.27395 3.5991,3.70048 l 0.0909,3.43662 2.24,0.16 2.24,0.16 v 2.08 2.08 l -2.24,0.16 -2.24,0.16 -0.086,7.274 c -0.082,6.93096 -0.0555,7.30448 0.56,7.92 0.49139,0.49139 1.0672,0.646 2.40598,0.646 h 1.76 v 2.06111 c 0,1.13361 -0.108,2.12696 -0.24,2.20743 -0.52608,0.32074 -4.48819,0.46884 -5.88262,0.2199 z m 146.2831,-0.0237 c -1.84621,-0.3829 -2.8823,-1.15152 -3.67376,-2.72542 -0.57078,-1.13506 -0.64528,-2.07114 -0.75469,-9.48442 l -0.12137,-8.22507 -1.80535,-0.0949 -1.80531,-0.0949 v -2.08 -2.08 l 1.84,-0.096 1.84,-0.096 v -3.04507 c 0,-4.14605 0.0963,-4.28299 3.01206,-4.28299 1.54301,0 2.46864,0.14347 2.69642,0.41793 0.19075,0.22986 0.38838,1.84986 0.43917,3.6 l 0.0924,3.18208 2.24,0.16 2.24,0.16 v 2.08 2.08 l -2.24,0.16 -2.24,0.16 -0.0858,7.21086 c -0.10112,8.49347 -0.13943,8.37083 2.69542,8.62285 l 1.8704,0.16629 0.0974,1.88664 c 0.0535,1.03765 -0.0186,1.99908 -0.16,2.13651 -0.42314,0.41083 -4.62922,0.60259 -6.1769,0.28162 z m 108.8,0.001 c -1.73434,-0.3612 -2.82349,-1.12455 -3.68048,-2.57948 -0.58278,-0.98943 -0.6543,-1.83023 -0.8,-9.40655 l -0.16,-8.32 -1.76,-0.16 -1.76,-0.16 v -2.08 -2.08 l 1.76,-0.16 1.76,-0.16 0.0924,-3.18208 c 0.0508,-1.75014 0.24842,-3.37014 0.43917,-3.6 0.22778,-0.27445 1.15341,-0.41792 2.69642,-0.41792 2.91705,0 3.01206,0.13558 3.01206,4.29896 v 3.06104 h 2.20576 c 2.45533,0 2.59424,0.11996 2.59424,2.24 0,2.12005 -0.13891,2.24 -2.59424,2.24 h -2.20576 v 7.48082 c 0,8.57436 -0.10678,8.25509 2.84915,8.51918 l 1.79085,0.16 0.0944,1.78883 c 0.0635,1.20264 -0.0459,1.90533 -0.33389,2.14432 -0.604,0.50128 -4.28508,0.73005 -6.00006,0.37288 z m -223.59705,-0.2477 c -0.30352,-0.19276 -0.4162,-3.5528 -0.48,-14.31511 l -0.0834,-14.06324 -5.10633,-0.0885 c -3.59376,-0.0623 -5.18004,-0.20444 -5.35511,-0.48 -0.39894,-0.62791 -0.29603,-3.89814 0.14144,-4.49454 0.36759,-0.50115 1.48906,-0.53851 13.84,-0.46116 l 13.44,0.0842 v 2.56 2.56 l -5.12,0.16 -5.12,0.16 -0.0834,13.89136 c -0.0577,9.60648 -0.19319,14.02357 -0.4392,14.32 -0.39373,0.47442 -4.93783,0.60909 -5.63395,0.16697 z m 19.82057,-0.12234 c -0.28454,-0.28454 -0.384,-3.38619 -0.384,-11.97383 0,-6.37441 0.0874,-11.81761 0.19424,-12.096 0.15431,-0.40214 0.71104,-0.50617 2.70874,-0.50617 2.15853,0 2.56141,0.0876 2.84576,0.61896 0.2103,0.39297 0.33126,4.72354 0.33126,11.86104 0,7.13749 -0.12096,11.46806 -0.33126,11.86103 -0.28083,0.52475 -0.68509,0.61897 -2.656,0.61897 -1.38147,0 -2.48055,-0.15582 -2.70874,-0.384 z m 37.76,0 c -0.28857,-0.28858 -0.384,-4.4173 -0.384,-16.61383 0,-8.92641 0.0874,-16.45761 0.19424,-16.736 0.15431,-0.40214 0.71104,-0.50618 2.70874,-0.50618 2.15853,0 2.56141,0.0876 2.84576,0.61897 0.20451,0.38211 0.33126,3.87197 0.33126,9.12 0,4.67557 0.1177,8.50104 0.26154,8.50104 0.14381,0 2.24793,-2.016 4.67577,-4.48 l 4.41428,-4.48 h 3.16419 c 2.31117,0 3.16768,0.10783 3.17709,0.4 0.007,0.22 -1.96474,2.28897 -4.38186,4.59772 l -4.39472,4.19772 4.88586,7.42892 c 2.7719,4.21461 4.81062,7.62507 4.7119,7.88228 -0.23056,0.60081 -5.58704,0.64589 -6.34006,0.0534 -0.27959,-0.22 -1.977,-2.74008 -3.772,-5.60017 -1.79501,-2.8601 -3.38794,-5.27699 -3.53988,-5.37088 -0.1519,-0.0939 -0.85801,0.35494 -1.56915,0.99741 l -1.29296,1.16811 v 3.9838 c 0,2.19109 -0.14905,4.26233 -0.33126,4.60276 -0.28083,0.52475 -0.68509,0.61897 -2.656,0.61897 -1.38147,0 -2.48055,-0.15582 -2.70874,-0.384 z m 202.32198,-0.0171 c -0.0847,-0.22063 -0.11613,-5.80063 -0.0699,-12.4 l 0.084,-11.99888 h 2.56 2.56 l 0.0993,1.2 c 0.11753,1.42021 0.32998,1.47762 1.36489,0.36885 1.52416,-1.63292 3.08752,-2.20117 6.05578,-2.20117 3.0303,0 4.50547,0.55833 6.20662,2.34917 l 0.92659,0.97547 1.44013,-1.26764 c 3.30474,-2.90895 9.40253,-2.97976 12.32333,-0.1431 1.95843,1.902 2.14333,3.09092 2.14333,13.78226 0,10.59659 0.25453,9.73616 -2.88,9.73616 -3.11843,0 -2.87898,0.71269 -2.88765,-8.59424 -0.008,-8.67407 -0.18618,-10.3018 -1.24285,-11.35848 -0.97517,-0.97517 -4.29913,-1.11458 -5.69398,-0.23881 -2.05626,1.29105 -2.1641,1.82216 -2.27975,11.22762 -0.0743,6.04002 -0.21222,8.54478 -0.48,8.7151 -0.45174,0.28733 -4.11516,0.32873 -4.8296,0.0546 -0.44364,-0.17024 -0.5064,-1.22778 -0.50796,-8.56 0,-4.74613 -0.14423,-8.87867 -0.33101,-9.55121 -0.47533,-1.71137 -1.62535,-2.49455 -3.66304,-2.49455 -2.05149,0 -3.49773,0.88273 -4.45632,2.72 -0.61747,1.18347 -0.67507,1.89463 -0.76365,9.43088 -0.0694,5.90257 -0.20179,8.21825 -0.48,8.3951 -0.66621,0.42348 -5.02659,0.30007 -5.19821,-0.14712 z M 443.62815,275.2015 c -0.26672,-0.26672 -0.28199,-4.03547 -0.0192,-4.7205 0.1543,-0.40214 0.71104,-0.50617 2.70873,-0.50617 2.92522,0 3.17703,0.22452 3.17703,2.83279 0,2.5806 -0.0307,2.60721 -3.0209,2.60721 -1.44784,0 -2.72845,-0.096 -2.84576,-0.21333 z M 88.054807,255.97444 c -2.177991,-0.38324 -3.197479,-2.16594 -2.977539,-5.20658 0.138057,-1.9086 0.196326,-2.01839 2.006006,-3.77938 2.289894,-2.22828 2.729654,-3.22452 2.738281,-6.20339 0.0086,-2.96156 0.908119,-5.578 3.292896,-9.57785 0.981271,-1.64584 1.928007,-3.64043 2.103853,-4.43243 0.493034,-2.22056 1.160426,-15.16012 1.122333,-21.76 -0.01942,-3.36229 -0.32231,-8.82334 -0.701091,-12.64 -1.014231,-10.21954 -1.068685,-11.3434 -0.706912,-14.58988 0.528393,-4.74173 1.315353,-6.69408 3.730067,-9.2538 1.129395,-1.19722 4.244639,-3.86981 6.922779,-5.93908 15.45973,-11.94507 19.79171,-16.26622 23.07495,-23.01724 3.64646,-7.49787 5.83215,-18.39959 6.74411,-33.63795 l 0.19378,-3.23795 -1.62388,-1.94342 c -3.69374,-4.420559 -5.25302,-8.253695 -5.23161,-12.860681 0.0134,-2.880848 0.69115,-5.999015 1.75882,-8.091831 0.66964,-1.312592 0.60574,-2.148169 -0.16427,-2.148169 -1.01514,0 -6.27975,2.972758 -8.68667,4.905088 -5.40677,4.340662 -11.96807,12.077744 -16.78041,19.787433 -2.76099,4.42329 -6.732274,12.19813 -10.041737,19.65936 -5.462016,12.31419 -6.46511,15.71114 -10.29566,34.86599 -8.817674,44.09318 -14.405837,62.94634 -21.383267,72.14213 -2.567408,3.38368 -7.91928,8.6124 -11.094829,10.83953 -9.310822,6.53003 -20.200464,9.0938 -30.077017,7.08108 -3.970467,-0.80913 -8.875253,-2.51124 -12.6138293,-4.37739 -2.983913,-1.48945 -8.1891529,-4.80085 -8.1891529,-5.20966 0,-0.50281 2.7854655,-0.28142 7.6192908,0.60559 7.5601464,1.3873 11.1452434,1.72632 16.2095934,1.53284 9.590587,-0.3664 16.012923,-3.1682 22.656869,-9.88424 4.029712,-4.07345 6.632742,-7.60835 8.55358,-11.61575 2.889492,-6.02826 3.669175,-9.62197 6.250999,-28.812 0.805088,-5.984 1.877568,-13.328 2.383289,-16.32 0.505722,-2.992 1.222381,-8.248 1.592576,-11.68 2.012356,-18.6561 2.52992,-22.25358 4.189475,-29.12 1.033754,-4.27717 6.720992,-22.56147 9.283133,-29.84499 6.336394,-18.012771 13.113907,-31.244688 21.756107,-42.475012 3.02683,-3.933286 11.05787,-11.979789 15.34509,-15.374618 13.64463,-10.804506 30.88712,-18.255206 49.92,-21.571068 19.72576,-3.436577 41.60424,-2.501568 56.78463,2.426775 6.21675,2.018278 8.37477,3.345944 23.33929,14.35891 7.31514,5.383498 11.74094,7.316417 18.4081,8.03953 2.77238,0.300691 4.528,0.302611 7.84916,0.0086 5.23104,-0.463117 8.46596,-1.259638 11.41982,-2.811846 3.88118,-2.039501 5.45495,-3.92066 9.20913,-11.00786 1.26198,-2.382379 2.87493,-5.098478 3.58435,-6.035776 l 1.28984,-1.704178 0.0891,-7.084225 c 0.0951,-7.562733 0.3342,-9.0781415 1.98337,-12.56994 0.65023,-1.3767518 2.16542,-3.0457153 4.1859,-4.6107381 0.53954,-0.4179149 2.47697,-0.5289502 2.50471,-0.1435469 0.0127,0.176 0.33966,0.824 0.72663,1.4400001 0.38698,0.616 0.70413,1.282368 0.70479,1.4808176 6.4e-4,0.1984499 0.21275,0.5363955 0.47132,0.7509901 0.37869,0.3142855 0.63604,0.2596675 1.32316,-0.2808176 2.34039,-1.840955 4.17337,0.2986058 4.96876,5.7998558 0.53603,3.70732 -0.0872,6.939939 -2.13473,11.07223 -0.81295,1.640691 -1.41158,3.156386 -1.33029,3.368211 0.0813,0.211825 1.06278,0.574125 2.1811,0.805111 4.2524,0.878316 8.55435,3.316796 10.89618,6.176298 2.70976,3.30871 5.55699,8.402003 7.47731,13.375741 1.05405,2.730093 2.55136,4.64927 5.04384,6.464877 1.54544,1.125753 6.31427,6.707161 7.16483,8.385686 0.76765,1.514868 0.79133,1.706167 0.41879,3.383328 -0.61863,2.7848 -3.22519,4.817674 -6.17732,4.817674 -1.08288,0 -1.33507,0.472915 -0.72028,1.35064 0.67222,0.959738 0.62768,1.757719 -0.12045,2.158103 -1.53274,0.82031 -3.86378,-0.107053 -7.99309,-3.179943 -1.48061,-1.101833 -3.13296,-2.129789 -3.67187,-2.284342 -0.53888,-0.154554 -2.56746,-0.430032 -4.50794,-0.612173 -4.59623,-0.431421 -8.29347,-1.159971 -9.8082,-1.932727 -2.05452,-1.04814 -2.30568,-0.910092 -3.96701,2.180442 -6.376,11.861133 -13.87227,20.550743 -22.97244,26.629463 -3.00693,2.008567 -7.64744,4.246269 -10.36411,4.997696 -1.94899,0.539089 -2.10394,0.669402 -8.87124,7.460752 -3.78819,3.80165 -8.27418,8.64009 -9.96886,10.75209 -1.69469,2.112 -3.99214,4.97489 -5.10544,6.36197 -1.29688,1.61581 -2.27305,3.2255 -2.71681,4.48 -2.04911,5.79272 -1.96672,5.72907 -7.77552,6.0077 -3.79124,0.18186 -5.00055,0.37196 -7.3448,1.15458 -2.4445,0.8161 -3.03176,0.90153 -4.5551,0.66265 -3.02012,-0.4736 -6.75157,-1.81147 -7.80998,-2.80017 -1.65572,-1.54668 -1.20483,-3.22673 0.86599,-3.22673 0.59763,0 1.51536,-0.30531 2.03941,-0.67846 0.7725,-0.55007 1.26631,-0.64812 2.6094,-0.51808 1.30495,0.12634 1.91245,0.0156 2.86199,-0.52154 l 1.2054,-0.68192 1.59477,0.88 c 0.87712,0.484 1.64688,0.88 1.71059,0.88 0.0637,0 0.67563,-0.44726 1.35983,-0.99391 1.14471,-0.91458 1.38948,-0.98099 3.0666,-0.83192 l 1.8226,0.16198 2.86624,-2.69672 c 3.13663,-2.95112 4.33413,-4.88611 6.59193,-10.65161 1.38453,-3.5355 2.85604,-8.85573 2.57512,-9.31027 -0.10794,-0.17465 -0.69935,-0.31755 -1.31425,-0.31755 -0.97691,0 -1.47448,0.35334 -3.94294,2.8 -3.03821,3.01138 -4.03005,4.65647 -6.11185,10.13725 -1.2033,3.16795 -1.99636,4.13309 -5.09832,6.20449 -1.97977,1.32205 -2.04141,1.33899 -5.08759,1.39862 -4.24665,0.0831 -10.37003,0.23858 -12.71796,0.32284 -2.23449,0.0802 -3.29508,-0.43303 -4.29965,-2.08059 -0.65111,-1.06784 -0.81045,-2.63597 -0.34283,-3.37386 0.31749,-0.50098 1.31322,-0.5787 2.97322,-0.23205 1.11899,0.23367 1.21432,0.18543 1.95647,-0.99023 1.42176,-2.25221 2.10995,-2.41607 5.75163,-1.36947 l 1.52442,0.4381 0.97888,-1.18755 c 0.85104,-1.03246 1.15766,-1.18755 2.34783,-1.18755 0.75293,0 1.83386,0.16207 2.40209,0.36015 0.97277,0.33911 1.10901,0.2877 2.33173,-0.88 1.68196,-1.60627 5.69063,-7.70898 5.69063,-8.66328 v -0.73687 h -5.90256 c -9.36697,0 -18.52788,-0.96566 -26.39785,-2.78263 -5.81173,-1.34178 -5.32947,-1.52989 -6.93525,2.70509 -1.74281,4.59637 -3.67296,8.66529 -6.19879,13.06759 -4.21343,7.34365 -8.03944,12.15849 -13.4805,16.96451 -7.78263,6.87429 -13.18195,10.80525 -26.87975,19.5697 -15.55899,9.95532 -23.56106,16.19034 -31.86583,24.82905 -5.90092,6.1382 -9.77595,11.68255 -11.12339,15.9152 -1.93208,6.06914 -3.62305,19.03646 -4.81596,36.93149 -0.63274,9.49183 -0.92324,11.4095 -2.09212,13.81078 -2.21632,4.55307 -11.898285,11.06402 -15.507993,10.42885 z M 485.6548,254.15119 c -16.68761,-2.40967 -29.11693,-10.74786 -35.95824,-24.12256 -3.95555,-7.73305 -5.64835,-15.29219 -5.63552,-25.16542 0.0198,-15.1769 4.86739,-27.71951 14.40551,-37.27203 12.69526,-12.71442 32.70355,-17.79169 53.62076,-13.60669 3.9946,0.79922 9.25424,2.4656 9.97952,3.16176 0.33472,0.32127 0.0182,2.03773 -1.68556,9.14596 -1.1537,4.81276 -2.24624,8.92954 -2.42788,9.14841 -0.25836,0.31131 -0.90006,0.18998 -2.9479,-0.55739 -10.37168,-3.7852 -22.43635,-3.49549 -30.28646,0.72727 -9.1857,4.94119 -14.47565,14.08873 -14.96871,25.88431 -0.69981,16.74234 7.03187,28.46654 21.34464,32.36676 2.40195,0.65453 3.43047,0.74062 8.79984,0.73653 6.87735,-0.005 9.61034,-0.41403 15.14288,-2.26507 2.24771,-0.75202 3.45018,-1.01315 3.66701,-0.79632 0.32016,0.32015 3.42448,16.19877 3.42819,17.53511 0,0.54947 -0.3537,0.82815 -1.67808,1.31653 -4.31753,1.59214 -8.27907,2.60002 -13.52,3.43972 -4.46035,0.71463 -17.22627,0.90848 -21.28,0.32312 z m 170.12125,-0.0115 c -17.59559,-2.51341 -30.01914,-11.14583 -36.62803,-25.45076 -7.76743,-16.81256 -5.7913,-40.74012 4.64182,-56.20406 6.86378,-10.17349 16.5504,-16.61389 28.66083,-19.05591 5.13939,-1.03634 14.85146,-1.03163 19.67891,0.01 10.42029,2.24743 18.40666,7.55056 23.91002,15.87677 6.03987,9.13792 8.81609,20.10971 8.38541,33.13954 -0.10762,3.256 -0.31284,6.424 -0.45604,7.04 l -0.26038,1.12 -32.46688,0.16 -32.46691,0.16 0.0334,1.92 c 0.0448,2.57112 0.84138,5.53737 2.32032,8.64 3.35331,7.03477 9.95062,11.59462 19.54349,13.50785 3.67286,0.73252 13.58435,0.7018 19.38275,-0.0601 3.58109,-0.47053 8.93952,-1.67174 13.82992,-3.10028 0.74246,-0.21688 1.44627,-0.29795 1.56406,-0.18016 0.11779,0.11778 1.00298,3.91608 1.96711,8.44065 1.69036,7.93286 1.73161,8.24207 1.15593,8.66302 -1.77357,1.29687 -12.48131,4.0508 -19.67571,5.0604 -5.14704,0.72229 -18.94809,0.90942 -23.12006,0.31348 z m 25.0166,-62.6529 c 0.0538,-0.84042 -0.13417,-2.76643 -0.41782,-4.28004 -2.08768,-11.14125 -9.08432,-17.36392 -19.54883,-17.38638 -8.28589,-0.0178 -15.14432,4.50376 -19.18685,12.64932 -1.49737,3.01716 -3.28336,9.24862 -2.92118,10.19238 0.18048,0.47037 2.09651,0.5099 21.08768,0.43506 l 20.88915,-0.0823 0.0978,-1.52802 z m 59.81892,62.64241 c -10.55943,-1.99754 -17.13764,-7.65666 -20.20224,-17.37969 -1.94128,-6.15903 -1.91828,-5.77036 -2.10404,-35.5747 l -0.17049,-27.36001 -6.88,-0.16 -6.88,-0.16 v -9.28 -9.28 l 6.88,-0.16 6.88,-0.16 0.0842,-10.93976 c 0.0774,-10.06764 0.12848,-10.95302 0.64,-11.10604 3.3503,-1.00227 23.30397,-5.57405 23.49485,-5.38315 0.13965,0.13964 0.29149,6.36828 0.33744,13.84142 l 0.0835,13.58753 11.6,0.084 11.6,0.084 v 9.276 c 0,5.10181 -0.036,9.30745 -0.08,9.34587 -0.044,0.0384 -5.264,0.14642 -11.6,0.24 l -11.52,0.17014 v 23.84 c 0,26.35881 0.032,26.85876 1.96259,30.71787 1.2137,2.42604 2.6983,3.91524 4.90115,4.91629 2.02039,0.91813 7.68368,1.10358 11.83149,0.38743 2.13552,-0.36871 3.07798,-0.41906 3.23034,-0.17258 0.26048,0.42145 0.66198,17.78686 0.4255,18.40311 -0.21837,0.56907 -2.45552,1.28531 -6.03107,1.93088 -4.10227,0.74068 -15.18461,0.91539 -18.48323,0.29139 z m -534.73482,-1.45369 c -11.2795,-1.00088 -20.72981,-5.37943 -28.5598,-13.23245 -8.26125,-8.28554 -13.12875,-19.00736 -14.90343,-32.82826 -0.50213,-3.9105 -0.50213,-13.36949 0,-17.28 2.07901,-16.19098 8.99288,-29.17329 19.86012,-37.29174 3.14389,-2.34866 8.99445,-5.46203 12.50117,-6.65247 5.44351,-1.84794 8.50003,-2.26871 16.48,-2.26871 6.40218,0 7.78428,0.0922 10.62029,0.7085 20.88182,4.53789 34.92536,21.0327 38.00679,44.64081 1.03912,7.96109 0.49744,18.74077 -1.31314,26.13202 -1.55735,6.35752 -4.54172,13.45476 -7.39539,17.58726 -2.00073,2.89734 -1.77667,2.95314 -6.33771,-1.57853 -2.21268,-2.19843 -4.15566,-4.23613 -4.31774,-4.52824 -0.21683,-0.39078 0.20689,-1.57449 1.60365,-4.48 2.23489,-4.64898 3.54106,-8.8713 4.50004,-14.54689 0.93099,-5.50993 0.79467,-14.71697 -0.29735,-20.08315 -2.90463,-14.27324 -10.03979,-24.59498 -20.593,-29.78986 -3.58438,-1.76444 -6.98669,-2.67159 -11.38114,-3.03454 -14.73753,-1.21721 -26.78609,5.76766 -33.76997,19.57733 -4.12356,8.1538 -6.15539,18.92009 -5.36122,28.40814 2.13648,25.52452 17.96929,41.58021 39.13244,39.6833 3.57167,-0.32013 7.41963,-1.20002 9.74346,-2.22796 0.99067,-0.43822 1.63019,-0.55279 1.98991,-0.3565 0.29154,0.15909 2.24187,2.02633 4.33407,4.14944 3.05008,3.09514 3.73109,3.94805 3.43611,4.30347 -0.63013,0.75926 -6.95437,3.09551 -10.53914,3.89329 -5.7581,1.28144 -11.37144,1.63414 -17.43902,1.09574 z m 94.19609,0.006 c -7.11246,-0.6848 -12.89017,-2.25936 -18.20171,-4.96041 -7.92186,-4.02847 -13.00821,-9.76508 -15.95282,-17.99228 -1.94766,-5.44173 -3.23129,-12.958 -2.31233,-13.53981 0.24685,-0.15629 2.99454,-0.28637 6.10597,-0.28906 4.46649,-0.004 5.75282,0.0908 6.11176,0.44971 0.25004,0.25005 0.54729,1.34126 0.66055,2.42494 0.32396,3.09942 1.09185,5.67794 2.65695,8.92179 2.49167,5.16429 7.44925,9.48659 13.63653,11.88912 7.13072,2.76887 16.82983,3.10635 25.31127,0.88072 l 2.5142,-0.65975 4.19934,4.19932 c 4.76774,4.76776 4.73161,4.59228 1.19293,5.79153 -7.09519,2.40454 -18.1405,3.63346 -25.92264,2.88418 z m 66.0962,-0.49264 c -0.10684,-0.27839 -0.19424,-25.98239 -0.19424,-57.12 v -56.61383 h -18.65884 c -14.42247,0 -18.78282,-0.0908 -19.20496,-0.4 -0.49805,-0.36478 -0.53866,-1.28759 -0.46119,-10.48 l 0.085,-10.08 h 39.04 39.04 l 0.085,10.08 c 0.0775,9.19241 0.0369,10.11522 -0.46118,10.48 -0.39648,0.2904 -2.4145,0.4 -7.36496,0.4 h -6.81885 v 56.50104 c 0,38.33565 -0.10649,56.70004 -0.33126,57.12 -0.31856,0.59522 -0.796,0.61896 -12.44576,0.61896 -10.75165,0 -12.13635,-0.0569 -12.30874,-0.50617 z m 42.88144,0.004 c -0.29497,-0.76869 -0.22537,-96.55533 0.0705,-97.02142 0.20067,-0.31611 2.92861,-0.38564 12.5551,-0.32 l 12.29872,0.0839 v 48.8 48.8 l -12.36432,0.0837 c -11.06665,0.0749 -12.38489,0.0302 -12.56,-0.42617 z m 121.30141,0.29286 C 530.2325,252.36635 530.1348,220.3274 530.1348,181.28809 V 110.307 l 0.72,-0.17528 c 0.396,-0.0964 5.976,-0.13514 12.4,-0.0861 l 11.68,0.0892 0.0811,43.28 c 0.0522,27.8154 0.19251,43.28 0.39283,43.28 0.17146,0 1.34964,-1.548 2.61821,-3.44 2.48051,-3.69954 27.98381,-37.84341 28.56055,-38.23694 0.191,-0.13032 6.89926,-0.20232 14.90726,-0.16 10.90998,0.0576 14.56,0.17137 14.56,0.4536 0,0.20717 -7.89805,9.10968 -17.5512,19.78336 -12.40333,13.71456 -17.5081,19.57163 -17.40416,19.96903 0.0809,0.30928 9.16691,13.17481 20.1912,28.59008 11.02429,15.41526 20.04416,28.25712 20.04416,28.53745 0,0.46022 -1.46454,0.50162 -15.09053,0.42656 l -15.09049,-0.0831 -13.78951,-21.19631 c -7.58419,-11.65797 -13.93347,-21.1887 -14.10947,-21.17939 -0.176,0.009 -2.048,2.05236 -4.16,4.54013 l -3.84,4.52321 -0.16,16.65618 -0.16,16.65618 -12.18291,0.0838 c -6.70061,0.0461 -12.28061,-0.0139 -12.4,-0.13333 z m -203.0223,-9.79542 c -1.97712,-1.98275 -3.59479,-3.69177 -3.59479,-3.79781 0,-0.10605 0.93207,-0.73791 2.07127,-1.40414 2.69923,-1.57857 5.19395,-3.82396 6.73571,-6.0625 l 1.23747,-1.79678 3.93779,3.92832 c 2.16576,2.16058 3.93776,4.09345 3.93776,4.29528 0,0.66665 -5.92323,6.01994 -8.01376,7.24264 -1.12841,0.66 -2.20131,1.2 -2.38419,1.2 -0.18285,0 -1.95014,-1.62225 -3.92726,-3.605 z m -95.10408,-1.34426 c -2.01237,-2.01809 -3.59402,-3.71908 -3.51478,-3.77998 0.0792,-0.0609 1.09389,-0.77718 2.25478,-1.59174 1.16089,-0.81455 3.4045,-2.84808 4.98581,-4.51895 l 2.87511,-3.03794 3.89419,3.90355 c 2.1418,2.14697 3.89418,4.06239 3.89418,4.2565 0,1.03767 -8.95912,8.43783 -10.2154,8.43783 -0.28327,0 -2.16152,-1.65116 -4.17389,-3.66926 z m 106.72859,-10.39141 -4.45213,-4.46067 0.0742,-3.29933 c 0.16355,-7.27428 -2.65949,-11.53291 -10.04135,-15.14759 -4.40509,-2.15705 -8.66178,-3.40274 -20.8,-6.08701 -14.76241,-3.26457 -22.57726,-6.14381 -27.98893,-10.31199 -3.95548,-3.04659 -6.93877,-7.38241 -8.19663,-11.91273 -0.67617,-2.43532 -0.94316,-9.19167 -0.48021,-12.15249 2.44629,-15.64571 18.66719,-25.32278 41.14577,-24.54678 7.73581,0.26706 13.51908,1.63536 18.72,4.42909 9.83706,5.28405 15.54477,13.92929 16.96845,25.70142 0.31495,2.60404 0.29523,2.90928 -0.21174,3.28 -0.78221,0.57196 -11.2985,0.57963 -12.01981,0.009 -0.31776,-0.25147 -0.6969,-1.56616 -1.02109,-3.54055 -1.18806,-7.23542 -5.11609,-12.59896 -11.54363,-15.76236 -3.53882,-1.74168 -6.92854,-2.62801 -11.4498,-2.99385 -12.34534,-0.99893 -22.72219,3.11012 -26.29841,10.41371 -1.1578,2.36453 -1.5583,4.58738 -1.40484,7.79706 0.17012,3.55813 1.18157,5.74307 3.91802,8.46367 2.60625,2.59116 6.35448,4.63666 11.68188,6.37509 3.81013,1.24332 15.36556,4.02005 24.7437,5.94583 14.91094,3.06193 24.76393,11.46323 26.9855,23.00955 0.53296,2.77007 0.59005,8.11396 0.11529,10.79308 -0.70124,3.95748 -2.53772,8.45876 -3.45104,8.45876 -0.29756,0 -2.54451,-2.0073 -4.99318,-4.46067 z m 70.43689,-92.89932 c -0.49804,-0.36478 -0.53865,-1.28759 -0.46118,-10.48 l 0.085,-10.08 h 12.48 12.48 l 0.085,10.08 c 0.0775,9.19241 0.0369,10.11522 -0.46118,10.48 -0.41306,0.30253 -3.36227,0.4 -12.10381,0.4 -8.74153,0 -11.69075,-0.0975 -12.10381,-0.4 z" + id="path1191" + inkscape:connector-curvature="0" /> + <path + style="fill:#f58c28;stroke-width:0.31999999" + d="m 593.77723,313.53352 -1.4776,-0.1987 0.0376,-2.08 0.0376,-2.08 2.04205,-0.0177 c 1.86582,-0.0161 2.11792,-0.10261 2.92173,-1.00222 0.48384,-0.54151 1.12521,-1.72378 1.42531,-2.62728 l 0.54563,-1.64273 -4.50736,-11.83711 c -2.47904,-6.51041 -4.50736,-11.98579 -4.50736,-12.16751 0,-0.20908 1.02819,-0.29645 2.8,-0.23794 l 2.8,0.0925 3.04,8.63564 c 1.672,4.74961 3.184,8.63761 3.36,8.64 0.176,0.002 1.616,-3.73964 3.2,-8.31564 1.584,-4.576 2.99651,-8.5 3.13888,-8.72 0.29142,-0.45028 4.87482,-0.57561 5.14362,-0.14066 0.16259,0.26304 -8.99607,25.30736 -10.43725,28.54066 -1.87978,4.21728 -4.80979,5.79789 -9.56282,5.1587 z M 284.3748,296.22827 v -16.65345 h 2.4 2.4 v 1.12 c 0,1.34598 0.53449,1.45418 1.59693,0.32327 2.10838,-2.24427 7.74007,-2.74986 11.28909,-1.01349 3.34849,1.63826 5.38935,4.81222 6.06207,9.42776 0.64562,4.4296 -0.45959,8.96449 -2.90339,11.91321 -3.08681,3.72457 -9.81998,4.25639 -13.95242,1.10202 -0.99692,-0.76096 -1.51689,-0.99142 -1.61788,-0.71707 -0.0819,0.22236 -0.18607,2.7803 -0.2316,5.6843 l -0.0828,5.28 -2.48,0.0935 -2.48,0.0935 z m 14.59715,3.53435 c 2.56419,-1.16445 3.9717,-4.0117 3.94881,-7.98804 -0.0291,-5.04452 -2.37214,-8.29347 -6.21072,-8.6118 -4.63292,-0.3842 -7.34595,2.85363 -7.32153,8.73777 0.0165,3.96564 1.40227,6.62147 4.10629,7.86945 1.63824,0.7561 3.80235,0.75318 5.47715,-0.007 z m 14.20285,-3.5478 v -16.64 h 2.4 2.4 l 0.005,0.88 c 0.009,1.63896 0.41374,1.76819 1.7381,0.55513 1.68702,-1.54525 4.08439,-2.20583 7.22433,-1.99062 6.38713,0.43779 10.24006,5.28281 10.22886,12.86272 -0.0115,7.7221 -4.12787,12.65277 -10.56342,12.65277 -2.3912,0 -4.59408,-0.69323 -6.13315,-1.93005 -2.06977,-1.66332 -2.17962,-1.42141 -2.17962,4.8 v 5.45005 h -2.56 -2.56 z m 14.5097,3.72163 c 1.44634,-0.60432 3.2471,-2.80728 3.77248,-4.61503 0.53386,-1.837 0.53296,-5.56493 -0.003,-7.16134 -0.60787,-1.81504 -2.13536,-3.69822 -3.60982,-4.45044 -1.06292,-0.54226 -1.75197,-0.65619 -3.35239,-0.55428 -2.46841,0.15718 -4.02774,1.23947 -5.23827,3.6358 -0.70199,1.38964 -0.8,1.9953 -0.8,4.94366 0,2.82625 0.10926,3.564 0.68783,4.64419 0.85956,1.60482 2.22164,2.9965 3.47217,3.54765 1.25952,0.55512 3.75302,0.55993 5.0697,0.01 z m -93.9041,4.13454 c -4.91525,-1.35549 -8.30513,-5.18953 -8.6567,-9.79095 l -0.1089,-1.42522 2.51034,-0.094 c 2.7458,-0.10283 3.40966,0.17481 3.40966,1.42594 0,0.93781 0.98699,2.94468 1.81765,3.69584 2.3374,2.11374 7.80214,2.72616 10.80572,1.21097 2.15629,-1.08776 2.89663,-2.18073 2.89663,-4.27628 0,-3.25608 -0.91648,-3.8683 -8.96,-5.98532 -5.63463,-1.48301 -7.15276,-2.10977 -8.74804,-3.61164 -1.79163,-1.68673 -2.41843,-3.2333 -2.41771,-5.9655 6.4e-4,-2.84107 0.92641,-4.99187 2.8906,-6.71646 4.80181,-4.21604 14.21164,-4.12709 18.97842,0.1794 1.70844,1.54348 2.94813,3.96193 3.00957,5.87121 l 0.0472,1.46585 h -2.70481 -2.70482 l -0.5608,-1.56748 c -0.76869,-2.14856 -1.97945,-3.31356 -4.07757,-3.9235 -4.64044,-1.34902 -9.19594,0.68176 -9.10736,4.05993 0.0689,2.62813 1.43416,3.65192 6.79013,5.09191 8.40125,2.25873 9.02426,2.50607 10.81335,4.29301 1.2877,1.28614 1.76865,2.06098 2.19928,3.54312 1.66932,5.74554 -1.57288,10.82599 -8.0074,12.54737 -2.00353,0.536 -8.13049,0.51892 -10.1144,-0.0282 z m 28.9944,0.16664 c -2.42293,-0.58473 -4.39112,-2.34287 -5.19282,-4.63863 -0.49164,-1.40788 -0.56718,-2.83874 -0.56718,-10.74418 v -9.12 h 2.56 2.56 l 0.16,8.96 c 0.14659,8.20876 0.21244,9.03744 0.78541,9.88365 1.8141,2.67922 7.24471,2.21675 8.96727,-0.76365 0.59244,-1.02505 0.66089,-1.83896 0.80732,-9.6 l 0.16,-8.48 h 2.56 2.56 v 12 12 h -2.4 -2.4 l -0.0993,-1.2 c -0.11787,-1.42412 -0.60709,-1.52796 -1.68491,-0.35765 -1.2946,1.40569 -3.70662,2.35555 -5.89578,2.32176 -1.056,-0.0163 -2.352,-0.13388 -2.88,-0.2613 z m 86.53738,-0.1201 c -4.59661,-1.30308 -7.4552,-4.7493 -8.32509,-10.03644 -0.73622,-4.47462 0.77293,-9.56135 3.59242,-12.10859 0.72515,-0.65515 2.12777,-1.56997 3.11689,-2.03293 1.5993,-0.74857 2.1881,-0.84192 5.3184,-0.84325 3.21197,-10e-4 3.6962,0.0799 5.53328,0.92815 2.5161,1.16185 4.85508,3.62902 5.8697,6.19141 0.6087,1.5373 0.72813,2.44255 0.72813,5.51894 0,4.50873 -0.65795,6.48436 -3.02042,9.06927 -2.22646,2.43611 -4.64819,3.47189 -8.45789,3.6175 -1.74451,0.0667 -3.47337,-0.054 -4.35542,-0.30406 z m 7.43856,-4.88039 c 4.70496,-3.30679 4.29405,-12.8076 -0.66627,-15.40408 -1.61824,-0.84708 -3.96109,-0.97651 -5.55994,-0.30716 -1.54205,0.64556 -3.32121,2.80706 -3.89168,4.72793 -1.40333,4.72556 0.24099,9.8257 3.74397,11.61243 1.67114,0.8524 4.68992,0.55444 6.37392,-0.62912 z m 105.10374,4.7944 c -5.15117,-1.64937 -7.87209,-5.84434 -7.87209,-12.13672 0,-5.85722 2.25299,-9.88286 6.69782,-11.96765 1.57536,-0.73891 2.16979,-0.83219 5.29459,-0.83085 3.11674,0.001 3.72163,0.0963 5.28,0.82885 0.968,0.45504 2.2168,1.21374 2.77511,1.68601 1.2014,1.01621 2.66489,3.79861 2.66489,5.06646 v 0.89718 h -2.53517 -2.5352 l -0.35222,-1.06722 c -1.41709,-4.2939 -8.14576,-4.63051 -10.64998,-0.53278 -1.68519,2.75753 -1.93108,7.39177 -0.557,10.49811 0.84448,1.90908 1.45959,2.57912 3.02957,3.30005 3.42874,1.57448 6.96179,-0.005 8.14039,-3.63816 l 0.38924,-1.2 h 2.57079 2.57081 l -0.22464,1.2 c -0.60828,3.24933 -2.9294,6.21794 -5.88336,7.52461 -1.9822,0.87683 -6.61561,1.07267 -8.80355,0.37211 z m 52.40279,0.21758 c -3.63968,-0.93444 -6.7793,-3.8961 -7.77876,-7.33783 -0.90035,-3.10046 -1.05462,-4.8092 -0.65833,-7.29299 0.51571,-3.2322 1.68477,-5.56716 3.7928,-7.57544 2.40173,-2.28805 4.16656,-2.94811 7.88182,-2.94784 2.44599,1.8e-4 3.15235,0.12788 4.68736,0.84735 3.9081,1.83181 6.36605,5.70188 6.61331,10.41279 l 0.13904,2.64939 -8.91984,0.0851 -8.91987,0.0851 0.0575,1.32857 c 0.0813,1.87862 1.16487,3.79846 2.72682,4.83107 1.16486,0.7701 1.64208,0.88036 3.8104,0.88036 2.84048,0 3.66704,-0.42539 5.18646,-2.66922 l 0.90115,-1.33078 h 2.0689 c 2.3616,0 2.64259,0.28082 2.0568,2.05573 -0.60269,1.82614 -2.92096,4.12727 -5.19184,5.15339 -1.6192,0.73165 -2.55171,0.92779 -4.73616,0.99616 -1.496,0.0468 -3.16889,-0.0301 -3.71753,-0.17098 z m 9.15753,-15.56705 c 0,-1.78018 -2.07402,-4.54157 -3.94083,-5.2469 -2.32438,-0.87821 -5.5817,0.0246 -7.0167,1.94481 -0.91626,1.22605 -1.66573,3.30416 -1.36634,3.78858 0.12554,0.20309 2.4897,0.32626 6.26275,0.32626 h 6.06112 z m 46.08,15.33974 c -4.83443,-1.29346 -8.33507,-5.25192 -8.44022,-9.5441 l -0.0398,-1.62289 2.64506,-0.093 c 1.94995,-0.0686 2.67616,0.0155 2.76345,0.32 0.0651,0.22717 0.2873,1.03398 0.49376,1.79292 0.20643,0.75894 0.88003,1.93853 1.49687,2.6213 1.57161,1.73958 3.48672,2.4034 6.84086,2.37119 3.07027,-0.0295 4.44781,-0.50251 5.89955,-2.02585 0.76743,-0.80527 0.96435,-1.32838 1.07479,-2.85545 0.12476,-1.72468 0.0588,-1.95664 -0.8513,-2.99316 -1.07142,-1.22028 -2.13232,-1.62087 -9.16304,-3.45986 -2.112,-0.55242 -4.42333,-1.26119 -5.13626,-1.57504 -3.37264,-1.48471 -5.09315,-4.35913 -4.88262,-8.15728 0.27731,-5.00287 3.21174,-7.87888 9.25328,-9.06913 2.19402,-0.43225 3.02243,-0.45451 5.1847,-0.13936 3.1,0.45183 6.06628,1.76946 7.73092,3.43409 1.58256,1.58258 2.80051,4.23795 2.66979,5.82065 l -0.0998,1.20801 -2.07011,0.0971 c -2.89991,0.136 -3.41914,-0.0478 -3.65466,-1.29411 -0.31145,-1.64814 -1.33552,-3.0363 -2.82269,-3.82624 -1.84848,-0.98187 -6.17948,-1.04681 -8.05033,-0.1207 -3.03197,1.5009 -3.27837,5.42575 -0.44995,7.16732 0.57625,0.35482 3.56774,1.32078 6.64774,2.14656 7.64918,2.05084 9.15712,2.89402 10.6951,5.98041 0.67076,1.346 0.82359,2.10702 0.81786,4.07249 -0.0144,4.94493 -2.90163,8.408 -8.14019,9.76363 -2.42275,0.62695 -8.03594,0.61646 -10.41277,-0.0195 z m 53.28,0.0632 c -2.09395,-0.51748 -3.29536,-1.17681 -4.52416,-2.48286 -1.26406,-1.3435 -1.94378,-2.68395 -2.08534,-4.11244 l -0.1105,-1.11486 2.49062,-0.0937 2.49063,-0.0937 0.44144,1.05365 c 0.88909,2.12215 2.63222,3.13366 5.40025,3.13366 3.22781,0 5.33706,-1.16856 5.33706,-2.95682 0,-2.16471 -1.24621,-2.91983 -6.91686,-4.19122 -3.61837,-0.81125 -6.24381,-1.89654 -7.23095,-2.98909 -0.89744,-0.99331 -1.53254,-2.86188 -1.52691,-4.4926 0.015,-4.39845 4.4504,-7.10096 11.03472,-6.72368 4.45203,0.25511 6.88413,1.58993 8.34778,4.58156 1.18592,2.4239 0.99257,2.69185 -1.94244,2.69185 -2.35312,0 -2.43001,-0.0251 -3.01318,-0.98406 -0.91251,-1.5005 -1.82899,-1.97258 -4.15216,-2.13881 -3.59392,-0.25714 -5.51773,1.04114 -4.76074,3.21272 0.4248,1.21852 1.90765,1.89545 6.44477,2.94207 2.09219,0.48264 4.28285,1.07758 4.86807,1.32211 5.27859,2.20554 5.70643,8.99416 0.75801,12.02745 -2.8167,1.72659 -7.64093,2.32533 -11.35011,1.40868 z m 41.92,0.0216 c -3.59232,-1.19654 -6.0089,-3.38841 -7.23779,-6.56472 -0.85504,-2.20999 -1.17799,-7.01304 -0.62042,-9.2273 0.95376,-3.78779 3.52048,-7.06799 6.66871,-8.5224 2.23584,-1.03292 7.27731,-1.00267 9.41875,0.0565 3.72508,1.84248 6.09888,5.26946 6.74192,9.73314 0.1871,1.29869 0.24764,2.60239 0.13456,2.89712 -0.18528,0.48278 -1.0586,0.53587 -8.81651,0.53587 -6.61677,0 -8.68976,0.0951 -8.95162,0.41059 -0.46029,0.55461 0.0892,2.96518 0.97062,4.25826 1.14884,1.68536 2.65056,2.49055 4.9138,2.63466 2.56982,0.16363 4.57222,-0.70655 5.62902,-2.44622 0.96329,-1.58573 1.08883,-1.64676 3.39901,-1.6524 2.45036,-0.006 2.64918,0.30691 1.56038,2.45556 -0.97843,1.93085 -3.25469,4.07378 -5.26013,4.95199 -1.91648,0.83926 -6.66972,1.10573 -8.5503,0.47934 z m 9.49888,-15.73179 c -0.16736,-1.5889 -1.55216,-3.59048 -3.11962,-4.50908 -3.37248,-1.9764 -7.9558,-0.002 -9.05872,3.90161 -0.4943,1.74957 -0.49868,1.74839 6.14839,1.65428 l 6.13107,-0.0868 z M 391.982,303.84314 c -1.62243,-0.36356 -3.12141,-1.75934 -3.40336,-3.16909 -0.11209,-0.56058 -0.20384,-4.42971 -0.20384,-8.59807 0,-8.93303 0.0321,-8.82692 -2.58118,-8.53987 -0.95635,0.10505 -2.55773,0.25367 -3.55863,0.33027 -2.21536,0.16953 -3.82976,0.89539 -4.95241,2.22666 -1.69895,2.01473 -1.83511,2.71937 -2.01763,10.44178 l -0.17015,7.2 h -2.4 -2.4 l -0.0839,-12.0941 -0.0838,-12.0941 2.32384,0.0941 2.32387,0.0941 0.0967,1.68 c 0.0532,0.924 0.20909,1.68 0.34643,1.68 0.13734,0 0.70298,-0.56402 1.25696,-1.25338 0.55818,-0.69459 1.78934,-1.63603 2.76157,-2.11169 1.46153,-0.71506 2.02339,-0.82632 3.36633,-0.66663 0.8866,0.10543 2.34592,0.27853 3.24298,0.38467 1.0464,0.12381 1.7633,0.0613 2,-0.17451 0.20614,-0.20529 0.43962,-1.80879 0.52899,-3.63298 l 0.16,-3.26549 h 2.4 2.4 l 0.0924,3.18208 c 0.0508,1.75014 0.24842,3.37014 0.43917,3.6 0.21907,0.26396 1.09872,0.41793 2.38765,0.41793 h 2.04083 v 1.92 1.92 h -2.04083 c -1.37072,0 -2.16438,0.14891 -2.41718,0.45352 -0.27063,0.32608 -0.34909,2.48133 -0.2792,7.66922 0.11241,8.34449 0.065,8.20905 2.96096,8.44921 l 1.77625,0.1473 v 1.8385 1.83851 l -1.2,0.19834 c -1.59875,0.26426 -3.46182,0.20367 -5.1128,-0.16628 z m 146.41066,-0.0568 c -3.36948,-0.94999 -3.55277,-1.52867 -3.76637,-11.89152 l -0.17149,-8.32 -1.84,-0.096 -1.84,-0.096 v -1.88806 -1.88807 l 1.84,-0.096 1.84,-0.096 0.16,-3.52001 0.16,-3.52 h 2.56 2.56 l 0.16,3.52 0.16,3.52001 2.32,0.094 2.32,0.094 v 1.89197 1.89196 l -2.32,0.094 -2.32,0.094 -0.0859,7.44862 -0.0859,7.44863 0.79136,0.79137 c 0.6327,0.6327 1.1151,0.79138 2.40592,0.79138 h 1.61456 v 1.74111 c 0,0.95761 -0.16362,1.84225 -0.36362,1.96585 -0.69529,0.42971 -4.60566,0.44546 -6.09852,0.0245 z m 109.12969,0.14644 c -1.58342,-0.33528 -2.70006,-1.11507 -3.38089,-2.36098 -0.48864,-0.89419 -0.58871,-2.20472 -0.72666,-9.51698 l -0.16,-8.48 -1.84,-0.096 -1.84,-0.096 v -1.88806 -1.88807 l 1.84,-0.096 1.84,-0.096 0.16,-3.52001 0.16,-3.52 h 2.56 2.56 l 0.16,3.52 0.16,3.52001 2.24,0.16 2.24,0.16 v 1.76 1.76 l -2.24,0.16 -2.24,0.16 -0.0857,7.57226 -0.0857,7.57228 0.8489,0.66772 c 0.59642,0.46916 1.31187,0.66774 2.40573,0.66774 h 1.55683 v 1.74111 c 0,0.95761 -0.14378,1.82997 -0.31949,1.93858 -0.52883,0.32683 -4.55693,0.46423 -5.81296,0.19827 z m -223.40233,-0.23941 c -0.12387,-0.12387 -0.22522,-6.45672 -0.22522,-14.073 0,-10.72682 -0.0901,-13.90613 -0.4,-14.10667 -0.22,-0.14239 -2.632,-0.33089 -5.36,-0.41889 l -4.96,-0.16 v -2.24 -2.24 l 13.52,-0.0835 13.52,-0.0835 v 2.40347 2.40347 l -4.88,0.005 c -2.684,0.003 -5.05846,0.11825 -5.27657,0.25678 -0.30352,0.19276 -0.4162,3.5528 -0.48,14.3151 l -0.0834,14.06323 -2.57478,0.0919 c -1.41613,0.0505 -2.67613,-0.009 -2.8,-0.13333 z m 19.76585,-0.18641 c -0.0876,-0.22822 -0.12137,-5.67031 -0.0751,-12.09354 l 0.0841,-11.6786 h 2.56 2.56 v 12 12 l -2.48483,0.0935 c -1.81024,0.0682 -2.5281,-0.0191 -2.6441,-0.3214 z m 37.76084,0.001 c -0.0871,-0.22745 -0.12093,-7.75755 -0.0751,-16.73355 l 0.0832,-16.32 h 2.56 2.56 l 0.0849,9.2 c 0.0467,5.06 0.19257,9.2 0.32416,9.2 0.13155,0 2.32349,-2.088 4.87094,-4.64 l 4.63171,-4.64 h 2.96416 c 1.63028,0 2.96413,0.10495 2.96413,0.23323 0,0.12827 -1.97603,2.11886 -4.39117,4.42354 l -4.3912,4.19031 4.8712,7.40659 c 2.67914,4.07362 4.87117,7.55503 4.87117,7.73646 0,0.5179 -5.61875,0.42685 -6.13715,-0.0994 -0.23258,-0.23613 -1.93238,-2.82813 -3.77738,-5.76 -1.84499,-2.93175 -3.507,-5.33055 -3.69337,-5.33055 -0.18637,0 -0.94042,0.61294 -1.67565,1.36209 l -1.3368,1.3621 -0.0898,4.3179 -0.0898,4.31791 -2.48483,0.0935 c -1.80624,0.068 -2.52813,-0.0194 -2.64326,-0.32 z m 202.6341,0.18581 c -0.12432,-0.12419 -0.22601,-5.6019 -0.22601,-12.17257 v -11.94666 h 2.4 2.4 v 1.26111 c 0,0.69361 0.12195,1.33649 0.27104,1.42862 0.14905,0.0921 0.68905,-0.27256 1.2,-0.81042 1.45369,-1.53032 3.21901,-2.28285 5.74182,-2.44768 2.7553,-0.18001 5.11488,0.69196 6.53517,2.41503 l 0.91958,1.1156 1.553,-1.3095 c 1.8974,-1.59993 3.75936,-2.29276 6.16153,-2.29276 3.98096,0 6.88989,1.79942 7.68551,4.75417 0.21616,0.80266 0.31084,4.72698 0.25721,10.65813 l -0.0849,9.3877 h -2.4 -2.4 l -0.17255,-8.8 c -0.10364,-5.28776 -0.31251,-9.1193 -0.52326,-9.6 -0.65325,-1.48995 -1.6008,-2.04338 -3.7223,-2.17403 -1.67303,-0.10302 -2.15645,-0.005 -3.10189,0.63021 -2.2032,1.4798 -2.38039,2.28439 -2.56,11.62382 l -0.16,8.32 h -2.4 -2.4 l -0.16755,-8.8 c -0.17101,-8.98018 -0.29444,-9.87358 -1.51604,-10.97368 -1.35955,-1.22435 -4.50211,-1.08921 -6.10876,0.26269 -1.96474,1.65322 -2.11181,2.38291 -2.28765,11.35099 l -0.16,8.16 -2.25399,0.0927 c -1.23968,0.051 -2.35568,-0.009 -2.48,-0.13333 z M 443.87266,274.67241 c -0.0948,-0.24716 -0.12864,-1.29726 -0.0751,-2.33355 l 0.0973,-1.88417 h 2.56 2.56 v 2.24 2.24 l -2.48483,0.0935 c -1.9031,0.0717 -2.52522,-0.0116 -2.65731,-0.35583 z M 88.054807,255.97444 c -2.177991,-0.38324 -3.197479,-2.16594 -2.977539,-5.20658 0.138057,-1.9086 0.196326,-2.01839 2.006006,-3.77938 2.289894,-2.22828 2.729654,-3.22452 2.738281,-6.20339 0.0086,-2.96156 0.908119,-5.578 3.292896,-9.57785 0.981271,-1.64584 1.928007,-3.64043 2.103853,-4.43243 0.493034,-2.22056 1.160426,-15.16012 1.122333,-21.76 -0.01942,-3.36229 -0.32231,-8.82334 -0.701091,-12.64 -1.014231,-10.21954 -1.068685,-11.3434 -0.706912,-14.58988 0.528393,-4.74173 1.315353,-6.69408 3.730067,-9.2538 1.129395,-1.19722 4.244639,-3.86981 6.922779,-5.93908 15.45973,-11.94507 19.79171,-16.26622 23.07495,-23.01724 3.64646,-7.49787 5.83215,-18.39959 6.74411,-33.63795 l 0.19378,-3.23795 -1.62388,-1.94342 c -3.69374,-4.420559 -5.25302,-8.253695 -5.23161,-12.860681 0.0134,-2.880848 0.69115,-5.999015 1.75882,-8.091831 0.66964,-1.312592 0.60574,-2.148169 -0.16427,-2.148169 -1.01514,0 -6.27975,2.972758 -8.68667,4.905088 -5.40677,4.340662 -11.96807,12.077744 -16.78041,19.787433 -2.76099,4.42329 -6.732274,12.19813 -10.041737,19.65936 -5.462016,12.31419 -6.46511,15.71114 -10.29566,34.86599 -8.817674,44.09318 -14.405837,62.94634 -21.383267,72.14213 -2.567408,3.38368 -7.91928,8.6124 -11.094829,10.83953 -9.310822,6.53003 -20.200464,9.0938 -30.077017,7.08108 -3.970467,-0.80913 -8.875253,-2.51124 -12.6138293,-4.37739 -2.983913,-1.48945 -8.1891529,-4.80085 -8.1891529,-5.20966 0,-0.50281 2.7854655,-0.28142 7.6192908,0.60559 7.5601464,1.3873 11.1452434,1.72632 16.2095934,1.53284 9.590587,-0.3664 16.012923,-3.1682 22.656869,-9.88424 4.029712,-4.07345 6.632742,-7.60835 8.55358,-11.61575 2.889492,-6.02826 3.669175,-9.62197 6.250999,-28.812 0.805088,-5.984 1.877568,-13.328 2.383289,-16.32 0.505722,-2.992 1.222381,-8.248 1.592576,-11.68 2.012356,-18.6561 2.52992,-22.25358 4.189475,-29.12 1.033754,-4.27717 6.720992,-22.56147 9.283133,-29.84499 6.336394,-18.012771 13.113907,-31.244688 21.756107,-42.475012 3.02683,-3.933286 11.05787,-11.979789 15.34509,-15.374618 13.64463,-10.804506 30.88712,-18.255206 49.92,-21.571068 19.72576,-3.436577 41.60424,-2.501568 56.78463,2.426775 6.21675,2.018278 8.37477,3.345944 23.33929,14.35891 7.31514,5.383498 11.74094,7.316417 18.4081,8.03953 2.77238,0.300691 4.528,0.302611 7.84916,0.0086 5.23104,-0.463117 8.46596,-1.259638 11.41982,-2.811846 3.88118,-2.039501 5.45495,-3.92066 9.20913,-11.00786 1.26198,-2.382379 2.87493,-5.098478 3.58435,-6.035776 l 1.28984,-1.704178 0.0891,-7.084225 c 0.0951,-7.562733 0.3342,-9.0781415 1.98337,-12.56994 0.65023,-1.3767518 2.16542,-3.0457153 4.1859,-4.6107381 0.53954,-0.4179149 2.47697,-0.5289502 2.50471,-0.1435469 0.0127,0.176 0.33966,0.824 0.72663,1.4400001 0.38698,0.616 0.70413,1.282368 0.70479,1.4808176 6.4e-4,0.1984499 0.21275,0.5363955 0.47132,0.7509901 0.37869,0.3142855 0.63604,0.2596675 1.32316,-0.2808176 2.34039,-1.840955 4.17337,0.2986058 4.96876,5.7998558 0.53603,3.70732 -0.0872,6.939939 -2.13473,11.07223 -0.81295,1.640691 -1.41158,3.156386 -1.33029,3.368211 0.0813,0.211825 1.06278,0.574125 2.1811,0.805111 4.2524,0.878316 8.55435,3.316796 10.89618,6.176298 2.70976,3.30871 5.55699,8.402003 7.47731,13.375741 1.05405,2.730093 2.55136,4.64927 5.04384,6.464877 1.54544,1.125753 6.31427,6.707161 7.16483,8.385686 0.76765,1.514868 0.79133,1.706167 0.41879,3.383328 -0.61863,2.7848 -3.22519,4.817674 -6.17732,4.817674 -1.08288,0 -1.33507,0.472915 -0.72028,1.35064 0.67222,0.959738 0.62768,1.757719 -0.12045,2.158103 -1.53274,0.82031 -3.86378,-0.107053 -7.99309,-3.179943 -1.48061,-1.101833 -3.13296,-2.129789 -3.67187,-2.284342 -0.53888,-0.154554 -2.56746,-0.430032 -4.50794,-0.612173 -4.59623,-0.431421 -8.29347,-1.159971 -9.8082,-1.932727 -2.05452,-1.04814 -2.30568,-0.910092 -3.96701,2.180442 -6.376,11.861133 -13.87227,20.550743 -22.97244,26.629463 -3.00693,2.008567 -7.64744,4.246269 -10.36411,4.997696 -1.94899,0.539089 -2.10394,0.669402 -8.87124,7.460752 -3.78819,3.80165 -8.27418,8.64009 -9.96886,10.75209 -1.69469,2.112 -3.99214,4.97489 -5.10544,6.36197 -1.29688,1.61581 -2.27305,3.2255 -2.71681,4.48 -2.04911,5.79272 -1.96672,5.72907 -7.77552,6.0077 -3.79124,0.18186 -5.00055,0.37196 -7.3448,1.15458 -2.4445,0.8161 -3.03176,0.90153 -4.5551,0.66265 -3.02012,-0.4736 -6.75157,-1.81147 -7.80998,-2.80017 -1.65572,-1.54668 -1.20483,-3.22673 0.86599,-3.22673 0.59763,0 1.51536,-0.30531 2.03941,-0.67846 0.7725,-0.55007 1.26631,-0.64812 2.6094,-0.51808 1.30495,0.12634 1.91245,0.0156 2.86199,-0.52154 l 1.2054,-0.68192 1.59477,0.88 c 0.87712,0.484 1.64688,0.88 1.71059,0.88 0.0637,0 0.67563,-0.44726 1.35983,-0.99391 1.14471,-0.91458 1.38948,-0.98099 3.0666,-0.83192 l 1.8226,0.16198 2.86624,-2.69672 c 3.13663,-2.95112 4.33413,-4.88611 6.59193,-10.65161 1.38453,-3.5355 2.85604,-8.85573 2.57512,-9.31027 -0.10794,-0.17465 -0.69935,-0.31755 -1.31425,-0.31755 -0.97691,0 -1.47448,0.35334 -3.94294,2.8 -3.03821,3.01138 -4.03005,4.65647 -6.11185,10.13725 -1.2033,3.16795 -1.99636,4.13309 -5.09832,6.20449 -1.97977,1.32205 -2.04141,1.33899 -5.08759,1.39862 -4.24665,0.0831 -10.37003,0.23858 -12.71796,0.32284 -2.23449,0.0802 -3.29508,-0.43303 -4.29965,-2.08059 -0.65111,-1.06784 -0.81045,-2.63597 -0.34283,-3.37386 0.31749,-0.50098 1.31322,-0.5787 2.97322,-0.23205 1.11899,0.23367 1.21432,0.18543 1.95647,-0.99023 1.42176,-2.25221 2.10995,-2.41607 5.75163,-1.36947 l 1.52442,0.4381 0.97888,-1.18755 c 0.85104,-1.03246 1.15766,-1.18755 2.34783,-1.18755 0.75293,0 1.83386,0.16207 2.40209,0.36015 0.97277,0.33911 1.10901,0.2877 2.33173,-0.88 1.68196,-1.60627 5.69063,-7.70898 5.69063,-8.66328 v -0.73687 h -5.90256 c -9.36697,0 -18.52788,-0.96566 -26.39785,-2.78263 -5.81173,-1.34178 -5.32947,-1.52989 -6.93525,2.70509 -1.74281,4.59637 -3.67296,8.66529 -6.19879,13.06759 -4.21343,7.34365 -8.03944,12.15849 -13.4805,16.96451 -7.78263,6.87429 -13.18195,10.80525 -26.87975,19.5697 -15.55899,9.95532 -23.56106,16.19034 -31.86583,24.82905 -5.90092,6.1382 -9.77595,11.68255 -11.12339,15.9152 -1.93208,6.06914 -3.62305,19.03646 -4.81596,36.93149 -0.63274,9.49183 -0.92324,11.4095 -2.09212,13.81078 -2.21632,4.55307 -11.898285,11.06402 -15.507993,10.42885 z M 486.2948,253.9648 c -9.0232,-1.24334 -17.08528,-4.29181 -23.42832,-8.85884 -3.16329,-2.27759 -8.24112,-7.50651 -10.30627,-10.61294 -3.36064,-5.0551 -5.75549,-10.97867 -7.276,-17.99673 -0.6352,-2.93188 -0.72138,-4.25985 -0.7345,-11.32148 -0.0163,-8.83886 0.39332,-11.94123 2.39885,-18.16173 1.34717,-4.17837 4.72266,-10.79697 7.14317,-14.0061 2.71622,-3.60125 8.05802,-8.70918 11.50979,-11.00591 11.08867,-7.37813 26.264,-10.57633 41.0769,-8.65693 5.62333,0.72866 14.24061,2.96689 15.22937,3.95566 0.25104,0.25105 -3.2518,15.86298 -3.93376,17.53236 l -0.28486,0.69734 -2.97718,-1.06194 c -9.45114,-3.37115 -20.95322,-3.33287 -28.513,0.0949 -10.1872,4.6191 -16.10963,14.14188 -16.76656,26.95933 -0.56752,11.07281 3.24109,21.04075 10.27431,26.88993 2.84944,2.36973 7.80067,4.85386 11.54806,5.79386 2.49226,0.62516 3.67703,0.71983 8.8,0.70317 6.56477,-0.0213 10.0584,-0.56764 15.48307,-2.421 2.01056,-0.68693 2.90887,-0.86486 3.06781,-0.60768 0.37847,0.61239 3.30048,16.91513 3.11731,17.39245 -0.36429,0.94928 -6.72784,2.83486 -13.82819,4.09739 -3.06656,0.54528 -5.4191,0.70282 -11.68,0.78216 -4.312,0.0546 -8.776,-0.0296 -9.92,-0.18726 z m 169.28,-0.15158 c -21.2639,-2.90731 -35.56054,-15.95202 -39.65693,-36.18425 -2.71075,-13.3887 -0.84384,-27.99853 5.08451,-39.78944 5.52602,-10.9907 14.86349,-19.15565 25.94404,-22.68614 5.53865,-1.76474 8.13977,-2.13031 15.18838,-2.13465 6.74707,-0.004 8.69616,0.23033 13.50953,1.62519 15.76919,4.56974 26.00365,18.51468 28.27466,38.52563 0.37798,3.33043 0.2343,14.526 -0.2105,16.40525 l -0.20832,0.88 -32.20268,0.005 c -18.12823,0.003 -32.39824,0.12872 -32.65015,0.28821 -0.57884,0.36651 -0.29411,3.41581 0.6305,6.75244 2.91418,10.51614 11.9519,16.99486 25.46141,18.25204 7.17133,0.66736 18.23315,-0.50277 26.13878,-2.76498 2.31949,-0.66373 4.2176,-1.05209 4.3663,-0.89338 0.14468,0.15442 1.01629,3.8611 1.93693,8.23706 1.37984,6.55867 1.59658,8.00522 1.23373,8.2349 -0.24211,0.15325 -1.95219,0.78206 -3.80019,1.39737 -5.76551,1.91967 -12.64535,3.31305 -19.79392,4.00887 -4.51747,0.43973 -15.53258,0.34871 -19.24608,-0.15902 z m 25.40925,-63.05808 c -0.0723,-6.06918 -2.70192,-12.45551 -6.71709,-16.31345 -3.18419,-3.05948 -6.91034,-4.54422 -12.13216,-4.83423 -9.96813,-0.55363 -18.18349,5.27699 -21.94061,15.57177 -1.11145,3.04545 -2.04201,7.16237 -1.77574,7.8562 0.15347,0.39997 3.1031,0.45261 21.3872,0.38167 l 21.20915,-0.0823 -0.0307,-2.57967 z m 59.50006,63.06624 c -3.05546,-0.55443 -5.21974,-1.28867 -8.10931,-2.75109 -6.97402,-3.52955 -10.74259,-9.04293 -12.88839,-18.85548 -0.63884,-2.92133 -0.66886,-4.10172 -0.76896,-30.24 -0.0573,-14.96 -0.17785,-27.52114 -0.2679,-27.91365 -0.16227,-0.70723 -0.22486,-0.71442 -6.95926,-0.8 l -6.79549,-0.0863 -0.085,-9.04 -0.085,-9.04 h 6.70608 c 5.01347,0 6.77145,-0.10096 6.96499,-0.4 0.14237,-0.22 0.33088,-5.21988 0.41888,-11.11086 l 0.16,-10.71085 11.51011,-2.78471 c 6.33056,-1.53158 11.62256,-2.7152 11.76,-2.63025 0.13744,0.0849 0.24989,6.16514 0.24989,13.51156 0,9.9622 0.0976,13.45471 0.384,13.74111 0.28435,0.28437 3.35645,0.384 11.84,0.384 h 11.456 v 9.11606 9.11606 l -11.76,0.0839 -11.76,0.0839 0.003,24.32 c 0.003,22.29121 0.0499,24.50686 0.57357,26.56 1.4504,5.68664 3.79395,8.50961 7.99225,9.6273 2.1728,0.57846 6.68679,0.57121 10.30787,-0.0165 1.5818,-0.25675 2.9674,-0.3642 3.07911,-0.23879 0.11171,0.12542 0.29206,4.22168 0.40077,9.10279 l 0.19763,8.87476 -0.71674,0.46162 c -2.67517,1.72292 -17.65459,2.75193 -23.80742,1.63543 z m -535.06882,-1.469 c -16.41063,-1.58681 -29.98608,-11.16533 -37.17039,-26.22654 -8.03388,-16.84227 -8.03388,-39.45979 0,-56.30205 6.98905,-14.65187 20.15477,-24.28447 35.8871,-26.25655 1.93532,-0.2426 5.33247,-0.3334 8.96,-0.23949 8.13745,0.21066 13.61789,1.48233 19.85281,4.60662 14.69215,7.36215 23.94903,21.32356 26.62602,40.15787 0.62803,4.41859 0.62803,15.34656 0,19.76515 -0.96404,6.78265 -2.76391,12.8764 -5.44573,18.43742 -1.69064,3.50571 -4.18763,7.53245 -4.79681,7.73551 -0.17609,0.0587 -2.23891,-1.81599 -4.58404,-4.16596 l -4.26389,-4.27268 1.58753,-3.16843 c 3.49141,-6.96825 5.1301,-13.6956 5.40967,-22.20844 0.21363,-6.50483 -0.15823,-10.44903 -1.50143,-15.92523 -3.19888,-13.04174 -10.22143,-22.54631 -20.27018,-27.43439 -5.16632,-2.51309 -10.9932,-3.49173 -17.74625,-2.98052 -11.70444,0.88602 -21.65242,7.96798 -27.59888,19.64762 -4.09771,8.04844 -6.21725,19.19914 -5.42349,28.53252 1.46556,17.23269 8.94873,30.34013 20.88335,36.57901 4.86882,2.54521 9.31412,3.5678 15.46708,3.55807 5.39052,-0.009 8.79766,-0.68689 13.97834,-2.78306 0.44355,-0.17947 1.4274,0.6144 4.4,3.55039 2.10579,2.07985 3.8287,4.02124 3.8287,4.31421 0,0.35972 -0.77502,0.85798 -2.3872,1.53471 -7.64712,3.20998 -16.50789,4.43232 -25.69231,3.54424 z m 94.128,0.0179 c -12.1224,-1.18086 -22.45844,-6.05958 -28.22755,-13.32371 -2.22888,-2.80646 -4.42713,-7.00487 -5.64377,-10.77894 -1.04476,-3.24088 -2.16608,-9.11567 -2.03754,-10.67505 l 0.10037,-1.21779 5.79497,-0.087 c 4.39632,-0.066 5.87044,0.0112 6.10764,0.32 0.17196,0.22387 0.48673,1.58894 0.69947,3.03348 1.36115,9.24199 6.75464,16.14484 15.49878,19.83608 7.53452,3.18061 17.96976,3.63882 26.68528,1.17176 1.14363,-0.32373 1.84611,-0.37366 2.24,-0.15922 1.17687,0.64068 7.88433,7.74248 7.59006,8.0363 -0.66039,0.65934 -6.65565,2.33633 -10.98485,3.07266 -5.22101,0.888 -13.11766,1.22982 -17.82286,0.77148 z m 66.90179,-0.39164 c -0.0839,-0.22211 -0.1881,-25.89185 -0.23146,-57.04385 l -0.0788,-56.64 -19.04,-0.16 -19.04,-0.16 -0.0845,-10.16128 -0.0845,-10.16128 38.80448,0.0813 38.80451,0.0813 v 10.08 10.08 l -7.27913,0.086 -7.27911,0.086 -0.0809,57.034 -0.0809,57.03399 -12.08857,0.0839 c -9.5001,0.0659 -12.12122,-0.003 -12.24115,-0.32 z m 42.87747,-0.004 c -0.0837,-0.22 -0.11517,-22.072 -0.07,-48.56 l 0.0822,-48.16 12.24,-0.0838 12.24,-0.0838 v 48.64381 48.6438 H 421.6447 c -9.44153,0 -12.20416,-0.0897 -12.3222,-0.4 z m 121.21155,-70.56 0.0807,-70.96001 h 12 12 l 0.16,43.33335 c 0.10966,29.70109 0.26515,43.3684 0.49427,43.44476 0.18384,0.0613 1.73127,-1.94273 3.43869,-4.45335 1.70742,-2.51061 8.68499,-11.98075 15.50573,-21.04475 l 12.40131,-16.48 14.5041,-0.0833 c 12.48332,-0.0717 14.4896,-0.0191 14.4,0.37716 -0.0573,0.25325 -7.8801,9.05876 -17.3841,19.5678 -11.46598,12.6785 -17.2777,19.33463 -17.27318,19.78284 0.004,0.3745 8.95097,13.1749 20.08,28.7277 11.04025,15.42873 20.07318,28.20873 20.07318,28.4 0,0.24537 -4.36541,0.34778 -14.8241,0.34778 h -14.82409 l -13.85021,-21.28 c -7.6176,-11.704 -14.01574,-21.28 -14.21811,-21.28 -0.4,0 -7.90563,8.67288 -8.26099,9.54575 -0.11965,0.29384 -0.22765,7.84225 -0.24,16.77425 l -0.0225,16.24002 h -12.1607 -12.16071 l 0.0807,-70.96 z m -203.20451,61.27502 c -1.97712,-1.98276 -3.59479,-3.69178 -3.59479,-3.79782 0,-0.10605 0.93207,-0.73791 2.07127,-1.40414 2.69923,-1.57857 5.19395,-3.82396 6.73571,-6.0625 l 1.23747,-1.79678 3.93779,3.92832 c 2.16576,2.16058 3.93776,4.09345 3.93776,4.29528 0,0.66665 -5.92323,6.01994 -8.01376,7.24264 -1.12841,0.66 -2.20131,1.2 -2.38419,1.2 -0.18285,0 -1.95014,-1.62225 -3.92726,-3.605 z m -95.10408,-1.34426 c -2.01237,-2.01809 -3.59402,-3.71909 -3.51478,-3.77998 0.0792,-0.0609 1.09389,-0.77718 2.25478,-1.59174 1.16089,-0.81455 3.4045,-2.84808 4.98581,-4.51895 l 2.87511,-3.03794 3.89419,3.90355 c 2.1418,2.14696 3.89418,4.06238 3.89418,4.25649 0,1.03767 -8.95912,8.43783 -10.2154,8.43783 -0.28327,0 -2.16152,-1.65116 -4.17389,-3.66926 z m 107.02606,-10.73404 -4.47677,-4.48544 0.0964,-2.95563 c 0.2232,-6.84225 -2.7896,-11.62251 -9.50006,-15.07337 -4.68065,-2.40703 -8.04222,-3.39727 -22.43636,-6.60923 -15.06602,-3.36189 -21.82146,-5.94729 -27.74404,-10.61805 -3.71653,-2.931 -6.64292,-7.73769 -7.5989,-12.48149 -0.62357,-3.09429 -0.64022,-8.72892 -0.0351,-11.89134 2.12857,-11.12504 11.53693,-18.97864 26.54211,-22.15595 5.28794,-1.11971 14.34407,-1.41144 19.6407,-0.6327 11.93317,1.75448 20.83096,7.37671 25.83461,16.32404 2.25258,4.028 3.91303,9.83022 4.08157,14.26246 l 0.0791,2.08 h -6.08 -6.08 l -0.26176,-1.6 c -0.61369,-3.75123 -1.25174,-5.91774 -2.47683,-8.41034 -4.00646,-8.15149 -12.67686,-12.58661 -24.58765,-12.57718 -8.88104,0.007 -15.69437,2.24209 -20.07425,6.58521 -3.40115,3.3726 -4.85595,7.35514 -4.51325,12.35507 0.46963,6.85165 5.91172,11.70934 16.98409,15.16026 3.33275,1.03871 17.64012,4.39671 23.40965,5.49433 3.31824,0.63128 8.05341,2.14947 10.88,3.48834 8.52042,4.03585 14.3929,10.99798 16.01053,18.98128 0.68173,3.36453 0.52557,10.36355 -0.30086,13.48303 -0.60605,2.28772 -2.08487,5.52045 -2.5929,5.66817 -0.17776,0.0517 -2.33776,-1.92447 -4.8,-4.39147 z m 70.06986,-92.87615 c -0.0859,-0.22394 -0.11808,-4.79768 -0.0714,-10.16386 l 0.0848,-9.75669 12.24451,-0.0838 12.24448,-0.0838 -0.0845,10.1638 -0.0845,10.16381 -12.08857,0.0839 c -9.5505,0.0662 -12.12135,-0.002 -12.2448,-0.32331 z" + id="path1189" + inkscape:connector-curvature="0" /> + <path + style="fill:#5b5c5d;stroke-width:0.31999999" + d="m 593.77723,313.53352 -1.4776,-0.1987 0.0376,-2.08 0.0376,-2.08 2.04205,-0.0177 c 1.86582,-0.0161 2.11792,-0.10261 2.92173,-1.00222 0.48384,-0.54151 1.12521,-1.72378 1.42531,-2.62728 l 0.54563,-1.64273 -4.50736,-11.83711 c -2.47904,-6.51041 -4.50736,-11.98579 -4.50736,-12.16751 0,-0.20908 1.02819,-0.29645 2.8,-0.23794 l 2.8,0.0925 3.04,8.63564 c 1.672,4.74961 3.184,8.63761 3.36,8.64 0.176,0.002 1.616,-3.73964 3.2,-8.31564 1.584,-4.576 2.99651,-8.5 3.13888,-8.72 0.29142,-0.45028 4.87482,-0.57561 5.14362,-0.14066 0.16259,0.26304 -8.99607,25.30736 -10.43725,28.54066 -1.87978,4.21728 -4.80979,5.79789 -9.56282,5.1587 z M 284.3748,296.22827 v -16.65345 h 2.4 2.4 v 1.12 c 0,1.34598 0.53449,1.45418 1.59693,0.32327 2.10838,-2.24427 7.74007,-2.74986 11.28909,-1.01349 3.34849,1.63826 5.38935,4.81222 6.06207,9.42776 0.64562,4.4296 -0.45959,8.96449 -2.90339,11.91321 -3.08681,3.72457 -9.81998,4.25639 -13.95242,1.10202 -0.99692,-0.76096 -1.51689,-0.99142 -1.61788,-0.71707 -0.0819,0.22236 -0.18607,2.7803 -0.2316,5.6843 l -0.0828,5.28 -2.48,0.0935 -2.48,0.0935 z m 14.59715,3.53435 c 2.56419,-1.16445 3.9717,-4.0117 3.94881,-7.98804 -0.0291,-5.04452 -2.37214,-8.29347 -6.21072,-8.6118 -4.63292,-0.3842 -7.34595,2.85363 -7.32153,8.73777 0.0165,3.96564 1.40227,6.62147 4.10629,7.86945 1.63824,0.7561 3.80235,0.75318 5.47715,-0.007 z m 14.20285,-3.5478 v -16.64 h 2.4 2.4 l 0.005,0.88 c 0.009,1.63896 0.41374,1.76819 1.7381,0.55513 1.68702,-1.54525 4.08439,-2.20583 7.22433,-1.99062 6.38713,0.43779 10.24006,5.28281 10.22886,12.86272 -0.0115,7.7221 -4.12787,12.65277 -10.56342,12.65277 -2.3912,0 -4.59408,-0.69323 -6.13315,-1.93005 -2.06977,-1.66332 -2.17962,-1.42141 -2.17962,4.8 v 5.45005 h -2.56 -2.56 z m 14.5097,3.72163 c 1.44634,-0.60432 3.2471,-2.80728 3.77248,-4.61503 0.53386,-1.837 0.53296,-5.56493 -0.003,-7.16134 -0.60787,-1.81504 -2.13536,-3.69822 -3.60982,-4.45044 -1.06292,-0.54226 -1.75197,-0.65619 -3.35239,-0.55428 -2.46841,0.15718 -4.02774,1.23947 -5.23827,3.6358 -0.70199,1.38964 -0.8,1.9953 -0.8,4.94366 0,2.82625 0.10926,3.564 0.68783,4.64419 0.85956,1.60482 2.22164,2.9965 3.47217,3.54765 1.25952,0.55512 3.75302,0.55993 5.0697,0.01 z m -93.9041,4.13454 c -4.91525,-1.35549 -8.30513,-5.18953 -8.6567,-9.79095 l -0.1089,-1.42522 2.51034,-0.094 c 2.7458,-0.10283 3.40966,0.17481 3.40966,1.42594 0,0.93781 0.98699,2.94468 1.81765,3.69584 2.3374,2.11374 7.80214,2.72616 10.80572,1.21097 2.15629,-1.08776 2.89663,-2.18073 2.89663,-4.27628 0,-3.25608 -0.91648,-3.8683 -8.96,-5.98532 -5.63463,-1.48301 -7.15276,-2.10977 -8.74804,-3.61164 -1.79163,-1.68673 -2.41843,-3.2333 -2.41771,-5.9655 6.4e-4,-2.84107 0.92641,-4.99187 2.8906,-6.71646 4.80181,-4.21604 14.21164,-4.12709 18.97842,0.1794 1.70844,1.54348 2.94813,3.96193 3.00957,5.87121 l 0.0472,1.46585 h -2.70481 -2.70482 l -0.5608,-1.56748 c -0.76869,-2.14856 -1.97945,-3.31356 -4.07757,-3.9235 -4.64044,-1.34902 -9.19594,0.68176 -9.10736,4.05993 0.0689,2.62813 1.43416,3.65192 6.79013,5.09191 8.40125,2.25873 9.02426,2.50607 10.81335,4.29301 1.2877,1.28614 1.76865,2.06098 2.19928,3.54312 1.66932,5.74554 -1.57288,10.82599 -8.0074,12.54737 -2.00353,0.536 -8.13049,0.51892 -10.1144,-0.0282 z m 28.9944,0.16664 c -2.42293,-0.58473 -4.39112,-2.34287 -5.19282,-4.63863 -0.49164,-1.40788 -0.56718,-2.83874 -0.56718,-10.74418 v -9.12 h 2.56 2.56 l 0.16,8.96 c 0.14659,8.20876 0.21244,9.03744 0.78541,9.88365 1.8141,2.67922 7.24471,2.21675 8.96727,-0.76365 0.59244,-1.02505 0.66089,-1.83896 0.80732,-9.6 l 0.16,-8.48 h 2.56 2.56 v 12 12 h -2.4 -2.4 l -0.0993,-1.2 c -0.11787,-1.42412 -0.60709,-1.52796 -1.68491,-0.35765 -1.2946,1.40569 -3.70662,2.35555 -5.89578,2.32176 -1.056,-0.0163 -2.352,-0.13388 -2.88,-0.2613 z m 86.53738,-0.1201 c -4.59661,-1.30308 -7.4552,-4.7493 -8.32509,-10.03644 -0.73622,-4.47462 0.77293,-9.56135 3.59242,-12.10859 0.72515,-0.65515 2.12777,-1.56997 3.11689,-2.03293 1.5993,-0.74857 2.1881,-0.84192 5.3184,-0.84325 3.21197,-10e-4 3.6962,0.0799 5.53328,0.92815 2.5161,1.16185 4.85508,3.62902 5.8697,6.19141 0.6087,1.5373 0.72813,2.44255 0.72813,5.51894 0,4.50873 -0.65795,6.48436 -3.02042,9.06927 -2.22646,2.43611 -4.64819,3.47189 -8.45789,3.6175 -1.74451,0.0667 -3.47337,-0.054 -4.35542,-0.30406 z m 7.43856,-4.88039 c 4.70496,-3.30679 4.29405,-12.8076 -0.66627,-15.40408 -1.61824,-0.84708 -3.96109,-0.97651 -5.55994,-0.30716 -1.54205,0.64556 -3.32121,2.80706 -3.89168,4.72793 -1.40333,4.72556 0.24099,9.8257 3.74397,11.61243 1.67114,0.8524 4.68992,0.55444 6.37392,-0.62912 z m 105.10374,4.7944 c -5.15117,-1.64937 -7.87209,-5.84434 -7.87209,-12.13672 0,-5.85722 2.25299,-9.88286 6.69782,-11.96765 1.57536,-0.73891 2.16979,-0.83219 5.29459,-0.83085 3.11674,0.001 3.72163,0.0963 5.28,0.82885 0.968,0.45504 2.2168,1.21374 2.77511,1.68601 1.2014,1.01621 2.66489,3.79861 2.66489,5.06646 v 0.89718 h -2.53517 -2.5352 l -0.35222,-1.06722 c -1.41709,-4.2939 -8.14576,-4.63051 -10.64998,-0.53278 -1.68519,2.75753 -1.93108,7.39177 -0.557,10.49811 0.84448,1.90908 1.45959,2.57912 3.02957,3.30005 3.42874,1.57448 6.96179,-0.005 8.14039,-3.63816 l 0.38924,-1.2 h 2.57079 2.57081 l -0.22464,1.2 c -0.60828,3.24933 -2.9294,6.21794 -5.88336,7.52461 -1.9822,0.87683 -6.61561,1.07267 -8.80355,0.37211 z m 52.40279,0.21758 c -3.63968,-0.93444 -6.7793,-3.8961 -7.77876,-7.33783 -0.90035,-3.10046 -1.05462,-4.8092 -0.65833,-7.29299 0.51571,-3.2322 1.68477,-5.56716 3.7928,-7.57544 2.40173,-2.28805 4.16656,-2.94811 7.88182,-2.94784 2.44599,1.8e-4 3.15235,0.12788 4.68736,0.84735 3.9081,1.83181 6.36605,5.70188 6.61331,10.41279 l 0.13904,2.64939 -8.91984,0.0851 -8.91987,0.0851 0.0575,1.32857 c 0.0813,1.87862 1.16487,3.79846 2.72682,4.83107 1.16486,0.7701 1.64208,0.88036 3.8104,0.88036 2.84048,0 3.66704,-0.42539 5.18646,-2.66922 l 0.90115,-1.33078 h 2.0689 c 2.3616,0 2.64259,0.28082 2.0568,2.05573 -0.60269,1.82614 -2.92096,4.12727 -5.19184,5.15339 -1.6192,0.73165 -2.55171,0.92779 -4.73616,0.99616 -1.496,0.0468 -3.16889,-0.0301 -3.71753,-0.17098 z m 9.15753,-15.56705 c 0,-1.78018 -2.07402,-4.54157 -3.94083,-5.2469 -2.32438,-0.87821 -5.5817,0.0246 -7.0167,1.94481 -0.91626,1.22605 -1.66573,3.30416 -1.36634,3.78858 0.12554,0.20309 2.4897,0.32626 6.26275,0.32626 h 6.06112 z m 46.08,15.33974 c -4.83443,-1.29346 -8.33507,-5.25192 -8.44022,-9.5441 l -0.0398,-1.62289 2.64506,-0.093 c 1.94995,-0.0686 2.67616,0.0155 2.76345,0.32 0.0651,0.22717 0.2873,1.03398 0.49376,1.79292 0.20643,0.75894 0.88003,1.93853 1.49687,2.6213 1.57161,1.73958 3.48672,2.4034 6.84086,2.37119 3.07027,-0.0295 4.44781,-0.50251 5.89955,-2.02585 0.76743,-0.80527 0.96435,-1.32838 1.07479,-2.85545 0.12476,-1.72468 0.0588,-1.95664 -0.8513,-2.99316 -1.07142,-1.22028 -2.13232,-1.62087 -9.16304,-3.45986 -2.112,-0.55242 -4.42333,-1.26119 -5.13626,-1.57504 -3.37264,-1.48471 -5.09315,-4.35913 -4.88262,-8.15728 0.27731,-5.00287 3.21174,-7.87888 9.25328,-9.06913 2.19402,-0.43225 3.02243,-0.45451 5.1847,-0.13936 3.1,0.45183 6.06628,1.76946 7.73092,3.43409 1.58256,1.58258 2.80051,4.23795 2.66979,5.82065 l -0.0998,1.20801 -2.07011,0.0971 c -2.89991,0.136 -3.41914,-0.0478 -3.65466,-1.29411 -0.31145,-1.64814 -1.33552,-3.0363 -2.82269,-3.82624 -1.84848,-0.98187 -6.17948,-1.04681 -8.05033,-0.1207 -3.03197,1.5009 -3.27837,5.42575 -0.44995,7.16732 0.57625,0.35482 3.56774,1.32078 6.64774,2.14656 7.64918,2.05084 9.15712,2.89402 10.6951,5.98041 0.67076,1.346 0.82359,2.10702 0.81786,4.07249 -0.0144,4.94493 -2.90163,8.408 -8.14019,9.76363 -2.42275,0.62695 -8.03594,0.61646 -10.41277,-0.0195 z m 53.28,0.0632 c -2.09395,-0.51748 -3.29536,-1.17681 -4.52416,-2.48286 -1.26406,-1.3435 -1.94378,-2.68395 -2.08534,-4.11244 l -0.1105,-1.11486 2.49062,-0.0937 2.49063,-0.0937 0.44144,1.05365 c 0.88909,2.12215 2.63222,3.13366 5.40025,3.13366 3.22781,0 5.33706,-1.16856 5.33706,-2.95682 0,-2.16471 -1.24621,-2.91983 -6.91686,-4.19122 -3.61837,-0.81125 -6.24381,-1.89654 -7.23095,-2.98909 -0.89744,-0.99331 -1.53254,-2.86188 -1.52691,-4.4926 0.015,-4.39845 4.4504,-7.10096 11.03472,-6.72368 4.45203,0.25511 6.88413,1.58993 8.34778,4.58156 1.18592,2.4239 0.99257,2.69185 -1.94244,2.69185 -2.35312,0 -2.43001,-0.0251 -3.01318,-0.98406 -0.91251,-1.5005 -1.82899,-1.97258 -4.15216,-2.13881 -3.59392,-0.25714 -5.51773,1.04114 -4.76074,3.21272 0.4248,1.21852 1.90765,1.89545 6.44477,2.94207 2.09219,0.48264 4.28285,1.07758 4.86807,1.32211 5.27859,2.20554 5.70643,8.99416 0.75801,12.02745 -2.8167,1.72659 -7.64093,2.32533 -11.35011,1.40868 z m 41.92,0.0216 c -3.59232,-1.19654 -6.0089,-3.38841 -7.23779,-6.56472 -0.85504,-2.20999 -1.17799,-7.01304 -0.62042,-9.2273 0.95376,-3.78779 3.52048,-7.06799 6.66871,-8.5224 2.23584,-1.03292 7.27731,-1.00267 9.41875,0.0565 3.72508,1.84248 6.09888,5.26946 6.74192,9.73314 0.1871,1.29869 0.24764,2.60239 0.13456,2.89712 -0.18528,0.48278 -1.0586,0.53587 -8.81651,0.53587 -6.61677,0 -8.68976,0.0951 -8.95162,0.41059 -0.46029,0.55461 0.0892,2.96518 0.97062,4.25826 1.14884,1.68536 2.65056,2.49055 4.9138,2.63466 2.56982,0.16363 4.57222,-0.70655 5.62902,-2.44622 0.96329,-1.58573 1.08883,-1.64676 3.39901,-1.6524 2.45036,-0.006 2.64918,0.30691 1.56038,2.45556 -0.97843,1.93085 -3.25469,4.07378 -5.26013,4.95199 -1.91648,0.83926 -6.66972,1.10573 -8.5503,0.47934 z m 9.49888,-15.73179 c -0.16736,-1.5889 -1.55216,-3.59048 -3.11962,-4.50908 -3.37248,-1.9764 -7.9558,-0.002 -9.05872,3.90161 -0.4943,1.74957 -0.49868,1.74839 6.14839,1.65428 l 6.13107,-0.0868 z M 391.982,303.84314 c -1.62243,-0.36356 -3.12141,-1.75934 -3.40336,-3.16909 -0.11209,-0.56058 -0.20384,-4.42971 -0.20384,-8.59807 0,-8.93303 0.0321,-8.82692 -2.58118,-8.53987 -0.95635,0.10505 -2.55773,0.25367 -3.55863,0.33027 -2.21536,0.16953 -3.82976,0.89539 -4.95241,2.22666 -1.69895,2.01473 -1.83511,2.71937 -2.01763,10.44178 l -0.17015,7.2 h -2.4 -2.4 l -0.0839,-12.0941 -0.0838,-12.0941 2.32384,0.0941 2.32387,0.0941 0.0967,1.68 c 0.0532,0.924 0.20909,1.68 0.34643,1.68 0.13734,0 0.70298,-0.56402 1.25696,-1.25338 0.55818,-0.69459 1.78934,-1.63603 2.76157,-2.11169 1.46153,-0.71506 2.02339,-0.82632 3.36633,-0.66663 0.8866,0.10543 2.34592,0.27853 3.24298,0.38467 1.0464,0.12381 1.7633,0.0613 2,-0.17451 0.20614,-0.20529 0.43962,-1.80879 0.52899,-3.63298 l 0.16,-3.26549 h 2.4 2.4 l 0.0924,3.18208 c 0.0508,1.75014 0.24842,3.37014 0.43917,3.6 0.21907,0.26396 1.09872,0.41793 2.38765,0.41793 h 2.04083 v 1.92 1.92 h -2.04083 c -1.37072,0 -2.16438,0.14891 -2.41718,0.45352 -0.27063,0.32608 -0.34909,2.48133 -0.2792,7.66922 0.11241,8.34449 0.065,8.20905 2.96096,8.44921 l 1.77625,0.1473 v 1.8385 1.83851 l -1.2,0.19834 c -1.59875,0.26426 -3.46182,0.20367 -5.1128,-0.16628 z m 146.41066,-0.0568 c -3.36948,-0.94999 -3.55277,-1.52867 -3.76637,-11.89152 l -0.17149,-8.32 -1.84,-0.096 -1.84,-0.096 v -1.88806 -1.88807 l 1.84,-0.096 1.84,-0.096 0.16,-3.52001 0.16,-3.52 h 2.56 2.56 l 0.16,3.52 0.16,3.52001 2.32,0.094 2.32,0.094 v 1.89197 1.89196 l -2.32,0.094 -2.32,0.094 -0.0859,7.44862 -0.0859,7.44863 0.79136,0.79137 c 0.6327,0.6327 1.1151,0.79138 2.40592,0.79138 h 1.61456 v 1.74111 c 0,0.95761 -0.16362,1.84225 -0.36362,1.96585 -0.69529,0.42971 -4.60566,0.44546 -6.09852,0.0245 z m 109.12969,0.14644 c -1.58342,-0.33528 -2.70006,-1.11507 -3.38089,-2.36098 -0.48864,-0.89419 -0.58871,-2.20472 -0.72666,-9.51698 l -0.16,-8.48 -1.84,-0.096 -1.84,-0.096 v -1.88806 -1.88807 l 1.84,-0.096 1.84,-0.096 0.16,-3.52001 0.16,-3.52 h 2.56 2.56 l 0.16,3.52 0.16,3.52001 2.24,0.16 2.24,0.16 v 1.76 1.76 l -2.24,0.16 -2.24,0.16 -0.0857,7.57226 -0.0857,7.57228 0.8489,0.66772 c 0.59642,0.46916 1.31187,0.66774 2.40573,0.66774 h 1.55683 v 1.74111 c 0,0.95761 -0.14378,1.82997 -0.31949,1.93858 -0.52883,0.32683 -4.55693,0.46423 -5.81296,0.19827 z m -223.40233,-0.23941 c -0.12387,-0.12387 -0.22522,-6.45672 -0.22522,-14.073 0,-10.72682 -0.0901,-13.90613 -0.4,-14.10667 -0.22,-0.14239 -2.632,-0.33089 -5.36,-0.41889 l -4.96,-0.16 v -2.24 -2.24 l 13.52,-0.0835 13.52,-0.0835 v 2.40347 2.40347 l -4.88,0.005 c -2.684,0.003 -5.05846,0.11825 -5.27657,0.25678 -0.30352,0.19276 -0.4162,3.5528 -0.48,14.3151 l -0.0834,14.06323 -2.57478,0.0919 c -1.41613,0.0505 -2.67613,-0.009 -2.8,-0.13333 z m 19.76585,-0.18641 c -0.0876,-0.22822 -0.12137,-5.67031 -0.0751,-12.09354 l 0.0841,-11.6786 h 2.56 2.56 v 12 12 l -2.48483,0.0935 c -1.81024,0.0682 -2.5281,-0.0191 -2.6441,-0.3214 z m 37.76084,0.001 c -0.0871,-0.22745 -0.12093,-7.75755 -0.0751,-16.73355 l 0.0832,-16.32 h 2.56 2.56 l 0.0849,9.2 c 0.0467,5.06 0.19257,9.2 0.32416,9.2 0.13155,0 2.32349,-2.088 4.87094,-4.64 l 4.63171,-4.64 h 2.96416 c 1.63028,0 2.96413,0.10495 2.96413,0.23323 0,0.12827 -1.97603,2.11886 -4.39117,4.42354 l -4.3912,4.19031 4.8712,7.40659 c 2.67914,4.07362 4.87117,7.55503 4.87117,7.73646 0,0.5179 -5.61875,0.42685 -6.13715,-0.0994 -0.23258,-0.23613 -1.93238,-2.82813 -3.77738,-5.76 -1.84499,-2.93175 -3.507,-5.33055 -3.69337,-5.33055 -0.18637,0 -0.94042,0.61294 -1.67565,1.36209 l -1.3368,1.3621 -0.0898,4.3179 -0.0898,4.31791 -2.48483,0.0935 c -1.80624,0.068 -2.52813,-0.0194 -2.64326,-0.32 z m 202.6341,0.18581 c -0.12432,-0.12419 -0.22601,-5.6019 -0.22601,-12.17257 v -11.94666 h 2.4 2.4 v 1.26111 c 0,0.69361 0.12195,1.33649 0.27104,1.42862 0.14905,0.0921 0.68905,-0.27256 1.2,-0.81042 1.45369,-1.53032 3.21901,-2.28285 5.74182,-2.44768 2.7553,-0.18001 5.11488,0.69196 6.53517,2.41503 l 0.91958,1.1156 1.553,-1.3095 c 1.8974,-1.59993 3.75936,-2.29276 6.16153,-2.29276 3.98096,0 6.88989,1.79942 7.68551,4.75417 0.21616,0.80266 0.31084,4.72698 0.25721,10.65813 l -0.0849,9.3877 h -2.4 -2.4 l -0.17255,-8.8 c -0.10364,-5.28776 -0.31251,-9.1193 -0.52326,-9.6 -0.65325,-1.48995 -1.6008,-2.04338 -3.7223,-2.17403 -1.67303,-0.10302 -2.15645,-0.005 -3.10189,0.63021 -2.2032,1.4798 -2.38039,2.28439 -2.56,11.62382 l -0.16,8.32 h -2.4 -2.4 l -0.16755,-8.8 c -0.17101,-8.98018 -0.29444,-9.87358 -1.51604,-10.97368 -1.35955,-1.22435 -4.50211,-1.08921 -6.10876,0.26269 -1.96474,1.65322 -2.11181,2.38291 -2.28765,11.35099 l -0.16,8.16 -2.25399,0.0927 c -1.23968,0.051 -2.35568,-0.009 -2.48,-0.13333 z M 443.87266,274.67241 c -0.0948,-0.24716 -0.12864,-1.29726 -0.0751,-2.33355 l 0.0973,-1.88417 h 2.56 2.56 v 2.24 2.24 l -2.48483,0.0935 c -1.9031,0.0717 -2.52522,-0.0116 -2.65731,-0.35583 z M 486.2948,253.9648 c -9.0232,-1.24334 -17.08528,-4.29181 -23.42832,-8.85884 -3.16329,-2.27759 -8.24112,-7.50651 -10.30627,-10.61294 -3.36064,-5.0551 -5.75549,-10.97867 -7.276,-17.99673 -0.6352,-2.93188 -0.72138,-4.25985 -0.7345,-11.32148 -0.0163,-8.83886 0.39332,-11.94123 2.39885,-18.16173 1.34717,-4.17837 4.72266,-10.79697 7.14317,-14.0061 2.71622,-3.60125 8.05802,-8.70918 11.50979,-11.00591 11.08867,-7.37813 26.264,-10.57633 41.0769,-8.65693 5.62333,0.72866 14.24061,2.96689 15.22937,3.95566 0.25104,0.25105 -3.2518,15.86298 -3.93376,17.53236 l -0.28486,0.69734 -2.97718,-1.06194 c -9.45114,-3.37115 -20.95322,-3.33287 -28.513,0.0949 -10.1872,4.6191 -16.10963,14.14188 -16.76656,26.95933 -0.56752,11.07281 3.24109,21.04075 10.27431,26.88993 2.84944,2.36973 7.80067,4.85386 11.54806,5.79386 2.49226,0.62516 3.67703,0.71983 8.8,0.70317 6.56477,-0.0213 10.0584,-0.56764 15.48307,-2.421 2.01056,-0.68693 2.90887,-0.86486 3.06781,-0.60768 0.37847,0.61239 3.30048,16.91513 3.11731,17.39245 -0.36429,0.94928 -6.72784,2.83486 -13.82819,4.09739 -3.06656,0.54528 -5.4191,0.70282 -11.68,0.78216 -4.312,0.0546 -8.776,-0.0296 -9.92,-0.18726 z m 169.28,-0.15158 c -21.2639,-2.90731 -35.56054,-15.95202 -39.65693,-36.18425 -2.71075,-13.3887 -0.84384,-27.99853 5.08451,-39.78944 5.52602,-10.9907 14.86349,-19.15565 25.94404,-22.68614 5.53865,-1.76474 8.13977,-2.13031 15.18838,-2.13465 6.74707,-0.004 8.69616,0.23033 13.50953,1.62519 15.76919,4.56974 26.00365,18.51468 28.27466,38.52563 0.37798,3.33043 0.2343,14.526 -0.2105,16.40525 l -0.20832,0.88 -32.20268,0.005 c -18.12823,0.003 -32.39824,0.12872 -32.65015,0.28821 -0.57884,0.36651 -0.29411,3.41581 0.6305,6.75244 2.91418,10.51614 11.9519,16.99486 25.46141,18.25204 7.17133,0.66736 18.23315,-0.50277 26.13878,-2.76498 2.31949,-0.66373 4.2176,-1.05209 4.3663,-0.89338 0.14468,0.15442 1.01629,3.8611 1.93693,8.23706 1.37984,6.55867 1.59658,8.00522 1.23373,8.2349 -0.24211,0.15325 -1.95219,0.78206 -3.80019,1.39737 -5.76551,1.91967 -12.64535,3.31305 -19.79392,4.00887 -4.51747,0.43973 -15.53258,0.34871 -19.24608,-0.15902 z m 25.40925,-63.05808 c -0.0723,-6.06918 -2.70192,-12.45551 -6.71709,-16.31345 -3.18419,-3.05948 -6.91034,-4.54422 -12.13216,-4.83423 -9.96813,-0.55363 -18.18349,5.27699 -21.94061,15.57177 -1.11145,3.04545 -2.04201,7.16237 -1.77574,7.8562 0.15347,0.39997 3.1031,0.45261 21.3872,0.38167 l 21.20915,-0.0823 -0.0307,-2.57967 z m 59.50006,63.06624 c -3.05546,-0.55443 -5.21974,-1.28867 -8.10931,-2.75109 -6.97402,-3.52955 -10.74259,-9.04293 -12.88839,-18.85548 -0.63884,-2.92133 -0.66886,-4.10172 -0.76896,-30.24 -0.0573,-14.96 -0.17785,-27.52114 -0.2679,-27.91365 -0.16227,-0.70723 -0.22486,-0.71442 -6.95926,-0.8 l -6.79549,-0.0863 -0.085,-9.04 -0.085,-9.04 h 6.70608 c 5.01347,0 6.77145,-0.10096 6.96499,-0.4 0.14237,-0.22 0.33088,-5.21988 0.41888,-11.11086 l 0.16,-10.71085 11.51011,-2.78471 c 6.33056,-1.53158 11.62256,-2.7152 11.76,-2.63025 0.13744,0.0849 0.24989,6.16514 0.24989,13.51156 0,9.9622 0.0976,13.45471 0.384,13.74111 0.28435,0.28437 3.35645,0.384 11.84,0.384 h 11.456 v 9.11606 9.11606 l -11.76,0.0839 -11.76,0.0839 0.003,24.32 c 0.003,22.29121 0.0499,24.50686 0.57357,26.56 1.4504,5.68664 3.79395,8.50961 7.99225,9.6273 2.1728,0.57846 6.68679,0.57121 10.30787,-0.0165 1.5818,-0.25675 2.9674,-0.3642 3.07911,-0.23879 0.11171,0.12542 0.29206,4.22168 0.40077,9.10279 l 0.19763,8.87476 -0.71674,0.46162 c -2.67517,1.72292 -17.65459,2.75193 -23.80742,1.63543 z m -535.06882,-1.469 c -16.41063,-1.58681 -29.98608,-11.16533 -37.17039,-26.22654 -8.03388,-16.84227 -8.03388,-39.45979 0,-56.30205 6.98905,-14.65187 20.15477,-24.28447 35.8871,-26.25655 1.93532,-0.2426 5.33247,-0.3334 8.96,-0.23949 8.13745,0.21066 13.61789,1.48233 19.85281,4.60662 14.69215,7.36215 23.94903,21.32356 26.62602,40.15787 0.62803,4.41859 0.62803,15.34656 0,19.76515 -0.96404,6.78265 -2.76391,12.8764 -5.44573,18.43742 -1.69064,3.50571 -4.18763,7.53245 -4.79681,7.73551 -0.17609,0.0587 -2.23891,-1.81599 -4.58404,-4.16596 l -4.26389,-4.27268 1.58753,-3.16843 c 3.49141,-6.96825 5.1301,-13.6956 5.40967,-22.20844 0.21363,-6.50483 -0.15823,-10.44903 -1.50143,-15.92523 -3.19888,-13.04174 -10.22143,-22.54631 -20.27018,-27.43439 -5.16632,-2.51309 -10.9932,-3.49173 -17.74625,-2.98052 -11.70444,0.88602 -21.65242,7.96798 -27.59888,19.64762 -4.09771,8.04844 -6.21725,19.19914 -5.42349,28.53252 1.46556,17.23269 8.94873,30.34013 20.88335,36.57901 4.86882,2.54521 9.31412,3.5678 15.46708,3.55807 5.39052,-0.009 8.79766,-0.68689 13.97834,-2.78306 0.44355,-0.17947 1.4274,0.6144 4.4,3.55039 2.10579,2.07985 3.8287,4.02124 3.8287,4.31421 0,0.35972 -0.77502,0.85798 -2.3872,1.53471 -7.64712,3.20998 -16.50789,4.43232 -25.69231,3.54424 z m 94.128,0.0179 c -12.1224,-1.18086 -22.45844,-6.05958 -28.22755,-13.32371 -2.22888,-2.80646 -4.42713,-7.00487 -5.64377,-10.77894 -1.04476,-3.24088 -2.16608,-9.11567 -2.03754,-10.67505 l 0.10037,-1.21779 5.79497,-0.087 c 4.39632,-0.066 5.87044,0.0112 6.10764,0.32 0.17196,0.22387 0.48673,1.58894 0.69947,3.03348 1.36115,9.24199 6.75464,16.14484 15.49878,19.83608 7.53452,3.18061 17.96976,3.63882 26.68528,1.17176 1.14363,-0.32373 1.84611,-0.37366 2.24,-0.15922 1.17687,0.64068 7.88433,7.74248 7.59006,8.0363 -0.66039,0.65934 -6.65565,2.33633 -10.98485,3.07266 -5.22101,0.888 -13.11766,1.22982 -17.82286,0.77148 z m 66.90179,-0.39164 c -0.0839,-0.22211 -0.1881,-25.89185 -0.23146,-57.04385 l -0.0788,-56.64 -19.04,-0.16 -19.04,-0.16 -0.0845,-10.16128 -0.0845,-10.16128 38.80448,0.0813 38.80451,0.0813 v 10.08 10.08 l -7.27913,0.086 -7.27911,0.086 -0.0809,57.034 -0.0809,57.03399 -12.08857,0.0839 c -9.5001,0.0659 -12.12122,-0.003 -12.24115,-0.32 z m 42.87747,-0.004 c -0.0837,-0.22 -0.11517,-22.072 -0.07,-48.56 l 0.0822,-48.16 12.24,-0.0838 12.24,-0.0838 v 48.64381 48.6438 H 421.6447 c -9.44153,0 -12.20416,-0.0897 -12.3222,-0.4 z m 121.21155,-70.56 0.0807,-70.96001 h 12 12 l 0.16,43.33335 c 0.10966,29.70109 0.26515,43.3684 0.49427,43.44476 0.18384,0.0613 1.73127,-1.94273 3.43869,-4.45335 1.70742,-2.51061 8.68499,-11.98075 15.50573,-21.04475 l 12.40131,-16.48 14.5041,-0.0833 c 12.48332,-0.0717 14.4896,-0.0191 14.4,0.37716 -0.0573,0.25325 -7.8801,9.05876 -17.3841,19.5678 -11.46598,12.6785 -17.2777,19.33463 -17.27318,19.78284 0.004,0.3745 8.95097,13.1749 20.08,28.7277 11.04025,15.42873 20.07318,28.20873 20.07318,28.4 0,0.24537 -4.36541,0.34778 -14.8241,0.34778 h -14.82409 l -13.85021,-21.28 c -7.6176,-11.704 -14.01574,-21.28 -14.21811,-21.28 -0.4,0 -7.90563,8.67288 -8.26099,9.54575 -0.11965,0.29384 -0.22765,7.84225 -0.24,16.77425 l -0.0225,16.24002 h -12.1607 -12.16071 l 0.0807,-70.96 z m -191.28253,49.1967 -4.47677,-4.48545 0.0964,-2.95562 c 0.2232,-6.84225 -2.7896,-11.62252 -9.50006,-15.07338 -4.68065,-2.40703 -8.04222,-3.39727 -22.43636,-6.60923 -15.06602,-3.36188 -21.82146,-5.94729 -27.74404,-10.61805 -3.71653,-2.93099 -6.64292,-7.73769 -7.5989,-12.48148 -0.62357,-3.09429 -0.64022,-8.72892 -0.0351,-11.89134 2.12857,-11.12505 11.53693,-18.97865 26.54211,-22.15596 5.28794,-1.11971 14.34407,-1.41144 19.6407,-0.6327 11.93317,1.75448 20.83096,7.37671 25.83461,16.32404 2.25258,4.028 3.91303,9.83022 4.08157,14.26247 l 0.0791,2.08 h -6.08 -6.08 l -0.26176,-1.6 c -0.61369,-3.75124 -1.25174,-5.91774 -2.47683,-8.41034 -4.00646,-8.1515 -12.67686,-12.58661 -24.58765,-12.57719 -8.88104,0.007 -15.69437,2.2421 -20.07425,6.58522 -3.40115,3.3726 -4.85595,7.35513 -4.51325,12.35506 0.46963,6.85165 5.91172,11.70935 16.98409,15.16026 3.33275,1.03872 17.64012,4.39671 23.40965,5.49434 3.31824,0.63128 8.05341,2.14946 10.88,3.48833 8.52042,4.03586 14.3929,10.99798 16.01053,18.98128 0.68173,3.36454 0.52557,10.36356 -0.30086,13.48304 -0.60605,2.28772 -2.08487,5.52045 -2.5929,5.66816 -0.17776,0.0517 -2.33776,-1.92447 -4.8,-4.39146 z m 70.06986,-92.87615 c -0.0859,-0.22395 -0.11808,-4.79768 -0.0714,-10.16386 l 0.0848,-9.75667 12.24451,-0.0838 12.24448,-0.0838 -0.0845,10.1638 -0.0845,10.16381 -12.08857,0.0839 c -9.5505,0.0662 -12.12135,-0.002 -12.2448,-0.32331 z" + id="path1187" + inkscape:connector-curvature="0" /> + <path + style="fill:#242627;stroke-width:0.31999999" + d="m 592.65365,311.49877 0.0412,-1.99605 1.81648,-0.004 c 2.53366,-0.005 3.41338,-0.71863 4.37853,-3.5495 l 0.75501,-2.21443 -4.3306,-11.36 c -2.38182,-6.248 -4.42899,-11.612 -4.54924,-11.92 -0.19652,-0.50328 0.0269,-0.56 2.20432,-0.56 1.98115,0 2.47715,0.10211 2.71996,0.56 0.16333,0.308 1.55383,4.16 3.08996,8.56 1.53616,4.4 2.93868,8.18177 3.11673,8.40394 0.63709,0.79487 1.16986,-0.31676 3.4641,-7.22758 1.26646,-3.815 2.58125,-7.69236 2.92173,-8.61636 l 0.619,-1.68 h 2.217 c 1.56739,0 2.21702,0.11791 2.21702,0.40241 0,0.80476 -9.88426,27.12095 -10.90781,29.04133 -0.99245,1.86201 -2.7456,3.51626 -3.72646,3.51626 -0.22317,0 -0.40573,0.144 -0.40573,0.32 0,0.1893 -1.16038,0.32 -2.84115,0.32 h -2.8412 z M 284.6948,296.22944 v -16.33462 h 2.08 2.08 v 1.28 c 0,1.63092 0.58351,1.67782 2.0931,0.16823 1.51258,-1.51258 4.01695,-2.22691 7.011,-1.99979 5.88736,0.44661 9.35506,4.35118 9.95301,11.20691 0.54488,6.24736 -2.50579,11.87531 -7.1725,13.23196 -3.28628,0.95535 -7.76234,0.0363 -9.65978,-1.98347 -0.40501,-0.43111 -0.99596,-0.78384 -1.31322,-0.78384 -0.53084,0 -0.58381,0.45297 -0.66422,5.68 l -0.0874,5.68 -2.16,0.0946 -2.16,0.0946 z m 15.10386,3.52631 c 2.29904,-1.57532 3.42105,-4.0927 3.4421,-7.72285 0.033,-5.69165 -2.71011,-9.26926 -7.09321,-9.25106 -4.40299,0.0183 -7.05399,3.17878 -7.10708,8.47298 -0.033,3.2867 0.55458,5.26024 2.0829,6.9965 1.74891,1.98686 2.89356,2.48405 5.44644,2.36571 1.59378,-0.0739 2.38949,-0.28614 3.22885,-0.86128 z m 13.69614,-3.54093 v -16.32 h 2.08 2.08 v 1.08081 c 0,1.68046 0.6676,1.98104 1.78574,0.80403 1.76866,-1.86179 3.15423,-2.363 6.53426,-2.36372 2.43085,-6.4e-4 3.33639,0.13635 4.51917,0.68306 4.40698,2.037 6.68522,6.75755 6.2785,13.00922 -0.30563,4.69814 -2.2129,8.2301 -5.39629,9.99323 -1.55322,0.86023 -2.00272,0.95321 -4.60138,0.95175 -3.16924,-0.002 -5.27001,-0.69703 -6.94089,-2.29711 -0.51282,-0.49108 -1.0627,-0.74697 -1.36,-0.63288 -0.42588,0.16342 -0.49911,1.01462 -0.49911,5.80156 v 5.61005 h -2.24 -2.24 z m 15.42941,3.33285 c 0.90346,-0.63497 1.68739,-1.59279 2.32659,-2.84263 0.86311,-1.68767 0.964,-2.18949 0.964,-4.79433 0,-2.63447 -0.098,-3.10855 -1.03792,-5.01766 -0.73824,-1.4996 -1.42326,-2.37536 -2.37264,-3.03327 -1.18793,-0.82325 -1.60422,-0.92496 -3.78544,-0.92496 -3.08297,0 -4.50966,0.81904 -5.91288,3.39449 -0.78158,1.43451 -0.96244,2.18952 -1.07244,4.47696 -0.30454,6.33264 2.56509,10.06662 7.53473,9.80428 1.59357,-0.0841 2.26672,-0.29732 3.356,-1.06288 z m -95.10941,4.15414 c -4.66854,-1.24907 -7.99404,-4.93858 -8.3719,-9.28828 l -0.1076,-1.23871 2.44476,-0.0928 2.44475,-0.0928 0.40047,1.66931 c 0.50732,2.11477 2.33594,4.17731 4.41477,4.97953 1.93847,0.74805 6.73462,0.75571 8.38718,0.0134 4.40186,-1.9773 4.65855,-7.56954 0.42913,-9.34909 -0.54914,-0.23105 -3.48794,-1.08293 -6.53065,-1.89306 -3.04272,-0.81014 -6.16349,-1.84293 -6.93505,-2.29509 -2.88134,-1.68858 -4.33771,-5.14217 -3.62209,-8.58931 0.99607,-4.79801 5.47327,-7.6981 11.84623,-7.67334 6.25392,0.0243 10.68239,2.75335 12.04124,7.42042 0.72349,2.4849 0.5655,2.66884 -2.19627,2.55701 l -2.32428,-0.0941 -0.40361,-1.23519 c -0.96025,-2.9387 -2.97641,-4.35872 -6.55307,-4.61547 -2.7746,-0.19917 -4.82573,0.37372 -6.17737,1.72536 -1.2581,1.2581 -1.5858,2.50582 -1.11618,4.24987 0.57774,2.14555 1.82373,2.8209 8.63235,4.67889 3.40225,0.92843 6.63582,2.01138 7.47608,2.50381 5.75393,3.37203 5.14007,12.41026 -1.05762,15.57209 -3.12194,1.59269 -9.31488,2.10604 -13.12127,1.08764 z m 28.22901,-0.0726 c -2.11599,-0.7552 -3.01658,-1.59305 -3.9619,-3.68591 -0.72339,-1.60154 -0.74464,-1.90841 -0.74586,-10.76851 l -10e-4,-9.12 h 2.24 2.24 l 0.16,8.81508 c 0.17681,9.74102 0.21043,9.90211 2.33739,11.199 1.1474,0.69961 3.76803,0.84238 5.24178,0.28556 0.99004,-0.37406 2.5063,-1.69948 3.08837,-2.69964 0.24565,-0.4221 0.42694,-3.52718 0.53246,-9.12 l 0.16,-8.48 h 2.24 2.24 v 11.68 11.68 h -2.08 -2.08 l -0.10281,-1.12 c -0.15756,-1.71628 -0.53358,-1.82229 -1.94401,-0.54805 -1.9034,1.71962 -3.13567,2.23775 -5.63318,2.36861 -1.62516,0.0852 -2.70414,-0.0483 -3.93099,-0.48614 z m 87.31704,0.0958 c -6.53193,-1.82579 -9.70515,-8.82971 -7.53721,-16.63616 1.40748,-5.06809 6.33088,-8.1599 12.3382,-7.74815 7.0265,0.48161 11.27213,5.73662 10.76778,13.32774 -0.3639,5.47707 -2.91389,9.2383 -7.33734,10.82255 -1.97127,0.70601 -6.1208,0.82398 -8.23143,0.23402 z m 6.53395,-3.63685 c 2.92496,-1.35421 4.44055,-4.20529 4.44055,-8.35332 0,-2.12876 -0.15594,-3.06779 -0.71741,-4.32 -1.36445,-3.04292 -3.61571,-4.64499 -6.5104,-4.63298 -4.74314,0.0197 -7.55165,3.7996 -7.22483,9.72374 0.21657,3.92586 1.89382,6.69664 4.74166,7.83321 1.28842,0.5142 3.88519,0.3907 5.27043,-0.25065 z m 106.6296,3.77737 c -3.80816,-0.89672 -6.58211,-3.68012 -7.76352,-7.78994 -0.41267,-1.43563 -0.50688,-2.6464 -0.38589,-4.96 0.19917,-3.80828 1.03677,-6.13429 2.99216,-8.30916 2.02628,-2.2537 4.22948,-3.25886 7.60458,-3.46943 5.84547,-0.36468 10.38413,2.42313 11.28595,6.93229 l 0.19712,0.98555 h -2.24605 -2.24604 l -0.75396,-1.52 c -0.95702,-1.92942 -2.80652,-2.96 -5.31203,-2.96 -2.2359,0 -3.55216,0.58629 -4.92995,2.19593 -3.41616,3.99102 -2.68406,11.81681 1.38998,14.85855 0.948,0.70778 3.20948,1.04341 4.89716,0.7268 1.54003,-0.28891 3.512,-2.11765 4.18566,-3.88163 l 0.54218,-1.41965 h 2.19654 c 1.23514,0 2.19651,0.13855 2.19651,0.31656 0,0.6859 -1.29491,3.67057 -2.09072,4.8189 -2.11529,3.05239 -7.18848,4.55162 -11.75968,3.47523 z m 51.58778,-0.0676 c -4.56704,-1.29574 -7.30986,-4.67559 -7.95338,-9.80066 -0.76438,-6.08762 1.77987,-11.45471 6.536,-13.78764 2.22202,-1.08992 6.92576,-1.14273 9.17622,-0.10302 3.78362,1.74802 6.34132,5.66281 6.6008,10.10314 l 0.14461,2.47487 -8.9208,0.0851 -8.92083,0.0851 -0.10227,0.89041 c -0.15994,1.39284 0.81443,3.861 1.94944,4.93794 1.56547,1.48539 2.86355,2.01247 4.93693,2.00462 2.53747,-0.01 4.24812,-0.84126 5.5135,-2.68042 1.01251,-1.47166 1.0143,-1.47255 2.91776,-1.47255 2.27808,0 2.3783,0.2837 0.96861,2.74145 -1.71594,2.99162 -4.70112,4.62586 -8.79776,4.81632 -1.52966,0.0711 -3.18374,-0.0493 -4.04883,-0.29473 z m 9.53948,-15.45917 c -0.20812,-1.84627 -1.58505,-3.87013 -3.29017,-4.83589 -1.47421,-0.83499 -4.06765,-0.97063 -5.67696,-0.2969 -1.40122,0.58659 -3.30947,2.77323 -3.77437,4.325 -0.69411,2.31666 -0.78665,2.28392 6.45623,2.28392 h 6.45164 z m 46.16314,15.41822 c -4.81261,-1.33913 -8.19046,-4.97546 -8.40054,-9.04341 l -0.0795,-1.53868 h 2.36458 2.3646 l 0.3802,1.49742 c 0.54576,2.14939 1.87318,3.71628 3.97638,4.69379 1.50832,0.70101 2.25315,0.83508 4.67424,0.84134 2.44134,0.006 3.12362,-0.1144 4.47955,-0.79255 2.10615,-1.05338 3.04083,-2.47031 3.03927,-4.60733 -0.003,-2.16144 -0.87127,-3.56838 -2.70791,-4.38082 -0.77661,-0.34353 -3.68877,-1.21712 -6.47145,-1.94132 -5.81408,-1.5131 -7.51997,-2.27156 -9.13847,-4.06303 -2.8136,-3.11431 -2.38406,-8.65957 0.8937,-11.53748 4.69078,-4.11855 13.82086,-4.13523 18.49216,-0.0338 1.73382,1.52232 2.81869,3.54047 2.88096,5.35933 l 0.0522,1.52443 h -2.36467 -2.36467 l -0.41428,-1.40305 c -0.83446,-2.82607 -3.5774,-4.51928 -7.31446,-4.51517 -2.43536,0.003 -4.03008,0.57109 -5.37472,1.91571 -1.07958,1.07961 -1.2072,1.37914 -1.2072,2.83372 0,1.35806 0.16163,1.81061 0.9793,2.74188 1.16121,1.32254 2.63334,1.90662 8.9407,3.54728 5.52829,1.43802 6.56099,1.91723 8.23853,3.82303 1.5823,1.79758 2.13584,3.6604 1.93245,6.50316 -0.4162,5.81686 -5.11802,9.05962 -13.05098,9.00102 -1.848,-0.0137 -4.008,-0.20512 -4.8,-0.42549 z m 52.8,-0.0353 c -3.34358,-0.93401 -5.62637,-3.17655 -5.9895,-5.88391 l -0.17476,-1.30288 2.20212,0.0116 2.20214,0.0116 0.64,1.34841 c 0.88422,1.86292 2.74854,2.79091 5.58781,2.78137 2.3407,-0.008 4.54301,-0.81209 5.10637,-1.86473 0.1902,-0.35539 0.34582,-1.14471 0.34582,-1.75405 0,-1.90073 -1.48426,-2.87087 -5.97722,-3.90687 -5.00742,-1.15462 -6.81062,-1.85311 -8.01961,-3.10654 -2.32442,-2.40978 -2.27277,-6.06049 0.11741,-8.30363 1.8711,-1.75597 3.748,-2.31497 7.79942,-2.32291 3.16525,-0.006 3.90909,0.096 5.31786,0.73055 0.9008,0.40576 2.0815,1.19618 2.62377,1.75648 1.07299,1.10868 2.11207,3.2635 1.80967,3.75282 -0.104,0.16825 -1.15258,0.30036 -2.33018,0.29358 -2.0584,-0.0118 -2.16592,-0.052 -2.78278,-1.04 -0.91968,-1.47292 -2.47674,-2.14681 -4.95834,-2.14598 -4.19475,10e-4 -6.13075,2.7124 -3.51114,4.91666 0.86676,0.72934 1.8176,1.03177 7.63616,2.42889 4.5304,1.08782 6.49178,2.67904 6.93354,5.62509 0.48128,3.20933 -1.88637,6.60179 -5.35843,7.6778 -2.4416,0.75667 -7.04336,0.90473 -9.22013,0.29666 z m 42.47504,0.16541 c -5.21069,-1.31574 -8.2121,-5.69272 -8.22342,-11.9922 -0.01,-5.40752 2.415,-9.64197 6.66102,-11.63266 2.44464,-1.14612 6.7591,-1.21664 9.07686,-0.14836 2.08887,0.96277 4.45613,3.27279 5.46467,5.33246 0.88359,1.80451 1.73079,5.88073 1.40093,6.74033 -0.16525,0.43066 -1.36544,0.5094 -8.88838,0.58306 -10.03766,0.0983 -9.65075,-0.0284 -8.80422,2.88349 0.95894,3.29866 3.22777,5.02762 6.5975,5.02762 2.42368,0 4.22013,-0.87855 5.49514,-2.6874 1.01711,-1.44301 1.04764,-1.45854 2.86758,-1.45854 1.01171,0 1.91021,0.11437 1.99657,0.25416 0.27303,0.44172 -0.97056,2.82364 -2.16368,4.14428 -1.69619,1.87747 -4.46339,3.01162 -7.68083,3.14802 -1.42713,0.0605 -3.13702,-0.0269 -3.79974,-0.19426 z m 9.51481,-14.37579 c 0.37888,-0.61305 -0.56668,-3.21433 -1.61257,-4.43621 -0.59187,-0.69149 -1.57066,-1.49192 -2.17507,-1.77873 -2.13146,-1.01144 -5.42231,-0.47412 -7.18899,1.1738 -1.26173,1.17694 -2.57933,4.30289 -2.12413,5.03944 0.2496,0.40386 12.8512,0.40549 13.10076,0.002 z m -282.1223,14.08164 c -0.64486,-0.12559 -1.55689,-0.48024 -2.02672,-0.78809 -1.5991,-1.04777 -1.76083,-2.0214 -1.76083,-10.60072 0,-4.81395 -0.12867,-8.11174 -0.33126,-8.49028 -0.26903,-0.5027 -0.67978,-0.61896 -2.18666,-0.61896 -1.02048,0 -1.95747,0.10205 -2.08221,0.22678 -0.1247,0.12473 -1.08726,0.24957 -2.13894,0.27743 -2.73613,0.0725 -4.60323,1.27653 -5.89603,3.80222 l -0.9649,1.88511 -0.16,7.06423 -0.16,7.06423 -2.16,0.0946 -2.16,0.0946 V 291.7342 279.86431 l 2,0.0953 2,0.0953 0.096,1.84 c 0.0607,1.16466 0.23693,1.83994 0.48,1.83984 0.21123,-9e-5 1.01891,-0.73737 1.79488,-1.63841 0.77594,-0.90103 1.99994,-1.9058 2.72,-2.23281 1.40333,-0.63734 4.18365,-0.81531 4.50915,-0.28862 0.10877,0.176 1.04819,0.32 2.08762,0.32 2.39622,0 2.55238,-0.26393 2.55238,-4.31359 v -3.07566 l 2.16,0.0946 2.16,0.0946 0.0924,3.18208 c 0.0508,1.75014 0.24842,3.37014 0.43917,3.6 0.21907,0.26396 1.09872,0.41793 2.38765,0.41793 h 2.04083 v 1.6 1.6 h -2.016 c -1.14134,0 -2.18259,0.1666 -2.4,0.384 -0.51552,0.51552 -0.54118,14.28091 -0.0288,15.40565 0.44432,0.97519 1.54346,1.49035 3.17978,1.49035 h 1.26493 v 1.55813 c 0,1.55191 -0.005,1.55892 -1.2,1.75647 -1.44336,0.23858 -2.71908,0.20988 -4.29245,-0.0965 z m 146.51171,-0.008 c -0.67139,-0.12991 -1.60739,-0.5223 -2.08,-0.87198 -1.68768,-1.24874 -1.79164,-1.8274 -1.97206,-10.97823 l -0.1672,-8.48 -1.84,-0.096 -1.84,-0.096 v -1.56806 -1.56806 l 1.84,-0.096 1.84,-0.096 0.16,-3.52 0.16,-3.52 h 2.24 2.24 l 0.16,3.52 0.16,3.52 2.32,0.094 2.32,0.094 v 1.57196 1.57196 l -2.32,0.094 -2.32,0.094 -0.0856,7.71764 c -0.10128,9.13239 -0.11763,9.07997 2.91245,9.33125 l 1.81315,0.15036 v 1.51851 c 0,1.50612 -0.01,1.52012 -1.2,1.71685 -1.45302,0.24017 -2.71699,0.20977 -4.34074,-0.1044 z m 108.67994,-0.007 c -0.73741,-0.15596 -1.68723,-0.51057 -2.11066,-0.78802 -1.51126,-0.99021 -1.63004,-1.7034 -1.81484,-10.89547 l -0.1737,-8.64 -1.84,-0.096 -1.84,-0.096 v -1.56806 -1.56807 l 1.84,-0.096 1.84,-0.096 0.16,-3.52001 0.16,-3.52 h 2.24 2.24 l 0.16,3.52 0.16,3.52001 2.24,0.16 2.24,0.16 v 1.44 1.44 l -2.24,0.16 -2.24,0.16 -0.0857,7.76883 -0.0857,7.76884 0.79116,0.79116 c 0.63248,0.63248 1.11501,0.79117 2.4057,0.79117 h 1.61456 v 1.42111 c 0,0.78161 -0.13174,1.50254 -0.29277,1.60206 -0.5591,0.34554 -4.03472,0.46229 -5.36803,0.18032 z M 424.44082,303.3738 c -0.12432,-0.12431 -0.22602,-6.45752 -0.22602,-14.0738 0,-10.72682 -0.0901,-13.90613 -0.4,-14.10667 -0.22,-0.14239 -2.632,-0.33089 -5.36,-0.41889 l -4.96,-0.16 v -1.92 -1.92 l 13.2,-0.0835 13.2,-0.0836 v 2.08356 2.08354 h -4.92083 c -3.72163,0 -5.00749,0.10446 -5.27654,0.42865 -0.24602,0.29643 -0.38148,4.71352 -0.4392,14.32 l -0.0834,13.89136 -2.25398,0.0927 c -1.23968,0.051 -2.35568,-0.009 -2.48,-0.13333 z m 19.76541,-0.18631 c -0.0879,-0.22902 -0.12192,-5.52764 -0.0756,-11.77472 l 0.0842,-11.35832 h 2.24 2.24 v 11.68 11.68 l -2.16438,0.0947 c -1.55271,0.0679 -2.20957,-0.023 -2.32419,-0.32168 z m 37.76092,0.002 c -0.0874,-0.2281 -0.1214,-7.61472 -0.0756,-16.41472 l 0.0833,-16 h 2.24 2.24 l 0.0849,9.2 c 0.0783,8.4856 0.12803,9.19989 0.64,9.19856 0.30531,-6.4e-4 2.54585,-2.08879 4.97901,-4.64 l 4.4239,-4.63848 2.7761,0.0112 2.77609,0.0112 -4.24,4.13354 c -2.332,2.27345 -4.24,4.28676 -4.24,4.47404 0,0.18727 2.16365,3.58127 4.8081,7.54222 3.37219,5.05095 4.67728,7.25193 4.37005,7.36982 -0.24093,0.0925 -1.49607,0.12534 -2.78925,0.0731 l -2.3512,-0.095 -3.54842,-5.59747 c -1.95165,-3.0786 -3.76013,-5.63247 -4.01885,-5.67526 -0.25875,-0.0428 -1.11843,0.48386 -1.91043,1.17033 l -1.44,1.24813 -0.16,4.42713 -0.16,4.42714 -2.16438,0.0947 c -1.54858,0.0678 -2.2096,-0.0233 -2.32327,-0.32 z M 684.3748,291.74944 v -11.85462 h 2.08 2.08 v 1.44 c 0,1.84873 0.58105,1.89424 2.29552,0.17978 1.66592,-1.66592 3.84944,-2.39356 6.53561,-2.17794 2.31133,0.18553 4.52816,1.29153 5.23469,2.61164 0.58359,1.09045 1.28848,1.04332 2.43431,-0.16279 1.74588,-1.83771 3.17062,-2.36611 6.37987,-2.36611 3.24275,0 5.00707,0.66391 6.19401,2.33082 1.18765,1.66792 1.3528,3.33665 1.25732,12.7046 l -0.0913,8.96 h -2.08 -2.08 l -0.16,-8.8 c -0.1384,-7.61191 -0.23635,-8.93968 -0.72541,-9.83459 -0.74698,-1.36677 -2.06554,-2.00553 -4.13869,-2.00492 -2.30093,6.4e-4 -3.7439,0.78081 -4.73417,2.55951 -0.78423,1.40854 -0.80522,1.62174 -0.96173,9.76 l -0.16,8.32 h -2.08 -2.08 l -0.16,-8.8 c -0.1384,-7.61191 -0.23635,-8.93968 -0.72541,-9.83459 -1.6847,-3.08263 -6.79821,-2.57791 -8.82598,0.87115 -0.84448,1.4364 -0.84938,1.48322 -1.00861,9.60344 l -0.16,8.16 -2.16,0.0946 -2.16,0.0946 z m -240.25565,-18.96029 0.0957,-2.01434 h 2.24 2.24 v 1.92 1.92 l -2.33565,0.0943 -2.33564,0.0943 z m 41.41056,-19.29193 c -11.35913,-1.61616 -20.48668,-5.98117 -27.72265,-13.2576 -6.22087,-6.25564 -10.20845,-14.08886 -12.16845,-23.90366 -0.87603,-4.38666 -1.20877,-13.94838 -0.64678,-18.58479 3.30601,-27.27413 24.0463,-44.57636 53.43398,-44.57636 4.19677,0 9.61322,0.56667 13.87094,1.45118 3.04436,0.63244 8.25485,2.2494 8.93901,2.77402 0.50054,0.38383 0.39046,1.04254 -1.47459,8.8227 -1.10851,4.62434 -2.10106,8.49346 -2.20563,8.59804 -0.10458,0.10458 -1.24103,-0.18692 -2.52544,-0.64777 -7.89155,-2.83154 -17.97901,-3.35982 -25.04669,-1.31169 -10.0624,2.91597 -17.1272,10.42342 -19.86864,21.11352 -1.02941,4.01412 -1.36611,10.19334 -0.80038,14.68801 1.69718,13.48356 9.695,22.8149 22.30432,26.02324 1.73392,0.44118 3.50934,0.55537 8.43609,0.54257 6.90045,-0.0179 10.26519,-0.53269 15.4257,-2.35995 1.45987,-0.51692 2.7408,-0.83951 2.84649,-0.71686 0.18564,0.21538 3.18679,16.18594 3.17408,16.89078 -0.007,0.36552 -4.57891,2.01393 -7.84627,2.82872 -1.056,0.26334 -3.72,0.78733 -5.92,1.16442 -5.21136,0.89325 -17.39126,1.14638 -22.20509,0.46148 z m 170.09203,-0.0381 c -19.67388,-2.67155 -33.41923,-14.11112 -38.44003,-31.99177 -3.82934,-13.63754 -2.41897,-29.94426 3.67866,-42.53252 6.66054,-13.75038 17.36518,-22.03995 32.31443,-25.02398 4.4241,-0.8831 14.51066,-0.7863 19.01875,0.18252 3.69238,0.79352 8.14986,2.40873 10.88086,3.94277 11.46631,6.44078 18.62861,18.81487 20.524,35.45869 0.37741,3.31412 0.23562,13.848 -0.21212,15.76 l -0.20612,0.88 h -32.09651 c -17.65308,0 -32.32428,0.0874 -32.60268,0.19424 -0.66519,0.25525 -0.66535,2.25635 0,5.49925 1.99859,9.74834 8.95132,16.48823 19.8967,19.28758 7.98739,2.04283 22.30416,1.24295 32.64694,-1.82398 2.16112,-0.64083 3.97424,-1.10933 4.02919,-1.04112 0.055,0.0682 0.78012,3.36403 1.61148,7.32403 0.83136,3.96 1.58791,7.51635 1.68122,7.903 0.20947,0.86803 -0.65594,1.27163 -6.11581,2.85225 -8.74848,2.53266 -17.24928,3.66454 -27.1263,3.61184 -3.39299,-0.0181 -7.65997,-0.23536 -9.48214,-0.4828 z m 25.6592,-62.84429 c -0.14934,-8.43287 -4.6424,-16.32269 -11.02016,-19.35147 -2.89619,-1.37539 -6.02396,-2.07556 -9.30505,-2.08297 -8.75651,-0.0198 -15.76602,4.64185 -19.96807,13.27966 -1.9343,3.97617 -3.54563,10.39534 -2.79731,11.14368 0.11859,0.11856 9.87459,0.17856 21.68,0.13334 l 21.46445,-0.0822 z m 58.77386,62.72491 c -6.09683,-1.32262 -9.59296,-3.12556 -13.28973,-6.85351 -2.94413,-2.96893 -4.68458,-6.0923 -6.05613,-10.86807 -1.66848,-5.80974 -1.77414,-7.95366 -1.77414,-35.99572 0,-19.6708 -0.0917,-25.93128 -0.384,-26.22361 -0.27405,-0.27405 -2.28979,-0.384 -7.04,-0.384 h -6.656 v -8.8 -8.8 h 6.70873 c 6.30525,0 6.72868,-0.0372 7.04,-0.61896 0.20887,-0.39025 0.33127,-4.4626 0.33127,-11.02112 0,-5.72118 0.10829,-10.46908 0.24067,-10.55088 0.40026,-0.24739 21.58214,-5.32904 22.21306,-5.32904 0.55904,0 0.58627,0.6227 0.58627,13.40082 0,11.01589 0.0788,13.46617 0.44243,13.76801 0.31914,0.26485 3.61939,0.34267 11.84016,0.27918 l 11.3977,-0.088 -10e-5,8.96 -6e-5,8.96 H 753.89486 742.1348 l 0.003,24.48 c 0.003,22.09316 0.0569,24.71327 0.55789,26.87244 1.09641,4.72537 2.95427,7.41342 6.24332,9.03312 2.00733,0.98852 2.38176,1.06054 5.98861,1.15193 2.38807,0.0605 4.8184,-0.0778 6.40739,-0.36457 1.408,-0.25413 2.65114,-0.37 2.76253,-0.25749 0.11143,0.11252 0.25543,4.16173 0.32,8.99824 l 0.11747,8.79367 -2.08,0.56769 c -5.74259,1.5673 -17.18236,2.02177 -22.4,0.88988 z m -534.38406,-1.29013 c -20.80848,-2.176 -35.70438,-15.68953 -41.10655,-37.29178 -1.43929,-5.75546 -1.88233,-9.70561 -1.88233,-16.783 0,-13.44303 3.0015,-24.54187 9.15447,-33.85101 6.87975,-10.40874 16.5076,-16.97964 28.79818,-19.65444 4.44557,-0.96749 16.07808,-1.05646 20.49997,-0.1568 8.91488,1.8138 16.53747,5.7762 22.87648,11.89172 3.81799,3.68338 6.55785,7.35553 8.99467,12.05526 4.70834,9.08066 6.72917,18.00444 6.72917,29.71527 0,11.26034 -1.94041,20.22128 -6.23732,28.80437 -1.50765,3.01155 -3.97575,7.03563 -4.31516,7.03563 -0.0972,0 -2.01435,-1.84169 -4.26031,-4.09264 l -4.08355,-4.09264 1.58128,-3.10584 c 3.68525,-7.23833 5.46334,-15.22794 5.46334,-24.54888 0,-11.34625 -2.67736,-20.93664 -8.12403,-29.1005 -7.3607,-11.03277 -18.4451,-16.40463 -31.70424,-15.36493 -12.49986,0.98016 -22.53827,8.39252 -28.61989,21.1329 -3.25658,6.8222 -4.90315,14.65771 -4.90315,23.33253 0,11.21579 2.79584,21.10719 8.30734,29.39046 3.41041,5.12552 9.15363,10.05804 14.57153,12.51464 7.53165,3.41501 18.06167,3.61649 26.33129,0.50381 l 1.98462,-0.74701 3.80413,3.81801 c 4.26801,4.28358 4.22167,3.8554 0.58246,5.38157 -2.74961,1.1531 -6.09234,2.08077 -9.79165,2.71736 -3.5206,0.60583 -11.13502,0.86359 -14.65075,0.49594 z m 94.38406,0.006 c -12.78753,-1.15911 -23.12891,-6.10558 -29.00097,-13.87169 -1.92459,-2.54537 -4.36946,-7.61982 -5.37952,-11.16546 -0.88613,-3.11061 -1.77691,-7.84429 -1.77848,-9.45099 l -9.6e-4,-1.04722 5.82422,0.0872 5.82422,0.0872 0.3676,2.56 c 1.44709,10.07764 6.92107,16.99538 16.51466,20.8704 7.14103,2.88439 18.16333,3.24342 26.21027,0.85373 l 1.67575,-0.49765 3.79163,3.78176 c 2.0854,2.07997 3.79164,3.88019 3.79164,4.00048 0,0.27894 -4.324,1.71126 -7.04,2.33199 -6.0345,1.37918 -14.85926,1.9987 -20.8,1.46021 z m 66.71031,-0.39696 c -0.084,-0.22218 -0.18813,-25.89196 -0.23149,-57.04396 l -0.0788,-56.64 -19.04,-0.16 -19.04,-0.16 -0.0846,-9.84 -0.0846,-9.84 h 38.56924 38.56925 l -0.0846,9.84 -0.0846,9.84 -7.2,0.16 -7.2,0.16 -0.16,56.96 -0.16,56.96 -11.76851,0.084 c -9.244,0.0659 -11.80128,-0.003 -11.92118,-0.32 z m 42.87744,-0.004 c -0.0837,-0.22 -0.11517,-21.928 -0.07,-48.24 l 0.0822,-47.84 11.92,-0.0839 11.92,-0.0839 v 48.32389 48.3239 H 421.6447 c -9.18553,0 -11.88425,-0.0899 -12.0022,-0.4 z m 121.21155,-70.24 0.0807,-70.64 11.76,-0.0839 11.76,-0.0839 v 43.17777 c 0,23.74778 0.0874,43.40555 0.19424,43.68395 0.39466,1.02844 1.04403,0.41986 3.47203,-3.25383 1.36675,-2.068 8.40381,-11.644 15.63789,-21.28 l 13.1529,-17.52 h 14.21065 c 13.38202,0 14.18506,0.032 13.77146,0.54892 -0.24154,0.3019 -8.03968,8.95982 -17.32922,19.23983 -9.28953,10.28 -17.02649,18.94583 -17.19325,19.2574 -0.24678,0.46111 3.48074,5.85547 20.0392,29.00017 l 20.3424,28.43368 -14.34915,0.0834 c -7.89203,0.0459 -14.49331,0.0282 -14.66953,-0.0394 -0.1762,-0.0676 -6.5122,-9.64283 -14.08,-21.27837 -9.22666,-14.18605 -13.93847,-21.15719 -14.3025,-21.1606 -0.52243,-0.005 -7.75085,8.04609 -8.5239,9.49389 -0.27015,0.50594 -0.37322,5.16735 -0.37322,16.88 v 16.18104 h -11.8407 -11.84074 z m -191.36413,49.11533 -4.23593,-4.24467 -0.0868,-3.99533 c -0.0777,-3.57251 -0.17901,-4.19371 -0.95773,-5.8699 -1.92054,-4.1339 -4.7536,-6.82028 -9.64835,-9.14886 -3.95834,-1.8831 -8.74519,-3.26344 -20.05325,-5.78257 -11.69982,-2.60641 -17.42764,-4.34624 -22.53955,-6.8464 -7.43258,-3.63517 -11.6066,-8.06391 -13.5978,-14.4276 -0.95551,-3.05373 -1.23501,-10.18367 -0.52911,-13.49699 1.05943,-4.97266 3.09019,-8.7012 6.7734,-12.43617 7.13665,-7.23693 18.80795,-10.99883 32.96,-10.62368 8.69129,0.2304 14.82877,1.79782 20.769,5.30408 8.19561,4.83755 13.47337,13.32676 14.90688,23.97756 0.19577,1.45465 0.26828,2.78665 0.16115,2.96 -0.24483,0.39614 -11.25005,0.42718 -11.49402,0.0324 -0.0961,-0.15552 -0.32317,-1.32917 -0.50454,-2.6081 -0.70483,-4.96975 -2.68835,-9.03724 -6.07847,-12.46487 -4.36089,-4.40913 -9.94617,-6.71131 -17.76216,-7.32131 -13.3265,-1.04008 -24.10221,3.70006 -27.40594,12.05565 -0.60105,1.52015 -0.72279,2.4565 -0.73603,5.6614 -0.0144,3.48738 0.0604,4.00161 0.81512,5.6 2.25023,4.76588 7.0038,8.24435 14.88459,10.89195 3.50375,1.17711 15.65235,4.10881 24.35209,5.87666 11.3579,2.308 19.00613,6.84145 23.71736,14.05833 3.04621,4.66633 4.07011,8.82193 3.7976,15.41306 -0.0966,2.33668 -0.40432,5.00153 -0.70208,6.08 -0.58787,2.12914 -2.05597,5.6 -2.36871,5.6 -0.1104,0 -2.10691,-1.9101 -4.43667,-4.24467 z m 70.22205,-92.9248 c -0.11946,-0.11947 -0.21722,-4.58522 -0.21722,-9.92388 v -9.70667 h 12.00464 12.00461 l -0.0846,9.84 -0.0846,9.84 -11.70278,0.0839 c -6.43655,0.0461 -11.80055,-0.0139 -11.92,-0.13334 z" + id="path1185" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/images/peertube_logo.svg b/images/peertube_logo.svg new file mode 100644 index 00000000..b4a60996 --- /dev/null +++ b/images/peertube_logo.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg height="682.68799" viewBox="2799 -911 512 682.688" width="512" xmlns="http://www.w3.org/2000/svg"><g stroke-width="32"><path d="m2799-911v341.344l256-170.656" fill="#211f20"/><path d="m2799-569.656v341.344l256-170.656" fill="#737373"/><path d="m3055-740.344v341.344l256-170.656" fill="#f1680d"/></g></svg> \ No newline at end of file diff --git a/images/phpmyadmin_logo.svg b/images/phpmyadmin_logo.svg new file mode 100644 index 00000000..95d919f3 --- /dev/null +++ b/images/phpmyadmin_logo.svg @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" version="1.1" width="3890" height="2168" id="svg2"> + <metadata id="metadata8"> + <rdf:RDF> + <cc:Work rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> + <dc:title/> + </cc:Work> + </rdf:RDF> + </metadata> + <defs id="defs6"/> + <g id="g5" style="fill:#cccccc"> + <path d="m 2889.39,6.3480122 -2.04,-4.07 c -1.01,-1.01 -2.03,-2.04 -4.06,-2.04 l -4.08,1.03 c -2.03,2.03 -3.05,3.05 -3.05,5.08 L 2789.64,1572.695 l 13.24,-2.035 83.46,-1523.70199 99.75,163.88 -1.02,0 c 75.32,221.88 106.87,458.02 94.66,708.41003 l 6.11,9.16 98.73,175.05996 6.1,6.11 c 151.66,133.336 321.63,222.907 509.94,268.707 l 45.8,74.309 6.11,2.031 1.02,-2.031 -866.19,-1416.82599 2.04,-29.52" id="path14"/> + <path d="m 2858.86,559.02801 c 106.87,218.84 145.54,549.62999 117.05,992.39199 l 416.29,-50.894 z" id="path18"/> + <path d="m 3807.48,1520.881 c 42.74,-5.086 70.22,-14.246 82.44,-27.476 l -2178.16,265.656 -1.02,0 c 1.02,90.586 41.73,161.836 121.12,212.723 21.37,15.269 43.77,26.465 64.12,33.59 19.34,-22.387 40.72,-38.676 66.17,-53.946 l 1.01,0 c 228,-138.422 566.94,-159.8 1014.78,-65.136 l 5.09,1.011 c 48.86,10.18 97.71,22.399 143.52,36.645 13.22,2.035 24.42,-2.035 33.58,-10.18 16.29,-12.215 36.65,-21.375 64.13,-27.476 l 0,-1.02 c 72.27,-128.25 169.97,-222.906 292.12,-284.996 84.48,-41.727 182.19,-69.215 291.1,-79.395" id="path20"/> + <path d="M 2761.15,1560.585 2860.89,31.798012 C 2716.36,589.56801 2484.29,1110.698 2165.71,1594.167 l 595.44,-33.582" id="path22"/> + <path d="m 2200.32,329.008 -4.07,-2.04 -4.07,1.02 -2.04,5.08 -82.44,1323.18799 12.21,-1.019 82.45,-1322.169 -2.04,-4.06" id="path24"/> + <path d="m 2084.29,1627.756 0,0 87.53,-1290.608 -461.08,1330.308 373.55,-39.7" id="path26"/> + </g> + <g id="g13" style="fill:none;stroke:#cccccc;stroke-width:12;stroke-linecap:round;stroke-linejoin:round"> + <path d="m 2102.61,2057.9534 c -115.02,54.9606 -198.48,64.1207 -251.41,30.5387 -52.93,-35.6247 -134.36,-27.4847 -244.28,24.4219" id="path34"/> + <path d="m 2372.33,2066.093 c -21.37,-7.125 -44.78,-12.211 -69.21,-14.25 -49.87,-4.066 -109.93,15.27 -180.16,57.0042 -70.23,42.746 -154.71,59.0351 -255.48,49.8711" id="path36"/> + <path d="m 3000.34,1962.273 c -484.5,-99.742 -833.61,-76.336 -1047.35,71.25" id="path38"/> + <path d="m 3305.69,2010.117 c -21.38,-8.145 -44.79,-13.235 -69.22,-14.254 -49.87,-4.067 -109.92,15.269 -180.15,57.004 -70.23,41.7262 -154.71,58.0114 -255.48,49.8708" id="path40"/> + <path d="m 2655.29,341.21801 c -49.88,-30.54 -101.78,-22.39 -155.73,25.44 -46.82,-47.83 -95.67,-55.98 -146.57,-25.44" id="path42" style="stroke-width:29"/> + <path d="m 2542.31,170.21801 c -50.89,-30.53 -100.76,-18.32 -151.66,36.64 -49.88,-54.96 -100.76,-67.17 -151.66,-36.64" id="path44" style="stroke-width:29"/> + </g> + <g style="fill:#6c78af" id="g33"> + <path d="m 56.770404,1763.8603 134.914516,0 c 40.53785,0 70.3051,11.5406 89.30315,34.6149 18.99058,23.0812 25.15303,55.2422 18.48477,96.4878 -2.73388,16.9207 -7.61168,32.4501 -14.63698,46.5933 -7.02825,14.1442 -16.30891,27.067 -27.84598,38.7573 -13.71822,14.0684 -29.07355,24.148 -46.07783,30.2307 -17.00335,6.0818 -38.74881,9.1232 -65.23042,9.1232 l -60.093245,0 -14.951878,92.5154 -70.16450702,0 56.29840402,-348.3226 z m 61.252276,55.1047 -23.613063,146.1033 42.675303,0 c 28.28742,0 49.25184,-5.7744 62.90101,-17.3383 13.63797,-11.5649 22.6337,-30.807 26.98842,-57.7355 4.19709,-25.968 1.75658,-44.2941 -7.2996,-54.9935 -9.06329,-10.6883 -26.92099,-16.036 -53.57751,-16.036 l -48.07456,0" id="path66"/> + <path d="m 378.24196,1671.3451 69.63516,0 -14.95189,92.5152 61.94982,0 c 38.98987,0 66.01185,7.3901 81.07593,22.1571 15.06891,14.7762 19.95224,38.5804 14.64264,71.4329 l -26.22037,162.2172 -70.68973,0 24.9538,-154.3893 c 2.84147,-17.5516 1.46456,-29.4876 -4.12427,-35.815 -5.58913,-6.3193 -17.28356,-9.4871 -35.06873,-9.4871 l -55.57891,0 -32.27423,199.6914 -69.64729,0 56.29807,-348.3224" id="path68"/> + <path d="m 666.43774,1763.8603 134.9135,0 c 40.54695,0 70.30511,11.5406 89.30319,34.6149 18.99454,23.0812 25.15404,55.2422 18.4898,96.4878 -2.7339,16.9207 -7.61577,32.4501 -14.63297,46.5933 -7.03329,14.1442 -16.32202,27.067 -27.85103,38.7573 -13.72229,14.0684 -29.07657,24.148 -46.08084,30.2307 -17.00032,6.0818 -38.74478,9.1232 -65.23548,9.1232 l -60.08435,0 -14.95188,92.5154 -70.16093,0 56.29099,-348.3226 z m 61.26036,55.1047 -23.61306,146.1033 42.6753,0 c 28.28641,0 49.2478,-5.7744 62.88888,-17.3383 13.641,-11.5649 22.64179,-30.807 26.99549,-57.7355 4.19406,-25.968 1.7576,-44.2941 -7.30364,-54.9935 -9.06329,-10.6883 -26.92099,-16.036 -53.56841,-16.036 l -48.07456,0" id="path70"/> + </g> + <g style="fill:#f89c0e" id="g65"> + <path d="m 1027.7488,1597.3243 134.9473,0 59.2813,323.8687 163.9729,-323.8687 134.4328,0 -68.203,422.055 -90.0955,0 60.5624,-328.7447 -165.335,328.7447 -97.63,0 -62.0922,-332.1897 -44.4691,332.1897 -93.58345,0 68.21155,-422.055" id="path72"/> + <path d="m 1682.3349,1951.0787 68.129,0 39.0484,-241.6556 84.6928,0 -48.7474,301.634 c -6.6176,41.0085 -21.4426,71.3829 -44.4508,91.1237 -23.0089,19.7312 -54.9295,29.6038 -95.7507,29.6038 l -166.0776,0 10.1515,-62.7878 151.4988,0 c 16.2574,0 29.3646,-3.7991 39.3223,-11.39 9.9443,-7.6043 16.0994,-18.6108 18.427,-33.0342 l 0.8443,-5.1933 -74.9653,0 c -47.9513,0 -80.6531,-9.1406 -98.0934,-27.4219 -17.4525,-18.2801 -22.7167,-48.7649 -15.8297,-91.453 l 30.891,-191.0813 83.7372,0 -29.8633,184.7645 c -3.7745,23.3729 -2.642,38.6968 3.4343,45.9753 6.0641,7.2784 20.5937,10.9158 43.6016,10.9158" id="path74"/> + <path d="m 2102.3044,1597.3243 97.5197,0 118.1874,422.055 -102.2734,0 -23.907,-100.4601 -189.9554,0 -55.1868,100.4601 -97.5321,0 253.1476,-422.055 z m 31.6507,83.8058 -90.1808,162.444 130.2183,0 -40.0375,-162.444" id="path76"/> + <path d="m 2637.3031,2019.3793 -162.6964,0 c -49.1642,0 -85.2663,-13.9786 -108.3193,-41.9409 -23.0404,-27.9573 -30.5053,-66.9321 -22.4309,-116.9135 3.316,-20.4913 9.2287,-39.3092 17.7509,-56.4463 8.5217,-17.1419 19.771,-32.7965 33.7592,-46.9712 16.6286,-17.0415 35.3095,-29.2498 56.0305,-36.6239 20.7209,-7.3752 47.0449,-11.0604 78.9594,-11.0604 l 72.6621,0 18.1132,-112.0988 84.3865,0 -68.2152,422.055 z m -73.6376,-66.4629 28.5697,-176.7241 -51.2224,0 c -34.3524,0 -59.8397,6.9489 -76.4874,20.8321 -16.6223,13.8929 -27.5723,37.0269 -32.8017,69.397 -5.0795,31.4221 -2.0777,53.6898 9.0062,66.8122 11.0837,13.1222 32.7053,19.6828 64.8648,19.6828 l 58.0708,0" id="path78"/> + <path d="m 2761.0228,1709.4231 325.2334,0 c 47.155,0 79.7016,8.9067 97.6259,26.6992 17.9129,17.8022 23.6511,46.7028 17.1903,86.702 l -31.7718,196.555 -85.3299,0 30.0434,-185.9259 c 3.6903,-22.7947 2.5585,-37.8305 -3.3836,-45.1151 -5.966,-7.2785 -20.0182,-10.9208 -42.1807,-10.9208 l -47.5103,0 -39.1073,241.9618 -86.604,0 39.1073,-241.9618 -98.9777,0 -39.1073,241.9618 -85.3298,0 50.1021,-309.9562" id="path80"/> + <path d="m 3389.6515,1674.2008 -88.8214,0 12.4228,-76.8765 88.8214,0 -12.4228,76.8765 z m -55.7924,345.1785 -88.8215,0 50.0899,-309.9562 88.8214,0 -50.0898,309.9562" id="path82"/> + <path d="m 3457.2112,1709.4231 159.3518,0 c 48.1596,0 81.1348,8.7634 98.9115,26.2691 17.7775,17.5156 23.3935,46.5596 16.8359,87.1321 l -31.7597,196.555 -84.705,0 30.1524,-186.5005 c 3.7421,-23.1817 2.4511,-38.2189 -3.8732,-45.1102 -6.325,-6.9 -20.6913,-10.3511 -43.0866,-10.3511 l -68.1168,0 -39.1072,241.9618 -84.6928,0 50.0897,-309.9562" id="path84"/> + </g> +</svg> \ No newline at end of file diff --git a/images/pihole_logo.png b/images/pihole_logo.png new file mode 100644 index 00000000..178c085d Binary files /dev/null and b/images/pihole_logo.png differ diff --git a/images/piwigo.org.svg b/images/piwigo.org.svg new file mode 100644 index 00000000..582608ff --- /dev/null +++ b/images/piwigo.org.svg @@ -0,0 +1,26 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 767.6 191"> + <defs> + <style> + .cls-1 { + fill: #3c3c3c; + } + + .cls-2 { + fill: #f70; + } + + .cls-3 { + fill: #fff; + } + </style> + </defs> + <g id="Symbole_23_1" data-name="Symbole 23 – 1" transform="translate(-577 -446.516)"> + <path id="Tracé_3456" data-name="Tracé 3456" class="cls-1" d="M48.953-42.57c1.466-.943,4.51-.83,4.51-.83H64.8a75.758,75.758,0,0,0,28.1-5.1A46.707,46.707,0,0,0,113.6-64q7.8-10.4,7.8-25.6,0-15.4-7.3-25.8a43.832,43.832,0,0,0-19.7-15.5A72.474,72.474,0,0,0,66.6-136H26.286s-4.763-.041-7.4,1.925-2.483,5.564-2.483,5.564V-3.588a3.986,3.986,0,0,0,.77,2.735,4.788,4.788,0,0,0,2.9.853H43.957a4.221,4.221,0,0,0,2.869-.853c.911-.972.774-3.035.774-3.035V-39.627A3.519,3.519,0,0,1,48.953-42.57ZM65.6-110.8q11,0,17.1,5.6t6.1,16.4q-.2,9.4-6.5,14.9T66-68.4H50.653a3.693,3.693,0,0,1-2.331-.742,3.813,3.813,0,0,1-.722-2.364v-37.132a2.062,2.062,0,0,1,.722-1.716,5.2,5.2,0,0,1,2.5-.446Z" transform="translate(735 592.516)"/> + <path id="Tracé_3455" data-name="Tracé 3455" class="cls-1" d="M152-110.4a16.763,16.763,0,0,0,12.3-5.1,16.533,16.533,0,0,0,5.1-12.1,16.763,16.763,0,0,0-5.1-12.3A16.763,16.763,0,0,0,152-145a16.533,16.533,0,0,0-12.1,5.1,16.763,16.763,0,0,0-5.1,12.3,16.533,16.533,0,0,0,5.1,12.1A16.533,16.533,0,0,0,152-110.4ZM166.744-1.253A5.163,5.163,0,0,0,167.8-4.6v-84.4s.2-3.8-1.622-5.8S160.525-97,160.525-97H146.1s-4.891.167-7.317,2.8-2.387,7.732-2.387,7.732V-6.591s-.182,3.621,1.4,5.269S142.746,0,142.746,0h20.475A6.231,6.231,0,0,0,166.744-1.253Zm130.162-.5c2.2-1.778,3.011-5.364,3.011-5.364L327.88-92.949s.738-1.925,0-2.938S324.926-97,324.926-97H302.113a8.712,8.712,0,0,0-3.818,1.113,5.151,5.151,0,0,0-1.792,2.841L285.676-45.3a1.478,1.478,0,0,1-1.531,1.429,1.478,1.478,0,0,1-1.531-1.429L270.8-92.243a6.42,6.42,0,0,0-1.879-3.643,7.68,7.68,0,0,0-4.2-1.113H242.978a8.845,8.845,0,0,0-4.06,1.113,5.149,5.149,0,0,0-1.784,3.05l-9.2,44.235s-.213,1.2-2.768,2.041-3.5-2.041-3.5-2.041l-9.779-43.51s-.312-4.106-2.534-5.735-6.353-.78-6.353-.78L188.87-94.519s-4.51,1.1-6.014,3.812,0,7.019,0,7.019L207.17-7.6s.641,3.954,3.141,5.855S217.169,0,217.169,0h13.64s3.62-.012,5.709-1.749,2.647-5.2,2.647-5.2L250.631-47.5a2.736,2.736,0,0,1,2.768-2.381,2.847,2.847,0,0,1,2.844,2.381L267.781-7.66s.468,4,3.092,5.911S278.279,0,278.279,0H291.1S294.7.029,296.906-1.749ZM357.2-110.4a16.762,16.762,0,0,0,12.3-5.1,16.533,16.533,0,0,0,5.1-12.1,16.763,16.763,0,0,0-5.1-12.3,16.763,16.763,0,0,0-12.3-5.1,16.533,16.533,0,0,0-12.1,5.1,16.763,16.763,0,0,0-5.1,12.3,16.533,16.533,0,0,0,5.1,12.1A16.533,16.533,0,0,0,357.2-110.4ZM371.326-1.749C373.259-3.477,373-6.91,373-6.91V-90.436s-.11-3.058-1.541-4.7A7.042,7.042,0,0,0,367.277-97H348.615s-3.556.212-5.31,1.978-1.7,5.084-1.7,5.084V-8.3s-.307,4.473,1.314,6.546S348.085,0,348.085,0h17.184S369.393-.021,371.326-1.749ZM485.84-95.233c.863,1.373.863,6.905.863,6.905L486.4,3.8a38.992,38.992,0,0,1-6.5,22.4,41.1,41.1,0,0,1-18.4,14.7Q449.6,46,434,46q-8,0-21.2-3a74.246,74.246,0,0,1-16.5-5.607,5.014,5.014,0,0,1-2.827-3.655,7.006,7.006,0,0,1,.628-4.314l4.138-9.684a6.978,6.978,0,0,1,3.656-3.64c2.566-.928,4.017-1.092,6.61-.073A64.9,64.9,0,0,0,432.2,20.8q10.2,0,16.5-4.7A14.831,14.831,0,0,0,455,3.6s.809-5.015-3.641-5.365S444.809,2.115,437.2,2.2q-22.6,0-36-13.2T387.8-48.4q0-24.2,13.6-37.9t37-13.7a38.162,38.162,0,0,1,13.8,2.7c4.667,1.8,8.45,7.575,13,7.7s-.373-7.168,5.2-7.2c3.383-.019,7.234-.007,11.084,0C483.469-96.8,484.977-96.606,485.84-95.233ZM440.6-22.8c4.4,0,8-.854,11.6-5.134S455-39.917,455-39.917v-16.46s1-8.867-2.8-13.473-7.067-4.95-12.4-4.95a16.918,16.918,0,0,0-14.2,7.2q-5.4,7.2-5.4,19,0,12,5.4,18.9T440.6-22.8Zm169-25.6q0,15.6-6.9,27A45.743,45.743,0,0,1,583.6-3.9q-12.2,6.1-27.8,6.1Q540,2.2,528-3.7a43.275,43.275,0,0,1-18.7-17.4q-6.7-11.5-6.7-27.7,0-15.6,6.9-27.2a46.151,46.151,0,0,1,19-17.8q12.1-6.2,27.7-6.2,15.8,0,27.9,6.1a44.223,44.223,0,0,1,18.8,17.7Q609.6-64.6,609.6-48.4ZM556-23.6q9.6,0,15.4-6.8t5.8-18q0-11.2-5.7-18.4A18.3,18.3,0,0,0,556.4-74q-9.8,0-15.6,6.9T535-48.8q0,11.4,5.7,18.3T556-23.6Z" transform="translate(735 591.516)"/> + <path id="Tracé_3467" data-name="Tracé 3467" class="cls-2" d="M36.12,0h64.088a36.12,36.12,0,0,1,36.12,36.12v84.911L131.486,131.4l-10.5,4.93H36.12A36.12,36.12,0,0,1,0,100.208V36.12A36.12,36.12,0,0,1,36.12,0Z" transform="translate(577 592.285) rotate(-90)"/> + <path id="Tracé_3469" data-name="Tracé 3469" class="cls-2" d="M24.641,0C38.167,0,49.59,10.892,49.59,24.418S38.167,48.983,24.641,48.983-36.4,9.469-35.316,9.463s-27.4-.076,9.176,0S8.9.355,24.641,0Z" transform="translate(663.719 446.516)"/> + <circle id="Ellipse_69" data-name="Ellipse 69" class="cls-3" cx="8.557" cy="8.557" r="8.557" transform="translate(680.344 461.978)"/> + <circle id="Ellipse_67" data-name="Ellipse 67" class="cls-3" cx="40.426" cy="40.426" r="40.426" transform="translate(604.738 483.695)"/> + <circle id="Ellipse_68" data-name="Ellipse 68" class="cls-1" cx="28.623" cy="28.623" r="28.623" transform="translate(616.541 495.499)"/> + </g> +</svg> diff --git a/images/piwigo.png b/images/piwigo.png deleted file mode 100644 index 94c048de..00000000 Binary files a/images/piwigo.png and /dev/null differ diff --git a/images/piwigo_logo.png b/images/piwigo_logo.png new file mode 100644 index 00000000..e33c4a11 Binary files /dev/null and b/images/piwigo_logo.png differ diff --git a/images/piwigo_screenshot.jpg b/images/piwigo_screenshot.jpg new file mode 100644 index 00000000..09c80ae2 Binary files /dev/null and b/images/piwigo_screenshot.jpg differ diff --git a/images/plume_logo.svg b/images/plume_logo.svg new file mode 100644 index 00000000..a0075316 --- /dev/null +++ b/images/plume_logo.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="512" height="512" viewBox="0 0 135.46666 135.46667" version="1.1" id="svg169" inkscape:version="0.92.3 (2405546, 2018-03-11)" sodipodi:docname="plumeFeather.svg"> + <title id="title8">Plume Logo - Feather</title> + <defs id="defs163"/> + <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="1.4" inkscape:cx="126.20524" inkscape:cy="304.85245" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="false" units="px" inkscape:window-width="1200" inkscape:window-height="1577" inkscape:window-x="3752" inkscape:window-y="-8" inkscape:window-maximized="1" inkscape:pagecheckerboard="true"/> + <metadata id="metadata166"> + <rdf:RDF> + <cc:Work rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> + <dc:title>Plume Logo - Feather</dc:title> + <dc:date>2018/10/07</dc:date> + <dc:creator> + <cc:Agent> + <dc:title>Abdullah Tarawneh (trwnh.com)</dc:title> + </cc:Agent> + </dc:creator> + <dc:contributor> + <cc:Agent> + <dc:title>trwnh</dc:title> + </cc:Agent> + </dc:contributor> + <dc:description>A Plume concept logo, with a soft stylized feather. Solid path, no fill.</dc:description> + <cc:license rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/"/> + </cc:Work> + <cc:License rdf:about="http://creativecommons.org/publicdomain/zero/1.0/"> + <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/> + <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/> + <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/> + </cc:License> + </rdf:RDF> + </metadata> + <g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" transform="translate(0,-161.53332)"> + <path style="fill:none;fill-opacity:1;stroke:#7765e3;stroke-width:4.2751441;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" d="M 11.343027,288.41445 C 1.112349,298.81005 0.43838995,295.69058 4.3446684,285.90553 L 16.157848,265.54671 c 1.615107,0.40548 13.891904,-55.26212 54.748175,-81.96673 -9.221995,15.79094 -3.917955,18.80285 -3.917955,18.80285 7.337901,-21.96856 13.652749,-30.76839 66.341642,-38.70978 -15.16261,11.41531 -6.45286,41.25445 -50.134453,55.21738 12.683753,-2.73301 25.822443,-8.73747 31.679703,-15.66516 -3.25494,22.40519 -51.89095,60.24666 -84.84585,64.99456 z" id="path872" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccccc"/> + </g> +</svg> \ No newline at end of file diff --git a/images/roundcube_logo.svg b/images/roundcube_logo.svg new file mode 100644 index 00000000..04238a06 --- /dev/null +++ b/images/roundcube_logo.svg @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="9.14 141.8 573.65 573.65"> +<style type="text/css"> +.st0{fill-rule:evenodd;clip-rule:evenodd;fill:#404F54;} +.st1{fill-rule:evenodd;clip-rule:evenodd;fill:#E5E5E5;} +.st2{fill-rule:evenodd;clip-rule:evenodd;fill:#CCCCCC;} +.st3{fill-rule:evenodd;clip-rule:evenodd;fill:#37BEFF;} +</style> +<polygon class="st3" points="582.79,549.77 295.96,384.1 295.96,207.27 582.79,372.95 "/> +<polygon class="st0" points="9.14,549.77 295.96,384.1 295.96,207.27 9.14,372.95 "/> +<path class="st2" d="M295.96,141.8c109.56,0,198.41,88.85,198.41,198.41c0,109.56-88.85,198.41-198.41,198.41 c-109.56,0-198.41-88.85-198.41-198.41C97.55,230.65,186.4,141.8,295.96,141.8"/> +<path class="st1" d="M295.96,141.8c109.6,0,198.48,88.85,198.48,198.41c0,109.56-88.88,198.41-198.48,198.41 c-62.91-42.34-88.94-127.64-88.94-198.3S233.05,184.22,295.96,141.8"/> +<polygon class="st3" points="582.79,372.95 295.96,538.62 295.96,715.45 582.79,549.77 "/> +<polygon class="st0" points="9.14,372.95 295.96,538.62 295.96,715.45 9.14,549.77 "/> +</svg> \ No newline at end of file diff --git a/images/rpi0.jpg b/images/rpi0.jpg new file mode 100644 index 00000000..75ff577b Binary files /dev/null and b/images/rpi0.jpg differ diff --git a/images/rpi1.jpg b/images/rpi1.jpg new file mode 100644 index 00000000..bcb6fc62 Binary files /dev/null and b/images/rpi1.jpg differ diff --git a/images/sdcard_with_adapter.png b/images/sdcard_with_adapter.png new file mode 100644 index 00000000..21a1b5d0 Binary files /dev/null and b/images/sdcard_with_adapter.png differ diff --git a/images/searx_logo.svg b/images/searx_logo.svg new file mode 100644 index 00000000..302d6c3f --- /dev/null +++ b/images/searx_logo.svg @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="330.93661" height="303.22852" id="svg2" version="1.1" inkscape:version="0.48.4 r9939" sodipodi:docname="searx_logo.svg" inkscape:export-filename="/home/a/magnif.png" inkscape:export-xdpi="23.1774" inkscape:export-ydpi="203.1774"> + <defs id="defs4"> + <linearGradient inkscape:collect="always" id="linearGradient3857"> + <stop style="stop-color:#ffffff;stop-opacity:1;" offset="0" id="stop3859"/> + <stop style="stop-color:#ffffff;stop-opacity:0;" offset="1" id="stop3861"/> + </linearGradient> + <linearGradient id="linearGradient3790"> + <stop style="stop-color:#a9a9a9;stop-opacity:1;" offset="0" id="stop3792"/> + <stop style="stop-color:#000000;stop-opacity:1;" offset="1" id="stop3794"/> + </linearGradient> + <radialGradient inkscape:collect="always" xlink:href="#linearGradient3790" id="radialGradient3798" cx="294.45947" cy="208.37973" fx="294.45947" fy="208.37973" r="107.58125" gradientUnits="userSpaceOnUse"/> + <linearGradient inkscape:collect="always" xlink:href="#linearGradient3857" id="linearGradient3865" x1="120.68947" y1="239.61774" x2="120.68947" y2="602.17517" gradientUnits="userSpaceOnUse"/> + <linearGradient inkscape:collect="always" xlink:href="#linearGradient3790" id="linearGradient3912" x1="186.74416" y1="354.42426" x2="255.84358" y2="254.35953" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.2227304,0,0,0.89945099,-289.31433,113.40259)"/> + <filter inkscape:collect="always" id="filter4024" x="-0.12996517" width="1.2599303" y="-0.14709377" height="1.2941875" color-interpolation-filters="sRGB"> + <feGaussianBlur inkscape:collect="always" stdDeviation="6.4759344" id="feGaussianBlur4026"/> + </filter> + </defs> + <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="1.979899" inkscape:cx="-11.542922" inkscape:cy="142.31651" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="false" inkscape:window-width="1855" inkscape:window-height="1056" inkscape:window-x="65" inkscape:window-y="24" inkscape:window-maximized="1" showguides="true" inkscape:guide-bbox="true" fit-margin-top="0" fit-margin-left="0" fit-margin-right="-24" fit-margin-bottom="-6"/> + <metadata id="metadata7"> + <rdf:RDF> + <cc:Work rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> + <dc:title/> + </cc:Work> + </rdf:RDF> + </metadata> + <g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" transform="translate(-61.719803,-34.870671)"> + <path style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" d="m 70.523181,34.870671 c -7.11959,15.242893 -10.17798,31.779192 -8.22563,48.814566 5.01677,43.774133 41.675309,79.324503 91.536109,95.162893 -6.62576,-22.40752 -5.34093,-44.9362 2.6395,-65.84431 C 108.73618,98.821131 74.828141,70.195435 70.523181,34.870671 z" id="path3814-0-7" inkscape:connector-curvature="0"/> + <path style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" d="m 303.77876,36.21406 c 7.11959,15.242893 10.17798,31.779192 8.22563,48.814566 -5.01677,43.774134 -41.67531,79.324504 -91.53611,95.162894 6.62576,-22.40752 5.34093,-44.9362 -2.6395,-65.84431 47.73698,-14.18269 81.64502,-42.808386 85.94998,-78.13315 z" id="path3814-0" inkscape:connector-curvature="0"/> + <path transform="matrix(0.6556593,-0.75505688,0.75505688,0.6556593,0,0)" style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" d="m -5.0905523,259.06055 18.4167573,0 c 6.220455,0 11.228257,16.68196 11.228257,37.40349 l 0,172.83701 c 0,20.72153 -5.007802,37.40349 -11.228257,37.40349 l -18.4167573,0 c -6.2204547,0 -11.2282577,-16.68196 -11.2282577,-37.40349 l 0,-172.83701 c 0,-20.72153 5.007803,-37.40349 11.2282577,-37.40349 z" id="rect3804" inkscape:connector-curvature="0"/> + <path sodipodi:type="arc" style="fill:url(#radialGradient3798);fill-opacity:1;fill-rule:nonzero;stroke:none" id="path2987" sodipodi:cx="294.45947" sodipodi:cy="208.37973" sodipodi:rx="107.58125" sodipodi:ry="107.58125" d="m 402.04073,208.37973 a 107.58125,107.58125 0 1 1 -215.16251,0 107.58125,107.58125 0 1 1 215.16251,0 z" transform="translate(-107.07617,-60.609153)"/> + <path sodipodi:type="arc" style="fill:url(#linearGradient3865);fill-opacity:1;fill-rule:nonzero;stroke:none" id="path3757" sodipodi:cx="131.82491" sodipodi:cy="299.29346" sodipodi:rx="101.52033" sodipodi:ry="101.52033" d="m 233.34524,299.29346 a 101.52033,101.52033 0 1 1 -203.040667,0 101.52033,101.52033 0 1 1 203.040667,0 z" transform="matrix(0.76865672,0,0,0.76865672,85.80266,-82.535889)"/> + <path sodipodi:type="arc" style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path3800" sodipodi:cx="183.34268" sodipodi:cy="156.35687" sodipodi:rx="27.274118" sodipodi:ry="27.274118" d="m 210.6168,156.35687 a 27.274118,27.274118 0 1 1 -54.54824,0 27.274118,27.274118 0 1 1 54.54824,0 z" transform="translate(5,-7.1428572)"/> + <path sodipodi:type="arc" style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path3802" sodipodi:cx="197.9899" sodipodi:cy="203.32896" sodipodi:rx="5.5558391" sodipodi:ry="5.5558391" d="m 203.54574,203.32896 a 5.5558391,5.5558391 0 1 1 -11.11168,0 5.5558391,5.5558391 0 1 1 11.11168,0 z" transform="translate(1.4847712,-63.564549)"/> + <rect style="fill:#ffffff;fill-opacity:0.82211531;fill-rule:nonzero;stroke:none;filter:url(#filter4024)" id="rect3916" width="2.2392972" height="159.43797" x="19.525793" y="337.8396" rx="2.8666623" ry="9.0007057" transform="matrix(0.74466525,-0.84318084,0.84318084,0.74466525,-35.543204,-26.349917)"/> + </g> +</svg> \ No newline at end of file diff --git a/images/services_status.png b/images/services_status.png deleted file mode 100644 index 6b3a340f..00000000 Binary files a/images/services_status.png and /dev/null differ diff --git a/images/simple-torrent_logo.png b/images/simple-torrent_logo.png new file mode 100644 index 00000000..b18f220d Binary files /dev/null and b/images/simple-torrent_logo.png differ diff --git a/images/slingcode_logo.svg b/images/slingcode_logo.svg new file mode 100644 index 00000000..8758bf4e --- /dev/null +++ b/images/slingcode_logo.svg @@ -0,0 +1,141 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="64" + height="64" + id="svg2" + version="1.1" + inkscape:version="0.48.4 r9939" + sodipodi:docname="logo.svg" + inkscape:export-filename="../../public/logo.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"> + <defs + id="defs4"> + <pattern + patternUnits="userSpaceOnUse" + width="40" + height="30" + patternTransform="translate(-88,995.375)" + id="pattern3043"> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path3018-3" + d="m 35,4.9872 0,20" + style="fill:none;stroke:#31d58f;stroke-width:10;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.94117647;stroke-dasharray:none" /> + <path + style="fill:none;stroke:#e5b41f;stroke-width:10;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.94117647;stroke-dasharray:none" + d="m 25,4.9872 0,20" + id="path3794-6" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path3796-7" + d="m 15,4.9872 0,20" + style="fill:none;stroke:#50a1ef;stroke-width:10;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.94117647;stroke-dasharray:none" /> + <path + style="fill:none;stroke:#c64438;stroke-width:10;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.94117647;stroke-dasharray:none" + d="m 5,4.9872 0,20" + id="path3798-5" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + </pattern> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="4" + inkscape:cx="12.6842" + inkscape:cy="37.3102" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + borderlayer="true" + inkscape:showpageshadow="false" + inkscape:window-width="1920" + inkscape:window-height="1080" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="0"> + <inkscape:grid + type="xygrid" + id="grid3801" + empspacing="4" + visible="true" + enabled="true" + snapvisiblegridlinesonly="true" + dotted="false" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-988.36218)"> + <g + id="g4657"> + <path + style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" + d="m 11,992.36218 c -1.644703,0 -3,1.3553 -3,3 l 0,50.00002 c 0,1.6447 1.355297,3 3,3 l 41.999997,0 c 1.64471,0 3,-1.3553 3,-3 l 0,-50.00002 c 0,-1.6447 -1.35529,-3 -3,-3 z m 3,4 35.999997,0 c 1.0907,0 2,0.9093 2,2 l 0,28.00002 c 0,1.0907 -0.9093,2 -2,2 l -35.999997,0 c -1.090701,0 -2,-0.9093 -2,-2 l 0,-28.00002 c 0,-1.0907 0.909299,-2 2,-2 z m 18.812497,36.00002 c 0.0623,-0.01 0.12519,-0.01 0.1875,0 l 1,0 16,0 1,0 c 0.52359,0 0.99995,0.4764 1,1 l 0,2 c -5e-5,0.5236 -0.47641,0.9999 -1,1 l -1,0 -16,0 -1,0 c -0.52358,-10e-5 -0.99994,-0.4764 -1,-1 l 0,-2 c -0.008,-0.4666 0.3541,-0.9126 0.8125,-1 z" + id="path3825" + inkscape:connector-curvature="0" + sodipodi:nodetypes="sssssssssssssssssscccccccccccccc" + inkscape:export-filename="../../public/logo.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90" /> + <g + id="g4619"> + <path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="path3827" + d="m 43,1000.375 -4,24 6,0 4,-24 z" + style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#31d58f;fill-opacity:1;stroke:none;stroke-width:6;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" /> + <path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="path3829" + d="m 35,1000.375 -4,24 6,0 4,-24 z" + style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#e5b41f;fill-opacity:1;stroke:none;stroke-width:6;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" /> + <path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="path3831" + d="m 27,1000.375 -4,24 6,0 4,-24 z" + style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#50a1ef;fill-opacity:1;stroke:none;stroke-width:6;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" /> + <path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="path3833" + d="m 19,1000.375 -4,24 6,0 4,-24 z" + style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#c64438;fill-opacity:1;stroke:none;stroke-width:6;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" /> + </g> + </g> + </g> +</svg> diff --git a/images/strut_logo.png b/images/strut_logo.png new file mode 100644 index 00000000..db6668c8 Binary files /dev/null and b/images/strut_logo.png differ diff --git a/images/tada.png b/images/tada.png new file mode 100644 index 00000000..863661cd Binary files /dev/null and b/images/tada.png differ diff --git a/images/usbimager.png b/images/usbimager.png new file mode 100644 index 00000000..474f20a5 Binary files /dev/null and b/images/usbimager.png differ diff --git a/images/virtualbox_3.png b/images/virtualbox_3.png index 846f95c8..6b4aed77 100644 Binary files a/images/virtualbox_3.png and b/images/virtualbox_3.png differ diff --git a/images/vps_ynh_arn.png b/images/vps_ynh_arn.png new file mode 100644 index 00000000..fd6cc5a4 Binary files /dev/null and b/images/vps_ynh_arn.png differ diff --git a/images/Logo-wallabag-svg.svg b/images/wallabag2_logo.svg similarity index 100% rename from images/Logo-wallabag-svg.svg rename to images/wallabag2_logo.svg diff --git a/images/wallabag_logo.svg b/images/wallabag_logo.svg new file mode 100644 index 00000000..303860d9 --- /dev/null +++ b/images/wallabag_logo.svg @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="200px" height="237px" viewBox="0 0 200 237" enable-background="new 0 0 200 237" xml:space="preserve"> +<g> + <g> + <path d="M78.59,49.445c2.014-1.237,12.868-7.004,30.379,0.224c18.012,7.434,29.188,0.978,30.574,0.099 c-4.354-7.159-9.533-13.389-15.259-17.578c0.381-0.104,0.771-0.209,1.183-0.332c7.594-2.196,9.522-8.625,9.929-14.131 c0.458-6.245,0.776-6.341,2.133-11.96c1.302-5.396-0.149-6.476-1.488-5.386c-0.722,0.586-6.998,2.037-10.721,4.94 c-6.011,4.69-9.716,13.608-11.396,18.538c-0.032,0.076-0.258,0.761-0.334,0.999c-0.783,1.889-2.342,1.883-2.342,1.883v0.001 c-0.755-0.083-1.515-0.126-2.279-0.126c-0.682,0-1.359,0.037-2.037,0.102c-0.015,0.003-0.023,0-0.039,0.001 c-1.993,0.293-3.09-2.14-3.318-2.72c-2.328-6.687-8.593-19.872-22.671-23.419c0,0-2.557-1.959-1.777,1.354 C79.867,5.1,81.4,8.3,81.06,12.954c-0.156,2.148-1.489,13.164,8.636,18.896c0.961,0.544,1.817,1.002,2.585,1.387 C87.184,37.319,82.552,42.998,78.59,49.445z"/> + <path d="M145.06,150.186c-12.406-7.687-16.582-10.39-16.321-13.33c0,0,0.003-0.478,0.126-1.207c0.3-1.56,1.254-4.221,4.294-5.738 c0.101-0.049,0.185-0.105,0.263-0.162c9.666-5.61,16.729-14.642,19.22-25.917c-2.511,6.228-21.098,11.068-43.675,11.068 c-22.569,0-41.161-4.84-43.669-11.068c0.558,2.531,1.353,4.944,2.35,7.238c0.839,4.722,1.968,15.838-3.37,25.569 c-4.704,8.571-27.923,20.258-62.382,13.548c0,0-1.383-0.964-1.8-0.17c-0.618,1.174,1.912,2.123,4.519,2.811 c23.991,6.353,60.202,3.769,71.574-5.601c5.188-4.271,7.19-10.026,7.699-16.22l0.004,0.01c0,0,0.139-1.622,2.167-0.403 c0.581,0.35,2.678,1.716,3.013,3.259c0.292,2.197,0.312,4.895-0.822,6.785c-1.622,2.701-1.64,3.09,0.495,4.616 c1.311,0.936,6.666,4.871,14.116,9.347c0.02,0.013,0.029,0.023,0.048,0.034c1.577,0.949,3.767,3.274,3.767,3.274l0,0 c3.354,3.881,10.654,11.691,13.832,10.222c1.501-0.694-0.064-3.823-0.064-3.823s2.496,3.241,3.837,2.137 c1.019-0.843-0.597-4.069-0.597-4.069s2.179,1.889,3.475,1.189c1.586-0.855-0.234-5.817-12.705-13.397 c-12.475-7.585-15.856-8.748-16.154-12.134c0,0-0.005-0.171,0.005-0.462c0.098-0.747,0.522-2.327,2.335-2.158 c2.699,0.437,5.481,0.67,8.331,0.67c3.262,0,6.437-0.3,9.5-0.871l0.001,0.005c0,0,0.159-0.032,0.206-0.04 c0.358-0.045,1.057-0.021,1.06,0.846c-0.113,1.101-0.418,2.207-1.065,3.176c-1.825,2.733-1.225,3.107,0.68,4.864 c1.177,1.083,6.569,5.827,13.957,10.417c0.014,0.011,0.021,0.021,0.039,0.03c1.575,0.947,4.299,3.551,4.299,3.551v-0.001 c3.061,3.107,8.689,8.314,11.758,8.001c2.073-0.213,0.385-3.785,0.385-3.785s2.62,2.528,3.905,1.785 c1.439-0.831-0.596-3.473-0.596-3.473s1.687,0.893,2.879,0.596C157.168,160.904,157.464,157.869,145.06,150.186z"/> + </g> + <path d="M131.198,63.329c-1.488,0-2.725,0.448-3.671,1.333c-0.957,0.896-1.441,1.93-1.441,3.073v20.24 c0,2.717-0.481,4.718-1.431,5.952c-0.918,1.193-2.384,1.773-4.482,1.773c-2.146,0-3.609-0.576-4.473-1.759 c-0.903-1.235-1.36-3.241-1.36-5.965V67.655c0-1.384-0.63-2.516-1.825-3.273c-1.624-1.023-3.24-1.394-5.206-0.74 c-0.6,0.201-1.164,0.461-1.679,0.776c-0.548,0.333-1.011,0.752-1.378,1.241c-0.406,0.544-0.612,1.136-0.612,1.759v20.556 c0,2.721-0.457,4.728-1.36,5.964c-0.867,1.185-2.33,1.761-4.473,1.761c-2.149,0-3.627-0.579-4.518-1.766 c-0.926-1.235-1.396-3.24-1.396-5.958v-20.24c0-1.144-0.484-2.178-1.443-3.073c-0.947-0.884-2.208-1.333-3.748-1.333 c-1.586,0-2.895,0.444-3.89,1.317c-1.021,0.896-1.54,1.936-1.54,3.089V87.66c0,2.506,0.245,4.877,0.726,7.044 c0.494,2.215,1.357,4.16,2.565,5.781c1.22,1.637,2.876,2.929,4.923,3.845c2.026,0.902,4.56,1.36,7.532,1.36 c3.097,0,5.691-0.575,7.709-1.706c1.692-0.95,3.117-2.199,4.249-3.721c1.092,1.522,2.484,2.771,4.153,3.719 c1.991,1.133,4.626,1.708,7.829,1.708c2.973,0,5.495-0.459,7.498-1.363c2.018-0.915,3.659-2.207,4.881-3.842 c1.21-1.626,2.073-3.571,2.564-5.781c0.481-2.167,0.726-4.538,0.726-7.044V67.734c0-1.148-0.503-2.185-1.491-3.082 C134.165,63.774,132.84,63.329,131.198,63.329z"/> + <g> + <path d="M40.224,210.632c-0.662,0-1.211,0.198-1.631,0.59c-0.424,0.399-0.64,0.858-0.64,1.366v8.989 c0,1.206-0.214,2.097-0.636,2.644c-0.406,0.53-1.059,0.788-1.99,0.788c-0.955,0-1.604-0.256-1.987-0.783 c-0.401-0.546-0.604-1.439-0.604-2.648v-9.025c0-0.615-0.28-1.118-0.81-1.453c-0.721-0.456-1.439-0.621-2.312-0.33 c-0.266,0.092-0.518,0.206-0.747,0.347c-0.243,0.147-0.449,0.332-0.611,0.55c-0.181,0.241-0.272,0.505-0.272,0.782v9.13 c0,1.209-0.203,2.1-0.604,2.648c-0.386,0.527-1.036,0.783-1.988,0.783c-0.954,0-1.61-0.258-2.006-0.785 c-0.411-0.547-0.62-1.44-0.62-2.646v-8.989c0-0.508-0.215-0.967-0.641-1.366c-0.421-0.392-0.98-0.59-1.665-0.59 c-0.704,0-1.287,0.195-1.728,0.582c-0.454,0.398-0.684,0.86-0.684,1.374v8.851c0,1.111,0.108,2.166,0.323,3.128 c0.218,0.983,0.601,1.849,1.139,2.568c0.542,0.728,1.277,1.302,2.188,1.708c0.9,0.401,2.024,0.604,3.345,0.604 c1.375,0,2.528-0.256,3.425-0.759c0.751-0.422,1.384-0.977,1.887-1.652c0.485,0.676,1.103,1.23,1.844,1.65 c0.885,0.505,2.055,0.761,3.478,0.761c1.319,0,2.44-0.205,3.33-0.606c0.896-0.407,1.625-0.981,2.168-1.706 c0.538-0.723,0.921-1.588,1.139-2.568c0.213-0.962,0.322-2.017,0.322-3.128v-8.851c0-0.511-0.223-0.97-0.662-1.368 C41.541,210.827,40.952,210.632,40.224,210.632z"/> + <path d="M66.316,212.703c-0.624-0.648-1.434-1.163-2.406-1.527c-0.965-0.362-2.121-0.544-3.433-0.544 c-1.415,0-2.671,0.25-3.735,0.744c-1.062,0.495-1.956,1.15-2.656,1.951c-0.7,0.793-1.238,1.699-1.598,2.686 c-0.361,0.989-0.544,2-0.544,3.011v3.079c0,0.915,0.14,1.818,0.416,2.684c0.28,0.873,0.707,1.662,1.264,2.343 c0.563,0.685,1.292,1.247,2.168,1.673c0.88,0.429,1.915,0.646,3.076,0.646c0.718,0,1.334-0.058,1.833-0.164 c0.505-0.113,0.954-0.277,1.328-0.489c0.375-0.212,0.7-0.462,0.965-0.739c0.158-0.165,0.312-0.343,0.459-0.532v0.142 c0,0.509,0.216,0.968,0.64,1.366c0.42,0.393,0.968,0.59,1.63,0.59c0.729,0,1.318-0.197,1.75-0.587 c0.439-0.399,0.662-0.86,0.662-1.369v-9.794c0-1.034-0.147-1.994-0.436-2.863C67.406,214.126,66.941,213.352,66.316,212.703z M58.962,215.373c0.447-0.203,0.956-0.306,1.515-0.306c0.969,0,1.719,0.217,2.231,0.646c0.494,0.412,0.746,1.162,0.746,2.228 v3.288c0,0.628-0.108,1.184-0.323,1.652c-0.214,0.473-0.496,0.869-0.835,1.177c-0.341,0.307-0.736,0.546-1.174,0.706 c-0.441,0.162-0.905,0.244-1.379,0.244c-0.857,0-1.554-0.27-2.127-0.824c-0.571-0.55-0.849-1.184-0.849-1.941v-3.359 c0-0.517,0.092-1.008,0.274-1.456c0.183-0.453,0.44-0.863,0.764-1.22C58.122,215.859,58.512,215.575,58.962,215.373z"/> + <path d="M80.556,204.685c-0.704,0-1.286,0.195-1.728,0.586c-0.454,0.397-0.684,0.859-0.684,1.37v20.849 c0,0.511,0.23,0.973,0.684,1.373c0.442,0.388,1.024,0.585,1.728,0.585c0.685,0,1.245-0.2,1.666-0.593 c0.424-0.399,0.642-0.857,0.642-1.365v-20.849c0-0.508-0.217-0.967-0.642-1.365C81.801,204.883,81.241,204.685,80.556,204.685z"/> + <path d="M95.493,204.685c-0.704,0-1.286,0.195-1.728,0.586c-0.453,0.397-0.684,0.859-0.684,1.37v20.849 c0,0.511,0.23,0.973,0.684,1.373c0.442,0.388,1.024,0.585,1.728,0.585c0.685,0,1.246-0.2,1.666-0.593 c0.425-0.399,0.642-0.857,0.642-1.365v-20.849c0-0.508-0.217-0.967-0.642-1.365C96.738,204.883,96.178,204.685,95.493,204.685z"/> + <path d="M121.726,212.703c-0.624-0.648-1.434-1.163-2.405-1.527c-0.968-0.362-2.122-0.544-3.435-0.544 c-1.414,0-2.671,0.25-3.733,0.744c-1.062,0.495-1.956,1.15-2.658,1.951c-0.697,0.793-1.234,1.696-1.597,2.686 c-0.36,0.989-0.544,2-0.544,3.011v3.079c0,0.912,0.14,1.816,0.417,2.684c0.279,0.873,0.703,1.662,1.264,2.343 c0.562,0.685,1.292,1.247,2.168,1.673c0.88,0.429,1.915,0.646,3.076,0.646c0.718,0,1.334-0.058,1.833-0.164 c0.506-0.113,0.953-0.277,1.328-0.489c0.374-0.212,0.697-0.462,0.964-0.739c0.158-0.165,0.312-0.343,0.459-0.532v0.142 c0,0.509,0.216,0.968,0.642,1.366c0.419,0.393,0.969,0.59,1.63,0.59c0.729,0,1.317-0.197,1.75-0.587 c0.438-0.399,0.661-0.86,0.661-1.369v-9.794c0-1.034-0.146-1.994-0.436-2.863C122.816,214.129,122.351,213.354,121.726,212.703z M114.371,215.373c0.446-0.203,0.956-0.306,1.515-0.306c0.969,0,1.719,0.217,2.23,0.646c0.495,0.412,0.746,1.162,0.746,2.228 v3.288c0,0.625-0.108,1.184-0.321,1.652c-0.214,0.473-0.495,0.869-0.835,1.177c-0.341,0.307-0.735,0.546-1.174,0.706 c-0.441,0.162-0.906,0.244-1.381,0.244c-0.856,0-1.552-0.27-2.126-0.824c-0.571-0.55-0.85-1.184-0.85-1.941v-3.359 c0-0.517,0.093-1.008,0.276-1.456c0.18-0.453,0.437-0.863,0.762-1.22C113.533,215.859,113.923,215.575,114.371,215.373z"/> + <path d="M147.924,213.071c-0.634-0.77-1.449-1.377-2.422-1.803c-0.973-0.422-2.132-0.637-3.45-0.637 c-0.925,0-1.769,0.168-2.506,0.497c-0.578,0.261-1.087,0.612-1.519,1.05v-5.538c0-0.508-0.216-0.967-0.642-1.365 c-0.42-0.393-0.98-0.591-1.665-0.591c-0.704,0-1.285,0.195-1.728,0.586c-0.453,0.397-0.685,0.859-0.685,1.37v15.566 c0,1.038,0.18,2.014,0.53,2.895c0.354,0.891,0.891,1.679,1.6,2.338c0.705,0.653,1.594,1.17,2.647,1.536 c1.039,0.356,2.269,0.541,3.652,0.541c1.344,0,2.533-0.229,3.538-0.674c1.003-0.45,1.857-1.062,2.536-1.829 c0.681-0.764,1.189-1.659,1.516-2.664c0.324-0.995,0.489-2.068,0.489-3.191v-2.03c0-1.211-0.16-2.344-0.47-3.362 C149.034,214.741,148.557,213.835,147.924,213.071z M141.738,225.077c-1.076,0-1.986-0.23-2.7-0.685 c-0.681-0.433-1.011-1.104-1.011-2.046v-4.011c0.043-1.137,0.376-1.974,0.988-2.482c0.629-0.522,1.426-0.786,2.372-0.786 c1.112,0,1.982,0.341,2.661,1.042c0.673,0.694,1.017,1.735,1.017,3.09v2.099c0,1.151-0.311,2.081-0.921,2.766 C143.538,224.748,142.75,225.077,141.738,225.077z"/> + <path d="M172.868,212.703c-0.623-0.648-1.433-1.163-2.405-1.527c-0.968-0.362-2.121-0.544-3.435-0.544 c-1.415,0-2.67,0.25-3.735,0.744c-1.061,0.495-1.953,1.15-2.656,1.951c-0.697,0.793-1.235,1.696-1.596,2.686 c-0.362,0.989-0.544,2-0.544,3.011v3.079c0,0.912,0.141,1.816,0.415,2.684c0.28,0.873,0.706,1.662,1.264,2.343 c0.562,0.685,1.293,1.247,2.169,1.673c0.88,0.429,1.915,0.646,3.074,0.646c0.721,0,1.335-0.058,1.835-0.164 c0.506-0.113,0.953-0.277,1.329-0.489c0.374-0.212,0.698-0.462,0.962-0.739c0.159-0.165,0.312-0.343,0.459-0.532v0.142 c0,0.509,0.217,0.968,0.642,1.366c0.421,0.393,0.968,0.59,1.63,0.59c0.73,0,1.318-0.197,1.75-0.587 c0.439-0.399,0.661-0.86,0.661-1.369v-9.794c0-1.034-0.146-1.994-0.434-2.863C173.959,214.129,173.495,213.354,172.868,212.703z M165.513,215.373c0.447-0.203,0.959-0.306,1.516-0.306c0.97,0,1.72,0.217,2.23,0.646c0.495,0.412,0.745,1.162,0.745,2.228v3.288 c0,0.625-0.108,1.184-0.321,1.652c-0.215,0.473-0.494,0.869-0.836,1.177c-0.34,0.307-0.736,0.546-1.172,0.706 c-0.442,0.162-0.907,0.244-1.38,0.244c-0.856,0-1.552-0.27-2.128-0.824c-0.572-0.55-0.85-1.184-0.85-1.941v-3.359 c0-0.517,0.094-1.008,0.274-1.456c0.185-0.453,0.44-0.863,0.764-1.22C164.675,215.859,165.064,215.575,165.513,215.373z"/> + <path d="M199.508,214.828c-0.294-0.856-0.762-1.609-1.388-2.234c-0.623-0.624-1.431-1.119-2.406-1.473 c-0.964-0.35-2.118-0.524-3.429-0.524c-1.414,0-2.666,0.25-3.719,0.747c-1.052,0.494-1.938,1.155-2.64,1.966 c-0.7,0.809-1.233,1.758-1.582,2.819c-0.347,1.052-0.521,2.155-0.521,3.279v2.065c0,2.445,0.626,4.4,1.859,5.82 c1.247,1.429,3.032,2.153,5.307,2.153c1.214,0,2.214-0.214,2.97-0.637c0.514-0.286,0.95-0.635,1.302-1.041v1.014 c0,0.774-0.088,1.402-0.261,1.867c-0.168,0.451-0.399,0.811-0.685,1.065c-0.285,0.256-0.629,0.432-1.019,0.525 c-0.418,0.099-0.887,0.148-1.396,0.148c-0.841,0-1.497-0.047-1.953-0.135c-0.5-0.1-0.882-0.146-1.162-0.146 c-0.733,0-1.294,0.185-1.667,0.541c-0.377,0.363-0.569,0.852-0.569,1.45c0,0.811,0.438,1.5,1.354,2.076 c0.33,0.127,0.844,0.234,1.577,0.332c0.711,0.095,1.527,0.144,2.42,0.144c1.052,0,2.074-0.159,3.032-0.47 c0.967-0.315,1.835-0.799,2.577-1.445c0.741-0.645,1.34-1.469,1.776-2.449c0.435-0.98,0.656-2.159,0.656-3.505v-11.229 C199.943,216.589,199.796,215.675,199.508,214.828z M190.78,215.367c0.442-0.222,0.95-0.333,1.505-0.333 c0.973,0,1.726,0.201,2.239,0.6c0.494,0.385,0.736,0.967,0.736,1.78v4.361c-0.044,1.129-0.377,1.929-1.02,2.445 c-0.662,0.53-1.429,0.788-2.34,0.788c-2.238,0-3.327-1.113-3.327-3.398v-2.343c0-0.59,0.094-1.147,0.278-1.658 c0.184-0.512,0.441-0.959,0.767-1.339C189.94,215.897,190.33,215.593,190.78,215.367z"/> + </g> +</g> +</svg> \ No newline at end of file diff --git a/images/weblate_logo.svg b/images/weblate_logo.svg new file mode 100644 index 00000000..feca88dc --- /dev/null +++ b/images/weblate_logo.svg @@ -0,0 +1,124 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + height="300" + viewBox="0 0 300 300" + width="300" + version="1.1" + id="svg31" + sodipodi:docname="weblate.svg" + inkscape:version="0.92.4 (5da689c313, 2019-01-14)"> + <metadata + id="metadata37"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs35" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="804" + inkscape:window-height="480" + id="namedview33" + showgrid="false" + inkscape:zoom="0.78666667" + inkscape:cx="150" + inkscape:cy="150" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg31" /> + <linearGradient + id="a" + x1="0.3964995" + x2="98.808388" + y1="55.252807" + y2="55.252807" + gradientTransform="scale(0.98308415,1.0172069)" + gradientUnits="userSpaceOnUse"> + <stop + offset="0" + stop-color="#00d2e6" + id="stop2" /> + <stop + offset="1" + stop-color="#2eccaa" + id="stop4" /> + </linearGradient> + <linearGradient + id="b" + x1="49.0172" + x2="99.792668" + y1="137.88685" + y2="113.96209" + gradientTransform="scale(1.1630616,0.85979965)" + gradientUnits="userSpaceOnUse"> + <stop + offset="0" + stop-opacity="0" + id="stop7" /> + <stop + offset=".514125333" + id="stop9" /> + <stop + offset="1" + stop-opacity="0" + id="stop11" /> + </linearGradient> + <linearGradient + id="c" + x1="201.82208" + x2="103.57667" + y1="57.648954" + y2="57.648954" + gradientTransform="scale(0.98308415,1.0172069)" + gradientUnits="userSpaceOnUse"> + <stop + offset="0" + stop-color="#1fa385" + id="stop14" /> + <stop + offset="1" + stop-color="#2eccaa" + id="stop16" /> + </linearGradient> + <g + style="fill:none;fill-rule:evenodd" + id="g27" + transform="translate(50,76)"> + <path + inkscape:connector-curvature="0" + style="fill:url(#a);fill-rule:nonzero" + id="path21" + d="m 127.24725,111.60641 c -2.88836,-0.0145 -5.76656,-0.6024 -8.47973,-1.78467 -6.11167,-2.66259 -11.49342,-7.69116 -15.87156,-14.494798 1.24856,-2.219307 2.3738,-4.517338 3.37843,-6.853465 4.40506,-10.243222 6.50003,-21.459724 6.6607,-32.59332 -0.0233,-0.220825 -0.0416,-0.442436 -0.0552,-0.664833 l -0.0121,-0.571316 c -0.01,-4.365422 -0.67459,-8.789784 -2.17667,-12.908841 -1.73043,-4.745776 -4.4887,-9.495481 -8.86498,-11.347741 -0.79519,-0.335952 -1.63162,-0.477013 -2.464161,-0.457367 -5.504872,-10.288802 -5.679939,-20.1485266 0,-29.53713169 0.10115,0 0.20619,3.9293e-4 0.30734,0.001179 6.701161,0.0738703 13.340071,2.14184679 19.021181,5.75363459 15.46928,9.8349701 23.18193,29.0007861 23.35194,47.8180741 0.002,0.220826 -3.9e-4,0.441258 -0.007,0.66169 h 0.0868 c -0.0226,19.886801 -4.80489,40.053612 -14.87495,56.978905 z m -34.299625,31.21585 c -14.447871,5.94246 -31.22819,5.62359 -45.54931,-1.02501 C 30.922601,134.1497 18.333366,119.28527 10.57986,102.31827 -2.6824097,73.29666 -2.9858585,38.603143 9.5917057,9.1367387 19.037523,12.915521 27.43683,6.8970531 27.43683,6.8970531 c 0,0 -0.01945,9.2605109 8.94785,13.9049119 -9.200724,21.556385 -8.978973,47.166601 0.241203,68.172888 4.438911,10.107269 11.219825,19.519057 20.618957,24.841647 3.354732,1.8996 7.040998,3.12602 10.833017,3.58618 0.01404,0.0219 0.02808,0.0439 0.04214,0.0658 6.696522,10.44898 15.132208,19.1568 24.827633,25.35378 z" /> + <path + inkscape:connector-curvature="0" + style="opacity:0.3;fill:url(#b)" + id="path23" + d="m 127.24298,111.61346 c -2.88693,-0.0151 -5.76363,-0.60296 -8.47546,-1.78465 -6.11266,-2.66302 -11.49516,-7.69279 -15.87368,-14.498094 1.24941,-2.220476 2.37535,-4.519788 3.38055,-6.857239 1.32817,-3.088408 2.44626,-6.264833 3.36439,-9.500982 2.12803,-7.497839 30.38184,2.018075 26.0717,14.370923 -2.22386,6.372982 -5.03943,12.509222 -8.4675,18.270042 z m -34.302088,31.21157 c -14.446351,5.93959 -31.223682,5.61979 -45.542576,-1.02778 -16.475715,-7.64755 0.447392,-33.30334 9.846524,-27.98075 3.353286,1.89878 7.037819,3.12496 10.828112,3.58558 0.01567,0.0245 0.03135,0.049 0.04704,0.0735 6.694972,10.44656 15.128303,19.15278 24.8209,25.34948 z" /> + <path + inkscape:connector-curvature="0" + style="fill:url(#c);fill-rule:nonzero" + id="path25" + d="m 56.762435,54.627505 c -0.0066,-0.220432 -0.0093,-0.440865 -0.007,-0.66169 C 56.925444,35.148526 64.638101,15.982711 80.107377,6.1477407 85.788484,2.5359528 92.427399,0.46797642 99.12856,0.39410609 c 0.10115,-7.8585e-4 0.20619,-0.001179 0.307339,-0.001179 V 29.930059 c -0.832539,-0.01965 -1.668968,0.121414 -2.46416,0.457367 -4.376276,1.85226 -7.134548,6.601965 -8.864984,11.347741 -1.502072,4.119057 -2.166936,8.543418 -2.176662,12.908841 l -0.01206,0.571316 c -0.01362,0.222397 -0.0319,0.444008 -0.05524,0.664833 0.160672,11.133595 2.255636,22.350098 6.660701,32.59332 4.933377,11.471906 12.775196,22.025153 23.847186,26.848723 8.35263,3.63969 17.61171,2.78114 25.18236,-1.5057 9.39914,-5.32259 16.18005,-14.734378 20.61896,-24.841647 9.22018,-21.006287 9.44193,-46.616503 0.24121,-68.172888 8.9673,-4.644401 8.94785,-13.9049119 8.94785,-13.9049119 0,0 8.3993,6.0184679 17.84512,2.2396856 12.57756,29.4664043 12.27412,64.1599213 -0.98815,93.1815313 -7.75351,16.967 -20.34275,31.83144 -36.81846,39.47898 -14.66669,6.80904 -31.9127,6.97917 -46.59106,0.58389 C 91.618199,136.63222 80.890116,126.27466 73.171624,114.23104 61.993036,96.788212 56.699411,75.552849 56.675679,54.627505 Z" /> + </g> +</svg> diff --git a/images/webtrees_logo.png b/images/webtrees_logo.png new file mode 100644 index 00000000..46bf667f Binary files /dev/null and b/images/webtrees_logo.png differ diff --git a/images/wekan_logo.svg b/images/wekan_logo.svg new file mode 100644 index 00000000..da34a07a --- /dev/null +++ b/images/wekan_logo.svg @@ -0,0 +1 @@ +<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 302.5 210.37"><defs><style>.cls-1{fill:none;}.cls-2{clip-path:url(#clip-path);}.cls-3{fill:url(#linear-gradient);}.cls-4{fill:#7addfc;}.cls-5{fill:#529fdd;}.cls-6{fill:#fff;}</style><clipPath id="clip-path" transform="translate(0 0)"><path class="cls-1" d="M260.63,180.45H39.9c-7,0-9-2.27-9-9V31.71c0-6.81,2.1-9,9-9H260.63c6.8,0,9,2.13,9,9V171.45c0,6.57-2.08,9-9,9"/></clipPath><linearGradient id="linear-gradient" x1="-716.13" y1="35.06" x2="-715.13" y2="35.06" gradientTransform="matrix(0, -157.69, -157.69, 0, 5678.87, -112746.33)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#007c8f"/><stop offset="0.37" stop-color="#007088"/><stop offset="1" stop-color="#005377"/></linearGradient></defs><title>wekan-1_2</title><g class="cls-2"><rect class="cls-3" x="30.9" y="22.76" width="238.73" height="157.69"/><path class="cls-4" d="M225.06,138.25v-.54h-149a2.5,2.5,0,0,1-2.5-2.5v-69a2.5,2.5,0,0,1,2.5-2.5h149a2.5,2.5,0,0,1,2.5,2.5v69.07a2.5,2.5,0,0,1-2.5,2.5v1a3.5,3.5,0,0,0,3.5-3.5V66.18a3.5,3.5,0,0,0-3.5-3.5h-149a3.5,3.5,0,0,0-3.5,3.5v69.07a3.5,3.5,0,0,0,3.5,3.5h149Z" transform="translate(0 0)"/><path class="cls-5" d="M143.05,55.9v-.5H75.93a2.5,2.5,0,0,1-2.5-2.5V3.5A2.5,2.5,0,0,1,75.93,1h67.12a2.5,2.5,0,0,1,2.5,2.5V52.9a2.5,2.5,0,0,1-2.5,2.5v1a3.5,3.5,0,0,0,3.5-3.5V3.5a3.5,3.5,0,0,0-3.5-3.5H75.93a3.5,3.5,0,0,0-3.5,3.5V52.9a3.5,3.5,0,0,0,3.5,3.5h67.12Z" transform="translate(0 0)"/><path class="cls-5" d="M143.05,200.92v-.5H75.93a2.5,2.5,0,0,1-2.5-2.5v-49.4a2.5,2.5,0,0,1,2.5-2.5h67.12a2.5,2.5,0,0,1,2.5,2.5v49.4a2.5,2.5,0,0,1-2.5,2.5v1a3.5,3.5,0,0,0,3.5-3.5v-49.4a3.5,3.5,0,0,0-3.5-3.5H75.93a3.5,3.5,0,0,0-3.5,3.5v49.4a3.5,3.5,0,0,0,3.5,3.5h67.12Z" transform="translate(0 0)"/><path class="cls-5" d="M224.43,55.9v-.5H157.32a2.5,2.5,0,0,1-2.5-2.5V3.5a2.5,2.5,0,0,1,2.5-2.5h67.12a2.5,2.5,0,0,1,2.5,2.5V52.9a2.5,2.5,0,0,1-2.5,2.5v1a3.5,3.5,0,0,0,3.5-3.5V3.5a3.5,3.5,0,0,0-3.5-3.5H157.32a3.5,3.5,0,0,0-3.5,3.5V52.9a3.5,3.5,0,0,0,3.5,3.5h67.12Z" transform="translate(0 0)"/><path class="cls-5" d="M224.43,200.92v-.5H157.32a2.5,2.5,0,0,1-2.5-2.5v-49.4a2.5,2.5,0,0,1,2.5-2.5h67.12a2.5,2.5,0,0,1,2.5,2.5v49.4a2.5,2.5,0,0,1-2.5,2.5v1a3.5,3.5,0,0,0,3.5-3.5v-49.4a3.5,3.5,0,0,0-3.5-3.5H157.32a3.5,3.5,0,0,0-3.5,3.5v49.4a3.5,3.5,0,0,0,3.5,3.5h67.12Z" transform="translate(0 0)"/><path class="cls-5" d="M299,94.93v-.5H238.16a2.5,2.5,0,0,1-2.5-2.5V5.08a2.5,2.5,0,0,1,2.5-2.5H299a2.5,2.5,0,0,1,2.5,2.5V91.93a2.5,2.5,0,0,1-2.5,2.5v1a3.5,3.5,0,0,0,3.5-3.5V5.08a3.5,3.5,0,0,0-3.5-3.5H238.16a3.5,3.5,0,0,0-3.5,3.5V91.93a3.5,3.5,0,0,0,3.5,3.5H299Z" transform="translate(0 0)"/><path class="cls-5" d="M299,209.87v-.5H238.16a2.5,2.5,0,0,1-2.5-2.5V105.18a2.5,2.5,0,0,1,2.5-2.5H299a2.5,2.5,0,0,1,2.5,2.5V206.87a2.5,2.5,0,0,1-2.5,2.5v1a3.5,3.5,0,0,0,3.5-3.5V105.18a3.5,3.5,0,0,0-3.5-3.5H238.16a3.5,3.5,0,0,0-3.5,3.5V206.87a3.5,3.5,0,0,0,3.5,3.5H299Z" transform="translate(0 0)"/><path class="cls-5" d="M63,94.93v-.5H3.5A2.5,2.5,0,0,1,1,91.93V5.08a2.5,2.5,0,0,1,2.5-2.5H63a2.5,2.5,0,0,1,2.5,2.5V91.93a2.5,2.5,0,0,1-2.5,2.5v1a3.5,3.5,0,0,0,3.5-3.5V5.08A3.5,3.5,0,0,0,63,1.58H3.5A3.5,3.5,0,0,0,0,5.08V91.93a3.5,3.5,0,0,0,3.5,3.5H63Z" transform="translate(0 0)"/><path class="cls-5" d="M63,209.87v-.5H3.5a2.5,2.5,0,0,1-2.5-2.5V105.18a2.5,2.5,0,0,1,2.5-2.5H63a2.5,2.5,0,0,1,2.5,2.5V206.87a2.5,2.5,0,0,1-2.5,2.5v1a3.5,3.5,0,0,0,3.5-3.5V105.18a3.5,3.5,0,0,0-3.5-3.5H3.5a3.5,3.5,0,0,0-3.5,3.5V206.87a3.5,3.5,0,0,0,3.5,3.5H63Z" transform="translate(0 0)"/><path class="cls-6" d="M208.62,108.44a1.51,1.51,0,0,0-.83.33q-3.12,8.16-4.95,7.92c-.35,0-.56-.37-.58-1a10.31,10.31,0,0,1,.31-2.53c.23-1.06.5-2.12.78-3.19s.56-2.28.89-3.61.6-2.38.75-3.14a1.15,1.15,0,0,0-.47-1.28,2.48,2.48,0,0,0-1.89-.06c-3.55.79-6.33,3.92-8.31,9.36q.92-6.36,1.14-7.17c.25-1.11.45-1.82.56-2.14a9.13,9.13,0,0,0-1.81-.11,17.39,17.39,0,0,0-3.45.33c-1.27.24-1.93.54-2,.92-.22,1.92-.24,3.93-.44,5.92s-.32,3.69-.44,5.31a10.85,10.85,0,0,1-1.25,1.69c-.53.55-1,.81-1.42.75-1-.16-.37-3,1.53-8.64,1.45-4.33.71-6.16-5.22-6.2a10.64,10.64,0,0,0-5.47,1.67,12.27,12.27,0,0,0-5.33,7c-.09.31-.16.6-.22.89a13.11,13.11,0,0,1-.83,1.36,6.94,6.94,0,0,1-1.64,1.94,1.67,1.67,0,0,1-1.14.33c-1-.16-2.28-1-3.7-2.58-1-1.09-2.86-3-3.78-4.14,5.64-10.17,20.73-12.5,25.06-12.5,1.36,0,1.41-6.25,0-6.25-17.55,0-25.36,14.85-27.09,20,.15-1.65.27-2.71.5-4.86s.4-3.85.53-5.11.26-2.73.42-4.36.32-2.91.42-3.86.23-2,.36-3.11.23-2,.33-2.69l.31-1.94c.1-.65.18-1.19.28-1.58a.94.94,0,0,0-.69-1.31,5,5,0,0,0-.94-.06A1.87,1.87,0,0,0,158,81a1.92,1.92,0,0,0-.69.94q-3.71,8.75-6.14,27.17a13.62,13.62,0,0,1-4.25,6,7.65,7.65,0,0,1-5.33,1.86,3.36,3.36,0,0,1-2.83-2.42,9.53,9.53,0,0,1-.19-5.47c.86-4.11,2-6.17,3.33-6.17.91,0,.95,1.54.08,4.64-.66,2.21-1.58,3.69-2.75,4.42-.41.25-.58.46-.53.58s.36.19.92,0a19.09,19.09,0,0,0,5.56-2.31,6.17,6.17,0,0,0,3-3.28,3.08,3.08,0,0,0-1.27-3.25,7.24,7.24,0,0,0-4.33-1.53,11.24,11.24,0,0,0-5.08,1l.11-.19a47.7,47.7,0,0,0,5.75-12q1.73-5.68-.94-8.33a6.8,6.8,0,0,0-2.92-1.25c-2.45-.66-5.21-1.51-3.08,1.25a5.29,5.29,0,0,1,.67,1.61,16.42,16.42,0,0,1-.47,7.47,53.89,53.89,0,0,1-3.42,9.56,56.47,56.47,0,0,1-5,8.83,18.25,18.25,0,0,1-5.25,5.36,3,3,0,0,1-.08-.67,14.41,14.41,0,0,1,0-1.61,9.22,9.22,0,0,1,.11-1.25q.59-3.9,1.5-8.28c.61-2.92,1.21-5.55,1.78-7.92.41-1.49.67-2.61.81-3.33a1.91,1.91,0,0,0-.25-1.61,5,5,0,0,0-1.69-1.22c-.53-.27-1.19-.62-2-1.08-1.65-1-1.76-.93-2.22.75s-1.31,3.68-2.44,6.56-2.38,5.88-3.76,8.94a79,79,0,0,1-4,7.83c-1.27,2.14-2.3,3.24-3.08,3.28a.4.4,0,0,1-.33-.33,2.94,2.94,0,0,1-.08-.72,12.34,12.34,0,0,1,.14-1.61,10.63,10.63,0,0,1,.25-1.25c.35-1.74.83-3.78,1.44-6.14s1.24-4.72,1.89-7,1.19-4.25,1.64-5.83a26,26,0,0,0,1.14-4.06,1.71,1.71,0,0,0-1.11-1.72c-.66-.35-1.68-1-3.11-1.81a2.42,2.42,0,0,0-2.56-.19c-2.66,1-5.33,2.1-8.06,3.39a68.72,68.72,0,0,0-8.39,4.67c-2.39,1.59-3.91,3-4.58,4.31a4.85,4.85,0,0,0,.25,4.78,6.87,6.87,0,0,0,2,2.22c3.24,2.23,2.16.94,2.47-1.64a6.51,6.51,0,0,1,.92-2.64,23.82,23.82,0,0,1,6-6.22,39.51,39.51,0,0,1,9.7-5.58c-.65,2.39-1.34,5-2.08,7.78s-1.46,5.52-2.08,8.11-1.09,4.78-1.39,6.53a10.14,10.14,0,0,0-.22,2.39,4.53,4.53,0,0,0,.88,2.23,6.42,6.42,0,0,0,1.92,1.75,4.29,4.29,0,0,0,2.33.69c1.68-.1,3.32-1.23,4.89-3.36a40.09,40.09,0,0,0,4.36-7.81q2-4.62,3.5-9c-.49,2.37-.94,4.71-1.33,7s-.67,4.33-.86,6.08a11.93,11.93,0,0,0-.08,2.39,4.48,4.48,0,0,0,1,2.28,6.61,6.61,0,0,0,2,1.72,5.7,5.7,0,0,0,2.45.72q2.48,0,6.78-4.42c.7-.71,1.39-1.46,2.08-2.25a5.34,5.34,0,0,0,2.11,4.92,11.11,11.11,0,0,0,6.56,2.25,11,11,0,0,0,7.67-2.69,14.82,14.82,0,0,0,3.06-3.5,19.67,19.67,0,0,0-.17,5.14c0,.25.56.48,1.75.64a21.92,21.92,0,0,0,3.53.17c1.14,0,1.72-.14,1.72-.33-.1-.69-.21-2.2-.3-3.83,2.38,2.53,5.24,4.38,7.42,4.22,1.27-.09,2.8-1.09,4.53-3.06a16.66,16.66,0,0,0,1.08-1.56,4.58,4.58,0,0,0,1.14,2.42,5.15,5.15,0,0,0,4.39,1.89c1.74-.18,3.1-1.57,4.14-4.19a18.21,18.21,0,0,1,1.11-2.42c.67-1.09.52-.37.42.14-.33,1.67-.72,4,.33,5.47a2.64,2.64,0,0,0,2.5,1.33c1-.14,2.16-1,3.42-2.61a5.18,5.18,0,0,0,0,1.47c.1.25.62.47,1.61.61a16.1,16.1,0,0,0,2.86.17c.91,0,1.36-.14,1.36-.33.8-3.5,1.42-6.5,4.28-10.25h.17a.75.75,0,0,1,0,.42,4,4,0,0,1-.14.69c-.05.25-.15.61-.28,1.08s-.23.92-.33,1.33a9.37,9.37,0,0,0-.31,3.61,6.53,6.53,0,0,0,.72,2.28,2.8,2.8,0,0,0,1.33,1.19,4.69,4.69,0,0,0,1.56.42,6,6,0,0,0,1.47-.11c1.17-.25,2.4-1.29,3.69-3.14a23.3,23.3,0,0,0,3.12-6.47v-.08C209,108.48,208.88,108.41,208.62,108.44ZM180,110.19q-1.81,6-2.81,6c-.46-.06-.63-.57-.53-1.56a30.82,30.82,0,0,1,1.05-4.64c.41-1.33.78-2.43,1.08-3.25s.58-1.53.89-2.17a4.77,4.77,0,0,1,.89-1.33,1.09,1.09,0,0,1,.69-.28.45.45,0,0,1,.5.39v.11a22.08,22.08,0,0,1-1.19,5C180.25,109.29,180.13,109.71,180,110.19Z" transform="translate(0 0)"/><rect class="cls-6" x="188.92" y="89.51" width="6.26" height="6.26" rx="0.88"/><rect class="cls-6" x="198.58" y="91.85" width="7.67" height="7.67" rx="1.08"/><rect class="cls-6" x="207.5" y="82.3" width="9.08" height="9.08" rx="1.28"/></g></svg> \ No newline at end of file diff --git a/images/wemawema_logo.png b/images/wemawema_logo.png new file mode 100644 index 00000000..cff5b9e7 Binary files /dev/null and b/images/wemawema_logo.png differ diff --git a/images/wikijs_logo.svg b/images/wikijs_logo.svg new file mode 100644 index 00000000..52c4a790 --- /dev/null +++ b/images/wikijs_logo.svg @@ -0,0 +1,119 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg width="100%" height="100%" viewBox="0 0 128 128" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"> + <path d="M63.692,64.781c0,0 20.812,0.75 30.375,9c9.562,8.25 16.125,24 13.312,37.688c-5.625,-1.313 -29.625,-5.438 -39.375,-17.438c-9.75,-12 -9.375,-20.437 -8.25,-25.5c1.125,-5.062 3.938,-3.75 3.938,-3.75" style="fill:#1c9cf3;fill-rule:nonzero;"/> + <path d="M60.044,68.582c-0.475,2.139 -0.988,5.498 0.046,9.953c1.125,4.848 3.801,10.068 8.198,15.31c10.06,11.993 38.391,16.857 38.734,16.932c1.078,-6.234 0.351,-12.729 -2.174,-19.516c-2.494,-6.705 -6.5,-12.669 -11.279,-16.793c-9.415,-8.122 -30.26,-8.963 -30.469,-8.971l-0.215,-0.007l-0.155,-0.081c-0.002,0 -0.177,-0.068 -0.418,-0.068c-0.998,0 -1.803,1.151 -2.268,3.241Z" style="fill:url(#_Radial1);fill-rule:nonzero;"/> + <path d="M58.254,64.781c0,0 2.625,5.438 -3.562,13.688c-6.188,8.25 -19.125,21.562 -51.375,18.75c1.125,-7.688 6.75,-15.563 12.937,-21.188c6.188,-5.625 20.063,-11.437 29.25,-11.625c9.188,-0.187 12.75,0.375 12.75,0.375" style="fill:#04bbf3;fill-rule:nonzero;"/> + <path d="M45.667,65.135c-4.286,0.086 -10.037,1.469 -15.783,3.791c-5.597,2.263 -10.53,5.128 -13.534,7.859c-6.762,6.148 -11.116,13.417 -12.413,19.94c2.596,0.201 7.447,0.302 7.447,0.302c11.549,0 21.195,-2.117 29.11,-6.626c7.017,-3.996 11.231,-8.995 13.79,-12.407c4.909,-6.545 4.149,-11.122 3.717,-12.555c-1.08,-0.116 -3.81,-0.344 -8.669,-0.344c-1.165,0 -2.398,0.013 -3.665,0.04Z" style="fill:url(#_Linear2);fill-rule:nonzero;"/> + <path d="M123.879,45.656c0,0 -3.75,10.875 -22.125,16.125c-18.375,5.25 -38.062,1.875 -38.062,1.875c0,0 4.687,-12.375 18.187,-18.187c13.5,-5.813 37.313,-0.563 42,0.187" style="fill:#02bef3;fill-rule:nonzero;"/> + <path d="M81.544,46.68c-10.988,4.731 -16.174,13.887 -17.695,17.055c2.266,0.309 7.463,0.901 13.983,0.901c8.656,0 16.566,-1.005 23.51,-2.989c14.825,-4.235 20.235,-12.672 21.72,-15.505c-0.243,-0.043 -17.126,-3.378 -26.758,-3.378c-6.904,0 -10.593,2.121 -14.76,3.916Z" style="fill:url(#_Radial3);fill-rule:nonzero;"/> + <path d="M57.921,65.406c0,0 -26.74,-1.259 -42.436,-12.71c-15.695,-11.451 -15.333,-15.226 -15.333,-15.226c0,0 17.598,-0.054 26.286,3.078c8.688,3.133 22.335,11.948 31.483,24.858" style="fill:#02bef3;fill-rule:nonzero;"/> + <path d="M16.409,52.486c6.069,4.428 13.396,7.559 22.006,9.665c0.002,0.001 0.002,0.001 0.004,0.001c9.149,1.098 16.735,2.791 18.559,2.946c-4.016,-5.462 -9.015,-10.404 -14.381,-14.517c-5.193,-3.99 -10.674,-7.143 -15.228,-8.943c-0.845,-0.336 -1.74,-0.638 -2.662,-0.915c-8.018,-2.397 -21.465,-2.553 -23.533,-2.583c0.509,0.942 2.299,4.909 15.235,14.346Z" style="fill:url(#_Radial4);fill-rule:nonzero;"/> + <path d="M58.113,67.998c2.377,0.304 3.66,5.62 2.862,11.865c-0.798,6.244 -3.376,11.067 -5.754,10.763c-2.377,-0.303 -3.66,-5.62 -2.862,-11.864c0.798,-6.245 3.376,-11.068 5.754,-10.764Z" style="fill:url(#_Radial5);"/> + <g> + <path d="M61.629,64.651c-7.957,1.497 3.291,37.119 15.337,42.529c23.156,10.401 35.993,-9.611 35.993,-16.859c0,-7.249 -31.885,-29.326 -51.33,-25.67Z" style="fill:url(#_Radial6);fill-rule:nonzero;"/> + <path d="M50.386,74.833c-2.895,5.261 20.365,23.165 30.768,21.166c10.402,-2 24.271,-12.529 23.192,-18.252c-1.079,-5.724 -19.995,-21.583 -35.132,-15.913c-9.928,3.719 -15.933,7.738 -18.828,12.999Z" style="fill:url(#_Radial7);fill-rule:nonzero;"/> + <path d="M60.31,77.16c-2.178,5.597 13.079,21.534 23.128,18.182c10.048,-3.352 22.409,-15.617 20.586,-21.148c-1.824,-5.532 -22.664,-18.761 -36.922,-11.146c-9.351,4.994 -4.615,8.515 -6.792,14.112Z" style="fill:url(#_Radial8);fill-rule:nonzero;"/> + <path d="M58.727,74.603c-1.855,4.721 11.081,18.141 19.616,15.304c8.535,-2.837 19.043,-13.192 17.501,-17.853c-1.542,-4.662 -19.221,-15.793 -31.334,-9.357c-7.946,4.221 -3.928,7.185 -5.783,11.906Z" style="fill:url(#_Radial9);fill-rule:nonzero;"/> + </g> + <g> + <path d="M61.553,74.101c-1.577,4.793 -19.173,24.596 -31.313,27.374c-12.14,2.779 -24.092,-9.922 -25.211,-15.785c-1.119,-5.862 17.202,-22.572 35.975,-24.02c12.313,-0.95 23.195,4.394 20.549,12.431" style="fill:url(#_Radial10);fill-rule:nonzero;"/> + <path d="M61.211,71.442c-1.214,5.581 -17.369,27.784 -29.357,30.15c-11.989,2.368 -24.988,-13.673 -26.567,-20.736c-1.579,-7.063 15.545,-25.529 34.304,-25.799c12.305,-0.176 23.657,7.026 21.62,16.385" style="fill:url(#_Radial11);fill-rule:nonzero;"/> + <path d="M52.51,74.882c-1.717,3.102 -15.803,13.833 -23.882,13.516c-8.079,-0.316 -13.708,-11.577 -13.531,-15.946c0.177,-4.369 14.254,-12.769 26.319,-10.259c7.913,1.647 13.974,7.488 11.094,12.689" style="fill:url(#_Radial12);fill-rule:nonzero;"/> + </g> + <path d="M34.746,69.666c-3.518,0.435 -20.481,-4.645 -24.977,-11.365c-4.497,-6.719 1.299,-17.895 4.937,-20.322c3.637,-2.426 18.71,4.018 23.777,15.251c3.322,7.368 2.164,15.705 -3.737,16.436" style="fill:url(#_Radial13);fill-rule:nonzero;"/> + <g> + <path d="M96.436,40.499c15.231,-2.015 28.385,2.308 29.356,9.649c0.971,7.34 -10.605,14.936 -25.836,16.951c-15.231,2.015 -28.385,-2.308 -29.356,-9.648c-0.971,-7.341 10.606,-14.937 25.836,-16.952Z" style="fill:url(#_Radial14);"/> + <path d="M99.526,41.492c13.736,1.417 24.292,8.341 23.559,15.452c-0.734,7.111 -12.482,11.734 -26.218,10.316c-13.737,-1.417 -24.293,-8.341 -23.559,-15.452c0.733,-7.111 12.481,-11.734 26.218,-10.316Z" style="fill:url(#_Radial15);"/> + <path d="M89.733,43.795c11.582,-1.429 21.602,2.408 22.361,8.563c0.76,6.154 -8.027,12.311 -19.609,13.74c-11.581,1.429 -21.601,-2.407 -22.36,-8.562c-0.76,-6.154 8.027,-12.311 19.608,-13.741Z" style="fill:url(#_Radial16);"/> + </g> + <path d="M59.353,65.162c0.022,0.369 0.978,7.846 -5.49,10.654c-5.003,2.171 -11.154,3.242 -24.792,-2.947c-13.638,-6.189 -18.377,-15.18 -18.377,-15.18c0,0 7.628,2.802 12.367,3.153c4.739,0.351 16.99,2.102 20.11,2.685c3.121,0.585 8.669,0.117 10.749,-0.349c2.081,-0.468 5.202,-1.752 5.433,1.984" style="fill:#b3c3ce;fill-rule:nonzero;"/> + <path d="M29.071,72.494c13.639,6.188 19.79,5.117 24.792,2.948c6.468,-2.809 5.512,-10.287 5.49,-10.655c-0.232,-3.736 -3.352,-2.452 -5.432,-1.984c-2.081,0.467 -7.49,0.137 -11.979,-0.178c-5.344,-0.375 -13.969,-1.5 -18.88,-2.158c-4.71,-0.631 -12.368,-3.153 -12.368,-3.153c0,0 4.74,8.991 18.377,15.18Z" style="fill:url(#_Linear17);fill-rule:nonzero;"/> + <path d="M55.262,58.355c0,0 -4.342,-3.433 -7.875,-7.169c-3.534,-3.735 -14.943,-14.538 -17.77,-17.466c-2.826,-2.928 -10.5,-12.924 -11.51,-17.164c-2.322,5.149 -3.836,14.539 -1.009,23.626c2.826,9.087 9.39,15.648 18.072,19.284c8.683,3.634 16.255,3.432 18.375,3.432c2.121,0 5.049,-1.413 1.717,-4.543" style="fill:#f5f6f2;fill-rule:nonzero;"/> + <path d="M17.473,40.182c2.827,9.086 9.39,15.649 18.073,19.283c8.682,3.635 16.254,3.687 18.375,3.687c1.197,0 4.989,-0.152 5.177,-0.715c0.403,-1.21 -1.926,-2.107 -3.375,-3.468c-3.848,-3.042 -3.776,-3.358 -7.961,-7.782c-3.534,-3.736 -14.943,-14.539 -17.769,-17.467c-2.827,-2.928 -10.502,-12.923 -11.511,-17.165c-2.322,5.15 -3.837,14.54 -1.009,23.627Z" style="fill:url(#_Linear18);fill-rule:nonzero;"/> + <path d="M103.337,21.668c-3.75,3.375 -10.395,7.863 -16.77,11.988c-6.375,4.125 -10.5,11.063 -15.375,18.375c-4.875,7.313 -9.75,10.875 -9.75,10.875c0,0 7.687,1.125 15,1.125c11.256,0 24,-9.375 28.687,-14.437c4.688,-5.063 7.838,-13.311 7.875,-21.75c0.043,-9.861 -4.519,-11.792 -4.519,-11.792c0,0 -1.398,2.24 -5.148,5.615Z" style="fill:url(#_Linear19);fill-rule:nonzero;"/> + <path d="M103.865,20.907c-3.751,3.375 -11.298,8.624 -17.673,12.749c-6.375,4.125 -10.5,11.063 -15.375,18.375c-3.751,5.625 -8.444,8.724 -10.41,10.329c-0.59,0.482 -0.934,1.765 -0.934,1.765c6.769,0.99 8.351,-0.094 16.594,-0.094c11.255,0 24,-9.375 28.687,-14.437c4.688,-5.063 7.688,-13.313 7.875,-21.75c0.188,-8.438 -4.125,-11.813 -4.125,-11.813c0,0 -0.89,1.501 -4.639,4.876Z" style="fill:url(#_Linear20);fill-rule:nonzero;"/> + <g> + <path d="M42.638,45.578c8.133,5.258 12.662,12.735 10.107,16.686c-2.555,3.952 -11.232,2.89 -19.365,-2.368c-8.132,-5.259 -12.661,-12.736 -10.106,-16.687c2.555,-3.951 11.232,-2.89 19.364,2.369Z" style="fill:url(#_Radial21);"/> + <path d="M41.855,45.022c7.726,5.84 12.065,13.139 9.684,16.29c-2.382,3.151 -10.588,0.968 -18.314,-4.871c-7.726,-5.839 -12.065,-13.139 -9.684,-16.29c2.382,-3.151 10.588,-0.968 18.314,4.871Z" style="fill:url(#_Radial22);"/> + </g> + <g> + <path d="M76.747,50.134c8.038,-4.494 15.957,-5.649 17.674,-2.578c1.717,3.071 -3.415,9.213 -11.452,13.706c-8.038,4.494 -15.958,5.649 -17.674,2.578c-1.717,-3.071 3.414,-9.213 11.452,-13.706Z" style="fill:url(#_Radial23);"/> + <path d="M79.138,46.315c7.951,-4.445 15.94,-5.31 17.83,-1.93c1.889,3.38 -3.032,9.733 -10.983,14.178c-7.951,4.445 -15.94,5.31 -17.83,1.93c-1.889,-3.38 3.032,-9.733 10.983,-14.178Z" style="fill:url(#_Radial24);"/> + <path d="M78.132,49.395c7.5,-5.169 15.482,-6.621 17.812,-3.24c2.33,3.381 -1.867,10.323 -9.367,15.492c-7.5,5.17 -15.481,6.622 -17.812,3.241c-2.33,-3.381 1.867,-10.323 9.367,-15.493Z" style="fill:url(#_Radial25);"/> + <path d="M87.314,42.046c2.878,-6.448 7.508,-10.659 10.332,-9.399c2.825,1.261 2.781,7.519 -0.098,13.967c-2.878,6.448 -7.508,10.659 -10.332,9.399c-2.824,-1.261 -2.78,-7.52 0.098,-13.967Z" style="fill:url(#_Radial26);"/> + </g> + <path d="M24.702,32.262c-0.805,5.902 0.586,11.977 3.363,15.977c2.778,4.001 10.763,11.808 18.631,12.917c5.111,0.72 10.596,0.69 10.596,0.69c0,0 -3.058,-2.97 -5.745,-8.561c-2.687,-5.591 -4.888,-10.846 -8.937,-14.358c-4.05,-3.511 -8.254,-7.303 -10.543,-10.031c-2.288,-2.729 -3.044,-4.431 -3.044,-4.431c0,0 -3.38,0.899 -4.321,7.797Z" style="fill:url(#_Linear27);fill-rule:nonzero;"/> + <path d="M24.965,32.299c-0.7,5.916 0.585,11.978 3.363,15.978c2.778,3.999 10.762,11.808 18.63,12.915c5.762,0.813 6.31,1.128 11.139,1.102c0,0 -3.6,-3.381 -6.288,-8.972c-2.688,-5.591 -4.887,-10.847 -8.937,-14.358c-4.05,-3.51 -8.808,-7.923 -11.097,-10.651c-2.289,-2.728 -2.764,-3.865 -2.764,-3.865c0,0 -3.347,1.934 -4.046,7.851Z" style="fill:url(#_Linear28);fill-rule:nonzero;"/> + <g> + <path d="M55.714,66.066c1.06,3.068 -2.837,7.203 -8.698,9.227c-5.86,2.024 -11.478,1.176 -12.538,-1.892c-1.059,-3.069 2.838,-7.203 8.698,-9.227c5.86,-2.024 11.478,-1.176 12.538,1.892Z" style="fill:url(#_Radial29);"/> + <path d="M53.204,68.127c0.12,2.902 -4.178,5.44 -9.591,5.663c-5.413,0.223 -9.905,-1.952 -10.024,-4.854c-0.12,-2.903 4.178,-5.44 9.591,-5.664c5.413,-0.223 9.905,1.953 10.024,4.855Z" style="fill:url(#_Radial30);"/> + <path d="M58.03,66.776c0.851,2.014 -2.078,5.179 -6.538,7.064c-4.459,1.885 -8.771,1.78 -9.622,-0.233c-0.851,-2.014 2.078,-5.179 6.538,-7.064c4.46,-1.885 8.771,-1.78 9.622,0.233Z" style="fill:url(#_Radial31);"/> + </g> + <path d="M31.673,65.694c2.166,3.131 5.442,5.398 8.477,6.086c3.035,0.689 10.168,0.927 14.358,-1.942c2.722,-1.865 5.295,-4.244 5.295,-4.244c0,0 -2.723,-0.082 -6.401,-1.561c-3.679,-1.478 -6.984,-3.008 -10.407,-2.918c-3.425,0.09 -7.043,0.115 -9.299,-0.185c-2.257,-0.299 -3.348,-0.777 -3.348,-0.777c0,0 -1.205,1.882 1.325,5.541Z" style="fill:url(#_Linear32);fill-rule:nonzero;"/> + <path d="M31.813,65.599c2.221,3.091 5.441,5.396 8.476,6.086c3.036,0.688 10.17,0.928 14.358,-1.942c3.068,-2.103 3.462,-2.19 5.729,-4.285c0,0 -3.155,-0.042 -6.835,-1.52c-3.679,-1.478 -6.982,-3.009 -10.407,-2.918c-3.424,0.091 -7.572,0.061 -9.828,-0.239c-2.256,-0.3 -2.97,-0.631 -2.97,-0.631c0,0 -0.745,2.356 1.477,5.449Z" style="fill:url(#_Linear33);fill-rule:nonzero;"/> + <path d="M98.926,64.619c-3.373,1.42 -18.374,0.622 -23.876,0c-5.503,-0.621 -11.189,-0.526 -12.25,-0.621c-3.796,-0.342 -3.106,0.887 -3.373,4.703c-0.621,10.563 3.373,12.694 6.302,13.138c2.93,0.443 5.593,-0.976 5.593,-0.976c0,0 29.024,-13.137 31.687,-14.558c0.496,-2.725 0.376,-3.586 -0.232,-3.586c-0.7,0 -2.047,1.14 -3.851,1.9Z" style="fill:url(#_Radial34);fill-rule:nonzero;"/> + <g> + <path d="M71.826,68.086c4.948,3.511 7.617,8.26 5.957,10.598c-1.659,2.338 -7.023,1.386 -11.971,-2.126c-4.947,-3.511 -7.616,-8.261 -5.957,-10.599c1.66,-2.338 7.024,-1.385 11.971,2.127Z" style="fill:url(#_Radial35);"/> + <path d="M70.546,68.086c3.798,2.696 5.535,6.783 3.875,9.121c-1.659,2.338 -6.09,2.047 -9.889,-0.649c-3.798,-2.696 -5.534,-6.783 -3.875,-9.121c1.66,-2.338 6.091,-2.047 9.889,0.649Z" style="fill:url(#_Radial36);"/> + <path d="M74.322,68.379c3.799,2.696 5.535,6.783 3.876,9.121c-1.66,2.338 -6.091,2.047 -9.889,-0.649c-3.799,-2.695 -5.535,-6.783 -3.875,-9.121c1.659,-2.338 6.09,-2.047 9.888,0.649Z" style="fill:url(#_Radial37);"/> + </g> + <path d="M61.502,69.307c2.637,4.341 9.236,7.059 12.286,7.682c3.05,0.622 6.968,-0.097 10.231,-2.06c3.811,-2.292 3.487,-4.503 3.487,-4.503c0,0 -1.191,-0.014 -3.37,-0.669c-2.18,-0.656 -5.468,-2.167 -8.551,-3.659c-3.083,-1.492 -6.724,-1.457 -10.686,-1.624c-3.961,-0.167 -6.476,-1.212 -6.476,-1.212c0,0 1.366,3.228 3.079,6.045Z" style="fill:url(#_Linear38);fill-rule:nonzero;"/> + <path d="M61.415,69.164c2.635,4.34 9.235,7.059 12.285,7.68c3.05,0.622 6.933,-0.154 10.23,-2.058c3.298,-1.903 3.588,-4.357 3.588,-4.357c0,0 -0.786,0.008 -2.965,-0.647c-2.18,-0.656 -5.972,-2.337 -9.056,-3.829c-3.083,-1.491 -6.724,-1.457 -10.686,-1.623c-3.961,-0.168 -6.854,-1.429 -6.854,-1.429c1.203,2.843 1.527,3.085 3.458,6.263Z" style="fill:url(#_Linear39);fill-rule:nonzero;"/> + <path d="M102.035,66.75c0,0 1.219,-0.938 1.125,-2.813c-0.093,-1.874 0.375,-4.687 -9.562,-10.781c-3.281,5.907 -14.625,21.657 -19.594,25.219c-4.969,3.563 -5.765,3.442 -5.765,3.442c0,0 2.871,-0.343 5.39,-2.223c2.722,-2.032 28.406,-12.844 28.406,-12.844" style="fill:#cbd3dd;fill-rule:nonzero;"/> + <path d="M74.379,78.563c-3.085,2.212 -4.026,2.655 -4.716,2.945c0.257,-0.077 2.189,-0.583 4.341,-1.726c3,-1.594 28.406,-12.844 28.406,-12.844c0,-0.001 1.219,-0.938 1.125,-2.813c-0.093,-1.875 0.375,-4.687 -9.562,-10.781c-3.281,5.906 -14.625,21.657 -19.594,25.219Z" style="fill:url(#_Linear40);fill-rule:nonzero;"/> + <path d="M58.915,67.448c-0.618,-0.001 -6.022,9.818 -3.491,21.069c0,-0.001 3.615,-4.339 4.058,-15.247c0.183,-4.5 -0.133,-5.823 -0.567,-5.823Z" style="fill:url(#_Linear41);fill-rule:nonzero;"/> + <path d="M44.829,36.179c1.272,-1.24 5.597,-0.248 6.615,1.116c0.995,1.333 6.118,6.458 5.875,14.213c0.788,0.033 1.832,0.17 3.031,0.17c1.035,0 1.994,-0.102 2.781,-0.152c-0.252,-7.765 4.878,-12.897 5.873,-14.231c1.017,-1.364 5.343,-2.356 6.615,-1.116c1.273,1.24 -2.036,1.116 -3.562,0.744c-4.941,1.094 -8.097,12.039 -8.77,14.594c1.153,-0.063 1.897,0.018 1.897,0.781c0,1.156 -1.619,3.021 -3.872,3.221c0.092,0.464 0.627,3.053 0.024,5.777c-0.245,1.107 -2.519,2.36 -2.519,2.36c-2.415,-7.912 -0.023,-8.682 0.01,-8.748c-1.978,-0.296 -3.058,-1.549 -3.058,-2.61c0,-0.676 0.518,-0.817 1.388,-0.796c-0.681,-2.582 -3.835,-13.487 -8.765,-14.579c-1.527,0.372 -4.835,0.496 -3.563,-0.744" style="fill:#00c6f9;fill-rule:nonzero;"/> + <path d="M69.004,37.669c-0.995,1.335 -6.125,6.466 -5.873,14.232c-0.787,0.05 -1.746,0.152 -2.781,0.152c-1.199,0 -2.243,-0.137 -3.031,-0.17c0.243,-7.755 -4.88,-12.88 -5.874,-14.214c-1.018,-1.364 -5.344,-2.355 -6.616,-1.115c-1.272,1.24 2.036,1.115 3.563,0.743c4.93,1.093 8.084,11.998 8.765,14.58c-0.87,-0.02 -1.387,0.12 -1.387,0.796c0,1.061 0.786,2.39 2.763,2.684c-0.033,0.066 -1.658,1.242 0.284,8.674c0,0 3.102,-0.292 2.628,-6.64c-0.054,-0.732 -0.13,-1.318 -0.223,-1.782c2.252,-0.201 3.962,-1.781 3.962,-2.936c0,-0.763 -0.744,-0.844 -1.897,-0.781c0.674,-2.555 3.829,-13.5 8.77,-14.595c1.527,0.372 4.835,0.497 3.562,-0.743c-0.408,-0.398 -1.13,-0.566 -1.956,-0.566c-1.75,0 -3.968,0.755 -4.659,1.681Z" style="fill:url(#_Radial42);fill-rule:nonzero;"/> + <path d="M48.011,24.197c-0.937,1.89 2.368,2.171 3.493,1.605c3.635,1.665 5.958,18.288 6.46,22.223c-0.641,-0.031 -1.022,0.183 -1.022,1.213c0,1.617 0.873,3.929 2.329,4.38c-0.024,0.1 -0.037,0.16 -0.037,0.16c0,0 -2.48,4.628 -0.417,14.753c0,0 2.307,-5.062 2.307,-12.099c0,-1.119 -0.096,-2.01 -0.165,-2.719c1.66,-0.305 2.92,-2.713 2.92,-4.475c0,-1.161 -0.547,-1.285 -1.397,-1.189c0.387,-4.644 1.969,-20.385 6.463,-22.247c1.125,0.566 4.286,0.354 3.348,-1.536c-0.937,-1.89 -4.255,-0.383 -5.571,1.387c-1.445,1.942 -4.932,10.629 -4.747,22.466c-0.579,0.076 -0.896,0.174 -1.658,0.174c-0.883,0 -1.653,-0.208 -2.234,-0.259c0.179,-11.822 -3.677,-19.606 -4.329,-21.666c-0.616,-1.949 -2.533,-3.101 -4.027,-3.101c-0.755,0 -1.401,0.295 -1.716,0.93Z" style="fill:url(#_Linear43);fill-rule:nonzero;"/> + <path d="M48.011,24.565c-0.937,1.874 2.368,2.154 3.493,1.591c3.635,1.652 5.958,18.142 6.46,22.047c-0.641,-0.031 -1.022,0.181 -1.022,1.203c0,1.604 0.873,3.897 2.329,4.343c-0.024,0.1 -0.037,0.159 -0.037,0.159c0,0 -4.295,14.835 -1.471,24.549c0,0 3.709,-12.317 3.361,-21.915c-0.04,-1.109 -0.096,-1.994 -0.165,-2.697c1.66,-0.303 2.92,-2.691 2.92,-4.439c0,-1.153 -0.547,-1.276 -1.397,-1.181c0.387,-4.607 1.969,-20.222 6.463,-22.069c1.125,0.563 4.286,0.352 3.348,-1.523c-0.937,-1.875 -4.255,-0.38 -5.571,1.375c-1.445,1.927 -4.932,10.545 -4.747,22.287c-0.579,0.075 -0.896,0.174 -1.658,0.174c-0.883,0 -1.653,-0.207 -2.234,-0.258c0.179,-11.728 -3.677,-19.448 -4.329,-21.492c-0.616,-1.934 -2.533,-3.077 -4.027,-3.077c-0.754,0.001 -1.401,0.293 -1.716,0.923Z" style="fill:url(#_Linear44);fill-rule:nonzero;"/> + <path d="M64.284,58.419c0,0 3.743,-2.96 6.791,-6.181c3.047,-3.222 12.885,-12.537 15.323,-15.063c2.438,-2.524 9.055,-11.144 9.926,-14.801c2.003,4.441 3.308,12.538 0.87,20.373c-2.437,7.836 -8.097,13.496 -15.584,16.63c-7.488,3.134 -14.018,2.96 -15.845,2.96c-1.829,0 -4.354,-1.219 -1.481,-3.918" style="fill:#f5f6f2;fill-rule:nonzero;"/> + <path d="M86.075,37.175c-2.439,2.525 -12.276,11.84 -15.323,15.062c-3.609,3.816 -3.547,4.088 -6.865,6.711c-1.25,1.174 -3.205,2.508 -2.946,3.073c0.259,0.564 3.467,0.316 4.5,0.316c1.828,0 8.358,0.174 15.846,-2.96c7.487,-3.135 13.146,-8.794 15.584,-16.629c2.439,-7.836 1.132,-15.933 -0.871,-20.374c-0.87,3.658 -7.487,12.277 -9.925,14.801Z" style="fill:url(#_Linear45);fill-rule:nonzero;"/> + <defs> + <radialGradient id="_Radial1" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-66.1387,0,-0,66.1387,60.5806,63.95)"><stop offset="0" style="stop-color:#3d4ead;stop-opacity:1"/><stop offset="1" style="stop-color:#00c0f3;stop-opacity:1"/></radialGradient> + <linearGradient id="_Linear2" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-54.7355,0,0,-32.1015,58.3206,81.1455)"><stop offset="0" style="stop-color:#3f51b4;stop-opacity:1"/><stop offset="1" style="stop-color:#00c0f3;stop-opacity:1"/></linearGradient> + <radialGradient id="_Radial3" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-66.1374,0,-0,66.1374,60.5808,63.95)"><stop offset="0" style="stop-color:#3d4ead;stop-opacity:1"/><stop offset="1" style="stop-color:#00c0f3;stop-opacity:1"/></radialGradient> + <radialGradient id="_Radial4" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-52.6361,-107.604,-12.8428,112.241,48.7863,138.585)"><stop offset="0" style="stop-color:#0072e9;stop-opacity:1"/><stop offset="1" style="stop-color:#00fdfe;stop-opacity:1"/></radialGradient> + <radialGradient id="_Radial5" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(4.0052,0.526563,-1.46889,11.3112,56.6669,79.3122)"><stop offset="0" style="stop-color:#153e68;stop-opacity:0.34"/><stop offset="1" style="stop-color:#153e68;stop-opacity:0.01"/></radialGradient> + <radialGradient id="_Radial6" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-10.3568,10.999,26.0381,24.5177,74.5359,78.3911)"><stop offset="0" style="stop-color:#00336f;stop-opacity:1"/><stop offset="1" style="stop-color:#00336f;stop-opacity:0"/></radialGradient> + <radialGradient id="_Radial7" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-6.51962,11.4057,24.5674,14.4231,72.7521,72.772)"><stop offset="0" style="stop-color:#00336f;stop-opacity:0.5"/><stop offset="1" style="stop-color:#00336f;stop-opacity:0"/></radialGradient> + <radialGradient id="_Radial8" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-4.96046,12.1651,26.2531,11.0614,72.05,73.4244)"><stop offset="0" style="stop-color:#00336f;stop-opacity:0.5"/><stop offset="1" style="stop-color:#00336f;stop-opacity:0"/></radialGradient> + <radialGradient id="_Radial9" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-4.22491,10.2622,22.277,9.29717,68.699,71.4404)"><stop offset="0" style="stop-color:#00336f;stop-opacity:1"/><stop offset="1" style="stop-color:#00336f;stop-opacity:0"/></radialGradient> + <radialGradient id="_Radial10" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-9.78901,-10.0451,-28.1355,22.8978,42.6909,72.541)"><stop offset="0" style="stop-color:#002d68;stop-opacity:1"/><stop offset="1" style="stop-color:#002d68;stop-opacity:0"/></radialGradient> + <radialGradient id="_Radial11" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-10.6184,-12.7117,-26.5102,25.0697,42.1289,68.125)"><stop offset="0" style="stop-color:#002d68;stop-opacity:1"/><stop offset="1" style="stop-color:#002d68;stop-opacity:0"/></radialGradient> + <radialGradient id="_Radial12" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-4.66402,-8.96904,-21.2029,10.9396,40.8426,70.2218)"><stop offset="0" style="stop-color:#002d68;stop-opacity:1"/><stop offset="1" style="stop-color:#002d68;stop-opacity:0"/></radialGradient> + <radialGradient id="_Radial13" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(4.51007,-9.04744,-21.3185,-10.7126,31.6527,57.4886)"><stop offset="0" style="stop-color:#002d68;stop-opacity:1"/><stop offset="1" style="stop-color:#002d68;stop-opacity:0"/></radialGradient> + <radialGradient id="_Radial14" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(55.5618,-7.25333,2.08197,15.9483,70.5908,57.3802)"><stop offset="0" style="stop-color:#00326d;stop-opacity:1"/><stop offset="1" style="stop-color:#003b79;stop-opacity:0"/></radialGradient> + <radialGradient id="_Radial15" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(50.0892,5.26339,-1.61895,15.4438,73.3147,51.7397)"><stop offset="0" style="stop-color:#00326d;stop-opacity:1"/><stop offset="1" style="stop-color:#003b79;stop-opacity:0"/></radialGradient> + <radialGradient id="_Radial16" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(42.2509,-5.13094,1.62846,13.3715,70.1175,57.4772)"><stop offset="0" style="stop-color:#00326d;stop-opacity:1"/><stop offset="1" style="stop-color:#003b79;stop-opacity:0"/></radialGradient> + <linearGradient id="_Linear17" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-48.7206,0,-0,48.7206,59.4148,67.2287)"><stop offset="0" style="stop-color:#f5f7fa;stop-opacity:1"/><stop offset="0.53" style="stop-color:#f1f4f2;stop-opacity:1"/><stop offset="1" style="stop-color:#bad7e9;stop-opacity:1"/></linearGradient> + <linearGradient id="_Linear18" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-43.2077,0,-0,43.2077,59.144,39.7308)"><stop offset="0" style="stop-color:#fafafa;stop-opacity:1"/><stop offset="0.26" style="stop-color:#f1f6f8;stop-opacity:1"/><stop offset="0.73" style="stop-color:#dce5eb;stop-opacity:1"/><stop offset="1" style="stop-color:#bbcfda;stop-opacity:1"/></linearGradient> + <linearGradient id="_Linear19" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0,-47.9791,-47.9791,-0,87.2229,64.0313)"><stop offset="0" style="stop-color:#fdfdff;stop-opacity:1"/><stop offset="0.26" style="stop-color:#f1f2f2;stop-opacity:1"/><stop offset="0.73" style="stop-color:#bfd2e0;stop-opacity:1"/><stop offset="1" style="stop-color:#afc0cc;stop-opacity:1"/></linearGradient> + <linearGradient id="_Linear20" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0,-48.0543,-48.0543,-0,86.4289,64.0856)"><stop offset="0" style="stop-color:#f1f6f6;stop-opacity:1"/><stop offset="0.41" style="stop-color:#fdfdfd;stop-opacity:1"/><stop offset="0.55" style="stop-color:#f5f8fa;stop-opacity:1"/><stop offset="0.89" style="stop-color:#d6e1e7;stop-opacity:1"/><stop offset="0.98" style="stop-color:#c3d3dd;stop-opacity:1"/><stop offset="1" style="stop-color:#c3d3dd;stop-opacity:1"/></linearGradient> + <radialGradient id="_Radial21" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(14.7354,9.52776,-4.62893,7.15901,38.0093,52.7366)"><stop offset="0" style="stop-color:#153e68;stop-opacity:1"/><stop offset="1" style="stop-color:#153e68;stop-opacity:0"/></radialGradient> + <radialGradient id="_Radial22" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(13.9988,10.5803,-4.31511,5.70934,37.54,50.7316)"><stop offset="0" style="stop-color:#153e68;stop-opacity:1"/><stop offset="1" style="stop-color:#153e68;stop-opacity:0"/></radialGradient> + <radialGradient id="_Radial23" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(14.5634,-8.14176,3.11074,5.56427,79.858,55.6982)"><stop offset="0" style="stop-color:#153e68;stop-opacity:1"/><stop offset="1" style="stop-color:#153e68;stop-opacity:0"/></radialGradient> + <radialGradient id="_Radial24" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(14.4062,-8.05386,3.42371,6.12408,82.5616,52.4391)"><stop offset="0" style="stop-color:#153e68;stop-opacity:1"/><stop offset="1" style="stop-color:#153e68;stop-opacity:0"/></radialGradient> + <radialGradient id="_Radial25" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(13.5894,-9.36638,4.22241,6.1262,82.3546,55.5213)"><stop offset="0" style="stop-color:#153e68;stop-opacity:1"/><stop offset="1" style="stop-color:#1a426b;stop-opacity:0"/></radialGradient> + <radialGradient id="_Radial26" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(5.21516,-11.6826,5.1171,2.2843,92.4313,44.33)"><stop offset="0" style="stop-color:#153e68;stop-opacity:1"/><stop offset="1" style="stop-color:#1b436c;stop-opacity:0"/></radialGradient> + <linearGradient id="_Linear27" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(4.72457,-33.536,33.536,4.72457,39.1596,60.0944)"><stop offset="0" style="stop-color:#fdfdff;stop-opacity:1"/><stop offset="0.26" style="stop-color:#f1f2f2;stop-opacity:1"/><stop offset="0.73" style="stop-color:#bfd2e0;stop-opacity:1"/><stop offset="1" style="stop-color:#afc0cc;stop-opacity:1"/></linearGradient> + <linearGradient id="_Linear28" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-33.3203,-0.000343575,0.000343575,-33.3203,58.0971,43.372)"><stop offset="0" style="stop-color:#fafafa;stop-opacity:1"/><stop offset="0.26" style="stop-color:#f1f6f8;stop-opacity:1"/><stop offset="0.73" style="stop-color:#dce5eb;stop-opacity:1"/><stop offset="1" style="stop-color:#bbcfda;stop-opacity:1"/></linearGradient> + <radialGradient id="_Radial29" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.92018,5.55941,-10.6179,3.66735,45.0962,69.7332)"><stop offset="0" style="stop-color:#153e68;stop-opacity:1"/><stop offset="1" style="stop-color:#153e68;stop-opacity:0"/></radialGradient> + <radialGradient id="_Radial30" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.21678,5.25887,-9.80783,0.404296,43.3965,68.5313)"><stop offset="0" style="stop-color:#153e68;stop-opacity:1"/><stop offset="1" style="stop-color:#153e68;stop-opacity:0"/></radialGradient> + <radialGradient id="_Radial31" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.54211,3.64848,-8.0801,3.41524,49.9501,70.1915)"><stop offset="0" style="stop-color:#153e68;stop-opacity:1"/><stop offset="1" style="stop-color:#153e68;stop-opacity:0"/></radialGradient> + <linearGradient id="_Linear32" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-12.2342,-17.8556,17.8556,-12.2342,50.4952,72.5871)"><stop offset="0" style="stop-color:#fdfdff;stop-opacity:1"/><stop offset="0.26" style="stop-color:#f1f2f2;stop-opacity:1"/><stop offset="0.73" style="stop-color:#bfd2e0;stop-opacity:1"/><stop offset="1" style="stop-color:#afc0cc;stop-opacity:1"/></linearGradient> + <linearGradient id="_Linear33" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-15.7162,14.3692,-14.3692,-15.7162,52.2159,56.533)"><stop offset="0" style="stop-color:#fafafa;stop-opacity:1"/><stop offset="0.26" style="stop-color:#f1f6f8;stop-opacity:1"/><stop offset="0.73" style="stop-color:#dce5eb;stop-opacity:1"/><stop offset="1" style="stop-color:#bbcfda;stop-opacity:1"/></linearGradient> + <radialGradient id="_Radial34" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-16.9591,0,-0,16.9591,81.3402,72.3216)"><stop offset="0" style="stop-color:#f9f9fa;stop-opacity:1"/><stop offset="1" style="stop-color:#f5f7f7;stop-opacity:1"/></radialGradient> + <radialGradient id="_Radial35" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(8.96408,6.36252,-3.00685,4.23632,68.8193,72.3219)"><stop offset="0" style="stop-color:#153e68;stop-opacity:1"/><stop offset="1" style="stop-color:#153e68;stop-opacity:0"/></radialGradient> + <radialGradient id="_Radial36" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(6.8821,4.88477,-3.00685,4.23632,67.5393,72.3219)"><stop offset="0" style="stop-color:#153e68;stop-opacity:1"/><stop offset="1" style="stop-color:#153e68;stop-opacity:0"/></radialGradient> + <radialGradient id="_Radial37" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(6.8821,4.88477,-3.00685,4.23632,71.3156,72.6152)"><stop offset="0" style="stop-color:#153e68;stop-opacity:1"/><stop offset="1" style="stop-color:#153e68;stop-opacity:0"/></radialGradient> + <linearGradient id="_Linear38" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(18.4986,-11.2373,-11.2373,-18.4986,64.0277,73.4655)"><stop offset="0" style="stop-color:#fdfdff;stop-opacity:1"/><stop offset="0.26" style="stop-color:#f1f2f2;stop-opacity:1"/><stop offset="0.73" style="stop-color:#bfd2e0;stop-opacity:1"/><stop offset="1" style="stop-color:#afc0cc;stop-opacity:1"/></linearGradient> + <linearGradient id="_Linear39" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(8.40915,19.5646,19.5646,-8.40915,69.0669,58.1262)"><stop offset="0" style="stop-color:#fafafa;stop-opacity:1"/><stop offset="0.26" style="stop-color:#f1f6f8;stop-opacity:1"/><stop offset="0.73" style="stop-color:#dce5eb;stop-opacity:1"/><stop offset="1" style="stop-color:#bbcfda;stop-opacity:1"/></linearGradient> + <linearGradient id="_Linear40" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(6.46873,14.3437,14.3437,-6.46873,80.3566,59.6296)"><stop offset="0" style="stop-color:#aebcd0;stop-opacity:1"/><stop offset="0.22" style="stop-color:#859bb9;stop-opacity:1"/><stop offset="0.53" style="stop-color:#a1b1c9;stop-opacity:1"/><stop offset="1" style="stop-color:#97a9c3;stop-opacity:1"/></linearGradient> + <linearGradient id="_Linear41" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0,-21.0692,-21.0692,0,57.0961,88.5161)"><stop offset="0" style="stop-color:#c0cbda;stop-opacity:1"/><stop offset="0.02" style="stop-color:#c0cbda;stop-opacity:1"/><stop offset="0.11" style="stop-color:#d4dbe5;stop-opacity:1"/><stop offset="0.45" style="stop-color:#f5f6f9;stop-opacity:1"/><stop offset="0.59" style="stop-color:#fdfdfd;stop-opacity:1"/><stop offset="1" style="stop-color:#fcfdfd;stop-opacity:1"/></linearGradient> + <radialGradient id="_Radial42" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-18.2184,0,-0,12.4951,60.2241,50.0098)"><stop offset="0" style="stop-color:#3f51b5;stop-opacity:1"/><stop offset="1" style="stop-color:#04bbf3;stop-opacity:1"/></radialGradient> + <linearGradient id="_Linear43" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0,-45.2637,-45.2637,-0,60.1552,68.5313)"><stop offset="0" style="stop-color:#afc0cc;stop-opacity:1"/><stop offset="0.24" style="stop-color:#afc0cc;stop-opacity:1"/><stop offset="0.74" style="stop-color:#f1f2f2;stop-opacity:1"/><stop offset="1" style="stop-color:#fdfdff;stop-opacity:1"/></linearGradient> + <linearGradient id="_Linear44" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0,-46.5257,-46.5257,-0,60.1552,70.1682)"><stop offset="0" style="stop-color:#fafafa;stop-opacity:1"/><stop offset="0.26" style="stop-color:#f1f6f8;stop-opacity:1"/><stop offset="0.73" style="stop-color:#dce5eb;stop-opacity:1"/><stop offset="1" style="stop-color:#bbcfda;stop-opacity:1"/></linearGradient> + <linearGradient id="_Linear45" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0,-39.9686,39.9686,-0,79.5662,62.3429)"><stop offset="0" style="stop-color:#f1f6f6;stop-opacity:1"/><stop offset="0.41" style="stop-color:#fdfdfd;stop-opacity:1"/><stop offset="0.55" style="stop-color:#f5f8fa;stop-opacity:1"/><stop offset="0.89" style="stop-color:#d6e1e7;stop-opacity:1"/><stop offset="0.98" style="stop-color:#c3d3dd;stop-opacity:1"/><stop offset="1" style="stop-color:#c3d3dd;stop-opacity:1"/></linearGradient> + </defs> +</svg> diff --git a/images/wordpress_logo.svg b/images/wordpress_logo.svg new file mode 100644 index 00000000..8628e3ad --- /dev/null +++ b/images/wordpress_logo.svg @@ -0,0 +1,68 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> +<svg version="1.0" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="540px" + height="122.523px" viewBox="0 0 540 122.523" enable-background="new 0 0 540 122.523" xml:space="preserve"> +<g id="Layer_1"> +</g> +<g id="Layer_2"> + <g> + <path fill="#00749A" d="M313.19,48.227h-21.257v2.255c6.649,0,7.718,1.425,7.718,9.857V75.54c0,8.431-1.068,9.975-7.718,9.975 + c-5.105-0.712-8.55-3.444-13.3-8.669l-5.462-5.937c7.362-1.308,11.28-5.938,11.28-11.164c0-6.53-5.58-11.518-16.031-11.518h-20.9 + v2.255c6.649,0,7.718,1.425,7.718,9.857V75.54c0,8.431-1.069,9.975-7.718,9.975v2.256h23.631v-2.256 + c-6.649,0-7.718-1.544-7.718-9.975v-4.274h2.018l13.182,16.505h34.557c16.981,0,24.344-9.024,24.344-19.832 + C337.534,57.133,330.172,48.227,313.19,48.227z M263.434,67.582V51.79h4.868c5.343,0,7.719,3.681,7.719,7.956 + c0,4.157-2.376,7.837-7.719,7.837H263.434z M313.547,84.09h-0.832c-4.274,0-4.868-1.068-4.868-6.531V51.79c0,0,5.225,0,5.7,0 + c12.35,0,14.605,9.024,14.605,16.031C328.152,75.064,325.896,84.09,313.547,84.09z"/> + <path fill="#00749A" d="M181.378,71.978l8.194-24.227c2.376-7.006,1.307-9.024-6.293-9.024v-2.376h22.325v2.376 + c-7.481,0-9.262,1.781-12.231,10.45L179.834,89.79h-1.543l-12.114-37.17l-12.349,37.17h-1.544l-13.181-40.613 + c-2.85-8.669-4.75-10.45-11.638-10.45v-2.376h26.363v2.376c-7.007,0-8.908,1.662-6.413,9.024l7.956,24.227l11.994-35.627h2.257 + L181.378,71.978z"/> + <path fill="#00749A" d="M221.752,89.314c-13.062,0-23.75-9.618-23.75-21.376c0-11.637,10.689-21.257,23.75-21.257 + c13.063,0,23.75,9.62,23.75,21.257C245.502,79.696,234.815,89.314,221.752,89.314z M221.752,50.365 + c-10.924,0-14.725,9.855-14.725,17.574c0,7.839,3.801,17.576,14.725,17.576c11.045,0,14.845-9.737,14.845-17.576 + C236.597,60.22,232.797,50.365,221.752,50.365z"/> + <path fill="#464342" d="M366.864,85.396v2.375H339.67v-2.375c7.957,0,9.382-2.018,9.382-13.895V52.502 + c0-11.877-1.425-13.776-9.382-13.776v-2.376h24.581c12.231,0,19.002,6.294,19.002,14.727c0,8.194-6.771,14.606-19.002,14.606 + h-6.769v5.817C357.482,83.378,358.907,85.396,366.864,85.396z M364.251,40.625h-6.769v20.664h6.769 + c6.651,0,9.738-4.631,9.738-10.212C373.989,45.377,370.902,40.625,364.251,40.625z"/> + <path fill="#464342" d="M464.833,76.609l-0.594,2.137c-1.068,3.919-2.376,5.344-10.807,5.344h-1.663 + c-6.174,0-7.243-1.425-7.243-9.856v-5.462c9.263,0,9.976,0.83,9.976,7.006h2.256V58.083h-2.256c0,6.175-0.713,7.006-9.976,7.006 + V51.79h6.53c8.433,0,9.738,1.425,10.807,5.344l0.595,2.255h1.899l-0.83-11.162h-34.914v2.255c6.649,0,7.719,1.425,7.719,9.857 + V75.54c0,7.713-0.908,9.656-6.151,9.933c-4.983-0.761-8.404-3.479-13.085-8.627l-5.463-5.937 + c7.363-1.308,11.282-5.938,11.282-11.164c0-6.53-5.581-11.518-16.031-11.518h-20.9v2.255c6.649,0,7.718,1.425,7.718,9.857V75.54 + c0,8.431-1.068,9.975-7.718,9.975v2.256h23.632v-2.256c-6.649,0-7.719-1.544-7.719-9.975v-4.274h2.019l13.181,16.505h48.806 + l0.713-11.161H464.833z M401.896,67.582V51.79h4.868c5.344,0,7.72,3.681,7.72,7.956c0,4.157-2.376,7.837-7.72,7.837H401.896z"/> + <path fill="#464342" d="M488.939,89.314c-4.75,0-8.907-2.493-10.688-4.038c-0.594,0.595-1.662,2.376-1.899,4.038h-2.257V72.928 + h2.375c0.951,7.837,6.412,12.468,13.419,12.468c3.8,0,6.888-2.137,6.888-5.699c0-3.087-2.731-5.463-7.6-7.719l-6.769-3.206 + c-4.751-2.258-8.313-6.177-8.313-11.401c0-5.7,5.344-10.568,12.707-10.568c3.919,0,7.243,1.425,9.263,3.087 + c0.593-0.475,1.187-1.782,1.544-3.208h2.256v14.014h-2.494c-0.832-5.582-3.919-10.213-10.212-10.213 + c-3.325,0-6.414,1.9-6.414,4.87c0,3.087,2.494,4.749,8.195,7.362l6.53,3.206c5.701,2.731,7.956,7.127,7.956,10.689 + C503.426,84.09,496.895,89.314,488.939,89.314z"/> + <path fill="#464342" d="M525.514,89.314c-4.751,0-8.908-2.493-10.688-4.038c-0.594,0.595-1.662,2.376-1.899,4.038h-2.257V72.928 + h2.375c0.95,7.837,6.412,12.468,13.419,12.468c3.8,0,6.888-2.137,6.888-5.699c0-3.087-2.731-5.463-7.601-7.719l-6.769-3.206 + c-4.75-2.258-8.313-6.177-8.313-11.401c0-5.7,5.344-10.568,12.707-10.568c3.919,0,7.243,1.425,9.263,3.087 + c0.593-0.475,1.187-1.782,1.542-3.208h2.257v14.014h-2.493c-0.832-5.582-3.919-10.213-10.212-10.213 + c-3.325,0-6.414,1.9-6.414,4.87c0,3.087,2.494,4.749,8.195,7.362l6.53,3.206c5.701,2.731,7.956,7.127,7.956,10.689 + C540,84.09,533.469,89.314,525.514,89.314z"/> + <g> + <path fill="#464342" d="M8.708,61.26c0,20.802,12.089,38.779,29.619,47.298L13.258,39.872 + C10.342,46.408,8.708,53.641,8.708,61.26z"/> + <path fill="#464342" d="M96.74,58.608c0-6.495-2.333-10.993-4.334-14.494c-2.664-4.329-5.161-7.995-5.161-12.324 + c0-4.831,3.664-9.328,8.825-9.328c0.233,0,0.454,0.029,0.681,0.042c-9.35-8.566-21.807-13.796-35.489-13.796 + c-18.36,0-34.513,9.42-43.91,23.688c1.233,0.037,2.395,0.063,3.382,0.063c5.497,0,14.006-0.667,14.006-0.667 + c2.833-0.167,3.167,3.994,0.337,4.329c0,0-2.847,0.335-6.015,0.501L48.2,93.547l11.501-34.493l-8.188-22.434 + c-2.83-0.166-5.511-0.501-5.511-0.501c-2.832-0.166-2.5-4.496,0.332-4.329c0,0,8.679,0.667,13.843,0.667 + c5.496,0,14.006-0.667,14.006-0.667c2.835-0.167,3.168,3.994,0.337,4.329c0,0-2.853,0.335-6.015,0.501l18.992,56.494 + l5.242-17.517C95.011,68.328,96.74,63.107,96.74,58.608z"/> + <path fill="#464342" d="M62.184,65.857l-15.768,45.819c4.708,1.384,9.687,2.141,14.846,2.141c6.12,0,11.989-1.058,17.452-2.979 + c-0.141-0.225-0.269-0.464-0.374-0.724L62.184,65.857z"/> + <path fill="#464342" d="M107.376,36.046c0.226,1.674,0.354,3.471,0.354,5.404c0,5.333-0.996,11.328-3.996,18.824l-16.053,46.413 + c15.624-9.111,26.133-26.038,26.133-45.426C113.815,52.124,111.481,43.532,107.376,36.046z"/> + <path fill="#464342" d="M61.262,0C27.483,0,0,27.481,0,61.26c0,33.783,27.483,61.263,61.262,61.263 + c33.778,0,61.265-27.48,61.265-61.263C122.526,27.481,95.04,0,61.262,0z M61.262,119.715c-32.23,0-58.453-26.223-58.453-58.455 + c0-32.23,26.222-58.451,58.453-58.451c32.229,0,58.45,26.221,58.45,58.451C119.712,93.492,93.491,119.715,61.262,119.715z"/> + </g> + </g> +</g> +</svg> diff --git a/images/writefreely_logo.svg b/images/writefreely_logo.svg new file mode 100644 index 00000000..294ca0a3 --- /dev/null +++ b/images/writefreely_logo.svg @@ -0,0 +1,69 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="8.5162764mm" + height="5.8980036mm" + viewBox="0 0 30.175782 20.898438" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + sodipodi:docname="logo.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="3.959798" + inkscape:cx="-36.448977" + inkscape:cy="-13.073394" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + fit-margin-top="0" + fit-margin-left="0" + fit-margin-right="0" + fit-margin-bottom="0" + inkscape:window-width="1280" + inkscape:window-height="722" + inkscape:window-x="0" + inkscape:window-y="26" + inkscape:window-maximized="1" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-191.62389,-331.91299)"> + <g + style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#292929;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + id="text4136"> + <path + d="m 220.8231,344.31534 q -0.66406,1.79687 -1.67968,3.33984 -1.01563,1.54297 -2.32422,2.69531 -1.3086,1.15235 -2.85156,1.81641 -1.52344,0.64453 -3.22266,0.64453 -0.70313,0 -1.44531,-0.21484 -0.72266,-0.21485 -1.32813,-0.76172 -0.58594,-0.56641 -0.95703,-1.50391 -0.37109,-0.95703 -0.37109,-2.40234 0,-0.52734 0.0586,-1.15234 l -0.0781,0 q -0.41016,1.17187 -1.13282,2.26562 -0.70312,1.09375 -1.62109,1.93359 -0.91797,0.83985 -1.99219,1.34766 -1.05469,0.48828 -2.14844,0.48828 -1.17187,0 -1.97265,-0.41015 -0.78125,-0.41016 -1.26953,-1.11329 -0.48828,-0.72265 -0.70313,-1.66015 -0.21484,-0.95703 -0.21484,-2.03125 0,-1.58203 0.15625,-3.30078 0.17578,-1.71875 0.37109,-3.32032 0.19531,-1.60156 0.35156,-2.94921 0.17579,-1.36719 0.17579,-2.22657 0,-0.37109 -0.0391,-0.70312 -0.0195,-0.35156 -0.13672,-0.60547 -0.11718,-0.25391 -0.33203,-0.41016 -0.21484,-0.15625 -0.58593,-0.15625 -0.33204,0 -0.70313,0.21485 -0.37109,0.19531 -0.74219,0.66406 -0.35156,0.44922 -0.70312,1.19141 -0.35156,0.74218 -0.64453,1.79687 l -1.11328,-0.23437 q 0.13671,-0.70313 0.48828,-1.66016 0.37109,-0.97656 0.97656,-1.85547 0.625,-0.89844 1.50391,-1.50391 0.89843,-0.625 2.10937,-0.625 1.58203,0 2.40234,0.9961 0.83985,0.99609 0.83985,2.89062 0,0.87891 -0.0781,1.99219 -0.0781,1.09375 -0.21484,2.28516 -0.11719,1.1914 -0.25391,2.42187 -0.13672,1.21094 -0.27343,2.32422 -0.11719,1.09375 -0.19532,1.99219 -0.0781,0.89844 -0.0781,1.46484 0,0.44922 0.0781,0.87891 0.0781,0.42969 0.27344,0.76172 0.19531,0.33203 0.52734,0.54687 0.33204,0.21485 0.83985,0.21485 1.28906,0 2.53906,-0.9375 1.25,-0.9375 2.22656,-2.71485 0.9961,-1.77734 1.60157,-4.35547 0.625,-2.59765 0.625,-5.89843 0,-1.03516 -0.0586,-2.12891 -0.0586,-1.11328 -0.21484,-2.28516 l 3.41797,0 q 0.0391,0.17578 0.0586,0.42969 0.0391,0.23438 0.0586,0.48828 0.0195,0.25391 0.0195,0.50781 0.0195,0.23438 0.0195,0.3711 0,2.01172 -0.21485,3.86719 -0.19531,1.83593 -0.44922,3.51562 -0.2539,1.66016 -0.46875,3.18359 -0.19531,1.52344 -0.19531,2.89063 0,0.58594 0.0781,1.15234 0.0977,0.56641 0.33203,0.9961 0.2539,0.42968 0.68359,0.70312 0.44922,0.25391 1.15235,0.25391 0.97656,0 1.95312,-0.41016 0.99609,-0.42969 1.89453,-1.1914 0.89844,-0.76172 1.66016,-1.81641 0.78125,-1.05469 1.34765,-2.32422 0.58594,-1.28906 0.89844,-2.73437 0.33203,-1.46485 0.33203,-3.02735 0,-0.76172 -0.0977,-1.48437 -0.0977,-0.72266 -0.3125,-1.34766 -0.21485,-0.625 -0.60547,-1.07422 -0.3711,-0.46875 -0.91797,-0.70312 -0.23438,0.52734 -0.68359,0.76172 -0.44922,0.23437 -0.95704,0.23437 -0.27343,0 -0.5664,-0.0977 -0.29297,-0.0976 -0.54688,-0.3125 -0.23437,-0.21484 -0.39062,-0.52734 -0.15625,-0.33203 -0.15625,-0.78125 0,-0.33203 0.11719,-0.68359 0.13671,-0.35157 0.41015,-0.625 0.27344,-0.29297 0.72266,-0.46875 0.46875,-0.19532 1.15234,-0.19532 1.21094,0 2.10938,0.56641 0.89843,0.56641 1.48437,1.52344 0.58594,0.95703 0.87891,2.22656 0.29297,1.26953 0.29297,2.69531 0,1.32813 -0.25391,2.71485 -0.23437,1.36718 -0.72266,2.67578 z" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Lora;-inkscape-font-specification:'Lora Italic';fill:#292929;fill-opacity:1" + id="path4140" /> + </g> + </g> +</svg> diff --git a/images/ynh_admin_etat_ip.png b/images/ynh_admin_etat_ip.png deleted file mode 100644 index 465ccd15..00000000 Binary files a/images/ynh_admin_etat_ip.png and /dev/null differ diff --git a/images/ynh_login.png b/images/ynh_login.png deleted file mode 100644 index 70c2878b..00000000 Binary files a/images/ynh_login.png and /dev/null differ diff --git a/images/z-push_logo.jpg b/images/z-push_logo.jpg new file mode 100644 index 00000000..ab0889f0 Binary files /dev/null and b/images/z-push_logo.jpg differ diff --git a/images/zabbix_logo.png b/images/zabbix_logo.png new file mode 100644 index 00000000..378fec3f Binary files /dev/null and b/images/zabbix_logo.png differ diff --git a/images/zap_logo.svg b/images/zap_logo.svg new file mode 100644 index 00000000..94578a3f --- /dev/null +++ b/images/zap_logo.svg @@ -0,0 +1,67 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="600" + height="600" + version="1.1" + id="svg4642" + sodipodi:docname="z1.svg" + inkscape:version="0.92.4 (5da689c313, 2019-01-14)"> + <metadata + id="metadata4648"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs4646" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1063" + inkscape:window-height="672" + id="namedview4644" + showgrid="false" + inkscape:zoom="0.49166667" + inkscape:cx="183.8425" + inkscape:cy="136.56161" + inkscape:window-x="70" + inkscape:window-y="306" + inkscape:window-maximized="0" + inkscape:current-layer="svg4642" + fit-margin-top="0" + fit-margin-left="0" + fit-margin-right="0" + fit-margin-bottom="0" /> + <!-- Created with SVG-edit - https://github.com/SVG-Edit/svgedit--> + <path + style="fill:#0080ff;stroke:#000000;stroke-width:11.39254951;fill-opacity:1" + inkscape:connector-curvature="0" + id="svg_1" + d="m 7.6461838,76.55706 v 0 c 0,-37.497465 29.9376822,-67.89515 66.8677022,-67.89515 h 30.394434 v 0 h 145.8932 273.54971 c 17.73445,0 34.7425,7.153197 47.28268,19.886025 12.54007,12.732827 19.58507,30.002237 19.58507,48.009125 v 169.73793 0 101.84272 0 c 0,37.49746 -29.93768,67.89514 -66.86773,67.89514 H 250.80155 L 60.210061,588.67446 104.90832,416.03285 H 74.51391 c -36.930019,0 -66.8677022,-30.39768 -66.8677022,-67.89514 v 0 -101.84272 0 z" /> + <path + style="fill:#ffffff;stroke:#000000;stroke-width:11.39254951;stroke-dasharray:none" + inkscape:connector-curvature="0" + stroke-linejoin="null" + stroke-linecap="null" + id="svg_3" + d="M 454.30834,147.05398 369.66275,250.77414 345.18881,227.34778 283.65705,343.29773 256.3655,320.78973 138.27006,477.83305 189.22401,260.17282 220.0756,288.46124 254.09826,152.4525 294.52959,184.03721 329.9166,40.609057 454.30832,147.05399 Z" /> +</svg> diff --git a/images/zerobin_logo.svg b/images/zerobin_logo.svg new file mode 100644 index 00000000..d63c65db --- /dev/null +++ b/images/zerobin_logo.svg @@ -0,0 +1 @@ +<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="38" width="38" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 38 38" xmlns:dc="http://purl.org/dc/elements/1.1/"><defs><radialGradient id="a" gradientUnits="userSpaceOnUse" cx="261" cy="240" r="341" gradientTransform="matrix(1.3 .000949 -.00102 1.4 -89.2 -86.2)"><stop stop-color="#ff0" offset="0"/><stop stop-color="#fa0" offset="1"/></radialGradient></defs><path stroke-linejoin="round" d="m250 3.16-227 123-0.42 247 227 124 227-123 0.42-247zm-0.711 97.9v0.006c3.78 0 7.6 0.297 11.5 0.875 41.1 6.17 72.2 40.6 66.4 70.5-5.8 29.8-33.3 56-40.1 61.7s37.1 165 37.1 165h-149s46.2-157 36.5-165c-9.7-8.14-41.2-36.9-36.4-68.9 4.81-32.1 37.6-64 74.2-64.1z" transform="matrix(.0709 0 0 .0709 1.4 1.38)" stroke="#000" stroke-linecap="round" stroke-width="10.6" fill="url(#a)"/></svg> diff --git a/images/zerotier_logo.png b/images/zerotier_logo.png new file mode 100644 index 00000000..0e49bd3f Binary files /dev/null and b/images/zerotier_logo.png differ diff --git a/install.md b/install.md deleted file mode 100644 index 255f78f0..00000000 --- a/install.md +++ /dev/null @@ -1,90 +0,0 @@ -# Installation guide - -There are multiple ways to install YunoHost. The process may differ slightly depending on whether it takes place at home or on a remote server, and depending on the hardware used: **[See the requirements](/hardware)** - -This page lists a few installation guides. - ---- - -<h1 style="font-weight: 100">Give it a try</h1> - -<div class="row"> - -<div class="col col-md-3 text-center"> -<a href="/try"><img height=150 src="/images/logo.png" style="vertical-align:bottom"><b><p>Demo server</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/install_on_virtualbox"><img src="/images/virtualbox.png" height=150 style="vertical-align:bottom"><b><p>Try in VirtualBox</p></b></a> -</div> - -</div> - - - - -</div> - -<br> - ---- - -<h1 style="font-weight: 100">Install at home</h1> - -<div class="row"> - -<div class="col col-md-3 text-center"> -<a href="/install_on_raspberry"><img src="/images/raspberrypi.jpg" height=150 style="vertical-align:bottom"><b><p>On a Raspberry Pi</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/install_on_arm_board"><img src="/images/olinuxino.jpg" height=150 style="vertical-align:bottom; padding:20px"><b><p>On an ARM board</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/install_iso"><img src="/images/computer.png" height=150 style="vertical-align:bottom"><b><p>On a regular computer</p></b></a> -</div> - -</div> - -<br> - - ---- - -<h1 style="font-weight: 100">Install on a remote server</h1> - -<div class="alert alert-info" markdown="1"> -<span class="glyphicon glyphicon-heart"></span> Local associative ISP near you might be able to provide you with a *Virtual Private Server* (VPS), managed by human beings who respect users and care about [Net Neutrality](https://en.wikipedia.org/wiki/Net_neutrality) ! Check out [this page](https://db.ffdn.org/) for more information. -</div> - -<div class="row"> - -<div class="block-center text-center"> -<a href="/install_on_vps"><img src="/images/vps.png" height=150 style="vertical-align:bottom; text-align:center"><b><p>On a dedicated or virtual private server</p></b></a> -</div> - -</div> - -<br> - ---- - -<h1 style="font-weight: 100">Advanced / others</h1> - -<div class="row"> - -<div class="col col-md-3 text-center"> -<a href="/install_on_debian"><img height=150 src="/images/debian-logo.png" style="vertical-align:bottom"> -<b><p>On Debian 9/Stretch</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/dev"><img src="/images/lxc.png" height=150 style="vertical-align:bottom"><b><p>Dev environment in LXD/LXC</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/docker"><img src="/images/docker.png" height=150 style="vertical-align:bottom"><b><p>(Non-official!) Docker images</p></b></a> -</div> - -</div> diff --git a/install_ar.md b/install_ar.md deleted file mode 100644 index 67afb69a..00000000 --- a/install_ar.md +++ /dev/null @@ -1,83 +0,0 @@ -# <div dir="rtl">دليل التنصيب</div> - -<div dir="rtl"> -يمكن تنصيب واي يونوهوست بِعدّة طُرُق و أساليب. فطريقة التنصيب تختلف قليلا فقط إذا ما كنتم تودون نثبيته محليا في المنزل أو عن بُعد و كذا نوع الجهاز : **[إطّلعوا على الأجهزة المتوافقة](/hardware)** -</div> -<div dir="rtl"> -تقوم هذه الصفحة بإحصاء الطرق المختلفة للتنصيب مُرتبةً حسب المواضيع. -</div> - ---- - -<h1 div dir="rtl" style="font-weight: 100">التجريب</h1> - -<div class="row"> - -<div class="col col-md-3 text-center"> -<a href="/try"><img height=150 src="/images/logo.png" style="vertical-align:bottom"><b><p>الخادوم التجريبي</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/install_on_virtualbox"><img src="/images/virtualbox.png" height=150 style="vertical-align:bottom"><b><p>التجريب على خادوم إفتراضي</p></b></a> -</div> - -</div> - -<br> - ---- - -<h1 dir="rtl" style="font-weight: 100">عملية النتصيب في المنزل</h1> - -<div class="row"> - -<div class="col col-md-3 text-center"> -<a href="/install_on_raspberry"><img src="/images/raspberrypi.jpg" height=150 style="vertical-align:bottom"><b><p>على راسبيري باي</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/install_on_arm_board"><img src="/images/cubieboard2.png" height=150 style="vertical-align:bottom"><b><p dir="rtl">على بطاقة أي أر آم ARM</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/install_iso"><img src="/images/computer.png" height=150 style="vertical-align:bottom"><b><p>على حاسوب عادي</p></b></a> -</div> - -</div> - -<br> - ---- - -<h1 dir="rtl" style="font-weight: 100">التنصيب عن بُعد</h1> - -<div dir="rtl" class="alert alert-info" markdown="1"> -<span class="glyphicon glyphicon-heart"></span> بإمكانك جمعيات مُزوّدي الإنترنت القريبة منكم أن تُوفّر لكم *خادوما إفتراضيا خاصا* (VPS) ، خادوم يُديره بشرٌ و يحترم قيمة المُستخدِمين و [حيادية الإنترنت](https://fr.wikipedia.org/wiki/Neutralit%C3%A9_du_r%C3%A9seau) ! إطّلعوا على [هذه الصفحة](https://db.ffdn.org/) للمزيد مِن المعلومات. -</div> - -<div class="row"> - -<div class="block-center text-center"> -<a href="/install_on_vps"><img src="/images/vps.png" height=150 style="vertical-align:bottom; text-align:center"><b><p dir="rtl">على خادوم مُستضاف أو خادوم إفتراضي خاص (VPS)</p></b></a> -</div> - -</div> - -<br> - ---- - -<h1 dir="rtl" style="font-weight: 100">طُرُق متقدمة / أخرى</h1> - -<div class="row"> - -<div class="col col-md-3 text-center"> -<a href="/install_on_debian"><img height=150 src="/images/debian-logo.png" style="vertical-align:bottom"> -<b><p>على ديبيان 9 / ستريتش</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/dev"><img src="/images/lxc.png" height=150 style="vertical-align:bottom"><b><p>Dev environment in LXD/LXC</p></b></a> -</div> - -</div> diff --git a/install_es.md b/install_es.md deleted file mode 100644 index cb16720a..00000000 --- a/install_es.md +++ /dev/null @@ -1,81 +0,0 @@ -# Guía de instalación - -Existen varias maneras de instalar YunoHost. El método y el hardware difieren un poco si quieres instalarlo en tu casa o en acceso remoto : **[ver el hardware compatible](/hardware)** - -Esta página enumera varios tipos de instalaciones, clasificados por categorías. - ---- - -<h1 style="font-weight: 100">Probar</h1> - -<div class="row"> - -<div class="col col-md-3 text-center"> -<a href="/try"><img height=150 src="/images/logo.png" style="vertical-align:bottom"><b><p>Servidor de demo</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/install_on_virtualbox"><img src="/images/virtualbox.png" height=150 style="vertical-align:bottom"><b><p>Probar en una máquina virtual</p></b></a> -</div> - -</div> - -<br> - ---- - -<h1 style="font-weight: 100">Instalar en casa</h1> - -<div class="row"> - -<div class="col col-md-3 text-center"> -<a href="/install_on_raspberry"><img src="/images/raspberrypi.jpg" height=150 style="vertical-align:bottom"><b><p>En un Raspberry Pi</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/install_on_arm_board"><img src="/images/olinuxino.jpg" height=150 style="vertical-align:bottom; padding:20px"><b><p>En un ARM board</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/install_iso"><img src="/images/computer.png" height=150 style="vertical-align:bottom"><b><p>En un ordenador estándar</p></b></a> -</div> - -</div> - -<br> - ---- - -<h1 style="font-weight: 100">Instalación remota</h1> - -<div class="alert alert-info" markdown="1"> -<span class="glyphicon glyphicon-heart"></span> Proveedores de Internet asociativos cerna de ti pueden proponerte un *Servidor Virtual Privado* (VPS), administrado por humanos que respetan los usuarios y la [Neutralitad de Internet](https://es.wikipedia.org/wiki/Neutralidad_de_red) ! Ver [esta página](https://db.ffdn.org/) por mas informaciones. -</div> - -<div class="row"> - -<div class="block-center text-center"> -<a href="/install_on_vps"><img src="/images/vps.png" height=150 style="vertical-align:bottom; text-align:center"><b><p>En un servidor dedicado o virtual (VPS)</p></b></a> -</div> - -</div> - -<br> - ---- - -<h1 style="font-weight: 100">Avanzado / otros</h1> - -<div class="row"> - -<div class="col col-md-3 text-center"> -<a href="/install_on_debian"><img height=150 src="/images/debian-logo.png" style="vertical-align:bottom"> -<b><p>Sur Debian 9/Stretch</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/dev"><img src="/images/lxc.png" height=150 style="vertical-align:bottom"><b><p>Dev environment in LXD/LXC</p></b></a> -</div> - - -</div> diff --git a/install_fr.md b/install_fr.md deleted file mode 100644 index a64868bd..00000000 --- a/install_fr.md +++ /dev/null @@ -1,84 +0,0 @@ -# Guide d’installation - -Il existe plusieurs manières d’installer YunoHost. La méthode d’installation diffère légèrement si vous souhaitez l’installer chez vous ou à distance, et du matériel utilisé : **[voir le matériel compatible](/hardware)** - -Cette page liste plusieurs types d’installations, classés par catégories. - ---- - -<h1 style="font-weight: 100">Essayer</h1> - -<div class="row"> - -<div class="col col-md-3 text-center"> -<a href="/try"><img height=150 src="/images/logo.png" style="vertical-align:bottom"><b><p>Serveur de démo</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/install_on_virtualbox"><img src="/images/virtualbox.png" height=150 style="vertical-align:bottom"><b><p>Essayer dans une machine virtuelle</p></b></a> -</div> - -</div> - -<br> - ---- - -<h1 style="font-weight: 100">Installer à la maison</h1> - -<div class="row"> - -<div class="col col-md-3 text-center"> -<a href="/install_on_raspberry"><img src="/images/raspberrypi.jpg" height=150 style="vertical-align:bottom"><b><p>Sur un Raspberry Pi</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/install_on_arm_board"><img src="/images/olinuxino.jpg" height=150 style="vertical-align:bottom; padding:20px"><b><p>Sur une carte ARM</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/install_iso"><img src="/images/computer.png" height=150 style="vertical-align:bottom"><b><p>Sur un ordinateur standard</p></b></a> -</div> - -</div> - -<br> - ---- - -<h1 style="font-weight: 100">Installer à distance</h1> - -<div class="alert alert-info" markdown="1"> -<span class="glyphicon glyphicon-heart"></span> Des FAI associatifs près de chez vous sont peut-être capable de vous fournir un *Serveur Privé Virtuel* (VPS), géré par des humains qui respectent les utilisateurs et la [Neutralité du Net](https://fr.wikipedia.org/wiki/Neutralit%C3%A9_du_r%C3%A9seau) ! Voir [cette page](https://db.ffdn.org/) pour plus d'informations. -</div> - -<div class="row"> - -<div class="block-center text-center"> -<a href="/install_on_vps"><img src="/images/vps.png" height=150 style="vertical-align:bottom; text-align:center"><b><p>Sur un serveur dédié ou virtuel (VPS)</p></b></a> -</div> - -</div> - -<br> - ---- - -<h1 style="font-weight: 100">Avancé / autres</h1> - -<div class="row"> - -<div class="col col-md-3 text-center"> -<a href="/install_on_debian"><img height=150 src="/images/debian-logo.png" style="vertical-align:bottom"> -<b><p>Sur Debian 9/Stretch</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/dev"><img src="/images/lxc.png" height=150 style="vertical-align:bottom"><b><p>Environnement de dev avec LXD/LXC</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/docker"><img src="/images/docker.png" height=150 style="vertical-align:bottom"><b><p>(Non-officiel!) Images docker</p></b></a> -</div> - -</div> diff --git a/install_iso.md b/install_iso.md deleted file mode 100644 index 43575844..00000000 --- a/install_iso.md +++ /dev/null @@ -1,36 +0,0 @@ -# Install on a regular computer - -*Find other ways to install YunoHost **[here](/install)**.* - -### Requirements - -<img src="/images/laptop.png" width=200> -<img src="/images/desktop.jpg"> -<img src="/images/nettop.jpg"> - -* A x86-compatible hardware dedicated to YunoHost: laptop, nettop, netbook, desktop. -You can use any computer with **256MB RAM or more**. -* Another computer to read this guide and access to your server. -* A [reasonable ISP](/isp), preferably with a good and unlimited upstream bandwidth -* A **USB stick** of at least 1GB capacity **OR** a standard **blank CD** -* ***Particular case*** : If your server has no graphic card, [prepare iso for booting with serial port](https://github.com/luffah/debian-mkserialiso). - ---- - -## Installation steps - - -<a class="btn btn-lg btn-default" href="/images">0. Download the YunoHost ISO image</a> - -<a class="btn btn-lg btn-default" href="/burn_or_copy_iso">1. Burn the ISO image on a USB stick</a> - -<a class="btn btn-lg btn-default" href="/boot_and_graphical_install">2. Boot the machine and run the installation</a> - -<a class="btn btn-lg btn-default" href="/postinstall">3. Proceed with the initial configuration (post-installation)</a> - ---- - -To connect directly to your computer or with [SSH](/ssh) (only on local network: -* User: **root** -* Password: **yunohost** - diff --git a/install_iso_es.md b/install_iso_es.md deleted file mode 100644 index 51b5889d..00000000 --- a/install_iso_es.md +++ /dev/null @@ -1,38 +0,0 @@ -# Instalación en un ordenador - -*Encontrar otros medios de instalar Yunohost **[aquí](/install)**.* - -## Prerrequisitos - -<img src="/images/laptop.png" width=200> -<img src="/images/desktop.jpg"> -<img src="/images/nettop.jpg"> - -* Un ordenador compatible x86 dedicado a YunoHost : portátil, netbook, ordenador de escritorio. Puedes reutilizar calquiera máquina con **256 Mo de RAM mínimo** -* Otro ordenador para examinar esta guía y acceder a tu servidor -* Un [proveedor de Internet ético](/isp), de preferencia con acceso de buena velocidad (ascendente) -* Una **memoria USB** con capacidad mínima de 1Go **O** un **CD en blanco** estándar -* ***Casos particulares*** : si tu servidor no tiene tarjeta gráfica, hay que preparar un iso que se inicie sobre el puerto de serie](https://github.com/luffah/debian-mkserialiso). - ---- - -## Etapas de instalación - -<a class="btn btn-lg btn-default" href="/images">0. Descargar la imagen ISO</a> - -<a class="btn btn-lg btn-default" href="/burn_or_copy_iso">1. Copiar la imagen ISO</a> - -<a class="btn btn-lg btn-default" href="/boot_and_graphical_install">2. Encender e instalar</a> - -<a class="btn btn-lg btn-default" href="/postinstall">3. Post-instalación</a> - ---- - -Para conectarse directamente al ordenador (únicamente en local) : -* Usuario : **root** -* Contraseña : **yunohost** - - -## Casos específicos / avanzados - -si el ordenador no tiene tarjeta gráfica pero sí tiene un puerto de serie : hay que modificar el ISO para un inicio con la consola de serie. Una solución es utilizar [un script que modifica las opciones de inicio](https://github.com/luffah/debian-mkserialiso). diff --git a/install_iso_fr.md b/install_iso_fr.md deleted file mode 100644 index 85bddef8..00000000 --- a/install_iso_fr.md +++ /dev/null @@ -1,38 +0,0 @@ -# Installation sur ordinateur - -*Trouvez d’autres moyens d’installer YunoHost **[ici](/install)**.* - -## Prérequis - -<img src="/images/laptop.png" width=200> -<img src="/images/desktop.jpg"> -<img src="/images/nettop.jpg"> - -* Un matériel compatible x86 dédié à YunoHost : portable, netbook, ordinateur. Vous pouvez réutiliser n’importe quelle machine avec **256 Mo de RAM minimum** -* Un autre ordinateur pour parcourir ce guide et accéder à votre serveur -* Un [fournisseur d’accès correct](/isp), de préférence avec une bonne vitesse de téléversement (débit montant) -* Une **clé USB** d’une capacité minimum d’1Go **OU** un **CD vierge** standard -* ***Cas particulier*** : Si votre serveur n'a pas de carte graphique, il faut [préparer un iso qui démarre sur le port série](https://github.com/luffah/debian-mkserialiso). - ---- - -## Étapes d’installation - -<a class="btn btn-lg btn-default" href="/images">0. Télécharger l'image ISO de YunoHost</a> - -<a class="btn btn-lg btn-default" href="/burn_or_copy_iso">1. Flasher l’image ISO sur une clef USB</a> - -<a class="btn btn-lg btn-default" href="/boot_and_graphical_install">2. Démarrer la machine et installer YunoHost</a> - -<a class="btn btn-lg btn-default" href="/postinstall">3. Effectuer la configuration initiale (post-installation)</a> - ---- - -Pour se connecter directement sur l’ordinateur (uniquement en local) : -* Utilisateur : **root** -* Mot de passe : **yunohost** - - -## Cas spécifiques / avancés - -Si l'ordinateur n'a pas de carte graphique mais a un port série : il faut modifier l'ISO pour démarrer avec la console série. Une solution est d'utiliser [un script qui modifie les options de démarrage](https://github.com/luffah/debian-mkserialiso). diff --git a/install_iso_it.md b/install_iso_it.md deleted file mode 100644 index b16d068e..00000000 --- a/install_iso_it.md +++ /dev/null @@ -1,37 +0,0 @@ -# Installazione in un computer - -*Altri modi per installare YunoHost **[Clicca qui](/install)**.* - -### Requisiti - -<img src="/images/laptop.png" width=200> -<img src="/images/desktop.jpg"> -<img src="/images/nettop.jpg"> - -* Un computer con architettura x86: laptop, nettop, netbook, desktop. -Puoi usare qualsiasi computer con minimo 256mb di ram**. -* Un altro computer per leggere questa guida e per accedere al tuo server. -* un [buon ISP](/isp), possibilmente con una banda illimitata. -* una **chiavetta usb** da almeno 1gb **O** un classico **cd/dvd vuoto** -* ***casi particolari*** : se il tuo server non ha una scheda video, [prepara l'iso per fare il boot con la porta seriale}(https://github.com/luffah/debian-mkserialiso). - ---- - -## Installazione - - -<a class="btn btn-lg btn-default" href="/images">0. Scarica l'ISO di YunoHost</a> - -<a class="btn btn-lg btn-default" href="/burn_or_copy_iso">1. Scrivi l'immagine disco su una chiavetta usb</a> - -<a class="btn btn-lg btn-default" href="/boot_and_graphical_install">2. Accendi il computer facendo il boot da usb</a> - -<a class="btn btn-lg btn-default" href="/postinstall">3. Procedi con la prima configurazione (post-installation)</a> - ---- - -To connect directly to your computer or with [SSH](/ssh) (only on local network: -* User: **root** -* Password: **yunohost** - - diff --git a/install_it.md b/install_it.md deleted file mode 100644 index 8fa8f550..00000000 --- a/install_it.md +++ /dev/null @@ -1,89 +0,0 @@ -# Guida all'installazione - -Ci sono diverse maniere per installare YunoHost. Il procedimento può essere leggermente diverso a seconda che si esegua a casa o su un server remoto, e dipende dall'hardware usato: -**[Vedi i requisiti](/hardware)** - -Questa pagina elenca alcune guide all'installazione. - ---- - -<h1 style="font-weight: 100">Provalo</h1> - -<div class="row"> - -<div class="col col-md-3 text-center"> -<a href="/try"><img height=150 src="/images/logo.png" style="vertical-align:bottom"><b><p>Server demo</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/install_on_virtualbox"><img src="/images/virtualbox.png" height=150 style="vertical-align:bottom"><b><p>Provalo in VirtualBox</p></b></a> -</div> - -</div> - - - - -</div> - -<br> - ---- - -<h1 style="font-weight: 100">Installalo a casa</h1> - -<div class="row"> - -<div class="col col-md-3 text-center"> -<a href="/install_on_raspberry"><img src="/images/raspberrypi.jpg" height=150 style="vertical-align:bottom"><b><p>Su un Raspberry Pi</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/install_on_arm_board"><img src="/images/olinuxino.jpg" height=150 style="vertical-align:bottom; padding:20px"><b><p>Su una scheda ARM</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/install_iso"><img src="/images/computer.png" height=150 style="vertical-align:bottom"><b><p>Su un computer normale</p></b></a> -</div> - -</div> - -<br> - - ---- - -<h1 style="font-weight: 100">Installalo su un server remoto</h1> - -<div class="alert alert-info" markdown="1"> -<span class="glyphicon glyphicon-heart"></span> ISP locali potrebbero essere in grado di fornire un *Server Privato Vrituale* (VPS), gesito da esseri umani che rispettano gli utenti e si preoccupano della [Net Neutrality](https://en.wikipedia.org/wiki/Net_neutrality) ! Guarda [questa pagina](https://db.ffdn.org/) per maggiori informazioni. -</div> - -<div class="row"> - -<div class="block-center text-center"> -<a href="/install_on_vps"><img src="/images/vps.png" height=150 style="vertical-align:bottom; text-align:center"><b><p>Su un server dedicato o un server privato virtuale (VPS)</p></b></a> -</div> - -</div> - -<br> - ---- - -<h1 style="font-weight: 100">Avanzate / altri</h1> - -<div class="row"> - -<div class="col col-md-3 text-center"> -<a href="/install_on_debian"><img height=150 src="/images/debian-logo.png" style="vertical-align:bottom"> -<b><p>Su Debian 9/Stretch</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/dev"><img src="/images/lxc.png" height=150 style="vertical-align:bottom"><b><p>Dev environment in LXD/LXC</p></b></a> -</div> - -</div> - -<br> diff --git a/install_manually.md b/install_manually.md deleted file mode 100644 index 41faa392..00000000 --- a/install_manually.md +++ /dev/null @@ -1,18 +0,0 @@ -# Installing YunoHost manually - -Once you have **Debian 9** <small>(with **kernel >= 3.12**)</small> and access to a command line on your server (either directly or through SSH), you can install yunohost by running command as root : - -```bash -curl https://install.yunohost.org | bash -``` - -<small>*(If `curl` is not installed on your system, you might need to install it with `apt install curl`. Otherwise, if the command does not do anything, you might want to `apt install ca-certificates`)*</small> - -Once the installation is finished, you may want to [**proceed to post-installation**](/postinstall) - ---- - -**Note for advanced users concerned with the `curl|bash` approach** - -If you strongly object to the `curl|bash` way (and similar commands) of installing software, consider reading ["Is curl|bash insecure?"](https://sandstorm.io/news/2015-09-24-is-curl-bash-insecure-pgp-verified-install) on Sandstom's blog, and possibly [this discussion on Hacker News](https://news.ycombinator.com/item?id=12766350). - diff --git a/install_manually_es.md b/install_manually_es.md deleted file mode 100644 index 8f273361..00000000 --- a/install_manually_es.md +++ /dev/null @@ -1,18 +0,0 @@ -# Instalar YunoHost manualmente - -Una vez que tienes acceso a tu servidor (directamente o con SSH), puedes instalar Yunohost ejecutando este comando como root : - -```bash -curl https://install.yunohost.org | bash -``` - -<small>*(Si `curl` no está instalado en tu sistema, tal vez tendrás que instalarlo con `apt install curl`. De otro modo, si el comando no muestra nada, puedes intentar `apt install ca-certificates`)*</small> - -Cuando la instalación esté terminada, habrá que [**proceder a la post-instalación**](/postinstall) - ---- - -**Nota para los usuarios expertos preocupados por el enfoque `curl|bash`** - -Si no te gusta utilizar `curl|bash` (ou comandos similares) para desplegar software, toma el tiempo de leer ["Is curl|bash insecure?"](https://sandstorm.io/news/2015-09-24-is-curl-bash-insecure-pgp-verified-install) en el blog de Sandstorm, y también [esta discusión en Hacker News](https://news.ycombinator.com/item?id=12766350). - diff --git a/install_manually_fr.md b/install_manually_fr.md deleted file mode 100644 index 9fddd634..00000000 --- a/install_manually_fr.md +++ /dev/null @@ -1,18 +0,0 @@ -# Installer YunoHost manuellement - -Une fois que vous avez accès à votre serveur (directement ou par SSH), vous pouvez installer YunoHost en exécutant cette commande en tant que root : - -```bash -curl https://install.yunohost.org | bash -``` - -<small>*(Si `curl` n'est pas installé sur votre système, il vous faudra peut-être l'installer avec `apt install curl`. Autrement, si la commande n'affiche rien du tout, vous pouvez tenter `apt install ca-certificates`)*</small> - -Une fois l'installation terminée, il vous faudra [**procéder à la post-installation**](/postinstall) - ---- - -**Note pour les utilisateurs avancés inquiets à propos de l'approche `curl|bash`** - -Si vous êtes suspicieux de la tendance à utiliser `curl|bash` (ou commandes similaires) pour déployer des logiciels, prenez le temps de lire ["Is curl|bash insecure?"](https://sandstorm.io/news/2015-09-24-is-curl-bash-insecure-pgp-verified-install) sur le blog de Sandstom, et possiblement [cette discussion sur Hacker News](https://news.ycombinator.com/item?id=12766350). - diff --git a/install_on_arm_board.md b/install_on_arm_board.md deleted file mode 100644 index 9703b54f..00000000 --- a/install_on_arm_board.md +++ /dev/null @@ -1,52 +0,0 @@ -# Install YunoHost on ARM board - -*Find other ways to install YunoHost **[here](/install)**.* - -<center> -<img src="/images/olinuxino.jpg" width=250 style="padding-bottom:20px"> -<img src="/images/micro-sd-card.jpg"> -</center> - -<div class="alert alert-info" markdown="1"> -Before setting up a server at home, it is recommended that you know the [possible limitations imposed by your ISP](/isp). If they are too restrictive, you might consider using a VPN to bypass them. -</div> - -<div class="alert alert-warning" markdown="1"> -YunoHost doesn't yet support ARM64 boards. For more information, see [this issue](https://github.com/YunoHost/issues/issues/438). -</div> - -## Pre-requisites - -- An ARM board with 500MHz CPU and 512MB RAM ; -- A power supply for your board ; -- A microSD card: **8GB** capacity (at least) and **Class 10** speed rate are highly recommended (like the [Transcend 300x](http://www.amazon.fr/Transcend-microSDHC-adaptateur-TS32GUSDU1E-Emballage/dp/B00CES44EO)) ; -- An ethernet cable (RJ-45) to connect your board to your router ; -- A [reasonable ISP](/isp), preferably with a good and unlimited upload bandwidth. - ---- - -## Install with the pre-installed image (recommended) - -<a class="btn btn-lg btn-default" href="/images">0. Download the pre-installed image for your board</a><br><small>If no pre-installed image exists for your board, you can follow the instructions to "Install on top of ARMbian"</small> - -<a class="btn btn-lg btn-default" href="/copy_image">1. Flash the SD card with the image</a> - -<a class="btn btn-lg btn-default" href="/plug_and_boot">2. Power up the board and let it boot</a> - -<a class="btn btn-lg btn-default" href="/ssh">3. Connect to your server with SSH</a> - -<a class="btn btn-lg btn-default" href="/postinstall">4. Proceed with the initial configuration (post-installation)</a> - ---- - -## Install on top or ARMbian - -<a class="btn btn-lg btn-default" href="https://www.armbian.com/download/">0. Download the ARMbian image for your board</a> - -<a class="btn btn-lg btn-default" href="/copy_image">1. Flash the SD card with the image</a> - -<a class="btn btn-lg btn-default" href="/plug_and_boot">2. Plug & boot</a> - -<a class="btn btn-lg btn-default" href="/ssh">3. Connect to your server with SSH</a> - -<a class="btn btn-lg btn-default" href="/install_manually">4. Follow the generic install procedure</a> diff --git a/install_on_arm_board_es.md b/install_on_arm_board_es.md deleted file mode 100644 index 8a3d5278..00000000 --- a/install_on_arm_board_es.md +++ /dev/null @@ -1,51 +0,0 @@ -# Instalar Yunohost en una tarjeta ARM - -*Encontrar otros medios de instalar Yunohost **[aquí](/install)**.* - -<center> -<img src="/images/olinuxino.jpg" width=250 style="padding-bottom:20px"> -<img src="/images/micro-sd-card.jpg"> -</center> - -<div class="alert alert-info" markdown="1"> -Antes de alojar tu propio servidor en tu casa, te recomendamos que consultes las [posibles restricciones impuestas por tu Proveedor de Internet](/isp). Si tu proveedor es demasiado restrictivo, puedes utilizar un VPN para eludir estas restricciones. -</div> - -<div class="alert alert-warning" markdown="1"> -YunoHost todavía no es compatible con las tarjetas ARM64. Para obtener más informaciones, ver [este ticket](https://github.com/YunoHost/issues/issues/438). -</div> - -- Una tarjeta ARM con un procesador de 500 MHz et 512 Mo de memoria RAM ; -- Un adaptador de corriente para alimentar la tarjeta ; -- Una tarjeta microSD : al menos **8 Go** y **Clase 10** (por ejemplo una [Transcend 300x](http://www.amazon.fr/Transcend-microSDHC-adaptateur-TS32GUSDU1E-Emballage/dp/B00CES44EO)) ; -- Un cable ethernet/RJ-45 para conectar la carte con el router / caja internet. (Con el Raspberry Pi 0, puedes conectar tu tarjeta con un cable OTG y un adaptador Wifi USB.) -- Un [proveedor de Internet ético](/isp), de preferencia con una buena velocidad de upload. - ---- - -## Instalación con la imagen pre-instalada (recomendada) - -<a class="btn btn-lg btn-default" href="/images">0. Descargar la imagen pre-instalada para tu tarjeta ARM</a><br><small>Si no existe una imagen dedicada a tu tarjeta, puedes seguir la sección "Instalación encima de ARMbian".</small> - -<a class="btn btn-lg btn-default" href="/copy_image">1. Poner la imagen en tu tarjeta SD</a> - -<a class="btn btn-lg btn-default" href="/plug_and_boot">2. Conectar y encender</a> - -<a class="btn btn-lg btn-default" href="/ssh">3. Conectarse en SSH</a> - -<a class="btn btn-lg btn-default" href="/postinstall">4. Proceder a la post-instalación</a> - ---- - -## Instalación encima de ARMbian - -<a class="btn btn-lg btn-default" href="https://www.armbian.com/download/">0. Descargar la imagen ARMbian para tu tarjeta ARM</a> - -<a class="btn btn-lg btn-default" href="/copy_image">1. Poner la imagen en tu tarjeta SD</a> - -<a class="btn btn-lg btn-default" href="/plug_and_boot">2. Conectar y encender</a> - -<a class="btn btn-lg btn-default" href="/ssh">3. Conectarse en SSH</a> - -<a class="btn btn-lg btn-default" href="/install_manually">4. Proceder a la post-instalación genérica</a> - diff --git a/install_on_arm_board_fr.md b/install_on_arm_board_fr.md deleted file mode 100644 index 68be4675..00000000 --- a/install_on_arm_board_fr.md +++ /dev/null @@ -1,51 +0,0 @@ -# Installer YunoHost sur carte ARM - -*Toutes les autres façons d’installer YunoHost sont listées **[ici](/install)**.* - -<center> -<img src="/images/olinuxino.jpg" width=250 style="padding-bottom:20px"> -<img src="/images/micro-sd-card.jpg"> -</center> - -<div class="alert alert-info" markdown="1"> -Avant d'héberger un serveur chez vous, il est recommandé de prendre connaissance des [possibles limitations liées à votre FAI](/isp). Si votre FAI est trop contraignant, vous pouvez envisager d'utiliser un VPN pour contourner ces limitations. -</div> - -<div class="alert alert-warning" markdown="1"> -YunoHost ne supporte pour le moment pas les cartes ARM64. Pour plus d'informations, voir [ce ticket](https://github.com/YunoHost/issues/issues/438). -</div> - -- Une carte ARM avec un processeur de 500 MHz et 512 Mo de mémoire vive ; -- Un adaptateur secteur pour alimenter la carte ; -- Une carte microSD : au moins **8 Go** et **Classe 10** (par exemple une [Transcend 300x](http://www.amazon.fr/Transcend-microSDHC-adaptateur-TS32GUSDU1E-Emballage/dp/B00CES44EO)) ; -- Un câble ethernet/RJ-45 pour brancher la carte à votre routeur/box internet. (Avec le Raspberry Pi 0, vous pouvez connecter votre carte avec un câble OTG et un adaptateur Wifi USB.) -- Un [fournisseur d’accès correct](/isp), de préférence avec une bonne vitesse d’upload. - ---- - -## Installation avec l'image pré-installée (recommandée) - -<a class="btn btn-lg btn-default" href="/images">0. Télécharger l'image pré-installée pour votre carte ARM</a><br><small>Si il n'existe pas d'image pré-installée pour votre carte, vous pouvez suivre la section "Installation par dessus ARMbian".</small> - -<a class="btn btn-lg btn-default" href="/copy_image">1. Flasher la carte SD avec l'image</a> - -<a class="btn btn-lg btn-default" href="/plug_and_boot">2. Brancher la carte et la laisser démarrer</a> - -<a class="btn btn-lg btn-default" href="/ssh">3. Se connecter en SSH sur le serveur</a> - -<a class="btn btn-lg btn-default" href="/postinstall">4. Effectuer la configuration initiale (post-installation)</a> - ---- - -## Installation par dessus ARMbian - -<a class="btn btn-lg btn-default" href="https://www.armbian.com/download/">0. Télécharger l'image ARMbian pour votre carte ARM</a> - -<a class="btn btn-lg btn-default" href="/copy_image">1. Flasher la carte SD avec l'image</a> - -<a class="btn btn-lg btn-default" href="/plug_and_boot">2. Brancher & démarrer</a> - -<a class="btn btn-lg btn-default" href="/ssh">3. Se connecter en SSH</a> - -<a class="btn btn-lg btn-default" href="/install_manually">4. Suivre la procédure d'installation générique</a> - diff --git a/install_on_debian.md b/install_on_debian.md deleted file mode 100644 index 45e1016c..00000000 --- a/install_on_debian.md +++ /dev/null @@ -1,24 +0,0 @@ -# Installation on Debian - -*Find other ways to install YunoHost **[here](/install)**.* - -### Requirements - -<img width=100 src="/images/debian-logo.png"> - -An ARM box, a VPS, a dedicated server, a standard x86 computer, an old Macintosh, ... - -* with **Debian 9** (Stretch) installed <small>(with kernel >= 3.12)</small> - * the Debian 9 ISO can be downloaded from [here](https://www.debian.org/releases/stretch/debian-installer/). Take the 'netinst CD image' for your architecture. - * N.B. : having a graphical environment is *not* recommended! Servers are meant to be administrated remotely! -* connected to the Internet -* with a direct **root access** or via SSH - ---- - -## Installation steps - -<a class="btn btn-lg btn-default" href="/install_manually">1. Install manually</a> - -<a class="btn btn-lg btn-default" href="/postinstall">2. Post-install</a> - diff --git a/install_on_debian_ar.md b/install_on_debian_ar.md deleted file mode 100644 index 455830f8..00000000 --- a/install_on_debian_ar.md +++ /dev/null @@ -1,23 +0,0 @@ -<div dir="RTL" align="right" style="direction:rtl;text-align:right;"> -# التنصيب على ديبيان - -*يمكنكم الإطلاع على طُرق أخرى لتنصيب واي يونوهوست YunoHost **[هنا](/install)**.* - -## المتطلبات - -<img width=100 src="/images/debian-logo.png"> - -على منصة ARM أو على خادوم إفتراضي خاص أو على خادوم إستضافة أو على حاسوب x86 عادي أو على حاسوب ماكينطوش قديم … إلخ - -* على **ديبيان 8** (جيسي) قد تم تنصيبه مِن قبل -* مُتصل بالإنترنت عبر كابل إيثرنت -* مباشرة عبر **النفاذ بالمستخدم الجذري root** أو عبر الـ SSH - ---- - -## خطوات التنصيب - -<a class="btn btn-lg btn-default" href="/install_manually">1. التنصيب يدويًا</a> - -<a class="btn btn-lg btn-default" href="/postinstall">2. ما بعد التنصيب</a> - diff --git a/install_on_debian_fr.md b/install_on_debian_fr.md deleted file mode 100644 index eaa21951..00000000 --- a/install_on_debian_fr.md +++ /dev/null @@ -1,24 +0,0 @@ -# Installation sur Debian - -*Trouvez d’autres moyens d’installer YunoHost **[ici](/install)**.* - -## Prérequis - -<img width=100 src="/images/debian-logo.png"> - -Sur une plateforme ARM, un VPS, un serveur dédié, un ordinateur x86 standard, un vieux Macintosh,... - -* avec **Debian 9** (Stretch) installé <small>(avec un kernel >= 3.12)</small> - * l'ISO Debian 9 ISO peut être téléchargée depuis [cette page](https://www.debian.org/releases/stretch/debian-installer/). Prenez la 'netinst CD image' pour votre architecture - * N.B. : Avoir un environnement graphique n'est *pas* recommandé ! Les serveurs sont généralement administrés à distance ! -* connecté à Internet -* avec un **accès root** directement ou par SSH - ---- - -## Étapes d’installation - -<a class="btn btn-lg btn-default" href="/install_manually">1. Installer manuellement</a> - -<a class="btn btn-lg btn-default" href="/postinstall">2. Post-installation</a> - diff --git a/install_on_debian_it.md b/install_on_debian_it.md deleted file mode 100644 index e306592d..00000000 --- a/install_on_debian_it.md +++ /dev/null @@ -1,23 +0,0 @@ -# Installazione su Debian - -*Altri sistemi per installare Debian **[qui](/install)**.* - -### Requisiti - -<img width=100 src="/images/debian-logo.png"> - -Su un computer ARM, un VPS, un server dedicato, un computer x86 standard, un vecchio Macintosh, ... - -* con **Debian 9** (Stretch) installato <small>(con un kernel >= 3.12)</small> - * l'immagine ISO di Debian 9 può essere scaricata da [qui](https://www.debian.org/releases/stretch/debian-installer/). Scegli l'immagine 'netinst CD' per la tua architettura. - * N.B.: l'uso di un'interfaccia grafica *non* è raccomandato! I server dovrebbero essere amministrati da remoto! -* connesso ad Internet -* con un **accesso root** diretto o via SSH - ---- - -## Passi per l'installazione - -<a class="btn btn-lg btn-default" href="/install_manually">1. Installazione manuale</a> - -<a class="btn btn-lg btn-default" href="/postinstall">2. Post-installazione</a> \ No newline at end of file diff --git a/install_on_raspberry.md b/install_on_raspberry.md deleted file mode 100644 index fa204721..00000000 --- a/install_on_raspberry.md +++ /dev/null @@ -1,60 +0,0 @@ -# Install YunoHost on a Raspberry Pi - -*Find all the ways to install YunoHost **[here](/install)**.* - -<center> -<img src="/images/raspberrypi.jpg" width=300 style="padding-bottom:20px"> -<img src="/images/micro-sd-card.jpg"> -</center> - -<div class="alert alert-info" markdown="1"> -Before setting up a server at home, it is recommended that you know the [possible limitations imposed by your ISP](/isp). If they are too restrictive, you might consider using a VPN to bypass them. -</div> - -## Pre-requisites - -- A Raspberry Pi 0, 1, 2 or 3 (does not currently work on RPI 4); -- An microSD card: **8GB** capacity (at least) and **Class 10** speed rate are highly recommended (like the [Transcend 300x](http://www.amazon.fr/Transcend-microSDHC-adaptateur-TS32GUSDU1E-Emballage/dp/B00CES44EO)) ; -- A power supply (either an adapter or a MicroUSB cable)i ; -- An ethernet cable (RJ-45) to connect your Raspberry Pi to your router. (Raspberry Pi Zero users can connect the Pi using an OTG cable, [Wifi dongle](https://core-electronics.com.au/tutorials/raspberry-pi-zerow-headless-wifi-setup.html).) ; -- A [reasonable ISP](/isp), preferably with a good and unlimited upload bandwidth. - ---- - -## Install with the pre-installed image (recommended) - -<a class="btn btn-lg btn-default" href="/images">0. Download the pre-installed image for Raspberry Pi</a> - -<a class="btn btn-lg btn-default" href="/copy_image">1. Flash the SD card with the image</a> - -<a class="btn btn-lg btn-default" href="/plug_and_boot">2. Power up the board and let it boot</a> - -<a class="btn btn-lg btn-default" href="/ssh">3. Connect to your server with your web browser</a> - -<a class="btn btn-lg btn-default" href="/postinstall">4. Proceed with the initial configuration (post-installation)</a> - ---- - -## Manual installation (advanced users) - -<div class="alert alert-warning" markdown="1"> -We do not recommend the manual installation because it is more technical and longer than using the pre-installed image. This documentation is only intended for advanced users. -</div> - -<div class="alert alert-warning" markdown="1"> -The latest Rasbpian images requires a screen and a keyboard, as it is no longer possible to connect directly to the Raspberry through SSH. Nevertheless it is possible to re-enable SSH at boot : before starting your Raspberry, put in the boot partition of the SD card an empty file named `ssh` (without extension). -</div> - -0. Install Raspbian Stretch Lite on the SD card ([instructions](https://www.raspberrypi.org/downloads/raspbian/)). The Raspbian Stretch Lite can be found here: https://downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2019-04-09/ - -1. Connect to your Raspberry Pi with the user `pi`. Set the root password with -```bash -sudo passwd root -``` - -2. Edit `/etc/ssh/sshd_config` to allow ssh login for root, by replacing `PermitRootLogin without-password` with `PermitRootLogin yes`. Reload the ssh daemon with `service ssh reload`. - -3. Disconnect and reconnect, this time as root. - -4. Then follow the <a href="/install_manually">generic manual install procedure</a>. - diff --git a/install_on_raspberry_de.md b/install_on_raspberry_de.md deleted file mode 100644 index 5105d8b7..00000000 --- a/install_on_raspberry_de.md +++ /dev/null @@ -1,60 +0,0 @@ -# YunoHost auf einem Raspberry Pi installieren - -*Alle Arten YunoHost zu installieren findest du **[hier](/install)**.* - -<center> -<img src="/images/raspberrypi.jpg" width=300 style="padding-bottom:20px"> -<img src="/images/micro-sd-card.jpg"> -</center> - -<div class="alert alert-info" markdown="1"> -Vor der Einrichtung eines Servers zuhause ist es empfehlenswert [mögliche Einschränkungen deines Providers](/isp) zu kennen. Wenn er zu viele Einschränkungen vornimmt, kann es sinnvoll sein ein VPN zu nutzen um diese zum umgehen. -</div> - -## Voraussetzungen - -- Einen Raspberry Pi 0, 1, 2 oder 3 ; -- Eine microSD Karte: **8GB** Speicherplatz (mindestens) und **Class 10** Geschwindigkeit werden empfohlen (wie zum Beispiel die [Transcend 300x](http://www.amazon.fr/Transcend-microSDHC-adaptateur-TS32GUSDU1E-Emballage/dp/B00CES44EO)) ; -- Ein Netzeil (entweder ein Steckernetzteil oder ein MicroUSB Kabel) ; -- An Netzwerkkabel (RJ-45) um den Raspberry mit dem router zu verbinden. (Raspberry Pi Zero Nutzer können ein OTG Kabel nutzen, [Wifi dongle](https://core-electronics.com.au/tutorials/raspberry-pi-zerow-headless-wifi-setup.html).) ; -- Einen [geeigneten Provider](/isp), am Besten einen mit einer guten upload Geschwindigkeit. - ---- - -## Install with the pre-installed image (recommended) - -<a class="btn btn-lg btn-default" href="/images">0. Download the pre-installed image for Raspberry Pi</a> - -<a class="btn btn-lg btn-default" href="/copy_image">1. Flash the SD card with the image</a> - -<a class="btn btn-lg btn-default" href="/plug_and_boot">2. Plug & boot</a> - -<a class="btn btn-lg btn-default" href="/ssh">3. Connect to your server with SSH</a> - -<a class="btn btn-lg btn-default" href="/postinstall">4. Proceed to post-installation</a> - ---- - -## Manual installation (advanced users) - -<div class="alert alert-warning" markdown="1"> -We do not recommend the manual installation because it is more technical and longer than using the pre-installed image. This documentation is only intended for advanced users. -</div> - -<div class="alert alert-warning" markdown="1"> -The latest Rasbpian images requires a screen and a keyboard, as it is no longer possible to connect directly to the Raspberry through SSH. Nevertheless it is possible to re-enable SSH at boot : before starting your Raspberry, put in the boot partition of the SD card an empty file named `ssh` (without extension). -</div> - -0. Install Raspbian Stretch Lite on the SD card ([instructions](https://www.raspberrypi.org/downloads/raspbian/)). - -1. Connect to your Raspberry Pi with the user `pi`. Set the root password with -```bash -sudo passwd root -``` - -2. Edit `/etc/ssh/sshd_config` to allow ssh login for root, by replacing `PermitRootLogin without-password` with `PermitRootLogin yes`. Reload the ssh daemon with `service ssh reload`. - -3. Disconnect and reconnect, this time as root. - -4. Then follow the <a href="/install_manually">generic manual install procedure</a>. - diff --git a/install_on_raspberry_es.md b/install_on_raspberry_es.md deleted file mode 100644 index b4fd51bf..00000000 --- a/install_on_raspberry_es.md +++ /dev/null @@ -1,60 +0,0 @@ -# Instalar YunoHost en un Raspberry Pi - -*Encontrar otros medios de instalar Yunohost **[aquí](/install)**.* - -<center> -<img src="/images/raspberrypi.jpg" width=300 style="padding-bottom:20px"> -<img src="/images/micro-sd-card.jpg"> -</center> - -<div class="alert alert-info" markdown="1"> -Antes de alojar tu propio servidor en tu casa, te recomendamos que consultes las [posibles restricciones impuestas por tu Proveedor de Internet](/isp). Si tu proveedor es demasiado restrictivo, puedes utilizar un VPN para eludir estas restricciones. -</div> - -## Prerrequisitos - -- Un Raspberry Pi 0, 1, 2, 3 o 4 ; -- Un adaptador de corriente para alimentar la tarjeta ; -- Una tarjeta microSD : al menos **8 Go** y **Clase 10** (por ejemplo una [Transcend 300x](http://www.amazon.fr/Transcend-microSDHC-adaptateur-TS32GUSDU1E-Emballage/dp/B00CES44EO)) ; -- Un cable ethernet/RJ-45 para conectar la tarjeta con tu enrutador o tu caja internet. (Con el Raspberry Pi 0, puedes conectar tu tarjeta con un cable OTG y un adaptador Wifi USB.) -- Un [proveedor de Internet ético](/isp), de preferencia con buena velocidad de upload. - ---- - -## Instalación con la imagen pre-instalada (recomendada) - -<a class="btn btn-lg btn-default" href="/images">1. Descargar la imagen para Raspberry Pi</a> - -<a class="btn btn-lg btn-default" href="/copy_image">2. Poner la imagen en tu tarjeta SD</a> - -<a class="btn btn-lg btn-default" href="/plug_and_boot">3. Conectar y encender</a> - -<a class="btn btn-lg btn-default" href="/ssh">4. Conectarse en SSH</a> - -<a class="btn btn-lg btn-default" href="/postinstall">5. Proceder a la post-instalación</a> - ---- - -## Instalación manual (desaconsejada) - -<div class="alert alert-warning" markdown="1"> -No recomendamos la instalación manual porque es más técnica y más larga que la instalación vía la imagen per-instalada. Esta documentación sobre todo está destinada a los usuarios expertos. -</div> - -<div class="alert alert-warning" markdown="1"> -Las últimas versiones de Raspbian necesitan una pantalla y un teclado porque ya no es posible conectarse directamente por SSH al Raspberry por defecto. Sin embargo, es posible reactivar el inicio de SSH al boot : solo hay que poner un archivo llamado `ssh` (vacío, sin extensión) en la partición boot de la tarjeta SD. -</div> - -0. Instalar Raspbian Stretch Lite ([instrucciones](https://www.raspberrypi.org/downloads/raspbian/)) en la tarjeta SD. - -1. Conéctate con ssh al Raspberry Pi con el usuario pi. Define una contraseña root con -```bash -sudo passwd root -``` - -2. Modifica `/etc/ssh/sshd_config` para autorizar root a que se conecte con ssh, reemplazando `PermitRootLogin without-password` por `PermitRootLogin yes`. Recarga el daemon ssh con `service ssh reload`, y luego re-conéctate como root. - -3. Desconéctate et reconéctate con el usuario root esta vez. - -4. Sigue con el <a href="/install_manually">procedimiento de instalación manual genérico</a>. - diff --git a/install_on_raspberry_fr.md b/install_on_raspberry_fr.md deleted file mode 100644 index c3fd6452..00000000 --- a/install_on_raspberry_fr.md +++ /dev/null @@ -1,61 +0,0 @@ -# Installer YunoHost sur Raspberry Pi - -*Toutes les autres façons d’installer YunoHost sont listées **[ici](/install)**.* - -<center> -<img src="/images/raspberrypi.jpg" width=300 style="padding-bottom:20px"> -<img src="/images/micro-sd-card.jpg"> -</center> - -<div class="alert alert-info" markdown="1"> -Avant d'héberger un serveur chez vous, il est recommandé de prendre connaissance des [possibles limitations liées à votre FAI](/isp). Si votre FAI est trop contraignant, vous pouvez envisager d'utiliser un VPN pour contourner ces limitations. -</div> - -## Prérequis - -- Un Raspberry Pi 0, 1, 2 ou 3 ; -- Un adaptateur secteur pour alimenter la carte ; -- Une carte microSD : au moins **8 Go** et **Classe 10** (par exemple une [Transcend 300x](http://www.amazon.fr/Transcend-microSDHC-adaptateur-TS32GUSDU1E-Emballage/dp/B00CES44EO)) ; -- Un câble ethernet/RJ-45 pour brancher la carte à votre routeur/box internet. (Avec le Raspberry Pi 0, vous pouvez connecter votre carte avec un câble OTG et un adaptateur Wifi USB.) -- Un [fournisseur d’accès correct](/isp), de préférence avec une bonne vitesse d’upload. - ---- - -## Installation avec l'image pré-installée (recommandée) - -<a class="btn btn-lg btn-default" href="/images">1. Télécharger l'image pour Raspberry Pi</a> - -<a class="btn btn-lg btn-default" href="/copy_image">2. Flasher la carte SD avec l'image</a> - -<a class="btn btn-lg btn-default" href="/plug_and_boot">3. Brancher la carte et la laisser démarrer</a> - -<a class="btn btn-lg btn-default" href="/ssh">4. Se connecter en SSH sur le serveur</a> - -<a class="btn btn-lg btn-default" href="/postinstall">5. Effectuer la configuration initiale (post-installation)</a> - ---- - -## Installation manuelle (déconseillée) - -<div class="alert alert-warning" markdown="1"> -Nous déconseillons l'installation manuelle car elle est plus technique et plus longue que l'installation via l'image pré-installée. Cette documentation est surtout destinée aux utilisateurs avancés. -</div> - -<div class="alert alert-warning" markdown="1"> -Les dernières versions de Raspbian nécessitent un écran et un clavier, car il n'est plus possible de se connecter directement en SSH au Raspberry par défaut. Néanmoins, il est possible de réactiver le lancement de SSH au boot : il suffit de placer dans la partition boot de la carte SD un fichier nommé `ssh`, vide et sans extension. -</div> - -0. Installez Raspbian Stretch Lite ([instructions](https://www.raspberrypi.org/downloads/raspbian/)) sur la carte SD. -Le lien vers la Raspbian Stretch Lite est ici: https://downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2019-04-09/ - -1. Connectez-vous en ssh au Raspberry Pi avec l'utilisateur pi. Définissez un mot de passe root avec -```bash -sudo passwd root -``` - -2. Modifiez `/etc/ssh/sshd_config` pour autoriser root à se logger en ssh, en remplaçant `PermitRootLogin without-password` par `PermitRootLogin yes`. Rechargez le daemon ssh avec `service ssh reload`, puis re-connectez-vous en root. - -3. Déconnectez-vous et reconnectez-vous avec l'utilisateur root cette fois. - -4. Poursuivez avec la <a href="/install_manually">procédure d'installation manuelle générique</a>. - diff --git a/install_on_raspberry_it.md b/install_on_raspberry_it.md deleted file mode 100644 index 1b3ca866..00000000 --- a/install_on_raspberry_it.md +++ /dev/null @@ -1,3 +0,0 @@ -# Installa YunoHost su Raspberry Pi - -*Consulta la guida completa in inglese [qui](/install_on_raspberry)* diff --git a/install_on_virtualbox.md b/install_on_virtualbox.md deleted file mode 100644 index 3d693ba7..00000000 --- a/install_on_virtualbox.md +++ /dev/null @@ -1,84 +0,0 @@ -# Install YunoHost on VitualBox - -*Find other ways to install YunoHost **[here](/install)**.* - -## Requirements - -<img src="/images/virtualbox.png" width=200> - -* An x86 computer with VirtualBox installed and enough RAM capacity to be able to run a small virtual machine. -* The latest stable **YunoHost ISO image**, available [here](/images). - -<div class="alert alert-warning" markdown="1"> -N.B. : Installing YunoHost in a VirtualBox is usually intended for testing. To -run an actual server on the long-term, you usually need a dedicated physical -machine (old computer, ARM board, ...) or a VPS online. -</div> - ---- - -## <small>1.</small> Create a new virtual machine - -<img src="/images/virtualbox_1.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> - -<br> - -* It's okay if you can only have 32-bit versions, just be sure that you downloaded the 32-bit image previously. -* 256MB RAM is the minimum required, but at least 512MB is recommended (1Go or more if you can). -* 8GB storage is the minimum required. - ---- - -## <small>2.</small> Change network settings - -**NB:** You must carry out this step. If not, the install will fail. - -Go to **Settings** > **Network**: - -<img src="/images/virtualbox_2.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> - -<br> - -* Select `Bridged adapter` - -* Select your interface's name: - - **wlan0** if you are connected wirelessly, else **eth0**. - ---- - -## <small>3.</small> Boot up the virtual machine - -Start the virtual machine - -<img src="/images/virtualbox_2.1.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> - -<br> - -You will have to select your ISO image here, then you should see the YunoHost's boot screen. - -<br> - -If you encounter the error "VT-x is not available", you need probably need to enable Virtualization in the BIOS of your computer. - -<br> - -<img src="/images/virtualbox_3.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> - -<br> - -* Select `Graphical install` - -* Select your language, your location, your keyboard layout and let the installer do the rest :-) - ---- - -## <small>4.</small> Proceed to post-installation - -After the reboot, the system should ask you to proceed with the -post-installation - -<a class="btn btn-lg btn-default" href="/postinstall">Post-install documentation</a> - - - diff --git a/install_on_virtualbox_es.md b/install_on_virtualbox_es.md deleted file mode 100644 index 9a6260d6..00000000 --- a/install_on_virtualbox_es.md +++ /dev/null @@ -1,76 +0,0 @@ -# Instalar YunoHost en VirtualBox - -*Encontrar otros medios de instalar Yunohost **[aquí](/install)**.* - -## Prerrequisitos - -<img src="/images/virtualbox.png" width=200> - -* Un ordenador x86 con VirtualBox instalado y bastante RAM disponible para iniciar una pequeña máquina virtual. -* La última **imagen ISO YunoHost** estable, disponible [aquí](/images). - -<div class="alert alert-warning" markdown="1"> -N.B. : Instalar YunoHost en VirtualBox es útil para probar la distribución. Para realmente autoalojarse a largo plazo, probablement necesitarás una máquina virtual (viejo ordenador, tarjeta ARM...) o un VPS. -</div> - ---- - -## <small>1.</small> Crear una nueva máquina virtual - -<img src="/images/virtualbox_1.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> - -<br> - -* No es grave si sólo la versión 32-bit está disponible, pero en este caso asegúrate que 32 bit previamente. -* 256Mo de RAM es el requisito mínimo, 512Mo está recomendado (1Go o más si puedes). -* 8Go de almacenaje mínimo requisito. - ---- - -## <small>2.</small> Modificar la configuración de la red - -Ir a **Settings** > **Network** : - -<img src="/images/virtualbox_2.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> - -<br> - -* Selectiona `Bridged adapter` - -* Elige tu interfaz según su nombre : - - **wlan0** si estás conectado sin hilo, **eth0** de otro modo. - ---- - -## <small>3.</small> Inicia tu máquina virtual - -Inicia tu máquina virtual - -<img src="/images/virtualbox_2.1.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> - -<br> - -Aquí tienes que seleccionar la imagen ISO, luego deberías ver esta pantalla de bienvenida. - -<br> - -Si te encuentras con el error "VT-x is not available", probablement hay que activar (enable) la virtualización en la opciones del BIOS de tu ordenador. - -<br> - -<img src="/images/virtualbox_3.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> - -<br> - -* Elige `Instalación gráfica` - -* Selecciona tu idioma, tu ubicación, la distribución de tu teclado y deja el ordenador terminar el proceso :-) - ---- - -## <small>4.</small> Efectuar la post-instalación - -Después del reinicio, la máquina debería proponerte de efectuar la post-instalación : - -<a class="btn btn-lg btn-default" href="/postinstall">Documentación de post-instalación</a> diff --git a/install_on_virtualbox_fr.md b/install_on_virtualbox_fr.md deleted file mode 100644 index d99807af..00000000 --- a/install_on_virtualbox_fr.md +++ /dev/null @@ -1,81 +0,0 @@ -# Installer YunoHost sur VirtualBox - -*Trouvez d’autres moyens d’installer YunoHost **[ici](/install)**.* - -## Prérequis - -<img src="/images/virtualbox.png" width=200> - -* Un ordinateur x86 avec VirtualBox installé et assez de RAM disponible pour lancer une petite machine virtuelle. -* La dernière **image ISO YunoHost** stable, disponible [ici](/images). - -<div class="alert alert-warning" markdown="1"> -N.B. : Installer YunoHost dans une VirtualBox est utile pour tester la -distribution. Pour réellement s'autohéberger sur le long terme, il vous faudra -probablement une machine physique (vieil ordinateur, carte ARM, ..) ou un VPS en -ligne. -</div> - ---- - -## <small>1.</small> Créer une nouvelle machine virtuelle - -<img src="/images/virtualbox_1.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> - -<br> - -* Ce n'est pas grave si seulement la version 32-bit est dispo, mais dans ce cas soyez sur d'avoir téléchargé l'image 32 bit précédemment. -* 256Mo de RAM est le minimum requis, 512Mo est recommandé (1Go ou plus si vous pouvez). -* 8Go de stockage minimum requis. - ---- - -## <small>2.</small> Modifier la configuration réseau - -Allez dans **Réglages** > **Réseau** : - -<img src="/images/virtualbox_2.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> - -<br> - -* Sélectionnez `Accès par pont` - -* Choisissez votre interface selon son nom : - - **wlan0** si vous êtes connecté sans-fil, **eth0** sinon. - ---- - -## <small>3.</small> Lancer votre machine virtuelle - -Démarrez votre machine virtuelle - -<img src="/images/virtualbox_2.1.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> - -<br> - -Vous devez sélectionner ici l’image ISO, puis vous devriez voir cet écran d’accueil YunoHost. - -<br> - -Si vous rencontrez l'erreur "VT-x is not available", il vous faut probablement activer (enable) la virtualisation dans les options du BIOS de votre ordinateur. - -<br> - -<img src="/images/virtualbox_3.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> - -<br> - -* Choisissez `Installation graphique` - -* Sélectionnez votre langue, votre emplacement, la disposition de votre clavier et laissez l’installeur faire le reste :-) - ---- - -## <small>4.</small> Effectuer la post-installation - -Après le redémarrage, la machine devrait vous proposer d'effectuer la -post-installation : - -<a class="btn btn-lg btn-default" href="/postinstall">Post-install -documentation</a> diff --git a/install_on_vps.md b/install_on_vps.md deleted file mode 100644 index bf44dae6..00000000 --- a/install_on_vps.md +++ /dev/null @@ -1,21 +0,0 @@ -# Install on a dedicated server - -*Find other ways to install YunoHost **[here](/install)**.* - -### Pre-requisite - -<img src="/images/vps.png" width=250> - -* A dedicated or virtual private server -* with at least **512MB** RAM -* and **Debian 9.x (Stretch) 64bits** as operating system - ---- - -## Installation steps - -<a class="btn btn-lg btn-default" href="/install_manually">1. Install manually</a> - -<a class="btn btn-lg btn-default" href="/postinstall">2. Proceed with the initial configuration (post-installation)</a> - - diff --git a/install_on_vps_es.md b/install_on_vps_es.md deleted file mode 100644 index f6eb2eb7..00000000 --- a/install_on_vps_es.md +++ /dev/null @@ -1,20 +0,0 @@ -# Instalación en un servidor dedicado - -*Encontrar otros medios de instalar Yunohost **[aquí](/install)**.* - -## Prerrequisitos - -<img src="/images/vps.png" width=250> - -* Un servidor dedicado o virtual -* con al menos **512MB** RAM -* y **Debian 9.x (Stretch) 64bits** como sistema operativo - ---- - -## Etapas de instalación - -<a class="btn btn-lg btn-default" href="/install_manually">1. Instalar manualmente</a> - -<a class="btn btn-lg btn-default" href="/postinstall">2. Post-instalación</a> - diff --git a/install_on_vps_fr.md b/install_on_vps_fr.md deleted file mode 100644 index a0924cb8..00000000 --- a/install_on_vps_fr.md +++ /dev/null @@ -1,19 +0,0 @@ -# Installation sur un serveur dédié - -*Trouvez d’autres moyens d’installer YunoHost **[ici](/install)**.* - -## Prérequis - -<img src="/images/vps.png" width=250> - -* Un serveur dédié ou virtuel -* avec au moins **512MB** RAM -* et **Debian 9.x (Stretch) 64bits** comme système d'exploitation - ---- - -## Étapes d’installation - -<a class="btn btn-lg btn-default" href="/install_manually">1. Installer manuellement</a> - -<a class="btn btn-lg btn-default" href="/postinstall">2. Effectuer la configuration initiale (post-installation)</a> diff --git a/install_on_vps_it.md b/install_on_vps_it.md deleted file mode 100644 index b10d9344..00000000 --- a/install_on_vps_it.md +++ /dev/null @@ -1,20 +0,0 @@ -# Installa su un server dedicato - -*Scopri altri modi di installare YunoHost **[qui](/install)**.* - -### Pre-requisiti - -<img src="/images/vps.png" width=250> - -* Un server dedicato o un server privato virtuale (VPS) -* con almeno **512MB** di RAM -* e **Debian 9.x (Stretch) 64bits** come sistema operativo - ---- - -## Procedura di installazione - -<a class="btn btn-lg btn-default" href="/install_manually">1. Installa manualmente</a> - -<a class="btn btn-lg btn-default" href="/postinstall">2. Post-installazione</a> - diff --git a/isp_free.md b/isp_free.md deleted file mode 100644 index e97c35fb..00000000 --- a/isp_free.md +++ /dev/null @@ -1 +0,0 @@ -Unfortunately, this page only exists [in french here](isp_free_fr) for now. diff --git a/isp_orange.md b/isp_orange.md deleted file mode 100644 index 87a29d12..00000000 --- a/isp_orange.md +++ /dev/null @@ -1,85 +0,0 @@ -# Orange -*Find the list of other Internet service providers **[here](/isp)**.* - -#### Email - -The Orange box has port 25 closed so as to limit the amount of spam that could be sent from a compromised home connection. - -The remaining solution to host one own's email at home is to route it through the Orange SMTP servers. - -To that end, one has to edit the postfix configuration file with the following command: - -```bash -sudo nano /etc/postfix/main.cf -``` - -then, add the SMTP Orange server as a relay on the associated line: - -```bash -relayhost = smtp.orange.fr -``` - -restart Postfix : - -```bash -sudo service postfix restart -``` - -##### Problems - -If you are having an "Authentication required" error, the solution is as follows (note: french website): **[source](http://viruslocker.free.fr/?page_id=1749)**. - -Edit the postfix configuration file - -```bash -sudo nano /etc/postfix/main.cf -``` -then, add the following lines: - -```bash -smtp_sasl_password_maps = hash:/etc/postfix/sasl/mdp_fai.conf -smtp_sasl_auth_enable = yes -smtp_sasl_security_options = noanonymous -relayhost = [smtp.orange.fr]:25 -``` - -Create the `mdp_fai.conf` file : - -```bash -sudo nano /etc/postfix/sasl/mdp_fai.conf -``` - -add - -```bash -# mdp_fai.conf -[smtp.orange.fr]:25 emailaddress@at.orange:my-own-password -``` -with your Orange account password. - -Integrate the password into Postfix : - -```bash -sudo postmap /etc/postfix/sasl/mdp_fai.conf -sudo postconf -e smtp_sasl_password_maps=hash:/etc/postfix/sasl/mdp_fai.conf -``` - -If you are having an "(SASL authentication failed; cannot authenticate to server smtp-auth.nowhere.com[38.123.22.160]: no mechanism available)" error - -Check that `libsasl2-modules` and `sasl2-bin` are present : - -```bash -apt search libsasl2-modules -apt search sasl2-bin -``` - -If they are not present, do install them : - -```bash -apt install libsasl2-modules sasl2-bin -``` - -It is possible that postfix does not immediately take into account your modifications. To force it to do so, run -```bash -systemctl restart postfix -``` diff --git a/isp_sfr.md b/isp_sfr.md deleted file mode 100644 index e5002600..00000000 --- a/isp_sfr.md +++ /dev/null @@ -1 +0,0 @@ -Unfortunately, this page only exists [in french here](isp_sfr_fr) for now. diff --git a/noaccess.md b/noaccess.md deleted file mode 100644 index a2ed2d20..00000000 --- a/noaccess.md +++ /dev/null @@ -1 +0,0 @@ -Unfortunately, this page only exists [in french here](noaccess_fr) for now. diff --git a/orga/README.md b/orga/README.md deleted file mode 120000 index aa9ff0cb..00000000 --- a/orga/README.md +++ /dev/null @@ -1 +0,0 @@ -yunohost_project_organization_fr.md \ No newline at end of file diff --git a/default_es.md b/orphaned/default.es.md similarity index 97% rename from default_es.md rename to orphaned/default.es.md index 6b8c21f5..41876311 100644 --- a/default_es.md +++ b/orphaned/default.es.md @@ -1,4 +1,4 @@ -#Nueva página +# Nueva página Esta página todavía no existe, puedes editarla tecleando ```<Escap>``` en tu teclado, o clicando en el botón "Editar" abajo a la derecha de tu pantalla. Puedes echar un vistazo a los cambios que has efectuado empujando de nuevo la tecla ```<Escap>``` o clicando en el botón "Vistazo". diff --git a/default_fr.md b/orphaned/default.fr.md similarity index 97% rename from default_fr.md rename to orphaned/default.fr.md index 75c46aa3..270beabe 100644 --- a/default_fr.md +++ b/orphaned/default.fr.md @@ -1,4 +1,4 @@ -#Nouvelle page +# Nouvelle page Cette page n’existe pas encore, vous pouvez l’éditer en appuyant sur la touche ```<Échap>``` de votre clavier, ou en cliquant sur le bouton "Éditer" en bas à droite de votre écran. Vous pourrez avoir un aperçu de vos changements en appuyant à nouveau sur la touche ```<Échap>``` ou en cliquant sur le bouton "Aperçu". diff --git a/default_it.md b/orphaned/default.it.md similarity index 94% rename from default_it.md rename to orphaned/default.it.md index f0edf6d7..89f495de 100644 --- a/default_it.md +++ b/orphaned/default.it.md @@ -1,10 +1,10 @@ -#Nuova Pagina +# Nuova Pagina Questa pagina non è ancora stata creata, puoi modificarla premendo ```<ESC>``` sulla tua tastiera o cliccando il pulsante "Modifica" in basso a destra del tuo schermo. Potrai vedere l'anteprima delle tue modifiche premendo ancora ```<ESC>``` o cliccando il pulsante "Anteprima". ** Nota: ** Devi fornire un indirizzo email per confermare le tue modifiche. -###Sintassi +### Sintassi Questa pagina usa la sintassi markdown, per favore fai riferimento alla documentazione per ulteriori informazioni: diff --git a/default.md b/orphaned/default.md similarity index 95% rename from default.md rename to orphaned/default.md index 8dc832a9..08ee4d98 100644 --- a/default.md +++ b/orphaned/default.md @@ -1,10 +1,10 @@ -#New page +# New page This page is not created yet, you can edit it by pressing ```<ESC>``` on your keyboard or by clicking the "edit" button on the bottom-right side of your screen. You will be able to preview your changes by pressing ```<ESC>``` again or by clicking the "preview" button. ** Note: ** You will need to provide an email address to validate your submission. -###Syntax +### Syntax This page use the markdown syntax, please refer to the documentation for further informations: diff --git a/dns_es.md b/orphaned/dns.es.md similarity index 77% rename from dns_es.md rename to orphaned/dns.es.md index 60e01694..b4a5f53b 100644 --- a/dns_es.md +++ b/orphaned/dns.es.md @@ -2,7 +2,7 @@ La configuración de los DNS es una etapa crucial para que tu servidor esté accesible. En efecto, si tus DNS están mal configurados, con mucha certeza tendrás problemas de conexión a tu servidor vía tu nombre de dominio. -*Aunque esta etapa de documentación parezca larga y compleja, sigue siendo muy importante si quieres entender correctamente las implicaciones de la denominación en Internet vía los nombres de dominio, que son necesarios para el funcionamiento de tu servidor Yunohost.* +*Aunque esta etapa de documentación parezca larga y compleja, sigue siendo muy importante si quieres entender correctamente las implicaciones de la denominación en Internet vía los nombres de dominio, que son necesarios para el funcionamiento de tu servidor YunoHost.* ### ¿ Qué es ? @@ -10,7 +10,7 @@ DNS significa « Domain Name Server » en inglés, y está frecuentemente empl **Por ejemplo** : `yunohost.org` apunta hacia `88.191.153.110`. -Este sistema fue creado para poder memorizar más fácilmente las direcciones de servidores. Existen registros DNS en los cuales hay que apuntarse. Esto se hace con **registrars** que te alquilarán estos nombres de dominio a cambio de cierto importe (entre 5 y algunas centenas de euros). Estos [registrars](registrar) son entidades privadas autorizadas por el [ICANN](https://es.wikipedia.org/wiki/Corporaci%C3%B3n_de_Internet_para_la_Asignaci%C3%B3n_de_Nombres_y_N%C3%BAmeros), tales como [Gandi](http://gandi.net), [OVH](http://ovh.com) o [BookMyName](http://bookmyname.com). +Este sistema fue creado para poder memorizar más fácilmente las direcciones de servidores. Existen registros DNS en los cuales hay que apuntarse. Esto se hace con **registrars** que te alquilarán estos nombres de dominio a cambio de cierto importe (entre cinco y algunas centenas de euros). Estos [registrars](/registrar) son entidades privadas autorizadas por el [ICANN](https://es.wikipedia.org/wiki/Corporaci%C3%B3n_de_Internet_para_la_Asignaci%C3%B3n_de_Nombres_y_N%C3%BAmeros), tales como [Gandi](http://gandi.net), [OVH](http://ovh.com) o [BookMyName](http://bookmyname.com). Es importante notar que los subdominios no necesariamente apuntan al dominio principal. @@ -33,10 +33,5 @@ También puedes consultar las documentaciones específicas a estas varias [ofici **Atención** : Si eliges este modo de funcionamiento, tendrás más flexibilidad, pero nada será automático. Por ejemplo si quieres utilizar `webmail.mi-servidor.org`, tendrás que añadirlo manualmente en la interfaz de tu registrar. -3. Tu instancia tiene un servicio DNS, lo que quiere decir que configura automáticamente sus registros DNS y que es posible delegarle la administración de estos registros. Por eso, tienes que indicar al **registrar** que es tu instancia Yunohost que es el servidor DNS de tu nombre de dominio creando un registro glue (a menudo denominado **glue record**) apuntando hacia la IP de tu instancia Yunohost. +3. (Advanced, not 100% supported, do this only if you know what you're doing) Tu instancia tiene un servicio DNS, lo que quiere decir que configura automáticamente sus registros DNS y que es posible delegarle la administración de estos registros. Por eso, tienes que indicar al **registrar** que es tu instancia YunoHost que es el servidor DNS de tu nombre de dominio creando un registro glue (a menudo denominado **glue record**) apuntando hacia la IP de tu instancia YunoHost. <br><br>**Atención** : Si eliges este modo de funcionamiento, todas las configuraciones serán automatizadas, tendrás mucha flexibilidad pero la pérdida de tu servidor potencialmente traerá muchos problemas. **Elige este método si estás muy seguro de los que estás haciendo.** - -4. Una vez que tu servicio DNS está operacional, tu servidor puede utilizarlo pero hay que configurarlo, es el [revolvedor DNS](/dns_resolver). - -### IP Dinámica -Si la dirección IP pública cambia, sigue este [tutorial](/dns_dynamicip). diff --git a/dns_fr.md b/orphaned/dns.fr.md similarity index 76% rename from dns_fr.md rename to orphaned/dns.fr.md index 725b57f4..444ceadf 100644 --- a/dns_fr.md +++ b/orphaned/dns.fr.md @@ -6,14 +6,15 @@ La configuration des DNS est une étape cruciale pour que votre serveur soit acc ### Qu’est-ce que c’est ? -**N’hésitez pas à regarder la très bonne conférence de Stéphane Bortzmeyer : -http://www.iletaitunefoisinternet.fr/dns-bortzmeyer/** +**N’hésitez pas à regarder la très bonne conférence de Stéphane Bortzmeyer :** + +https://www.iletaitunefoisinternet.fr/post/1-dns-bortzmeyer/ DNS signifie « Domain Name Server » en anglais, et est souvent employé pour désigner la configuration de vos noms de domaine. Vos noms de domaines doivent en effet pointer vers quelque chose (en général une adresse IP). **Par exemple** : `yunohost.org` renvoie vers `88.191.153.110`. -Ce système a été créé pour pouvoir retenir plus facilement les adresses de serveur. Il existe donc des registres DNS dans lesquels il faut s’inscrire. Ceci peut être fait auprès de **registrars** qui vous feront louer ces noms de domaine contre une certaine somme (entre 5 et quelques centaines d’euros). Ces [registrars](registrar) sont des entités privées autorisées par l’[ICANN](http://fr.wikipedia.org/wiki/ICANN), telles que [Gandi](http://gandi.net), [OVH](http://ovh.com) ou [BookMyName](http://bookmyname.com). +Ce système a été créé pour pouvoir retenir plus facilement les adresses de serveur. Il existe donc des registres DNS dans lesquels il faut s’inscrire. Ceci peut être fait auprès de **registrars** qui vous feront louer ces noms de domaine contre une certaine somme (entre cinq et quelques centaines d’euros). Ces [registrars](/registrar) sont des entités privées autorisées par l’[ICANN](http://fr.wikipedia.org/wiki/ICANN), telles que [Gandi](http://gandi.net), [OVH](http://ovh.com) ou [BookMyName](http://bookmyname.com). Il est important de noter que les sous-domaines ne renvoient pas nécessairement au domaine principal. Si `yunohost.org` renvoie vers `88.191.153.110`, ça ne signifie pas que `backup.yunohost.org` renvoie vers la même IP. Vous devez donc configurer **tous** les domaines et sous-domaines que vous souhaitez utiliser. @@ -35,10 +36,5 @@ Vous pouvez également consulter les documentations spécifiques à ces différe **Attention** : Si vous choisissez ce mode de fonctionnement, vous aurez plus de flexibilité, mais rien ne sera automatique. Par exemple si vous souhaitez utiliser `webmail.mon-serveur.org`, vous devrez l’ajouter manuellement chez votre registrar. -3. Votre instance YunoHost possède un service DNS, ce qui veut dire qu’il configure automatiquement ses enregistrements DNS, et qu’il est possible de lui en déléguer la gestion. Pour ce faire, vous devez indiquer au **registrar** que c’est votre instance YunoHost qui est le serveur DNS de votre nom de domaine en créant un enregistrement glue (souvent appelé **glue record**) pointant vers l’IP de votre instance YunoHost. -<br><br>**Attention** : Si vous choisissez ce mode de fonctionnement, toutes les configurations seront automatiques, vous disposerez d’une grande flexibilité, mais la perte de votre serveur entraînera potentiellement beaucoup d’ennuis. **Choisissez cette méthode si vous êtes sûr de vous.** - -4. Une fois votre service DNS opérationnel, votre serveur peut l’utiliser mais il faut le configurer, c’est le [résolveur DNS](/dns_resolver). - -### IP Dynamique -Si l’adresse IP publique change, suivez ce [tutoriel](/dns_dynamicip). +3. (Avancé, pas 100% supporté...) Votre instance YunoHost possède un service DNS, ce qui veut dire qu’il configure automatiquement ses enregistrements DNS, et qu’il est possible de lui en déléguer la gestion. Pour ce faire, vous devez indiquer au **registrar** que c’est votre instance YunoHost qui est le serveur DNS de votre nom de domaine en créant un enregistrement glue (souvent appelé **glue record**) pointant vers l’IP de votre instance YunoHost. +<br><br>**Attention** : Si vous choisissez ce mode de fonctionnement, toutes les configurations seront automatiques, vous disposerez d’une grande flexibilité, mais la perte de votre serveur entraînera potentiellement beaucoup d’ennuis. **Choisissez cette méthode seulement si vous êtes à l'aise et comprenez les conséquences** diff --git a/dns.md b/orphaned/dns.md similarity index 70% rename from dns.md rename to orphaned/dns.md index 6194d6c7..9666ec73 100644 --- a/dns.md +++ b/orphaned/dns.md @@ -2,7 +2,7 @@ DNS configuration is a crucial stage for rendering your server accessible to the wider Internet. If your DNS is poorly configured, you are liable to have a lot of problems in connecting to your server via your domain name. -*Even though this page appears long and complex, it is very important to understand the implications of Internet domain names, which are necessary for the proper function of your Yunohost server.* +*Even though this page appears long and complex, it is very important to understand the implications of Internet domain names, which are necessary for the proper function of your YunoHost server.* ### What is it? @@ -10,7 +10,7 @@ DNS stands for "Domain Name Server", and is often used for the configuration of **For example**: `yunohost.org` points to the server at `88.191.153.110`. -This system was created to more easily keep track of server addresses. There are DNS registries for Internet names that you must register with. They are called "registrars", which will let you rent certain domain names for a price (between $5 or a few hundred, depending on the root domain and the chosen name). These [registrars](registrar) are private entities authorised by [ICANN](http://en.wikipedia.org/wiki/ICANN), such as [OVH](https://www.ovh.co.uk/index.xml), [Gandi](http://gandi.net), [NameCheap](http://namecheap.com) or [BookMyName](http://bookmyname.com). A privacy respecting registrar is [Njalla](https://njal.la/) or [Njalla Onion Site](http://njalladnspotetti.onion). With Njalla, you can register a domain name with just an email or XMPP address (N.B. : you won't have full control and ownership of the domain though). +This system was created to more easily keep track of server addresses. There are DNS registries for Internet names that you must register with. They are called "registrars", which will let you rent certain domain names for a price (between $5 or a few hundred, depending on the root domain and the chosen name). These [registrars](/registrar) are private entities authorised by [ICANN](http://en.wikipedia.org/wiki/ICANN), such as [OVH](https://www.ovh.co.uk/index.xml), [Gandi](http://gandi.net), [NameCheap](http://namecheap.com) or [BookMyName](http://bookmyname.com). A privacy respecting registrar is [Njalla](https://njal.la/) or [Njalla Onion Site](http://njalladnspotetti.onion). With Njalla, you can register a domain name with just an email or XMPP address (N.B. : you won't have full control and ownership of the domain though). It is important to note that subdomains do not necessarily have to send you to wherever the principal domain is pointing. If `yunohost.org` sends to `88.191.153.110`, that doesn't mean that `backup.yunohost.org` has to point at the same IP. You must therefore configure **all** of the domains and subdomains that you want to use. @@ -20,23 +20,19 @@ There are also different **types** of DNS records, which means that a domain can ### How to (properly) set up a DNS name? -You have several choices here. Note that you can mix and match solutions if you have multiple domains: for example, you can have `my-server.nohost.me` using solution **1.**, and `my-server.org` using solution **2.**, both leading to the same Yunohost server. +You have several choices here. Note that you can mix and match solutions if you have multiple domains: for example, you can have `my-server.nohost.me` using solution **1.**, and `my-server.org` using solution **2.**, both leading to the same YunoHost server. 1. You can use [YunoHost's DNS service](/dns_nohost_me), which will automatically configure your DNS for you. You must choose a domain that ends with `.nohost.me`, `.noho.st` or `.ynh.fr` for this, which may be inconvenient for you (you would then only be able to use an email address like `john@my-server.noho.st`). **This is the recommended option if you are just starting out with self-hosting.** -2. You can use the DNS service offered by your **registrar** (Gandi, NameCheap, BookMyName or others) to configure your domain name. Here is the [standard DNS configuration](/dns_config). The DNS service of your router can also be used, more info on [how to setup a local domain](dns_local_network). +2. You can use the DNS service offered by your **registrar** (Gandi, NameCheap, BookMyName or others) to configure your domain name. Here is the [standard DNS configuration](/dns_config). The DNS service of your router can also be used, more info on [how to setup a local domain](/dns_local_network). You can also check out these pages for specific [registrar](/registrar) documentation: [OVH](https://www.ovh.co.uk/index.xml), [Gandi](http://gandi.net), [NameCheap](http://namecheap.com) or [BookMyName](http://bookmyname.com). **Warning**: If you choose this option, you will have more configuration possibilities, but nothing will be done for you. For example, if you want to use `webmail.my-server.org`, you must add it manually to the DNS records with your registrar. -3. Your YunoHost instance has its own DNS service, which means it will automatically configure its own DNS records, and that you can leave the setup to the instance itself. To do this, you must explain to your **registrar** that your YunoHost instance is the authoritative DNS server for your domain name. +3. (Advanced, not 100% supported...) Your YunoHost instance has its own DNS service, which means it will automatically configure its own DNS records, and that you can leave the setup to the instance itself. To do this, you must explain to your **registrar** that your YunoHost instance is the authoritative DNS server for your domain name. - **Warning**: If you choose this option, all configuration options will be done automatically, you will retain a good deal of flexibility, but if your server gets knocked offline you will run into many problems. **Choose this only if you are certain.** - -4. Once your DNS service is running, your server can use it but it needs to be configured, this is the [DNS resolver](/dns_resolver). + **Warning**: If you choose this option, all configuration options will be done automatically, you will retain a good deal of flexibility, but if your server gets knocked offline you will run into many problems. **Choose this only if you understand the implications.** -### Dynamic IP -If the global IP address is changing follow this [tutorial](/dns_dynamicip). diff --git a/index_ar.md b/orphaned/index.ar.md similarity index 81% rename from index_ar.md rename to orphaned/index.ar.md index ba1d79d0..af485420 100644 --- a/index_ar.md +++ b/orphaned/index.ar.md @@ -37,7 +37,7 @@ <div dir="auto" class="call-to-action"> <a class="btn btn-primary btn-lg" href="/try">تجريب</a> <a class="btn btn-success btn-lg" href="/install">تنصيب</a> - <p class="text-muted"><small><a href="https://forum.yunohost.org/t/yunohost-3-6-release-sortie-de-yunohost-3-6/8359">YunoHost v3.6</a></small></p> + <h2 style="margin-top: 0"><small><a href="https://forum.yunohost.org/c/announcement">Latest news</a></small></h2> </div> <hr /> @@ -114,6 +114,29 @@ </div> + <hr /> + + <div class="row cf"> + <div class="text-center"> + <h1>They support us <3<br /> + <small>We are thankful for our sponsors <br/>providing us with infrastructure and grants!</small> + </h1> + <p style="margin-left:auto;margin-right:auto;"> + <a style="padding: 5px;" href="https://nlnet.nl"><img src="/images/logo_nlnet.png" width="150px"/></a> + <a style="padding: 5px;" href="https://www.ngi.eu"><img src="/images/logo_ngi.png" width="130px"/></a> + <a style="padding: 5px;" href="https://www.codelutin.com"><img src="/images/logo_codelutin.png" width="100px"/></a> + </p> + <p style="margin-left:auto;margin-right:auto;"> + <a style="padding: 5px;" href="https://www.globenet.org"><img src="/images/logo_globenet.png" width="150px"/></a> + <a style="padding: 5px;" href="https://www.gitoyen.net"><img src="/images/logo_gitoyen.png" width="150px"/></a> + <a style="padding: 5px;" href="https://tetaneutral.net"><img src="/images/logo_tetaneutral.png" width="90px"/></a> + <a style="padding: 5px;" href="https://ldn-fai.net"><img src="/images/logo_ldn.png" width="120px"/></a> + <a style="padding: 5px;" href="https://www.nbs-system.com"><img src="/images/logo_nbs.png" width="130px"/></a> + </p> + </div> + </div> + + </div><!-- boring-part --> <script type="text/javascript"> diff --git a/index_de.md b/orphaned/index.de.md similarity index 79% rename from index_de.md rename to orphaned/index.de.md index be0557bd..0fde591a 100644 --- a/index_de.md +++ b/orphaned/index.de.md @@ -22,7 +22,7 @@ </div> <div class="main-links hidden-xs"> - <a href="/whatsyunohost">Über Yunohost</a> <span class="colored-bar">•</span> + <a href="/whatsyunohost">Über YunoHost</a> <span class="colored-bar">•</span> <a href="https://forum.yunohost.org/c/announcement" target="_blank">Letzte Nachrichten</a> <span class="colored-bar">•</span> <a href="/docs">Dokumentation</a> <span class="colored-bar">•</span> <a href="https://donate.yunohost.org/">Spenden</a> @@ -41,7 +41,7 @@ Self-Hosting für alle ermöglicht.</small></h1> <div class="call-to-action"> <a class="btn btn-primary btn-lg" href="/try">Ausprobieren</a> <a class="btn btn-success btn-lg" href="/install">Loslegen</a> - <p class="text-muted"><small><a href="https://forum.yunohost.org/t/yunohost-3-6-release-sortie-de-yunohost-3-6/8359">YunoHost v3.6</a></small></p> + <h2 style="margin-top: 0"><small><a href="https://forum.yunohost.org/c/announcement">Latest news</a></small></h2> </div> <div class="row cf"> @@ -88,7 +88,7 @@ Self-Hosting für alle ermöglicht.</small></h1> <div class="row cf"> <div class="col-md-4 button-list"> - <a class="btn btn-lg btn-block btn-primary" href="/whatsyunohost">Uber YunoHost</a> + <a class="btn btn-lg btn-block btn-primary" href="/whatsyunohost">Über YunoHost</a> <a class="btn btn-lg btn-block btn-info" href="/docs">Dokumentation</a> <a class="btn btn-lg btn-block btn-success" href="/contribute">Mach mit!</a> <a class="btn btn-lg btn-block btn-warning" href="https://forum.yunohost.org/" target="_blank">Forum</a> @@ -113,6 +113,29 @@ Self-Hosting für alle ermöglicht.</small></h1> </div> + <hr /> + + <div class="row cf"> + <div class="text-center"> + <h1>They support us <3<br /> + <small>We are thankful for our sponsors <br/>providing us with infrastructure and grants!</small> + </h1> + <p style="margin-left:auto;margin-right:auto;"> + <a style="padding: 5px;" href="https://nlnet.nl"><img src="/images/logo_nlnet.png" width="150px"/></a> + <a style="padding: 5px;" href="https://www.ngi.eu"><img src="/images/logo_ngi.png" width="130px"/></a> + <a style="padding: 5px;" href="https://www.codelutin.com"><img src="/images/logo_codelutin.png" width="100px"/></a> + </p> + <p style="margin-left:auto;margin-right:auto;"> + <a style="padding: 5px;" href="https://www.globenet.org"><img src="/images/logo_globenet.png" width="150px"/></a> + <a style="padding: 5px;" href="https://www.gitoyen.net"><img src="/images/logo_gitoyen.png" width="150px"/></a> + <a style="padding: 5px;" href="https://tetaneutral.net"><img src="/images/logo_tetaneutral.png" width="90px"/></a> + <a style="padding: 5px;" href="https://ldn-fai.net"><img src="/images/logo_ldn.png" width="120px"/></a> + <a style="padding: 5px;" href="https://www.nbs-system.com"><img src="/images/logo_nbs.png" width="130px"/></a> + </p> + </div> + </div> + + </div><!-- boring-part --> <script type="text/javascript"> diff --git a/index_es.md b/orphaned/index.es.md similarity index 80% rename from index_es.md rename to orphaned/index.es.md index a63a7942..3a29ed7b 100644 --- a/index_es.md +++ b/orphaned/index.es.md @@ -40,7 +40,7 @@ <div class="call-to-action"> <a class="btn btn-primary btn-lg" href="/try">Probar</a> <a class="btn btn-success btn-lg" href="/install">Instalar</a> - <p class="text-muted"><small><a href="https://forum.yunohost.org/t/yunohost-3-6-release-sortie-de-yunohost-3-6/8359">YunoHost v3.6</a></small></p> + <h2 style="margin-top: 0"><small><a href="https://forum.yunohost.org/c/announcement">Latest news</a></small></h2> </div> <div class="row cf"> @@ -112,6 +112,29 @@ </div> + <hr /> + + <div class="row cf"> + <div class="text-center"> + <h1>They support us <3<br /> + <small>We are thankful for our sponsors <br/>providing us with infrastructure and grants!</small> + </h1> + <p style="margin-left:auto;margin-right:auto;"> + <a style="padding: 5px;" href="https://nlnet.nl"><img src="/images/logo_nlnet.png" width="150px"/></a> + <a style="padding: 5px;" href="https://www.ngi.eu"><img src="/images/logo_ngi.png" width="130px"/></a> + <a style="padding: 5px;" href="https://www.codelutin.com"><img src="/images/logo_codelutin.png" width="100px"/></a> + </p> + <p style="margin-left:auto;margin-right:auto;"> + <a style="padding: 5px;" href="https://www.globenet.org"><img src="/images/logo_globenet.png" width="150px"/></a> + <a style="padding: 5px;" href="https://www.gitoyen.net"><img src="/images/logo_gitoyen.png" width="150px"/></a> + <a style="padding: 5px;" href="https://tetaneutral.net"><img src="/images/logo_tetaneutral.png" width="90px"/></a> + <a style="padding: 5px;" href="https://ldn-fai.net"><img src="/images/logo_ldn.png" width="120px"/></a> + <a style="padding: 5px;" href="https://www.nbs-system.com"><img src="/images/logo_nbs.png" width="130px"/></a> + </p> + </div> + </div> + + </div><!-- boring-part --> <script type="text/javascript"> diff --git a/index_fr.md b/orphaned/index.fr.md similarity index 73% rename from index_fr.md rename to orphaned/index.fr.md index a1bd6461..54333a4d 100644 --- a/index_fr.md +++ b/orphaned/index.fr.md @@ -27,7 +27,7 @@ <div class="boring-part" markdown="1"> - <h1><small>Avec</small> YunoHost<small>, gère facilement un serveur pour tes amis, ton asso, ton entreprise.</small> <a href="/whatsyunohost" style="font-size:0.6em;">En savoir plus</a></small></h1> + <h1><small>Avec</small> YunoHost<small>, gérez facilement un serveur pour vos amis, votre association, votre entreprise.</small> <a href="/whatsyunohost" style="font-size:0.6em;">En savoir plus</a></small></h1> <div class="home-panel"> <img src="/images/home_panel.jpg" /> @@ -71,8 +71,8 @@ <div class="row cf"> <div class="col-md-7 text-right"> - <h1>Construisez <small>votre petit bout d'Internet en ajoutant des applications en quelques clics</small></h1> - <p><br /><a href="/apps">Parcourir le catalogue d'applications</a></p> + <h1>Construisez <small>votre petit bout d’Internet en ajoutant des applications en quelques clics</small></h1> + <p><br /><a href="/apps">Parcourir le catalogue d’applications</a></p> </div> <div class="col-md-4"> <div class="feature-pic"> @@ -87,7 +87,7 @@ <div class="text-center"> <h1>Hey ! Nous sommes humains !<br /> <small>Si vous avez une question, un problème, ou que vous êtes tout simplement intéressé, passez dire « Bonjour » sur notre forum ou le chat!</small></h1> - + </div> <div class="col-md-4 col-md-offset-4 button-list"> <a class="btn btn-lg btn-block btn-info" href="/docs"><span class="glyphicon glyphicon-book"></span> Documentation</a> <a class="btn btn-lg btn-block btn-danger btn-support" href="/help"><span class="glyphicon glyphicon-comment"></span> Forum et chat</a> @@ -96,6 +96,29 @@ </div> </div> + <hr /> + + <div class="row cf"> + <div class="text-center"> + <h1>Nos soutiens <3<br /> + <small>Nous sommes reconnaissant envers nos mécènes <br/>qui nous soutiennent financièrement ou via des dons d'infrastructure</small> + </h1> + <p style="margin-left:auto;margin-right:auto;"> + <a style="padding: 5px;" href="https://nlnet.nl"><img src="/images/logo_nlnet.png" width="150px"/></a> + <a style="padding: 5px;" href="https://www.ngi.eu"><img src="/images/logo_ngi.png" width="130px"/></a> + <a style="padding: 5px;" href="https://www.codelutin.com"><img src="/images/logo_codelutin.png" width="100px"/></a> + </p> + <p style="margin-left:auto;margin-right:auto;"> + <a style="padding: 5px;" href="https://www.globenet.org"><img src="/images/logo_globenet.png" width="150px"/></a> + <a style="padding: 5px;" href="https://www.gitoyen.net"><img src="/images/logo_gitoyen.png" width="150px"/></a> + <a style="padding: 5px;" href="https://tetaneutral.net"><img src="/images/logo_tetaneutral.png" width="90px"/></a> + <a style="padding: 5px;" href="https://ldn-fai.net"><img src="/images/logo_ldn.png" width="120px"/></a> + <a style="padding: 5px;" href="https://www.nbs-system.com"><img src="/images/logo_nbs.png" width="130px"/></a> + </p> + </div> + </div> + + </div><!-- boring-part --> <script type="text/javascript"> diff --git a/index_it.md b/orphaned/index.it.md similarity index 80% rename from index_it.md rename to orphaned/index.it.md index 45d2019c..e0884761 100644 --- a/index_it.md +++ b/orphaned/index.it.md @@ -41,7 +41,7 @@ <div class="call-to-action"> <a class="btn btn-primary btn-lg" href="/try">Provalo</a> <a class="btn btn-success btn-lg" href="/install">Per cominciare</a> - <p class="text-muted"><small><a href="https://forum.yunohost.org/t/yunohost-3-6-release-sortie-de-yunohost-3-6/8359">YunoHost v3.6</a></small></p> + <h2 style="margin-top: 0"><small><a href="https://forum.yunohost.org/c/announcement">Latest news</a></small></h2> </div> <div class="row cf"> @@ -113,6 +113,29 @@ </div> + <hr /> + + <div class="row cf"> + <div class="text-center"> + <h1>They support us <3<br /> + <small>We are thankful for our sponsors <br/>providing us with infrastructure and grants!</small> + </h1> + <p style="margin-left:auto;margin-right:auto;"> + <a style="padding: 5px;" href="https://nlnet.nl"><img src="/images/logo_nlnet.png" width="150px"/></a> + <a style="padding: 5px;" href="https://www.ngi.eu"><img src="/images/logo_ngi.png" width="130px"/></a> + <a style="padding: 5px;" href="https://www.codelutin.com"><img src="/images/logo_codelutin.png" width="100px"/></a> + </p> + <p style="margin-left:auto;margin-right:auto;"> + <a style="padding: 5px;" href="https://www.globenet.org"><img src="/images/logo_globenet.png" width="150px"/></a> + <a style="padding: 5px;" href="https://www.gitoyen.net"><img src="/images/logo_gitoyen.png" width="150px"/></a> + <a style="padding: 5px;" href="https://tetaneutral.net"><img src="/images/logo_tetaneutral.png" width="90px"/></a> + <a style="padding: 5px;" href="https://ldn-fai.net"><img src="/images/logo_ldn.png" width="120px"/></a> + <a style="padding: 5px;" href="https://www.nbs-system.com"><img src="/images/logo_nbs.png" width="130px"/></a> + </p> + </div> + </div> + + </div><!-- boring-part --> <script type="text/javascript"> diff --git a/index.md b/orphaned/index.md similarity index 78% rename from index.md rename to orphaned/index.md index 4e960d64..c18bd033 100644 --- a/index.md +++ b/orphaned/index.md @@ -16,6 +16,7 @@ <span class="yolo 8" style="color: #FF6600;">john@doe.org</span> <span class="yolo 9" style="color: #FF5050;">dude, Y U NO Host?!</span> <span class="yolo 10" style="color: #66FF33;">Keep calm and host yourself</span> + <span class="yolo 11" style="color: #3366FF;">Be the cloud you want to see in the world</span> </p> <button class="btn btn-primary btn-lg btn-block yolobtn">What?</button> </div> @@ -97,9 +98,32 @@ <a class="btn btn-lg btn-block btn-success" href="/contribute"><span class="glyphicon glyphicon-heart"></span> Get involved</a> <a class="btn btn-lg btn-block btn-primary" href="https://donate.yunohost.org/" style="background-color: #ffd236; border-color: #ffd236;"><span class="glyphicon glyphicon-usd"></span> Donate</a> </div> + </div> </div> -</div><!-- boring-part --> + <hr /> + + <div class="row cf"> + <div class="text-center"> + <h1>They support us <3<br /> + <small>We are thankful for our sponsors <br/>providing us with infrastructure and grants!</small> + </h1> + <p style="margin-left:auto;margin-right:auto;"> + <a style="padding: 5px;" href="https://nlnet.nl"><img src="/images/logo_nlnet.png" width="150px"/></a> + <a style="padding: 5px;" href="https://www.ngi.eu"><img src="/images/logo_ngi.png" width="130px"/></a> + <a style="padding: 5px;" href="https://www.codelutin.com"><img src="/images/logo_codelutin.png" width="100px"/></a> + </p> + <p style="margin-left:auto;margin-right:auto;"> + <a style="padding: 5px;" href="https://www.globenet.org"><img src="/images/logo_globenet.png" width="150px"/></a> + <a style="padding: 5px;" href="https://www.gitoyen.net"><img src="/images/logo_gitoyen.png" width="150px"/></a> + <a style="padding: 5px;" href="https://tetaneutral.net"><img src="/images/logo_tetaneutral.png" width="90px"/></a> + <a style="padding: 5px;" href="https://ldn-fai.net"><img src="/images/logo_ldn.png" width="120px"/></a> + <a style="padding: 5px;" href="https://www.nbs-system.com"><img src="/images/logo_nbs.png" width="130px"/></a> + </p> + </div> + </div> + +</div> <script type="text/javascript"> jQuery('.teasing-part').css({ diff --git a/index_oc.md b/orphaned/index.oc.md similarity index 79% rename from index_oc.md rename to orphaned/index.oc.md index 600c81c9..80c1c013 100644 --- a/index_oc.md +++ b/orphaned/index.oc.md @@ -35,7 +35,7 @@ <div class="call-to-action"> <a class="btn btn-primary btn-lg" href="/try">Ensajar</a> <a class="btn btn-success btn-lg" href="/install">Installar</a> - <p class="text-muted"><small><a href="https://forum.yunohost.org/t/yunohost-3-6-release-sortie-de-yunohost-3-6/8359">YunoHost v3.6</a></small></p> + <h2 style="margin-top: 0"><small><a href="https://forum.yunohost.org/c/announcement">Latest news</a></small></h2> </div> <hr /> @@ -111,6 +111,29 @@ </div> + <hr /> + + <div class="row cf"> + <div class="text-center"> + <h1>They support us <3<br /> + <small>We are thankful for our sponsors <br/>providing us with infrastructure and grants!</small> + </h1> + <p style="margin-left:auto;margin-right:auto;"> + <a style="padding: 5px;" href="https://nlnet.nl"><img src="/images/logo_nlnet.png" width="150px"/></a> + <a style="padding: 5px;" href="https://www.ngi.eu"><img src="/images/logo_ngi.png" width="130px"/></a> + <a style="padding: 5px;" href="https://www.codelutin.com"><img src="/images/logo_codelutin.png" width="100px"/></a> + </p> + <p style="margin-left:auto;margin-right:auto;"> + <a style="padding: 5px;" href="https://www.globenet.org"><img src="/images/logo_globenet.png" width="150px"/></a> + <a style="padding: 5px;" href="https://www.gitoyen.net"><img src="/images/logo_gitoyen.png" width="150px"/></a> + <a style="padding: 5px;" href="https://tetaneutral.net"><img src="/images/logo_tetaneutral.png" width="90px"/></a> + <a style="padding: 5px;" href="https://ldn-fai.net"><img src="/images/logo_ldn.png" width="120px"/></a> + <a style="padding: 5px;" href="https://www.nbs-system.com"><img src="/images/logo_nbs.png" width="130px"/></a> + </p> + </div> + </div> + + </div><!-- boring-part --> <script type="text/javascript"> diff --git a/news.md b/orphaned/news.md similarity index 100% rename from news.md rename to orphaned/news.md diff --git a/registrar_fr.md b/orphaned/registrar.fr.md similarity index 64% rename from registrar_fr.md rename to orphaned/registrar.fr.md index 5a72830b..a678ff46 100644 --- a/registrar_fr.md +++ b/orphaned/registrar.fr.md @@ -2,7 +2,7 @@ Voici une liste des bureaux d’enregistrement pour acheter un nom de domaine : * [OVH](http://ovh.com/) -* [GoDaddy](https://godaddy.com/) * [Gandi](http://gandi.net/) * [Namecheap](https://www.namecheap.com/) * [BookMyName](https://www.bookmyname.com/) +* [GoDaddy](https://godaddy.com/) /!\ GoDaddy is [not a good example about censorship](https://en.wikipedia.org/wiki/GoDaddy#Controversies) diff --git a/registrar.md b/orphaned/registrar.md similarity index 55% rename from registrar.md rename to orphaned/registrar.md index d17134b2..0fa657dc 100644 --- a/registrar.md +++ b/orphaned/registrar.md @@ -1,8 +1,8 @@ -#Registar +# Registar Here is a list of Registrars to book domain names: * [OVH](http://ovh.com/) -* [GoDaddy](https://godaddy.com/) * [Gandi](http://gandi.net/) * [Namecheap](https://www.namecheap.com/) * [BookMyName](https://www.bookmyname.com/) +* [GoDaddy](https://godaddy.com/) /!\ GoDaddy is [not a good example about censorship](https://en.wikipedia.org/wiki/GoDaddy#Controversies) diff --git a/packaging_apps_helpers.md b/packaging_apps_helpers.md deleted file mode 100644 index 476d7822..00000000 --- a/packaging_apps_helpers.md +++ /dev/null @@ -1,5136 +0,0 @@ -<!-- NO_MARKDOWN_PARSING --> - -<h1>App helpers</h1> - -<p>Doc auto-generated by <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/doc/generate_helper_doc.py">this script</a> on 03/30/2020 (Yunohost version 3.7.0.12)</p> - - -<h3 style="text-transform: uppercase; font-weight: bold">apt</h3> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_package_is_installed" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_package_is_installed</tt></h5> - <h6 class="helper-card-subtitle text-muted">Check either a package is installed or not</h6> - </div> - <div id="collapse-ynh_package_is_installed" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_package_is_installed --package=name</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-p</code>, <code>--package</code> : the package name to check</li> - - - </ul> - </p> - - - - <p> - <strong>Example</strong>: <code class="helper-code">ynh_package_is_installed --package=yunohost && echo "ok"</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/apt#L51">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_package_version" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_package_version</tt></h5> - <h6 class="helper-card-subtitle text-muted">Get the version of an installed package</h6> - </div> - <div id="collapse-ynh_package_version" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_package_version --package=name</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-p</code>, <code>--package</code> : the package name to get version</li> - - - </ul> - </p> - - - <p> - <strong>Returns</strong>: the version or an empty string - </p> - - - <p> - <strong>Example</strong>: <code class="helper-code">version=$(ynh_package_version --package=yunohost)</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/apt#L73">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_package_update" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_package_update</tt></h5> - <h6 class="helper-card-subtitle text-muted">Update package index files</h6> - </div> - <div id="collapse-ynh_package_update" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_package_update</code> - - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/apt#L105">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_package_install" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_package_install</tt></h5> - <h6 class="helper-card-subtitle text-muted">Install package(s)</h6> - </div> - <div id="collapse-ynh_package_install" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_package_install name [name [...]]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>name</code> : the package name to install</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/apt#L115">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_package_remove" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_package_remove</tt></h5> - <h6 class="helper-card-subtitle text-muted">Remove package(s)</h6> - </div> - <div id="collapse-ynh_package_remove" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_package_remove name [name [...]]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>name</code> : the package name to remove</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/apt#L126">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_package_autoremove" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_package_autoremove</tt></h5> - <h6 class="helper-card-subtitle text-muted">Remove package(s) and their uneeded dependencies</h6> - </div> - <div id="collapse-ynh_package_autoremove" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_package_autoremove name [name [...]]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>name</code> : the package name to remove</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/apt#L136">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_package_autopurge" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_package_autopurge</tt></h5> - <h6 class="helper-card-subtitle text-muted">Purge package(s) and their uneeded dependencies</h6> - </div> - <div id="collapse-ynh_package_autopurge" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_package_autopurge name [name [...]]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>name</code> : the package name to autoremove and purge</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.7.2 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/apt#L146">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_install_app_dependencies" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_install_app_dependencies</tt></h5> - <h6 class="helper-card-subtitle text-muted">Define and install dependencies with a equivs control file</h6> - </div> - <div id="collapse-ynh_install_app_dependencies" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_install_app_dependencies dep [dep [...]]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>dep</code> : the package name to install in dependence. Writing "dep3|dep4|dep5" can be used to specify alternatives. For example : dep1 dep2 "dep3|dep4|dep5" will require to install dep1 and dep 2 and (dep3 or dep4 or dep5).</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - This helper can/should only be called once per app</br></br>example : ynh_install_app_dependencies dep1 dep2 "dep3|dep4|dep5"</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/apt#L206">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_remove_app_dependencies" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_remove_app_dependencies</tt></h5> - <h6 class="helper-card-subtitle text-muted">Remove fake package and its dependencies</h6> - </div> - <div id="collapse-ynh_remove_app_dependencies" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_remove_app_dependencies</code> - - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Dependencies will removed only if no other package need them.</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/apt#L265">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - - -<h3 style="text-transform: uppercase; font-weight: bold">backup</h3> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_backup" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_backup</tt></h5> - <h6 class="helper-card-subtitle text-muted">Add a file or a directory to the list of paths to backup</h6> - </div> - <div id="collapse-ynh_backup" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_backup --src_path=src_path [--dest_path=dest_path] [--is_big] [--not_mandatory]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-s</code>, <code>--src_path</code> : file or directory to bind or symlink or copy. it shouldn't be in the backup dir.</li> - - - - <li><code>-d</code>, <code>--dest_path</code> : destination file or directory inside the backup dir</li> - - - - <li><code>-b</code>, <code>--is_big</code> : Indicate data are big (mail, video, image ...)</li> - - - - <li><code>-m</code>, <code>--not_mandatory</code> : Indicate that if the file is missing, the backup can ignore it.</li> - - - - <li><code>arg</code> : Deprecated arg</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - This helper can be used both in a system backup hook, and in an app backup script</br></br>Details: ynh_backup writes SRC and the relative DEST into a CSV file. And it</br>creates the parent destination directory</br></br>If DEST is ended by a slash it complete this path with the basename of SRC.</br></br>Example in the context of a wordpress app</br></br>ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf"</br># => This line will be added into CSV file</br># "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/etc/nginx/conf.d/$domain.d/$app.conf"</br></br>ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "conf/nginx.conf"</br># => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf/nginx.conf"</br></br>ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "conf/"</br># => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf/$app.conf"</br></br>ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "conf"</br># => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf"</br></br>#Deprecated usages (maintained for retro-compatibility)</br>ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "${backup_dir}/conf/nginx.conf"</br># => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf/nginx.conf"</br></br>ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "/conf/"</br># => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf/$app.conf"</br></br>Requires YunoHost version 2.4.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L44">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_restore" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_restore</tt></h5> - <h6 class="helper-card-subtitle text-muted">Restore all files that were previously backuped in a core backup script or app backup script</h6> - </div> - <div id="collapse-ynh_restore" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_restore</code> - - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L161">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_restore_file" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_restore_file</tt></h5> - <h6 class="helper-card-subtitle text-muted">Restore a file or a directory</h6> - </div> - <div id="collapse-ynh_restore_file" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_restore_file --origin_path=origin_path [--dest_path=dest_path] [--not_mandatory]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-o</code>, <code>--origin_path</code> : Path where was located the file or the directory before to be backuped or relative path to $YNH_CWD where it is located in the backup archive</li> - - - - <li><code>-d</code>, <code>--dest_path</code> : Path where restore the file or the dir, if unspecified, the destination will be ORIGIN_PATH or if the ORIGIN_PATH doesn't exist in the archive, the destination will be searched into backup.csv</li> - - - - <li><code>-m</code>, <code>--not_mandatory</code> : Indicate that if the file is missing, the restore process can ignore it.</li> - - - </ul> - </p> - - - - - <p> - <strong>Examples</strong>:<ul> - - - <code class="helper-code"> ynh_restore_file "/etc/nginx/conf.d/$domain.d/$app.conf"</code> - - <br> - - - You can also use relative paths: - - <br> - - - <code class="helper-code"> ynh_restore_file "conf/nginx.conf"</code> - - <br> - - </ul> - </p> - - - <p> - <strong>Details</strong>: - <p> - Use the registered path in backup_list by ynh_backup to restore the file at</br>the right place.</br></br>If DEST_PATH already exists and is lighter than 500 Mo, a backup will be made in</br>/home/yunohost.conf/backup/. Otherwise, the existing file is removed.</br></br>if apps/wordpress/etc/nginx/conf.d/$domain.d/$app.conf exists, restore it into</br>/etc/nginx/conf.d/$domain.d/$app.conf</br>if no, search for a match in the csv (eg: conf/nginx.conf) and restore it into</br>/etc/nginx/conf.d/$domain.d/$app.conf</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L220">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_store_file_checksum" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_store_file_checksum</tt></h5> - <h6 class="helper-card-subtitle text-muted">Calculate and store a file checksum into the app settings</h6> - </div> - <div id="collapse-ynh_store_file_checksum" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_store_file_checksum --file=file</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-f</code>, <code>--file</code> : The file on which the checksum will performed, then stored.</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - $app should be defined when calling this helper</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L296">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_backup_if_checksum_is_different" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_backup_if_checksum_is_different</tt></h5> - <h6 class="helper-card-subtitle text-muted">Verify the checksum and backup the file if it's different</h6> - </div> - <div id="collapse-ynh_backup_if_checksum_is_different" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_backup_if_checksum_is_different --file=file</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-f</code>, <code>--file</code> : The file on which the checksum test will be perfomed.</li> - - - </ul> - </p> - - - <p> - <strong>Returns</strong>: the name of a backup file, or nothing - </p> - - - - - <p> - <strong>Details</strong>: - <p> - This helper is primarily meant to allow to easily backup personalised/manually</br>modified config files.</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L328">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_delete_file_checksum" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_delete_file_checksum</tt></h5> - <h6 class="helper-card-subtitle text-muted">Delete a file checksum from the app settings</h6> - </div> - <div id="collapse-ynh_delete_file_checksum" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_remove_file_checksum file</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-f</code>, <code>--file=</code> : The file for which the checksum will be deleted</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - $app should be defined when calling this helper</br></br>Requires YunoHost version 3.3.1 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L361">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_backup_before_upgrade" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_backup_before_upgrade</tt></h5> - <h6 class="helper-card-subtitle text-muted">Make a backup in case of failed upgrade</h6> - </div> - <div id="collapse-ynh_backup_before_upgrade" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_backup_before_upgrade -ynh_clean_setup () { - ynh_restore_upgradebackup -} -ynh_abort_if_errors</code> - - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.7.2 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L383">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_restore_upgradebackup" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_restore_upgradebackup</tt></h5> - <h6 class="helper-card-subtitle text-muted">Restore a previous backup if the upgrade process failed</h6> - </div> - <div id="collapse-ynh_restore_upgradebackup" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_backup_before_upgrade -ynh_clean_setup () { - ynh_restore_upgradebackup -} -ynh_abort_if_errors</code> - - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.7.2 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L432">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - - -<h3 style="text-transform: uppercase; font-weight: bold">fail2ban</h3> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_add_fail2ban_config" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_add_fail2ban_config</tt></h5> - <h6 class="helper-card-subtitle text-muted">Create a dedicated fail2ban config (jail and filter conf files)</h6> - </div> - <div id="collapse-ynh_add_fail2ban_config" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code helper-usage">1: ynh_add_fail2ban_config --logpath=log_file --failregex=filter [--max_retry=max_retry] [--ports=ports] -2: ynh_add_fail2ban_config --use_template [--others_var="list of others variables to replace"] -| for example : 'var_1 var_2 ...'</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-l</code>, <code>--logpath=</code> : Log file to be checked by fail2ban</li> - - - - <li><code>-r</code>, <code>--failregex=</code> : Failregex to be looked for by fail2ban</li> - - - - <li><code>-m</code>, <code>--max_retry=</code> : Maximum number of retries allowed before banning IP address - default: 3</li> - - - - <li><code>-p</code>, <code>--ports=</code> : Ports blocked for a banned IP address - default: http,https</li> - - - - <li><code>-t</code>, <code>--use_template</code> : Use this helper in template mode</li> - - - - <li><code>-v</code>, <code>--others_var=</code> : List of others variables to replace separeted by a space</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - -----------------------------------------------------------------------------</br></br>This will use a template in ../conf/f2b_jail.conf and ../conf/f2b_filter.conf</br> __APP__ by $app</br></br>You can dynamically replace others variables by example :</br> __VAR_1__ by $var_1</br> __VAR_2__ by $var_2</br></br>Generally your template will look like that by example (for synapse):</br></br>f2b_jail.conf:</br> [__APP__]</br> enabled = true</br> port = http,https</br> filter = __APP__</br> logpath = /var/log/__APP__/logfile.log</br> maxretry = 3</br></br>f2b_filter.conf:</br> [INCLUDES]</br> before = common.conf</br> [Definition]</br></br># Part of regex definition (just used to make more easy to make the global regex)</br> __synapse_start_line = .? \- synapse\..+ \-</br></br># Regex definition.</br> failregex = ^%(__synapse_start_line)s INFO \- POST\-(\d+)\- <HOST> \- \d+ \- Received request\: POST /_matrix/client/r0/login\??<SKIPLINES>%(__synapse_start_line)s INFO \- POST\-\1\- Got login request with identifier: \{u'type': u'm.id.user', u'user'\: u'(.+?)'\}, medium\: None, address: None, user\: u'\5'<SKIPLINES>%(__synapse_start_line)s WARNING \- \- (Attempted to login as @\5\:.+ but they do not exist|Failed password login for user @\5\:.+)$</br></br>ignoreregex =</br></br>-----------------------------------------------------------------------------</br></br>Note about the "failregex" option:</br> regex to match the password failure messages in the logfile. The</br> host must be matched by a group named "host". The tag "<HOST>" can</br> be used for standard IP/hostname matching and is only an alias for</br> (?:::f{4,6}:)?(?P<host>[\w\-.^_]+)</br></br>You can find some more explainations about how to make a regex here :</br> https://www.fail2ban.org/wiki/index.php/MANUAL_0_8#Filters</br></br>Note that the logfile need to exist before to call this helper !!</br></br>To validate your regex you can test with this command:</br>fail2ban-regex /var/log/YOUR_LOG_FILE_PATH /etc/fail2ban/filter.d/YOUR_APP.conf</br></br>Requires YunoHost version 3.5.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/fail2ban#L65">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_remove_fail2ban_config" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_remove_fail2ban_config</tt></h5> - <h6 class="helper-card-subtitle text-muted">Remove the dedicated fail2ban config (jail and filter conf files)</h6> - </div> - <div id="collapse-ynh_remove_fail2ban_config" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_remove_fail2ban_config</code> - - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.5.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/fail2ban#L147">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - - -<h3 style="text-transform: uppercase; font-weight: bold">getopts</h3> - - - - -<h3 style="text-transform: uppercase; font-weight: bold">logging</h3> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_die" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_die</tt></h5> - <h6 class="helper-card-subtitle text-muted">Print a message to stderr and exit</h6> - </div> - <div id="collapse-ynh_die" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_die --message=MSG [--ret_code=RETCODE]</code> - - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.4.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L8">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_print_info" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_print_info</tt></h5> - <h6 class="helper-card-subtitle text-muted">Display a message in the 'INFO' logging category</h6> - </div> - <div id="collapse-ynh_print_info" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_print_info --message="Some message"</code> - - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.2.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L26">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_print_warn" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_print_warn</tt></h5> - <h6 class="helper-card-subtitle text-muted">Print a warning on stderr</h6> - </div> - <div id="collapse-ynh_print_warn" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_print_warn --message="Text to print"</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-m</code>, <code>--message</code> : The text to print</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.2.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L71">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_print_err" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_print_err</tt></h5> - <h6 class="helper-card-subtitle text-muted">Print an error on stderr</h6> - </div> - <div id="collapse-ynh_print_err" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_print_err --message="Text to print"</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-m</code>, <code>--message</code> : The text to print</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.2.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L88">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_exec_err" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_exec_err</tt></h5> - <h6 class="helper-card-subtitle text-muted">Execute a command and print the result as an error</h6> - </div> - <div id="collapse-ynh_exec_err" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_exec_err your_command -ynh_exec_err "your_command | other_command"</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>command</code> : command to execute</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - When using pipes, double quotes are required - otherwise, this helper will run the first command, and the whole output will be sent through the next pipe.</br></br>If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.</br></br>Requires YunoHost version 3.2.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L111">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_exec_warn" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_exec_warn</tt></h5> - <h6 class="helper-card-subtitle text-muted">Execute a command and print the result as a warning</h6> - </div> - <div id="collapse-ynh_exec_warn" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_exec_warn your_command -ynh_exec_warn "your_command | other_command"</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>command</code> : command to execute</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - When using pipes, double quotes are required - otherwise, this helper will run the first command, and the whole output will be sent through the next pipe.</br></br>If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.</br></br>Requires YunoHost version 3.2.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L127">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_exec_warn_less" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_exec_warn_less</tt></h5> - <h6 class="helper-card-subtitle text-muted">Execute a command and force the result to be printed on stdout</h6> - </div> - <div id="collapse-ynh_exec_warn_less" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_exec_warn_less your_command -ynh_exec_warn_less "your_command | other_command"</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>command</code> : command to execute</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - When using pipes, double quotes are required - otherwise, this helper will run the first command, and the whole output will be sent through the next pipe.</br></br>If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.</br></br>Requires YunoHost version 3.2.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L143">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_exec_quiet" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_exec_quiet</tt></h5> - <h6 class="helper-card-subtitle text-muted">Execute a command and redirect stdout in /dev/null</h6> - </div> - <div id="collapse-ynh_exec_quiet" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_exec_quiet your_command -ynh_exec_quiet "your_command | other_command"</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>command</code> : command to execute</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - When using pipes, double quotes are required - otherwise, this helper will run the first command, and the whole output will be sent through the next pipe.</br></br>If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.</br></br>Requires YunoHost version 3.2.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L159">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_exec_fully_quiet" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_exec_fully_quiet</tt></h5> - <h6 class="helper-card-subtitle text-muted">Execute a command and redirect stdout and stderr in /dev/null</h6> - </div> - <div id="collapse-ynh_exec_fully_quiet" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_exec_fully_quiet your_command -ynh_exec_fully_quiet "your_command | other_command"</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>command</code> : command to execute</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - When using pipes, double quotes are required - otherwise, this helper will run the first command, and the whole output will be sent through the next pipe.</br></br>If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.</br></br>Requires YunoHost version 3.2.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L175">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_print_OFF" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_print_OFF</tt></h5> - <h6 class="helper-card-subtitle text-muted">Remove any logs for all the following commands.</h6> - </div> - <div id="collapse-ynh_print_OFF" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_print_OFF</code> - - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - WARNING: You should be careful with this helper, and never forget to use ynh_print_ON as soon as possible to restore the logging.</br></br>Requires YunoHost version 3.2.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L186">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_print_ON" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_print_ON</tt></h5> - <h6 class="helper-card-subtitle text-muted">Restore the logging after ynh_print_OFF</h6> - </div> - <div id="collapse-ynh_print_ON" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_print_ON</code> - - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.2.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L195">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_script_progression" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_script_progression</tt></h5> - <h6 class="helper-card-subtitle text-muted">Print a progress bar showing the progression of an app script</h6> - </div> - <div id="collapse-ynh_script_progression" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_script_progression --message=message [--weight=weight] [--time]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-m</code>, <code>--message=</code> : The text to print</li> - - - - <li><code>-w</code>, <code>--weight=</code> : The weight for this progression. This value is 1 by default. Use a bigger value for a longer part of the script.</li> - - - - <li><code>-t</code>, <code>--time=</code> : Print the execution time since the last call to this helper. Especially usefull to define weights. The execution time is given for the duration since the previous call. So the weight should be applied to this previous call.</li> - - - - <li><code>-l</code>, <code>--last=</code> : Use for the last call of the helper, to fill te progression bar.</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.5.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L223">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_return" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_return</tt></h5> - <h6 class="helper-card-subtitle text-muted">Return data to the Yunohost core for later processing -(to be used by special hooks like app config panel and core diagnosis)</h6> - </div> - <div id="collapse-ynh_return" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_return somedata</code> - - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.6.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L307">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_debug" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_debug</tt></h5> - <h6 class="helper-card-subtitle text-muted">Debugger for app packagers</h6> - </div> - <div id="collapse-ynh_debug" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_debug [--message=message] [--trace=1/0]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-m</code>, <code>--message=</code> : The text to print</li> - - - - <li><code>-t</code>, <code>--trace=</code> : Turn on or off the trace of the script. Usefull to trace nonly a small part of a script.</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.5.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L318">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_debug_exec" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_debug_exec</tt></h5> - <h6 class="helper-card-subtitle text-muted">Execute a command and print the result as debug</h6> - </div> - <div id="collapse-ynh_debug_exec" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_debug_exec your_command -ynh_debug_exec "your_command | other_command"</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>command</code> : command to execute</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - When using pipes, double quotes are required - otherwise, this helper will run the first command, and the whole output will be sent through the next pipe.</br></br>If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.</br></br>Requires YunoHost version 3.5.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L376">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - - -<h3 style="text-transform: uppercase; font-weight: bold">logrotate</h3> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_use_logrotate" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_use_logrotate</tt></h5> - <h6 class="helper-card-subtitle text-muted">Use logrotate to manage the logfile</h6> - </div> - <div id="collapse-ynh_use_logrotate" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_use_logrotate [--logfile=/log/file] [--nonappend] [--specific_user=user/group]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-l</code>, <code>--logfile</code> : absolute path of logfile</li> - - - - <li><code>-n</code>, <code>--nonappend</code> : (optional) Replace the config file instead of appending this new config.</li> - - - - <li><code>-u</code>, <code>--specific_user</code> : run logrotate as the specified user and group. If not specified logrotate is runned as root.</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - If no --logfile is provided, /var/log/${app} will be used as default.</br>logfile can be just a directory, or a full path to a logfile :</br>/parentdir/logdir</br>/parentdir/logdir/logfile.log</br></br>It's possible to use this helper multiple times, each config will be added to</br>the same logrotate config file. Unless you use the option --non-append</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logrotate#L19">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_remove_logrotate" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_remove_logrotate</tt></h5> - <h6 class="helper-card-subtitle text-muted">Remove the app's logrotate config.</h6> - </div> - <div id="collapse-ynh_remove_logrotate" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_remove_logrotate</code> - - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logrotate#L102">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - - -<h3 style="text-transform: uppercase; font-weight: bold">mysql</h3> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_mysql_connect_as" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_mysql_connect_as</tt></h5> - <h6 class="helper-card-subtitle text-muted">Open a connection as a user</h6> - </div> - <div id="collapse-ynh_mysql_connect_as" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_mysql_connect_as --user=user --password=password [--database=database]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-u</code>, <code>--user</code> : the user name to connect as</li> - - - - <li><code>-p</code>, <code>--password</code> : the user password</li> - - - - <li><code>-d</code>, <code>--database</code> : the database to connect to</li> - - - </ul> - </p> - - - - <p> - <strong>Example</strong>: <code class="helper-code">ynh_mysql_connect_as 'user' 'pass' <<< "UPDATE ...;" example: ynh_mysql_connect_as 'user' 'pass' < /path/to/file.sql</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/mysql#L16">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_mysql_execute_as_root" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_mysql_execute_as_root</tt></h5> - <h6 class="helper-card-subtitle text-muted">Execute a command as root user</h6> - </div> - <div id="collapse-ynh_mysql_execute_as_root" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_mysql_execute_as_root --sql=sql [--database=database]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-s</code>, <code>--sql</code> : the SQL command to execute</li> - - - - <li><code>-d</code>, <code>--database</code> : the database to connect to</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/mysql#L37">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_mysql_execute_file_as_root" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_mysql_execute_file_as_root</tt></h5> - <h6 class="helper-card-subtitle text-muted">Execute a command from a file as root user</h6> - </div> - <div id="collapse-ynh_mysql_execute_file_as_root" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_mysql_execute_file_as_root --file=file [--database=database]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-f</code>, <code>--file</code> : the file containing SQL commands</li> - - - - <li><code>-d</code>, <code>--database</code> : the database to connect to</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/mysql#L58">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_mysql_dump_db" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_mysql_dump_db</tt></h5> - <h6 class="helper-card-subtitle text-muted">Dump a database</h6> - </div> - <div id="collapse-ynh_mysql_dump_db" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_mysql_dump_db --database=database</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-d</code>, <code>--database</code> : the database name to dump</li> - - - </ul> - </p> - - - <p> - <strong>Returns</strong>: the mysqldump output - </p> - - - <p> - <strong>Example</strong>: <code class="helper-code">ynh_mysql_dump_db 'roundcube' > ./dump.sql</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/mysql#L121">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_mysql_user_exists" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_mysql_user_exists</tt></h5> - <h6 class="helper-card-subtitle text-muted">Check if a mysql user exists</h6> - </div> - <div id="collapse-ynh_mysql_user_exists" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_mysql_user_exists --user=user</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-u</code>, <code>--user</code> : the user for which to check existence</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/mysql#L152">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_mysql_setup_db" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_mysql_setup_db</tt></h5> - <h6 class="helper-card-subtitle text-muted">Create a database, an user and its password. Then store the password in the app's config</h6> - </div> - <div id="collapse-ynh_mysql_setup_db" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_mysql_setup_db --db_user=user --db_name=name [--db_pwd=pwd]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-u</code>, <code>--db_user</code> : Owner of the database</li> - - - - <li><code>-n</code>, <code>--db_name</code> : Name of the database</li> - - - - <li><code>-p</code>, <code>--db_pwd</code> : Password of the database. If not provided, a password will be generated</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - After executing this helper, the password of the created database will be available in $db_pwd</br>It will also be stored as "mysqlpwd" into the app settings.</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/mysql#L192">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_mysql_remove_db" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_mysql_remove_db</tt></h5> - <h6 class="helper-card-subtitle text-muted">Remove a database if it exists, and the associated user</h6> - </div> - <div id="collapse-ynh_mysql_remove_db" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_mysql_remove_db --db_user=user --db_name=name</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-u</code>, <code>--db_user</code> : Owner of the database</li> - - - - <li><code>-n</code>, <code>--db_name</code> : Name of the database</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/mysql#L217">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - - -<h3 style="text-transform: uppercase; font-weight: bold">network</h3> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_find_port" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_find_port</tt></h5> - <h6 class="helper-card-subtitle text-muted">Find a free port and return it</h6> - </div> - <div id="collapse-ynh_find_port" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_find_port --port=begin_port</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-p</code>, <code>--port</code> : port to start to search</li> - - - </ul> - </p> - - - - <p> - <strong>Example</strong>: <code class="helper-code">port=$(ynh_find_port --port=8080)</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/network#L11">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_validate_ip" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_validate_ip</tt></h5> - <h6 class="helper-card-subtitle text-muted">Validate an IP address</h6> - </div> - <div id="collapse-ynh_validate_ip" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_validate_ip --family=family --ip_address=ip_address</code> - - </p> - - - <p> - <strong>Returns</strong>: 0 for valid ip addresses, 1 otherwise - </p> - - - <p> - <strong>Example</strong>: <code class="helper-code">ynh_validate_ip 4 111.222.333.444</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/network#L35">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_validate_ip4" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_validate_ip4</tt></h5> - <h6 class="helper-card-subtitle text-muted">Validate an IPv4 address</h6> - </div> - <div id="collapse-ynh_validate_ip4" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_validate_ip4 --ip_address=ip_address</code> - - </p> - - - <p> - <strong>Returns</strong>: 0 for valid ipv4 addresses, 1 otherwise - </p> - - - <p> - <strong>Example</strong>: <code class="helper-code">ynh_validate_ip4 111.222.333.444</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/network#L69">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_validate_ip6" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_validate_ip6</tt></h5> - <h6 class="helper-card-subtitle text-muted">Validate an IPv6 address</h6> - </div> - <div id="collapse-ynh_validate_ip6" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_validate_ip6 --ip_address=ip_address</code> - - </p> - - - <p> - <strong>Returns</strong>: 0 for valid ipv6 addresses, 1 otherwise - </p> - - - <p> - <strong>Example</strong>: <code class="helper-code">ynh_validate_ip6 2000:dead:beef::1</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/network#L90">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - - -<h3 style="text-transform: uppercase; font-weight: bold">nginx</h3> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_add_nginx_config" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_add_nginx_config</tt></h5> - <h6 class="helper-card-subtitle text-muted">Create a dedicated nginx config</h6> - </div> - <div id="collapse-ynh_add_nginx_config" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_add_nginx_config "list of others variables to replace"</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>list</code> : (Optional) list of others variables to replace separated by spaces. For example : 'path_2 port_2 ...'</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - This will use a template in ../conf/nginx.conf</br> __PATH__ by $path_url</br> __DOMAIN__ by $domain</br> __PORT__ by $port</br> __NAME__ by $app</br> __FINALPATH__ by $final_path</br></br>And dynamic variables (from the last example) :</br> __PATH_2__ by $path_2</br> __PORT_2__ by $port_2</br></br>Requires YunoHost version 2.7.2 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/nginx#L21">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_remove_nginx_config" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_remove_nginx_config</tt></h5> - <h6 class="helper-card-subtitle text-muted">Remove the dedicated nginx config</h6> - </div> - <div id="collapse-ynh_remove_nginx_config" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_remove_nginx_config</code> - - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.7.2 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/nginx#L73">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - - -<h3 style="text-transform: uppercase; font-weight: bold">nodejs</h3> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_use_nodejs" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_use_nodejs</tt></h5> - <h6 class="helper-card-subtitle text-muted">Load the version of node for an app, and set variables.</h6> - </div> - <div id="collapse-ynh_use_nodejs" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_use_nodejs</code> - - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - ynh_use_nodejs has to be used in any app scripts before using node for the first time.</br></br>2 variables are available:</br> - $nodejs_path: The absolute path of node for the chosen version.</br> - $nodejs_version: Just the version number of node for this app. Stored as 'nodejs_version' in settings.yml.</br>And 2 alias stored in variables:</br> - $nodejs_use_version: An old variable, not used anymore. Keep here to not break old apps</br> NB: $PATH will contain the path to node, it has to be propagated to any other shell which needs to use it.</br> That's means it has to be added to any systemd script.</br></br>Requires YunoHost version 2.7.12 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/nodejs#L43">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_install_nodejs" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_install_nodejs</tt></h5> - <h6 class="helper-card-subtitle text-muted">Install a specific version of nodejs</h6> - </div> - <div id="collapse-ynh_install_nodejs" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_install_nodejs --nodejs_version=nodejs_version</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-n</code>, <code>--nodejs_version</code> : Version of node to install. When possible, your should prefer to use major version number (e.g. 8 instead of 8.10.0). The crontab will then handle the update of minor versions when needed.</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - n (Node version management) uses the PATH variable to store the path of the version of node it is going to use.</br>That's how it changes the version</br></br>ynh_install_nodejs will install the version of node provided as argument by using n.</br></br>Requires YunoHost version 2.7.12 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/nodejs#L66">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_remove_nodejs" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_remove_nodejs</tt></h5> - <h6 class="helper-card-subtitle text-muted">Remove the version of node used by the app.</h6> - </div> - <div id="collapse-ynh_remove_nodejs" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_remove_nodejs</code> - - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - This helper will check if another app uses the same version of node,</br>if not, this version of node will be removed.</br>If no other app uses node, n will be also removed.</br></br>Requires YunoHost version 2.7.12 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/nodejs#L144">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - - -<h3 style="text-transform: uppercase; font-weight: bold">php</h3> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_add_fpm_config" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_add_fpm_config</tt></h5> - <h6 class="helper-card-subtitle text-muted">Create a dedicated php-fpm config</h6> - </div> - <div id="collapse-ynh_add_fpm_config" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_add_fpm_config [--phpversion=7.X]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-v</code>, <code>--phpversion</code> : Version of php to use.</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.7.2 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/php#L9">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_remove_fpm_config" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_remove_fpm_config</tt></h5> - <h6 class="helper-card-subtitle text-muted">Remove the dedicated php-fpm config</h6> - </div> - <div id="collapse-ynh_remove_fpm_config" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_remove_fpm_config</code> - - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.7.2 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/php#L56">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - - -<h3 style="text-transform: uppercase; font-weight: bold">postgresql</h3> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_psql_connect_as" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_psql_connect_as</tt></h5> - <h6 class="helper-card-subtitle text-muted">Open a connection as a user</h6> - </div> - <div id="collapse-ynh_psql_connect_as" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_psql_connect_as --user=user --password=password [--database=database]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-u</code>, <code>--user</code> : the user name to connect as</li> - - - - <li><code>-p</code>, <code>--password</code> : the user password</li> - - - - <li><code>-d</code>, <code>--database</code> : the database to connect to</li> - - - </ul> - </p> - - - - - <p> - <strong>Examples</strong>:<ul> - - - <code class="helper-code"> ynh_psql_connect_as 'user' 'pass' <<< "UPDATE ...;"</code> - - <br> - - - <code class="helper-code"> ynh_psql_connect_as 'user' 'pass' < /path/to/file.sql</code> - - <br> - - </ul> - </p> - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.5.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L17">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_psql_execute_as_root" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_psql_execute_as_root</tt></h5> - <h6 class="helper-card-subtitle text-muted">Execute a command as root user</h6> - </div> - <div id="collapse-ynh_psql_execute_as_root" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_psql_execute_as_root --sql=sql [--database=database]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-s</code>, <code>--sql</code> : the SQL command to execute</li> - - - - <li><code>-d</code>, <code>--database</code> : the database to connect to</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.5.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L38">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_psql_execute_file_as_root" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_psql_execute_file_as_root</tt></h5> - <h6 class="helper-card-subtitle text-muted">Execute a command from a file as root user</h6> - </div> - <div id="collapse-ynh_psql_execute_file_as_root" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_psql_execute_file_as_root --file=file [--database=database]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-f</code>, <code>--file</code> : the file containing SQL commands</li> - - - - <li><code>-d</code>, <code>--database</code> : the database to connect to</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.5.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L59">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_psql_dump_db" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_psql_dump_db</tt></h5> - <h6 class="helper-card-subtitle text-muted">Dump a database</h6> - </div> - <div id="collapse-ynh_psql_dump_db" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_psql_dump_db --database=database</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-d</code>, <code>--database</code> : the database name to dump</li> - - - </ul> - </p> - - - <p> - <strong>Returns</strong>: the psqldump output - </p> - - - <p> - <strong>Example</strong>: <code class="helper-code">ynh_psql_dump_db 'roundcube' > ./dump.sql</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.5.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L125">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_psql_user_exists" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_psql_user_exists</tt></h5> - <h6 class="helper-card-subtitle text-muted">Check if a psql user exists</h6> - </div> - <div id="collapse-ynh_psql_user_exists" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_psql_user_exists --user=user</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-u</code>, <code>--user</code> : the user for which to check existence</li> - - - </ul> - </p> - - - - - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L155">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_psql_database_exists" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_psql_database_exists</tt></h5> - <h6 class="helper-card-subtitle text-muted">Check if a psql database exists</h6> - </div> - <div id="collapse-ynh_psql_database_exists" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_psql_database_exists --database=database</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-d</code>, <code>--database</code> : the database for which to check existence</li> - - - </ul> - </p> - - - - - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L174">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_psql_setup_db" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_psql_setup_db</tt></h5> - <h6 class="helper-card-subtitle text-muted">Create a database, an user and its password. Then store the password in the app's config</h6> - </div> - <div id="collapse-ynh_psql_setup_db" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_psql_setup_db --db_user=user --db_name=name [--db_pwd=pwd]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-u</code>, <code>--db_user</code> : Owner of the database</li> - - - - <li><code>-n</code>, <code>--db_name</code> : Name of the database</li> - - - - <li><code>-p</code>, <code>--db_pwd</code> : Password of the database. If not given, a password will be generated</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - After executing this helper, the password of the created database will be available in $db_pwd</br>It will also be stored as "psqlpwd" into the app settings.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L210">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_psql_remove_db" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_psql_remove_db</tt></h5> - <h6 class="helper-card-subtitle text-muted">Remove a database if it exists, and the associated user</h6> - </div> - <div id="collapse-ynh_psql_remove_db" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_psql_remove_db --db_user=user --db_name=name</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-u</code>, <code>--db_user</code> : Owner of the database</li> - - - - <li><code>-n</code>, <code>--db_name</code> : Name of the database</li> - - - </ul> - </p> - - - - - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L237">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_psql_test_if_first_run" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_psql_test_if_first_run</tt></h5> - <h6 class="helper-card-subtitle text-muted">Create a master password and set up global settings -Please always call this script in install and restore scripts</h6> - </div> - <div id="collapse-ynh_psql_test_if_first_run" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_psql_test_if_first_run</code> - - </p> - - - - - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L265">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - - -<h3 style="text-transform: uppercase; font-weight: bold">setting</h3> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_app_setting_get" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_app_setting_get</tt></h5> - <h6 class="helper-card-subtitle text-muted">Get an application setting</h6> - </div> - <div id="collapse-ynh_app_setting_get" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_app_setting_get --app=app --key=key</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-a</code>, <code>--app</code> : the application id</li> - - - - <li><code>-k</code>, <code>--key</code> : the setting to get</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/setting#L10">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_app_setting_set" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_app_setting_set</tt></h5> - <h6 class="helper-card-subtitle text-muted">Set an application setting</h6> - </div> - <div id="collapse-ynh_app_setting_set" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_app_setting_set --app=app --key=key --value=value</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-a</code>, <code>--app</code> : the application id</li> - - - - <li><code>-k</code>, <code>--key</code> : the setting name to set</li> - - - - <li><code>-v</code>, <code>--value</code> : the setting value to set</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/setting#L30">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_app_setting_delete" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_app_setting_delete</tt></h5> - <h6 class="helper-card-subtitle text-muted">Delete an application setting</h6> - </div> - <div id="collapse-ynh_app_setting_delete" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_app_setting_delete --app=app --key=key</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-a</code>, <code>--app</code> : the application id</li> - - - - <li><code>-k</code>, <code>--key</code> : the setting to delete</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/setting#L50">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_add_skipped_uris" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_add_skipped_uris</tt></h5> - <h6 class="helper-card-subtitle text-muted">Add skipped_uris urls into the config</h6> - </div> - <div id="collapse-ynh_add_skipped_uris" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_add_skipped_uris [--appid=app] --url=url1,url2 [--regex]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-a</code>, <code>--appid</code> : the application id</li> - - - - <li><code>-u</code>, <code>--url</code> : the urls to add to the sso for this app</li> - - - - <li><code>-r</code>, <code>--regex</code> : Use the key 'skipped_regex' instead of 'skipped_uris'</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - An URL set with 'skipped_uris' key will be totally ignored by the SSO,</br>which means that the access will be public and the logged-in user information will not be passed to the app.</br></br>Requires YunoHost version 3.6.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/setting#L73">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_add_unprotected_uris" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_add_unprotected_uris</tt></h5> - <h6 class="helper-card-subtitle text-muted">Add unprotected_uris urls into the config</h6> - </div> - <div id="collapse-ynh_add_unprotected_uris" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_add_unprotected_uris [--appid=app] --url=url1,url2 [--regex]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-a</code>, <code>--appid</code> : the application id</li> - - - - <li><code>-u</code>, <code>--url</code> : the urls to add to the sso for this app</li> - - - - <li><code>-r</code>, <code>--regex</code> : Use the key 'unprotected_regex' instead of 'unprotected_uris'</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - An URL set with unprotected_uris key will be accessible publicly, but if an user is logged in,</br>his information will be accessible (through HTTP headers) to the app.</br></br>Requires YunoHost version 3.6.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/setting#L104">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_add_protected_uris" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_add_protected_uris</tt></h5> - <h6 class="helper-card-subtitle text-muted">Add protected_uris urls into the config</h6> - </div> - <div id="collapse-ynh_add_protected_uris" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_add_protected_uris [--appid=app] --url=url1,url2 [--regex]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-a</code>, <code>--appid</code> : the application id</li> - - - - <li><code>-u</code>, <code>--url</code> : the urls to add to the sso for this app</li> - - - - <li><code>-r</code>, <code>--regex</code> : Use the key 'protected_regex' instead of 'protected_uris'</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - An URL set with protected_uris will be blocked by the SSO and accessible only to authenticated and authorized users.</br></br>Requires YunoHost version 3.6.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/setting#L134">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_webpath_available" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_webpath_available</tt></h5> - <h6 class="helper-card-subtitle text-muted">Check availability of a web path</h6> - </div> - <div id="collapse-ynh_webpath_available" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_webpath_available --domain=domain --path_url=path</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-d</code>, <code>--domain</code> : the domain/host of the url</li> - - - - <li><code>-p</code>, <code>--path_url</code> : the web path to check the availability of</li> - - - </ul> - </p> - - - - <p> - <strong>Example</strong>: <code class="helper-code">ynh_webpath_available --domain=some.domain.tld --path_url=/coffee</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/setting#L216">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_webpath_register" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_webpath_register</tt></h5> - <h6 class="helper-card-subtitle text-muted">Register/book a web path for an app</h6> - </div> - <div id="collapse-ynh_webpath_register" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_webpath_register --app=app --domain=domain --path_url=path</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-a</code>, <code>--app</code> : the app for which the domain should be registered</li> - - - - <li><code>-d</code>, <code>--domain</code> : the domain/host of the web path</li> - - - - <li><code>-p</code>, <code>--path_url</code> : the web path to be registered</li> - - - </ul> - </p> - - - - <p> - <strong>Example</strong>: <code class="helper-code">ynh_webpath_register --app=wordpress --domain=some.domain.tld --path_url=/coffee</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/setting#L238">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_permission_create" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_permission_create</tt></h5> - <h6 class="helper-card-subtitle text-muted">Create a new permission for the app</h6> - </div> - <div id="collapse-ynh_permission_create" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_permission_create --permission "permission" [--url "url"] [--allowed group1 group2]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>permission</code> : the name for the permission (by default a permission named "main" already exist)</li> - - - - <li><code>url</code> : (optional) URL for which access will be allowed/forbidden</li> - - - - <li><code>allowed</code> : (optional) A list of group/user to allow for the permission</li> - - - </ul> - </p> - - - - <p> - <strong>Example</strong>: <code class="helper-code">ynh_permission_create --permission admin --url /admin --allowed alice bob</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - If provided, 'url' is assumed to be relative to the app domain/path if they</br>start with '/'. For example:</br> / -> domain.tld/app</br> /admin -> domain.tld/app/admin</br> domain.tld/app/api -> domain.tld/app/api</br></br>'url' can be later treated as a regex if it starts with "re:".</br>For example:</br> re:/api/[A-Z]*$ -> domain.tld/app/api/[A-Z]*$</br> re:domain.tld/app/api/[A-Z]*$ -> domain.tld/app/api/[A-Z]*$</br></br>Requires YunoHost version 3.7.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/setting#L272">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_permission_delete" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_permission_delete</tt></h5> - <h6 class="helper-card-subtitle text-muted">Remove a permission for the app (note that when the app is removed all permission is automatically removed)</h6> - </div> - <div id="collapse-ynh_permission_delete" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_permission_delete --permission "permission"</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>permission</code> : the name for the permission (by default a permission named "main" is removed automatically when the app is removed)</li> - - - </ul> - </p> - - - - <p> - <strong>Example</strong>: <code class="helper-code">ynh_permission_delete --permission editors</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.7.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/setting#L300">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_permission_exists" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_permission_exists</tt></h5> - <h6 class="helper-card-subtitle text-muted">Check if a permission exists</h6> - </div> - <div id="collapse-ynh_permission_exists" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_permission_exists --permission=permission</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-p</code>, <code>--permission</code> : the permission to check</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.7.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/setting#L314">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_permission_url" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_permission_url</tt></h5> - <h6 class="helper-card-subtitle text-muted">Redefine the url associated to a permission</h6> - </div> - <div id="collapse-ynh_permission_url" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_permission_url --permission "permission" --url "url"</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>permission</code> : the name for the permission (by default a permission named "main" is removed automatically when the app is removed)</li> - - - - <li><code>url</code> : (optional) URL for which access will be allowed/forbidden</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.7.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/setting#L329">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_permission_update" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_permission_update</tt></h5> - <h6 class="helper-card-subtitle text-muted">Update a permission for the app</h6> - </div> - <div id="collapse-ynh_permission_update" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_permission_update --permission "permission" --add "group" ["group" ...] --remove "group" ["group" ...]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>permission</code> : the name for the permission (by default a permission named "main" already exist)</li> - - - - <li><code>add</code> : the list of group or users to enable add to the permission</li> - - - - <li><code>remove</code> : the list of group or users to remove from the permission</li> - - - </ul> - </p> - - - - <p> - <strong>Example</strong>: <code class="helper-code">ynh_permission_update --permission admin --add samdoe --remove all_users Requires YunoHost version 3.7.0 or higher.</code> - </p> - - - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/setting#L354">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - - -<h3 style="text-transform: uppercase; font-weight: bold">string</h3> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_string_random" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_string_random</tt></h5> - <h6 class="helper-card-subtitle text-muted">Generate a random string</h6> - </div> - <div id="collapse-ynh_string_random" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_string_random [--length=string_length]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-l</code>, <code>--length</code> : the string length to generate (default: 24)</li> - - - </ul> - </p> - - - - <p> - <strong>Example</strong>: <code class="helper-code">pwd=$(ynh_string_random --length=8)</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/string#L11">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_replace_string" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_replace_string</tt></h5> - <h6 class="helper-card-subtitle text-muted">Substitute/replace a string (or expression) by another in a file</h6> - </div> - <div id="collapse-ynh_replace_string" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_replace_string --match_string=match_string --replace_string=replace_string --target_file=target_file</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-m</code>, <code>--match_string</code> : String to be searched and replaced in the file</li> - - - - <li><code>-r</code>, <code>--replace_string</code> : String that will replace matches</li> - - - - <li><code>-f</code>, <code>--target_file</code> : File in which the string will be replaced.</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - As this helper is based on sed command, regular expressions and</br>references to sub-expressions can be used</br>(see sed manual page for more information)</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/string#L37">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_replace_special_string" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_replace_special_string</tt></h5> - <h6 class="helper-card-subtitle text-muted">Substitute/replace a special string by another in a file</h6> - </div> - <div id="collapse-ynh_replace_special_string" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_replace_special_string --match_string=match_string --replace_string=replace_string --target_file=target_file</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-m</code>, <code>--match_string</code> : String to be searched and replaced in the file</li> - - - - <li><code>-r</code>, <code>--replace_string</code> : String that will replace matches</li> - - - - <li><code>-t</code>, <code>--target_file</code> : File in which the string will be replaced.</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - This helper will use ynh_replace_string, but as you can use special</br>characters, you can't use some regular expressions and sub-expressions.</br></br>Requires YunoHost version 2.7.7 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/string#L66">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_sanitize_dbid" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_sanitize_dbid</tt></h5> - <h6 class="helper-card-subtitle text-muted">Sanitize a string intended to be the name of a database -(More specifically : replace - and . by _)</h6> - </div> - <div id="collapse-ynh_sanitize_dbid" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_sanitize_dbid --db_name=name</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-n</code>, <code>--db_name</code> : name to correct/sanitize</li> - - - </ul> - </p> - - - <p> - <strong>Returns</strong>: the corrected name - </p> - - - <p> - <strong>Example</strong>: <code class="helper-code">dbname=$(ynh_sanitize_dbid $app)</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/string#L97">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_normalize_url_path" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_normalize_url_path</tt></h5> - <h6 class="helper-card-subtitle text-muted">Normalize the url path syntax</h6> - </div> - <div id="collapse-ynh_normalize_url_path" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_normalize_url_path --path_url=path_to_normalize</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-p</code>, <code>--path_url</code> : URL path to normalize before using it</li> - - - </ul> - </p> - - - - - <p> - <strong>Examples</strong>:<ul> - - - <code class="helper-code"> url_path=$(ynh_normalize_url_path $url_path)</code> - - <br> - - - <code class="helper-code"> ynh_normalize_url_path example # -> /example</code> - - <br> - - - <code class="helper-code"> ynh_normalize_url_path /example # -> /example</code> - - <br> - - - <code class="helper-code"> ynh_normalize_url_path /example/ # -> /example</code> - - <br> - - - <code class="helper-code"> ynh_normalize_url_path / # -> /</code> - - <br> - - </ul> - </p> - - - <p> - <strong>Details</strong>: - <p> - Handle the slash at the beginning of path and its absence at ending</br>Return a normalized url path</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/string#L125">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - - -<h3 style="text-transform: uppercase; font-weight: bold">systemd</h3> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_add_systemd_config" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_add_systemd_config</tt></h5> - <h6 class="helper-card-subtitle text-muted">Create a dedicated systemd config</h6> - </div> - <div id="collapse-ynh_add_systemd_config" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_add_systemd_config [--service=service] [--template=template]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-s</code>, <code>--service</code> : Service name (optionnal, $app by default)</li> - - - - <li><code>-t</code>, <code>--template</code> : Name of template file (optionnal, this is 'systemd' by default, meaning ./conf/systemd.service will be used as template)</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - This will use the template ../conf/<templatename>.service</br>to generate a systemd config, by replacing the following keywords</br>with global variables that should be defined before calling</br>this helper :</br></br>__APP__ by $app</br> __FINALPATH__ by $final_path</br></br>Requires YunoHost version 2.7.2 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/systemd#L18">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_remove_systemd_config" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_remove_systemd_config</tt></h5> - <h6 class="helper-card-subtitle text-muted">Remove the dedicated systemd config</h6> - </div> - <div id="collapse-ynh_remove_systemd_config" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_remove_systemd_config [--service=service]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-s</code>, <code>--service</code> : Service name (optionnal, $app by default)</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.7.2 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/systemd#L54">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_systemd_action" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_systemd_action</tt></h5> - <h6 class="helper-card-subtitle text-muted">Start (or other actions) a service, print a log in case of failure and optionnaly wait until the service is completely started</h6> - </div> - <div id="collapse-ynh_systemd_action" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_systemd_action [-n service_name] [-a action] [ [-l "line to match"] [-p log_path] [-t timeout] [-e length] ]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-n</code>, <code>--service_name=</code> : Name of the service to start. Default : $app</li> - - - - <li><code>-a</code>, <code>--action=</code> : Action to perform with systemctl. Default: start</li> - - - - <li><code>-l</code>, <code>--line_match=</code> : Line to match - The line to find in the log to attest the service have finished to boot. If not defined it don't wait until the service is completely started. WARNING: When using --line_match, you should always add `ynh_clean_check_starting` into your `ynh_clean_setup` at the beginning of the script. Otherwise, tail will not stop in case of failure of the script. The script will then hang forever.</li> - - - - <li><code>-p</code>, <code>--log_path=</code> : Log file - Path to the log file. Default : /var/log/$app/$app.log</li> - - - - <li><code>-t</code>, <code>--timeout=</code> : Timeout - The maximum time to wait before ending the watching. Default : 300 seconds.</li> - - - - <li><code>-e</code>, <code>--length=</code> : Length of the error log : Default : 20</li> - - - </ul> - </p> - - - - - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/systemd#L81">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_clean_check_starting" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_clean_check_starting</tt></h5> - <h6 class="helper-card-subtitle text-muted">Clean temporary process and file used by ynh_check_starting -(usually used in ynh_clean_setup scripts)</h6> - </div> - <div id="collapse-ynh_clean_check_starting" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_clean_check_starting</code> - - </p> - - - - - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/systemd#L167">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - - -<h3 style="text-transform: uppercase; font-weight: bold">user</h3> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_user_exists" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_user_exists</tt></h5> - <h6 class="helper-card-subtitle text-muted">Check if a YunoHost user exists</h6> - </div> - <div id="collapse-ynh_user_exists" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_user_exists --username=username</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-u</code>, <code>--username</code> : the username to check</li> - - - </ul> - </p> - - - - <p> - <strong>Example</strong>: <code class="helper-code">ynh_user_exists 'toto' || exit 1</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/user#L11">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_user_get_info" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_user_get_info</tt></h5> - <h6 class="helper-card-subtitle text-muted">Retrieve a YunoHost user information</h6> - </div> - <div id="collapse-ynh_user_get_info" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_user_get_info --username=username --key=key</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-u</code>, <code>--username</code> : the username to retrieve info from</li> - - - - <li><code>-k</code>, <code>--key</code> : the key to retrieve</li> - - - </ul> - </p> - - - <p> - <strong>Returns</strong>: string - the key's value - </p> - - - <p> - <strong>Example</strong>: <code class="helper-code">mail=$(ynh_user_get_info 'toto' 'mail')</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/user#L32">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_user_list" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_user_list</tt></h5> - <h6 class="helper-card-subtitle text-muted">Get the list of YunoHost users</h6> - </div> - <div id="collapse-ynh_user_list" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_user_list</code> - - </p> - - - <p> - <strong>Returns</strong>: string - one username per line - </p> - - - <p> - <strong>Example</strong>: <code class="helper-code">for u in $(ynh_user_list); do ...</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.4.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/user#L52">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_system_user_exists" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_system_user_exists</tt></h5> - <h6 class="helper-card-subtitle text-muted">Check if a user exists on the system</h6> - </div> - <div id="collapse-ynh_system_user_exists" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_system_user_exists --username=username</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-u</code>, <code>--username</code> : the username to check</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/user#L63">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_system_group_exists" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_system_group_exists</tt></h5> - <h6 class="helper-card-subtitle text-muted">Check if a group exists on the system</h6> - </div> - <div id="collapse-ynh_system_group_exists" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_system_group_exists --group=group</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-g</code>, <code>--group</code> : the group to check</li> - - - </ul> - </p> - - - - - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/user#L78">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_system_user_create" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_system_user_create</tt></h5> - <h6 class="helper-card-subtitle text-muted">Create a system user</h6> - </div> - <div id="collapse-ynh_system_user_create" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_system_user_create --username=user_name [--home_dir=home_dir] [--use_shell]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-u</code>, <code>--username</code> : Name of the system user that will be create</li> - - - - <li><code>-h</code>, <code>--home_dir</code> : Path of the home dir for the user. Usually the final path of the app. If this argument is omitted, the user will be created without home</li> - - - - <li><code>-s</code>, <code>--use_shell</code> : Create a user using the default login shell if present. If this argument is omitted, the user will be created with /usr/sbin/nologin shell</li> - - - </ul> - </p> - - - - - <p> - <strong>Examples</strong>:<ul> - - - Create a nextcloud user with no home directory and /usr/sbin/nologin login shell (hence no login capability) - - <br> - - - <code class="helper-code"> ynh_system_user_create --username=nextcloud</code> - - <br> - - - Create a discourse user using /var/www/discourse as home directory and the default login shell - - <br> - - - <code class="helper-code"> ynh_system_user_create --username=discourse --home_dir=/var/www/discourse --use_shell</code> - - <br> - - </ul> - </p> - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/user#L103">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_system_user_delete" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_system_user_delete</tt></h5> - <h6 class="helper-card-subtitle text-muted">Delete a system user</h6> - </div> - <div id="collapse-ynh_system_user_delete" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_system_user_delete --username=user_name</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-u</code>, <code>--username</code> : Name of the system user that will be create</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/user#L137">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - - -<h3 style="text-transform: uppercase; font-weight: bold">utils</h3> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_abort_if_errors" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_abort_if_errors</tt></h5> - <h6 class="helper-card-subtitle text-muted">Exits if an error occurs during the execution of the script.</h6> - </div> - <div id="collapse-ynh_abort_if_errors" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_abort_if_errors</code> - - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - This configure the rest of the script execution such that, if an error occurs</br>or if an empty variable is used, the execution of the script stops</br>immediately and a call to `ynh_clean_setup` is triggered if it has been</br>defined by your script.</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L48">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_setup_source" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_setup_source</tt></h5> - <h6 class="helper-card-subtitle text-muted">Download, check integrity, uncompress and patch the source from app.src</h6> - </div> - <div id="collapse-ynh_setup_source" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_setup_source --dest_dir=dest_dir [--source_id=source_id]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-d</code>, <code>--dest_dir</code> : Directory where to setup sources</li> - - - - <li><code>-s</code>, <code>--source_id</code> : Name of the app, if the package contains more than one app</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - The file conf/app.src need to contains:</br></br>SOURCE_URL=Address to download the app archive</br>SOURCE_SUM=Control sum</br># (Optional) Program to check the integrity (sha256sum, md5sum...)</br># default: sha256</br>SOURCE_SUM_PRG=sha256</br># (Optional) Archive format</br># default: tar.gz</br>SOURCE_FORMAT=tar.gz</br># (Optional) Put false if sources are directly in the archive root</br># default: true</br># Instead of true, SOURCE_IN_SUBDIR could be the number of sub directories</br># to remove.</br>SOURCE_IN_SUBDIR=false</br># (Optionnal) Name of the local archive (offline setup support)</br># default: ${src_id}.${src_format}</br>SOURCE_FILENAME=example.tar.gz</br># (Optional) If it set as false don't extract the source.</br># (Useful to get a debian package or a python wheel.)</br># default: true</br>SOURCE_EXTRACT=(true|false)</br></br>Details:</br>This helper downloads sources from SOURCE_URL if there is no local source</br>archive in /opt/yunohost-apps-src/APP_ID/SOURCE_FILENAME</br></br>Next, it checks the integrity with "SOURCE_SUM_PRG -c --status" command.</br></br>If it's ok, the source archive will be uncompressed in $dest_dir. If the</br>SOURCE_IN_SUBDIR is true, the first level directory of the archive will be</br>removed.</br>If SOURCE_IN_SUBDIR is a numeric value, 2 for example, the 2 first level</br>directories will be removed</br></br>Finally, patches named sources/patches/${src_id}-*.patch and extra files in</br>sources/extra_files/$src_id will be applied to dest_dir</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L99">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_local_curl" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_local_curl</tt></h5> - <h6 class="helper-card-subtitle text-muted">Curl abstraction to help with POST requests to local pages (such as installation forms)</h6> - </div> - <div id="collapse-ynh_local_curl" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_local_curl "page_uri" "key1=value1" "key2=value2" ...</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>page_uri</code> : Path (relative to $path_url) of the page where POST data will be sent</li> - - - - <li><code>key1=value1</code> : (Optionnal) POST key and corresponding value</li> - - - - <li><code>key2=value2</code> : (Optionnal) Another POST key and corresponding value</li> - - - - <li><code>...</code> : (Optionnal) More POST keys and values</li> - - - </ul> - </p> - - - - <p> - <strong>Example</strong>: <code class="helper-code">ynh_local_curl "/install.php?installButton" "foo=$var1" "bar=$var2"</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - $domain and $path_url should be defined externally (and correspond to the domain.tld and the /path (of the app?))</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L213">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_render_template" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_render_template</tt></h5> - <h6 class="helper-card-subtitle text-muted">Render templates with Jinja2</h6> - </div> - <div id="collapse-ynh_render_template" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_render_template some_template output_path</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>some_template</code> : Template file to be rendered</li> - - - - <li><code>output_path</code> : The path where the output will be redirected to</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Attention : Variables should be exported before calling this helper to be</br>accessible inside templates.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L252">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_get_debian_release" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_get_debian_release</tt></h5> - <h6 class="helper-card-subtitle text-muted">Fetch the Debian release codename</h6> - </div> - <div id="collapse-ynh_get_debian_release" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_get_debian_release</code> - - </p> - - - <p> - <strong>Returns</strong>: The Debian release codename (i.e. jessie, stretch, ...) - </p> - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.7.12 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L268">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_secure_remove" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_secure_remove</tt></h5> - <h6 class="helper-card-subtitle text-muted">Remove a file or a directory securely</h6> - </div> - <div id="collapse-ynh_secure_remove" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_secure_remove --file=path_to_remove</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-f</code>, <code>--file</code> : File or directory to remove</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L298">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_get_plain_key" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_get_plain_key</tt></h5> - <h6 class="helper-card-subtitle text-muted">Extract a key from a plain command output</h6> - </div> - <div id="collapse-ynh_get_plain_key" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_get_plain_key key [subkey [subsubkey ...]]</code> - - </p> - - - <p> - <strong>Returns</strong>: string - the key's value - </p> - - - <p> - <strong>Example</strong>: <code class="helper-code">yunohost user info tata --output-as plain | ynh_get_plain_key mail</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L342">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_read_manifest" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_read_manifest</tt></h5> - <h6 class="helper-card-subtitle text-muted">Read the value of a key in a ynh manifest file</h6> - </div> - <div id="collapse-ynh_read_manifest" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_read_manifest manifest key</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-m</code>, <code>--manifest=</code> : Path of the manifest to read</li> - - - - <li><code>-k</code>, <code>--key=</code> : Name of the key to find</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.5.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L372">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_app_upstream_version" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_app_upstream_version</tt></h5> - <h6 class="helper-card-subtitle text-muted">Read the upstream version from the manifest</h6> - </div> - <div id="collapse-ynh_app_upstream_version" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_app_upstream_version [-m manifest]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-m</code>, <code>--manifest=</code> : Path of the manifest to read</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - The version number in the manifest is defined by <upstreamversion>~ynh<packageversion></br>For example : 4.3-2~ynh3</br>This include the number before ~ynh</br>In the last example it return 4.3-2</br></br>Requires YunoHost version 3.5.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L400">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_app_package_version" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_app_package_version</tt></h5> - <h6 class="helper-card-subtitle text-muted">Read package version from the manifest</h6> - </div> - <div id="collapse-ynh_app_package_version" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_app_package_version [-m manifest]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-m</code>, <code>--manifest=</code> : Path of the manifest to read</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - The version number in the manifest is defined by <upstreamversion>~ynh<packageversion></br>For example : 4.3-2~ynh3</br>This include the number after ~ynh</br>In the last example it return 3</br></br>Requires YunoHost version 3.5.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L424">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_check_app_version_changed" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_check_app_version_changed</tt></h5> - <h6 class="helper-card-subtitle text-muted">Checks the app version to upgrade with the existing app version and returns:</h6> - </div> - <div id="collapse-ynh_check_app_version_changed" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_check_app_version_changed</code> - - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - - UPGRADE_APP if the upstream app version has changed</br>- UPGRADE_PACKAGE if only the YunoHost package has changed</br></br>It stops the current script without error if the package is up-to-date</br></br>This helper should be used to avoid an upgrade of an app, or the upstream part</br>of it, when it's not needed</br></br>To force an upgrade, even if the package is up to date,</br>you have to set the variable YNH_FORCE_UPGRADE before.</br>example: sudo YNH_FORCE_UPGRADE=1 yunohost app upgrade MyApp</br></br>Requires YunoHost version 3.5.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L454">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - - -<style> -/*================================================= - Helper card -=================================================*/ -.helper-card { - width:100%; - min-height: 1px; - margin-right: 10px; - margin-left: 10px; - border: 1px solid rgba(0,0,0,.125); - border-radius: 0.5rem; - word-wrap: break-word; - margin-top: 0.5rem; - margin-bottom: 0.5rem; -} -.helper-card-body { - padding: 1.25rem; - padding-top: 0.8rem; - padding-bottom: 0; -} -.helper-code { - word-wrap: break-word; - white-space: normal; -} -/*===============================================*/ - -</style> diff --git a/packaging_apps_hooks.md b/packaging_apps_hooks.md deleted file mode 100644 index 748cc17d..00000000 --- a/packaging_apps_hooks.md +++ /dev/null @@ -1 +0,0 @@ -Unfortunately, this page only exists [in french here](packaging_apps_hooks_fr) for now. diff --git a/packaging_apps_levels.md b/packaging_apps_levels.md deleted file mode 100644 index ffde8e73..00000000 --- a/packaging_apps_levels.md +++ /dev/null @@ -1,181 +0,0 @@ -# Quality levels of YunoHost application packages - -In order to facilitate the packaging of applications by providing successive steps to achieve, each package is assigned a quality level, from 0 to 10. -A package must meet a number of criteria to reach each level. In addition, to reach a level, the package must have previously reached the previous level. - -This classification of applications by levels has 3 advantages: -- The application packaging is more fun, with clear objectives to achieve and successive steps. -- A properly packaged application is put forward more than an application that does not comply with packaging rules. -- Users can quickly see the level of an application and thus know if the package is of good quality. - -## Level summary - -**Level 0** -The application does not work. - -**Level 1** -The application installs and uninstalls correctly in some cases. - -**Level 2** -The application installs and uninstalls correctly in all common configurations. - -**Level 3** -The application can be updated. - -**Level 4** -The application can be saved and restored. - -**Level 5** -The application package code follows some syntax rules. - -**Level 6** -The application package is in the YunoHost-Apps organization. - -**Level 7** -The application package passes all integrity tests successfully. - -**Level 8** -The application package respects all packaging recommendations. This is a high quality app. - -**Level 9** -The application complies with higher packaging recommendations. Not available yet. - -**Level 10** -The application package is considered perfect! - -## Quality levels in detail: - -### Level 0 - -**The application does not install or run after installation.** - -This is the lowest level, a level 0 application is considered non-functional. - -YEP to be respected to reach level 0: -- [YEP 1.1](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-11---nommer-son-app-et-son-d%C3%A9pot---valid%C3%A9--manuel--notworking-) Name your app and repository -- [YEP 1.2](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-12---inscrire-lapp-sur-un-r%C3%A9pertoire-connu---valid%C3%A9--manuel--notworking-) Add the app to a known app list - -### Level 1 - -**The application can be installed and uninstalled correctly.** - -But exceptions are possible, if at least one installation method is functional and its removal then the application is considered functional. - -YEP to be respected to reach level 1: -- [YEP 2.2](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-22---utiliser-bash-pour-les-scripts-principaux---valid%C3%A9--auto--working-) Use bash for main scripts -- [YEP 2.5](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-25---copier-correctement-des-fichiers----brouillon--manuel--working-) Correctly copy files -- [YEP 2.7](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-27---donner-des-permissions-suffisantes-aux-instructions-bash----valid%C3%A9--auto--working-) Bash instructions: Give sufficient permissions to bash instructions -- [YEP 2.15](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-215---v%C3%A9rifier-les-param%C3%A8tres-saisies-par-lutilisateur----valid%C3%A9--manuel--official-) : Follow the application installation instructions - -### Level 2 - -**The application can be installed and uninstalled in all common configurations.** - -- Installation in subfolder. -- Installation at the root of a domain or subdomain. -- Private installation (secured by the SSO). -- Public installation. -- Multi-instance installation. -- Uninstallation under the same circumstances. - -*If an application does not allow certain installation configurations, these must be clearly indicated in the README. However, level 2 cannot be reached if an installation configuration is intentionally discarded without valid reason.* -*This does not preclude the voluntary restriction of public, private or multi-instance if it is relevant for this application.* - -YEP to be respected to reach level 2: -- [YEP 1.5](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-15---mettre-%C3%A0-jour-r%C3%A9guli%C3%A8rement-le-statut-de-lapp---brouillon--manuel--working-) : Update app status regularly -- *[YEP 2.18.2](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-2182---supporter-linstallation-sur-un-domaine----valid%C3%A9--auto--working-) : Support installation on a domain* -- *[YEP 2.18.3](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-2183---supporter-linstallation-sur-un-sous-domaine----valid%C3%A9--auto--working-) : Support installation on a subdomain* -- *[YEP 2.18.4](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-2184---supporter-linstallation-sur-un-sous-dossier----valid%C3%A9--auto--official-) : Support installation on a subfolder* -- *[YEP 4.6](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-46---g%C3%A8re-le-multi-instance----valid%C3%A9--manuel--optional-) : Manage multi-instance* - -### Level 3 - -**The application supports upgrade from an older version of the package.** - -The application must be able to be updated from a previous version of the package without causing an error. - -YEP to be respected to reach level 3: -- [YEP 2.3](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-23---sauvegarder-les-r%C3%A9ponses-lors-de-linstallation---valid%C3%A9--manuel--working-) Save answers during installation - -### Level 4 - -**The application can be backed up and restored without error on the same machine or another.** - -YEP to be respected to reach level 4: -- *[YEP 4.3](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-43---fournir-un-script-de-sauvegarde-yunohost-fonctionnel----valid%C3%A9--auto--official-) : Provide a functional YunoHost backup script* -- *[YEP 4.4](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-44---fournir-un-script-de-restauration-yunohost-fonctionnel----valid%C3%A9--auto--official-) : Provide a functional YunoHost restore script* - -### Level 5 - -**The application has no errors in [Package linter](https://github.com/YunoHost/package_linter).** - -*There may be false positives in Package linter. These situations will be handled on a case-by-case basis.* - -YEP to be respected to reach level 5: -- *[YEP 1.3](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-13---indiquer-la-licence-associ%C3%A9e-au-paquet---valid%C3%A9--auto--working-) : Specify the license associated with the package* -- *[YEP 2.1](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-21---respecter-le-format-du-manifeste---valid%C3%A9--auto--inprogress-) : Respect manifest format* -- [YEP 2.12](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-212---utiliser-les-commandes-pratiques-helpers---valid%C3%A9--auto--official-) : Use practical commands (helpers) -- [YEP 2.18.1](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-2181---lancer-le-script-dinstallation-dune-webapp-correctement----valid%C3%A9--manuel--working-) : Run the webapp installation script correctly - -### Level 6 - -**The application can be backed up and restored without error on the same machine or another.** - -YEP to be respected to reach level 6: -- [YEP 1.4](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-14---informer-sur-lintention-de-maintenir-un-paquet----brouillon--manuel--working-) : Inform about the intention to maintain a package -- [YEP 1.6](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-16---se-tenir-inform%C3%A9-sur-l%C3%A9volution-du-packaging-dapps---valid%C3%A9--manuel--official-) : As a maintainer, keep checking and being aware of the evolution of apps packaging -- *[YEP 1.7](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-17---ajouter-lapp-%C3%A0-lorganisation-yunohost-apps---valid%C3%A9--manuel--official-) : Add app to the [YunoHost-Apps organization](https://github.com/YunoHost-Apps)* -- [YEP 1.8](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-18---publier-des-demandes-de-test---valid%C3%A9--manuel--official-) : Publish test requests -- [YEP 1.9](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-19---documenter-lapp---valid%C3%A9--auto--official-) : Document app -- [YEP 1.10](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-110---garder-un-historique-de-version-propre----brouillon--manuel--official-) : Keep a clean version history -- [YEP 2.9](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-29---enlever-toutes-traces-de-lapp-lors-de-la-suppression----brouillon--manuel--working-) : Remove all traces of the app during deletion -- [YEP 3.3](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-33---faciliter-le-contr%C3%B4le-de-lint%C3%A9grit%C3%A9-des-sources----brouillon--manuel--official-) : Facilitating source integrity control -- [YEP 3.5](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-35---suivre-les-recommendations-de-la-documentation-de-lapp----valid%C3%A9--manuel--official-) : Follow the recommendations of the app documentation -- [YEP 3.6](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-36---mettre-%C3%A0-jour-les-versions-contenant-des-cve----draft--manuel--official-) : Update versions containing CVEs - -### Level 7 - -**The application has no errors in [Package check](https://github.com/YunoHost/package_check).** - -Considering the maximum number of tests possible for the application. - -YEP à respecter pour atteindre le niveau 7: -- [YEP 2.4](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-24---d%C3%A9tecter-et-g%C3%A9rer-les-erreurs---brouillon--manuel--working-) : Error detection and management -- [YEP 2.6](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-26---annuler-laction-si-les-valeurs-dentr%C3%A9es-sont-incorrectes----valid%C3%A9--manuel--working-) : Cancel action if input values are incorrect -- [YEP 2.8](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-28---modifier-correctement-une-configuration-syst%C3%A8me----brouillon--manuel--working-) : Change a system configuration correctly -- [YEP 2.10](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-210---configurer-les-logs-de-lapplication----brouillon--manuel--working-) : Configure application logs -- [YEP 2.11](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-211---utiliser-une-variable-plut%C3%B4t-que-lapp-id-directement---valid%C3%A9--manuel--official-) : Use a variable rather than the app id directly -- [YEP 2.13](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-213---traduire-le-package-en-anglais----brouillon--manuel--official-) : Translate the package into English -- [YEP 3.2](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-32---ouvrir-un-port-correctement----brouillon--manuel--working-) : Open port: Open port correctly - -### Level 8 - -**The application package respects all packaging recommendations. This is a high quality app.** - -YEP to be respected to reach level 8: -- [YEP 1.12](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-112) : Follow the template from example_ynh -- Supports change of URL -- *[YEP 2.16](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-216---v%C3%A9rifier-la-disponibilit%C3%A9-des-d%C3%A9pendances-sur-arm-x86-et-x64----valid%C3%A9--manuel--official-) : Check dependency availability on ARM, x86 and x64* -- [YEP 2.18.5](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-2185---ajouter-la-tuile-yunohost-pour-naviguer-facilement-entre-les-applications----valid%C3%A9--manuel--official-) : Add the YunoHost tile to easily navigate between applications -- [YEP 4.1](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-41---lier-au-ldap----valid%C3%A9--manuel--official-) : Link to ldap -- [YEP 4.2](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-42---lier-lauthentification-au-sso----valid%C3%A9--manuel--official-) : Bind authentication to sso -- [YEP 4.5](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-45---utiliser-les-hooks----valid%C3%A9--manuel--optional-) : Use hooks - -If an application is not available on an architecture, and it is impossible to circumvent this limitation reasonably, this limitation must be indicated in the REDME and taken into account in the installation script. The installation of the application on an unsupported architecture must be stopped before modifying the filesystem. - -### Level 9 - -**The application complies with all optional YEPs.** - -YEP to be respected to reach level 9: - -- [YEP 2.14](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-214---remplir-correctement-un-fichier-de-conf----brouillon--manuel--official-) : Fill a conf file correctly -- [YEP 2.17](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-217---prendre-en-compte-la-version-dorigine-lors-des-mises-%C3%A0-jour----valid%C3%A9--manuel--official-) : Take into account the original version during updates -- [YEP 3.4](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-34---isoler-lapp----brouillon--manuel--official-) : Isolate app -- [YEP 4.2.1](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-421---d%C3%A9connexion----valid%C3%A9--manuel--official-) : Logout - -### Level 10 - -**The application is considered perfect.** - -This ultimate level for an application can only be reached after an in-depth study of the package and by the validation of the Apps group. diff --git a/packaging_apps_trap.md b/packaging_apps_trap.md deleted file mode 100644 index e129d61c..00000000 --- a/packaging_apps_trap.md +++ /dev/null @@ -1 +0,0 @@ -Unfortunately, this page only exists [in french here](packaging_apps_trap_fr) for now. diff --git a/pages/00.home/docs.de.md b/pages/00.home/docs.de.md new file mode 100644 index 00000000..6ec4aa8a --- /dev/null +++ b/pages/00.home/docs.de.md @@ -0,0 +1,36 @@ +--- +title: Herzlich willkommen! +template: docs +taxonomy: + category: docs +routes: + default: '/docs' + aliases: + - '/' +visible: false +--- + +Dies ist die Dokumentation von [YunoHost, einem freien Betriebssystem, das die Serververwaltung vereinfachen und das Selbsthosting demokratisieren soll](/whatsyunohost). + +Weitere Informationen zum Selbsthosting, zur Installation deines eigenen YunoHost-Servers und zur Installation der ersten Apps findest du im [Administratorhandbuch](/admindoc). + +Du kannst in den [Anwendungskatalog](/apps) schauen, um die Apps anzusehen, die auf deinem Server installiert werden können (Natürlich geht das auch direkt über deine Administrationsoberfläche!). + + +Wenn du Hilfe benötigst, ist die [Community](/community) für dich da: [Chatte](/chat_rooms) mit uns oder schau in das [Forum](/community/forum)! + +[center] + +<a href="/admindoc" class="btn btn-lg btn-primary inline"><i class="fa fa-cogs"></i> Administratorhandbuch</a> +<a href="/apps" class="btn btn-lg btn-success inline"><i class="fa fa-cubes"></i> Anwendungen</a> +<a href="/community" class="btn btn-lg btn-primary" style="background: blueviolet;border-color: blueviolet;"><i class="fa fa-users"></i> Community</a> +<a href="/contribute" style="background: orange; border-color: orange;" class="btn btn-lg btn-error"><i class="fa fa-heart"></i> Beteilige dich</a> + +[/center] + + +[center] +<a href="/" class="btn btn-lg inline"><i class="fa fa-fw fa-arrow-left"></i> Zurück zur Homepage</a> +[/center] + +!!!! Um in diesem Dokument zu navigieren, kannst du die linke und rechte Pfeiltaste verwenden. Navigiere mit dem [fa=bars /] Seitenbereich oder über das [fa=search /] Suchfeld direkt zu dem gewünschten Abschnitt. Viel Spaß! diff --git a/pages/00.home/docs.fr.md b/pages/00.home/docs.fr.md new file mode 100644 index 00000000..58ab6ccb --- /dev/null +++ b/pages/00.home/docs.fr.md @@ -0,0 +1,35 @@ +--- +title: Bienvenue ! +template: docs +taxonomy: + category: docs +routes: + default: '/docs' + aliases: + - '/' +visible: false +--- + +Ce site contient la documentation de [YunoHost, un système d'exploitation libre qui vise à simplifier l'administration d'un serveur et à démocratiser l'auto-hébergement](/whatsyunohost). + +En tant que futur jardinier de votre propre serveur, commencez par visiter le [guide de l'administrateur](/admindoc) pour en savoir plus sur l'autohébergement, comment installer votre serveur, et installer vos premières applications. + +Vous pouvez explorer le [catalogue d'application](/apps) installable sur votre serveur (bien qu'il soit aussi consultable directement depuis votre interface d'administration !) + +La [communauté](/community) est là si vous avez besoin d'aide : venez discuter sur les [salons de discussions](/chat_rooms) ou posez vos questions sur le [forum](/community/forum) ! + +[center] + +<a href="/admindoc" class="btn btn-lg btn-primary inline"><i class="fa fa-cogs"></i> Guide d'administration</a> +<a href="/apps" class="btn btn-lg btn-success inline"><i class="fa fa-cubes"></i> Applications</a> +<a href="/community" class="btn btn-lg btn-primary" style="background: blueviolet;border-color: blueviolet;"><i class="fa fa-users"></i> Communauté</a> +<a href="/contribute" style="background: orange; border-color: orange;" class="btn btn-lg btn-error"><i class="fa fa-heart"></i> Contribuer</a> + +[/center] + +[center] +<a href="/" class="btn btn-lg inline"><i class="fa fa-fw fa-arrow-left"></i> Retourner à la page d'accueil du site</a> +[/center] + + +!!!! Pour naviguer dans cette documentation, vous pouvez utiliser les flèches gauches et droites. Utilisez le [fa=bars /] panneau latéral pour aller directement dans les sections qui vous intéresse ou en utilisant la [fa=search /] barre de recherche. Enjoy! diff --git a/pages/00.home/docs.md b/pages/00.home/docs.md new file mode 100644 index 00000000..3f2534c9 --- /dev/null +++ b/pages/00.home/docs.md @@ -0,0 +1,35 @@ +--- +title: Welcome! +template: docs +taxonomy: + category: docs +routes: + default: '/docs' + aliases: + - '/' +visible: false +--- + +This is the documentation for [YunoHost, a libre operating system aiming to simplify server administration and democratize self-hosting](/whatsyunohost). + +As a soon-to-be administrator of your own server, go to the [Admin guide](/admindoc) to learn more about self-hosting, how to install your YunoHost server and install your first apps. + +You can check out the [application catalog](/apps) to browse apps that can be installed on a server (though you can also explore it directly from your admin interface !) + +The [Community](/community) is here for you if you need some help : come [chat](/chat_rooms) with us or reach out on the [forum](/community/forum) ! + +[center] + +<a href="/admindoc" class="btn btn-lg btn-primary inline"><i class="fa fa-cogs"></i> Administrator's guide</a> +<a href="/apps" class="btn btn-lg btn-success inline"><i class="fa fa-cubes"></i> Applications</a> +<a href="/community" class="btn btn-lg btn-primary" style="background: blueviolet;border-color: blueviolet;"><i class="fa fa-users"></i> Community</a> +<a href="/contribute" style="background: orange; border-color: orange;" class="btn btn-lg btn-error"><i class="fa fa-heart"></i> Get involved</a> + +[/center] + + +[center] +<a href="/" class="btn btn-lg inline"><i class="fa fa-fw fa-arrow-left"></i> Go back to the homepage</a> +[/center] + +!!!! To navigate this documentation, you can use your left and right arrow keys. Browse directly to the section you want with the [fa=bars /] side panel, or using the [fa=search /] search box. Enjoy! diff --git a/selfhosting_de.md b/pages/01.administrate/01.selfhosting/selfhosting.de.md similarity index 94% rename from selfhosting_de.md rename to pages/01.administrate/01.selfhosting/selfhosting.de.md index 1574ed3a..892d5178 100644 --- a/selfhosting_de.md +++ b/pages/01.administrate/01.selfhosting/selfhosting.de.md @@ -1,5 +1,11 @@ -Self-Hosting -============ +--- +title: Self-Hosting +template: docs +taxonomy: + category: docs +routes: + default: '/selfhosting' +--- Self-Hosting ist das Hosten von Daten oder Software auf eigener IT-Infrastruktur. Ihren eigenen Server zu Hause zu haben und zu verwalten, um Ihre persönlichen Daten und Dienste selbst zu hosten, anstatt sich ausschließlich auf Dritte zu verlassen. Beispielsweise können Sie Ihren Blog selbst hosten, sodass er auf einem Computer "lebt", über den Sie die Kontrolle haben, anstatt ihn im Austausch gegen Geld, Werbung oder private Daten auf dem Computer eines anderen Benutzers (a.k.a. The Cloud) zu haben. @@ -8,10 +14,9 @@ Self-Hosting bedeutet, einen Server zu besitzen. Ein Server ist ein Computer, au Beim Self-Hosting geht es nicht darum, "Ihr Internet" sicherer zu machen, und es bietet auch keine Anonymität an sich. Stattdessen geht es darum, autonom zu sein und Ihre Dienste und Daten zu kontrollieren - was auch bedeutet, dafür verantwortlich zu sein. -Warum sollten Sie selbst hosten? ------------------------------- +## Warum sollten Sie selbst hosten? -- **Sie glauben an ein freies, offenes und dezentrales Internet.** In einem zentralisierten Internet können private Unternehmen und Behörden Personen ausspähen, analysieren und beeinflussen, indem sie diktieren, wie Sie sich miteinander verbinden, und indem sie Inhalte filtern. Yunohost wird von einer Community entwickelt, die an ein offenes und dezentrales Internet glaubt, und wir hoffen, dass Sie dies auch tun! +- **Sie glauben an ein freies, offenes und dezentrales Internet.** In einem zentralisierten Internet können private Unternehmen und Behörden Personen ausspähen, analysieren und beeinflussen, indem sie diktieren, wie Sie sich miteinander verbinden, und indem sie Inhalte filtern. YunoHost wird von einer Community entwickelt, die an ein offenes und dezentrales Internet glaubt, und wir hoffen, dass Sie dies auch tun! - **Sie möchten die Kontrolle über Ihre Daten und Dienste haben.** Ihre Bilder, Chatnachrichten, der Browserverlauf und der Text, den Sie für die Schule schreiben, haben auf dem Server eines anderen Benutzers (a.k.a. The Cloud) nichts zu suchen. Sie sind Teil Ihres Privatlebens, aber auch Teil des Lebens Ihrer Familie, Ihres Partners und so weiter. Diese Daten sollten von * Ihnen * verwaltet werden, nicht von einem zufälligen Unternehmen in den USA, dass Ihre Daten analysieren und die Ergebnisse verkaufen möchte. @@ -19,12 +24,10 @@ Warum sollten Sie selbst hosten? - **Sie möchten neue Möglichkeiten erkunden und Dinge anpassen.** Haben Sie jemals davon geträumt, einen Minecraft-Server für Ihre Freunde oder einen dauerhaften IRC- oder XMPP-Client zu betreiben? Mit Ihrem eigenen Server können Sie praktisch jedes gewünschte Programm manuell installieren, ausführen und jedes Bit anpassen. -Warum Sie vllt. *nicht* selbst hosten sollten? ------------------------------------- +## Warum Sie vllt. *nicht* selbst hosten sollten? - **Self-Hosting erfordert etwas Arbeit und Geduld.** Selbst einen Server zu betreiben, ist ein bisschen wie das anlegen eines eigenen Gartens oder der anbau von Gemüse: Es erfordert Arbeit und Geduld. Während YunoHost versucht, die harte Arbeit für Sie zu erledigen, müssen Sie sich für das Self-Hosting noch einige Zeit nehmen, um einige Dinge zu lernen und zu konfigurieren, um Ihren Server richtig einzurichten. Sie müssen auch von Zeit zu Zeit Wartungsaufgaben (wie z. B. Upgrades) ausführen oder um Support-Unterstützung bitten, wenn Probleme auftreten. - **Mit den eigenen tollen Servern geht eine große Verantwortung einher.** Der Betrieb eines Servers bedeutet, dass Sie für die von Ihnen gehosteten Daten verantwortlich sind. Niemand kann sie für Sie wiederherstellen, wenn sie verloren gehen. YunoHost bietet Sicherungsfunktionen, die Sie regelmäßig verwenden sollten, um die gewünschten Konfigurationen und Daten zu sichern. Sie sollten auch die Sicherheitsnachrichten und -empfehlungen im Auge behalten, damit Ihr Server oder Ihre kritischen Daten nicht gefährdet werden. - **Qualität und Leistung sind wahrscheinlich nicht so gut wie Premium-Services.** YunoHost (und die meisten dafür bereitgestellten Anwendungen) sind kostenlose und Open-Source-Software, die in den jeweiligen Communitys von Menschen in ihrer Freizeit und auf der Grundlage bester Bemühungen entwickelt werden. Es gibt keine absolute Garantie dafür, dass Software unter allen möglichen Umständen funktioniert. Die Leistung Ihres selbst gehosteten Servers hängt auch von dessen CPU und RAM sowie der verfügbaren Internetverbindung ab. - diff --git a/selfhosting_fr.md b/pages/01.administrate/01.selfhosting/selfhosting.fr.md similarity index 71% rename from selfhosting_fr.md rename to pages/01.administrate/01.selfhosting/selfhosting.fr.md index 0fc5c17e..c78ede8d 100644 --- a/selfhosting_fr.md +++ b/pages/01.administrate/01.selfhosting/selfhosting.fr.md @@ -1,28 +1,32 @@ -L'auto-hébergement -================== +--- +title: L'auto-hébergement +template: docs +taxonomy: + category: docs +routes: + default: '/selfhosting' +--- L'auto-hébergement est le fait d'avoir et d'administrer son propre serveur, typiquement chez soi, pour héberger soi-même ses données personnelles et des services plutôt que de se reposer exclusivement sur des tiers. Par exemple, il est possible d'auto-héberger son blog de sorte qu'il "vive" dans une machine que vous contrôlez, au lieu qu'il soit sur l'ordinateur de quelqu'un d'autre (a.k.a. le Cloud) en échange d'argent, de publicités ou de données privées. -L'auto-hébergement implique de disposer d'un serveur. Un serveur est un ordinateur qui est destiné à être accessible sur le réseau en permanence, et n'a généralement pas d'écran ni de clavier puisqu'il est administré à distance. Contrairement à une croyance répandue, les serveurs ne sont pas nécessairement des machines énormes et extrêmement puissantes: aujourd'hui, une petite carte ARM à ~30€ est adéquate pour de l'auto-hébergement. +L'auto-hébergement implique de disposer d'un serveur. Un serveur est un ordinateur qui est destiné à être accessible sur le réseau en permanence, et n'a généralement pas d'écran ni de clavier puisqu'il est administré à distance. Contrairement à une croyance répandue, les serveurs ne sont pas nécessairement des machines énormes et extrêmement puissantes : aujourd'hui, une petite carte ARM à ~30€ est adéquate pour de l'auto-hébergement. Pratiquer l'auto-hébergement ne rend pas "votre internet" plus sécurisé et ne fournit pas d'anonymat en tant que tel. L'objectif est généralement de pouvoir être autonome et au contrôle de ses services et de ses données - ce qui implique aussi d'en être responsable. -Pourquoi s'auto-héberger ? --------------------------- +## Pourquoi s'auto-héberger ? -- **Vous croyez en un internet libre, ouvert et décentralisé.** Dans un internet centralisé, les entités privées et les gouvernement peuvent espionner, analyser et influencer les personnes en dictant la façon dont elle peuvent interagir les unes avec les autres, ainsi qu'en filtrant du contenu. Yunohost est développé par une communauté qui croit en un internet ouvert et décentralisé. Nous espérons que vous aussi ! +- **Vous croyez en un internet libre, ouvert et décentralisé.** Dans un internet centralisé, les entités privées et les gouvernements peuvent espionner, analyser et influencer les personnes en dictant la façon dont elle peuvent interagir les unes avec les autres, ainsi qu'en filtrant du contenu. YunoHost est développé par une communauté qui croit en un internet ouvert et décentralisé. Nous espérons que vous aussi ! -- **Vous voulez avoir le contrôle de vos données et services.** Vos images, vos messages de chat, votre historique de navigation, et votre dissertation pour l'école n'ont rien à faire sur l'ordinateur de quelqu'un d'autre (a.k.a. le Cloud). Ces données font parties de votre vie privée, mais également de celle de votre famille, de vos amis, etc. Ces données devraient être gérées par *vous*, et non par une quelconque entreprise américaine qui cherche à analyser vos données pour revendre les résultats. +- **Vous voulez avoir le contrôle de vos données et services.** Vos images, vos messages de chat, votre historique de navigation, et votre dissertation pour l'école n'ont rien à faire sur l'ordinateur de quelqu'un d'autre (a.k.a. le Cloud). Ces données font partie de votre vie privée, mais également de celle de votre famille, de vos amis, etc. Ces données devraient être gérées par *vous*, et non par une quelconque entreprise américaine qui cherche à analyser vos données pour revendre les résultats. -- **Vous souhaitez apprendre comment fonctionnent les ordinateurs et Internet.** Opérer son propre serveur est un bon contexte pour apprendre les mécanismes de base au cœur des systèmes d'exploitations (OS) et d'Internet. Il vous faudra possiblement toucher à la ligne de commande et à des morceaux de configuration réseau et DNS. +- **Vous souhaitez apprendre comment fonctionnent les ordinateurs et Internet.** Opérer son propre serveur est un bon contexte pour apprendre les mécanismes de base au cœur des systèmes d'exploitation (OS) et d'Internet. Il vous faudra possiblement toucher à la ligne de commande et à des morceaux de configuration réseau et DNS. -- **Vous voulez explorer de nouvelles possibilités et personnaliser votre espace.** Avez-vous déjà rêvé d'avoir votre propre serveur Minecraft pour vos ami·e·s, ou un client IRC ou XMPP persistent ? Avec votre propre serveur, vous pouvez manuellement installer et faire tourner n'importe quel programme et personnaliser chaque morceau. +- **Vous voulez explorer de nouvelles possibilités et personnaliser votre espace.** Avez-vous déjà rêvé d'avoir votre propre serveur Minecraft pour vos ami·e·s, ou un client IRC ou XMPP persistant ? Avec votre propre serveur, vous pouvez manuellement installer et faire tourner n'importe quel programme et personnaliser chaque morceau. -Pourquoi ne *pas* s'auto-héberger ? ------------------------------------ +## Pourquoi ne *pas* s'auto-héberger ? - **L'auto-hébergement requiert du travail et de la patience.** S'auto-héberger est un peu comme avoir son propre jardin ou potager : cela demande du travail et de la patience. Bien que YunoHost cherche à faire tout le travail compliqué pour vous, il vous faudra tout de même prendre le temps d'apprendre et configurer quelques détails pour que votre installation marche correctement. Il vous faudra aussi gérer quelques tâches de maintenance (telles que les mises à jour) de temps en temps, et demander de l'aide si des choses ne fonctionnent pas comme prévu. - **Avec de grands serveurs viennent les grandes responsabilités.** Opérer un serveur implique d'être responsable des données que vous hébergez : personne ne pourra récupérer des données à votre place si vous les perdez. YunoHost fournit des fonctionnalités de sauvegarde qu'il est recommandé d'utiliser pour sauvegarder les configurations et données importantes. Il vous faut aussi garder un œil sur les recommandations et les nouvelles à propos de la sécurité pour que votre serveur ou vos données ne soient pas compromises. -- **La qualité et les performances ne seront probablement pas aussi bonnes que des services premium.** YunoHost (et la plupart des applications qui sont packagées) sont des logiciels libres et open-source, développés par des communautés bénévoles. Il n'y a pas de garantie absolue que ces logiciels marcheront dans toutes les circonstances possibles. Les performances de votre serveur auto-hébergé sont aussi liées au processeur, à la mémoire vive et à la connectivité internet. +- **La qualité et les performances ne seront probablement pas aussi bonnes que des services premium.** YunoHost (et la plupart des applications qui sont packagées) sont des logiciels libres et open-source, développés par des communautés bénévoles. Il n'y a pas de garantie absolue que ces logiciels fonctionneront dans toutes les circonstances possibles. Les performances de votre serveur auto-hébergé sont aussi liées au processeur, à la mémoire vive et à la connectivité internet. diff --git a/selfhosting.md b/pages/01.administrate/01.selfhosting/selfhosting.md similarity index 93% rename from selfhosting.md rename to pages/01.administrate/01.selfhosting/selfhosting.md index 1229e776..9dadb2b1 100644 --- a/selfhosting.md +++ b/pages/01.administrate/01.selfhosting/selfhosting.md @@ -1,5 +1,11 @@ -Self-hosting -============ +--- +title: Self-hosting +template: docs +taxonomy: + category: docs +routes: + default: '/selfhosting' +--- Self-hosting is the activity of having and administrating your own server, typically at home, to host your personal data and services yourself instead of relying exclusively on third-parties. For instance, you can self-host your blog, such that it 'lives' on a machine that you have control of, instead of having it on somebody else's computer (a.k.a. The Cloud) in exchange for money, advertisement or private data. @@ -7,10 +13,9 @@ Self-hosting implies owning a server. A server is a computer which is typically Self-hosting is not about making "your Internet" more secure and does not provide anonymity by itself. Instead, it is about being autonomous, and in control of your services and data - which also means being responsible for them. -Why should you host yourself ? ------------------------------- +## Why should you host yourself ? -- **You believe in a free, open and decentralized internet.** In a centralized internet, private companies and government can spy, analyze and influence people by dictating how they connect with each other, and by filtering content. Yunohost is developed by a community who believe in an open and decentralized internet, and we hope that you do, too! +- **You believe in a free, open and decentralized internet.** In a centralized internet, private companies and government can spy, analyze and influence people by dictating how they connect with each other, and by filtering content. YunoHost is developed by a community who believe in an open and decentralized internet, and we hope that you do, too! - **You want to have control of your data and services.** Your pictures, chat messages, browsing history, and that text you are writing for school, have nothing to do on somebody else's server (a.k.a. The Cloud). They are part of your private life, but also part of your family's life, your friend's life, and so on. These data should be managed by *you*, not a random company in the US who wants your data to analyze them and sell the results. @@ -18,12 +23,10 @@ Why should you host yourself ? - **You want to explore new possibilities and customize things.** Ever dreamed of running a Minecraft server for you friends, or a persistent IRC or XMPP client? With your very own server, you can manually install and run virtually any program you want, and customize every bit. -Why should you *not* host yourself ? ------------------------------------- +## Why should you *not* host yourself ? - **Self-hosting requires some work and patience.** Hosting yourself is a bit like growing your own garden or vegetables: it requires work and patience. While YunoHost aims to do all the hard work for you, self-hosting still requires that you take time to learn and configure a few things to setup your server properly. You will also need to perform maintenance tasks (such as upgrades) from time to time, or to ask for support if some things break. - **With great servers comes great responsibilities.** Operating a server means that you are responsible for the data you are hosting. Nobody will be able to recover them for you if they get lost. YunoHost provides backup features, which you should use regularly to backup the configurations and data you care about. You should also keep an eye on security news and recommendations so that your server or critical data don't get compromised. - **Quality and performance probably won't be as good as premium services.** YunoHost (and most of the applications packaged for it) are free and open-source software, developed by communities of people in their free time and on the basis of best effort. There is no absolute guarantee that software will work in every possible circumstance. The performance of your self-hosted server is also related to its CPU and RAM, and to the available internet connectivity. - diff --git a/selfhosting_ru.md b/pages/01.administrate/01.selfhosting/selfhosting.ru.md similarity index 89% rename from selfhosting_ru.md rename to pages/01.administrate/01.selfhosting/selfhosting.ru.md index 40f82c63..8453bd6c 100644 --- a/selfhosting_ru.md +++ b/pages/01.administrate/01.selfhosting/selfhosting.ru.md @@ -1,10 +1,17 @@ -#Самостоятельное развертывание (свой хостинг) +--- +title: Самостоятельное развертывание (свой хостинг) +template: docs +taxonomy: + category: docs +routes: + default: '/selfhosting' +--- #### Значение **Свой хостинг** - это сервер, расположенный у вас дома и предназначенный для размещения информации для личных нужд. #### Обязанности администратора -Свой хостинг создает для вас определенные обязанности, если вы хотите разместить на нём сайт, [e-mail](/email), а также запустить [систему мгновенных сообщений](XMPP), ваш сервер должен работать и оставаться онлайн 24/7. +Свой хостинг создает для вас определенные обязанности, если вы хотите разместить на нём сайт, [e-mail](/email), а также запустить [систему мгновенных сообщений](/XMPP), ваш сервер должен работать и оставаться онлайн 24/7. Распространенные проблемы, по причине которых сервер может быть недоступен включают в себя: отсутствие электроэнергии, потеря доступа к Интернету, итд. @@ -20,7 +27,7 @@ * Вы - единственный хозяин ваших данных и сервисов; * Возможность децентрализации и использования распределенных сетей; -<img src="/images/networks.png" width=500> + #### Другие проекты, предназначенные для самостоятельного развертывания ##### В активной разработке diff --git a/whatsyunohost_ar.md b/pages/01.administrate/02.whatisyunohost/whatsyunohost.ar.md similarity index 71% rename from whatsyunohost_ar.md rename to pages/01.administrate/02.whatisyunohost/whatsyunohost.ar.md index d1776397..dc13bdf2 100644 --- a/whatsyunohost_ar.md +++ b/pages/01.administrate/02.whatisyunohost/whatsyunohost.ar.md @@ -1,17 +1,21 @@ -#<div dir="rtl">ماذا نعني بـ واي يونوهوست YunoHost ؟</div> +--- +title: ماذا نعني بـ واي يونوهوست YunoHost +template: docs +taxonomy: + category: docs +routes: + default: '/whatsyunohost' +--- + + -<div dir="rtl"> واي يونوهوست YunoHost هو **نظام لتشغيل الخوادم** صُمِّم لتسهيل الإستضافة الذاتية لخدمات الإنترنت. -هو مُرتكز و منسجم كافة الإنسجام مع توزيعة [غنو/لينكس ديبيان](https://debian.org). -</div> - -<img src="/images/debian-logo.png" width=100> +هو مُرتكز و منسجم كافة الإنسجام مع توزيعة <a href="https://debian.org">غنو/لينكس ديبيان</a>. --- -###<div dir="rtl"> خصائصه</div> +### خصائصه -<div dir="rtl"> - متعدد المستعملين مع تكامُل LDAP - متعدد النطاقات - خدمة البريد الإلكتروني @@ -20,68 +24,59 @@ - نظام للتطبيقات - نظام للنسخ الإحتياطي - نظام لإعادة توليد الإعدادات و الخدمات -</div> - -<img src="/images/YunoHost_logo_vertical.png" width=400> --- -###<div dir="rtl"> أصل فكرة المشروع</div> +### أصل فكرة المشروع + -<div dir="rtl"> تعود نشأة فكرة مشروع واي يونوهوست YunoHost إلى شهر فيفري مِن عام 2012 بعد محادثة بدأت على هذا الشكل تقريبًا : -</div> - <blockquote><p dir="rtl">« تبًا، لقد سئِمتُ مِن إعادة إعداد خادم البريد الإلكتروني ... Beudbeud، كيف قُمتَ بإعداد خادومك الجميل حول LDAP ؟ »</p> + + <blockquote>« تبًا، لقد سئِمتُ مِن إعادة إعداد خادم البريد الإلكتروني ... Beudbeud، كيف قُمتَ بإعداد خادومك الجميل حول LDAP ؟ » <small>Kload، فيفري 2012</small></blockquote> -<div dir="rtl"> Il ne manquait en fait qu’une interface d’administration au serveur de Beudbeud pour en faire quelque chose d’exploitable, alors Kload a décidé de la développer. Finalement, après l’automatisation de quelques configurations et le packaging de quelques applications web, la première version de YunoHost était sortie. Constatant l’engouement croissant autour de YunoHost et de l’auto-hébergement en général, les développeurs et les nouveaux contributeurs ont alors décidé de prendre le cap d’une version 2, plus accessible, plus extensible, plus puissante, et qui prépare du bon café commerce équitable pour les lutins de Laponie. -</div> --- -###<div dir="rtl"> الهدف</div> -<div dir="rtl"> +### الهدف + يهدف واي يونوهوست YunoHost إلى تسهيل عملية تنصيب و تثبيت و إدارة أي خادمٍ لأكبر عدد ممكن مِن الناس و ذلك دون المساس بجودة و موثوقية البرمجيات. لم يُدَّخر أي جهد لتسهيل عملية التنصيب و الإنبساط وذلك على أكبر عدد ممكن مِن الأجهزة مهما اختلفت مميزات كل جهاز (في المنزل أو على خادوم إستضافة أو على خادوم شخصي إفتراضي) -</div> --- -###<div dir="rtl"> التسمية</div> +### التسمية -<div dir="rtl"> -**YunoHost** مُستمَدٌّ مِن لُغة الإنترنت العاميّة « Y U NO Host » و بالمعنى التقريبي « لماذا لا تستضيف نفسك بنفسك ». [ميم الإنترنت](https://ar.m.wikipedia.org/wiki/%D9%85%D9%8A%D9%85_%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA) الذي يصف المعنى بالتقريب هو : -<div class="text-center"><img style="border-radius: 5px; box-shadow: 0 5px 15px rgba(0,0,0,0.15);" src="/images/dude_yunohost.jpg"></div> -</div> +**YunoHost** مُستمَدٌّ مِن لُغة الإنترنت العاميّة « Y U NO Host » و بالمعنى التقريبي « لماذا لا تستضيف نفسك بنفسك ». <a href="https://ar.m.wikipedia.org/wiki/%D9%85%D9%8A%D9%85_%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA">ميم الإنترنت</a> الذي يصف المعنى بالتقريب هو : + --- -###<div dir="rtl"> التطوير </div> +### التطوير YunoHost est développé pour être le plus **simple** et le moins intrusif possible pour garder la compatibilité avec Debian. Il propose uniquement un ensemble de configurations automatiques et opère via des interfaces accessibles. Le tout est bien entendu **entièrement libre**. La philosophie de l’[الإستضافة الذاتية](/selfhosting) étant à nos yeux incompatible avec tout autre modèle de développement logiciel. -لا تتردّدوا في زيارة صفحة « [ساهموا](/contribute) ». -</div> +لا تتردّدوا في زيارة صفحة « <a href="/contribute">ساهموا</a>». --- -###<div dir="rtl"> الأمان</div> +### الأمان + +لقد بُذِلت كل المجهودات مِن أجل تأمين واي يونوهوست YunoHost و **تعمية و تشفير البروتوكولات** . بإمكانكم الإطلاع على الشرح بتفاصيليه <a href="/security">هنا</a>. -لقد بُذِلت كل المجهودات مِن أجل تأمين واي يونوهوست YunoHost و **تعمية و تشفير البروتوكولات** . بإمكانكم الإطلاع على الشرح بتفاصيليه [هنا](/security). -</div> --- -###<div dir="rtl"> واي يونوهوست YunoHost ليس +### واي يونوهوست YunoHost ليس Même si YunoHost est multi-domaine et multi-utilisateur, il reste **inapproprié pour un usage mutualisé**. Premièrement parce que le logiciel est trop jeune, donc non-testé et non-optimisé pour être mis en production pour des centaines d’utilisateurs en même temps. Et quand bien même, ce n’est pas le chemin que l’on souhaite faire suivre à YunoHost. La virtualisation se démocratise, et c’est une façon bien plus étanche et sécurisée de faire de la mutualisation. Vous pouvez héberger vos amis, votre famille ou votre entreprise sans problème, mais vous devez **avoir confiance** en vos utilisateurs, et ils doivent de la même façon avoir confiance en vous. Si vous souhaitez tout de même fournir des services YunoHost à des inconnus, **un VPS entier par utilisateur** sera la meilleure solution. -</div> + diff --git a/pages/01.administrate/02.whatisyunohost/whatsyunohost.de.md b/pages/01.administrate/02.whatisyunohost/whatsyunohost.de.md new file mode 100644 index 00000000..6ab27348 --- /dev/null +++ b/pages/01.administrate/02.whatisyunohost/whatsyunohost.de.md @@ -0,0 +1,56 @@ +--- +title: Was ist YunoHost? +template: docs +taxonomy: + category: docs +routes: + default: '/whatsyunohost' +--- + + + +YunoHost ist ein **Betriebssystem**, das auf die einfachste Verwaltung eines **Servers** abzielt und daher das [Self-Hosting](/selfhosting) demokratisiert, wobei sichergestellt wird, dass es zuverlässig, sicher, ethisch einwandfrei und leichtgewichtig bleibt. Es ist ein Copylefted-Libre-Softwareprojekt, das ausschließlich von Freiwilligen betrieben wird. Technisch gesehen kann es als eine Distribution angesehen werden, die auf [Debian GNU/Linux](https://debian.org) basiert und auf [vielen Arten von Hardware](/install) installiert werden kann. + +## Features + +-  Basierend auf Debian ; +-  Verwalten Sie Ihren Server über eine **benutzerfreundliche Weboberfläche** ; +-  Bereitstellen von **Apps mit nur wenigen Klicks** ; +-  Verwalten Sie **Benutzer** <small>(basierend auf LDAP)</small> ; +-  Verwalten Sie Ihre **Domainnamen** ; +-  Erstellen und Wiederherstellen von **Backups** ; +-  Stellen Sie über das **Benutzerportal** <small>(NGINX, SSOwat)</small> gleichzeitig eine Verbindung zu allen Apps her ; +-  Enthält einen **vollständigen E-Mail-Stack** <small>(Postfix, Dovecot, Rspamd, DKIM)</small> ; +-  … sowie **einen Instant Messaging Server** <small>(XMPP)</small> ; +-  Verwaltet **SSL-Zertifikate** <small>(basierend auf Let's Encrypt)</small> ; +-  … und **Sicherheitssysteme** <small>(fail2ban, yunohost-firewall)</small> ; + +## Ursprung + +YunoHost wurde im Februar 2012 aus folgender Situation heraus erstellt: + + <blockquote><p>"Scheiße, ich bin zu faul, um meinen Mailserver neu zu konfigurieren ... Beudbeud, wie hast Du deinen kleinen Server mit LDAP zum Laufen gebracht?"</p><small> Kload, Februar 2012</small></blockquote> + +Alles, was benötigt wurde, war eine Administrationsoberfläche für Beudbeud's Server, um etwas nutzbar zu machen, also entschied sich Kload, eine zu entwickeln. Schließlich wurde YunoHost v1, nach der Automatisierung mehrerer Konfigurationen und der Paketierung in einigen Webanwendungen, fertiggestellt. + +Angesichts der wachsenden Begeisterung für YunoHost und für das Selbst-Hosting im Allgemeinen beschlossen die ursprünglichen Entwickler zusammen mit neuen Mitarbeitern, mit der Arbeit an Version 2 zu beginnen, einer erweiterbaren, leistungsfähigeren, benutzerfreundlicheren und damit einfacheren Version eine schöne Tasse Fairtrade-Kaffee für die Elfen von Lappland. + +Der Name **YunoHost** stammt aus dem Jargon "Y U NO Host". Das [Internet meme](https://en.wikipedia.org/wiki/Internet_meme) sollte dies veranschaulichen: + + +## Was YunoHost nicht ist? + +Selbst wenn YunoHost mehrere Domains und mehrere Benutzer verwalten kann, ist es **nicht als ein mutualisiertes System gedacht**. + +Erstens ist die Software noch sehr jung, nicht auf ihre Skalierbarkeit getestet und daher wahrscheinlich nicht gut genug optimiert für Hunderte von Benutzern gleichzeitig. Vor diesem Hintergrund möchten wir die Software nicht in diese Richtung lenken. Die Virtualisierung demokratisiert sich und ihre Verwendung wird empfohlen, da sie eine wasserdichtere Methode zur Erzielung von Gegenseitigkeit darstellt als ein "Full-Stack"-System wie YunoHost. + +Sie können Ihre Freunde, Ihre Familie und Ihr Unternehmen sicher und problemlos aufnehmen, aber Sie müssen **Ihren Benutzern vertrauen**, und diese müssen vor allem Ihnen vertrauen. Wenn Sie ohnehin YunoHost-Dienste für unbekannte Personen bereitstellen möchten, ist ein vollständiger VPS pro Benutzer in Ordnung, und wir glauben, dass dies ein besserer Weg ist. + +## Artworks + +Schwarz und Weiss YunoHost PNG logo by ToZz (400 × 400 px): + + + + +Licence: CC-BY-SA 4.0 diff --git a/pages/01.administrate/02.whatisyunohost/whatsyunohost.es.md b/pages/01.administrate/02.whatisyunohost/whatsyunohost.es.md new file mode 100644 index 00000000..417f9676 --- /dev/null +++ b/pages/01.administrate/02.whatisyunohost/whatsyunohost.es.md @@ -0,0 +1,57 @@ +--- +title: Qué es YunoHost? +template: docs +taxonomy: + category: docs +routes: + default: '/whatsyunohost' +--- + + + +YunoHost es un **sistema operativo** que persigue simplificar la administración de un **servidor** para democratizar el [autoalojamiento](/selfhosting), asegurando que se mantiene fiable, seguro, ético y ligero. Es un proyecto de software libre copyleft mantenido exclusivamente por voluntarios. Se puede considerar técnicamente como una distribución basada en [Debian GNU/Linux](https://debian.org) y se puede instalar en [muchos tipos de hardware](/install). + +## Características + +-  Basado en Debian ; +-  Administra tu servidor mediante un **interfaz web amigable** ; +-  Despliega **apps en sólo unos pocos clics** ; +-  Administra **usuarios** <small>(con soporte en LDAP)</small>; +-  Administra **nombres de dominio** ; +-  Crea y restaura **copias de respaldo** ; +-  Conecta simultáneamente a todas las apps mediante el **portal del usuario** <small>(NGINX, SSOwat)</small> ; +-  Incluye una **instalación completa de correo electrónico** <small>(Postfix, Dovecot, Rspamd, DKIM)</small> ; +-  … así como **un servidor de mensajería instanea** <small>(XMPP)</small> ; +-  Administra **certificados SSL** <small>(apoyándose en Let's Encrypt)</small> ; +-  … y **sistemas de seguridad** <small>(fail2ban, yunohost-firewall)</small> ; + +## Origen + +YunoHost se creó en Febrero de 2012 tras algo así: + + <blockquote><p>"¡Mierda, soy muy vago para reconfigurar mi servidor de correo!… Beudbeud, ¿Cómo hiciste para conectar tu pequeño servidor a LDAP?"</p> +<small>Kload, Febrero de 2012</small></blockquote> + +Todo lo que se necesitaba para hacer algo útil era un interfaz de admin para el servidor de Beudbeud, así que Kload decidió desarrollar uno. Finalmente, tras automatizar varias configuraciones y empaquetar algunas apps web, YunoHost v1 quedó terminado. + +Notando un entusiasmo creciente alrededor de YunoHost y el autoalojamiento en general, los desarrolladores originales junto con nuevos participantes decidieron comenzar a trabajar en la versión 2, más extensible, potente, fácil de usar, y ya de paso preparar una taza de café de comercio justo para los elfos de Laponia. + +El nombre **YunoHost** viene de la jerga "Y U NO Host". El [meme de Internet ](https://en.wikipedia.org/wiki/Internet_meme) debería ilustrarlo: + + +## ¿Qué no es YunoHost? + +Incluso aunque YunoHost puede manejar multiples dominios y multiples usuarios, **no está diseñado para ser un sistema mancomunado**. + +Primero, el software es demasiado joven, no está probado a gran escala y por tanto probáblemente tampoco suficientemente optimizado para centenares de usuarios a la vez. Dicho esto, no queremos llevar al software en esa dirección. La virtualización se democratiza y se recomienda usarla ya que es un modo más impermeable de lograr mutualización que un sistema "monolítico" como YunoHost. + +Puedes alojar a tus amistades, tu familia y a tu compañía con facilidad y seguridad, pero tienes que **confiar en tus usarios**, y sobre todo ellos tienen que confiar en tí. Si aún así quieres proveer servicios YunoHost a desconocidos, creemos que es mejor un VPS por usuario. + +## Arte + +PNG con el logotipo de YunoHost en blanco y negro por ToZz (400 × 400 px): + + + + +Licencia: CC-BY-SA 4.0 diff --git a/whatsyunohost_fr.md b/pages/01.administrate/02.whatisyunohost/whatsyunohost.fr.md similarity index 54% rename from whatsyunohost_fr.md rename to pages/01.administrate/02.whatisyunohost/whatsyunohost.fr.md index 320aba9c..c140cb52 100644 --- a/whatsyunohost_fr.md +++ b/pages/01.administrate/02.whatisyunohost/whatsyunohost.fr.md @@ -1,27 +1,31 @@ -Qu'est-ce que YunoHost ? -======================== +--- +title: Qu'est-ce que YunoHost ? +template: docs +taxonomy: + category: docs +routes: + default: '/whatsyunohost' +--- -<img src="/images/YunoHost_logo_vertical.png" width=400> + YunoHost est un **système d’exploitation** qui vise à simplifier autant que possible l'administration d'un **serveur** pour ainsi démocratiser [l’auto-hébergement](/selfhosting) tout en restant fiable, sécurisé, éthique et léger. C'est un projet de logiciel libre maintenu exclusivement par des bénévoles. Techniquement, il peut être vu comme une distribution basée sur [Debian GNU/Linux](https://debian.org) et peut s'installer sur [de nombreux types de matériel](/install). -Fonctionnalités ---------------- +## Fonctionnalités -- <img src="/images/icon-debian.png" width=32 style="margin-right:5px"> basé sur Debian ; -- <img src="/images/icon-tools.png" width=32 style="margin-right:5px"> administration via une **interface web simple et claire** ; -- <img src="/images/icon-package.png" width=32 style="margin-right:5px"> déployez des **applications en quelques clics** ; -- <img src="/images/icon-users.png" width=32 style="margin-right:5px"> ajoutez des **utilisateurs** <small>(gérés via un annuaire LDAP)</small> ; -- <img src="/images/icon-globe.png" width=32 style="margin-right:5px"> gérez des **noms de domaine** ; -- <img src="/images/icon-medic.png" width=32 style="margin-right:5px"> créez et restaurez des **sauvegardes** ; -- <img src="/images/icon-door.png" width=32 style="margin-right:5px"> connexion simultanée à toutes les apps via un **portail utilisateur** <small>(nginx, SSOwat)</small> ; -- <img src="/images/icon-mail.png" width=32 style="margin-right:5px"> fourni avec un **serveur mail complet** <small>(Postfix, Dovecot, Rspamd, DKIM)</small> ; -- <img src="/images/icon-messaging.png" width=32 style="margin-right:5px"> ... ainsi qu'un **serveur de messagerie instantanée** <small>(XMPP)</small> ; -- <img src="/images/icon-lock.png" width=32 style="margin-right:5px"> gères les **certificats SSL** <small>(basé sur Let's Encrypt)</small> ; -- <img src="/images/icon-shield.png" width=32 style="margin-right:5px"> ... et des **systèmes de sécurité** <small>(fail2ban, yunohost-firewall)</small> ; +-  basé sur Debian ; +-  administration via une **interface web simple et claire** ; +-  déployez des **applications en quelques clics** ; +-  ajoutez des **utilisateurs** <small>(gérés via un annuaire LDAP)</small> ; +-  gérez des **noms de domaine** ; +-  créez et restaurez des **sauvegardes** ; +-  connexion simultanée à toutes les apps via un **portail utilisateur** <small>(nginx, SSOwat)</small> ; +-  fourni avec un **serveur mail complet** <small>(Postfix, Dovecot, Rspamd, DKIM)</small> ; +-  ... ainsi qu'un **serveur de messagerie instantanée** <small>(XMPP)</small> ; +-  gère les **certificats SSL** <small>(basé sur Let's Encrypt)</small> ; +-  ... et des **systèmes de sécurité** <small>(Fail2Ban, yunohost-firewall)</small> ; -Origine -------- +## Origine YunoHost est un projet né en février 2012 à la suite d’à peu près ça : @@ -33,10 +37,9 @@ Il ne manquait en fait qu’une interface d’administration au serveur de Beudb Constatant l’engouement croissant autour de YunoHost et de l’auto-hébergement en général, les développeurs et les nouveaux contributeurs ont alors décidé de prendre le cap d’une version 2, plus accessible, plus extensible, plus puissante, et qui prépare du bon café commerce équitable pour les lutins de Laponie. Le nom **YunoHost** vient de l’argot Internet anglais « Y U NO Host » signifiant approximativement « Pourquoi toi ne pas héberger ». Le [mème Internet](http://fr.wikipedia.org/wiki/M%C3%A8me_Internet) qui l’illustre est à peu près celui-ci : -<div class="text-center"><img style="border-radius: 5px; box-shadow: 0 5px 15px rgba(0,0,0,0.15);" src="/images/dude_yunohost.jpg"></div> + -Qu’est-ce que YunoHost n’est pas ? ----------------------------------- +## Qu’est-ce que YunoHost n’est pas ? Même si YunoHost est multi-domaine et multi-utilisateur, il reste **inapproprié pour un usage mutualisé**. @@ -44,15 +47,11 @@ Premièrement parce que le logiciel est trop jeune, donc non-testé et non-optim Vous pouvez héberger vos amis, votre famille ou votre entreprise sans problème, mais vous devez **avoir confiance** en vos utilisateurs, et ils doivent de la même façon avoir confiance en vous. Si vous souhaitez tout de même fournir des services YunoHost à des inconnus, **un VPS entier par utilisateur** sera la meilleure solution. -Logo ----- +## Logo -Logo Yunohost noir et blanc réalisé par ToZz (400 × 400 px) : +Logo YunoHost noir et blanc réalisé par ToZz (400 × 400 px) : -<a href="/images/ynh_logo_black_300dpi.png"><img src="/images/ynh_logo_black_300dpi.png" width=220></a> - -<a href="/images/ynh_logo_white_300dpi.png"><img src="/images/ynh_logo_white_300dpi.png" width=220></a> - -Cliquer pour télécharger. +[](image://ynh_logo_black_300dpi.png) +[](image://ynh_logo_white_300dpi.png) Licence: CC-BY-SA 4.0 diff --git a/pages/01.administrate/02.whatisyunohost/whatsyunohost.md b/pages/01.administrate/02.whatisyunohost/whatsyunohost.md new file mode 100644 index 00000000..f4ba7e3f --- /dev/null +++ b/pages/01.administrate/02.whatisyunohost/whatsyunohost.md @@ -0,0 +1,57 @@ +--- +title: What is YunoHost? +template: docs +taxonomy: + category: docs +routes: + default: '/whatsyunohost' +--- + + + +YunoHost is an **operating system** aiming for the simplest administration of a **server**, and therefore democratize [self-hosting](/selfhosting), while making sure it stays reliable, secure, ethical and lightweight. It is a copylefted libre software project maintained exclusively by volunteers. Technically, it can be seen as a distribution based on [Debian GNU/Linux](https://debian.org) and can be installed on [many kinds of hardware](/install). + +## Features + +-  Based on Debian; +-  Administrate your server through a **friendly web interface** ; +-  Deploy **apps in just a few clicks**; +-  Manage **users** <small>(based on LDAP)</small>; +-  Manage **domain names**; +-  Create and restore **backups**; +-  Connect to all apps simultaneously through the **user portal** <small>(NGINX, SSOwat)</small>; +-  Includes a **full e-mail stack** <small>(Postfix, Dovecot, Rspamd, DKIM)</small>; +- ... as well as **an instant messaging server** <small>(XMPP)</small>; +-  Manages **SSL certificates** <small>(based on Let's Encrypt)</small> ; +- ... and **security systems** <small>(Fail2ban, yunohost-firewall)</small>; + +## Origin + +YunoHost was created in February 2012 after something like this: + +<blockquote><p>"Shit, I'm too lazy to reconfigure my mail server... Beudbeud, how were you able to get your little server running with LDAP?"</p> +<small>Kload, February 2012</small></blockquote> + +All that was needed was an admin interface for Beudbeud's server to make something usable, so Kload decided to develop one. Finally, after automating several configs and packaging in some web apps, YunoHost v1 was finished. + +Noting the growing enthusiasm around YunoHost and around self-hosting in general, the original developers along with new contributors decided to start work on version 2, a more extensible, more powerful, more easy-to-use, and at that, one that makes a nice cup of fair-trade coffee for the elves of Lapland. + +The name **YunoHost** comes from the jargon "Y U NO Host". The [Internet meme](https://en.wikipedia.org/wiki/Internet_meme) should illustrate it: + + +## What YunoHost is not? + +Even if YunoHost can handle multiple domains and multiple users, it is **not meant to be a mutualized system**. + +First, the software is too young, not tested at scale and thus probably not optimized well enough for hundreds of users at the same time. With that said, we do not want to lead the software in that direction. Virtualization democratizes, and its usage is recommended since it is a more watertight way to achieve mutualization than a "full-stack" system like YunoHost. + +You can host your friends, your family and your company safely and with ease, but you must **trust your users**, and they must trust you above all. If you want to provide YunoHost services for unknown persons anyway, a full VPS per user will be just fine, and we believe a better way to go. + +## Artworks + +Black and white YunoHost PNG logo by ToZz (400 × 400 px): + + + + +Licence: CC-BY-SA 4.0 diff --git a/pages/01.administrate/03.tryyunohost/try.ar.md b/pages/01.administrate/03.tryyunohost/try.ar.md new file mode 100644 index 00000000..3ee773d8 --- /dev/null +++ b/pages/01.administrate/03.tryyunohost/try.ar.md @@ -0,0 +1,24 @@ +--- +title: تجريب YunoHost +template: docs +taxonomy: + category: docs +routes: + default: '/try' +--- + +! **ملاحظة :** يمكن لهذا السيرفر التجريبي أن يتوقف من وقت إلى آخر. + +[center] +[columns] +[[fa=user /] واجهة المستخدم](https://demo.yunohost.org/?target=_blank&classes=btn,btn-lg,btn-success) +إسم المستخدم : demo +كلمة السر : demo + +[[fa=cog /] واجهة الإدارة](https://demo.yunohost.org/yunohost/admin/?target=_blank&classes=btn,btn-lg,btn-primary) +كلمة السر : demo + +[/columns] +[/center] + +!!!! **تم توفير الخادم التجريبي بفضل [Gitoyen](https://www.gitoyen.net?target=_blank) [fa=heart /]** diff --git a/pages/01.administrate/03.tryyunohost/try.ca.md b/pages/01.administrate/03.tryyunohost/try.ca.md new file mode 100644 index 00000000..2f285899 --- /dev/null +++ b/pages/01.administrate/03.tryyunohost/try.ca.md @@ -0,0 +1,24 @@ +--- +title: Prova YunoHost +template: docs +taxonomy: + category: docs +routes: + default: '/try' +--- + +! **Nota:** Aquest és un servidor de demostració, podria estar caigut de tant en tant. + +[center] +[columns] +[[fa=user /] Interfície d'usuària](https://demo.yunohost.org/?target=_blank&classes=btn,btn-lg,btn-success) +Nom d'usuària: demo +Contrasenya: demo + +[[fa=cog /] Interfície d'administració](https://demo.yunohost.org/yunohost/admin/?target=_blank&classes=btn,btn-lg,btn-primary) +Contrasenya: demo + +[/columns] +[/center] + +!!!! **Servidor de demostració amablement ofert per [Gitoyen](https://www.gitoyen.net?target=_blank) [fa=heart /]** diff --git a/pages/01.administrate/03.tryyunohost/try.de.md b/pages/01.administrate/03.tryyunohost/try.de.md new file mode 100644 index 00000000..fbcfb2a1 --- /dev/null +++ b/pages/01.administrate/03.tryyunohost/try.de.md @@ -0,0 +1,24 @@ +--- +title: YunoHost ausprobieren +template: docs +taxonomy: + category: docs +routes: + default: '/try' +--- + +! **Hinweis:** Dieser Demo-Server könnte zeitweilig nicht erreichbar sein. + +[center] +[columns] +[[fa=user /] Anwendungen](https://demo.yunohost.org/?target=_blank&classes=btn,btn-lg,btn-success) +Username: demo +Password: demo + +[[fa=cog /] Verwaltung](https://demo.yunohost.org/yunohost/admin/?target=_blank&classes=btn,btn-lg,btn-primary) +Password: demo + +[/columns] +[/center] + +!!!! **Demo-Server freundlicherweise zur Verfügung gestellt von [Gitoyen](https://www.gitoyen.net?target=_blank) [fa=heart /]** diff --git a/pages/01.administrate/03.tryyunohost/try.es.md b/pages/01.administrate/03.tryyunohost/try.es.md new file mode 100644 index 00000000..b6a7d411 --- /dev/null +++ b/pages/01.administrate/03.tryyunohost/try.es.md @@ -0,0 +1,24 @@ +--- +title: Probar YunoHost +template: docs +taxonomy: + category: docs +routes: + default: '/try' +--- + +! **Nota :** Este demo puede dejar de functionar de vez en cuando. + +[center] +[columns] +[[fa=user /] Interfaz de usuario](https://demo.yunohost.org/?target=_blank&classes=btn,btn-lg,btn-success) +Usuario : demo +Contraseña : demo + +[[fa=cog /] Interfaz de administración](https://demo.yunohost.org/yunohost/admin/?target=_blank&classes=btn,btn-lg,btn-primary) +Contraseña : demo + +[/columns] +[/center] + +!!!! **El servidor de demo es ofrecido generosamente por [Gitoyen](https://www.gitoyen.net?target=_blank) [fa=heart /]** diff --git a/pages/01.administrate/03.tryyunohost/try.fr.md b/pages/01.administrate/03.tryyunohost/try.fr.md new file mode 100644 index 00000000..7d81bedf --- /dev/null +++ b/pages/01.administrate/03.tryyunohost/try.fr.md @@ -0,0 +1,24 @@ +--- +title: Essayer YunoHost +template: docs +taxonomy: + category: docs +routes: + default: '/try' +--- + +! **Note :** Cette démo peut cesser de fonctionner de temps en temps, mais au moins vous pouvez tester, et ça c’est vraiment chouette :) + +[center] +[columns] +[[fa=user /] Interface utilisateur](https://demo.yunohost.org/?target=_blank&classes=btn,btn-lg,btn-success) +Utilisateur : demo +Mot de passe : demo + +[[fa=cog /] Interface d’administration](https://demo.yunohost.org/yunohost/admin/?target=_blank&classes=btn,btn-lg,btn-primary) +Mot de passe : demo + +[/columns] +[/center] + +!!!! **Le serveur de démo est fourni généreusement par [Gitoyen](https://www.gitoyen.net?target=_blank) [fa=heart /]** diff --git a/pages/01.administrate/03.tryyunohost/try.it.md b/pages/01.administrate/03.tryyunohost/try.it.md new file mode 100644 index 00000000..916e4770 --- /dev/null +++ b/pages/01.administrate/03.tryyunohost/try.it.md @@ -0,0 +1,24 @@ +--- +title: Prova YunoHost +template: docs +taxonomy: + category: docs +routes: + default: '/try' +--- + +! **Nota:** A volte questo server demo può essere irraggiungibile + +[center] +[columns] +[[fa=user /] Interfaccia utente](https://demo.yunohost.org/?target=_blank&classes=btn,btn-lg,btn-success) +Nome utente: demo +Password: demo + +[[fa=cog /] Interfaccia amministrazione](https://demo.yunohost.org/yunohost/admin/?target=_blank&classes=btn,btn-lg,btn-primary) +Password: demo + +[/columns] +[/center] + +!!!! **Il server demo è gentilmente fornito da [Gitoyen](https://www.gitoyen.net?target=_blank) [fa=heart /]** \ No newline at end of file diff --git a/pages/01.administrate/03.tryyunohost/try.md b/pages/01.administrate/03.tryyunohost/try.md new file mode 100644 index 00000000..0496de0b --- /dev/null +++ b/pages/01.administrate/03.tryyunohost/try.md @@ -0,0 +1,24 @@ +--- +title: Try YunoHost +template: docs +taxonomy: + category: docs +routes: + default: '/try' +--- + +! This demo server could be down from time to time, but at least you can test and that's really cool :) + +[center] +[columns] +[[fa=user /] User interface](https://demo.yunohost.org/?target=_blank&classes=btn,btn-lg,btn-success) +Username: demo +Password: demo + +[[fa=cog /] Administration interface](https://demo.yunohost.org/yunohost/admin/?target=_blank&classes=btn,btn-lg,btn-primary) +Password: demo + +[/columns] +[/center] + +!!!! **Demo server gracefully provided by [Gitoyen](https://www.gitoyen.net?target=_blank) [fa=heart /]** diff --git a/howtohostyourself_de.md b/pages/01.administrate/04.howtohostyourself/howtohostyourself.de.md similarity index 93% rename from howtohostyourself_de.md rename to pages/01.administrate/04.howtohostyourself/howtohostyourself.de.md index d764b8e3..24a513e4 100644 --- a/howtohostyourself_de.md +++ b/pages/01.administrate/04.howtohostyourself/howtohostyourself.de.md @@ -1,4 +1,11 @@ -# So hosten Sie selbst ? +--- +title: So hosten Sie selbst ? +template: docs +taxonomy: + category: docs +routes: + default: '/howtohostyourself' +--- Sie können zu Hause (auf einem kleinen Computer) oder auf einem Remote-Server hosten. Jede Lösung hat ihre Vor- und Nachteile: @@ -7,7 +14,7 @@ Sie können zu Hause (auf einem kleinen Computer) oder auf einem Remote-Server h Sie können zu Hause mit einem Einplatinencomputer oder einem überarbeiteten regulären Computer, der mit Ihrem Heimrouter verbunden ist, hosten. - **Pros** : Sie haben die physische Kontrolle über die Maschine und müssen nur die Hardware kaufen; -- **Cons** : Sie müssen [Ihre Internet-Router manuell konfigurieren](isp_box_config) und [sind möglicherweise von Ihrem Internet-Service-Provider eingeschränkt](isp). +- **Cons** : Sie müssen [Ihre Internet-Router manuell konfigurieren](/isp_box_config) und [sind möglicherweise von Ihrem Internet-Service-Provider eingeschränkt](/isp). ### Zu Hause hinter einem VPN @@ -25,7 +32,7 @@ Sie können einen virtuellen privaten Server oder eine dedizierte Maschine von [ ### Summary -<table class="table"> +<table> <thead> <tr> <th></th> @@ -60,7 +67,7 @@ Sie können einen virtuellen privaten Server oder eine dedizierte Maschine von [ </tr> <tr> <td style="text-align:center;">Mögliche ISP-Einschränkungen</td> - <td style="text-align:center;" class="danger">Ja <br><small>(siehe [hier](/isp))</small></td> + <td style="text-align:center;" class="danger">Ja <br><small>(siehe <a href="/isp">hier</a>)</small></td> <td style="text-align:center;" class="success">Per VPN umgangen</td> <td style="text-align:center;" class="success">Normalerweise nein</td> </tr> diff --git a/howtohostyourself_fr.md b/pages/01.administrate/04.howtohostyourself/howtohostyourself.fr.md similarity index 86% rename from howtohostyourself_fr.md rename to pages/01.administrate/04.howtohostyourself/howtohostyourself.fr.md index 97360a88..632b8ee2 100644 --- a/howtohostyourself_fr.md +++ b/pages/01.administrate/04.howtohostyourself/howtohostyourself.fr.md @@ -1,4 +1,11 @@ -# Choisir son mode d'autohébergement +--- +title: Choisir son mode d'autohébergement +template: docs +taxonomy: + category: docs +routes: + default: '/howtohostyourself' +--- Vous pouvez vous auto-héberger à la maison (sur un petit ordinateur), ou sur un serveur distant. Chaque solution a ses avantages et inconvénients : @@ -7,11 +14,11 @@ Vous pouvez vous auto-héberger à la maison (sur un petit ordinateur), ou sur u Vous pouvez vous héberger chez vous, sur une carte ARM ou un vieil ordinateur, connecté à votre box internet. - **Avantages** : vous aurez un contrôle physique sur la machine et avez seulement besoin d'acheter le matériel initial ; -- **Inconvénients** : il vous faudra [configurer manuellement votre box internet](isp_box_config) et serez possiblement [limité par certains aspects de votre fournisseur d'accès internet](isp). +- **Inconvénients** : il vous faudra [configurer manuellement votre box internet](/isp_box_config) et serez possiblement [limité par certains aspects de votre fournisseur d'accès internet](/isp). ### À la maison, derrière un VPN -Un VPN est un tunnel chiffré entre deux machines. En pratique, cela permet de faire "comme si" une machine était connectée depuis ailleurs. Ceci permet de s'auto-héberger à la maison tout en contournant les limitations du fournisseur d'accès internet. Voir aussi [le projet Brique Internet](https://labriqueinter.net/) et [la FFDN](https://www.ffdn.org/). +Un VPN est un tunnel chiffré entre deux machines. En pratique, cela permet de faire « comme si » une machine était connectée depuis ailleurs. Ceci permet de s'auto-héberger à la maison tout en contournant les limitations du fournisseur d'accès internet. Voir aussi [le projet Brique Internet](https://labriqueinter.net/) et [la FFDN](https://www.ffdn.org/). - **Avantages** : vous aurez un contrôle physique sur la machine, et le VPN permettra de cacher votre trafic vis-à-vis de votre FAI ainsi que de contourner ses limitations ; - **Inconvénients** : il vous faudra payer des frais mensuels pour le VPN. @@ -25,7 +32,7 @@ Vous pouvez louer un serveur privé virtuel ou une machine dédiée à des hébe ### Résumé -<table class="table"> +<table> <thead> <tr> <th></th> @@ -60,7 +67,7 @@ Vous pouvez louer un serveur privé virtuel ou une machine dédiée à des hébe </tr> <tr> <td style="text-align:center;">Limitation possibles <br >par le FAI</td> - <td style="text-align:center;" class="danger">Oui <br><small>(voir [ici](/isp))</small></td> + <td style="text-align:center;" class="danger">Oui <br><small>(voir <a href="/isp">ici</a>)</small></td> <td style="text-align:center;" class="success">Contournées par le VPN</td> <td style="text-align:center;" class="success">Généralement non</td> </tr> diff --git a/howtohostyourself.md b/pages/01.administrate/04.howtohostyourself/howtohostyourself.md similarity index 94% rename from howtohostyourself.md rename to pages/01.administrate/04.howtohostyourself/howtohostyourself.md index 98dd3363..1be0dd10 100644 --- a/howtohostyourself.md +++ b/pages/01.administrate/04.howtohostyourself/howtohostyourself.md @@ -1,4 +1,11 @@ -# How to host yourself ? +--- +title: How to host yourself? +template: docs +taxonomy: + category: docs +routes: + default: '/howtohostyourself' +--- You can host yourself at home (on a small computer), or on a remote server. Each solution has their pros and cons: @@ -7,7 +14,7 @@ You can host yourself at home (on a small computer), or on a remote server. Each You can host yourself at home with an ARM board or a re-purposed regular computer, connected to your home router/box. - **Pros** : you will have physical control of the machine and only need to buy the hardware; -- **Cons** : you will have to [manually configure your internet box](isp_box_config) and [might be limited by your ISP](isp). +- **Cons** : you will have to [manually configure your internet box](/isp_box_config) and [might be limited by your ISP](/isp). ### At home, behind a VPN @@ -25,7 +32,7 @@ You can rent a virtual private server or a dedicated machine from [associative]( ### Summary -<table class="table"> +<table> <thead> <tr> <th></th> @@ -60,7 +67,7 @@ You can rent a virtual private server or a dedicated machine from [associative]( </tr> <tr> <td style="text-align:center;">Possible ISP limitations</td> - <td style="text-align:center;" class="danger">Yes <br><small>(see [here](/isp))</small></td> + <td style="text-align:center;" class="danger">Yes <br><small>(see <a href="/isp">here</a>)</small></td> <td style="text-align:center;" class="success">Bypassed by VPN</td> <td style="text-align:center;" class="success">Typically no</td> </tr> @@ -80,4 +87,4 @@ You can rent a virtual private server or a dedicated machine from [associative]( <td style="text-align:center;" class="success">Typically pretty good</td> </tr> </tbody> -</table> +</table> \ No newline at end of file diff --git a/pages/01.administrate/05.install/02.findinglocalip/finding_the_local_ip.fr.md b/pages/01.administrate/05.install/02.findinglocalip/finding_the_local_ip.fr.md new file mode 100644 index 00000000..a119007c --- /dev/null +++ b/pages/01.administrate/05.install/02.findinglocalip/finding_the_local_ip.fr.md @@ -0,0 +1,64 @@ +--- +title: Trouver l'IP locale de son serveur +template: docs +taxonomy: + category: docs +routes: + default: '/finding_the_local_ip' +--- + +Dans le cas d'une installation à la maison, votre serveur devrait typiquement être accessible (depuis son réseau local) avec le domaine `yunohost.local`. Si pour une raison quelconque cela ne fonctionne pas, il vous faut peut-être trouver l'IP locale de votre serveur. + +## Qu'est ce qu'une IP locale ? +L'IP locale d'une machine est utilisée pour y faire référence à l'intérieur d'un réseau local (typiquement le réseau dans une maison) où plusieurs appareils se connectent à un même routeur (votre box internet). Une adresse IP locale ressemble généralement à `192.168.x.y` (ou parfois `10.0.x.y` ou `172.16.x.y`) + +## Comment la trouver ? +L'une de ces astuces devrait permettre de trouver l'IP locale de votre serveur : +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="(Recommandé) Avec AngryIP"] + +Vous pouvez utiliser le logiciel [AngryIP](https://angryip.org/download/) pour y parvenir. Vous devez juste scanner ces plages d'IP dans cet ordre jusqu'à trouver l'IP correspondante à votre serveur : +- `192.168.0.0` -> `192.168.0.255` +- `192.168.1.0` -> `192.168.1.255` +- `192.168.2.0` -> `192.168.255.255` +- `10.0.0.0` -> `10.0.255.255` +- `172.16.0.0` -> `172.31.255.255` + +!!! **Astuces**: +!!! - vous pouvez ordonner par ping comme dans cette capture d'écran, pour voir plus facilement toutes les IP effectivement actives. +!!! - votre serveur devrait être monté comme écoutant sur les ports 80 et 443 +!!! - en cas de doute, tapez directement dans votre navigateur `https://192.168.x.y` pour voir si c'est un Yunohost ou non. + + + +[/ui-tab] +[ui-tab title="Avec votre box internet"] +Utilisez l'interface de votre box internet pour lister les machines connectées. +[/ui-tab] +[ui-tab title="With arp-scan"] +Si vous êtes sous Linux, ouvrez un terminal et tapez `sudo arp-scan --local` pour lister les IP des machines sur le réseau local (ceci fonctionne aussi peut-être sous Windows) ; + +Si la commande `arp-scan` vous affiche beaucoup de machines, vous pouvez vérifier lesquelles sont ouvertes au SSH avec `nmap -p 22 192.168.1.0/24` pour faire du tri (adaptez la plage IP selon votre réseau local) +[/ui-tab] +[ui-tab title="With a screen"] +Branchez un écran sur votre serveur, loggez-vous et tapez `hostname --all-ip-address`. + +Les identifiants par défaut (avant la post-installation!) sont: +- login: root +- mot de passe: yunohost + +(Si vous utilisez une image Armbian brute plutôt que les images Yunohost pré-installées, les identifiants sont root / 1234) + + + +[/ui-tab] +[/ui-tabs] + + +## Je ne trouve toujours pas mon IP locale +Si vous n'êtes pas capable de trouver votre serveur avec les méthodes précédentes, alors peut-être que votre serveur n'a pas démarré correctement + +- Assurez-vous que le serveur est correctement branché ; +- Si votre serveur a une carte SD, essayez de vous assurer que la connectique n'est pas trop poussièreuse ; +- Branchez un écran sur le serveur et essayez de le redémarrer pour valider que le serveur démarre bien ; +- Assurez-vous que le cable ethernet est fonctionnel et correctement branché ; diff --git a/pages/01.administrate/05.install/02.findinglocalip/finding_the_local_ip.md b/pages/01.administrate/05.install/02.findinglocalip/finding_the_local_ip.md new file mode 100644 index 00000000..459ff0d9 --- /dev/null +++ b/pages/01.administrate/05.install/02.findinglocalip/finding_the_local_ip.md @@ -0,0 +1,62 @@ +--- +title: Finding your server's local IP +template: docs +taxonomy: + category: docs +routes: + default: '/finding_the_local_ip' +--- + +On an installation at home, your server should typically be accessible using the `yunohost.local` domain. If for any reason this does not work, you may need to find the *local* IP of your server. + +## What is a local IP ? +The local IP is the address used to refer to your server inside the local network (typically your home) where multiple devices are connected to a router (your internet box). The local IP typically looks like `192.168.x.y` (or sometimes `10.0.x.y` or `172.16.x.y`) + +## How to find it ? +Any of these tricks should allow you to find the local IP of your server: +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="(Recommended) With AngryIP"] + +You can use the [AngryIP](https://angryip.org/download/) software to achieve that. You just need to scan these local ip ranges in this order until you find the active IP corresponding to your server: +- `192.168.0.0` -> `192.168.0.255` +- `192.168.1.0` -> `192.168.1.255` +- `192.168.2.0` -> `192.168.255.255` +- `10.0.0.0` -> `10.0.255.255` +- `172.16.0.0` -> `172.31.255.255` + +!!! **Tips**: +!!! - you can order by ping like on this screenshot to easily see effectively-used IP. +!!! - your server should typically be displayed as listening on port 80 and 443 +!!! - in case of doubt, just type `https://192.168.x.y` in your browser to check if it's a Yunohost or not. + + + +[/ui-tab] +[ui-tab title="With your internet router / box"] +Connect to your internet box / router interface to list the machines connected. +[/ui-tab] +[ui-tab title="With arp-scan"] +If you're using Linux, you can open a terminal and use `sudo arp-scan --local` to list the IP on your local network (this may also work in Windows); + +If the `arp-scan` command displays a confusing number of devices, you can check which ones are open to SSH with `nmap -p 22 192.168.1.0/24` to sort them out (adapt the IP range to your local network) +[/ui-tab] +[ui-tab title="With a direct access on the server"] +Plug a screen on your server, log in and type `hostname --all-ip-address`. + +The default credentials (before post-installation!) to log in are: +- login: root +- password: yunohost + +(If you are using a raw Armbian image instead of the pre-installed Yunohost image, the credentials are root / 1234) + +[/ui-tab] +[/ui-tabs] + +## I still can't find my local IP + +If you are unable to find your server using any of the previous tricks, maybe your server did not boot correctly: + +- Make sure that your server is properly plugged in; +- If you're using an SD card, make sure the connector is not too dusty; +- Plug a screen on your server and try to reboot to check that it's properly booting; +- Make sure that your ethernet cable is working and properly plugged in; diff --git a/isp_box_config_es.md b/pages/01.administrate/05.install/03.isp_box_config/isp_box_config.es.md similarity index 66% rename from isp_box_config_es.md rename to pages/01.administrate/05.install/03.isp_box_config/isp_box_config.es.md index 3d5b93f3..e8fc229b 100644 --- a/isp_box_config_es.md +++ b/pages/01.administrate/05.install/03.isp_box_config/isp_box_config.es.md @@ -1,6 +1,21 @@ -# Configurar la redirección de los puertos +--- +title: Configurar la redirección de los puertos +template: docs +taxonomy: + category: docs +routes: + default: '/isp_box_config' + aliases: + - '/port_forwarding' +--- -Si te estás auto-alojando en casa y sin VPN, tienes que redirigirse los puertos de tu router (caja/box). Si quieres una explicación sencilla de lo que es y por qué necesitas redirigir los puertos, puedes echar un vistazo a [esta página](/port_forwarding). [Esta página](https://www.testdevelocidad.es/configuraciones/abrir-correctamente-los-puertos-router/) también propone explicaciones detalladas sobre el funcionamiento de los puertos, y las etapas de configuración para un router genérico. +Si te estás auto-alojando en casa y sin VPN, tienes que redirigirse los puertos de tu router (caja/box). + +El esquema aquí abajo intenta explicar brevemente el rol de la redirección de los puertos durante la instalación de un servidor en tu casa. + +[figure caption="Ilustración de la importancia del redirección de puertos"][/figure] + +[Esta página](https://www.testdevelocidad.es/configuraciones/abrir-correctamente-los-puertos-router/) también propone explicaciones detalladas sobre el funcionamiento de los puertos, y las etapas de configuración para un router genérico. ### 0. Diagnosticar los puertos abiertos @@ -26,16 +41,14 @@ En general una dirección IP local se parece a `192.168.xx.yy`, o `10.0.xx.yy`. En la interfaz de administración de tu router/caja/box, tienes que encontrar una categoría que debe llamarse 'Configuración del router', o 'Redirección de puertos'. El nombre difiere según el tipo o la marca del router / de la caja Internet... -Luego tienes que redirigir cada uno de los puertos listados a continuación hacia la IP local de tu router para que los varios servicios de Yunohost funcionen. Para cada uno de ellos, una redirección 'TCP' es necesaria. En algunas interfaces, tal vez encontrarás referencias a un puerto 'externo' y un puerto 'interno' : en nuestro caso, se trata del mismo número de puerto, que sea interno o externo. +Luego tienes que redirigir cada uno de los puertos listados a continuación hacia la IP local de tu router para que los varios servicios de YunoHost funcionen. Para cada uno de ellos, una redirección 'TCP' es necesaria. En algunas interfaces, tal vez encontrarás referencias a un puerto 'externo' y un puerto 'interno' : en nuestro caso, se trata del mismo número de puerto, que sea interno o externo. * Web: 80 <small>(HTTP)</small>, 443 <small>(HTTPS)</small> * [SSH](/ssh): 22 * [XMPP](/XMPP): 5222 <small>(clients)</small>, 5269 <small>(servers)</small> * [Email](/email): 25, 587 <small>(SMTP)</small>, 993 <small>(IMAP)</small> -<div class="alert alert-warning" markdown="1"> -<span class="glyphicon glyphicon-warning-sign"></span> Algunos proveedores de acceso a Internet bloquean el puerto 25 (mail SMTP) por defecto para luchar con el spam. Otros (más escasos) no permiten utilizar libremente los puertos 80/443. Dependiendo de tu proveedor, puede ser posible de abrir estos puertos en la interfaz... Ver [esta página](/isp) por más informaciones. -</div> +! [fa=exclamation-triangle /] Algunos proveedores de acceso a Internet bloquean el puerto 25 (mail SMTP) por defecto para luchar con el spam. Otros (más escasos) no permiten utilizar libremente los puertos 80/443. Dependiendo de tu proveedor, puede ser posible de abrir estos puertos en la interfaz... Ver [esta página](/isp) por más informaciones. ## Redirección automática / UPnP diff --git a/isp_box_config_fr.md b/pages/01.administrate/05.install/03.isp_box_config/isp_box_config.fr.md similarity index 56% rename from isp_box_config_fr.md rename to pages/01.administrate/05.install/03.isp_box_config/isp_box_config.fr.md index 31b38b1d..e54a7f3d 100644 --- a/isp_box_config_fr.md +++ b/pages/01.administrate/05.install/03.isp_box_config/isp_box_config.fr.md @@ -1,12 +1,24 @@ -# Configurer la redirection des ports +--- +title: Configurer la redirection des ports +template: docs +taxonomy: + category: docs +routes: + default: '/isp_box_config' + aliases: + - '/port_forwarding' +--- -Si vous vous auto-hébergez à la maison et sans VPN, il vous faut rediriger les ports de votre routeur ("machin-box"). Si vous souhaitez une explication courte de ce qu'est et pourquoi vous avez besoin de rediriger les ports, vous pouvez jeter un œil à [cette page-ci](/port_forwarding). [Cette page-là](https://craym.eu/tutoriels/utilitaires/ouvrir_les_ports_de_sa_box.html) propose également des explications détaillées sur le fonctionnement des ports, et les étapes de configuration pour différents routeurs. +Si vous vous auto-hébergez à la maison et sans VPN, il vous faut rediriger les ports de votre routeur ("machin-box"). Le schéma ci-dessous tente d'expliquer brièvement le rôle de la redirection des ports lors de la mise en place d'un serveur à la maison. + +[figure caption="Illustration de l'importance de la redirection des ports"][/figure] + +[Cette page](https://craym.eu/tutoriels/utilitaires/ouvrir_les_ports_de_sa_box.html) propose également des explications détaillées sur le fonctionnement des ports, et les étapes de configuration pour différents routeurs. ### 0. Diagnostiquer les ports ouverts -Une fois que vous aurez configuré la redirection, vous devriez pouvoir valider avec ce petit outil que vos ports sont bien redirigés : - -<a class="btn btn-default" href="http://ports.yunohost.org">Vérifier la redirection des ports</a> +Une fois les redirections configurées, l'outil de diagnostic introduit dans +YunoHost 3.8 vous permettra de vérifier si les ports sont correctement exposés. ### 1. Accéder à l'interface d'administration de votre box/routeur @@ -19,8 +31,8 @@ fournis par votre fournisseur d'accès internet (FAI). Identifiez quelle est l'IP locale de votre serveur, soit : - depuis l'interface de votre routeur/box, qui liste peut-être les dispositifs connectés; +- depuis la webadmin de YunoHost, dans 'Diagnostic', section 'Connectivité Internet', cliquer sur 'Details' à côté de la ligne sur IPv4. - depuis la webadmin de YunoHost, dans 'État du serveur', 'Réseau'; -- depuis la ligne de commande dans votre serveur, par exemple avec `ip a | grep "scope global" | awk '{print $2}'`. Une adresse IP locale ressemble généralement à `192.168.xx.yy`, ou `10.0.xx.yy`. @@ -30,16 +42,14 @@ Dans l'interface d'administration de votre box/routeur, il vous faut trouver une catégorie comme 'Configuration du routeur', ou 'Redirections de ports'. Le nom diffère suivant le type / marque de la box... -Il vous faut ensuite rediriger chacun des ports listés ci-dessous vers l'IP locale de votre serveur pour que les différents services de YunoHost fonctionnent. Pour chacun d'eux, une redirection 'TCP' est nécessaire. Certains interfaces font références à un port 'externe' et un port 'interne' : dans notre cas il s'agit du même. +Il vous faut ensuite rediriger chacun des ports listés ci-dessous vers l'IP locale de votre serveur pour que les différents services de YunoHost fonctionnent. Pour chacun d'eux, une redirection 'TCP' est nécessaire. Certaines interfaces font référence à un port 'externe' et un port 'interne' : dans notre cas il s'agit du même. * Web: 80 <small>(HTTP)</small>, 443 <small>(HTTPS)</small> * [SSH](/ssh): 22 * [XMPP](/XMPP): 5222 <small>(clients)</small>, 5269 <small>(servers)</small> * [Email](/email): 25, 587 <small>(SMTP)</small>, 993 <small>(IMAP)</small> -<div class="alert alert-warning" markdown="1"> -<span class="glyphicon glyphicon-warning-sign"></span> Certains fournisseurs d'accès internet bloquent le port 25 (mail SMTP) par défaut pour combattre le spam. D'autres (plus rares) ne permettent pas d'utiliser librement les ports 80/443. En fonction de votre FAI, il peut être possible d'ouvrir ces ports dans l'interface... Voir [cette page](/isp) pour plus d'informations. -</div> +! [fa=exclamation-triangle /] Certains fournisseurs d'accès internet bloquent le port 25 (mail SMTP) par défaut pour combattre le spam. D'autres (plus rares) ne permettent pas d'utiliser librement les ports 80/443. En fonction de votre FAI, il peut être possible d'ouvrir ces ports dans l'interface... Voir [cette page](/isp) pour plus d'informations. ## Redirection automatique / UPnP diff --git a/isp_box_config.md b/pages/01.administrate/05.install/03.isp_box_config/isp_box_config.md similarity index 50% rename from isp_box_config.md rename to pages/01.administrate/05.install/03.isp_box_config/isp_box_config.md index 883889c0..9b64dfd7 100644 --- a/isp_box_config.md +++ b/pages/01.administrate/05.install/03.isp_box_config/isp_box_config.md @@ -1,26 +1,38 @@ -# Configure port-forwarding +--- +title: Configure port-forwarding +template: docs +taxonomy: + category: docs +routes: + default: '/isp_box_config' + aliases: + - '/port_forwarding' +--- -If you are self-hosting at home and without a VPN, you need to forward ports on your home router ("Internet box"). If you want a short explanation on what is and why you need port forwarding, have a look in [this page](port_forwarding). +If you are self-hosting at home and without a VPN, you need to forward ports on your home router ("Internet box"). The sketch below tries to briefly summarize the role and necessity of port forwarding when setting up a server at home. + +[figure caption="Illustration of the importance of port-forwarding"][/figure] ### 0. Diagnose ports opened -After configuring port forwarding, you should be able to validate with this small tool that your ports are correctly forwarded : - -<a class="btn btn-default" href="http://ports.yunohost.org">Check which ports are forwarded</a> +The new diagnosis tool introduced in 3.8 can be used to diagnose that ports are +correctly exposed. ### 1. Access your box/router administration interface -Your box/router admin interface is usually reachable via http://192.168.0.1 or http://192.168.1.1. Then, you will probably need to authenticate yourself with your internet server provider's credentials. +Your box/router admin interface is usually reachable via [http://192.168.0.1](http://192.168.0.1) or [http://192.168.1.1](http://192.168.1.1). Then, you will probably need to authenticate yourself the credentials given by your internet server provider. ### 2. Find the local IP of your server -Identify what is the local IP of your server, either : +Identify what is thei *local* IP of your server, either : - from your box/router interface, which might list devices connected -- from the YunoHost webadmin, in 'State of the server', 'Network' -- from the command line in your server, by running `ip a | grep "scope global" | awk '{print $2}'` +- from the YunoHost webadmin, in 'Diagnosis', section 'Internet connectivity', click on 'Details' on the IPv4 report. +- from the command line in your server, by running `hostname -I` A local IP address typically looks like `192.168.xx.yy`, or `10.0.xx.yy`. +The local IP address needs to be static, so that the port forwards that you are going to configure in the next step will always reach your server. You should go into your box/router and make sure that the local IP address of your server is static instead of dynamic. + ### 3. Forwarding ports In your router admin interface, look for something like 'router configuration' or 'port forwarding'. The naming differs among the various kinds of boxes. @@ -36,9 +48,7 @@ If you use both a modem and a router, then you need to do the following: 1. first on the modem (the box closest to the internet) create rules to forward the above ports to your router; 2. then on the router (the box between the modem and your devices) create rules to forward the above ports to the static IP address for your server. -<div class="alert alert-warning" markdown="1"> -<span class="glyphicon glyphicon-warning-sign"></span> Some internet service providers block port 25 (mail SMTP) by default to fight spam. Some other ISP don't allow to use port 80/443 (web) freely, though it's less likely. Depending on the ISP, it might be possible to open them in the admin interface... Check [this page](/isp) for more info. -</div> +! [fa=exclamation-triangle /] Some internet service providers block port 25 (mail SMTP) by default to fight spam. Some other ISP don't allow to use port 80/443 (web) freely, though it's less likely. Depending on the ISP, it might be possible to open them in the admin interface... Check [this page](/isp) for more info. ## Automatic port forwarding / UPnP diff --git a/dns_config_es.md b/pages/01.administrate/05.install/04.dns/dns_config.es.md similarity index 83% rename from dns_config_es.md rename to pages/01.administrate/05.install/04.dns/dns_config.es.md index 55bf2d6f..c09c730e 100644 --- a/dns_config_es.md +++ b/pages/01.administrate/05.install/04.dns/dns_config.es.md @@ -1,8 +1,17 @@ -# Configuración de la zona DNS +--- +title: Configuración de la zona DNS +template: docs +taxonomy: + category: docs +routes: + default: '/dns_config' + aliases: + - '/dns' +--- DNS (sistema de nombre de dominios) es un elemento esencial de Internet que permite convertir direcciones comprensibles por seres humanos (los nombres de dominio) en direcciones comprensibles por la máquina (los IPs). Para que tu servidor esté fácilemente por otros seres humanos, y para que servicios como el mail funcionen correctamente, es preciso configurar la zona DNS de tu dominio. -Si utilizas un [dominio automático](/dns_nohost_me) provecho por el Proyecto Yunohost, la configuración debería ser automática. Si quieres utilizar tu propio nombre de dominio (comprado a un registrar), hay que configurar manualmente tu proprio nombre de dominio vía la interfaz de tu registrar. +Si utilizas un [dominio automático](/dns_nohost_me) provecho por el Proyecto YunoHost, la configuración debería ser automática. Si quieres utilizar tu propio nombre de dominio (comprado a un registrar), hay que configurar manualmente tu proprio nombre de dominio vía la interfaz de tu registrar. ## Configuración DNS recomendada @@ -35,12 +44,13 @@ _xmpp-server._tcp 3600 IN SRV 0 5 5269 tu.dominio.tld. muc 3600 IN CNAME @ pubsub 3600 IN CNAME @ vjud 3600 IN CNAME @ +xmpp-upload 3600 IN CNAME @ # # Mail (MX, SPF, DKIM et DMARC) # @ 3600 IN MX 10 votre.domaine.tld. -@ 3600 IN TXT "v=spf1 a mx ip4:111.222.33.44 -all" +@ 3600 IN TXT "v=spf1 a mx -all" mail._domainkey 3600 IN TXT "v=DKIM1; k=rsa; p=uneGrannnnndeClef" _dmarc 3600 IN TXT "v=DMARC1; p=none" ``` @@ -48,19 +58,20 @@ _dmarc 3600 IN TXT "v=DMARC1; p=none" Pero puede ser un poco más fácil entenderla viéndola de esta manera : -| Tipo | Nombre | Valor | +| Tipo | Nombre | Valor | | :-----: | :--------------------: | :----------------------------------------------------: | -| **A** | **@** | `111.222.333.444` (tu IPv4) | -| A | * | `111.222.333.444` (tu IPv4) | -| AAAA | @ | `2222:444:8888:3333:bbbb:5555:3333:1111` (tu IPv6) | -| AAAA | * | `2222:444:8888:3333:bbbb:5555:3333:1111` (tu IPv6) | -| **SRV** | **_xmpp-client._tcp** | `0 5 5222 tu.dominio.tld.` | -| **SRV** | **_xmpp-server._tcp** | `0 5 5269 tu.dominio.tld.` | +| **A** | **@** | `111.222.333.444` (tu IPv4) | +| A | * | `111.222.333.444` (tu IPv4) | +| AAAA | @ | `2222:444:8888:3333:bbbb:5555:3333:1111` (tu IPv6) | +| AAAA | * | `2222:444:8888:3333:bbbb:5555:3333:1111` (tu IPv6) | +| **SRV** | **_xmpp-client._tcp** | `0 5 5222 tu.dominio.tld.` | +| **SRV** | **_xmpp-server._tcp** | `0 5 5269 tu.dominio.tld.` | | CNAME | muc | `@` | | CNAME | pubsub | `@` | | CNAME | vjud | `@` | -| **MX** | **@** | `tu.dominio.tld.` (y prioridad: 10) | -| TXT | @ | `"v=spf1 a mx ip4:111.222.33.44 -all"` | +| CNAME | xmpp-upload | `@` | +| **MX** | **@** | `tu.dominio.tld.` (y prioridad: 10) | +| TXT | @ | `"v=spf1 a mx -all"` | | TXT | mail._domainkey | `"v=DKIM1; k=rsa; p=uneGrannnndeClef"` | | TXT | _dmarc | `"v=DMARC1; p=none"` | @@ -72,3 +83,8 @@ Pero puede ser un poco más fácil entenderla viéndola de esta manera : - ¡ Los valores mostrados son ejemplos ! Refiérete a la configuración generada por tu servidor qué valores utilizar. - Recomendamos un [TTL](https://en.wikipedia.org/wiki/Time_to_live) de 3600 (1 hora). Pero puedes utilizar otro valor si sabes lo que estás haciendo ; - ¡ No pongas registros IPv6 si no estás seguro que el IPv6 funcione en tu servidor ! Tendrás problemas con Let's Encrypt si no es el caso :-) + + +### IP Dinámica + +Si la dirección IP pública cambia, sigue este [tutorial](/dns_dynamicip). diff --git a/dns_config_fr.md b/pages/01.administrate/05.install/04.dns/dns_config.fr.md similarity index 71% rename from dns_config_fr.md rename to pages/01.administrate/05.install/04.dns/dns_config.fr.md index 1d06e77c..4266ddbd 100644 --- a/dns_config_fr.md +++ b/pages/01.administrate/05.install/04.dns/dns_config.fr.md @@ -1,13 +1,22 @@ -# Configuration de la zone DNS +--- +title: Configuration de la zone DNS +template: docs +taxonomy: + category: docs +routes: + default: '/dns_config' + aliases: + - '/dns' +--- DNS (système de nom de domaine) est un élément essentiel d'Internet qui permet -de convertir des adresses compréhensible par les êtres humains (les noms de +de convertir des adresses compréhensibles par les êtres humains (les noms de domaines) en adresses compréhensibles par la machine (les IPs). Pour que votre serveur soit facilement accessible par d'autres êtres humains, et pour que certains services comme le mail fonctionnent correctement, il est nécessaire de configurer la zone DNS de votre domaine. -Si vous utilisez un [domaine automatique](/dns_nohost_me) fourni par le Projet Yunohost, +Si vous utilisez un [domaine automatique](/dns_nohost_me) fourni par le Projet YunoHost, la configuration devrait être faite automatiquement. Si vous utilisez votre propre nom de domaine (e.g. acheté chez un registrar), il vous faut configurer manuellement votre domaine via l'interface de votre registrar. @@ -50,7 +59,7 @@ xmpp-upload 3600 IN CNAME @ # Mail (MX, SPF, DKIM et DMARC) # @ 3600 IN MX 10 votre.domaine.tld. -@ 3600 IN TXT "v=spf1 a mx ip4:111.222.33.44 -all" +@ 3600 IN TXT "v=spf1 a mx -all" mail._domainkey 3600 IN TXT "v=DKIM1; k=rsa; p=uneGrannnnndeClef" _dmarc 3600 IN TXT "v=DMARC1; p=none" ``` @@ -69,8 +78,9 @@ suivante : | CNAME | muc | `@` | | CNAME | pubsub | `@` | | CNAME | vjud | `@` | +| CNAME | xmpp-upload | `@` | | **MX** | **@** | `votre.domaine.tld.` (et priorité: 10) | -| TXT | @ | `"v=spf1 a mx ip4:111.222.33.44 -all"` | +| TXT | @ | `"v=spf1 a mx -all"` | | TXT | mail._domainkey | `"v=DKIM1; k=rsa; p=uneGrannnndeClef"` | | TXT | _dmarc | `"v=DMARC1; p=none"` | @@ -78,7 +88,32 @@ suivante : - Tous ces enregistrements ne sont pas nécessaires. Pour une installation minimale, seuls les enregistrements en gras sont nécessaires ; - Le point à la fin de `votre.domaine.tld.` est important ;) ; -- `@` corresponds à `votre.domaine.tld`, et par ex. `muc` corresponds à `muc.votre.domaine.tld` ; +- `@` correspond à `votre.domaine.tld`, et par ex. `muc` correspond à `muc.votre.domaine.tld` ; - Les valeurs montrées ici sont des valeurs d'exemple ! Référez-vous à la configuration générée chez vous pour savoir quelles valeurs utiliser ; - Nous recommandons un [TTL](https://fr.wikipedia.org/wiki/Time_to_Live#Le_Time_to_Live_dans_le_DNS) de 3600 (1 heure). Mais vous pouvez utiliser une autre valeur si vous savez ce que vous faîtes ; - Ne mettez pas d'enregistrement IPv6 si vous n'êtes pas certains que l'IPv6 fonctionne sur votre serveur ! Vous aurez des problèmes avec Let's Encrypt si ce n'est pas le cas. + +### Résolution DNS inverse + +Si votre opérateur ou votre hébergeur le permet, nous vous encourageons à +configurer une [résolution DNS +inverse](https://fr.wikipedia.org/wiki/Domain_Name_System#R%C3%A9solution_inverse) +pour vos adresses publiques IPv4 et/ou IPv6. Ceci vous évitera d'être marqué +comme spammeur par les systèmes de filtrage anti-spams. + +**N.B. : la configuration du DNS inverse se passe au niveau de votre Fournisseur d'Accès à Internet, ou de votre hébergeur de VPS. Elle ne se fait *pas* sur le registrar de votre nom de domaine.** + +Cela signifie que si votre adresse IPv4 publique est `111.222.333.444` et que +votre nom de domaine est `domain.tld`, vous devez obtenir le résultat suivant +en utilisant la commande `nslookup` : + +```shell +$ nslookup 111.222.333.444 +444.333.222.111.in-addr.arpa name = domain.tld. +``` + +Le système de diagnostic présent dans l'interface d'administration fait cette vérification automatiquement (dans la section Email) + +### IP Dynamique + +Si votre adresse IP publique change constamment, suivez ce [tutoriel](/dns_dynamicip). diff --git a/dns_config.md b/pages/01.administrate/05.install/04.dns/dns_config.md similarity index 71% rename from dns_config.md rename to pages/01.administrate/05.install/04.dns/dns_config.md index d09f84a7..01c0c756 100644 --- a/dns_config.md +++ b/pages/01.administrate/05.install/04.dns/dns_config.md @@ -1,4 +1,13 @@ -# DNS zone configuration +--- +title: DNS zone configuration +template: docs +taxonomy: + category: docs +routes: + default: '/dns_config' + aliases: + - '/dns' +--- DNS (domain name system) is a system that converts human-readable addresses (domain names) into machine-understandable addresses (IP). For your server to be @@ -11,10 +20,11 @@ a registrar), you should manually configure your domain on your registrar's interface. ## Recommended DNS configuration + NB: Examples here use the placeholder `your.domain.tld`, you have to replace it with your real domain, such as `www.yunohost.org`. -YunoHost provides a recommended DNS configuration, available via : -- the webadmin, in Domain > your.domain.tld > DNS configuration ; +YunoHost provides a recommended DNS configuration, available via: +- the webadmin, in Domain > your.domain.tld > DNS configuration; - or the command line, `yunohost domain dns-conf your.domain.tld` For specific needs or specific setups, and if you know what you're doing, you @@ -48,7 +58,7 @@ xmpp-upload 3600 IN CNAME @ # Mail (MX, SPF, DKIM and DMARC) # @ 3600 IN MX 10 your.domain.tld. -@ 3600 IN TXT "v=spf1 a mx ip4:111.222.33.44 -all" +@ 3600 IN TXT "v=spf1 a mx -all" mail._domainkey 3600 IN TXT "v=DKIM1; k=rsa; p=someHuuuuuuugeKey" _dmarc 3600 IN TXT "v=DMARC1; p=none" ``` @@ -67,16 +77,41 @@ Though it might be easier to understand it if displayed like this: | CNAME | muc | `@` | | CNAME | pubsub | `@` | | CNAME | vjud | `@` | +| CNAME | xmpp-upload | `@` | | **MX** | **@** | `your.domain.tld.` (and priority: 10) | -| TXT | @ | `"v=spf1 a mx ip4:111.222.33.44 -all"` | +| TXT | @ | `"v=spf1 a mx -all"` | | TXT | mail._domainkey | `"v=DKIM1; k=rsa; p=someHuuuuuuugeKey"` | | TXT | _dmarc | `"v=DMARC1; p=none"` | #### A few notes about this table - Not all these lines are absolutely necessary. For a minimal setup, you only need the records in bold. -- The dot at the end of `your.domain.tld.` is important ;) ; -- `@` corresponds to `your.domain.tld`, and e.g. `muc` corresponds to `muc.your.domain.tld` ; -- These are example values ! See your generated conf for the actual values you should use ; -- We recommend a [TTL](https://en.wikipedia.org/wiki/Time_to_live#DNS_records) of 3600 (1 hour). But you can use something else if you know what you're doing ; +- The dot at the end of `your.domain.tld.` is important ;); +- `@` corresponds to `your.domain.tld`, and e.g. `muc` corresponds to `muc.your.domain.tld`; +- These are example values ! See your generated conf for the actual values you should use; +- We recommend a [TTL](https://en.wikipedia.org/wiki/Time_to_live#DNS_records) of 3600 (1 hour). But you can use something else if you know what you're doing; - Don't put an IPv6 record if you're not sure IPv6 really works on your server! You might have issues with Let's Encrypt if it doesn't. + +### Reverse DNS + +If your ISP or VPS provider let you define a [Reverse DNS +lookup](https://en.wikipedia.org/wiki/Reverse_DNS_lookup) for your public IPv4 +and/or IPv6 addresses, you must configure it. It will prevent you to be marked as +spam by anti-spam filters. + +**N.B. : the reverse DNS configuration happens on your Internet Service Provider or VPS provider. It is *not* handled by your domain's registrar.** + +If your public IPv4 address is `111.222.333.444` and your DNS +domain is `domain.tld`, you should get following answer when using `nslookup` +command tool: + +```shell +$ nslookup 111.222.333.444 +444.333.222.111.in-addr.arpa name = domain.tld. +``` + +The diagnosis system available in the webadmin performs this checks automatically (in section Email). + +### Dynamic IP + +If your global IP address is constantly changing, follow this [tutorial](/dns_dynamicip). diff --git a/pages/01.administrate/05.install/06.certificate/certificate.de.md b/pages/01.administrate/05.install/06.certificate/certificate.de.md new file mode 100644 index 00000000..0da8ed9c --- /dev/null +++ b/pages/01.administrate/05.install/06.certificate/certificate.de.md @@ -0,0 +1,95 @@ +--- +title: Zertifikat +template: docs +taxonomy: + category: docs +routes: + default: '/certificate' +--- + +Digitale Zertifikate werden verwendet, um die Vertraulichkeit und Echtheit der Kommunikation zwischen einem Webbrowser und Ihrem Server zu gewährleisten. Insbesondere schützen sie vor Angreifern, die versuchen, Ihren Server zu identifizieren. + +YunoHost bietet ein **selbstsigniertes-Zertifikat**. Es bedeutet, dass Ihr Server die Gültigkeit des Zertifikats garantiert. Es genügt **für eine persönliche Verwendung**, weil Sie Ihrem eigenen Server vertrauen. Dies könnte jedoch ein Problem sein, wenn Sie den Zugriff auf einem Fremden, wie Webbenutzer, für eine Website öffnen möchten. +Und zwar, werden die Benutzer eine solche Warnung auf dem Bildschirm sehen: + + + +Was im Wesentlichen den Besucher fragt: **"Vertrauen Sie dem Server, der diese Website hostet? "**. +Dies kann viele Menschen selbstverständlich erschrecken. + +Um diese Verwirrung zu vermeiden, ist es möglich, ein digitales Zertifikat zu erhalten, welches direkt von den Browsern anerkannt wurde, und von einer "bekannten" Zertifizierungsstelle unterzeichnet wird: **Let's Encrypt**, **Gandi**, **RapidSSL**, **StartSSL**, **Cacert**. + +**Let's Encrypt** bietet kostenlose Zertifikate an. Seit der Version 2.5 erlaubt YunoHost ein solches Zertifikat direkt von der Verwaltungsschnittstelle oder der Befehlszeile zu installieren. Der Rest des Dokuments erklärt die Installation und Verwaltung eines solchen Zertifikats. Sie können auch [ein digitales Zertifikat von einer anderen Zertifizierungstelle als Let's Encrypt installieren](/certificate_custom). + +### Digitales Zertifikat Let's Encrypt installieren + +Bevor Sie ein Let's Encrypt-Zertifikat installieren, vergewissern Sie sich, dass Ihr DNS ordnungsgemäß konfiguriert ist (Ihre.Domain.tld sollte auf die IP Ihres Servers zeigen) und Ihre Website von außen in HTTP zugänglich ist (d. h. zumindest der Port 80 wird korrekt an Ihren Server umgeleitet). + +#### Mit Web-Verwaltungsschnittstelle + +Gehen Sie zu dem Abschnitt "Domaine" der Administrationsoberfläche. Dann +zu dem Abschnitt, der Ihrer Domain entspricht. Da steht einen Knopf 'Certificat SSL'. + + + +Im Abschnitt 'Certificat SSL', wird der aktuelle Status angegeben. +Wurde der Domain-Name vor kurzem hinzugefügt, so steht ein selbst-signiertes Zertifikat zur verfügung. + + + +Wenn die Domain korrekt konfiguriert ist, dann ist es möglich +mit dem grünen Knopf ein Let's Encrypt-Zertifikat einzusetzen. + + + +Nach Abschluss der Installation, die ensprechende Domain mit Webbrowser +in HTTPS-Modus besuchen um die Berücksichtigung des digitalen Zertifikats +von Let's Encrypt zu überprüfen. Das digitale Zertifikat wird automatisch etwa alle drei Monate erneuert. + + + +#### Mit Shell-Zugang + +SSH-Zugang auf Ihrem Server herstellen. + +So können Sie den aktuellen Status des digitalen Zertifikats überprüfen + +```bash +yunohost domain cert-status Ihre.domain.tld +``` + +Dann Let's Encrypt-Zertifikat installieren + +```bash +yunohost domain cert-install Ihre.domain.tld +``` + +Ergebnis sollte so aussehen : + +```bash +Success! The SSOwat configuration has been generated +Success! Successfully installed Let's Encrypt certificate for domain DOMAIN.TLD! +``` + +Nach Abschluss der Installation, die ensprechende Domain mit Webbrowser +in HTTPS-Modus besuchen um die Berücksichtigung des digitalen Zertifikats +von Let's Encrypt zu überprüfen. Das digitale Zertifikat wird automatisch etwa alle drei Monate erneuert. + +##### Fehlerbehebung + +Wenn das Zertifikat aufgrund einer schlechten Handhabung nicht funktionsfähig ist +(z. B. Verlust des Zertifikats oder Dateien nicht lesbar), ist es trotzdem möglich +ein selbst-signiertes Zertifikat zu regenerieren : + +```bash +yunohost domain cert-install Ihre.domain.tld --self-signed --force +``` + +Trotz einer sorgfältigen Überprüfung der DNS-Konfiguration und auch von außen +die Möglichkeit mit HTTP-Modus Zugriff auf den Webserver besteht, kann Yunohost +manschmal die Einstellungen verweigern. In diesem Fall ist es notwendig : + +- die Parameter `127.0.0.1 Ihre.domain.tld` auf der Datei `/etc/hosts` des Webserver hinzufügen. +Wenn es immer noch nicht funktionsfähig ist, also die Überprüfungen deaktivieren mit `--no-checks` nach dem Befehl `cert-install`. + + diff --git a/certificate_es.md b/pages/01.administrate/05.install/06.certificate/certificate.es.md similarity index 87% rename from certificate_es.md rename to pages/01.administrate/05.install/06.certificate/certificate.es.md index f68b07e6..3d1b2d80 100644 --- a/certificate_es.md +++ b/pages/01.administrate/05.install/06.certificate/certificate.es.md @@ -1,17 +1,24 @@ -# Certificado +--- +title: Certificado +template: docs +taxonomy: + category: docs +routes: + default: '/certificate' +--- Los certificados sirven para garantizar la confidencialidad y la autenticidad de las comunicaciones entre un navegador web y tu servidor. En particular, permite proteger los visitantes contra atacantes que podrían intentar de robar la identidad del servidor. -Por defecto, Yunohost provee un certificado **auto-firmado**, lo que significa que es tu servidor el que garantiza la validez del certificado. Es suficiente **en el caso de un uso personal**, porque puedes confiar en tu propio servidor, pero esto planteará problemas si piensas en abrir el acceso a tu servidor a personas anónimas, por ejemplo si quieres alojar un sitio web. +Por defecto, YunoHost provee un certificado **auto-firmado**, lo que significa que es tu servidor el que garantiza la validez del certificado. Es suficiente **en el caso de un uso personal**, porque puedes confiar en tu propio servidor, pero esto planteará problemas si piensas en abrir el acceso a tu servidor a personas anónimas, por ejemplo si quieres alojar un sitio web. En efecto, los usuarios deberán pasar por una pantalla de este tipo : -<img src="/images/postinstall_error.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> + Esta pantalla equivale a que te pidan ** ¿ Confías en el servidor que aloja este sitio ? ***. Esto puede asustar tu usuarios (con toda la razón). Para evitar esta confusión, es posible obtener un certificado, reconocido directamente por los navegadores, firmado por una autoridad « conocida » : **Let's Encrypt**, **Gandi**, **RapidSSL**, **StartSSL**, **Cacert**. -**Let's Encrypt** propone certificados gratuitos. Desde la versión 2.5, Yunohost permite instalar directamente tales certificados desde la interfaz de administración o la línea de comandos. El resto del documento detalla la instalación y la firma de este tipo de certificado. También puedes [instalar un certificado de otra autoridad que Let's Encrypt](/certificate_custom). +**Let's Encrypt** propone certificados gratuitos. Desde la versión 2.5, YunoHost permite instalar directamente tales certificados desde la interfaz de administración o la línea de comandos. El resto del documento detalla la instalación y la firma de este tipo de certificado. También puedes [instalar un certificado de otra autoridad que Let's Encrypt](/certificate_custom). ### Instalar un certificado Let's Encrypt @@ -21,20 +28,20 @@ Antes de intentar la instalación de un certificado Let's Encrypt, primero debes En la categoría 'Dominio' de la interfaz de administración, y luego en la sección dedicada a tu dominio, encontrarás un botón 'Certificado SSL'. - + En la sección 'Certificado SSL', puedes ver el estado corriente del certificado. Si acabas de añadir el dominio, ya dispone de un certificado auto-firmado. - + Si tu dominio está configurado correctamente, es posible instalar un certificado Let's Encrypt vía el botón verde. - + Una vez la instalación terminada, puedes ir a tu dominio vía tu navegador, en HTTPS, para comprobar que tu certificado está bien firmado por Let's Encrypt. El certificado se renovará automáticamente al cabo de cada periodo de tres meses. - + #### Vía línea de comandos @@ -69,9 +76,7 @@ Si, después de una manipulación incorrecta, un certificado se encuentra en una yunohost domain cert-install tu.dominio.tld --self-signed --force ``` -Si Yunohost te dice que tu dominio está mal configurado mientras que has verificado tu configuración DNS y que tienes acceso a tu servidor en HTTP desde afuera, puedes intentar : +Si YunoHost te dice que tu dominio está mal configurado mientras que has verificado tu configuración DNS y que tienes acceso a tu servidor en HTTP desde afuera, puedes intentar : - de añadir una línea `127.0.0.1 tu.dominio.tld` al archivo `/etc/hosts` en tu servidor ; - si la instalación todavía no funciona, desactiva las verificaciones añadiendo `--no-checks` al comando `cert-install`. - - diff --git a/certificate_fr.md b/pages/01.administrate/05.install/06.certificate/certificate.fr.md similarity index 92% rename from certificate_fr.md rename to pages/01.administrate/05.install/06.certificate/certificate.fr.md index 6aeef3d5..f2ad4b01 100644 --- a/certificate_fr.md +++ b/pages/01.administrate/05.install/06.certificate/certificate.fr.md @@ -1,11 +1,18 @@ -# Certificat +--- +title: Certificat +template: docs +taxonomy: + category: docs +routes: + default: '/certificate' +--- Les certificats sont utilisés pour garantir la confidentialité et l'authenticité des communications entre un navigateur web et votre serveur. En particulier, il permet de protéger les visiteurs contre des attaquants qui chercheraient à usurper l'identité du serveur. YunoHost fournit par défaut un certificat **auto-signé**, ce qui veut dire que c’est votre serveur qui garantit la validité du certificat. C’est suffisant **pour un usage personnel**, car vous pouvez avoir confiance en votre serveur, en revanche cela posera problème si vous comptez ouvrir l’accès à votre serveur à des anonymes, par exemple pour héberger un site web. En effet, les utilisateurs devront passer par un écran de ce type : -<img src="/images/postinstall_error.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> + Cet écran revient à demander **« Avez-vous confiance au serveur qui héberge ce site ? »**. Cela peut effrayer vos utilisateurs (à juste titre). @@ -26,24 +33,24 @@ de votre serveur) et que votre site est accessible en HTTP depuis l'extérieur Rendez-vous dans la partie 'Domaine' de l'interface d'administration, puis dans la section dédiée à votre domaine. Vous trouverez un bouton 'Certificat SSL'. - + Dans la section 'Certificat SSL', vous pourrez voir l'état actuel du certificat. Si vous venez d'ajouter le domaine, il dispose d'un certificat auto-signé. - + Si votre domaine est correctement configuré, il vous est alors possible de passer à un certificat Let's Encrypt via le bouton vert. - + Une fois l'installation effectuée, vous pouvez vous rendre sur votre domaine via votre navigateur, en HTTPS, pour vérifier que votre certificat est bien signé par Let's Encrypt. Le certificat sera renouvelé automatiquement tous les trois mois environ. - + #### Via la ligne de commande diff --git a/certificate.md b/pages/01.administrate/05.install/06.certificate/certificate.md similarity index 52% rename from certificate.md rename to pages/01.administrate/05.install/06.certificate/certificate.md index 49b514fd..2c6144cd 100644 --- a/certificate.md +++ b/pages/01.administrate/05.install/06.certificate/certificate.md @@ -1,4 +1,11 @@ -# Certificate +--- +title: Certificate +template: docs +taxonomy: + category: docs +routes: + default: '/certificate' +--- Certificates are used to guarantee the confidentiality and authenticity of the communication between a web browser and your server. In particular, they protect against attackers trying to impersonate your server. @@ -6,51 +13,41 @@ YunoHost provides a **self-signed** certificate, it means that your server guara In practice, visitors will see a screen list this: -<img src="/images/postinstall_error.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> + Which basically asks the visitor : **"Do you trust the server hosting this website?"**. This can rightfully frighten a lot of people. -To avoid this confusion, it's possible to get a certificate signed a known -authority named **Let's Encrypt** which provide free certificates directly -recognized by browsers. YunoHost allows to directly install this certificate -from the web administration interface or from the command line. +To avoid this confusion, it's possible to get a certificate signed a known authority named **Let's Encrypt** which provide free certificates directly recognized by browsers. YunoHost allows to directly install this certificate from the web administration interface or from the command line. ### Install a Let's Encrypt certificate -Before attempting to install a Let's Encrypt certificate, you should make sure -that your DNS is correctly configured (your.domain.tld should point to -your server's IP) and that your domain is accessible through HTTP from outside -your local network (i.e. at least port 80 should be forwarded to your server). +Before attempting to install a Let's Encrypt certificate, you should make sure that your DNS is correctly configured (your.domain.tld should point to your server's IP) and that your domain is accessible through HTTP from outside your local network (i.e. at least port 80 should be forwarded to your server). -#### From the web administration interface +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="From the web interface"] -Go to the 'Domain' part of the admin interface, then in the section dedicated to -your.domain.tld. You should find a 'SSL certificate' button : +Go to the 'Domain' part of the admin interface, then in the section dedicated to your.domain.tld. You should find a 'SSL certificate' button: - + -In the 'SSL certificate' section, you can see the status of the current -certificate. If you just added the domain, it should be a self-signed -certificate. +In the 'SSL certificate' section, you can see the status of the current certificate. If you just added the domain, it should be a self-signed certificate. - + -If your domain is correctly configured, it is then possible to install the -Let's Encrypt certificate via the green button. +If your domain is correctly configured, it is then possible to install the Let's Encrypt certificate via the green button. - + -Once the install is made, you can check that the certificate is live via your -browser by going to your domain in HTTPS. The certificate will automatically -be renewed every three months. +Once the install is made, you can check that the certificate is live via your browser by going to your domain in HTTPS. The certificate will automatically be renewed every three months. - + -#### From the command line interface +[/ui-tab] +[ui-tab title="From the command line"] Connect to your server through SSH. -You can check the status of your current certificate with : +You can check the status of your current certificate with: ```bash yunohost domain cert-status your.domain.tld @@ -69,24 +66,21 @@ Success! The SSOwat configuration has been generated Success! Successfully installed Let's Encrypt certificate for domain DOMAIN.TLD! ``` -Once this is done, you can check that the certificate is live via your -browser by going to your domain in HTTPS. The certificate will automatically -be renewed every three months. +Once this is done, you can check that the certificate is live via your browser by going to your domain in HTTPS. The certificate will automatically be renewed every three months. + +[/ui-tab] +[/ui-tabs] ##### Troubleshooting -If due to some bad tweaking, your certificate ends up in a bad state (e.g. -lost the certificate or unable to read the files), you should be able to clean -the situation by regenerating a self-signed certificate : +If due to some bad tweaking, your certificate ends up in a bad state (e.g. lost the certificate or unable to read the files), you should be able to clean the situation by regenerating a self-signed certificate: ```bash yunohost domain cert-install your.domain.tld --self-signed --force ``` -If YunoHost thinks that your domain is badly configured despite the fact that -you checked the DNS configuration and you have access in HTTP to your server -from outside your local network, then you can : +If YunoHost thinks that your domain is badly configured despite the fact that you checked the DNS configuration and you have access in HTTP to your server from outside your local network, then you can: -- add a line `127.0.0.1 your.domain.tld` to the file `/etc/hosts` on your server ; +- add a line `127.0.0.1 your.domain.tld` to the file `/etc/hosts` on your server; - if the certificate installation still doesn't work, you can disable the checks with `--no-checks` after the `cert-install` command. diff --git a/images_ar.md b/pages/01.administrate/05.install/10.images/images.ar.md similarity index 58% rename from images_ar.md rename to pages/01.administrate/05.install/10.images/images.ar.md index f9213a43..9ef16d52 100644 --- a/images_ar.md +++ b/pages/01.administrate/05.install/10.images/images.ar.md @@ -1,7 +1,16 @@ -# الصور +--- +title: الصور +template: docs +taxonomy: + category: docs +routes: + default: '/images' +--- +<div class="hardware-image"> <div id="cards-list"> </div> +</div> <script type="text/template" id="image-template"> <div id="{id}" class="card panel panel-default"> @@ -9,12 +18,12 @@ <h3>{name}</h3> <div class="card-comment">{comment}</div> <div class="card-desc text-center"> -<img src="/images/{image}" height=100 style="vertical-align:middle"> +<img src="/user/images/{image}" height=100 style="vertical-align:middle"> </div> </div> - <div class="annotations"> - <div class="col-sm-6 annotation"><a href="{file}.sha256sum"><span class="glyphicon glyphicon-barcode" aria-hidden="true"></span> Checksum</a></div> - <div class="col-sm-6 annotation"><a href="{file}.sig"><span class="glyphicon glyphicon-tag" aria-hidden="true"></span> Signature</a></div> + <div class="annotations flex-container"> + <div class="flex-child annotation"><a href="{file}.sha256sum">[fa=barcode] Checksum</a></div> + <div class="flex-child annotation"><a href="{file}.sig">[fa=tag] Signature</a></div> </div> <div class="btn-group" role="group"> <a href="{file}" target="_BLANK" type="button" class="btn btn-info col-sm-12"><span class="glyphicon glyphicon-download-alt" aria-hidden="true"></span> تنزيل <small>{version}</small></a> @@ -22,60 +31,6 @@ </div> </script> -<style> -/* -############################################################################### - Style sheet for the cards -############################################################################### -*/ -#cards-list:after { - content:''; - display:block; - clear: both; -} - -.card { - margin-bottom:20px; - width:270px; - float:left; - min-height: 1px; - margin-right: 10px; - margin-left: 10px; -} - -.card .panel-body > h3 { - margin-top:0; - margin-bottom:5px; - font-size:1.2em; -} - -.card-desc { - height:100px; - overflow: hidden; -} - -.card .btn-group { - width:100%; - margin-left: 0px; -} -.card > .btn-group > .btn{ - border-bottom:0; -} -.card > .btn-group { - border-left:0; - border-top-left-radius:0; - border-top-right-radius:0; - margin-left: 0px; -} -.card-comment { - font-size: 0.8em; - margin-top:-5px; -} -.card > .annotations { - text-align:center; - font-size:small; -} -</style> <script> /* diff --git a/pages/01.administrate/05.install/10.images/images.de.md b/pages/01.administrate/05.install/10.images/images.de.md new file mode 100644 index 00000000..7da3a80a --- /dev/null +++ b/pages/01.administrate/05.install/10.images/images.de.md @@ -0,0 +1,79 @@ +--- +title: Vorinstallierte Images +template: docs +taxonomy: + category: docs +routes: + default: '/images' +--- + +<span class="javascriptDisclaimer"> +Für diese Seite muss JavaScript aktiviert sein, damit sie korrekt angezeigt werden kann :s. +<br/> +<br/> +</span> + +N B : Auch wenn das Image nicht der neuesten Version von YunoHost entspricht, können Sie es dennoch verwenden und anschließend ein Systemupdate durchführen. + +<div class="hardware-image"> +<div id="cards-list"> +</div> +</div> + +<script type="text/template" id="image-template"> +<div id="{id}" class="card panel panel-default"> + <div class="panel-body text-center"> + <h3>{name}</h3> + <div class="card-comment">{comment}</div> + <div class="card-desc text-center"> +<img src="/user/images/{image}" height=100 style="vertical-align:middle"> + </div> + </div> + <div class="annotations flex-container"> + <div class="flex-child annotation"><a href="{file}.sha256sum">[fa=barcode] Checksum</a></div> + <div class="flex-child annotation"><a href="{file}.sig">[fa=tag] Signature</a></div> + </div> + <div class="btn-group" role="group"> + <a href="{file}" target="_BLANK" type="button" class="btn btn-info col-sm-12">[fa=download] Download <small>{version}</small></a> + </div> +</div> +</script> + +<script> +/* +############################################################################### + Script that loads the infos from JavaScript and creates the corresponding + cards +############################################################################### +*/ +$(document).ready(function () { + + $(".javascriptDisclaimer").hide(); + + console.log("in load"); + $.getJSON('https://build.yunohost.org/images.json', function (images) { + $.each(images, function(k, infos) { + // Fill the template + html = $('#image-template').html() + .replace('{id}', infos.id) + .replace('{name}', infos.name) + .replace('{comment}', infos.comment || " ") + .replace('{image}', infos.image) + .replace('{version}', infos.version); + + if (infos.file.startsWith("http")) + html = html.replace(/{file}/g, infos.file); + else + html = html.replace(/{file}/g, "https://build.yunohost.org/"+infos.file); + + if ((typeof(infos.has_sig_and_sums) !== 'undefined') && infos.has_sig_and_sums == false) + { + var $html = $(html); + $html.find(".annotations").html(" "); + html = $html[0]; + } + $('#cards-list').append(html); + }); + }); +}); +</script> diff --git a/images_es.md b/pages/01.administrate/05.install/10.images/images.es.md similarity index 60% rename from images_es.md rename to pages/01.administrate/05.install/10.images/images.es.md index 2023334b..e2a89e32 100644 --- a/images_es.md +++ b/pages/01.administrate/05.install/10.images/images.es.md @@ -1,4 +1,11 @@ -# Imagenes +--- +title: Imagenes +template: docs +taxonomy: + category: docs +routes: + default: '/images' +--- <span class="javascriptDisclaimer"> Esta página requiere que Javascript esté instalado par aparecer correctamente :s. @@ -6,10 +13,12 @@ Esta página requiere que Javascript esté instalado par aparecer correctamente <br/> </span> -N.B. : Incluso si la imagen no corresponde con la última versión de Yunohost, puedes utilizarla y actualizarla después de la instalación ! +N.B. : Incluso si la imagen no corresponde con la última versión de YunoHost, puedes utilizarla y actualizarla después de la instalación ! +<div class="hardware-image"> <div id="cards-list"> </div> +</div> <script type="text/template" id="image-template"> <div id="{id}" class="card panel panel-default"> @@ -17,12 +26,12 @@ N.B. : Incluso si la imagen no corresponde con la última versión de Yunohost, <h3>{name}</h3> <div class="card-comment">{comment}</div> <div class="card-desc text-center"> -<img src="/images/{image}" height=100 style="vertical-align:middle"> +<img src="/user/images/{image}" height=100 style="vertical-align:middle"> </div> </div> - <div class="annotations"> - <div class="col-sm-6 annotation"><a href="{file}.sha256sum"><span class="glyphicon glyphicon-barcode" aria-hidden="true"></span> Checksum</a></div> - <div class="col-sm-6 annotation"><a href="{file}.sig"><span class="glyphicon glyphicon-tag" aria-hidden="true"></span> Signature</a></div> + <div class="annotations flex-container"> + <div class="flex-child annotation"><a href="{file}.sha256sum">[fa=barcode] Checksum</a></div> + <div class="flex-child annotation"><a href="{file}.sig">[fa=tag] Signature</a></div> </div> <div class="btn-group" role="group"> <a href="{file}" target="_BLANK" type="button" class="btn btn-info col-sm-12"><span class="glyphicon glyphicon-download-alt" aria-hidden="true"></span> Télécharger <small>{version}</small></a> @@ -30,60 +39,6 @@ N.B. : Incluso si la imagen no corresponde con la última versión de Yunohost, </div> </script> -<style> -/* -############################################################################### - Style sheet for the cards -############################################################################### -*/ -#cards-list:after { - content:''; - display:block; - clear: both; -} - -.card { - margin-bottom:20px; - width:270px; - float:left; - min-height: 1px; - margin-right: 10px; - margin-left: 10px; -} - -.card .panel-body > h3 { - margin-top:0; - margin-bottom:5px; - font-size:1.2em; -} - -.card-desc { - height:100px; - overflow: hidden; -} - -.card .btn-group { - width:100%; - margin-left: 0px; -} -.card > .btn-group > .btn{ - border-bottom:0; -} -.card > .btn-group { - border-left:0; - border-top-left-radius:0; - border-top-right-radius:0; - margin-left: 0px; -} -.card-comment { - font-size: 0.8em; - margin-top:-5px; -} -.card > .annotations { - text-align:center; - font-size:small; -} -</style> <script> /* diff --git a/images_fr.md b/pages/01.administrate/05.install/10.images/images.fr.md similarity index 62% rename from images_fr.md rename to pages/01.administrate/05.install/10.images/images.fr.md index 97b8cf2e..80275d00 100644 --- a/images_fr.md +++ b/pages/01.administrate/05.install/10.images/images.fr.md @@ -1,4 +1,11 @@ -# Images +--- +title: Images +template: docs +taxonomy: + category: docs +routes: + default: '/images' +--- <span class="javascriptDisclaimer"> Cette page requiert que Javascript soit activé pour s'afficher correctement :s. @@ -8,8 +15,10 @@ Cette page requiert que Javascript soit activé pour s'afficher correctement :s. N.B. : Même si l'image ne correspond pas à la dernière version de YunoHost, vous pouvez tout de même l'utiliser puis faire une mise à jour du système après l'installation ! +<div class="hardware-image"> <div id="cards-list"> </div> +</div> <script type="text/template" id="image-template"> <div id="{id}" class="card panel panel-default"> @@ -17,12 +26,12 @@ N.B. : Même si l'image ne correspond pas à la dernière version de YunoHost, v <h3>{name}</h3> <div class="card-comment">{comment}</div> <div class="card-desc text-center"> -<img src="/images/{image}" height=100 style="vertical-align:middle"> +<img src="/user/images/{image}" height=100 style="vertical-align:middle"> </div> </div> - <div class="annotations"> - <div class="col-sm-6 annotation"><a href="{file}.sha256sum"><span class="glyphicon glyphicon-barcode" aria-hidden="true"></span> Checksum</a></div> - <div class="col-sm-6 annotation"><a href="{file}.sig"><span class="glyphicon glyphicon-tag" aria-hidden="true"></span> Signature</a></div> + <div class="annotations flex-container"> + <div class="flex-child annotation"><a href="{file}.sha256sum">[fa=barcode] Checksum</a></div> + <div class="flex-child annotation"><a href="{file}.sig">[fa=tag] Signature</a></div> </div> <div class="btn-group" role="group"> <a href="{file}" target="_BLANK" type="button" class="btn btn-info col-sm-12"><span class="glyphicon glyphicon-download-alt" aria-hidden="true"></span> Télécharger <small>{version}</small></a> @@ -30,60 +39,6 @@ N.B. : Même si l'image ne correspond pas à la dernière version de YunoHost, v </div> </script> -<style> -/* -############################################################################### - Style sheet for the cards -############################################################################### -*/ -#cards-list:after { - content:''; - display:block; - clear: both; -} - -.card { - margin-bottom:20px; - width:270px; - float:left; - min-height: 1px; - margin-right: 10px; - margin-left: 10px; -} - -.card .panel-body > h3 { - margin-top:0; - margin-bottom:5px; - font-size:1.2em; -} - -.card-desc { - height:100px; - overflow: hidden; -} - -.card .btn-group { - width:100%; - margin-left: 0px; -} -.card > .btn-group > .btn{ - border-bottom:0; -} -.card > .btn-group { - border-left:0; - border-top-left-radius:0; - border-top-right-radius:0; - margin-left: 0px; -} -.card-comment { - font-size: 0.8em; - margin-top:-5px; -} -.card > .annotations { - text-align:center; - font-size:small; -} -</style> <script> /* diff --git a/images.md b/pages/01.administrate/05.install/10.images/images.md similarity index 56% rename from images.md rename to pages/01.administrate/05.install/10.images/images.md index be1840bb..323992e1 100644 --- a/images.md +++ b/pages/01.administrate/05.install/10.images/images.md @@ -1,4 +1,11 @@ -# Pre-installed images +--- +title: Pre-installed images +template: docs +taxonomy: + category: docs +routes: + default: '/images' +--- <span class="javascriptDisclaimer"> This page requires Javascript enabled to display properly :s. @@ -8,8 +15,10 @@ This page requires Javascript enabled to display properly :s. N.B. : Even if the image does not corresponds to the latest version of YunoHost, you can still use it and do a regular system upgrade after setting up! +<div class="hardware-image"> <div id="cards-list"> </div> +</div> <script type="text/template" id="image-template"> <div id="{id}" class="card panel panel-default"> @@ -17,82 +26,30 @@ N.B. : Even if the image does not corresponds to the latest version of YunoHost, <h3>{name}</h3> <div class="card-comment">{comment}</div> <div class="card-desc text-center"> -<img src="/images/{image}" height=100 style="vertical-align:middle"> +<img src="/user/images/{image}" height=100 style="vertical-align:middle"> </div> </div> - <div class="annotations"> - <div class="col-sm-6 annotation"><a href="{file}.sha256sum"><span class="glyphicon glyphicon-barcode" aria-hidden="true"></span> Checksum</a></div> - <div class="col-sm-6 annotation"><a href="{file}.sig"><span class="glyphicon glyphicon-tag" aria-hidden="true"></span> Signature</a></div> + <div class="annotations flex-container"> + <div class="flex-child annotation"><a href="{file}.sha256sum">[fa=barcode] Checksum</a></div> + <div class="flex-child annotation"><a href="{file}.sig">[fa=tag] Signature</a></div> </div> <div class="btn-group" role="group"> - <a href="{file}" target="_BLANK" type="button" class="btn btn-info col-sm-12"><span class="glyphicon glyphicon-download-alt" aria-hidden="true"></span> Download <small>{version}</small></a> + <a href="{file}" target="_BLANK" type="button" class="btn btn-info col-sm-12">[fa=download] Download <small>{version}</small></a> </div> </div> </script> -<style> -/* -############################################################################### - Style sheet for the cards -############################################################################### -*/ -#cards-list:after { - content:''; - display:block; - clear: both; -} - -.card { - margin-bottom:20px; - width:270px; - float:left; - min-height: 1px; - margin-right: 10px; - margin-left: 10px; -} - -.card .panel-body > h3 { - margin-top:0; - margin-bottom:5px; - font-size:1.2em; -} - -.card-desc { - height:100px; - overflow: hidden; -} - -.card .btn-group { - width:100%; - margin-left: 0px; -} -.card > .btn-group > .btn{ - border-bottom:0; -} -.card > .btn-group { - border-left:0; - border-top-left-radius:0; - border-top-right-radius:0; - margin-left: 0px; -} -.card-comment { - font-size: 0.8em; - margin-top:-5px; -} -.card > .annotations { - text-align:center; - font-size:small; -} -</style> - <script> /* ############################################################################### - Script that loads the infos from javascript and creates the corresponding + Script that loads the infos from JavaScript and creates the corresponding cards ############################################################################### */ $(document).ready(function () { + + $(".javascriptDisclaimer").hide(); + console.log("in load"); $.getJSON('https://build.yunohost.org/images.json', function (images) { $.each(images, function(k, infos) { diff --git a/pages/01.administrate/05.install/install.fr.md b/pages/01.administrate/05.install/install.fr.md new file mode 100644 index 00000000..f6d22431 --- /dev/null +++ b/pages/01.administrate/05.install/install.fr.md @@ -0,0 +1,610 @@ +--- +title: Installer YunoHost +template: docs +taxonomy: + category: docs +never_cache_twig: true +twig_first: true +process: + markdown: true + twig: true +page-toc: + active: true + depth: 2 +routes: + default: '/install' + aliases: + - '/docker' + - '/install_iso' + - '/install_on_vps' + - '/install_manually' + - '/install_on_raspberry' + - '/install_on_arm_board' + - '/install_on_debian' + - '/install_on_virtualbox' + - '/plug_and_boot' + - '/burn_or_copy_iso' + - '/boot_and_graphical_install' + - '/postinstall' +--- +{% set image_type = 'YunoHost' %} +{% set arm, at_home, regular, rpi2plus, rpi1, rpi0, arm_sup, arm_unsup, vps, vps_debian, vps_ynh, virtualbox, internetcube, docker = false, false, false, false, false, false, false, false, false, false, false, false, false, false %} +{% set hardware = uri.param('hardware') %} + +{% if hardware == 'regular' %} + {% set regular = true %} +{% elseif hardware == 'internetcube' %} + {% set arm, arm_sup, internetcube = true, true, true %} + {% set image_type = 'La Brique Internet' %} +{% elseif hardware == 'rpi2plus' %} + {% set arm, rpi2plus = true, true %} +{% elseif hardware == 'rpi1' %} + {% set arm, rpi1 = true, true %} +{% elseif hardware == 'rpi0' %} + {% set arm, rpi0 = true, true %} +{% elseif hardware == 'arm_sup' %} + {% set arm, arm_sup = true, true %} +{% elseif hardware == 'arm_unsup' %} + {% set arm, arm_unsup = true, true %} + {% set image_type = 'Armbian' %} +{% elseif hardware == 'vps_debian' %} + {% set vps, vps_debian = true, true %} +{% elseif hardware == 'vps_ynh' %} + {% set vps, vps_ynh = true, true %} +{% elseif hardware == 'virtualbox' %} + {% set at_home, virtualbox = true, true %} +{% elseif hardware == 'docker' %} + {% set docker = true %} +{% endif %} + +{% if arm or regular %} + {% set at_home = true %} +{% endif %} + +Sélectionnez le matériel sur lequel vous souhaitez installer YunoHost : +[div class="flex-container"] + +[div class="flex-child hardware{%if virtualbox %} active{% endif %}"] +[[figure caption="VirtualBox"][/figure]](/install/hardware:virtualbox) +[/div] + +[div class="flex-child hardware{%if rpi2plus or rpi1 or rpi0 %} active{% endif %}"] +[[figure caption="Raspberry Pi"][/figure]](/install/hardware:rpi2plus) +[/div] + +[div class="flex-child hardware{%if arm_sup or arm_unsup or internetcube %} active{% endif %}"] +[[figure caption="Carte ARM"][/figure]](/install/hardware:arm_sup) +[/div] + +[div class="flex-child hardware{%if regular %} active{% endif %}"] +[[figure caption="Ordinateur standard"][/figure]](/install/hardware:regular) +[/div] + +[div class="flex-child hardware{%if vps_debian or vps_ynh %} active{% endif %}"] +[[figure caption="Serveur distant"][/figure]](/install/hardware:vps_debian) +[/div] + +[/div] +[div class="flex-container pt-2"] + +{% if rpi2plus or rpi1 or rpi0 %} +[div class="flex-child hardware{%if rpi2plus %} active{% endif %}"] +[[figure caption="Raspberry Pi 2, 3 ou 4"][/figure]](/install/hardware:rpi2plus) +[/div] + +[div class="flex-child hardware{%if rpi1 %} active{% endif %}"] +[[figure caption="Raspberry Pi 1"][/figure]](/install/hardware:rpi1) +[/div] + +[div class="flex-child hardware{%if rpi0 %} active{% endif %}"] +[[figure caption="Raspberry Pi zero"][/figure]](/install/hardware:rpi0) +[/div] +{% elseif arm_sup or arm_unsup or internetcube %} + +[div class="flex-child hardware{%if internetcube %} active{% endif %}"] +[[figure caption="La Brique Internet avec un VPN"][/figure]](/install/hardware:internetcube) +[/div] + +[div class="flex-child hardware{%if arm_sup and not internetcube %} active{% endif %}"] +[[figure caption="Olinuxino lime1&2 ou Orange Pi PC+"][/figure]](/install/hardware:arm_sup) +[/div] + +[div class="flex-child hardware{%if arm_unsup %} active{% endif %}"] +[[figure caption="Autres cartes ARM"][/figure]](/install/hardware:arm_unsup) +[/div] +{% elseif vps_debian or vps_ynh %} + +[div class="flex-child hardware{%if vps_debian %} active{% endif %}"] +[[figure caption="VPS ou serveur dédié avec Debian 10"][/figure]](/install/hardware:vps_debian) +[/div] + +[div class="flex-child hardware{%if vps_ynh %} active{% endif %}"] +[[figure caption="VPS ou serveur dédié avec YunoHost pre-installé"][/figure]](/install/hardware:vps_ynh) +[/div] + +{% endif %} + +[/div] + + +{% if hardware != '' %} + +{% if docker %} +!! **YunoHost ne supporte plus officiellement Docker depuis les problèmes rencontrés avec la version 2.4+. En cause, YunoHost dépend désormais de systemd et Docker a décidé qu’il ne le supporterait pas nativement (et il y a d'autres problèmes liés au firewall et aux services).** +!! +!! **Nous vous décourageons fortement d'utiliser YunoHost sur docker avec ces images** + +## Images communautaires + +Cependant, ces images communautaires existent et sont disponibles sur Docker Hub: + + * [AMD64 (classic) (YunoHost 4.x)](https://hub.docker.com/r/domainelibre/yunohost/) + * [I386 (old computers) (YunoHost 4.x)](https://hub.docker.com/r/domainelibre/yunohost-i386/) + * [ARM64V8 (Raspberry Pi 4) (YunoHost 4.x)](https://hub.docker.com/r/cms0/yunohost/) + * [ARMV7 (Raspberry Pi 2/3 ...) (YunoHost 4.x)](https://hub.docker.com/r/domainelibre/yunohost-arm/) + * [ARMV6 (Raspberry Pi 1) (ancienne version de YunoHost)](https://hub.docker.com/r/tuxalex/yunohost-armv6/) +{% else %} + + +## [fa=list-alt /] Pré-requis + +{% if regular %} +* Un matériel compatible x86 dédié à YunoHost : portable, netbook, ordinateur avec 512Mo de RAM et 16Go de capacité de stockage (au moins) ; +{% elseif rpi2plus %} +* Un Raspberry Pi 2, 3 ou 4 ; +{% elseif rpi1 %} +* Un Raspberry Pi 1 avec au moins 512Mo de RAM ; +{% elseif rpi0 %} +* Un Raspberry Pi zero ; +{% elseif internetcube %} +* Un Orange Pi PC+ ou une Olinuxino Lime 1 ou 2 ; +* Un VPN avec une IP publique dédiée et un fichier `.cube` ; +{% elseif arm_sup %} +* Un Orange Pi PC+ ou une Olinuxino Lime 1 ou 2 ; +{% elseif arm_unsup %} +* Une carte ARM avec au moins 512Mo de RAM ; +{% elseif vps_debian %} +* Un serveur dédié ou virtuel avec Debian 10 (Buster) pré-installé <small>(avec un **kernel >= 3.12**)</small>, 512Mo de RAM et 16Go de capacité de stockage (au moins) ; +{% elseif vps_ynh %} +* Un serveur dédié ou virtuel avec YunoHost pré-installé, 512Mo de RAM et 16Go de capacité de stockage (au moins) ; +{% elseif virtualbox %} +* Un ordinateur x86 avec [VirtualBox installé](https://www.virtualbox.org/wiki/Downloads) et assez de RAM disponible pour lancer une petite machine virtuelle avec 1024Mo de RAM et 8Go de capacité de stockage (au moins) ; +{% endif %} +{% if arm %} +* Une alimentation électrique (soit un adaptateur, soit un cable microUSB) pour alimenter la carte ; +* Une carte microSD : 16Go de capacité (au moins), [classe « A1 »](https://fr.wikipedia.org/wiki/Carte_SD#Vitesse) hautement recommandée (comme par exemple [cette carte SanDisk A1](https://www.amazon.fr/SanDisk-microSDHC-Adaptateur-homologu%C3%A9e-Nouvelle/dp/B073JWXGNT/)) ; +{% endif %} +{% if regular %} +* Une clé USB avec au moins 1Go de capacité OU un CD vierge standard ; +{% endif %} +{% if at_home %} +* Un [fournisseur d'accès internet correct](/isp), de préférence avec une bonne vitesse d’upload ; +{% if rpi0 %} +* Un câble OTG ou un adaptateur Wifi USB pour connecter votre Raspberry Pi Zero ; +{% elseif not virtualbox %} +* Un câble ethernet/RJ-45 pour brancher la carte à votre routeur/box internet ; +{% endif %} +* Un ordinateur pour lire ce guide, flasher l'image et accéder à votre serveur. +{% endif %} +{% if not at_home %} +* Un ordinateur ou un smartphone pour lire ce guide et accéder à votre serveur. +{% endif %} + +{% if virtualbox %} +! N.B. : Installer YunoHost dans une VirtualBox est utile pour tester la distribution. Pour réellement s'autohéberger sur le long terme, il vous faudra probablement une machine physique (vieil ordinateur, carte ARM...) ou un serveur en ligne. +{% endif %} + + + + +{% if vps_ynh %} +## Fournisseurs de VPS YunoHost +Ci-dessous une liste de fournisseurs de VPS supportant nativement YunoHost : + +[div class="flex-container"] + +[div class="flex-child"] +[[figure caption="Alsace Réseau Neutre - FR"][/figure]](https://vps.arn-fai.net) +[/div] + +[/div] +{% endif %} + + +{% if at_home %} +## [fa=download /] Télécharger l'image {{image_type}} + +{% if virtualbox or regular %} +!!! Si votre hôte est en 32 bits, faite bien attention à télécharger l'image 32 bits. +{% elseif arm_unsup %} +<a href="https://www.armbian.com/download/" target="_BLANK" type="button" class="btn btn-info col-sm-12">[fa=external-link] Télécharger l'image pour votre carte sur le site d'Armbian</a> + +!!! N.B.: il vous faut télécharger l'image Armbian Buster. +{% endif %} + + +<div class="hardware-image"> +<div id="cards-list"> +</div> +</div> +<script type="text/template" id="image-template"> +<div id="{id}" class="card panel panel-default"> + <div class="panel-body text-center pt-2"> + <h3>{name}</h3> + <div class="card-comment">{comment}</div> + <div class="card-desc text-center"> +<img src="/user/images/{image}" height=100 style="vertical-align:middle"> + </div> + </div> + <div class="annotations flex-container"> + <div class="flex-child annotation"><a href="{file}.sha256sum">[fa=barcode] Somme de contrôle</a></div> + <div class="flex-child annotation"><a href="{file}.sig">[fa=tag] Signature</a></div> + </div> + <div class="btn-group" role="group"> + <a href="{file}" target="_BLANK" type="button" class="btn btn-info col-sm-12">[fa=download] Télécharger <small>{version}</small></a> + </div> +</div> +</script> +<script> +var hardware = "{{ hardware|escape('js') }}"; +/* +############################################################################### + Script that loads the infos from JavaScript and creates the corresponding + cards +############################################################################### +*/ +$(document).ready(function () { + console.log("in load"); + $.getJSON('https://build.yunohost.org/images.json', function (images) { + $.each(images, function(k, infos) { + if (infos.tuto.indexOf(hardware) == -1) return; + // Fill the template + html = $('#image-template').html() + .replace('{id}', infos.id) + .replace('{name}', infos.name) + .replace('{comment}', infos.comment || " ") + .replace('{image}', infos.image) + .replace('{version}', infos.version); + + if (infos.file.startsWith("http")) + html = html.replace(/{file}/g, infos.file); + else + html = html.replace(/{file}/g, "https://build.yunohost.org/"+infos.file); + + if ((typeof(infos.has_sig_and_sums) !== 'undefined') && infos.has_sig_and_sums == false) + { + var $html = $(html); + $html.find(".annotations").html(" "); + html = $html[0]; + } + $('#cards-list').append(html); + }); + }); +}); +</script> + + + + + + +{% if not virtualbox %} + +{% if arm %} +##  Flasher l'image {{image_type}} +{% else %} +##  Flasher l'image YunoHost +{% endif %} + +Maintenant que vous avez téléchargé l’image de {{image_type}}, vous devez la mettre sur {% if arm %}une carte microSD{% else %}une clé USB ou un CD/DVD.{% endif %} + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="(Recommandé) Avec Etcher"] + +Téléchargez <a href="https://www.balena.io/etcher/" target="_blank">Etcher</a> pour votre système d'exploitation et installez-le. + +Branchez votre {% if arm %}carte microSD{% else %}clé USB{% endif %}, sélectionnez votre image et cliquez sur « Flash ». + + + +[/ui-tab] +[ui-tab title="Avec USBimager"] + +Téléchargez [USBimager](https://bztsrc.gitlab.io/usbimager/) pour votre système d'exploitation et installez-le. + +Branchez votre {% if arm %}carte microSD{% else %}clé USB{% endif %}, sélectionnez votre image et cliquez sur « Write ». + + + +[/ui-tab] +[ui-tab title="Avec dd"] + +Si vous êtes sur GNU/Linux / macOS et que vous êtes familier avec la ligne de commande, il est possible de flasher la clef USB ou carte SD avec dd. Vous pouvez identifier le nom du périphérique avec `fdisk -l` ou `lsblk`. Une carte SD s'appelle typiquement `/dev/mmcblk0`. ATTENTION à faire attention de prendre le bon nom ! + +Ensuite lancez : + +```bash +# Remplacez /dev/mmcblk0 si le nom de votre périphérique est différent... +dd if=/path/to/yunohost.img of=/dev/mmcblk0 +``` + +[/ui-tab] +{% if regular %} +[ui-tab title="Copier un CD/DVD"] +Pour les anciens matériels, il vous faut peut-être utiliser un CD/DVD. Le logiciel à utiliser est différent suivant votre système d’exploitation. + +* Sur Windows, utilisez [ImgBurn](http://www.imgburn.com/) pour écrire l’image sur le disque + +* Sur macOS, utilisez [Disk Utility](http://support.apple.com/kb/ph7025) + +* Sur GNU/Linux, vous avez plusieurs choix, tels que [Brasero](https://wiki.gnome.org/Apps/Brasero) ou [K3b](http://www.k3b.org/) + +[/ui-tab] +{% endif %} +[/ui-tabs] + +{% else %} + +## Créer une nouvelle machine virtuelle + + + +! Ce n'est pas grave si seulement la version 32-bit est disponible, mais dans ce cas soyez sûr d'avoir téléchargé l'image 32 bit précédemment. + +## Modifier la configuration réseau + +! Cette étape est importante pour exposer proprement la machine virtuelle sur le réseau. + +Allez dans **Réglages** > **Réseau** : + +* Sélectionnez `Accès par pont` +* Choisissez votre interface selon son nom : + **wlan0** si vous êtes connecté sans-fil, **eth0** ou **eno1** sinon. + + + +{% endif %} + + + + + + + + + +{% if arm %} +## [fa=plug /] Démarrer la carte + +* Branchez le câble ethernet (un côté sur votre box, l'autre côté à votre carte). + * Pour les utilisateurs et utilisatrices souhaitant configurer la carte pour la connecter via le WiFi à la place, voir [cet exemple](https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md). +* Mettez la carte SD dans le serveur. +* (Faculatif) Il est possible de brancher un écran et clavier sur votre serveur en cas de soucis ou pour vérifier que le processus de démarrage (boot) se passe bien ou encore pour avoir un accès direct en console. +* Branchez l'alimentation. +* Laissez quelques minutes à votre serveur pour s'autoconfigurer durant le premier démarrage. +* Assurez-vous que votre ordinateur (de bureau ou portable) est connecté au même réseau local (c'est-à-dire la même box internet) que votre serveur. + +{% elseif virtualbox %} +## [fa=plug /] Lancer la machine virtuelle + +Démarrez votre machine virtuelle après avoir sélectionné l'image YunoHost. + + + +! Si vous rencontrez l'erreur "VT-x is not available", il vous faut probablement activer (enable) la virtualisation dans les options du BIOS de votre ordinateur. + +{% else %} +## [fa=plug /] Démarrer la machine sur la clé USB + +* Branchez le câble ethernet (un côté à votre box, de l'autre côté à votre carte). +* Démarrez votre serveur avec la clé USB ou le CD-ROM inséré, et sélectionnez-le comme **périphérique de démarrage (bootable device)** en pressant l’une des touches suivantes (dépendant de votre ordinateur) : +`<ESC>`, `<F9>`, `<F10>`, `<F11>`, `<F12>` or `<DEL>`. + * N.B. : si le serveur était précédemment installé avec une version récente de Windows (8+), vous devez d'abord demander à Windows de « redémarrer réellement ». Vous pouvez le faire dans une oiption du menu « Options de démarrage avancées ». +{% endif %} + +{% if regular or virtualbox %} +## [fa=rocket /] Lancer l’installation graphique + +!! N.B. : L'installation effacera totalement les données sur votre disque dur ! + +Vous devriez voir un écran comme ça : + +[figure class="nomargin" caption="Capture d'écran du menu de l'ISO"] + +[/figure] + + 1. Sélectionnez `Graphical install` + 2. Sélectionnez votre langue, votre localisation et votre agencement de clavier. + 3. L'installateur va ensuite télécharger les paquets requis et les installer. + +{% endif %} + + +{% if rpi1 or rpi0 %} +## [fa=bug /] Se connecter à la carte et corriger l'image +Les Raspberry Pi 1 et 0 ne sont pas totalement supportés à cause de [problèmes de compilation pour cette architecture](https://github.com/YunoHost/issues/issues/1423). + +Cependant, il est possible de corriger l'image par vous-même avant de lancer la configuration initiale. + +Pour y parvenir, vous devez vous connectez à votre Raspberry Pi en tant que root [via SSH](/ssh) avec le mot de passe temporaire `yunohost`: +``` +ssh root@yunohost.local +``` + +Ensuite, lancez les commandes suivantes pour contourner le dysfonctionnement de metronome : +``` +mv /usr/bin/metronome{,.bkp} +mv /usr/bin/metronomectl{,.bkp} +ln -s /usr/bin/true /usr/bin/metronome +ln -s /usr/bin/true /usr/bin/metronomectl +``` + +Et celle-ci pour contourner celui de upnpc : +``` +sed -i 's/import miniupnpc/#import miniupnpc/g' /usr/lib/moulinette/yunohost/firewall.py +``` + +! Cette dernière commande nécessite d'être lancée après chaque mise à jour de YunoHost :/ + +{% elseif arm_unsup %} +## [fa=terminal /] Se connecter à la carte + +Ensuite, il vous faut [trouver l'adresse IP locale de votre serveur](/finding_the_local_ip) pour vous connecter en tant que root [via SSH](/ssh) avec le mot de passe temporaire `1234`. + +``` +ssh root@192.168.x.xxx +``` + +{% endif %} + +{% endif %} + + +{% if vps_debian or arm_unsup %} +## [fa=rocket /] Lancer le script d'installation + +- Ouvrez la ligne de commande sur votre serveur (soit directement, soit avec [SSH](/ssh)) +- Assurez-vous d'être connecté en tant que root (ou tapez `sudo -i` pour le devenir) +- Lancez la commande suivante : + +```bash +curl https://install.yunohost.org | bash +``` +!!! Si `curl` n'est pas installé sur votre système, il vous faudra peut-être l'installer avec `apt install curl`. +!!! Autrement, si la commande n'affiche rien du tout, vous pouvez tenter `apt install ca-certificates` + +!!! **Note pour les utilisateurs avancés inquiets à propos de l'approche `curl|bash` :** prenez le temps de lire ["Is curl|bash insecure?"](https://sandstorm.io/news/2015-09-24-is-curl-bash-insecure-pgp-verified-install) sur le blog de Sandstorm, et possiblement [cette discussion sur Hacker News](https://news.ycombinator.com/item?id=12766350&noprocess). + +{% endif %} + + +## [fa=cog /] Lancer la configuration initiale + +!!! Si vous êtes en train de restaurer une sauvegarde YunoHost, vous devez sauter cette étape et vous référer à la section [Restaurer durant la postinstallation à la place de cette étape de configuration initiale](/backup#restoring-during-the-postinstall). + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="À partir de l'interface web"] +{%if at_home %} +Dans un navigateur web, tapez dans la barre d'adresse **{% if internetcube %}`https://internetcube.local`{% else %}`https://yunohost.local`{% endif %}**. + +!!! Si ça ne fonctionne pas, vous devez [chercher l'adresse IP locale du serveur](/finding_the_local_ip). L'adresse ressemble typiquement à `192.168.x.y`, et vous devriez taper `https://192.168.x.y` dans la barre d'adresse du navigateur. +{% else %} +Vous pouvez lancer la configuration initiale à partir du navigateur en tapant l'**adresse IP publique de votre serveur**. Généralement, votre fournisseur de VPS vous indique l'IP dans un mail ou sur sa console de gestion. +{% endif %} + +! Lors de la première visite, vous rencontrerez très probablement un avertissement de sécurité lié au certificat utilisé. Pour le moment, votre serveur utilise un certificat auto-signé. Vous pourrez plus tard ajouter un certificat automatiquement reconnus par les navigateurs comme décrit dans [la page sur les certificats](/certificate). En attendant, ajoutez une exception de sécurité pour accepter le certificat actuel. Toutefois, **s'il vous plaît**, ne prenez pas l'habitude d'accepter ce genre d'alerte de sécurité ! + +{% if not internetcube %} +Vous devriez ensuite obtenir cette page : + +[figure class="nomargin" caption="Capture d'écran de la page de configuration initiale"] + +[/figure] + +{% endif %} +[/ui-tab] +[ui-tab title="À partir de la ligne de commande"] + +Vous pouvez aussi lancer la post-installation avec la commande `yunohost tools postinstall` directement sur le serveur ou [via SSH](/ssh). + +[figure class="nomargin" caption="Capture d'écran de la configuration initiale en ligne de commande"] + +[/figure] + +[/ui-tab] +[/ui-tabs] + +{% if not internetcube %} + +##### [fa=globe /] Domaine principal + +C’est le nom de domaine qui permettra l’accès à votre serveur ainsi qu’au **portail d’authentification** des utilisateurs. Vous pourrez ensuite ajouter d'autres domaines, et changer celui qui sera le domaine principal si besoin. + +* Si l'auto-hébergement est tout neuf pour vous et que vous n'avez pas encore de nom de domaine, nous recommandons d'utiliser un domaine en **.nohost.me** / **.noho.st** / **.ynh.fr** (exemple : `homersimpson.nohost.me`). S'il n'est pas déjà utilisé, le domaine sera automatiquement rattaché à votre serveur YunoHost, et vous n’aurez pas d’étape de configuration supplémentaire. Toutefois, notez que l'utilisation d'un de ces noms de domaines implique que vous n'aurez pas le contôle complet sur votre configuration DNS. + +* Si en revanche vous avez déjà votre propre nom de domaine, vous souhaitez probablement l'utiliser. Vous aurez donc besoin ensuite de configurer les enregistrements DNS comme expliqué [ici](/dns_config). + +!!! Oui, vous *devez* configurer un nom de domaine. Si vous n'avez pas de nom de domaine et que vous n'en voulez pas en **.nohost.me**, **.noho.st** ou **.ynh.fr**, vous pouvez utilisez un « faux » domaine comme par exemple `yolo.test` et modifier votre fichier `/etc/hosts` pour que ce domaine pointe vers l'IP de votre serveur, comme expliqué [ici](/dns_local_network). + +##### [fa=key /] Mot de passe d’administration +C’est le mot de passe qui vous permettra d’accéder à l’interface d’administration de votre serveur. Vous pourrez également l’utiliser pour vous connecter à distance [via SSH](/ssh), ou [en SFTP](/filezilla) pour transférer des fichiers. De manière générale, c’est la **clé d’entrée à votre système**, pensez donc à la choisir attentivement. + +## [fa=user /] Créer un premier utilisateur + +Une fois la configuration initiale faite, vous devriez être capable de vous connecter à l'interface d'administration web en utilisant le mot de passe d'administration. + +Bien que votre serveur dispose maintenant d'un utilisateur `admin`, cet utilisateur `admin` n'est pas un utilisateur "standard" et ne peut pas se connecter sur le [portail utilisateur](/users). + +Par conséquent, vous devriez ajouter un premier utilisateur « standard ». + +!!! Le premier utilisateur que vous créez est un peu spécial : il recevra les emails envoyés à `root@votredomaine.tld` et `admin@votredomaine.tld`. Ces emails peuvent être utilisés pour envoyer des informations ou des alertes techniques. + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="A partir de l'interface web"] + +Allez dans `Users > Add` + +TODO: add a screenshot +[/ui-tab] +[ui-tab title="A partir de la ligne de commande"] +``` +yunohost user create johndoe +``` +TODO : copypasta an actual shell session will all info asked etc.. + +[/ui-tab] +[/ui-tabs] +{% endif %} + +## [fa=stethoscope /] Lancer le diagnostic + +Le système de diagnostic est conçu pour fournir un moyen facile de valider que tous les aspects critiques de votre serveur sont proprement configurés et pour vous guider dans la résolution des problèmes soulevés. Le diagnostic se lance deux fois par jour et envoie une alerte si un dysfonctionnement est détecté. + +!!! N.B. : **ne partez pas en courant** ! La première fois que vous lancerez le diagnostic, il est assez normal d'avoir plusieurs alertes rouges ou jaunes car vous devez généralement [configurer les enregistrements DNS](/dns_config) (si vous n'utilisez pas un domaine `.nohost.me`, `.noho.st` ou `.ynh.fr`), ajouter un fichier de swap {%if at_home %} et/ou [configurer la redirection des ports](/isp_box_config){% endif %}. + +!!! Si une alerte n'est pas pertinente (par exemple parce que vous ne pensez pas utiliser une fonctionnalité spécifique), il est tout à fait convenable d'indiquer le dysfonctionnement comme « À ignorer » en allant dans l'administration web > Diagnostic, et en cliquant sur bouton « Ignorer » pour ce dysfonctionnement spécifique. + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="(Recommandé) A partir de l'interface web"] +Pour lancer le diagnostic, allez dans l'Administration Web dans la partie Diagnostic. Vous devriez obtenir un écran comme celui-ci : + +[figure class="nomargin" caption="Capture d'écran du panneau de diagnostic"] + +[/figure] + +[/ui-tab] +[ui-tab title="A partir de la ligne de commande"] +``` +yunohost diagnosis run +yunohost diagnosis show --issues --human-readable +``` +[/ui-tab] +[/ui-tabs] + +## [fa=lock /] Obtenir un certificat Let's Encrypt + +Une fois que vous avez configuré, si nécessaire, les enregistrements DNS et la redirection de ports, vous devriez être en mesure d'installer un certificat Let's Encrypt. Ceci permettra de supprimer l'étrange alerte de sécurité vue plus tôt. + +Pour plus d'instructions détaillées, ou pour en savoir plus à propos des certificats SSL/TLS, voir [la page correspondante ici](/certificate). + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="A partir de l'interface web"] + +[figure class="nomargin" caption="Capture d'écran du panneau pour installer un certificat Let's Encrypt"] + +[/figure] + +[/ui-tab] +[ui-tab title="A partir de la ligne de commande"] +``` +yunohost domain cert-install +``` +[/ui-tab] +[/ui-tabs] +{% endif %} + +##  Félicitations ! + +Vous avez maintenant un serveur plutôt bien configuré. Si vous découvrez YunoHost, nous vous recommandons de jeter un oeil à [la visite guidée](/overview). Vous devriez aussi être en mesure d'[installer vos applications favorites](/apps). N'oubliez pas de [prévoir des sauvegardes](/backup) ! + +{% endif %} diff --git a/pages/01.administrate/05.install/install.md b/pages/01.administrate/05.install/install.md new file mode 100644 index 00000000..c893de41 --- /dev/null +++ b/pages/01.administrate/05.install/install.md @@ -0,0 +1,611 @@ +--- +title: Install YunoHost +template: docs +taxonomy: + category: docs +never_cache_twig: true +twig_first: true +process: + markdown: true + twig: true +page-toc: + active: true + depth: 2 +routes: + default: '/install' + aliases: + - '/docker' + - '/install_iso' + - '/install_on_vps' + - '/install_manually' + - '/install_on_raspberry' + - '/install_on_arm_board' + - '/install_on_debian' + - '/install_on_virtualbox' + - '/plug_and_boot' + - '/burn_or_copy_iso' + - '/boot_and_graphical_install' + - '/postinstall' +--- +{% set image_type = 'YunoHost' %} +{% set arm, at_home, regular, rpi2plus, rpi1, rpi0, arm_sup, arm_unsup, vps, vps_debian, vps_ynh, virtualbox, internetcube, docker = false, false, false, false, false, false, false, false, false, false, false, false, false, false %} +{% set hardware = uri.param('hardware') %} + +{% if hardware == 'regular' %} + {% set regular = true %} +{% elseif hardware == 'internetcube' %} + {% set arm, arm_sup, internetcube = true, true, true %} + {% set image_type = 'Internet Cube' %} +{% elseif hardware == 'rpi2plus' %} + {% set arm, rpi2plus = true, true %} +{% elseif hardware == 'rpi1' %} + {% set arm, rpi1 = true, true %} +{% elseif hardware == 'rpi0' %} + {% set arm, rpi0 = true, true %} +{% elseif hardware == 'arm_sup' %} + {% set arm, arm_sup = true, true %} +{% elseif hardware == 'arm_unsup' %} + {% set arm, arm_unsup = true, true %} + {% set image_type = 'Armbian' %} +{% elseif hardware == 'vps_debian' %} + {% set vps, vps_debian = true, true %} +{% elseif hardware == 'vps_ynh' %} + {% set vps, vps_ynh = true, true %} +{% elseif hardware == 'virtualbox' %} + {% set at_home, virtualbox = true, true %} +{% elseif hardware == 'docker' %} + {% set docker = true %} +{% endif %} + +{% if arm or regular %} + {% set at_home = true %} +{% endif %} + +Select the hardware on which you want install YunoHost : +[div class="flex-container"] + +[div class="flex-child hardware{%if virtualbox %} active{% endif %}"] +[[figure caption="VirtualBox"][/figure]](/install/hardware:virtualbox) +[/div] + +[div class="flex-child hardware{%if rpi2plus or rpi1 or rpi0 %} active{% endif %}"] +[[figure caption="Raspberry Pi"][/figure]](/install/hardware:rpi2plus) +[/div] + +[div class="flex-child hardware{%if arm_sup or arm_unsup or internetcube %} active{% endif %}"] +[[figure caption="ARM board"][/figure]](/install/hardware:arm_sup) +[/div] + +[div class="flex-child hardware{%if regular %} active{% endif %}"] +[[figure caption="Regular computer"][/figure]](/install/hardware:regular) +[/div] + +[div class="flex-child hardware{%if vps_debian or vps_ynh %} active{% endif %}"] +[[figure caption="Remote server"][/figure]](/install/hardware:vps_debian) +[/div] + +[/div] +[div class="flex-container pt-2"] + +{% if rpi2plus or rpi1 or rpi0 %} +[div class="flex-child hardware{%if rpi2plus %} active{% endif %}"] +[[figure caption="Raspberry Pi 2, 3 or 4"][/figure]](/install/hardware:rpi2plus) +[/div] + +[div class="flex-child hardware{%if rpi1 %} active{% endif %}"] +[[figure caption="Raspberry Pi 1"][/figure]](/install/hardware:rpi1) +[/div] + +[div class="flex-child hardware{%if rpi0 %} active{% endif %}"] +[[figure caption="Raspberry Pi zero"][/figure]](/install/hardware:rpi0) +[/div] +{% elseif arm_sup or arm_unsup or internetcube %} + +[div class="flex-child hardware{%if internetcube %} active{% endif %}"] +[[figure caption="Internet cube With VPN"][/figure]](/install/hardware:internetcube) +[/div] + +[div class="flex-child hardware{%if arm_sup and not internetcube %} active{% endif %}"] +[[figure caption="Olinuxino lime1&2 or Orange Pi PC+"][/figure]](/install/hardware:arm_sup) +[/div] + +[div class="flex-child hardware{%if arm_unsup %} active{% endif %}"] +[[figure caption="Others boards"][/figure]](/install/hardware:arm_unsup) +[/div] +{% elseif vps_debian or vps_ynh %} + +[div class="flex-child hardware{%if vps_debian %} active{% endif %}"] +[[figure caption="VPS or dedicated server with Debian 10"][/figure]](/install/hardware:vps_debian) +[/div] + +[div class="flex-child hardware{%if vps_ynh %} active{% endif %}"] +[[figure caption="VPS or dedicated server with YunoHost pre-installed"][/figure]](/install/hardware:vps_ynh) +[/div] + +{% endif %} + +[/div] + + +{% if hardware != '' %} + +{% if docker %} +!! **YunoHost doesn’t support Docker officially since issues with versions 2.4+. In question, YunoHost 2.4+ doesn’t work anymore on Docker because YunoHost requires systemd and Docker has chosen to not support it natively (and there are other problems link to the firewall and services).** +!! +!! **We strongly discourage you to run YunoHost on docker with those images** + +## Community images + +However, community images exist and are available on Docker Hub: + + * [AMD64 (classic) (YunoHost 4.x)](https://hub.docker.com/r/domainelibre/yunohost/) + * [I386 (old computers) (YunoHost 4.x)](https://hub.docker.com/r/domainelibre/yunohost-i386/) + * [ARM64V8 (Raspberry Pi 4) (YunoHost 4.x)](https://hub.docker.com/r/cms0/yunohost/) + * [ARMV7 (Raspberry Pi 2/3 ...) (YunoHost 4.x)](https://hub.docker.com/r/domainelibre/yunohost-arm/) + * [ARMV6 (Raspberry Pi 1) (old yunoHost version)](https://hub.docker.com/r/tuxalex/yunohost-armv6/) +{% else %} + + +## [fa=list-alt /] Pre-requisites + +{% if regular %} +* A x86-compatible hardware dedicated to YunoHost: laptop, nettop, netbook, desktop with 512MB RAM and 16GB capacity (at least) +{% elseif rpi2plus %} +* A Raspberry Pi 2, 3 or 4 +{% elseif rpi1 %} +* A Raspberry Pi 1 with at least 512MB RAM +{% elseif rpi0 %} +* A Raspberry Pi zero +{% elseif internetcube %} +* An Orange Pi PC+ or an Olinuxino Lime 1 or 2 +* A VPN with a dedicated public IP and a `.cube` file +{% elseif arm_sup %} +* An Orange Pi PC+ or an Olinuxino Lime 1 or 2 +{% elseif arm_unsup %} +* An ARM board with at least 512MB RAM +{% elseif vps_debian %} +* A dedicated or virtual private server with Debian 10 (Buster) <small>(with **kernel >= 3.12**)</small> preinstalled, 512MB RAM and 16GB capacity (at least) +{% elseif vps_ynh %} +* A dedicated or virtual private server with yunohost preinstalled, 512MB RAM and 16GB capacity (at least) +{% elseif virtualbox %} +* An x86 computer with [VirtualBox installed](https://www.virtualbox.org/wiki/Downloads) and enough RAM capacity to be able to run a small virtual machine with 1024MB RAM and 8GB capacity (at least) +{% endif %} +{% if arm %} +* A power supply (either an adapter or a MicroUSB cable) for your board; +* A microSD card: 16GB capacity (at least), [class "A1"](https://en.wikipedia.org/wiki/SD_card#Class) highly recommended (such as [this SanDisk A1 card](https://www.amazon.fr/SanDisk-microSDHC-Adaptateur-homologu%C3%A9e-Nouvelle/dp/B073JWXGNT/)); +{% endif %} +{% if regular %} +* A USB stick with at least 1GB capacity OR a standard blank CD +{% endif %} +{% if at_home %} +* A [reasonable ISP](/isp), preferably with a good and unlimited upstream bandwidth +{% if rpi0 %} +* An usb OTG or a wifi dongle to connect your Raspberry Pi Zero +{% elseif not virtualbox %} +* An ethernet cable (RJ-45) to connect your server to your router. +{% endif %} +* A computer to read this guide, flash the image and access your server. +{% endif %} +{% if not at_home %} +* A computer or a smartphone to read this guide and access your server. +{% endif %} + +{% if virtualbox %} +! N.B. : Installing YunoHost in a VirtualBox is usually intended for testing. To run an actual server on the long-term, you usually need a dedicated physical machine (old computer, ARM board...) or a server online. +{% endif %} + + + + +{% if vps_ynh %} +## YunoHost VPS providers +Here are some VPS providers supporting YunoHost natively : + +[div class="flex-container"] + +[div class="flex-child"] +[[figure caption="Alsace Réseau Neutre - FR"][/figure]](https://vps.arn-fai.net) +[/div] + +[/div] +{% endif %} + + +{% if at_home %} +## [fa=download /] Download the {{image_type}} image + +{% if virtualbox or regular %} +!!! If your host OS is 32 bits, be sure to download the 32-bit image. +{% elseif arm_unsup %} +<a href="https://www.armbian.com/download/" target="_BLANK" type="button" class="btn btn-info col-sm-12">[fa=external-link] Download the image for your board on Armbian's website</a> + +!!! N.B.: you should download the image Armbian Buster. +{% endif %} + + +<div class="hardware-image"> +<div id="cards-list"> +</div> +</div> +<script type="text/template" id="image-template"> +<div id="{id}" class="card panel panel-default"> + <div class="panel-body text-center pt-2"> + <h3>{name}</h3> + <div class="card-comment">{comment}</div> + <div class="card-desc text-center"> +<img src="/user/images/{image}" height=100 style="vertical-align:middle"> + </div> + </div> + <div class="annotations flex-container"> + <div class="flex-child annotation"><a href="{file}.sha256sum">[fa=barcode] Checksum</a></div> + <div class="flex-child annotation"><a href="{file}.sig">[fa=tag] Signature</a></div> + </div> + <div class="btn-group" role="group"> + <a href="{file}" target="_BLANK" type="button" class="btn btn-info col-sm-12">[fa=download] Download <small>{version}</small></a> + </div> +</div> +</script> +<script> +var hardware = "{{ hardware|escape('js') }}"; +/* +############################################################################### + Script that loads the infos from JavaScript and creates the corresponding + cards +############################################################################### +*/ +$(document).ready(function () { + console.log("in load"); + $.getJSON('https://build.yunohost.org/images.json', function (images) { + $.each(images, function(k, infos) { + if (infos.tuto.indexOf(hardware) == -1) return; + // Fill the template + html = $('#image-template').html() + .replace('{id}', infos.id) + .replace('{name}', infos.name) + .replace('{comment}', infos.comment || " ") + .replace('{image}', infos.image) + .replace('{version}', infos.version); + + if (infos.file.startsWith("http")) + html = html.replace(/{file}/g, infos.file); + else + html = html.replace(/{file}/g, "https://build.yunohost.org/"+infos.file); + + if ((typeof(infos.has_sig_and_sums) !== 'undefined') && infos.has_sig_and_sums == false) + { + var $html = $(html); + $html.find(".annotations").html(" "); + html = $html[0]; + } + $('#cards-list').append(html); + }); + }); +}); +</script> + + + + + + +{% if not virtualbox %} + +{% if arm %} +##  Flash the {{image_type}} image +{% else %} +##  Flash the YunoHost image +{% endif %} + +Now that you downloaded the image of {{image_type}}, you should flash it on {% if arm %}a microSD card{% else %}a USB stick or a CD/DVD.{% endif %} + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="(Recommended) With Etcher"] + +Download <a href="https://www.balena.io/etcher/" target="_blank">Etcher</a> for your operating system and install it. + +Plug your {% if arm %}SD card{% else %}USB stick{% endif %}, select your image and click "Flask" + + + +[/ui-tab] +[ui-tab title="With USBimager"] + +Download [USBimager](https://bztsrc.gitlab.io/usbimager/) for your operating system and install it. + +Plug your {% if arm %}SD card{% else %}USB stick{% endif %}, select your image and click "Write" + + + +[/ui-tab] +[ui-tab title="With dd"] + +If you are on GNU/Linux / macOS and know your way around command line, you may also flash your USB stick or SD card with `dd`. You can identify which device corresponds to your USB stick or SD card with `fdisk -l` or `lsblk`. A typical SD card name is something like `/dev/mmcblk0`. BE CAREFUL and make sure you got the right name. + +Then run : + +```bash +# Replace /dev/mmcblk0 if the name of your device is different... +dd if=/path/to/yunohost.img of=/dev/mmcblk0 +``` +[/ui-tab] +{% if regular %} +[ui-tab title="Burning a CD/DVD"] +For older devices, you might want to burn a CD/DVD. The software to use depends on your operating system. + +* On Windows, use [ImgBurn](http://www.imgburn.com/) to write the image file on the disc + +* On macOS, use [Disk Utility](http://support.apple.com/kb/ph7025) + +* On GNU/Linux, you have plenty of choices, like [Brasero](https://wiki.gnome.org/Apps/Brasero) or [K3b](http://www.k3b.org/) +[/ui-tab] +{% endif %} +[/ui-tabs] + +{% else %} + +## Create a new virtual machine + + + +! It's okay if you can only have 32-bit versions, just be sure that you downloaded the 32-bit image previously. + +## Tweak network settings + +! This step is important to properly expose the virtual machine on the network + +Go to **Settings** > **Network**: + +* Select `Bridged adapter` +* Select your interface's name: + **wlan0** if you are connected wirelessly, or **eth0** otherwise. + + + +{% endif %} + + + + + + + + + +{% if arm %} +## [fa=plug /] Power up the board + +* Plug the ethernet cable (one side on your main router, the other on your board). + * For advanced users willing to configure the board to connect to WiFi instead, see for example [here](https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md). +* Plug the SD card in your board +* (Optional) You can connect a screen+keyboard directly on your board if you want to troubleshoot the boot process or if you're more comfortable to "see what happens" or want a direct access to the board. +* Power up the board +* Wait a couple minutes while the board autoconfigure itself during the first boot +* Make sure that your computer (desktop/laptop) is connected to the same local network (i.e. same internet box) as your server. + +{% elseif virtualbox %} +## [fa=plug /] Boot up the virtual machine + +Start the virtual machine after selecting the YunoHost image. + + + +! If you encounter the error "VT-x is not available", you probably need to enable Virtualization in the BIOS of your computer. + + +{% else %} +## [fa=plug /] Boot the machine on your USB stick + +* Plug the ethernet cable (one side on your main router, the other on your server). +* Boot up your server with the USB stick or a CD-ROM inserted, and select it as **bootable device** by pressing one of the following keys (hardware specific): +`<ESC>`, `<F9>`, `<F10>`, `<F11>`, `<F12>` or `<DEL>`. + * N.B. : if the server was previously installed with a recent version of Windows (8+), you first need to tell Windows, to "actually reboot". This can be done somewhere in "Advanced startup options". +{% endif %} + +{% if regular or virtualbox %} +## [fa=rocket /] Launch the graphical install + +!! N.B. : The installation will totally erase the data on the server's hard drive! + +You should see a screen like this: + +[figure class="nomargin" caption="Preview of the ISO menu"] + +[/figure] + + 1. Select `Graphical install` + 2. Select your language, your location and your keyboard layout + 3. The installer will then download and install all required packages. + +{% endif %} + + +{% if rpi1 or rpi0 %} +## [fa=bug /] Connect to the board and hotfix the image +Raspberry Pi 1 and 0 are not totally supported due to [compilation issues for this architecture](https://github.com/YunoHost/issues/issues/1423). + +However, it is possible to fix by yourself the image before to run the initial configuration. + +To achieve this, you need to connect on your raspberry pi as root user [via SSH](/ssh) with the temporary password `yunohost`: +``` +ssh root@yunohost.local +``` + +Then run the following commands to work around the metronome issue: +``` +mv /usr/bin/metronome{,.bkp} +mv /usr/bin/metronomectl{,.bkp} +ln -s /usr/bin/true /usr/bin/metronome +ln -s /usr/bin/true /usr/bin/metronomectl +``` + +And this one to work around the upnpc issue: +``` +sed -i 's/import miniupnpc/#import miniupnpc/g' /usr/lib/moulinette/yunohost/firewall.py +``` + +! This last command need to be run after each yunohost upgrade :/ + +{% elseif arm_unsup %} +## [fa=terminal /] Connect to the board + +Next you need to [find the local IP address of your server](/finding_the_local_ip) to connect as root user [via SSH](/ssh) with the temporary password `1234`. + +``` +ssh root@192.168.x.xxx +``` + +{% endif %} + +{% endif %} + + +{% if vps_debian or arm_unsup %} +## [fa=rocket /] Run the install script + +- Open a command line prompt on your server (either directly or [through SSH](/ssh)) +- Make sure you are root (or type `sudo -i` to become root) +- Run the following command: + +```bash +curl https://install.yunohost.org | bash +``` + +!!! If `curl` is not installed on your system, you might need to install it with `apt install curl`. +!!! Otherwise, if the command does not do anything, you might want to `apt install ca-certificates` + +!!! **Note for advanced users concerned with the `curl|bash` approach:** consider reading ["Is curl|bash insecure?"](https://sandstorm.io/news/2015-09-24-is-curl-bash-insecure-pgp-verified-install) on Sandstom's blog, and possibly [this discussion on Hacker News](https://news.ycombinator.com/item?id=12766350&noprocess). + +{% endif %} + + +## [fa=cog /] Proceed with the initial configuration + +!!! If you are in the process of restoring a server using a YunoHost backup, you should skip this step and instead [restore the backup instead of the postinstall step](/backup#restoring-during-the-postinstall). + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="From the web interface"] +{%if at_home %} +In an internet browser, type **{% if internetcube %}`https://internetcube.local`{% else %}`https://yunohost.local`{% endif %}**. + +!!! If this doesn't work, you can [look for the the local IP address of your server](/finding_the_local_ip). The address typically looks like `192.168.x.y`, and you should therefore type `https://192.168.x.y` in your browser's address bar. +{% else %} +You can perform the initial configuration with the web interface by typing in the adress bar of your web browser **the public IP address of your server**. Typically, your VPS provider should have provided you with the IP of the server. +{% endif %} + +! During the first visit, you will very likely encounter a security warning related to the certificate used by the server. For now, your server uses a self-signed certificate. You will later be able to add a certificate automatically recognized by web browsers as described in the [certificate documentation](/certificate). For now, you should add a security exception to accept the current certificate. (Though PLEASE, don't take the habit to blindly accepting this kind of security alerts !) + +{% if not internetcube %} +You should then land on this page : + +[figure class="nomargin" caption="Preview of the Web initial configuration page"] + +[/figure] + +{% endif %} +[/ui-tab] +[ui-tab title="From the command line"] + +You can also perform the postinstallation with the command `yunohost tools postinstall` directly on the server, or [via SSH](/ssh). + +[figure class="nomargin" caption="Preview of the command-line post-installation"] + +[/figure] + +[/ui-tab] +[/ui-tabs] + +{% if not internetcube %} + +##### [fa=globe /] Main domain + +This will be the domain used by your server's users to access the **authentication portal**. You can later add other domains, and change which one is the main domain if needed. + +* If you're new to self-hosting and do not already have a domain name, we recommend using a **.nohost.me** / **.noho.st** / **.ynh.fr** (e.g. `homersimpson.nohost.me`). Provided that it's not already taken, the domain will be configured automatically and you won't need any further configuration step. Please note that the downside is that you won't have full-control over the DNS configuration. + +* If you already own a domain name, you probably want to use it here. You will later need to configure DNS records as explained [here](/dns_config). + +!!! Yes, you *have to* configure a domain name. If you don't have any domain name and don't want a **.nohost.me** / **.noho.st** / **.ynh.fr** either, you can set up a dummy domain such as `yolo.test` and tweak your `/etc/hosts` file such that this dummy domain points to the appropriate IP, as explained [here](/dns_local_network)). + +##### [fa=key /] Administration password + +This password will be used to access to your server's administration interface. You will also use it to connect [via **SSH**](/ssh) or [**SFTP**](/filezilla). In general terms, this is your **system's key**, choose it carefully! + +## [fa=user /] Create a first user + +Once the postinstall is done, you should be able to actually log in the web admin interface using the administration password. + +So far, your server now has an `admin` user - but `admin` is not a "regular" user and *can't* be used to log on [the user portal](/users). + +Let's therefore add a first "regular" user. + +!!! The first user you create is a bit special : it will receive emails sent to `root@yourdomain.tld` and `admin@yourdomain.tld`. These emails may be used to send technical informations or alerts. + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="From the web interface"] + +Go in Users > Add + +TODO: add a screenshot +[/ui-tab] +[ui-tab title="From the command line"] +``` +yunohost user create johndoe +``` +TODO : copypasta an actual shell session will all info asked etc.. + +[/ui-tab] +[/ui-tabs] +{% endif %} + +## [fa=stethoscope /] Run the initial diagnosis + +The diagnosis system is meant to provide an easy way to validate that all critical aspects of your server are properly configured - and guide you in how to fix issues. The diagnosis will run twice a day and send an alert if issues are detected. + +!!! N.B. : **don't run away** ! The first time you run the diagnosis, it is quite expected to see a bunch of yellow/red alerts because you typically need to [configure DNS records](/dns_config) (if not using a `.nohost.me`/`noho.st`/`ynh.fr` domain), add a swapfile if not enough ram {% if at_home %} and/or [port forwarding](/isp_box_config){% endif %}. + +!!! If an alert is not relevant (for example because you don't intend on using a specific feature), it is perfectly fine to flag the issue as 'ignored' by going in the webadmin > Diagnosis, and clicking the ignore button for this specifc issue. + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="(Recommended) From the web interface"] +To run a diagnosis, go on Web Admin in the Diagnosis section. You should get a screen like this : + +[figure class="nomargin" caption="Preview of the diagnostic panel"] + +[/figure] + +[/ui-tab] +[ui-tab title="From the command line"] +``` +yunohost diagnosis run +yunohost diagnosis show --issues --human-readable +``` +[/ui-tab] +[/ui-tabs] + +## [fa=lock /] Get a Let's Encrypt certificate + +Once you configured DNS records and port forwarding (if needed), you should be able to install a a Let's Encrypt certificate. This will get rid of the spooky security warning from earlier for new visitors. + +For more detailled instructions, or to lean more about SSL/TLS certificates, see [the corresponding page here](/certificate). + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="From the web interface"] + +[figure class="nomargin" caption="Preview of the diagnostic panel"] + +[/figure] + +[/ui-tab] +[ui-tab title="From the command line"] +``` +yunohost domain cert-install +``` +[/ui-tab] +[/ui-tabs] +{% endif %} + +##  Congratz! + +You now have a pretty well configured server. If you're new to YunoHost, we recommend to have a look at [the guided tour](/overview). You should also be able to [install your favourite applications](/apps). Don't forget to [plan backups](/backup) ! + +{% endif %} diff --git a/guidelines_fr.md b/pages/01.administrate/06.overview/02.guidelines/guidelines.fr.md similarity index 77% rename from guidelines_fr.md rename to pages/01.administrate/06.overview/02.guidelines/guidelines.fr.md index 70987966..b6504f0d 100644 --- a/guidelines_fr.md +++ b/pages/01.administrate/06.overview/02.guidelines/guidelines.fr.md @@ -1,4 +1,11 @@ -# Conseil généraux +--- +title: Conseil généraux +template: docs +taxonomy: + category: docs +routes: + default: '/guidelines' +--- Cette page énumère quelques conseils et lignes directrices que tout administrateur de YunoHost devrait connaître pour prendre soin de son serveur :). @@ -6,11 +13,11 @@ Cette page énumère quelques conseils et lignes directrices que tout administra En d'autres termes : votre serveur est soit un "serveur de production" (destiné à fonctionner), soit un serveur de test sur lequel vous vous permettez d'expérimenter. -Si votre but est d'avoir un serveur de production, alors s'il vous plaît.. : +Si votre but est d'avoir un serveur de production : - soyez conscient qu'un serveur est un système fragile : restez prudent, méthodique et patient ; - limitez les expérimentations et la personnalisation - notamment des fichiers de config ; - n'installez pas des douzaines d'applications juste pour voir de quoi elles ont l'air ; -- utilisez les applications non-officielles avec prudence, et interdisez vous d'utiliser celles 'in progress', 'not working' ou qui on un niveau 0 ; +- utilisez les applications non-officielles avec prudence, et interdisez-vous d'utiliser celles 'in progress', 'not working' ou qui on un niveau 0 ; - si quelque chose casse, réfléchissez à deux fois avant de tenter de le réparer vous-même si vous ne savez pas ce que vous faites. <small>(Par exemple, n'essayez pas de recréer vous-même l'utilisateur admin juste parce qu'il a mystérieusement disparu...)</small> ## Keep it simple ! @@ -18,7 +25,7 @@ Si votre but est d'avoir un serveur de production, alors s'il vous plaît.. : YunoHost est conçu pour fonctionner avec des cas d'utilisation généraux et simples. S'écarter de ces conditions rendra les choses plus difficiles et vous aurez besoin de connaissances techniques pour les faire fonctionner. Par exemple, - n'essayez pas d'exécuter YunoHost dans un contexte où vous ne pouvez pas avoir le contrôle des ports 80 et 443 (ou pas d'Internet du tout) ; - n'essayez pas d'héberger cinq serveurs derrière la même connexion Internet si vous n'êtes pas déjà un utilisateur avancé ; -- ne tombez pas dans des caprices de nerd tels que vouloir remplacer nginx par Apache (ou faire tourner les deux à la fois) ; +- ne tombez pas dans des caprices de nerd tels que vouloir remplacer NGINX par Apache (ou faire tourner les deux à la fois) ; - n'essayez pas d'utiliser des certificats SSL personnalisés si vous n'en avez pas vraiment besoin ; - ... @@ -28,7 +35,7 @@ Gardez les choses aussi simples que possible ! Certaines personnes ont tendance à tomber dans la "spirale de la réinstallation" - où chaque fois que quelque chose casse dans le serveur et qu'il n'est pas évident comment le réparer, ou parce que le serveur est devenu "sale", l'administrateur finit par réinstaller le serveur entier à partir de zéro car cela semble une solution "facile" et rapide pour remettre les choses à plat. -Ne faites pas ça. La réinstallation est une opération lourde et n'est pas une bonne stratégie à long terme pour résoudre les problèmes. Vous vous fatiguerez et n'apprendrez rien. Oubliez le rêve d'avoir un serveur "propre" : un serveur de la vraie vie fini toujours par être "sale". De plus, vous devez apprendre (progressivement) à résoudre les problèmes lorsque vous les rencontrez. [Demandez de l'aide](/help) en fournissant des détails sur les symptômes, ce que vous essayez de faire et de ce qu'il se passe, et corrigez les problèmes. Avec le temps, vous aurez un bien meilleur contrôle sur votre serveur plutôt que réinstaller aveuglément à chaque fois. +Ne faites pas ça. La réinstallation est une opération lourde et n'est pas une bonne stratégie à long terme pour résoudre les problèmes. Vous vous fatiguerez et n'apprendrez rien. Oubliez le rêve d'avoir un serveur "propre" : un serveur de la vraie vie finit toujours par être "sale". De plus, vous devez apprendre (progressivement) à résoudre les problèmes lorsque vous les rencontrez. [Demandez de l'aide](/help) en fournissant des détails sur les symptômes, ce que vous essayez de faire et de ce qu'il se passe, et corrigez les problèmes. Avec le temps, vous aurez un bien meilleur contrôle sur votre serveur plutôt que réinstaller aveuglément à chaque fois. ## Faites des sauvegardes @@ -40,9 +47,8 @@ En tant qu'administrateur, vous devriez configurer un client de messagerie pour ## YunoHost est un logiciel gratuit, maintenu par des bénévoles. -Enfin, gardez à l'esprit que YunoHost est un logiciel libre maintenu par des volontaires - et que le but de YunoHost (démocratiser l'auto-hébergement) n'est pas simple ! Le logiciel n'est fourni sans aucune garantie. L'équipe de bénévoles fait de son mieux pour maintenir et fournir la meilleure expérience possible - pourtant les fonctionnalités, les applications et YunoHost dans son ensemble sont loin d'être parfaits et vous ferez face tôt ou tard à de petit ou gros problèmes. Lorsque cela se produit, venez gentiment [demander de l'aide sur le chat ou le forum, ou signaler le problème](/help) :) ! +Enfin, gardez à l'esprit que YunoHost est un logiciel libre maintenu par des volontaires - et que le but de YunoHost (démocratiser l'auto-hébergement) n'est pas simple ! Le logiciel est fourni sans aucune garantie. L'équipe de bénévoles fait de son mieux pour maintenir et fournir la meilleure expérience possible - pourtant les fonctionnalités, les applications et YunoHost dans son ensemble sont loin d'être parfaits et vous ferez face tôt ou tard à de petit ou gros problèmes. Lorsque cela se produit, venez gentiment [demander de l'aide sur le chat ou le forum, ou signaler le problème](/help) :) ! Si vous aimez YunoHost et que vous voulez que le projet soit maintenu en vie et progresse, n'hésitez pas à laisser une note de remerciement et à [faire un don](https://liberapay.com/YunoHost) au projet et à en parler autour de vous ! Pour finir, puisque YunoHost est un projet de logiciel libre, vous êtes légitime et bienvenu pour [venir contribuer](/contribute) au projet, que ce soit sur les aspects techniques (c.-à-d. code) et moins techniques (comme par exemple contribuer à cette documentation ;)) ! - diff --git a/guidelines.md b/pages/01.administrate/06.overview/02.guidelines/guidelines.md similarity index 73% rename from guidelines.md rename to pages/01.administrate/06.overview/02.guidelines/guidelines.md index 18cad323..f01d788c 100644 --- a/guidelines.md +++ b/pages/01.administrate/06.overview/02.guidelines/guidelines.md @@ -1,28 +1,35 @@ -# Advices and guidelines +--- +title: Advices and guidelines +template: docs +taxonomy: + category: docs +routes: + default: '/guidelines' +--- This page lists a few advices and guidelines which every YunoHost administrator should be aware to take care of a YunoHost server :). ## Do not break YunoHost -To put it another way : your server is either a production server (meant to work) or a test server on which you allow yourself to experiment. +To put it another way: your server is either a production server (meant to work) or a test server on which you allow yourself to experiment. -If your goal is to run a production server, then please : -- be aware that servers are fragile system. Stay cautious, methodical and patient ; -- limit experimentations and customizations (for instance of config file) ; -- do not install dozens of apps just to see how they look ; -- use non-official apps with caution, and do not use apps that are still 'in progress', 'not working' or level 0 ; +If your goal is to run a production server: +- be aware that servers are fragile system. Stay cautious, methodical and patient; +- limit experimentations and customizations (for instance of config file); +- do not install dozens of apps just to see how they look; +- use non-official apps with caution, and do not use apps that are still 'in progress', 'not working' or level 0; - if something gets broken, think twice about fixing it by yourself if you don't know what you are doing. <small>(For instance, do not attempt to recreate yourself the admin user just because it mysteriously disappeared...)</small> -## Keep it simple ! +## Keep it simple! YunoHost is designed to work with general and simple use cases in mind. Deviating from those conditions will make things harder and you will need technical knowledge to make it work. For instance, -- do not try to run YunoHost in a context where you cannot have control over ports 80 and 443 (or no internet at all) ; -- do not try to host five servers behind the same internet connection if you are not already an advanced user ; -- do not fall into nerd whims such as willing to replace nginx by Apache (or run both at the same time) ; -- do not try to use custom SSL certificates if you don't really need them ; +- do not try to run YunoHost in a context where you cannot have control over ports 80 and 443 (or no internet at all); +- do not try to host five servers behind the same internet connection if you are not already an advanced user; +- do not fall into nerd whims such as willing to replace NGINX by Apache (or run both at the same time); +- do not try to use custom SSL certificates if you don't really need them; - ... -Keep things as simple as you can ! +Keep things as simple as you can! ## Do not reinstall every day @@ -34,16 +41,14 @@ Please don't do this. Reinstalling is a heavy operation and is not a good long-t If you host services and data that are important for your users, it is important that you setup a backup policy. Backups can be easily created from the webadmin - though they currently cannot be downloaded from it (but it can be downloaded through other means). You should perform backup regularly and keep them in a safe and different physical location from your server. More info on [the backup documentation](/backup). -## Check root's email +## Check root’s email As an administrator, you should configure an email client to check emails sent to `root@your.domain.tld` (which should be an alias to the first user your added) or otherwise forward them to another address that you actively check. Those mails may contain information on what is happening on your server such as automated periodic tasks. ## YunoHost is free software, maintained by volunteers -Finally, keep in mind that YunoHost is a free software maintained by volunteers - and that the goal of YunoHost (to democratize self-hosting) is not an easy one ! It is provided without any warranty. The team of volunteers does its best to maintain and provide the best possible experience - yet features, applications and YunoHost as a whole are far from being perfect and you will experience small and big shortcomings at some points. When this happens, kindly [reach for help on the chat or forum, or report the issue](/help) :) ! - -If you like YunoHost and want to see the project being kept alive and make progress, feel free to leave a thank you note and to [donate](https://liberapay.com/YunoHost) to the project and talk about it around you ! - -Last but not least, since YunoHost is a free software project, you are legitimate and welcomed to come and [contribute](/contribute) to the project, be it on the technical aspects (i.e. code) and less-technical aspects (such as contributing to this documentation ;)) ! +Finally, keep in mind that YunoHost is a free software maintained by volunteers - and that the goal of YunoHost (to democratize self-hosting) is not an easy one! It is provided without any warranty. The team of volunteers does its best to maintain and provide the best possible experience - yet features, applications and YunoHost as a whole are far from being perfect and you will experience small and big shortcomings at some points. When this happens, kindly [reach for help on the chat or forum, or report the issue](/help)! :) +If you like YunoHost and want to see the project being kept alive and make progress, feel free to leave a thank you note and to [donate](https://liberapay.com/YunoHost) to the project and talk about it around you! +Last but not least, since YunoHost is a free software project, you are legitimate and welcomed to come and [contribute](/contribute) to the project, be it on the technical aspects (i.e. code) and less-technical aspects (such as contributing to this documentation! ;)) diff --git a/pages/01.administrate/06.overview/03.admin/admin.es.md b/pages/01.administrate/06.overview/03.admin/admin.es.md new file mode 100644 index 00000000..c95fa880 --- /dev/null +++ b/pages/01.administrate/06.overview/03.admin/admin.es.md @@ -0,0 +1,16 @@ +--- +title: La interfaz de administración web +template: docs +taxonomy: + category: docs +routes: + default: '/admin_interface' +--- + +YunoHost tiene una interfaz gráfica de administración. El otro método consiste en utilizar la [linea de comando](/commandline). + +### Acceso + +La interfaz admin está accesible desde tu instancia YunoHost en esta dirección : https://ejemplo.org/yunohost/admin (reemplaza ejemplo.org por tu nombre de dominio) + + diff --git a/pages/01.administrate/06.overview/03.admin/admin.fr.md b/pages/01.administrate/06.overview/03.admin/admin.fr.md new file mode 100644 index 00000000..016792ad --- /dev/null +++ b/pages/01.administrate/06.overview/03.admin/admin.fr.md @@ -0,0 +1,17 @@ +--- +title: L'interface d'administration Web +template: docs +taxonomy: + category: docs +routes: + default: '/admin_interface' +--- + +YunoHost est fourni avec une interface graphique d’administration. L’autre méthode est d’utiliser la [ligne de commande](/commandline). + +### Accès + +L’interface admin est accessible depuis votre instance YunoHost à l’adresse https://exemple.org/yunohost/admin (remplacez exemple.org par la bonne valeur) + + + diff --git a/pages/01.administrate/06.overview/03.admin/admin.md b/pages/01.administrate/06.overview/03.admin/admin.md new file mode 100644 index 00000000..4b2f6004 --- /dev/null +++ b/pages/01.administrate/06.overview/03.admin/admin.md @@ -0,0 +1,16 @@ +--- +title: Administrator web interface +template: docs +taxonomy: + category: docs +routes: + default: '/admin_interface' +--- + +YunoHost has an administrator web interface. The other way to administrate your YunoHost install is through the [command line](/commandline). + +### Access + +You can access your administrator web interface at this address: https://example.org/yunohost/admin (replace 'example.org' with your own domain name) + + diff --git a/pages/01.administrate/06.overview/04.commandline/ssh.de.md b/pages/01.administrate/06.overview/04.commandline/ssh.de.md new file mode 100644 index 00000000..ce0facd5 --- /dev/null +++ b/pages/01.administrate/06.overview/04.commandline/ssh.de.md @@ -0,0 +1,130 @@ +--- +title: SSH +template: docs +taxonomy: + category: docs +routes: + default: '/ssh' + aliases: + - '/commandline' +page-toc: + active: true +--- + +## Was ist SSH? + +**SSH** steht für **S**ecure **Sh**ell, und bezeichnet ein Protokoll, dass es einem erlaubt über ein entferntes System auf die Kommandozeile (Command Line Interface, **CLI**) zuzugreifen. SSH ist standardmäßig auf jedem Terminal auf GNU/Linux oder macOS verfügbar. Für Windows ist Drittsoftware nötig, z.B. [MobaXterm](https://mobaxterm.mobatek.net/download-home-edition.html) (Klicke nach dem Start auf Session und dann SSH). + +## Während der YunoHost Installation + +#### Finde deine IP + +Solltest du auf einem VPS installieren, dann hat der VPS Provider die IP-Adresse, die du bei ihm erfragen solltest. + +Wenn du Zuhause installierst (z.B. auf einem Raspberry Pi oder OLinuXino), dann musst du herausfinden, welche IP-Adresse dein Router dem System zugewiesen hat. Hierfür existieren mehrere Wege: +- Öffne ein Terminal und tippe `sudo arp-scan --local` ein, um eine Liste der aktiven IP-Adressen deines lokalen Netzwerks anzuzeigen; +- wenn dir der arp-scan eine zu unübersichtliche Zahl an Adressen anzeigt, versuche mit `nmap -p 22 192.168.**x**.0/24` nur die anzuzeigen, deren SSH-Port 22 offen ist. (passe das **x** deinem Netzwerk an); +- Prüfe die angezeigten Geräte in der Benutzeroberfläche deines Routers, ob du das Gerät findest; +- Schließe einen Bildschirm und Tastatur an deinen Server, logge dich ein und tippe `hostname --all-ip-address`. + +#### Connect + +Assuming your IP address is `111.222.333.444`, open a terminal and enter : + +```bash +ssh root@111.222.333.444 +``` + +A password will be asked. If this is a VPS, your VPS provided should have communicated you the password. If you used a pre-installed image (for x86 computer or ARM board), the password should be `yunohost`. + +! Since YunoHost 3.4, after running the postinstallation, you won't be able to login as `root` anymore. Instead, **you should login using the `admin` user !** In the event that the LDAP server is broken and the `admin` user is unusable, you may still however still be able to login using `root` from the local network. + +#### Change the password! + +After logging in for the first time, you should change the root password. The server might automatically ask you to do so. If not, use the command `passwd`. It is important to choose a reasonably strong password. Note that the root password will be overriden by the admin password when you perform the postinstallation. + +#### Let's configure ! + +We're now ready to begin the [post-installation](/postinstall). + +## After installing YunoHost + +If you installed your server at home and are attempting to connect from outside your local network, make sure port 22 is correctly forwarded to your server. (Reminder : since YunoHost 3.4 you should connect using the `admin` user !) + +If you only know the IP address of your server : + +```bash +ssh admin@111.222.333.444 +``` + +Then, you need to enter your administrator password created at [post-installation step](/postinstall). + +If you configured your DNS (or tweaked your `/etc/hosts`), you can simply use your domain name : + +```bash +ssh admin@your.domain.tld +``` + +If you changed the SSH port, you need to add `-p <portnumber>` to the command, e.g. : + +```bash +ssh -p 2244 admin@your.domain.tld +``` + +!!! If you are connected as `admin` and would like to become `root` for more comfort (e.g. to avoid typing `sudo` in front of every command), you can become `root` using the command `sudo su`. + +## Which users? + +By default, only the `admin` user can log in to YunoHost SSH server. + +YunoHost's users created via the administration interface are managed by the LDAP directory. By default, they can't connect via SSH for security reasons. If you want some users to have SSH access enabled, use the command: + +```bash +yunohost user ssh allow <username> +``` + +It is also possible to remove SSH access using the following: + +```bash +yunohost user ssh disallow <username> +``` + +Finally, it is possible to add, delete and list SSH keys, to improve SSH access security, using the commands: + +```bash +yunohost user ssh add-key <username> <key> +yunohost user ssh remove-key <username> <key> +yunohost user ssh list-keys <username> +``` + +## Security and SSH + +N.B. : `fail2ban` will ban your IP for 10 mimutes if you perform 5 failed login attempts. If you need to unban the IP, have a look at the page about [Fail2Ban](/fail2ban) + +A more extensive discussion about security & SSH can be found on the [dedicated page](/security). + + +## Yunohost command line + +!!! Providing a full tutorial about the command line is quite beyond the scope of the YunoHost documentation : for this, consider reading a dedicated tutorial such as [this one](https://ryanstutorials.net/linuxtutorial/) or [this one](http://linuxcommand.org/). But be reassured that you don't need to be a CLI expert to start using it ! + +The `yunohost` command can be used to administrate your server and perform the various actions similarly to what you do on the webadmin. The command must be launched either from the `root` user or from the `admin` user by preceeding them with `sudo`. (ProTip™ : you can become `root` with the command `sudo su` as `admin`). + +YunoHost commands usually have this kind of structure : + +```bash +yunohost app install wordpress --label Webmail + ^ ^ ^ ^ + | | | | + category action argument options +``` + +Don't hesitate to browse and ask for more information about a given category or action using the the `--help` option. For instance, those commands : + +```bash +yunohost --help +yunohost user --help +yunohost user create --help +``` + +will successively list all the categories available, then the actions available in the `user` category, then the usage of the action `user create`. You might notice that the YunoHost command tree is built with a structure similar to the YunoHost admin pages. diff --git a/ssh_es.md b/pages/01.administrate/06.overview/04.commandline/ssh.es.md similarity index 54% rename from ssh_es.md rename to pages/01.administrate/06.overview/04.commandline/ssh.es.md index 2cb0cba8..10b2ab0c 100644 --- a/ssh_es.md +++ b/pages/01.administrate/06.overview/04.commandline/ssh.es.md @@ -1,14 +1,27 @@ -# SSH +--- +title: SSH +template: docs +taxonomy: + category: docs +routes: + default: '/ssh' + aliases: + - '/commandline' +page-toc: + active: true +--- ## ¿ Qué es SSH ? -**SSH** est un acrónimo por Secure Shell, y representa un protocolo que permite controlar remotamente una máquina vía la línea de comandos (CLI). También es un comando básico disponible en los terminales de Linux y MacOS / OSX. En Windows, hace falta utilizar el programa [MobaXterm](https://mobaxterm.mobatek.net/download-home-edition.html) (después de haberlo iniciado, clicar sobre Session y luego SSH). +**SSH** est un acrónimo por Secure Shell, y representa un protocolo que permite controlar remotamente una máquina vía la línea de comandos (CLI). También es un comando básico disponible en los terminales de GNU/Linux y macOS. En Windows, hace falta utilizar el programa [MobaXterm](https://mobaxterm.mobatek.net/download-home-edition.html) (después de haberlo iniciado, clicar sobre Session y luego SSH). -## Durante la instalación de Yunohost +La interfaz de línea de comandos (CLI) es, en informática, la manera original (y más técnica) de interactuar con un ordenador. Está generalmente considera como más completa, más potente y eficaz que las interfaces gráficas, aunque sea más difícil de aprenderla. + +## Durante la instalación de YunoHost #### Encontrar su IP -Si instalas Yunohost en un VPS, tu proveedor debería haberte comunicado la dirección IP de tu servidor. +Si instalas YunoHost en un VPS, tu proveedor debería haberte comunicado la dirección IP de tu servidor. Si instalas un servidor en tu casa (por ejemplo en Raspberry Pi u OLinuXino), tienes que encontrar el IP que fue atribuido a tu tarjeta cuando la conectaste a tu router / caja Internet. Hay varias maneras de hacerlo : @@ -26,9 +39,7 @@ ssh root@111.222.333.444 Ahora te piden una contraseña. Si es un VPS, tu proveedor ya te hará comunicado la contraseña. Si utilizaste una imagen pre-instalada (para x86 o tarjetas ARM), el password debería ser `yunohost`. -<div class="alert alert-warning"> -Desde YunoHost 3.4, después de la post-instalación ya no es posible conectarse con el usuario `root`. En lugar de eso, hace falta **conectarse con el usuario `admin`**. Incluso si el servidor LDAP fuera quebrado (haciendo que el usuario `admin` ya no fuera utilizable) todavía deberías poder conectarte con el usuario `root` desde la red local. -</div> +! Desde YunoHost 3.4, después de la post-instalación ya no es posible conectarse con el usuario `root`. En lugar de eso, hace falta **conectarse con el usuario `admin`**. Incluso si el servidor LDAP fuera quebrado (haciendo que el usuario `admin` ya no fuera utilizable) todavía deberías poder conectarte con el usuario `root` desde la red local. #### ¡ Cambiar la contraseña root ! @@ -59,15 +70,13 @@ Si cambiaste el puerto SSH, hay que añadir `-p <numerodelpuerto>` al comando, p ssh -p 2244 admin@tu.dominio.tld ``` -<div class="alert alert-info"> -Si estás conectado como `admin` y quieres ser `root` para tener más confort (por ejemplo, para no teclear `sudo` con cada comando), puedes convertirte en `root` tecleando `sudo su`. -</div> +!!! Si estás conectado como `admin` y quieres ser `root` para tener más confort (por ejemplo, para no teclear `sudo` con cada comando), puedes convertirte en `root` tecleando `sudo su`. ## ¿ Qué usuarios ? -Por defecto, sólo el usuario `admin` puede conectarse en SSH en una instancia Yunohost. +Por defecto, sólo el usuario `admin` puede conectarse en SSH en una instancia YunoHost. -Los usuarios Yunohost creados vea la interfaz de administración están administrados por la base de datos LDAP. Por defecto, no pueden conectarse en SSH por razones de seguridad. Si necesitas absolutamente que uno de estos usuarios disponga de un acceso SSH, puedes utilizar el comando : +Los usuarios YunoHost creados vea la interfaz de administración están administrados por la base de datos LDAP. Por defecto, no pueden conectarse en SSH por razones de seguridad. Si necesitas absolutamente que uno de estos usuarios disponga de un acceso SSH, puedes utilizar el comando : ```bash yunohost user ssh allow <username> ``` @@ -86,6 +95,31 @@ yunohost user ssh list-keys <username> ## SSH y seguridad -N.B. : `fail2ban` proscribirá tu IP durante 10 minutos si fracasas más de 5 veces consecutivas en identificarte. Si esto ocurre y que quieres re-validar tu IP, puedes echar un vistazo a la página [fail2ban](/fail2ban) +N.B. : `fail2ban` proscribirá tu IP durante 10 minutos si fracasas más de 5 veces consecutivas en identificarte. Si esto ocurre y que quieres re-validar tu IP, puedes echar un vistazo a la página [Fail2Ban](/fail2ban) Encontrarás explicaciones más completa sobre la seguridad y SSH en [la página dedicada](/security). + +## YunoHost de línea de comandos + +!!! Proveer un tutorial completo sobre la línea de comandos saldría del marco de la documentación de YunoHost : por eso, refiérete a totorales como [éste](https://www.fing.edu.uy/inco/cursos/sistoper/recursosLaboratorio/tutorial0.pdf) o [éste (en)](http://linuxcommand.org/). Pero no te preocupes : no hace falta ser un experto para comenzar a utilizarla ! + +El comando `yunohost` puede ser utilizado para administrar tu servidor o realizar las mismas acciones que en la interfaz gráfica webadmin. Hay que iniciarla como usuario `root`, o como el usuario `admin` poniendo `sudo` antes del comando. (ProTip™ : puedes convertirte en usuario `root` vía el comando `sudo su` cuando eres `admin`.) + +Los comandos YunoHost tienen este tipo de estructura : + +```bash +yunohost app install wordpress --label Webmail + ^ ^ ^ ^ + | | | | + categoría acción argumento opción +``` + +No dudes en navegar ni en pedir información a propósito de una categoría o acción utilizando la opción `--help`. Por ejemplo, estos comandos : + +```bash +yunohost --help +yunohost user --help +yunohost user create --help +``` + +de manera sucesiva van a enumerar todas las categorías disponibles, luego las acciones de la categoría `user`, y luego explicar cómo utilizar la acción `user create`. Deberías notar que el árbol de los comandos YunoHost tiene la misma estructura que las páginas del webadmin. diff --git a/pages/01.administrate/06.overview/04.commandline/ssh.fr.md b/pages/01.administrate/06.overview/04.commandline/ssh.fr.md new file mode 100644 index 00000000..13121fb7 --- /dev/null +++ b/pages/01.administrate/06.overview/04.commandline/ssh.fr.md @@ -0,0 +1,120 @@ +--- +title: SSH et la ligne de commande +template: docs +taxonomy: + category: docs +routes: + default: '/ssh' + aliases: + - '/commandline' +page-toc: + active: true +--- + +## Qu’est-ce que SSH ? + +**SSH** est un acronyme pour Secure Shell, et désigne un protocole qui permet de contrôler et administrer à distance une machine via la ligne de commande (CLI). C'est aussi une commande disponible de base dans les terminaux de GNU/Linux et macOS. Sous Windows, il vous faudra utiliser le logiciel [MobaXterm](https://mobaxterm.mobatek.net/download-home-edition.html) (après l'avoir lancé, cliquer sur Session puis SSH). + +L'interface en ligne de commande (CLI) est, en informatique, la manière originale (et plus technique) d'interagir avec un ordinateur comparé aux interfaces graphiques. La ligne de commande est généralement considérée comme plus complète, puissante et efficace que les interfaces graphiques, bien que plus difficile à apprendre. + +## Quelle adresse utiliser pour se connecter au serveur ? + +Si vous hébergez votre serveur **à la maison** (par ex. Raspberry Pi ou OLinuXino ou vieil ordinateur) + - vous devriez pouvoir vous connecter à la machine en utilisant `yunohost.local`. + - si `yunohost.local` ne fonctionne pas, il vous faut [trouver l'IP locale de votre serveur](/finding_the_local_ip). + - si vous avez installé votre serveur à la maison mais essayez d'y accéder depuis l'extérieur du réseau local, assurez-vous d'avoir bien configuré une redirection de port pour le port 22 + +S'il s'agit d'une machine distante (VPS), votre fournisseur devrait vous avoir communiqué l'IP de votre machine. + +Dans tous les cas, si vous avez déjà configuré un nom de domaine qui pointe sur l'IP appropriée, il est plus pratique d'utiliser `votre.domaine.tld` plutôt que l'adresse IP. + +## Identifiants pour se connecter + +### AVANT la post-installation + +- Si vous faites une **installation à la maison**, les identifiants par défaut sont login: `root`, mot de passe: `yunohost` +- Si vous faites une **installation sur un serveur distant (VPS)**, votre fournisseur devrait vous avoir communiqué le login et mot de passe (ou vous proposer de configurer une clef SSH) + +### APRÈS la post-installation + +Durant la postinstallation, vous avez défini un mot de passe d'administration. C'est ce mot de passe qui devient le nouveau mot de passe pour les utilisateurs `root` et `admin`. De plus, **la connexion en SSH avec l'utilisateur `root` est désactivée et il vous faut utiliser l'utilisateur `admin` !**. L'exception à cette règle est qu'il reste possible de se logger en root *depuis le réseau local - ou depuis une console en direct sur la machine* (ce qui peut être utile dans l'éventualité ou le serveur LDAP est inactif et l'utilisateur admin ne fonctionne plus). + +## Se connecter + +Une commande SSH ressemble typiquement à : + +```bash +# avant la postinstall: +ssh root@11.22.33.44 + +# ou après la postinstall: +ssh admin@11.22.33.44 +``` + +Ou bien en utilisant le nom de domaine plutôt que l'IP (plus pratique) : + +```bash +ssh admin@votre.domaine.tld +# ou avec le nom de domaine spécial yunohost.local: +ssh admin@yunohost.local +``` + +Si vous avez changé le port SSH, il faut rajouter l'option `-p <numerodeport>` à la commande, par ex. : + +```bash +ssh -p 2244 admin@votre.domaine.tld +``` + +!!! Si vous êtes connecté en tant qu'`admin` et souhaitez devenir `root` pour plus de confort (par exemple, ne pas avoir à taper `sudo` à chaque commande), vous pouvez devenir `root` en tapant `sudo su` ou `sudo -i`. + +## Quels utilisateurs ? + +Par défaut, seulement l'utilisateur `admin` peut se logger en SSH sur une instance YunoHost. + +Les utilisateurs YunoHost créés via l'interface d'administration sont gérés par la base de donnée LDAP. Par défaut, ils ne peuvent pas se connecter en SSH pour des raisons de sécurité. Si vous avez absolument besoin qu'un utilisateur dispose d'un accès SSH, vous pouvez utiliser la commande : +```bash +yunohost user ssh allow <username> +``` + +De même, il est possible de supprimer l'accès SSH à un utilisateur avec la commande : +```bash +yunohost user ssh disallow <username> +``` + +Enfin, il est possible d'ajouter, de supprimer et de lister des clés SSH, pour améliorer la sécurité de l'accès SSH, avec les commandes : +```bash +yunohost user ssh add-key <username> <key> +yunohost user ssh remove-key <username> <key> +yunohost user ssh list-keys <username> +``` + +## SSH et sécurité + +N.B. : `fail2ban` bannira votre IP pour 10 minutes si vous échouez plus de 5 fois à vous identifier. Pour débannir une IP, vous pouvez regarder la page sur [Fail2Ban](/fail2ban). + +Une discussion plus complète de la sécurité et de SSH peut être trouvée sur [la page dédiée](/security). + +## La ligne de commande Yunohost + +!!! Fournir un tutoriel complet sur la ligne de commande est bien au-delà du cadre de la documentation de YunoHost : pour cela, référez-vous à des tutoriels comme [celui-ci](https://doc.ubuntu-fr.org/tutoriel/console_ligne_de_commande) ou [celui-ci (en)](http://linuxcommand.org/). Mais soyez rassuré qu'il n'y a pas besoin d'être un expert pour commencer à l'utiliser ! + +La commande `yunohost` peut être utilisée pour administrer votre serveur ou réaliser les mêmes actions que celles disponibles sur la webadmin. Elle doit être lancée en depuis l'utilisateur `root`, ou bien depuis l'utilisateur `admin` en précédant la commande de `sudo`. (ProTip™ : il est possible de devenir `root` via la commande `sudo su` en tant qu'`admin`.) + +Les commandes YunoHost ont ce type de structure : + +```bash +yunohost app install wordpress --label Webmail + ^ ^ ^ ^ + | | | | + categorie action argument options +``` + +N'hésitez pas à naviguer et demander des informations à propos d'une catégorie ou action donnée via l'option `--help`. Par exemple, ces commandes : + +```bash +yunohost --help +yunohost user --help +yunohost user create --help +``` + +vont successivement lister toutes les catégories disponibles, puis les actions de la catégorie `user`, puis expliquer comment utiliser l'action `user create`. Vous devriez remarquer que l'arbre des commandes YunoHost suit une structure similaire aux pages de la webadmin. diff --git a/ssh_it.md b/pages/01.administrate/06.overview/04.commandline/ssh.it.md similarity index 54% rename from ssh_it.md rename to pages/01.administrate/06.overview/04.commandline/ssh.it.md index b172629c..6a2a5047 100644 --- a/ssh_it.md +++ b/pages/01.administrate/06.overview/04.commandline/ssh.it.md @@ -1,10 +1,21 @@ -# SSH +--- +title: SSH +template: docs +taxonomy: + category: docs +routes: + default: '/ssh' + aliases: + - '/commandline' +page-toc: + active: true +--- -## What's SSH? +## Cos'è SSH? -**SSH** sta per Secure Shell, un protocollo che permette di controllare da remoto un computer usando l'interfaccia a linea di comando (command line interface, CLI in inglese). È disponibile di default in ogni emulazione di terminale su Linux e MacOS / OSX. Su Windows è possibile usare [MobaXterm](https://mobaxterm.mobatek.net/download-home-edition.html) (dopo averlo avviato si deve cliccare su Session e poi SSH). +**SSH** sta per Secure Shell, un protocollo che permette di controllare da remoto un computer usando l'interfaccia a linea di comando (command line interface, CLI in inglese). È disponibile di default in ogni emulazione di terminale su GNU/Linux e macOS. Su Windows è possibile usare [MobaXterm](https://mobaxterm.mobatek.net/download-home-edition.html) (dopo averlo avviato si deve cliccare su Session e poi SSH). -## Durante l'installazione di Yunohost +## Durante l'installazione di YunoHost #### Individuare il proprio IP @@ -25,9 +36,7 @@ ssh root@111.222.333.444 Ti verrà richiesta una password. Nel caso tu stia utilizzando un VPS questa ti dovrebbe essere stata comunicata dal provider. Se invece stai utilizzando un'immagine pre-installata (per computer di tipo x86 o ARM) la password sarà `yunohost`. -<div class="alert alert-warning"> -Dalla versione 3.4 di YunoHost, dopo aver completato il processo di post installazione, non sarà più possibile fare login da `root`: invece **sarà necessario fare login usando l'utente `admin`!**. Nel caso in cui il server LDAP non stia funzionando e l'utente `admin` sia inutilizzabile sarà sempre possibile fare login da `root` solo dalla rete locale. -</div> +! Dalla versione 3.4 di YunoHost, dopo aver completato il processo di post installazione, non sarà più possibile fare login da `root`: invece **sarà necessario fare login usando l'utente `admin`!**. Nel caso in cui il server LDAP non stia funzionando e l'utente `admin` sia inutilizzabile sarà sempre possibile fare login da `root` solo dalla rete locale. #### Cambio della password @@ -43,7 +52,7 @@ Se conosci esclusivamente l'indirizzo IP del tuo server: ssh admin@111.222.333.444 ``` -Dopo di che dovrai inserire la password di amministratore creata nella [procedura di postinstallazione](postinstall). +Dopo di che dovrai inserire la password di amministratore creata nella [procedura di postinstallazione](/postinstall). Se invece hai configurato il DNS (o hai modificato il file `/etc/hosts`), puoi semplicemente usare il tuo nome di dominio: @@ -57,13 +66,11 @@ Se hai modificato la porta in ascolto per SSH devi aggiungere l'opzione `-p <por ssh -p 2244 admin@your.domain.tld ``` -<div class="alert alert-info"> -Se sei loggato come `admin` ma vuoi usare l'utente `root` per maggiore comodità (ad esempio per evitare di scrivere `sudo` prima di ogni comando) puoi usare il comando `sudo su`. -</div> +!!! Se sei loggato come `admin` ma vuoi usare l'utente `root` per maggiore comodità (ad esempio per evitare di scrivere `sudo` prima di ogni comando) puoi usare il comando `sudo su`. ## Utenti abilitati -Di default solo l'utente `admin` può loggarsi al server ssh di YunoHost. +Di default solo l'utente `admin` può loggarsi al server SSH di YunoHost. Gli utenti creati dall'interfaccia di amministrazione sono gestiti dalla directory LDAP e di default non possono connettersi via SSH per ragioni di sicurezza. Se invece vuoi abilitare all'accesso SSH alcuni utenti usa il comando: @@ -71,13 +78,13 @@ Gli utenti creati dall'interfaccia di amministrazione sono gestiti dalla directo yunohost user ssh allow <username> ``` -È sempre possibile eliminare l'accesso ssh con il comando: +È sempre possibile eliminare l'accesso SSH con il comando: ```bash yunohost user ssh disallow <username> ``` -Infine è possibile aggiungere, eliminare ed elencare le chiavi ssh, usate per migliorare la sicurezza degli accessi ssh con i comandi: +Infine è possibile aggiungere, eliminare ed elencare le chiavi SSH, usate per migliorare la sicurezza degli accessi SSH con i comandi: ```bash yunohost user ssh add-key <username> <key> @@ -87,6 +94,31 @@ yunohost user ssh list-keys <username> ## Sicurezza e SSH -N.B.: `fail2ban` bannerà il tuo IP per 10 minuti nel caso di almeno 5 tentativi di accesso falliti. Se devi togliere il ban al tuo IP leggi la pagina relativa [fail2ban](/fail2ban) +N.B.: `fail2ban` bannerà il tuo IP per 10 minuti nel caso di almeno 5 tentativi di accesso falliti. Se devi togliere il ban al tuo IP leggi la pagina relativa [Fail2Ban](/fail2ban) Una discussione più approfondita relativa a sicurezza & SSH è su [questa pagina](/security). + +## Yunohost command line + +!!! Providing a full tutorial about the command line is quite beyond the scope of the YunoHost documentation : for this, consider reading a dedicated tutorial such as [this one](https://ryanstutorials.net/linuxtutorial/) or [this one](http://linuxcommand.org/). But be reassured that you don't need to be a CLI expert to start using it ! + +The `yunohost` command can be used to administrate your server and perform the various actions similarly to what you do on the webadmin. The command must be launched either from the `root` user or from the `admin` user by preceeding them with `sudo`. (ProTip™ : you can become `root` with the command `sudo su` as `admin`). + +YunoHost commands usually have this kind of structure : + +```bash +yunohost app install wordpress --label Webmail + ^ ^ ^ ^ + | | | | + category action argument options +``` + +Don't hesitate to browse and ask for more information about a given category or action using the the `--help` option. For instance, those commands : + +```bash +yunohost --help +yunohost user --help +yunohost user create --help +``` + +will successively list all the categories available, then the actions available in the `user` category, then the usage of the action `user create`. You might notice that the YunoHost command tree is built with a structure similar to the YunoHost admin pages. diff --git a/pages/01.administrate/06.overview/04.commandline/ssh.md b/pages/01.administrate/06.overview/04.commandline/ssh.md new file mode 100644 index 00000000..e0e9c6fc --- /dev/null +++ b/pages/01.administrate/06.overview/04.commandline/ssh.md @@ -0,0 +1,126 @@ +--- +title: SSH and command line +template: docs +taxonomy: + category: docs +routes: + default: '/ssh' + aliases: + - '/commandline' +page-toc: + active: true +--- + +## What's SSH? + +**SSH** stands for Secure Shell, and refers to a protocol that allows to remotely control and administrate a machine using the command line interface (CLI). It is available by default in any terminal on GNU/Linux and macOS. On Windows, you may want to use [MobaXterm](https://mobaxterm.mobatek.net/download-home-edition.html) (after launching it, click on Session then SSH). + +The command line interface (CLI) is, in the computer world, the original (and more technical) way of interacting with a computer compared to graphical interface. Command line interfaces are generally said to be more complete, powerful or efficient than a graphical interface, though also more difficult to learn. + +## What address to use to connect to your server? + +If you are **installing at home** (e.g. on a Raspberry Pi or OLinuXino or old computer): + - you should be able to connect to your server using `yunohost.local`. + - if `yunohost.local` does not work, your need to [find out the local IP of the server](/finding_the_local_ip). + - if you installed a server at home but are attempting to connect from outside your local network, make sure port 22 is correctly forwarded to your server. + + +If your server is a remote server (VPS), your provider should have communicated you the IP address of the machine + +In any cases, if you already configured a domain name pointing to the appropriate IP, it's much better to use `yourdomain.tld` instead of the IP address. + + +## Login credentials + +#### BEFORE running the post-installation + +- If you are **installing at home**, the default credentials are login: `root` and password: `yunohost` +- If you are **installing a remote server (VPS)**, your provider should have communicated you the login and password (or allowed you to configure an SSH key) + +#### AFTER running the post-installation + +During the postinstall, you've been asked to choose an administration password. This password becomes the new password for the `root` and `admin` users. Additionally, **the `root` SSH login becomes disabled after the postinstall and you should log in using the `admin` user !**. The only exception is that you may still be able to login using `root` *from the local network - or from a direct console on the server* (this is to cover the event where the LDAP server is broken and the `admin` user is unusable). + + +## Connecting + +The SSH command typically looks like: + +```bash +# before the postinstall: +ssh root@11.22.33.44 + +# or after the postinstall: +ssh admin@11.22.33.44 +``` + +Or using the domain name instead of the IP (more convenient): + +```bash +ssh admin@your.domain.tld +# or with the special .local domain: +ssh admin@yunohost.local +``` + +If you changed the SSH port, you need to add `-p <portnumber>` to the command, e.g.: + +```bash +ssh -p 2244 admin@your.domain.tld +``` + +!!! If you connected as `admin` and would like to become `root` for convenience (e.g. to avoid typing `sudo` in front of every command), you can become `root` using the command `sudo su` or `sudo -i`. + +## Which other users may connect to the server? + +By default, only the `admin` user can log in to YunoHost SSH server. + +YunoHost's users created via the administration interface are managed by the LDAP directory. By default, they can't connect via SSH for security reasons. If you want some users to have SSH access enabled, use the command: + +```bash +yunohost user ssh allow <username> +``` + +It is also possible to remove SSH access using the following: + +```bash +yunohost user ssh disallow <username> +``` + +Finally, it is possible to add, delete and list SSH keys, to improve SSH access security, using the commands: + +```bash +yunohost user ssh add-key <username> <key> +yunohost user ssh remove-key <username> <key> +yunohost user ssh list-keys <username> +``` + +## Security and SSH + +N.B. : `fail2ban` will ban your IP for 10 minutes if you perform 5 failed login attempts. If you need to unban the IP, have a look at the page about [Fail2Ban](/fail2ban) + +A more extensive discussion about security & SSH can be found on the [dedicated page](/security). + +## Yunohost command line + +!!! Providing a full tutorial about the command line is quite beyond the scope of the YunoHost documentation : for this, consider reading a dedicated tutorial such as [this one](https://ryanstutorials.net/linuxtutorial/) or [this one](http://linuxcommand.org/). But be reassured that you don't need to be a CLI expert to start using it ! + +The `yunohost` command can be used to administrate your server and perform the various actions similarly to what you do on the webadmin. The command must be launched either from the `root` user or from the `admin` user by preceeding them with `sudo`. (ProTip™ : you can become `root` with the command `sudo su` as `admin`). + +YunoHost commands usually have this kind of structure : + +```bash +yunohost app install wordpress --label Webmail + ^ ^ ^ ^ + | | | | + category action argument options +``` + +Don't hesitate to browse and ask for more information about a given category or action using the the `--help` option. For instance, those commands : + +```bash +yunohost --help +yunohost user --help +yunohost user create --help +``` + +will successively list all the categories available, then the actions available in the `user` category, then the usage of the action `user create`. You might notice that the YunoHost command tree is built with a structure similar to the YunoHost admin pages. diff --git a/users_fr.md b/pages/01.administrate/06.overview/05.users/users.fr.md similarity index 53% rename from users_fr.md rename to pages/01.administrate/06.overview/05.users/users.fr.md index c52522dc..a949b6ee 100644 --- a/users_fr.md +++ b/pages/01.administrate/06.overview/05.users/users.fr.md @@ -1,42 +1,38 @@ -Les utilisateurs et le SSO -========================== +--- +title: Les utilisateurs et le SSO +template: docs +taxonomy: + category: docs +routes: + default: '/users' +--- -Utilisateurs ------ +## Utilisateurs Les utilisateurs sont les êtres humains qui ont accès aux applications et autres services sur votre serveur. L'administrateur peut ajouter et gérer des utilisateurs via l'administration web (dans la catégorie Utilisateurs) ou via la catégorie `yunohost user` de la ligne de commande. Après cela, les utilisateurs obtiennent une adresse e-mail personnelle (choisie par l'administrateur), un compte XMPP, et peuvent se connecter au portail utilisateur (SSO) pour accéder aux applications pour lesquelles ils ont des permissions et configurer d'autres paramètres. Le premier utilisateur créé reçoit aussi automatiquement les alias email `root@main.domain.tld` et `admin@main.domain.tld`, de sorte que le courrier envoyé à ces adresses se retrouvera dans la boîte aux lettres de cet utilisateur. -<div class="alert alert-info" markdown="1"> -Vous devriez faire attention à qui vous donnez l'accès à votre serveur. En termes de sécurité, cela augmente considérablement la surface d'attaque pour quelqu'un qui veut perturber le serveur d'une manière ou d'une autre. -</div> +! Vous devriez faire attention à qui vous donnez l'accès à votre serveur. En termes de sécurité, cela augmente considérablement la surface d'attaque pour quelqu'un qui veut perturber le serveur d'une manière ou d'une autre. -Le portail utilisateur, ou SSO ------------------------ +## Le portail utilisateur, ou SSO -<center><img src="images/user_panel.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"></center> +[center] + +[/center] Le portail utilisateur, également appelé SSO pour 'Single Sign On', permet à l'utilisateur de naviguer facilement entre les différentes applications auxquelles il a accès. En particulier, le terme 'Single Sign On' vient du fait que l'utilisateur n'a qu'à se connecter au portail pour être automatiquement connecté à toutes les applications qui nécessitent une authentification (ou du moins celles qui sont intégrées avec le SSO/LDAP, car cela est parfois techniquement compliqué ou pas possible du tout). Dans le portail, les utilisateurs peuvent également cliquer sur l'avatar en haut à gauche pour configurer d'autres paramètres tels que leur identité, les alias de messagerie, les transferts automatiques de courrier ou changer leur mot de passe. -<div class="alert alert-info" markdown="1"> -Vous devez être conscient que le SSO ne peut être atteint que par le nom de domaine (c.-à-d. `https://the.domain.tld/yunohost/sso`), et non pas en utilisant l'IP du serveur (c.-à-d. `https://11.22.33.44/yunohost/sso`), contrairement à l'administrateur web ! C'est un peu déroutant dans certaines situations, mais c'est nécessaire pour des raisons techniques. Si vous êtes dans une situation où vous avez besoin d'accéder au SSO sans avoir votre DNS correctement configuré pour une raison quelconque, vous pouvez envisager de modifier votre `/etc/hosts` comme décrit dans [cette page](dns_local_network). -</div> +!!! Vous devez être conscient que le SSO ne peut être atteint que par le nom de domaine (c.-à-d. `https://the.domain.tld/yunohost/sso`), et non pas en utilisant l'IP du serveur (c.-à-d. `https://11.22.33.44/yunohost/sso`), contrairement à l'administrateur web ! C'est un peu déroutant dans certaines situations, mais c'est nécessaire pour des raisons techniques. Si vous êtes dans une situation où vous avez besoin d'accéder au SSO sans avoir votre DNS correctement configuré pour une raison quelconque, vous pouvez envisager de modifier votre `/etc/hosts` comme décrit dans [cette page](/dns_local_network). -Gestion des groupes d'utilisateurs et permissions ---------------------------- +## Gestion des groupes d'utilisateurs et permissions -Voir [cette page de documentation dédiée](groups_and_permissions). +Voir [cette page de documentation dédiée](/groups_and_permissions). - -Accès SSH ----------- +## Accès SSH Les utilisateurs peuvent également être autorisés à se connecter via SSH, et des clés SSH peuvent être ajoutées à cette fin. Jusqu'à présent, ceci ne peut être configuré que via la ligne de commande. Voir `yunohost user ssh --help` pour des commandes spécifiques. -<div class="alert alert-warning" markdown="1"> -Faites attention à qui vous donnez accès à SSH. Cela augmente encore plus la surface d'attaque disponible pour un utilisateur malveillant. -</div> - +! Faites attention à qui vous donnez accès à SSH. Cela augmente encore plus la surface d'attaque disponible pour un utilisateur malveillant. diff --git a/users.md b/pages/01.administrate/06.overview/05.users/users.md similarity index 51% rename from users.md rename to pages/01.administrate/06.overview/05.users/users.md index a570d767..0ef31724 100644 --- a/users.md +++ b/pages/01.administrate/06.overview/05.users/users.md @@ -1,40 +1,38 @@ -Users and the SSO -================= +--- +title: Users and the SSO +template: docs +taxonomy: + category: docs +routes: + default: '/users' +--- -Users ------ +## Users Users are human being who have access to applications and other services on your server. The administrator can add and manage users through the web administration (in the User category) or through the command line (see `yunohost user --help`). After that, users obtain a personal email address (chosen by the admin), an XMPP account, and can log in the user portal to access applications they have permissions over and configure other parameters. The first user created also automatically gets email aliases `root@main.domain.tld` and `admin@main.domain.tld`, such that mail sent to these adresses will end up in the first user's mailbox. -<div class="alert alert-warning" markdown="1"> -You should be careful about who you give your server access to. In terms of security, this largely increase the attack surface for someone who wants to mess with the server one way or another. -</div> +! You should be careful about who you give your server access to. In terms of security, this largely increase the attack surface for someone who wants to mess with the server one way or another. -The user portal, or SSO ------------------------ +## The user portal, or SSO -<center><img src="images/user_panel.png" style="max-width: 650px; border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"></center> +[center] + +[/center] The user portal, also called the SSO for 'Single Sign On' allows user to browse easily between the different apps they have access to. In particular, the term 'Single Sign On' comes from the fact that user only need to log in the portal to automatically be logged to all apps that require authentication (or at least those who are integrated with the SSO/LDAP, since this is sometimes technically complicated or not possible at all). In the portal, users can also click on the avatar in the top-left to configure some other settings such as their identify, mail aliases, automatic mail forwards, or change their password. -<div class="alert alert-info" markdown="1"> -You should be aware that the SSO can only be reached through the actual domain name (i.e. `https://the.domain.tld/yunohost/sso`), and NOT by just using the IP of the server (i.e. `https://11.22.33.44/yunohost/sso`), contrarily to the webadmin ! This is a bit confusing but is necessary for technical reason. If you are in a situation where you need to access the SSO without having your DNS properly configured for some reason, you might consider tweaking your `/etc/hosts` as described in [this page](dns_local_network). -</div> +!!! You should be aware that the SSO can only be reached through the actual domain name (i.e. `https://the.domain.tld/yunohost/sso`), and NOT by just using the IP of the server (i.e. `https://11.22.33.44/yunohost/sso`), contrarily to the webadmin ! This is a bit confusing but is necessary for technical reason. If you are in a situation where you need to access the SSO without having your DNS properly configured for some reason, you might consider tweaking your `/etc/hosts` as described in [this page](/dns_local_network). -User groups and permissions ---------------------------- +## User groups and permissions -See [this dedicated page](groups_and_permissions). +See [this dedicated page](/groups_and_permissions). -SSH access ----------- +## SSH access Users can also be allowed to connect through SSH, and SSH keys can be added for this purpose. So far, this can only be configured via the command line. See `yunohost user ssh --help` for specific commands. -<div class="alert alert-warning" markdown="1"> -Be careful who you give SSH access to. This increases even more the attack surface available to a malicious user. -</div> +! Be careful who you give SSH access to. This increases even more the attack surface available to a malicious user. diff --git a/apps_overview_fr.md b/pages/01.administrate/06.overview/06.apps/apps_overview.fr.md similarity index 53% rename from apps_overview_fr.md rename to pages/01.administrate/06.overview/06.apps/apps_overview.fr.md index 3fbaaaa7..6f9524be 100644 --- a/apps_overview_fr.md +++ b/pages/01.administrate/06.overview/06.apps/apps_overview.fr.md @@ -1,46 +1,36 @@ -Applications -============ +--- +title: Les applications +template: docs +taxonomy: + category: docs +routes: + default: '/apps_overview' +--- -L'une des fonctionnalités principales de YunoHost est la possibilité d'installer facilement des applications immédiatement utilisables. Pour donner des exemples d'application, il est possible d'installer un système de blog, un "cloud" (pour héberger et synchroniser des fichiers), un site web, un lecteur RSS, .... +L'une des fonctionnalités principales de YunoHost est la possibilité d'installer facilement des applications immédiatement utilisables. Pour donner des exemples d'application, il est possible d'installer un système de blog, un "cloud" (pour héberger et synchroniser des fichiers), un site web, un lecteur RSS... Les applications doivent être packagées manuellement par les packageurs/mainteneurs d'applications. Les applications peuvent être intégrées avec YunoHost pour gérer les mise à jour, la sauvegarde/restauration et l'intégration LDAP/SSO, entre autres. Les applications peuvent être installées et gérées via l'interface webadmin dans la partie 'Applications', ou via les commandes de la catégorie `yunohost app`. -Listes d'applications ------------------ +Il est possible de naviguer dans le catalogue d'application dans la webadmin (dans Applications > Installer) ou bien [ici](/apps). -Du point de vue technique, les applications sont des dépôts de code public (comme [celui-ci](https://github.com/YunoHost-Apps/wordpress_ynh)). Les applications existantes sont indexées à l'aide de "listes d'applications". Ces listes peuvent être gérées dans Applications > Installer > Gérer les listes d'applications, ou avec des commandes telles que `yunohost app fetchlist`. - -Par défaut, YunoHost ne connaît que la liste officielle des applications. Il s'agit d'applications qui ont été soigneusement packagées, intégrées, revues et doivent être maintenues par l'équipe YunoHost. - -Néanmoins, vous souhaiterez peut-être avoir accès au catalogue plus fourni de la liste communautaire. Cette liste peut facilement être ajouté via la vue 'Gérer les listes d'applications' de l'administrateur web, ou avec la commande `yunohost app fetchlist -n community -u https://app.yunohost.org/community.json`. Sachez simplement que les applications de cette liste offrent moins de garanties que les applications officielles et que l'équipe YunoHost n'en est pas responsable ! - -La liste des applications existantes (officielles et communautaires) peut être consultée sur [cette page](/apps). - -Niveaux d'intégration et de qualité ------------------------------- +## Niveaux d'intégration et de qualité Des tests automatisés sont exécutés régulièrement pour tester l'intégration et la qualité de toutes les applications officielles, ainsi que les applications communautaires qui ont été déclarées "working". Le résultat est un niveau entre 0 et 7, dont la signification est détaillée sur [cette page](/packaging_apps_levels). Certains résultats de tests peuvent également être disponibles sur [ce tableau de bord](https://dash.yunohost.org/appci/branch/stable). -Intégration LDAP / SSO ----------------------- +## Intégration LDAP / SSO Les applications peuvent prendre en charge l'intégration avec le système LDAP / Single Sign On, de sorte que les utilisateurs qui se connectent au portail utilisateur peuvent être automatiquement authentifiés sur toutes ces applications. Certaines applications ne le supportent pas car cette fonctionnalité n'est, soit pas implémentée en amont du logiciel de l'application, soit le mainteneur n'a pas encore travaillé sur cette partie. -Applications multi-instances ---------------------------- +## Applications multi-instances Certaines applications peuvent être installées plusieurs fois (à différents endroits) ! Pour ce faire, il suffit de retourner dans Applications > Installer, et de sélectionner à nouveau l'application à installer. +## Gestion de l'accès des utilisateurs -Gestion de l'accès des utilisateurs ----------------------- +L'accès aux applications peut être limité à certains utilisateurs seulement. Ceci peut être configuré via la webadmin sur la page [Groupes et permissions](/groups_and_permissions), ou de la même manière via la sous-catégorie de commandes `yunohost user permission`. -L'accès aux applications peut être limité à certains utilisateurs seulement. Ceci peut être configuré via la webadmin sur la page [Groupes et permissions](groups_and_permissions), ou de la même manière via la sous-catégorie de commandes `yunohost user permission`. - -Packaging d'applications ------------------------- - -Si vous voulez apprendre ou contribuer à l'empaquetage des applications, veuillez consulter la [documentation des contributeurs](contributordoc). +## Packaging d'applications +Si vous voulez apprendre ou contribuer à l'empaquetage des applications, veuillez consulter la [documentation des contributeurs](/contributordoc). diff --git a/apps_overview.md b/pages/01.administrate/06.overview/06.apps/apps_overview.md similarity index 52% rename from apps_overview.md rename to pages/01.administrate/06.overview/06.apps/apps_overview.md index f4a73f24..7e3a421c 100644 --- a/apps_overview.md +++ b/pages/01.administrate/06.overview/06.apps/apps_overview.md @@ -1,45 +1,36 @@ -Applications -============ +--- +title: Applications +template: docs +taxonomy: + category: docs +routes: + default: '/apps_overview' +--- -One of the key feature of YunoHost is the ability to easily install applications which are then immediately usable. Example of applications include a blog system, a "cloud" (to host and sync files), a website, an RSS reader, ... +One of the key feature of YunoHost is the ability to easily install applications which are then immediately usable. Example of applications include a blog system, a "cloud" (to host and sync files), a website, an RSS reader... Applications must be packaged manually by application packagers/maintainers. Apps can be integrated with YunoHost to support upgrades, backup/restore and LDAP/SSO integration among other things. Applications can be installed and managed through the webadmin interface in 'Applications' or through commands of the `yunohost app` category. -Application lists ------------------ +The application catalog can be browsed in the webadmin (in Applications > Install) or [here](/apps). -From the technical point of view, applications are public code repository (such as [this one](https://github.com/YunoHost-Apps/wordpress_ynh)). Existing applications are indexed using "application lists". Those lists can be managed in Applications > Install > Manage applications lists or with commands such as `yunohost app fetchlist`. +## Integration and quality levels -By default, YunoHost only knows about the official application list. Those are applications which have been carefully packaged, integrated, reviewed and shall be maintained by the YunoHost team. +Automated tests are being run regularly to test the integration and quality of all official apps, as well as community apps who were declared to be 'working'. The result is a level between 0 and 7, whose meaning is detailed on [this page](/packaging_apps_levels). Some tests results may also be available [on this dashboard](https://dash.yunohost.org/appci/branch/stable). -Nevertheless, you might want to have access to the larger catalog of the community list. It can easily be added through the 'Manage applications lists' view of the webadmin, or with the command `yunohost app fetchlist -n community -u https://app.yunohost.org/community.json`. Just be aware that apps in this list offer less guarantees than the official apps and the YunoHost team is not responsible for them ! - -The full list of application (official and community) can be browsed at [this page](/apps). - -Integration and quality levels ------------------------------- - -Automated tests are being ran regularly to test the integration and quality of all official apps, as well as community apps who were declared to be 'working'. The result is a level between 0 and 7, whose meaning is detailed on [this page](/packaging_apps_levels). Some tests results may also be available [on this dashboard](https://dash.yunohost.org/appci/branch/stable). - -LDAP / SSO integration ----------------------- +## LDAP / SSO integration Applications may support integration with the LDAP / Single Sign On system, such that users who connects to the user portal can be automatically logged in all those apps. Some applications however do not support this as it can be either not implemented in the upstream, or the package didn't work on this part yet. -Multi-instance applications ---------------------------- +## Multi-instance applications Some applications support the ability to be installed several times (at different locations) ! To do so, just go another time in Applications > Install, and select again the application to install. - -User access management ----------------------- +## User access management Access to apps can be restricted to some users only. This can be configured via the webadmin in the [Groups and permissions panel](/groups_and_permissions), or similarly via the command-line subcategory `yunohost user permission`. -Packaging applications ----------------------- +## Packaging applications -If you want to learn or contribute to app packaging, please check the [contributor documentation](contributordoc). +If you want to learn or contribute to app packaging, please check the [contributor documentation](/contributordoc). diff --git a/domains_fr.md b/pages/01.administrate/06.overview/07.domains/domains.fr.md similarity index 85% rename from domains_fr.md rename to pages/01.administrate/06.overview/07.domains/domains.fr.md index f03b6e4b..f5e28cf7 100644 --- a/domains_fr.md +++ b/pages/01.administrate/06.overview/07.domains/domains.fr.md @@ -1,33 +1,35 @@ -Domaines, configuration DNS et certificats -========================================== +--- +title: Domaines, configurations DNS, et certificats +template: docs +taxonomy: + category: docs +routes: + default: '/domains' +--- YunoHost permet de gérer et de servir plusieurs domaines sur un même serveur. Vous pouvez donc héberger, par exemple, un blog et un Nextcloud sur un premier domaine `yolo.com`, et un client de messagerie web sur un second domaine `swag.nohost.me`. Chaque domaine est automatiquement configuré pour pouvoir gérer des services web, des courriels et une messagerie instantannée XMPP. -Les domaines peuvent être gérés dans la section 'Domaine' de la webadmin, ou via la catégorie `yunohost domain` de la ligne de commande. Chaque fois que vous ajoutez un domaine, il est supposé que vous avez acheté (ou en tout cas que vous contrôliez) le domaine, de sorte que vous puissiez gérer la [configuration DNS](dns) ce celui-ci. Une exception concerne les [domaines en `.nohost.me`, `.noho.st` et `ynh.fr`](/dns_nohost_me) qui sont offerts par le Projet YunoHost, et peuvent être directement intégrés avec YunoHost grâce à une configuration dynDNS automatique. (Pour limiter les abus et les coûts, une instance ne peut avoir qu'un seul domaine offert à la fois). +Les domaines peuvent être gérés dans la section 'Domaine' de la webadmin, ou via la catégorie `yunohost domain` de la ligne de commande. Chaque fois que vous ajoutez un domaine, il est supposé que vous avez acheté (ou en tout cas que vous contrôliez) le domaine, de sorte que vous puissiez gérer la [configuration DNS](/dns_config) ce celui-ci. Une exception concerne les [domaines en `.nohost.me`, `.noho.st` et `ynh.fr`](/dns_nohost_me) qui sont offerts par le Projet YunoHost, et peuvent être directement intégrés avec YunoHost grâce à une configuration dynDNS automatique. (Pour limiter les abus et les coûts, une instance ne peut avoir qu'un seul domaine offert à la fois). Le domaine choisi lors de la postinstall est défini comme le domaine principal du serveur : c'est là que le SSO et l'interface d'administration web seront disponibles. Le domaine principal peut être modifié ultérieurement via la webadmin dans Domaines > (le domaine) > Définir par défaut, ou avec la ligne de commande `yunohost tools maindomain`. Enfin, il faut noter que, dans le contexte de YunoHost, il n'y a pas de hiérarchie entre les domaines qu'il connaît. Dans l'exemple précédent, on peut ajouter un troisième domaine `foo.yolo.com` - mais il serait considéré comme un domaine indépendant de `yolo.com`. -Caractères non latins ------------------ +## Caractères non latins Si votre domain contient des caractères spéciaux, non latins, vous devez utiliser sa [version internationalisée](https://fr.wikipedia.org/wiki/Nom_de_domaine_internationalis%C3%A9) en [Punycode](https://fr.wikipedia.org/wiki/Punycode). Vous pouvez utiliser [ce convertisseur](https://www.charset.org/punycode), et utiliser le nom de domaine converti dans YunoHost. -Configuration DNS ------------------ +## Configuration DNS DNS (Domain Name System) est un système qui permet aux ordinateurs du monde entier de traduire les noms de domaine lisibles par l'homme (comme `yolo.com`) en adresses IP compréhensibles par les machines (comme `11.22.33.44`). Pour que cette traduction (et d'autres fonctionnalités) fonctionne, il faut configurer soigneusement les enregistrements DNS. YunoHost peut générer une configuration DNS recommandée pour chaque domaine, y compris les enregistrements nécessaires pour les parties emails et XMPP. La configuration DNS recommandée est disponible dans l'administrateur web via Domaine > (le domaine) > configuration DNS, ou avec la commande `yunohost domain dns-conf the.domain.tld`. -Certificats SSL/HTTPS ----------------------- +## Certificats SSL/HTTPS Un autre aspect important de la configuration des domaines est le certificat SSL/HTTPS. YunoHost est intégré avec Let's Encrypt, de sorte qu'une fois que votre serveur est correctement accessible depuis n'importe qui sur Internet via le nom de domaine, l'administrateur peut demander l'installation d'un certificat Let's Encrypt. Voir la documentation sur les [certificats](/certificate) pour plus d'informations. -Sous-chemins vs. domaines individuels par application ------------------------------------------------------ +## Sous-chemins vs. domaines individuels par application Dans le contexte de YunoHost, il est assez courant d'avoir un seul (ou quelques) domaines sur lesquels plusieurs applications sont installées dans des "sous-chemins", de sorte que l'on se retrouve avec quelque chose comme ceci : diff --git a/domains.md b/pages/01.administrate/06.overview/07.domains/domains.md similarity index 84% rename from domains.md rename to pages/01.administrate/06.overview/07.domains/domains.md index f9527a1d..cd38a758 100644 --- a/domains.md +++ b/pages/01.administrate/06.overview/07.domains/domains.md @@ -1,33 +1,35 @@ -Domains, DNS conf and certificate -================================= +--- +title: Domains, DNS conf, and certificate +template: docs +taxonomy: + category: docs +routes: + default: '/domains' +--- YunoHost allows you to manage and serve several domains on the same server. For instance, you can host a blog and Nextcloud on a first domain `yolo.com`, and a web mail client on a second domain `swag.nohost.me`. Each domain is automatically configured to handle web services, mail services and XMPP services. -Domains can be managed in the 'Domain' section of the webadmin, or through the `yunohost domain` category of the command line. Each time you add a domain, it is expected that you bought it (or own it) on a domain registrar, so you can manage the [DNS configuration](dns). The exception is the [`.nohost.me`, `.noho.st` and `ynh.fr` domains](/dns_nohost_me) which are paid for by the YunoHost Project, and can be directly integrated with YunoHost thanks to an automated dynDNS setup. (To limit costs and abuses, each instance may only have one of these domains setup at any given time). +Domains can be managed in the 'Domain' section of the webadmin, or through the `yunohost domain` category of the command line. Each time you add a domain, it is expected that you bought it (or own it) on a domain registrar, so you can manage the [DNS configuration](/dns_config). The exception is the [`.nohost.me`, `.noho.st` and `ynh.fr` domains](/dns_nohost_me) which are paid for by the YunoHost Project, and can be directly integrated with YunoHost thanks to an automated dynDNS setup. (To limit costs and abuses, each instance may only have one of these domains setup at any given time). The domain chosen during the postinstall is defined as the main domain of the server : this is where the SSO and the web admin interface will be available. The main domain can later be changed through the web admin in Domains > (the domain) > Set default, or with the command line `yunohost tools maindomain`. Finally, take note that, in the context of YunoHost, there is no hierarchy between the domains it knows. In the previous example, you may add a third domain `foo.yolo.com` - but it would be considered as a domain independent of `yolo.com`. -Non-latin characters ------------------ +## Non-latin characters If your domain has special, non-latin characters, you need to use its [internationalized version](https://en.wikipedia.org/wiki/Internationalized_domain_name) through [Punycode](https://en.wikipedia.org/wiki/Punycode). You can use [this converter](https://www.charset.org/punycode), and use the converted domain name in your YunoHost configuration. -DNS configuration ------------------ +## DNS configuration DNS (Domain Name System) is a system that allows computers from around the world to translate human-readable domain names (such as `yolo.com`) to machine-understandable adresses called IP addresses (such as `11.22.33.44`). For this translation (and other features) to work, you must carefully configure DNS records. YunoHost can generate a recommended DNS configuration for each domain, including elements needed for mail and XMPP. The recommended DNS configuration is available in the webadmin via Domain > (the domain) > DNS configuration, or with the command `yunohost domain dns-conf the.domain.tld`. -SSL/HTTPS certificates ----------------------- +## SSL/HTTPS certificates -Another important aspect of domain configuration is the SSL/HTTPS certificate. YunoHost is integrated with Let's Encrypt, so once your server is correctly reachable from anybody on the internet through the domain name, the administrator can request a Let's Encrypt certificate. See the documentation about [certificates](certificate) for more information. +Another important aspect of domain configuration is the SSL/HTTPS certificate. YunoHost is integrated with Let's Encrypt, so once your server is correctly reachable from anybody on the internet through the domain name, the administrator can request a Let's Encrypt certificate. See the documentation about [certificates](/certificate) for more information. -Subpaths vs. individual domains per apps ----------------------------------------- +## Subpaths vs. individual domains per apps In the context of YunoHost, it is quite common to have a single (or a few) domains on which several apps are installed in "subpaths", so that you end up with something like this: diff --git a/email_configure_client_es.md b/pages/01.administrate/06.overview/08.emails/02.emailclients/email_configure_client.es.md similarity index 69% rename from email_configure_client_es.md rename to pages/01.administrate/06.overview/08.emails/02.emailclients/email_configure_client.es.md index 2cbda3c6..871841d6 100644 --- a/email_configure_client_es.md +++ b/pages/01.administrate/06.overview/08.emails/02.emailclients/email_configure_client.es.md @@ -1,4 +1,11 @@ -## Cómo configurar un cliente de correo electrónico +--- +title: Configurar un cliente de correo electrónico +template: docs +taxonomy: + category: docs +routes: + default: '/email_configure_client' +--- Es posible de consultar y enviar correos de tu YunoHost con un cliente de correo electrónico como Mozilla Thunderbird o K-9 Mail en el teléfono. Normalmente, al añadir tu cuenta en el cliente de correo se va a configurar automáticamente, pero por si acaso no funciona, puedes configurarlo manualmente. @@ -12,20 +19,21 @@ A continuación puedes encontrar los elementos a configurar en el cliente de cor | IMAP | 993 | SSL/TLS | Normal password | `nombre_de_usuario` (sin `@domain.tld`) | | SMTP | 587 | STARTTLS | Normal password | `nombre_de_usuario` (sin `@domain.tld`) | -### <img src="images/thunderbird.png" width=50> Configurar Mozilla Thunderbird (en un ordenador) + +###  Configurar Mozilla Thunderbird (en un ordenador) Para configurar manualmente un nuevo cuenta en Thunderbird, añadir las informaciones de la cuenta, y después seleccionar el puerto 993 con SSL/TLS para IMAP, y puerto 587 con STARTTLS para SMTP. Después seleccionar 'Normal Password' para Autenticación y haz click en el botón 'Advanced Config'. Se puede que tendrás que aceptar los certificados para que todo funciona normalmente. -<img src="/images/thunderbird_config_1.png" width=900> -<img src="/images/thunderbird_config_2.png" width=900> + + * [Gestionar un alias para una dirección de correo electrónico](https://support.mozilla.org/es/kb/configurar-un-alias-para-una-direccin-de-correo-el) -### <img src="images/k9mail.png" width=50> Configurar K-9 Mail (en Android) +###  Configurar K-9 Mail (en Android) Seguir los pasos a continuación. (Como para Thunderbird, se puede que tendrás que aceptar los certificados para que funciona normalmente.) -<a href="/images/k9mail_config_1.png"><img src="/images/k9mail_config_1.png" width=200/></a> -<a href="/images/k9mail_config_2.png"><img src="/images/k9mail_config_2.png" width=200/></a> -<a href="/images/k9mail_config_3.png"><img src="/images/k9mail_config_3.png" width=200/></a> -<a href="/images/k9mail_config_4.png"><img src="/images/k9mail_config_4.png" width=200/></a> + + + + diff --git a/pages/01.administrate/06.overview/08.emails/02.emailclients/email_configure_client.fr.md b/pages/01.administrate/06.overview/08.emails/02.emailclients/email_configure_client.fr.md new file mode 100644 index 00000000..cde298ef --- /dev/null +++ b/pages/01.administrate/06.overview/08.emails/02.emailclients/email_configure_client.fr.md @@ -0,0 +1,51 @@ +--- +title: Configurer un client email +template: docs +taxonomy: + category: docs +routes: + default: '/email_configure_client' +--- + +Vous pouvez récupérer et envoyer des emails avec votre instance YunoHost grâce à des logiciels comme Mozilla Thunderbird, ou sur votre smartphone grâce à des applications comme K-9 Mail. + +Normalement, votre client email devrait recevoir la configuration automatiquement lorsque vous ajoutez un compte. Si cela ne fonctionne pas, il est possible de le faire manuellement en suivant les quelques étapes suivantes. (Cependant, cela devrait être compris comme étant un bug dans YunoHost, et le cas échéant, c'est cool si vous nous notifiez du problème pour que nous puissions tenter de reproduire et corriger le problème !) + +### Réglages génériques + +Voici les éléments que vous devrez entrer pour configurer manuellement votre client email (`domain.tld` fait référence à ce qui est après le @ dans votre adresse email, et `nom_dutilisateur` ce qui est avant @). + +| Protocole | Port | Chiffrement | Authentification | Login | +| :--: | :-: | :--: | :--: | :--: | +| IMAP | 993 | SSL/TLS | Mot de passe normal | `nom_dutilisateur` (sans `@domain.tld`) | +| SMTP | 587 | STARTTLS | Mot de passe normal | `nom_dutilisateur` (sans `@domain.tld`) | + + +###  Configurer Mozilla Thunderbird + +Pour configurer manuellement un nouveau compte dans Thunderbird commencez par remplir les informations de base (Nom, adresse et mot de passe), cliquez sur Continuer puis Configuration Manuelle. Enlevez le `.` avant le nom de domaine. Sélectionnez le port 993 avec SSL/TLS pour IMAP, et le port 587 avec STARTTLS pour SMTP. Sélectionnez 'Mot de passe normal' pour l'authentification. Testez la configuration puis validez. (Il vous faudra ensuite possiblement accepter des certificats pour que tout fonctionne correctement.) + + + + +* [Gérer les alias mails](https://support.mozilla.org/en-US/kb/configuring-email-aliases) + +###  Configurer K-9 Mail (sur Android) + +Suivez les instructions suivantes. (Comme pour Thunderbird, il vous faudra peut-être accepter des certificats à un moment) + + + + + + +###  Configure Dekko (on Ubuntu Touch) + +La première fois, vous pouvez simplement choisir "Ajouter un compte". Si vous avez déjà un compte configuré, appuyez sur le menu hamburger puis sur le rouage, choisissez Courrier, Comptes et appuyez sur le symbole " + ". + +Sélectionnez ensuite IMAP. Remplissez les champs et appuyez sur Suivant. Dekko va ensuite chercher la configuration. Vérifiez que tous les champs sont corrects. Assurez-vous d'avoir votre nom d'utilisateur yunohost, PAS votre adresse email et choisissez "Autoriser les certificats non fiables". Faites ceci pour IMAP et SMTP et appuyez sur Suivant. Dekko va ensuite synchroniser le compte après quoi vous aurez terminé. Félicitations ! + + + + + diff --git a/email_configure_client.md b/pages/01.administrate/06.overview/08.emails/02.emailclients/email_configure_client.md similarity index 66% rename from email_configure_client.md rename to pages/01.administrate/06.overview/08.emails/02.emailclients/email_configure_client.md index a2511674..67388a3e 100644 --- a/email_configure_client.md +++ b/pages/01.administrate/06.overview/08.emails/02.emailclients/email_configure_client.md @@ -1,4 +1,11 @@ -## Configuring email client +--- +title: Configuring email client +template: docs +taxonomy: + category: docs +routes: + default: '/email_configure_client' +--- You can fetch and send emails using your YunoHost instance from desktop email clients such as Mozilla Thunderbird or on your smartphone with applications like K-9 Mail. @@ -13,31 +20,32 @@ Here are the element you should enter to manually configure your mail client (`d | IMAP | 993 | SSL/TLS | Normal password | `username` (without the `@domain.tld`) | | SMTP | 587 | STARTTLS | Normal password | `username` (without the `@domain.tld`) | -### <img src="images/thunderbird.png" width=50> Configure Mozilla Thunderbird (on a desktop computer) +###  Configure Mozilla Thunderbird (on a desktop computer) To manually configure a new account in Thunderbird, add the account information, then select port 993 with SSL/TLS for IMAP, and port 587 with STARTTLS for SMTP. Afterwards select 'Normal Password' for Authentication and click on 'Advanced Config'. You may need to accept the certificate exceptions for fetching mails and after you send your first mail. Don't forget to remove the dot before the domain name. -<img src="/images/thunderbird_config_1.png" width=900> -<img src="/images/thunderbird_config_2.png" width=900> + + * [Manage alias mails](https://support.mozilla.org/en-US/kb/configuring-email-aliases) -### <img src="images/k9mail.png" width=50> Configure K-9 Mail (on Android) +###  Configure K-9 Mail (on Android) Follow the following steps. (As for Thunderbird, you might need to accept certificates at some points) -<a href="/images/k9mail_config_1.png"><img src="/images/k9mail_config_1.png" width=200/></a> -<a href="/images/k9mail_config_2.png"><img src="/images/k9mail_config_2.png" width=200/></a> -<a href="/images/k9mail_config_3.png"><img src="/images/k9mail_config_3.png" width=200/></a> -<a href="/images/k9mail_config_4.png"><img src="/images/k9mail_config_4.png" width=200/></a> + + + + -### <img src="images/dekko-app.png" width=50> Configure Dekko (on Ubuntu Touch) + +###  Configure Dekko (on Ubuntu Touch) The first time you can simply choose "Add account". If you already have an account configured, tap the hamburger menu then tap the gear, choose Mail, Accounts and press the '+'-symbol. Then you choose IMAP. Fill in the fields and press Next. Now Dekko will look for the configuration. Check that all fields are correct. Make sure you have your yunohost username, NOT your mailadress and choose "Allow untrusted certificates". Do this for IMAP and SMTP and press Next. Dekko will now synchronise the account after which you are done. Congratz! -<a href="/images/dekko_config_1.png"><img src="/images/dekko_config_1.png" width=200/></a> -<a href="/images/dekko_config_2.png"><img src="/images/dekko_config_2.png" width=200/></a> -<a href="/images/dekko_config_3.png"><img src="/images/dekko_config_3.png" width=200/></a> -<a href="/images/dekko_config_4.png"><img src="/images/dekko_config_4.png" width=200/></a> + + + + diff --git a/pages/01.administrate/06.overview/08.emails/email.de.md b/pages/01.administrate/06.overview/08.emails/email.de.md new file mode 100644 index 00000000..c6cd979f --- /dev/null +++ b/pages/01.administrate/06.overview/08.emails/email.de.md @@ -0,0 +1,50 @@ +--- +title: E-Mails +template: docs +taxonomy: + category: docs +routes: + default: '/email' +--- + +YunoHost wird mit einem kompletten Mail-Stack geliefert, der es Ihnen ermöglicht, Ihren eigenen E-Mail-Server zu hosten und somit Ihre eigenen E-Mail-Adressen in ```irgendjemand@deine.domain.tld``` zu haben. + +Der Mail-Stack enthält einen SMTP-Server (Postfix), einen IMAP-Server (Dovecot), einen Antispam-Server (rspamd) und eine DKIM-Konfiguration. + +## Sicherstellen dass Ihre Einrichtungen richtig sind + +E-Mail ist ein kompliziertes Ökosystem und eine ganze Reihe von Details können sein ordnungsgemäßes Funktionieren verhindern. + +Um Ihre Einstellungen zu validieren: + +- Wenn Sie zu Hause selbst hosten und kein VPN verwenden, stellen Sie sicher das [Ihr ISP den Port 25 nicht blockiert](https://yunohost.org/#/isp); +- leiten Sie Ports weiter, wie in [dieser Dokumentation](https://yunohost.org/#/isp_box_config) beschrieben; +- Mail-DNS-Einträge nach [dieser Dokumentation](https://yunohost.org/#/dns_config) sorgfältig konfigurieren; +- testen Sie Ihre Konfiguration mit [Mail-tester.com](https://mail-tester.com/) (Vorsicht : nur 3 Tests pro Domain und Tag sind erlaubt) ; + +Eine Punktzahl von mindestens 8~9/10 ist ein angemessenes Ziel. + +## E-Mail-Programme + +Um mit dem E-Mail-Server zu interagieren (E-Mails lesen und senden), können Sie entweder einen Webclient wie Roundcube oder Rainloop auf Ihrem Server installieren - oder einen Desktop-/Mobil-Client, wie auf [dieser Seite](https://yunohost.org/#/email_configure_client) beschrieben, konfigurieren. + +Desktop- und Mobil-Clients haben den Vorteil, dass sie Ihre E-Mails auf das Gerät kopieren, was eine Offline-Anzeige und einen relativen Schutz gegen mögliche Hardware-Ausfälle Ihres Servers ermöglicht. + +## Konfigurieren von E-Mail-Aliasen und automatische Weiterleitungen + +Mail-Aliase und Weiterleitungen können für jeden Benutzer konfiguriert werden. Beispielsweise wird für den ersten, auf dem Server angelegten Benutzer automatisch ein Alias ```root@the.domain.tld``` konfiguriert. Das bedeutet das eine an diese Adresse gesendete E-Mail im Posteingang des ersten Benutzers endet. Automatische Weiterleitungen können konfiguriert werden, z.B. wenn ein Benutzer kein zusätzliches E-Mail-Konto einrichten möchte und nur E-Mails vom Server, z.B. auf seine E-Mail-Adresse, empfangen möchte. + +Eine weitere Funktion, die nur wenigen Leuten bekannt ist, ist die Verwendung von Suffixen, die mit "+" beginnen. Zum Beispiel landen E-Mails, die an ```johndoe+buchung@die.domain.tld``` gesendet werden, automatisch im Ordner ```buchung``` (Kleinbuchstaben) der Mailbox von John Doe oder im Posteingang von John Doe, wenn der Ordner ```buchung``` nicht existiert. Es ist eine praktische Technik, z.B. eine E-Mail-Adresse auf einer Website anzugeben und dann die von dieser Website kommende E-Mail einfach (über automatische Filter) zu sortieren. + +## Was passiert wenn mein Server nicht erreichbar ist? + +Wenn Ihr Server nicht mehr verfügbar ist, bleiben die an Ihren Server gesendeten E-Mails bis zu ~5 Tage lang in einer Warteschlange auf der Seite des Absenders. Der Hoster des Absenders wird regelmäßig versuchen, die E-Mail erneut zu senden, bis er sie verwirft, falls er sie nicht versenden konnte. + +## Formulare zum Entfernen seiner IP-Adresse von der schwarzen Liste + +Es ist möglich, dass die von Ihrer YunoHost-Instanz gesendeten E-Mails von den großen E-Mail-Diensten als Spam betrachtet werden. Ist es möglich, dass die IP-Adresse von Ihrem Server bereits früher zum Versenden von Spam verwendet wurde oder dass diese E-Mail-Dienste Ihren Server als Spam-Versender betrachten? Um sicherzustellen, dass die IP-Adresse Ihrer Server nicht in diese schwarzen Listen aufgenommen wird und um sie aus diesen zu entfernen, folgen Sie [diesem Link](https://yunohost.org/#/blacklist_forms). + +## Eine Migration von E-Mails von einem E-Mail-Provider zu einer YunoHost-Instanz + +Siehe [diese Seite](https://yunohost.org/#/email_migration). + diff --git a/email_es.md b/pages/01.administrate/06.overview/08.emails/email.es.md similarity index 86% rename from email_es.md rename to pages/01.administrate/06.overview/08.emails/email.es.md index 6bb8628f..7bbcc224 100644 --- a/email_es.md +++ b/pages/01.administrate/06.overview/08.emails/email.es.md @@ -1,12 +1,17 @@ -Emails -====== +--- +title: Emails +template: docs +taxonomy: + category: docs +routes: + default: '/email' +--- YunoHost integra un ecosistema completo de servidor mail, permitiéndote de alojar tu propia mensajería electrónica, y pues de tener tus propias direcciones email en `algo@tu.dominio.tld`. Este ecosistema comprende un servidor SMTP (postfix), un servidor IMAP (Dovecot), un antispam (rspamd) y una configuración DKIM. -Asegurarse de que la configuración esté correcta -------------------------------- +## Asegurarse de que la configuración esté correcta Los emails son un ecosistema complicado y una multitud de detalles puedes impedir que funcionen correctamente. @@ -18,27 +23,23 @@ Para validar que tu configuración es correcta : Una nota de al menos 8~9/10 es un objetivo razonable. -Clientes de mensajería -------------- +## Clientes de mensajería Para interactuar con el servidor de mail, o sea leer y mandar emails, puedes instalar un cliente web como Roundcube o Rainloop en tu servidor - o configurar un cliente de Desktop o móvil como descrito en [esta página][cette page](/email_configure_client). Los clientes Desktop o móvil tienen la ventaja de copiar tu emails en el equipo, así permitiendo la consulta desconectada de tus mensajes, y cierta protección frente a la posibilidad de un servidor averiado. -Configuration de los aliases de mensajeras y de las redirecciones automáticas -------------------------------------------- +## Configuration de los aliases de mensajeras y de las redirecciones automáticas Aliases de mensajeras y redirecciones pueden ser configurados por cada usuario. Por ejemplo, el primer usuario creado en el servidor automáticamente dispone de un alias `root@tu.dominio.tld` - lo que significa que un email mandado hacia esta dirección se encontrará en el buzón de entrada de este usuario. Las redirecciones automáticas pueden ser configuradas, por ejemplo si un usuario no quiere configurar una cuenta de correo adicional y simplemente desea recibir correos del servidor en - por ejemplo - su dirección gmail. Otra función desconocida es el uso del sufijo "+". Por ejemplo, email mandados a `johndoe+sncf@tu.dominio.tld` llegarán en el directorio 'sncf' del buzón de correo de John Dos (o directamente en el buzón si este directorio no existe). Es una técnica práctica que permite proveer una dirección de mail a un sitio y automatizar la clasificación de los correos que te mandará este sitio. -¿ Qué ocurre si mi servidor se pone indisponible ? ------------------------------------------------ +## ¿ Qué ocurre si mi servidor se pone indisponible ? Si tu servidor se pone indisponible, los correos electrónicos mandados a tu servir se quedarán en una fila de espera por el lado del expedidor durante aproximadamente 5 días. El proveedor de hosting del expedidor intentará mandarte regularmente el correo, hasta que lo tire si no lo puede enviar. -Más información --------------------- +## Más información -- Existe una página de documentación para [migrar sus emails desde un proveedor de mensajería hacia una instancia Yunohost](/email_migration). +- Existe una página de documentación para [migrar sus emails desde un proveedor de mensajería hacia una instancia YunoHost](/email_migration). - Para profundizar tu comprensión del correo electrónico y de sus protocolos, aquí tienes una [conferencia muy interesante](http://www.iletaitunefoisinternet.fr/lemail-par-benjamin-sonntag/index.html)(en francés). diff --git a/email_fr.md b/pages/01.administrate/06.overview/08.emails/email.fr.md similarity index 82% rename from email_fr.md rename to pages/01.administrate/06.overview/08.emails/email.fr.md index eb5d0c81..75aca04c 100644 --- a/email_fr.md +++ b/pages/01.administrate/06.overview/08.emails/email.fr.md @@ -1,50 +1,52 @@ -Emails -====== +--- +title: Emails +template: docs +taxonomy: + category: docs +routes: + default: '/email' +--- YunoHost est livré avec un écosystème complet de serveur mail, vous permettant d'héberger votre propre serveur de messagerie, et donc d'avoir vos propres adresses email dans `quelquechose@votre.domaine.tld`. Cet écosystème comprend un serveur SMTP (postfix), un serveur IMAP (Dovecot), un antispam (rspamd) et une configuration DKIM. -S'assurer que votre configuration est correcte -------------------------------- +## S'assurer que votre configuration est correcte Les emails sont un écosystème compliqué et un grand nombre de détails peuvent les empêcher de fonctionner correctement. Pour valider que votre configuration est correcte : -- si vous vous hébergez chez vous et n'utilisez pas de VPN, assurez-vous que [votre FAI ne bloque pas le port 25](isp) ; -- routez les ports selon [cette documentation](isp_box_config) ; -- configurez soigneusement les enregistrements DNS du courrier électronique selon [cette documentation](dns_config) ; +- si vous vous hébergez chez vous et n'utilisez pas de VPN, assurez-vous que [votre FAI ne bloque pas le port 25](/isp) ; +- routez les ports selon [cette documentation](/isp_box_config) ; +- configurez soigneusement les enregistrements DNS du courrier électronique selon [cette documentation](/dns_config) ; - Testez votre configuration en utilisant [Mail-tester.com](https://mail-tester.com) <small>(attention : seuls 3 tests par domaine et par jour sont autorisés)</small> ; Un score d'au moins 8~9/10 est un but raisonnable. -Clients de messagerie -------------- +## Clients de messagerie -Pour interagir avec le serveur de mail, c'est-à-dire lire et envoyer des emails, vous pouvez soit installer un client web comme Roundcube ou Rainloop sur votre serveur - ou configurer un client de bureau ou mobile comme décrit dans [cette page](email_configure_client). +Pour interagir avec le serveur de mail, c'est-à-dire lire et envoyer des emails, vous pouvez soit installer un client web comme Roundcube ou Rainloop sur votre serveur - ou configurer un client de bureau ou mobile comme décrit dans [cette page](/email_configure_client). Les clients de bureau ou mobile ont l'avantage de copier vos emails sur l'équipement permettant ainsi la consultation hors ligne et une protection relative face à d'éventuelles pannes matériel de votre serveur. -Configuration des alias de messagerie et des redirections automatiques -------------------------------------------- +## Configuration des alias de messagerie et des redirections automatiques Des alias de messagerie et des redirections peuvent être configurés pour chaque utilisateur. Par exemple, le premier utilisateur créé sur le serveur dispose automatiquement d'un alias `root@votre.domaine.tld` - ce qui signifie qu'un email envoyé vers cette adresse se retrouvera dans la boîte de réception de cet utilisateur. Les redirections automatiques peuvent être configurées, par exemple si un utilisateur ne veut pas configurer un compte de messagerie supplémentaire et souhaite simplement recevoir des courriels du serveur sur, disons, son adresse gmail. Une autre fonctionnalité méconnue est l'utilisation de suffixe commencant par "+". Par exemple, les emails envoyés à `johndoe+sncf@votre.domaine.tld` atteriront dans le dossier 'sncf' de la boîte mail de John Doe (ou bien directement dans la boîle mail si ce dossier n'existe pas). C'est une technique pratique pour par exemple fournir une adresse mail à un site puis facilement trier (via des filtres automatiques) les courriers venant de ce site. -Que se passe-t-il si mon serveur devient indisponible ? ------------------------------------------------ +## Que se passe-t-il si mon serveur devient indisponible ? Si votre serveur devient indisponible, les courriels envoyés à votre serveur resteront dans une file d'attente du côté de l'expéditeur pendant environ 5 jours. L'hébergeur de l'expéditeur tentera régulièrement de renvoyer le courrier, jusqu'à ce qu'il le jette s'il n'a pas pu l'envoyer. ## Formulaires pour enlever son adresse IP des listes noires + Il est possible que les emails envoyés depuis votre instance YunoHost soient considérés comme du spam par les grands services de mails. Il est possible que l’adresse IP de votre serveur a autrefois été utilisé pour envoyé du spam ou que ces services de mails considèrent votre serveur comme émetteur de spams. Pour s’assurer que l’adresse IP de votre serveur n’est pas dans ces listes et pour l’enlever dans le cas échéant suivez ce [lien](/blacklist_forms). -Pour aller plus loin --------------------- +## Pour aller plus loin -- Il existe une page de documentation pour [migrer ses emails d'un fournisseur de messagerie vers une instance YunoHost](email_migration). +- Il existe une page de documentation pour [migrer ses emails d'un fournisseur de messagerie vers une instance YunoHost](/email_migration). - Pour approfondir votre compréhension du courriel et de ses protocoles, voici une [conférence éclairante](https://www.octopuce.fr/conference-lemail-vaste-sujet-par-benjamin-sonntag/)(en français). diff --git a/email.md b/pages/01.administrate/06.overview/08.emails/email.md similarity index 72% rename from email.md rename to pages/01.administrate/06.overview/08.emails/email.md index 63525b4c..171955fc 100644 --- a/email.md +++ b/pages/01.administrate/06.overview/08.emails/email.md @@ -1,39 +1,41 @@ -Emails -====== +--- +title: Emails +template: docs +taxonomy: + category: docs +routes: + default: '/email' +--- YunoHost comes with a complete mail stack allowing you to host your own email server, and therefore to have your own email addresses in `something@your.domain.tld`. The mail stack includes a SMTP server (postfix), an IMAP server (Dovecot), an antispam (rspamd) and DKIM configuration. -Making sure your setup is right -------------------------------- +## Making sure your setup is right Email is a complicated ecosystem and quite a few details can prevent it from working properly. To validate your setup: -- if you are self-hosting at home and not using a VPN, ensure [your ISP won't block port 25](isp) ; -- route ports according to [this documentation](isp_box_config) ; -- carefully configure mail DNS records according to [this documentation](dns_config) ; +- if you are self-hosting at home and not using a VPN, ensure [your ISP won't block port 25](/isp) ; +- route ports according to [this documentation](/isp_box_config) ; +- carefully configure mail DNS records according to [this documentation](/dns_config) ; - test your setup using [Mail-tester.com](https://mail-tester.com) <small>(be careful : only 3 tests per domain per day are allowed)</small> ; A score of at least 8~9/10 is a reasonnable goal. -Email clients -------------- +## Email clients -To interact with the email sever (read and send emails), you can either install a webclient such as Roundcube or Rainloop on your server - or configure a desktop/mobile client as described in [this page](email_configure_client). +To interact with the email sever (read and send emails), you can either install a webclient such as Roundcube or Rainloop on your server - or configure a desktop/mobile client as described in [this page](/email_configure_client). Desktop and mobile clients have the advantage of copying your emails to the device, allowing offline viewing and relative protection against possible hardware failures of your server. -Configuring email aliases and auto-forwards -------------------------------------------- +## Configuring email aliases and auto-forwards Mail aliases and forwards can be configured for each users. For instance, the first user created on the server automatically has an alias `root@the.domain.tld` configured - meaning that an email sent to this adress will end in the inbox of the first user. Automatic forwards may be configured, for instance if an user doesn't want to configure an additional email account and just wants to receive emails from the server on, say, his/her gmail address. -Another feature which few people know about is the use of suffixes beginning with "+". For example, emails sent to `johndoe+booking@votre.domaine.tld` will automatically land in the `booking` dir (lowercase) of John Doe's mailbox or in John Doe's inbox if `booking` directory doesn't exist . It is a practical technique for example to provide an e-mail address to a website, then easily sort (via automatic filters) the mail coming from this website. +Another feature which few people know about is the use of suffixes beginning with "+". For example, emails sent to `johndoe+booking@the.domain.tld` will automatically land in the `booking` dir (lowercase) of John Doe's mailbox or in John Doe's inbox if `booking` directory doesn't exist . It is a practical technique for example to provide an e-mail address to a website, then easily sort (via automatic filters) the mail coming from this website. -What happens if my server becomes unavailable ? ------------------------------------------------ +## What happens if my server becomes unavailable? If your server becomes unavailable, emails sent to your server will stay in a pending queue on the sender's side for as long as ~5 days. The sender's hoster will regularly try to resend the email, until it drops it if it was unable to send it. @@ -42,7 +44,10 @@ It is possible that the sent emails from your YunoHost instance are considered a Is it possible that the IP address from your server have been previously been used to sent spam or that these email services consider your server as a spam sender. To ensure that your servers’ IP address isn’t into this blacklists and to remove it from them, follow this [link](/blacklist_forms). -Migrating email from an email provider to a YunoHost instance -------------------------------------------------------------- +## Migrating email from an email provider to a YunoHost instance -See [this page](email_migration). +See [this page](/email_migration). + +## Configuring SMTP relay + +See [this page](/email_configure_relay). \ No newline at end of file diff --git a/XMPP_es.md b/pages/01.administrate/06.overview/09.xmpp/XMPP.es.md similarity index 79% rename from XMPP_es.md rename to pages/01.administrate/06.overview/09.xmpp/XMPP.es.md index af443fe1..69466c08 100644 --- a/XMPP_es.md +++ b/pages/01.administrate/06.overview/09.xmpp/XMPP.es.md @@ -1,6 +1,15 @@ -# Chat, VoIP y red local con <img src="/images/XMPP_logo.png" width=100> +--- +title: Chat, VoIP y red local con XMPP +template: docs +taxonomy: + category: docs +routes: + default: '/XMPP' +--- -Yunohost está instalado con un servidor de mensajería instantánea Metronome que implementa el [protocolo XMPP](https://es.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol). + + +YunoHost está instalado con un servidor de mensajería instantánea Metronome que implementa el [protocolo XMPP](https://es.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol). XMPP es un protocolo abierto y extensible que también permite crear salones de discusión, compartir status y datos, echar llamadas en VoIP y hacer videoconferencias. @@ -8,7 +17,7 @@ Todas las aplicaciones basadas en XMPP son compatibles entre ellas : cuando util ## Cuenta XMPP/Jabber -Una cuenta XMPP/Jabber está basada en un ID bajo la forma `usuario@dominio.tld`, así como una contraseña. La contraseña es la de la cuenta del usuario de Yunohost. +Una cuenta XMPP/Jabber está basada en un ID bajo la forma `usuario@dominio.tld`, así como una contraseña. La contraseña es la de la cuenta del usuario de YunoHost. ## Conectarse a XMPP @@ -21,12 +30,14 @@ También puedes utilizar un cliente Desktop como : - [Gajim](https://gajim.org/es/) (Linux, Windows) - [Dino](https://dino.im) (Linux) - [Thunderbird](https://www.thunderbird.net/es-ES/) (multiplataformas) +- [Beagle IM](https://beagle.im/) (macOS) - [Profanity](https://profanity-im.github.io/) (Linux) ... o un cliente smartphone : - [Conversations](https://conversations.im/) (Android) - [Xabber](http://xabber.com) (Android) -- [Movim sous Android](https://movim.eu) +- [Movim](https://movim.eu) (Android) +- [ChatSecure](https://chatsecure.org/) (iOS) - [Siskin IM](https://siskin.im/) (iOS) - [Monal](https://monal.im/) (iOS) - [Kaidan](https://www.kaidan.im/) (Ubuntu Touch / Plasma Mobile) @@ -42,7 +53,7 @@ Es posible cifrar tu conversaciones XMPP con la ayuda de [OMEMO](https://xmpp.or ### Salón de discusión -Para crear un salón de discusión (Multi-user chat) en tu servidor Yunohost, utiliza el ID nombredelsalon@muc.dominio.tld (donde dominio.tld es el dominio principal de tu servidor). +Para crear un salón de discusión (Multi-user chat) en tu servidor YunoHost, utiliza el ID nombredelsalon@muc.dominio.tld (donde dominio.tld es el dominio principal de tu servidor). Si utilizas un nombre de dominio personal, es necesario [añadir una redirección de tipo CNAME para el subdominio `muc.`](/dns_config) en tu servidor DNS. diff --git a/XMPP_fr.md b/pages/01.administrate/06.overview/09.xmpp/XMPP.fr.md similarity index 82% rename from XMPP_fr.md rename to pages/01.administrate/06.overview/09.xmpp/XMPP.fr.md index a5d4b0f7..56765e0b 100644 --- a/XMPP_fr.md +++ b/pages/01.administrate/06.overview/09.xmpp/XMPP.fr.md @@ -1,6 +1,15 @@ -#Chat, VoIP et réseau social avec <img src="/images/XMPP_logo.png" width=100> +--- +title: Chat, VoIP et réseau social avec XMPP +template: docs +taxonomy: + category: docs +routes: + default: '/XMPP' +--- -Yunohost est installé par défaut avec un serveur de messagerie instantanée Metronome qui implémente le [protocole XMPP](https://fr.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol) (anciennement connu sous le nom Jabber). + + +YunoHost est installé par défaut avec un serveur de messagerie instantanée Metronome qui implémente le [protocole XMPP](https://fr.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol) (anciennement connu sous le nom Jabber). Ce protocole est déjà utilisé par des millions de personnes dans le monde - c'est un protocole ouvert. Toutes les applications basées sur XMPP sont compatibles entre elles : lorsque vous utilisez un client XMPP, vous pouvez interagir avec quiconque possède un compte XMPP. @@ -10,7 +19,7 @@ XMPP est un protocole extensible - cela signifie que les utilisateurs peuvent co Pour utiliser XMPP, il est nécessaire de disposer d'un compte dont l'identifiant prends la forme `utilisateur@domaine.tld`, ainsi qu’un mot de passe. -Sous Yunohost, un compte XMPP est créé automatiquement pour chaque utilisateur. Les identifiants XMPP sont simplement l’adresse courriel principale de l'utilisateur ainsi que son mot de passe. +Sous YunoHost, un compte XMPP est créé automatiquement pour chaque utilisateur. Les identifiants XMPP sont simplement l’adresse courriel principale de l'utilisateur ainsi que son mot de passe. ## Se connecter à son compte XMPP YunoHost @@ -24,18 +33,19 @@ Il existe différents types de clients pour se connecter à XMPP. ### Clients de bureau -- [Gajim](http://gajim.org/fr/) (Linux,Windows) +- [Gajim](http://gajim.org/fr/) (Linux, Windows) - [Dino](https://dino.im) (Linux) - [Thunderbird](https://www.thunderbird.net/) (multiplateforme) -- [Beagle IM](https://beagle.im/) (Mac OS) +- [Beagle IM](https://beagle.im/) (macOS) - [Profanity](https://profanity-im.github.io/) (Linux) ### Clients sur mobile - [Conversations](https://conversations.im/) (Android) - [Xabber](http://xabber.com) (Android) -- [Movim sous Android](https://movim.eu) +- [Movim](https://movim.eu) (Android) - [Monal](https://monal.im/) (iOS) +- [ChatSecure](https://chatsecure.org/) (iOS) - [Siskin IM](https://siskin.im/) (iOS) - [Kaidan](https://www.kaidan.im/) (Ubuntu Touch / Plasma Mobile) @@ -45,13 +55,12 @@ Voici une liste plus exhaustive des clients XMPP : https://fr.wikipedia.org/wik Il est possible de rendre les conversations plus sécurisées et privées en les chiffrants à l'aide de [OMEMO](https://xmpp.org/extensions/xep-0384.html), notamment en utilisant Gajim : - Installer `gajim` et le plugin `gajim-omemo` -- Activez le plugins dans `Outils > Plugins` -- L'activer +- Activez le plugin dans `Outils > Plugins` - Activez le chiffrement dans une conversation avec un contact disposant de OMEMO. ## Salon de discussion -Pour créer un salon de discussion (Multi-user chat) sur votre serveur Yunohost utilisez l’identifiant nomsalon@muc.domaine.tld (où domaine.tld est le domaine principal de votre serveur). +Pour créer un salon de discussion (Multi-user chat) sur votre serveur YunoHost utilisez l’identifiant nomsalon@muc.domaine.tld (où domaine.tld est le domaine principal de votre serveur). Si vous utilisez un nom de domaine personnel, il est nécessaire d’[ajouter une redirection de type CNAME pour le sous domaine `muc.`](/dns_config) au niveau de votre serveur DNS. diff --git a/pages/01.administrate/06.overview/09.xmpp/XMPP.md b/pages/01.administrate/06.overview/09.xmpp/XMPP.md new file mode 100644 index 00000000..03767c82 --- /dev/null +++ b/pages/01.administrate/06.overview/09.xmpp/XMPP.md @@ -0,0 +1,71 @@ +--- +title: Chat, VoIP and social network with XMPP +template: docs +taxonomy: + category: docs +routes: + default: '/XMPP' +--- + + + +By default, YunoHost comes installed with an instant messaging server called Metronome which implements the [XMPP protocol](https://en.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol) (previously known as Jabber). + +This protocol is already used by millions of people around the world—it is an open protocol. +All applications based on XMPP are compatible with each other: When using an XMPP client, you can interact with anybody who has an XMPP account. + +XMPP is an extensible protocol—this means users can configure "extensions" to chatrooms, share messages and files, and make voice and video calls using XMPP. + +## XMPP account + +To use an XMPP account you need a username, in the format: `user@domain.tld`, and a password. + +With YunoHost, an XMPP account is created for all YunoHost users automatically. +The XMPP account credentials corresponds to the user's main e-mail address and password. + +## Connecting to your YunoHost XMPP account + +You can connect to your YunoHost XMPP account in different ways. + +### Web clients + +- [Movim](https://movim.eu) +- [ConverseJS](https://conversejs.org/) +- [Libervia/Salut à Toi](https://salut-a-toi.org/) + +### Desktop clients + +- [Gajim](https://gajim.org/) (Linux, Windows) +- [Dino](https://dino.im) (Linux) +- [Thunderbird](https://www.thunderbird.net/fr/) (multiplatform) +- [Beagle IM](https://beagle.im/) (macOS) +- [Profanity](https://profanity-im.github.io/) (Linux) + +### Mobile clients + +- [Conversations](https://conversations.im/) (Android) +- [Xabber](https://xabber.com) (Android) +- [Movim](https://movim.eu) (Android) +- [ChatSecure](https://chatsecure.org/) (iOS) +- [Monal](https://monal.im/) (iOS) +- [Siskin IM](https://siskin.im/) (iOS) +- [Kaidan](https://www.kaidan.im/) (Ubuntu Touch / Plasma Mobile) + +Here is an exhaustive list of XMPP clients: https://xmpp.org/software/clients.html + +## Encrypt conversations with OMEMO + +XMPP chats can be made secure and private using [OMEMO encryption](https://xmpp.org/extensions/xep-0384.html), for instance using Gajim: +- Install `gajim` and the plugin `gajim-omemo`. +- Turn on the plugin in `Tools > Plugins`. +- Turn on the encryption in the chat with somebody who also has OMEMO. + +## Chatrooms + +To create a chatroom (multi-user chat) on your YunoHost server, use the identifier `chatroomname@muc.yourdomain.tld`. + +For this to work you need to [add the corresponding `muc.` DNS record](/dns_config) in the DNS configuration. + +## VoIP and videoconferences + +A practical tool to call an XMPP client, either with voice or voice+video, is to use the [Jitsi](https://jitsi.org/) client. diff --git a/backup_fr.md b/pages/01.administrate/06.overview/10.backups/backup.fr.md similarity index 81% rename from backup_fr.md rename to pages/01.administrate/06.overview/10.backups/backup.fr.md index 163d1301..7ffa29c7 100644 --- a/backup_fr.md +++ b/pages/01.administrate/06.overview/10.backups/backup.fr.md @@ -1,10 +1,15 @@ -Sauvegarder son serveur et ses apps -=================================== +--- +title: Sauvegarder son serveur et ses apps +template: docs +taxonomy: + category: docs +routes: + default: '/backup' +--- -Dans le contexte de l'auto-hébergement, les sauvegardes (backup) sont un élément important pour pallier les événements inattendus (incendies, corruption de base de données, perte d'accès au serveur, serveur compromis, ...). La politique de sauvegardes à mettre en place dépend de l'importance des services et des données que vous gérez. Par exemple, sauvegarder un serveur de test aura peu d'intérêt, tandis que vous voudrez être très prudent si vous gérez des données critiques pour une association ou une entreprise - et dans ce genre de cas, vous souhaiterez stocker les sauvegardes *dans un endroit différent*. +Dans le contexte de l'auto-hébergement, les sauvegardes (backup) sont un élément important pour pallier les événements inattendus (incendies, corruption de base de données, perte d'accès au serveur, serveur compromis...). La politique de sauvegardes à mettre en place dépend de l'importance des services et des données que vous gérez. Par exemple, sauvegarder un serveur de test aura peu d'intérêt, tandis que vous voudrez être très prudent si vous gérez des données critiques pour une association ou une entreprise - et dans ce genre de cas, vous souhaiterez stocker les sauvegardes *dans un endroit différent*. -Les sauvegardes avec YunoHost ------------------------------ +## Les sauvegardes avec YunoHost YunoHost contient un système de sauvegarde, qui permet de sauvegarder (et restaurer) les configurations du système, les données "système" (comme les mails) et les applications si elles le supportent. @@ -12,18 +17,17 @@ Vous pouvez gérer vos sauvegardes via la ligne de commande (`yunohost backup -- La méthode de sauvegarde actuelle consiste à créer des archives `.tar.gz` qui contiennent les fichiers pertinents. Pour le futur, YunoHost envisage de supporter nativement [Borg](https://www.borgbackup.org/) qui est une solution plus flexible, performante et puissante pour gérer des sauvegardes. -Créer des sauvegardes ---------------------- +## Créer des sauvegardes #### Depuis la webadmin Vous pouvez facilement créer des archives depuis la webadmin en allant dans Sauvegardes > Archives locales et en cliquant sur "Nouvelle sauvegarde". Vous pourrez ensuite sélectionner les éléments à sauvegarder (configuration, données "système", applications). - + #### Depuis la ligne de commande -Vous pouvez créer de nouvelles archives depuis la ligne de commande. Voici quelques exemples de commandes et leur comportement correspondant: +Vous pouvez créer de nouvelles archives depuis la ligne de commande. Voici quelques exemples de commandes et leur comportement correspondant : - Tout sauvegarder (système et apps) ```bash @@ -59,8 +63,7 @@ Lors d'une mise à jour, les apps contenant une grande quantité de données eff Pour désactiver manuellement la sauvegarde des données volumineuses, pour les applications qui implémentent cette fonctionnalité, vous pouvez définir la variable `BACKUP_CORE_ONLY`. Pour ce faire, la variable doit être définie avant la commande de backup : `sudo BACKUP_CORE_ONLY=1 yunohost backup create --apps nextcloud`. Soyez prudent : il vous faudra alors sauvegarder vous-même les données des utilisateurs de Nextcloud. Choisir ce type de sauvegarde vous permettra de mettre en place manuellement des sauvegardes incrémentielles ou différentielles (que YunoHost ne permet pas encore de faire automatiquement). -Télécharger et téléverser des sauvegardes ------------------------------------------ +## Télécharger et téléverser des sauvegardes Après avoir créé des sauvegardes, il est possible de les lister et de les inspecter grâce aux vues correspondantes dans la webadmin, ou via `yunohost backup list` et `yunohost backup info <nom_d'archive>` depuis la ligne de commande. Par défaut, les sauvegardes sont stockées dans `/home/yunohost.backup/archives/`. @@ -68,7 +71,7 @@ Après avoir créé des sauvegardes, il est possible de les lister et de les ins Une autre solution alternative consiste à installer une application comme Nextcloud et à la configurer pour être en mesure d'accéder aux fichiers dans `/home/yunohost.backup/archives/` depuis un navigateur web. -Enfin, il est possible d'utiliser `scp` (un programme basé sur [`ssh`](/ssh)) pour copier des fichiers entre deux machines grâce à la ligne de commande. Ainsi, depuis une machine sous Linux, vous pouvez utiliser la commande suivante pour télécharger une archive : +Enfin, il est possible d'utiliser `scp` (un programme basé sur [`ssh`](/ssh)) pour copier des fichiers entre deux machines grâce à la ligne de commande. Ainsi, depuis une machine sous GNU/Linux, vous pouvez utiliser la commande suivante pour télécharger une archive : ```bash scp admin@your.domain.tld:/home/yunohost.backup/archives/<nom_d'archive>.tar.gz ./ @@ -80,14 +83,13 @@ De façon similaire, vous pouvez téléverser une sauvegarde depuis une machine scp /path/to/your/<nom_d'archive>.tar.gz admin@your.domain.tld:/home/yunohost.backup/archives/ ``` -Restaurer des sauvegardes -------------------------- +## Restaurer des sauvegardes #### Depuis la webadmin Allez dans Sauvegardes > Sauvegardes locales et sélectionnez l'archive. Vous pouvez ensuite choisir les différents éléments que vous voulez restaurer puis cliquer sur "Restaurer". - + #### Depuis la ligne de commande @@ -115,9 +117,7 @@ mv /chemin/vers/<nom_d'archive> /home/yunohost.backup/archives/ yunohost backup restore <nom_d'archive> ``` - -Pour aller plus loin --------------------- +## Pour aller plus loin #### Stocker les archives sur un autre disque @@ -154,18 +154,22 @@ Il existe aussi l'application Archivist qui permet un système similaire : https #### Éviter de sauvegarder certains dossiers Si besoin, vous pouvez spécifier que certains dossiers `home` d'utilisateurs ne soient pas sauvegardés par la commande `yunohost backup`, en créant un fichier vide nommé `.nobackup` à l'intérieur. -#### Backup complet avec `dd` -Si vous êtes sur une carte ARM, une autre méthode pour créer une sauvegarde complète consiste à créer une image (copie) de la carte SD. Pour cela, éteignez votre serveur, insérez la carte SD dans votre ordinateur et créez une image avec une commande comme : +#### Pour les cartes ARM: backup complet avec USBimager ou `dd` + +Si vous êtes sur une carte ARM, une autre méthode de backup consiste à créer une image de la carte SD. + +Ceci peut être effectué avec [USBimager](https://bztsrc.gitlab.io/usbimager/) (N.B. : assurez-vous de télécharger la version 'Read-write' ! Pas la version 'Write-only' !). Le processus consiste ensuite à "l'inverse" du processus de flashage de la carte SD: +- Éteignez votre serveur +- Récupérez la carte SD et branchez la dans votre ordinateur +- Dans USBimager, cliquez "Read" pour créer une image ("photographie") de la carte SD. Vous pouvez utiliser le fichier obtenu pour plus tard restaurer le système en entier. + +Plus de détails dans [la doc d'USBimager](https://gitlab.com/bztsrc/usbimager/#creating-backup-image-file-from-device) + +Il est possible d'obtenir la même chose avec `dd` si vous êtes à l'aise avec la ligne de commande: ```bash -dd if=/dev/mmcblk0 of=./backup.img status=progress +dd if=/dev/mmcblk0 | gzip > ./my_snapshot.gz ``` (remplacez `/dev/mmcblk0` par le vrai nom de votre carte SD) - -Vous pouvez aussi compresser l'image à l'aide de gzip : - -```bash -dd if=/dev/mmcblk0 | gzip > ./image.gz -``` diff --git a/backup_it.md b/pages/01.administrate/06.overview/10.backups/backup.it.md similarity index 85% rename from backup_it.md rename to pages/01.administrate/06.overview/10.backups/backup.it.md index 6a157779..168d7129 100644 --- a/backup_it.md +++ b/pages/01.administrate/06.overview/10.backups/backup.it.md @@ -1,4 +1,11 @@ -# Eseguire il backup del vostro server e delle app +--- +title: Eseguire il backup del vostro server e delle app +template: docs +taxonomy: + category: docs +routes: + default: '/backup' +--- Eseguire il backup del vostro server, delle app e dei dati è un compito importante nell'amministrazione di un server poiché vi protegge da eventi inaspettati ma sempre possibili (come server distrutto da un incendio, corruzione del database, perdita delle credenziali di accesso, compromissione del server e altro). La policy di backup che adotterete dipende dall'importanza dei dati che state gestendo: ad esempio non sarà tanto importante avere il backup di un server di prova mentre lo sarà per un server contenente dati importanti per un'associazione o una ditta e sarà altrettanto importante tenere questo backup *in un luogo fisico diverso dal server stesso*. @@ -16,7 +23,7 @@ Il metodo di default attuale crea degli archivi `.tar.gz` contenenti tutti i fil Potete creare gli archivi di backup dalla pagina web di amministrazione andando in Backup > Archivi locali e cliccare su "Nuovo backup". Vi verrà chiesto di selezionare quale configurazione, dati e di quale app volete fare il backup. - + ### Dalla riga di comando @@ -73,7 +80,7 @@ Attualmente il modo più semplice per scaricare gli archivi è usando il program Una soluzione alternativa è quella di installare Netxcloud o un'applicazione simile e configurarle per accedere ai file contenuti in `/home/yunohost.backup/archives/` da un browser. -Un'altra soluzione è quella di usare `scp` (un programma che si basa su [`ssh`](/ssh)) per copiare i file fra due computer usando la riga di comando. In questo modo usando un computer con Linux potete copiare uno specifico backup con questo comando: +Un'altra soluzione è quella di usare `scp` (un programma che si basa su [`ssh`](/ssh)) per copiare i file fra due computer usando la riga di comando. In questo modo usando un computer con GNU/Linux potete copiare uno specifico backup con questo comando: ```bash scp admin@your.domain.tld:/home/yunohost.backup/archives/<archivename>.tar.gz ./ @@ -92,7 +99,7 @@ scp /path/to/your/<archivename>.tar.gz admin@your.domain.tld:/home/yunohost.back Dovete andare in Backup > Archivi locali e selezionare il vostro archivio. È possibile selezionare ciò che volete ripristinare e poi cliccare su 'Ripristina'. - + ### Dalla riga di comando @@ -157,13 +164,21 @@ Potete seguire questo tutorial sul forum per impostare Borg fra due server: <htt Alternativamente, la app Archivist permette di impostare un sistema simile: <https://forum.yunohost.org/t/new-app-archivist/3747> -#### Backup completo con `dd` +#### For ARM boards: full backup with USBimager or `dd` -Se state usando una board ARM un altro metodo per eseguire un backup completo è quello di creare un'immagine della card SD. Per fare questo innanzitutto spegnete la vostra board ARM, prendete la card SD e createne un'immagine completa con un comando come il seguente: +If you are using an ARM board, another method for doing a full backup can be to create an image of the SD card. +This can be done easily using [USBimager](https://bztsrc.gitlab.io/usbimager/) (N.B. be sure to get the Read-Write version! Not the write-only version!). The process is basically the *reverse* of flashing the SD card. +- Poweroff your server +- Get the SD card and plug it into your computer +- Using USBimager, click the *Read* button to create an image (snapshot) of the sd card. You can use it later to restore the entire system. + +More details [in the USBimager doc](https://gitlab.com/bztsrc/usbimager/#creating-backup-image-file-from-device) + +Alternatively you can use `dd` if you're comfortable with the command line with something like: ```bash -dd if=/dev/mmcblk0 of=./backup.img status=progress +dd if=/dev/mmcblk0 | gzip > ./my_snapshot.gz ``` -(modificate `/dev/mmcblk0` con il device reale della vostra card) \ No newline at end of file +(replace `/dev/mmcblk0` with the actual device of your SD card) diff --git a/backup.md b/pages/01.administrate/06.overview/10.backups/backup.md similarity index 70% rename from backup.md rename to pages/01.administrate/06.overview/10.backups/backup.md index 9cffbdd6..c08552d1 100644 --- a/backup.md +++ b/pages/01.administrate/06.overview/10.backups/backup.md @@ -1,6 +1,13 @@ -# Backing up your server and apps +--- +title: Backing up your server and apps +template: docs +taxonomy: + category: docs +routes: + default: '/backup' +--- -Backing up your server, apps and data is an important concern when administrating a server. This protects you from unexpected events that could happen (server lost in a fire, database corruption, loss of access, server compromised, ...). The backup policy you will put in place depends of the importance of the services and data hosted. For instance you won't care too much about having backup on a test server, but you will care about having a backup of critical data of your association or company, and having this backup *in a different physical place*. +Backing up your server, apps and data is an important concern when administrating a server. This protects you from unexpected events that could happen (server lost in a fire, database corruption, loss of access, server compromised...). The backup policy you will put in place depends of the importance of the services and data hosted. For instance you won't care too much about having backup on a test server, but you will care about having a backup of critical data of your association or company, and having this backup *in a different physical place*. ## Backups in the context of YunoHost @@ -16,13 +23,13 @@ The current default method consists in creating a `.tar.gz` archive containing a You can easily create backup archives from the webadmin by going in Backups > Local storage and clicking on "New backup". You will then be asked to select which configuration, data and apps you want to backup. - + ### From the command line -You can create a new backup archive with the command line. Here are a few simple example of commands and their corresponding behavior : +You can create a new backup archive with the command line. Here are a few simple example of commands and their corresponding behavior: -- Backing up everything (all system parts and apps) : +- Backing up everything (all system parts and apps): ```bash yunohost backup create @@ -61,7 +68,6 @@ When performing an upgrade, apps with large quantity of data will, usually, do a To manually disable the backup of large data, for application that implement that feature, you can set the variable `BACKUP_CORE_ONLY`. To do so, the variable have to be set before the backup command: `sudo BACKUP_CORE_ONLY=1 yunohost backup create --apps nextcloud`. Be careful though that mean you will have to backup user data yourself. But doing so, you will be able to do incremental or differential backups of this large amount of data (which is not an option provided by yunohost yet). - ## Downloading and uploading backups After creating backup archives, it is possible to list and inspect them via the corresponding views in the webadmin, or via `yunohost backup list` and `yunohost backup info <archivename>` from the command line. By default, backups are stored in `/home/yunohost.backup/archives/`. @@ -70,7 +76,7 @@ Currently, the most accessible way to download archives is to use the program Fi Alternatively, a solution can be to install Nextcloud or a similar app and configure it to be able to access files in `/home/yunohost.backup/archives/` from a web browser. -One solution consists in using `scp` (a program based on [`ssh`](/ssh)) to copy files between two machines via the command line. Hence, from a machine running Linux, you should be able to run the following to download a specific backup: +One solution consists in using `scp` (a program based on [`ssh`](/ssh)) to copy files between two machines via the command line. Hence, from a machine running GNU/Linux, you should be able to run the following to download a specific backup: ```bash scp admin@your.domain.tld:/home/yunohost.backup/archives/<archivename>.tar.gz ./ @@ -88,7 +94,7 @@ scp /path/to/your/<archivename>.tar.gz admin@your.domain.tld:/home/yunohost.back Go in Backup > Local storage and select your archive. You can then select which items you want to restore, then click on 'Restore'. - + ### From the command line @@ -96,7 +102,7 @@ From the command line, you can run `yunohost backup restore <archivename>` (with ### Constraints -To restore an app, the domain on which it was installed should already be configured (or you need to restore the corresponding system configuration). You also cannot restore an app which is already installed ... which means that to restore an old version of an app, you must first uninstall it. +To restore an app, the domain on which it was installed should already be configured (or you need to restore the corresponding system configuration). You also cannot restore an app which is already installed... which means that to restore an old version of an app, you must first uninstall it. ### Restoring during the postinstall @@ -118,51 +124,58 @@ yunohost backup restore <archivename> ### Storing backups on a different drive -If you want, you can connect and mount an external drive to store backup archives on it (among other things). For this, we first move the existing archives then add a symbolic link. +If you want, you can connect and mount an external drive to store backup archives on it (among other things). For this, plug in the drive and make sure that next time it is mounted automatically, by following the instruction at [Adding an external storage to your server](https://yunohost.org/#/external_storage). + +Then, move the existing archives and then add a symbolic link. ```bash PATH_TO_DRIVE="/media/my_external_drive" # For instance, depends of where you mounted your drive -mv /home/yunohost.backup/archives $PATH_TO_DRIVE/yunohost_backup_archives -ln -s $PATH_TO_DRIVE/yunohost_backup_archives /home/yunohost.backup/archives +mkdir $PATH_TO_DRIVE/yunohost_backup_archives # On your external drive create the folder where the backups will go +mv /home/yunohost.backup/archives $PATH_TO_DRIVE/yunohost_backup_archives # Move the archive folder including existing backups (if you made them) to the new folder on the external drive +ln -s $PATH_TO_DRIVE/yunohost_backup_archives /home/yunohost.backup/archives # Create a symbolic link from the old local folder to the new folder on the external drive ``` ### Automatic backups -You can add a simple cron job to trigger automatic backups regularly. For instance, to backup your wordpress weekly, create a file `/etc/cron.weekly/backup-wordpress` with the following content : +You can add a simple cron job to trigger automatic backups regularly. For instance, to backup your wordpress weekly, create a file `/etc/cron.weekly/backup-wordpress` with the following content: ```bash #!/bin/bash yunohost backup create --apps wordpress ``` -then make it executable : +then make it executable: ```bash chmod +x /etc/cron.weekly/backup-wordpress ``` -Be careful what you backup exactly and when : you don't want to end up with your whole disk space saturated because you backuped 30 GB of data every day. +Be careful what you backup exactly and when: you don't want to end up with your whole disk space saturated because you backuped 30 GB of data every day. #### Backing your server on a remote server -You can follow this tutorial on the forum to setup Borg between two servers : <https://forum.yunohost.org/t/how-to-backup-your-yunohost-server-on-another-server/3153> +You can follow this tutorial on the forum to setup Borg between two servers: <https://forum.yunohost.org/t/how-to-backup-your-yunohost-server-on-another-server/3153> -Alternatively, the app Archivist allows to setup a similar system : <https://forum.yunohost.org/t/new-app-archivist/3747> +Alternatively, the app Archivist allows to setup a similar system: <https://forum.yunohost.org/t/new-app-archivist/3747> #### Avoiding the backup of some folders If needed, you can specify that some `/home/user` folders are left out of the `yunohost backup` command, by creating a blank file named `.nobackup` in them. -#### Full backup with `dd` +#### For ARM boards: full backup with USBimager or `dd` -If you are using an ARM board, another method for doing a full backup can be to create an image of the SD card. For this, poweroff your ARM board, get the SD card in your computer then create a full image with something like : +If you are using an ARM board, another method for doing a full backup can be to create an image of the SD card. + +This can be done easily using [USBimager](https://bztsrc.gitlab.io/usbimager/) (N.B. be sure to get the Read-Write version! Not the write-only version!). The process is basically the *reverse* of flashing the SD card. +- Poweroff your server +- Get the SD card and plug it into your computer +- Using USBimager, click the *Read* button to create an image (snapshot) of the sd card. You can use it later to restore the entire system. + +More details [in the USBimager doc](https://gitlab.com/bztsrc/usbimager/#creating-backup-image-file-from-device) + +Alternatively you can use `dd` if you're comfortable with the command line with something like: ```bash -dd if=/dev/mmcblk0 of=./backup.img status=progress +dd if=/dev/mmcblk0 | gzip > ./my_snapshot.gz ``` -(replace `/dev/mmcblk0` with the actual device of your sd card) - -You can also create a compressed image using gzip this way: -```bash -dd if=/dev/mmcblk0 | gzip > ./image.gz -``` +(replace `/dev/mmcblk0` with the actual device of your SD card) diff --git a/pages/01.administrate/06.overview/11.update/upgrade.fr.md b/pages/01.administrate/06.overview/11.update/upgrade.fr.md new file mode 100644 index 00000000..f692c6fe --- /dev/null +++ b/pages/01.administrate/06.overview/11.update/upgrade.fr.md @@ -0,0 +1,34 @@ +--- +title: Mises à jour +template: docs +taxonomy: + category: docs +routes: + default: '/update' + aliases: + - '/upgrade' +--- + +## Depuis la webadmin + +Dans la partie administration, choisir Mettre à jour le système. YunoHost va mettre à jour le catalogue des paquets sytème et le catalogue des applications, et afficher les mise à jour disponibles. + +Cliquez sur les boutons verts pour lancer les mises à jours du système et des applications. + +## Depuis la ligne de commande + +Voici quelques exemples de ligne de commande correspondantes : + +``` bash +# Aller chercher les mises à jour disponibles +yunohost tools update + +# Mettre à jour tous les paquets systèmes +yunohost tools upgrade --system + +# Mettre à jour toutes les applications +yunohost tools upgrade --apps + +# Mettre à jour une application en particulier +yunohost app upgrade wordpress +``` diff --git a/pages/01.administrate/06.overview/11.update/upgrade.md b/pages/01.administrate/06.overview/11.update/upgrade.md new file mode 100644 index 00000000..40ab28f2 --- /dev/null +++ b/pages/01.administrate/06.overview/11.update/upgrade.md @@ -0,0 +1,34 @@ +--- +title: Upgrades +template: docs +taxonomy: + category: docs +routes: + default: '/update' + aliases: + - '/upgrade' +--- + +## From the webadmin + +On the administraton panel, click on Upgrade the system. YunoHost will refresh the system package catalog as well as the application catalog, and display available upgrades. + +Click on green upgrade buttons to upgrade the system and applications. + +## From the command line + +Here are some example of corresponding command lines: + +``` bash +# Fetch available updates +yunohost tools update + +# Upgrade all system packages +yunohost tools upgrade --system + +# Upgrade all apps +yunohost tools upgrade --apps + +# Upgrade a specific application +yunohost app upgrade wordpress +``` diff --git a/security_fr.md b/pages/01.administrate/06.overview/12.security/security.fr.md similarity index 86% rename from security_fr.md rename to pages/01.administrate/06.overview/12.security/security.fr.md index 8d9c94e2..dc71bc00 100644 --- a/security_fr.md +++ b/pages/01.administrate/06.overview/12.security/security.fr.md @@ -1,5 +1,11 @@ - -# Sécurité +--- +title: Sécurité +template: docs +taxonomy: + category: docs +routes: + default: '/security' +--- YunoHost a été développé dans l’optique de fournir une sécurité maximale tout en restant accessible et facilement installable. @@ -33,11 +39,12 @@ Par défaut, l’authentification SSH se fait avec le mot de passe d’administr ```bash ssh-keygen -ssh-copy-id -i ~/.ssh/id_rsa.pub <votre_serveur_yunohost> +ssh-copy-id -i ~/.ssh/id_rsa.pub <nom_utilisateur@otre_serveur_yunohost> ``` -<div class="alert alert-info" markdown="1"> -Si vous êtes sur Ubuntu 16.04 vous devez faire `ssh-add` pour initialiser l'agent ssh -</div> + +!!! Si vous avez des problèmes de permissions, donnez à `nom_utilisateur` la possession du dossier `~/.ssh` avec `chown`. Attention, pour des raisons de sécurité, ce dossier doit être en mode 700 ! + +!!! Si vous êtes sur Ubuntu 16.04 vous devez faire `ssh-add` pour initialiser l'agent ssh Entrez le mot de passe d’administration et votre clé publique devrait être copiée sur votre serveur. @@ -101,12 +108,9 @@ nano /etc/fail2ban/jail.d/my_ssh_port.conf et de le compléter ainsi : -```bash +```ini [sshd] port = <votre_numero_de_port_ssh> - -[sshd-ddos] -port = <votre_numero_de_port_ssh> ``` Il reste enfin à relancer `fail2ban` pour prendre en compte la nouvelle configuration @@ -129,9 +133,7 @@ ssh -p <votre_numero_de_port_ssh> admin@<votre_serveur_yunohost> Afin d’éviter de multiples tentatives de forçage du login admin par des robots, on peut éventuellement changer l’utilisateur autorisé à se connecter. -<div class="alert alert-info" markdown="1"> -Dans le cas d’une authentification par clé, la force brute n’a aucune chance de réussir. Cette étape n’est donc pas vraiment utile dans ce cas -</div> +!!! Dans le cas d’une authentification par clé, la force brute n’a aucune chance de réussir. Cette étape n’est donc pas vraiment utile dans ce cas **Sur votre serveur**, ajoutez un utilisateur. ```bash @@ -162,7 +164,7 @@ systemctl restart ssh ### Durcir la sécurité de la configuration des services -La configuration TLS par défaut des services tend à offrir une bonne compatibilité avec les vieux appareils. Vous pouvez régler cette politique pour les services SSH et NGINX. Par défaut, la configuration du NGINX suit la [recommandation de compatibilité intermédiaire] (https://wiki.mozilla.org/Security/Server_Side_TLS#Intermediate_compatibility_.28default.29) de Mozilla. Vous pouvez choisir de passer à la configuration "moderne" qui utilise des recommandations de sécurité plus récentes, mais qui diminue la compatibilité, ce qui peut poser un problème pour vos utilisateurs et visiteurs qui utilisent de vieux appareils. Plus de détails peuvent être trouvés sur [cette page](https://wiki.mozilla.org/Security/Server_Side_TLS#Modern_compatibility). +La configuration TLS par défaut des services tend à offrir une bonne compatibilité avec les vieux appareils. Vous pouvez régler cette politique pour les services SSH et NGINX. Par défaut, la configuration du NGINX suit la [recommandation de compatibilité intermédiaire](https://wiki.mozilla.org/Security/Server_Side_TLS#Intermediate_compatibility_.28default.29) de Mozilla. Vous pouvez choisir de passer à la configuration "moderne" qui utilise des recommandations de sécurité plus récentes, mais qui diminue la compatibilité, ce qui peut poser un problème pour vos utilisateurs et visiteurs qui utilisent de vieux appareils. Plus de détails peuvent être trouvés sur [cette page](https://wiki.mozilla.org/Security/Server_Side_TLS#Modern_compatibility). Changer le niveau de compatibilité n'est pas définitif et il est possible de rechanger le paramètre si vous concluez qu'il faille revenir en arrière. diff --git a/security.md b/pages/01.administrate/06.overview/12.security/security.md similarity index 87% rename from security.md rename to pages/01.administrate/06.overview/12.security/security.md index 8884ccab..b00e4d35 100644 --- a/security.md +++ b/pages/01.administrate/06.overview/12.security/security.md @@ -1,6 +1,13 @@ -# Security +--- +title: Security +template: docs +taxonomy: + category: docs +routes: + default: '/security' +--- -YunoHost has been developed to provide the best security without too much complication. Every protocol used in YunoHost is **encrypted**, only password's hashes are stored and by default each user is able to access his personal directory only. +YunoHost has been developed to provide the best security without too much complication. Every protocol used in YunoHost is **encrypted**, only password's hashes are stored and by default each user is able to access their personal directory only. Two things remain important to note: @@ -8,16 +15,16 @@ Two things remain important to note: * The fact that YunoHost is a well-spread software increases the chances of an attack. If a flaw is discovered, it could potentially affect all the YunoHost instances at once. Keep your system **up-to-date** to remain safe. -*If you need advice, do not hesitate to [ask us](/help).* +!!!! If you need advice, do not hesitate to [ask us](/help). -*To talk about security flaws, contact the [YunoHost security team](/security_team).* +!! [fa=shield /] To discuss security flaws, contact the [YunoHost security team](/security_team). --- ## Improve security If your YunoHost server is used in a critical production environment, or if you want to improve its safety, you may want to follow those good practices. -**Attention:** *Following those instructions requires advanced knowledge of system administration.* +! **Attention:** Following those instructions requires advanced knowledge of system administration. ### SSH authentication via key By default, the SSH authentication uses the administration password. Deactivating this kind of authentication and replacing it by a key mechanism is advised. @@ -26,8 +33,9 @@ By default, the SSH authentication uses the administration password. Deactivatin ```bash ssh-keygen -ssh-copy-id -i ~/.ssh/id_rsa.pub <your_yunohost_server> +ssh-copy-id -i ~/.ssh/id_rsa.pub <username@your_yunohost_server> ``` +!!! If you meet permissions issues, set `username` as owner of the dir `~/.ssh` with `chown`. Be careful, for security reason this directory should be in mode `700`. Type your admnistration password and your key will be copied on your server. @@ -88,7 +96,7 @@ nano /etc/fail2ban/jail.d/my_ssh_port.conf and you can then fill it in with -```bash +```ini [sshd] port = <your_ssh_port> @@ -116,16 +124,14 @@ ssh -p <new_ssh_port_number> admin@<your_yunohost_server> To avoid multiple forced login attempts to the admin account by robots, change the authorized user who can connect. -<div class="alert alert-info" markdown="1"> -In the case of a key authentication, a brute force attack has no chance of succeeding. This step is not really useful in this case. -</div> +!!! In the case of a key authentication, a brute force attack has no chance of succeeding. This step is not really useful in this case. **On your server**, add a user ```bash sudo adduser user_name ``` Choose a strong password, since this user will be responsible with obtaining root privileges. -Add the user to the sudo group to allow him/her to perform maintenance tasks that require root privileges. +Add the user to the sudo group to allow them to perform maintenance tasks that require root privileges. ```bash sudo adduser user_name sudo ``` diff --git a/groups_and_permissions_fr.md b/pages/01.administrate/06.overview/13.permissions/groups_and_permissions.fr.md similarity index 70% rename from groups_and_permissions_fr.md rename to pages/01.administrate/06.overview/13.permissions/groups_and_permissions.fr.md index 73c40696..377f3dfa 100644 --- a/groups_and_permissions_fr.md +++ b/pages/01.administrate/06.overview/13.permissions/groups_and_permissions.fr.md @@ -1,14 +1,20 @@ -Groupes et permissions -=========================== +--- +title: Groupes et permissions +template: docs +taxonomy: + category: docs +routes: + default: '/groups_and_permissions' +--- Vous pouvez accéder à l'interface de gestion des *groupes et des permissions* depuis la webadmin en allant dans la section "Utilisateurs" et en cliquant sur le bouton correspondant : - + -Gestion des groupes ---------------- -Le mécanisme de groupe peut être utilisé pour définir des groupes d'utilisateurs qui peuvent ensuite être utilisés pour restreindre les autorisations pour les applications et autres services (tels que l'email ou xmpp). Notez qu'il n'est *pas* obligatoire de créer un groupe pour ce faire : vous pouvez également restreindre l'accès à une application ou à un service de manière individuelle. +## Gestion des groupes + +Le mécanisme de groupe peut être utilisé pour définir des groupes d'utilisateurs qui peuvent ensuite être utilisés pour restreindre les autorisations pour les applications et autres services (tels que l'email ou XMPP). Notez qu'il n'est *pas* obligatoire de créer un groupe pour ce faire : vous pouvez également restreindre l'accès à une application ou à un service de manière individuelle. L'utilisation de groupes est cependant utile pour la sémantique, par exemple si vous hébergez plusieurs groupes d'amis, des associations ou des entreprises sur votre serveur, vous pouvez créer des groupes comme "association1" et "association2" et ajouter les membres de chaque association au groupe concerné. @@ -23,12 +29,12 @@ Vous ne pouvez pas changer le contenu de ces groupes, seulement les permissions ### Lister les groupes existants Les groupes existants sont listés en haut de la page *groupes et autorisations*. - + Pour obtenir la liste des groupes existants en CLI : -```bash +```shell $ yunohost user group list groups: all_users: @@ -39,30 +45,29 @@ groups: - delphine ``` - ### Créer un nouveau groupe Pour créer un nouveau groupe, il suffit de cliquer sur le bouton "Nouveau groupe" en haut de la page. Vous ne pouvez choisir qu'un nom formé de lettres (majuscules et minuscules) et d'espaces. Le groupe est créé vide et sans aucune permissions. - + Dans la CLI, pour créer un nouveau groupe appelé `yolo_crew`, il faut utiliser -```bash +```shell $ yunohost user group create yolo_crew ``` ### Mettre à jour un groupe Ajoutons un premier utilisateur à ce groupe : dans le panneau du groupe, cliquez sur le bouton "ajouter un utilisateur" et faites défiler jusqu'à l'utilisateur souhaité, puis cliquez dessus. - + Pour supprimer un utilisateur, cliquez sur la croix à côté de son nom d'utilisateur, dans le panneau du groupe. - + En CLI, utilisez la commande suivante pour ajouter `charlie` et `delphine` au groupe `yolo_crew` : -```bash +```shell $ yunohost user group update yolo_crew --add charlie delphine ``` @@ -70,7 +75,7 @@ $ yunohost user group update yolo_crew --add charlie delphine Dans la liste des groupes, nous devrions voir : -```bash +```shell $ yunohost user group list groups: all_users: @@ -89,27 +94,26 @@ groups: Pour supprimer un groupe, cliquez sur la croix rouge en haut à droite du panneau du groupes. Une confirmation vous sera demandée. - + Pour supprimer le groupe `yolo_crew` dans CLI, vous pouvez exécuter -```bash +```shell $ yunohost user group delete yolo_crew ``` -Gestion des permissions --------------------- +## Gestion des permissions -Le mécanisme de permissions permet de restreindre l'accès aux services (par exemple mail, xmpp, ...) et aux applications, ou même à des parties spécifiques des applications (par exemple l'interface d'administration de wordpress). +Le mécanisme de permissions permet de restreindre l'accès aux services (par exemple mail, XMPP...) et aux applications, ou même à des parties spécifiques des applications (par exemple l'interface d'administration de WordPress). ### Liste des permissions La page des groupes liste les permissions données à chaque groupe, y compris les groupes spéciaux `all_users` et `visitors`. - + Pour répertorier les permissions et les accès correspondants en CLI : -```bash +```shell $ yunohost user permission list permissions: mail.main: @@ -121,7 +125,7 @@ permissions: xmpp.main: allowed: all_users ``` -Ici, nous constatons que tous les utilisateurs enregistrés peuvent utiliser le courrier électronique, xmpp, et accéder au blog wordpress. Cependant, personne ne peut accéder à l'interface d'administration de wordpress. +Ici, nous constatons que tous les utilisateurs enregistrés peuvent utiliser le courrier électronique, XMPP, et accéder au blog WordPress. Cependant, personne ne peut accéder à l'interface d'administration de WordPress. Plus de détails peuvent être affichés en ajoutant l'option `--full` qui affichera la liste des utilisateurs correspondant aux groupes autorisés, ainsi que les urls associées à une permission (pertinent pour les applications web). @@ -129,27 +133,27 @@ Plus de détails peuvent être affichés en ajoutant l'option `--full` qui affic Pour ajouter une permission à un groupe, il suffit de cliquer sur le bouton "+" dans le panneau du groupe, de faire défiler jusqu'à la permission souhaitée, puis de cliquer dessus. - + -Pour permettre à un groupe d'accéder à l'interface d'administration de wordpress via la CLI : +Pour permettre à un groupe d'accéder à l'interface d'administration de WordPress via la CLI : -```bash +```shell $ yunohost user permission update wordpress.admin --add yolo_crew ``` Notez que vous pouvez également autoriser un seul utilisateur, en utilisant le panneau spécifique en bas de la page. - + ou en CLI : -```bash +```shell $ yunohost user permission update wordpress.admin --add alice ``` -Et maintenant, nous pouvons voir que YoloCrew et Alice ont tous deux accès à l'interface d'administration de Wordpress : +Et maintenant, nous pouvons voir que YoloCrew et Alice ont tous deux accès à l'interface d'administration de WordPress : -```bash +```shell $ yunohost user permission list [...] wordpress.admin: @@ -163,14 +167,21 @@ Notez que, par exemple, si nous voulons restreindre la permission pour le courri afin que seul Bob soit autorisé à envoyer des courriels, nous devons également supprimer `all_users` de la permission, en la supprimant du panneau de groupe `all_users`, ou en CLI : -```bash +```shell $ yunohost user permission update mail --remove all_users --add bob ``` +Notez que certaines permissions peuvent être "protégées", ce qui signifie que vous ne pourrez pas l'ajouter/enlever du groupe visiteur. Ce mécanisme est généralement là car ajouter/enlever la permission au groupe utilisateur n'a pas de sens (ou est un risque de sécurité). + La webadmin émettra un avertissement si vous définissez une permission qui est remplacée par une permission plus large. - -Notes pour les packageurs d'applications ------------------------- + -[Voir la version anglaise de cette page](groups_and_permissions). +### Montrer/cacher les tuiles dans le portail utilisateur + +Depuis YunoHost 4.1, il est possible de montrer/cacher certaines tuiles dans le portail. Depuis la webadmin, vous pouvez changer cela en allant dans la vue de l'application à manipuler, puis dans "Gérer les étiquettes et les tuiles", et cocher/décocher l'option "Montrer la tuile dans le portail utilisateur" pour la permission correspondante. En ligne de commande, le même genre de chose peut être fait avec : + +```shell +# Activer la tuile pour l'interface d'admin de WordPress +$ yunohost user permission update wordpress.admin --show_tile True +``` diff --git a/pages/01.administrate/06.overview/13.permissions/groups_and_permissions.md b/pages/01.administrate/06.overview/13.permissions/groups_and_permissions.md new file mode 100644 index 00000000..a85c0ae0 --- /dev/null +++ b/pages/01.administrate/06.overview/13.permissions/groups_and_permissions.md @@ -0,0 +1,190 @@ +--- +title: Users groups and permissions +template: docs +taxonomy: + category: docs +routes: + default: '/groups_and_permissions' +--- + +You can access the *groups and permissions* management interface from the webadmin +by going into the 'Users' section and clicking the corresponding button: + + + +## Managing groups + +The group mechanism can be used to define groups of users which then can be used to restrict permissions for applications and other services (such as mail or XMPP). Note that it is *not* mandatory to create a group to do so: you can also restrict access to an app or service on a user-per-user basis. + +Using groups is however useful for semantics, for example if you host multiple groups of friends, associations or businesses on your server, you might want to create groups like `association1` and `association2` and add members of each association to the relevant group. + +### Default groups + +By default, two special groups are created: +- `all_users`, that contain all users registered on YunoHost, +- `visitors`, that applies to people viewing the server while not logged in. + +The content of those groups cannot be changed, only the permissions given to them. + +### List existing groups + +The existing groups are listed at the top of the *groups and permissions* page. + + + +To list the currently existing groups in CLI : + +```shell +$ yunohost user group list +groups: + all_users: + members: + - alice + - bob + - charlie + - delphine +``` + + +### Creating a new group + +To create a new group, simply click on the "New Group" button at the top of the page. You may only choose a name formed with letters (uper- and lowercase) and spaces. The group is created empty and without any permission. + + + +In CLI, to create a new group called `yolo_crew` + +```shell +$ yunohost user group create yolo_crew +``` + +### Updating a group + +Let's add a first to this group: in the group panel, click the button "add a user" and scroll to the desired user, then click on it. + + + +To remove a user, click on the cross next to their username, in the group panel. + + + +In CLI, use the following command to add `charlie` and `delphine`to the `yolo_crew` group: + +```shell +$ yunohost user group update yolo_crew --add charlie delphine +``` + +(similarly, `--remove` can be used to remove members from a group) + +Now in the group list we should see: + +```shell +$ yunohost user group list +groups: + all_users: + members: + - alice + - bob + - charlie + - delphine + yolo_crew: + members: + - charlie + - delphine +``` + +### Deleting groups + +To delete a group, click on the red cross on the top right of the group panel. You will be asked for confirmation. + + + +To delete the group `yolo_crew` in CLI, you may run + +```shell +$ yunohost user group delete yolo_crew +``` + +## Managing permissions + +The permission mechanism allow to restrict access to services (for example mail, XMPP...) and apps, or even specific parts of the apps (for example the administration interface of WordPress). + +### List permissions + +The groups page lists the permissions given to each group, including the special groups `all_users` and `visitors`. + + + +To list permissions and corresponding accesses in CLI: + +```shell +$ yunohost user permission list +permissions: + mail.main: + allowed: all_users + wordpress.admin: + allowed: + wordpress.main: + allowed: all_users + xmpp.main: + allowed: all_users +``` + +Here, we find that all registered users can use email, XMPP, and access the WordPress blog. However, nobody can access the WordPress admin interface. + +More details can be displayed by adding the `--full` option which will display the list of users corresponding to groups allowed, as well as urls associated to a permission (relevant for web apps). + +### Add accesses to group or users + +To add a permission to a group, simply click the "+" button in the group panel, scroll to the desired permission, then click on it. + + + +To allow a group to access the WordPress admin interface in CLI: + +```shell +$ yunohost user permission update wordpress.admin --add yolo_crew +``` + +Note that you can also allow a single user, by using the specific panel at the bottom of the page. + + + +or in CLI: + +```shell +$ yunohost user permission update wordpress.admin --add alice +``` + +And now we may see that both the YoloCrew and Alice have access to the WordPress admin interface: + +```shell +$ yunohost user permission list + [...] + wordpress.admin: + allowed: + - yolo_crew + - alice + [...] +``` + +Note that, for example, if we want to restrict permission for email so that only Bob is allowed to email, we should also remove `all_users` from the permission, by deleting it from the `all_users` group panel, or in CLI: + +```shell +$ yunohost user permission update mail --remove all_users --add bob +``` + +Note that some permissions may be "protected", meaning that you won't be able to add/remove the visitor group to this permission. Generally, this is because it would make no sense (or is a security risk) to do so. + +The webadmin will issue a warning if you set a permission that is superseded by a wider permission. + + + +### Hide/display specific tiles in the user portal + +Since YunoHost 4.1, you can choose to hide/display specific tiles in the SSO. In the webadmin, you can do so by going in the corresponding app view, go in "Manage label and tiles" and check/uncheck the option "Display the tile in the user portal" for the corresponding permission. In command line, this may be done with: + +```shell +# Enable the tile for the WordPress admin interface +$ yunohost user permission update wordpress.admin --show_tile True +``` diff --git a/pages/01.administrate/06.overview/overview.de.md b/pages/01.administrate/06.overview/overview.de.md new file mode 100644 index 00000000..65ef9272 --- /dev/null +++ b/pages/01.administrate/06.overview/overview.de.md @@ -0,0 +1,20 @@ +--- +title: Übersicht des YunoHost Ökosystems +menu: Geführte Tour +template: docs +taxonomy: + category: docs +routes: + default: '/overview' +--- + +Diese Seite bietet eine Übersicht über das Ökosystem eines YunoHost-Servers. Diese Übersicht macht mehrere Vereinfachungenun zielt wesentlich daruaf ab, ein globales Bild zu vermitteln, bevor tiefer auf die verschiedenen Aspekte eingegangen wird. + + + + +Alles beginnt mit dem speziellen **admin** Benutzer. Dies ist der Administrator des Computers, der Dinge auf dem Server über die Webverwaltungsoberfläche oder über SSH und die Befehlszeilenschnittstelle installieren, konfigurieren und verwalten kann. *(Wenn du bereits mit GNU / Linux vertraut bist, ist dies root ziemlich ähnlich. YunoHost hat diesen zusätzlichen 'Admin'-Benutzer aus verschiedenen technischen Gründen.)* + +Der Administrator kann unter anderem Benutzer erstellen und Anwendungen installieren. Benutzer haben, wenn sie erstellt werden, automatisch eine eigene E-Mail-Adresse sowie ein XMPP-Konto. Benutzer können auch eine Verbindung zum Benutzerportal (SSO) herstellen, um auf Anwendungen zuzugreifen. Einige Anwendungen können normalerweise entweder öffentlich zugänglich oder privat installiert werden. Letzteres bedeutes, dass nur einige Benutzer Zugriff darauf haben. + +Anwendungen und andere Funktionen des Servers hängen von verschiedenen Diensten ab, damit sie ordnungsgemäß funktionieren. Dienste (manchmal auch als Daemons bezeichnet) sind Programme, die ständig auf dem Server ausgeführt werden. Sie stellen sicher, dass verschiedene Aufgaben, z.B. das Beantworten von Webanfragen von Webbrowsern oder das Weiterleiten von E-Mails, ausgeführt werden. diff --git a/overview_fr.md b/pages/01.administrate/06.overview/overview.fr.md similarity index 55% rename from overview_fr.md rename to pages/01.administrate/06.overview/overview.fr.md index 6faca287..358bdc68 100644 --- a/overview_fr.md +++ b/pages/01.administrate/06.overview/overview.fr.md @@ -1,12 +1,19 @@ -Vue d'ensemble de l'écosystème YunoHost -======================================= - +--- +title: Vue d'ensemble de l'écosystème YunoHost +menu: Visite guidée +template: docs +taxonomy: + category: docs +routes: + default: '/overview' +--- + Cette page pose une vue d'ensemble de l'écosystème d'un serveur sous YunoHost. Bien que celle-ci contienne des approximations et des raccourcis, elle permet de poser une première représentation générale avant de rentrer plus dans le détail des différents aspects. - + -Tout commence avec l'utilisateur spécial, **admin**. Il s'agit de l'administrateur de la machine qui peut installer, configurer et gérer le serveur à travers l'interface web d'administration, ou via SSH et la ligne de commande. *(Si vous êtes familier avec Linux, il est similaire à root. YunoHost possède cet utilisateur supplémentaire 'admin' pour plusieurs raisons techniques.)* +Tout commence avec l'utilisateur spécial, **admin**. Il s'agit de l'administrateur de la machine qui peut installer, configurer et gérer le serveur à travers l'interface web d'administration, ou via SSH et la ligne de commande. *(Si vous êtes familier avec GNU/Linux, il est similaire à root. YunoHost possède cet utilisateur supplémentaire 'admin' pour plusieurs raisons techniques.)* -L'administrateur peut créer des utilisateurs et installer des applications, parmis d'autres actions d'administration. Les utilisateurs disposent immédiatement d'une adresse email sur le serveur et d'un compte XMPP. Les utilisateurs peuvent se connecter au portail utilisateur (SSO) pour accéder aux applications. Les applications peuvent typiquement être installées soient en accès public, ou privé, c'est-à-dire que seul les utilisateurs du serveur pourront y accéder. +L'administrateur peut créer des utilisateurs et installer des applications, parmis d'autres actions d'administration. Les utilisateurs disposent immédiatement d'une adresse e-mail sur le serveur et d'un compte XMPP pour chatter. Les utilisateurs peuvent se connecter au portail utilisateur (SSO) pour accéder aux applications. Les applications peuvent typiquement être installées soient en accès public, ou privé, c'est-à-dire que seuls les utilisateurs du serveur pourront y accéder. -Les applications et autres fonctionnalités du serveur reposent sur plusieurs services pour fonctionner proprement. Les services (aussi appelés daemon) sont des programmes qui tournent constamment pour assurer des tâches, telles que répondre aux requêtes web des navigateurs web, ou relayer les emails. +Les applications et autres fonctionnalités du serveur reposent sur plusieurs services pour fonctionner proprement. Les services (aussi appelés daemon) sont des programmes qui tournent constamment pour assurer des tâches, telles que répondre aux requêtes web des navigateurs internet, ou relayer les e-mails. diff --git a/overview.md b/pages/01.administrate/06.overview/overview.md similarity index 79% rename from overview.md rename to pages/01.administrate/06.overview/overview.md index 81ad2a3d..d1ac3688 100644 --- a/overview.md +++ b/pages/01.administrate/06.overview/overview.md @@ -1,11 +1,18 @@ -Overview of the YunoHost ecosystem -================================== +--- +title: Overview of the YunoHost ecosystem +menu: Guided tour +template: docs +taxonomy: + category: docs +routes: + default: '/overview' +--- This page provide an overview of the ecosystem of a YunoHost server. While this overview contains several approximations, the purpose here is to introduce the global picture before digging into the different aspects. - + -Everything starts with the special user **admin**. This is the administrator of the machine who can install, configure and manage things on the server through the web administration interface, or via SSH and the command line interface. *(If you are already familiar with Linux, it is quite similar to root. YunoHost has this additional 'admin' user for several technical reasons.)* +Everything starts with the special user **admin**. This is the administrator of the machine who can install, configure and manage things on the server through the web administration interface, or via SSH and the command line interface. *(If you are already familiar with GNU/Linux, it is quite similar to root. YunoHost has this additional 'admin' user for several technical reasons.)* The administrator can create users and install applications, among other admin actions. Users automatically have their own email adress as well as an XMPP account when they get created. Users will also be able to connect to the user portal (SSO) to access applications. Some applications can typically be installed either as publicly-accessible, or as private, i.e. only some users will have access to it. diff --git a/dns_nohost_me_es.md b/pages/01.administrate/07.specific_use_cases/01.domains/01.dns_nohost_me/dns_nohost_me.es.md similarity index 82% rename from dns_nohost_me_es.md rename to pages/01.administrate/07.specific_use_cases/01.domains/01.dns_nohost_me/dns_nohost_me.es.md index 9a285056..a3aa8723 100644 --- a/dns_nohost_me_es.md +++ b/pages/01.administrate/07.specific_use_cases/01.domains/01.dns_nohost_me/dns_nohost_me.es.md @@ -1,31 +1,37 @@ -# Nombres de dominios automáticos +--- +title: Nombres de dominios automáticos +template: docs +taxonomy: + category: docs +routes: + default: '/dns_nohost_me' +--- -Para hacer que el auto-alojamiento esté lo más accesible posible, el Proyecto Yunohost provee un servicio de nombres de dominio *ofertos* y *automáticamente configurados*. Cuando utilizas este servicio, no tienes que configurar tú mismo la [configuración de los registros DNS](/dns_config) que es bastante técnica. +Para hacer que el auto-alojamiento esté lo más accesible posible, el Proyecto YunoHost provee un servicio de nombres de dominio *ofertos* y *automáticamente configurados*. Cuando utilizas este servicio, no tienes que configurar tú mismo la [configuración de los registros DNS](/dns_config) que es bastante técnica. Los subdominios siguientes están propuestos : - `loquequieras.nohost.me` ; - `loquequieras.noho.st` ; - `loquequieras.ynh.fr`. -Para aprovechar de este servicio, basta con elegir uno de estos tipos de dominios durante la post-instalación. ¡ Estará automáticamente configurado por Yunohost ! +Para aprovechar de este servicio, basta con elegir uno de estos tipos de dominios durante la post-instalación. ¡ Estará automáticamente configurado por YunoHost ! -N.B. : Por razones de equidad, sólo puedes tener un *único nombre de dominio* nohost.me por instalación de Yunohost. +N.B. : Por razones de equidad, sólo puedes tener un *único nombre de dominio* nohost.me por instalación de YunoHost. ### Subdominios El servicio de dominios `nohost.me`, `noho.st` y `ynh.fr` no permite la creación de subdominios. -Aunque Yunohost permita la instalación de aplicaciones en subdominios (por ejemplo teniendo la aplicación Nextcloud accesible desde la dirección `cloud.midominio.org`), esta función no está permitida con los dominios `nohost.me` y `noho.st` y no es posible tener un subdominio tal como `miaplicacion.midominio.nohost.me`. +Aunque YunoHost permita la instalación de aplicaciones en subdominios (por ejemplo teniendo la aplicación Nextcloud accesible desde la dirección `cloud.midominio.org`), esta función no está permitida con los dominios `nohost.me` y `noho.st` y no es posible tener un subdominio tal como `miaplicacion.midominio.nohost.me`. Para poder aprovechar de las aplicaciones instalables únicamente a la raíz de un nombre de de dominio, hay que tener su propio nombre de dominio. ### Añadir un dominio nohost.me, noho.st o ynh.fr después de la post-instalación -Si ya has hecho la post-instalación y quieres añadir un dominio de tipo nohost.me, puedes utilizar la categoría "Dominios" de la interfaz web, eligiendo la opción "no tengo nombre de dominio..." +Si ya has hecho la post-instalación y quieres añadir un dominio de tipo nohost.me, puedes utilizar la categoría "Dominios" de la interfaz web, eligiendo la opción "No tengo nombre de dominio..." También puedes utilizar los comandos siguientes desde línea de comandos. - ```bash # Añadir el dominio yunohost domain add loquequieras.nohost.me @@ -37,17 +43,20 @@ yunohost dyndns subscribe -d loquequieras.nohost.me # Actualizar la configuración DNS yunohost dyndns update + +# Configurarlo como dominio principal +yunohost domain main-domain -n loquequieras.nohost.me ``` ### Recuperar un dominio nohost.me, noho.st o ynh.fr -Si reinstalas tu servidor y quieres utilizar un dominio automático que ya utilizaste, tienes que pedir una reinstalación del dominio al Proyecto Yunohost [en el hilo de discusión dedicado del foro](https://forum.yunohost.org/t/nohost-domain-recovery/442). +Si reinstalas tu servidor y quieres utilizar un dominio automático que ya utilizaste, tienes que pedir una reinstalación del dominio al Proyecto YunoHost [en el hilo de discusión dedicado del foro](https://forum.yunohost.org/t/nohost-domain-recovery/442). ### Cambiar un dominio nohost.me, noho.st o ynh.fr + Si quieres utilizar otro dominio automático en tu servidor, primero tienes que cancelar el que ya está configurado, siguiendo estas instrucciones : 1. Suprimir el dominio de tu instancia (vía webadmin o `yunohost domain remove`). **Cuidado : esto suprimirá todas las aplicaciones instaladas en este dominio así como sus datos**. 2. Pedir la supresión de tu suscripción [en el hilo de discusión dedicado del foro](https://forum.yunohost.org/t/nohost-domain-recovery/442). 3. Suprimir los archivos de configuración automática de tu instancia (únicamente desde la linea de comando por ahora) : `sudo rm /etc/cron.d/yunohost-dyndns && sudo rm -r /etc/yunohost/dyndns` - Luego podrás registrar un nuevo dominio automático. diff --git a/dns_nohost_me_fr.md b/pages/01.administrate/07.specific_use_cases/01.domains/01.dns_nohost_me/dns_nohost_me.fr.md similarity index 67% rename from dns_nohost_me_fr.md rename to pages/01.administrate/07.specific_use_cases/01.domains/01.dns_nohost_me/dns_nohost_me.fr.md index a4d9d913..236e3040 100644 --- a/dns_nohost_me_fr.md +++ b/pages/01.administrate/07.specific_use_cases/01.domains/01.dns_nohost_me/dns_nohost_me.fr.md @@ -1,4 +1,11 @@ -# Noms de domaines automatiques +--- +title: Noms de domaines automatiques +template: docs +taxonomy: + category: docs +routes: + default: '/dns_nohost_me' +--- Afin de rendre l'auto-hébergement le plus accessible possible, le Projet YunoHost fournit un service de noms de domaine *offerts* et *automatiquement configurés*. En utilisant ce service, vous n'avez donc pas à réaliser vous-même la [configuration des enregistrements DNS](/dns_config) qui est assez technique. @@ -9,22 +16,21 @@ Les (sous-)domaines suivants sont proposés : Pour profiter de ce service, il vous suffit de choisir un tel domaine lors de la post-installation. Il sera ensuite automatiquement configuré par YunoHost ! -N.B. : Pour des raisons d'équité, vous ne pouvez avoir qu'*un seul domaine* nohost.me par installation de -YunoHost. +N.B. : Pour des raisons d'équité, vous ne pouvez avoir qu'*un seul domaine* nohost.me par installation de YunoHost. ### Sous-domaines -Le service de domaines `nohost.me`, `noho.st` et `ynh.fr` n'autorise pas la création de sous-domaines. +Le service de domaines `nohost.me`, `noho.st` et `ynh.fr` autorise la création de sous-domaines. -Même si YunoHost permet l'installation d'applications sur des sous-domaines (par exemple avoir l'application Owncloud accessible depuis l'adresse `cloud.mondomaine.org`), cette fonctionnalité n'est pas permise avec les domaines `nohost.me` et `noho.st` et il n’est pas possible d’avoir un sous-sous-domaine tel `monapplication.mondomaine.nohost.me`. +YunoHost permet l'installation d'applications sur des sous-domaines (par exemple avoir l'application ownCloud accessible depuis l'adresse `cloud.mondomaine.org`), cette fonctionnalité est aussi permise avec les domaines `nohost.me`, `noho.st` et `ynh.fr` et il est donc possible d’avoir un sous-sous-domaine tel `monapplication.mondomaine.nohost.me`. -Pour pouvoir profiter des applications installables uniquement à la racine d’un nom de domaine, il faut avoir son propre nom de domaine. +Pour créer un sous domaine à un domaine `nohost.me`, `noho.st` et `ynh.fr` il suffit d'ajouter celui-ci à YunoHost de la même manière que n'importe quel autre nom de domaine. ### Ajouter un domaine nohost.me, noho.st ou ynh.fr après la post-installation Si vous avez déjà effectué la postinstallation et souhaitez ajouter un domaine -de type nohost.me, vous pouvez utiliser la catégorie "Domaines" de l'interface web, -en choisissant l'option "je n'ai pas de nom de domaine..." +de type `nohost.me`, vous pouvez utiliser la catégorie "Domaines" de l'interface web, +en choisissant l'option "Je n'ai pas de nom de domaine..." Vous pouvez également utiliser les commandes suivantes depuis la ligne de commande. @@ -41,7 +47,7 @@ yunohost dyndns subscribe -d cequevousvoulez.nohost.me yunohost dyndns update # Le définir comme nouveau domain principal -yunohost tools maindomain --new-domain whateveryouwant.nohost.me +yunohost domain main-domain -n cequevousvoulez.nohost.me ``` ### Récupérer un domaine nohost.me, noho.st ou ynh.fr @@ -49,11 +55,10 @@ yunohost tools maindomain --new-domain whateveryouwant.nohost.me Si vous réinstallez votre serveur et voulez utiliser un domaine automatique déjà utilisé précédemment, il vous faut demander une réinitialisation du domaine au Projet YunoHost, [dans le fil de discussion dédié du forum](https://forum.yunohost.org/t/nohost-domain-recovery/442). ### Changer un domaine nohost.me, noho.st ou ynh.fr + Si vous voulez utiliser un autre domaine automatique sur votre serveur, vous devez d'abord supprimer celui qui est déjà configuré, selon les instructions suivantes : -1. Supprimer le domaine de votre instance (par webadmin ou `yunohost domain remove`). **Attention : cela supprimera -toute application installée sur ce domaine, ainsi que ses données**. +1. Supprimer le domaine de votre instance (par webadmin ou `yunohost domain remove`). **Attention : cela supprimera toute application installée sur ce domaine, ainsi que ses données**. 2. Demander la suppression de votre souscription [dans le fil de discussion dédié du forum](https://forum.yunohost.org/t/nohost-domain-recovery/442). 3. Enlever les fichiers de configuration automatique sur votre instance (uniquement depuis la ligne de commande pour le moment) : `sudo rm /etc/cron.d/yunohost-dyndns && sudo rm -r /etc/yunohost/dyndns` - Vous pourrez ensuite enregistrer un nouveau domaine automatique. diff --git a/pages/01.administrate/07.specific_use_cases/01.domains/01.dns_nohost_me/dns_nohost_me.md b/pages/01.administrate/07.specific_use_cases/01.domains/01.dns_nohost_me/dns_nohost_me.md new file mode 100644 index 00000000..606bf5fa --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/01.domains/01.dns_nohost_me/dns_nohost_me.md @@ -0,0 +1,63 @@ +--- +title: Nohost.me domains +template: docs +taxonomy: + category: docs +routes: + default: '/dns_nohost_me' +--- + +In order to make self-hosting as accessible as possible, the YunoHost Project provides a *free* and *automatically configured* domain name service. By using this service, you won't have to [configure DNS records](/dns_config) yourself, which can be tedious and technical. + +The following (sub)domains are proposed: +- `whateveryouwant.nohost.me`; +- `whateveryouwant.noho.st`; +- `whateveryouwant.ynh.fr`. + +To use this service, you simply have to choose such a domain during the post-installation. It will then be automatically configured by YunoHost! + +!!! As a fairness measure, each instance may only have **one such domain** setup at any given time. + +### Subdomains + +The `nohost.me`, `noho.st` and `ynh.fr` domain service does allow the creation of subdomains. + +YunoHost allows the installation of applications on subdomains (for example, having the Nextcloud application accessible from the `cloud.mydomain.org` address), this feature is also allowed with the `nohost.me`, `noho.st` and `ynh.fr` domains and so it is possible to have a subdomain such as `my.application.mydomain.nohost.me`. to create a subdomain for `nohost.me`, `noho.st` and `ynh.fr` domain you just have to add the subdomain to yunohost like any other domains. + + +### Adding a nohost.me, noho.st or ynh.fr domain after the post-installation + +If you already did the postinstall and want to add an automatic domain, you may do so from the "Domains" web interface, selecting the option "I don't have a domain name..." + +Alternatively, the following commands can be used. + +```bash +# Add the domain +yunohost domain add whateveryouwant.nohost.me + +# Subscribe/register to the dyndns service +yunohost dyndns subscribe -d whateveryouwant.nohost.me + +# [ wait ~ 30 seconds ] + +# Update the DNS conf +yunohost dyndns update + +# Set it as the main domain +yunohost domain main-domain -n whateveryouwant.nohost.me +``` + +### Retrieve a nohost.me, noho.st or ynh.fr domain + +If you reinstall your server and want to use a domain already used previously, you must request a domain reset on the forum [in the dedicated thread](https://forum.yunohost.org/t/nohost-domain-recovery/442). + + +### Change a nohost.me, noho.st or ynh.fr domain + +If you wish to use a different automatic domain, you first have to remove your present domain registration. This is done in 3 steps: + +1. Remove the domain from your instance (via webadmin or the `yunohost domain remove` in the CLI). +2. Ask for registration removal [in the dedicated forum thread](https://forum.yunohost.org/t/nohost-domain-recovery/442). +3. Remove automatic domain configuration files on your server, via CLI only: `sudo rm /etc/cron.d/yunohost-dyndns && sudo rm -r /etc/yunohost/dyndns` + +You may then add a new domain. diff --git a/dns_dynamicip_fr.md b/pages/01.administrate/07.specific_use_cases/01.domains/02.dns_dynamic_ip/dns_dynamicip.fr.md similarity index 62% rename from dns_dynamicip_fr.md rename to pages/01.administrate/07.specific_use_cases/01.domains/02.dns_dynamic_ip/dns_dynamicip.fr.md index 33589f54..a7420857 100644 --- a/dns_dynamicip_fr.md +++ b/pages/01.administrate/07.specific_use_cases/01.domains/02.dns_dynamic_ip/dns_dynamicip.fr.md @@ -1,6 +1,13 @@ -# DNS avec une IP dynamique +--- +title: DNS avec une IP dynamique +template: docs +taxonomy: + category: docs +routes: + default: '/dns_dynamicip' +--- -<div class="alert alert-warning">Avant d’aller plus loin, assurez-vous que votre adresse IP publique est dynamique à l’aide de : [ip.yunohost.org](http://ip.yunohost.org/). L’adresse IP publique de votre box change à peu près tous les jours.</div> +! Avant d’aller plus loin, assurez-vous que votre adresse IP publique est dynamique à l’aide de : [ip.yunohost.org](http://ip.yunohost.org/). L’adresse IP publique de votre box change à peu près tous les jours. Ce tutoriel a pour but de contourner le problème d’IP dynamique qui est le suivant : lorsque l’adresse IP publique de la box change, la zone DNS n’est pas mise à jour pour pointer vers la nouvelle adresse IP. @@ -8,6 +15,14 @@ Après avoir mis en place la solution proposée dans ce tutoriel, la redirection La méthode qui sera mise en place consiste à rendre automatique le fait que la box annonce au DNS dynamique qu’elle a changée d’adresse IP publique, et qu’ensuite la zone DNS soit automatiquement changée. +### Bureaux d'enregistrement +Voici quelques bureaux d'enregistrement, qui permettent d'acheter des noms de domaine : +* [OVH](http://ovh.com/) +* [GoDaddy](https://godaddy.com/) +* [Gandi](http://gandi.net/) +* [Namecheap](https://www.namecheap.com/) +* [BookMyName](https://www.bookmyname.com/) + Si vous possédez un nom de domaine chez **OVH**, vous pouvez aller à l’étape 4 et suivre ce [tutoriel](/OVH) étant donné qu’OVH propose un service de DynDNS. #### 1. Créer un compte pour un service de DNS dynamique @@ -22,13 +37,13 @@ Voici des sites qui proposent un service de DynDNS gratuitement : Créer un compte chez l’un d’eux. #### 2. Déplacer les zones DNS -Déplacer les [zones DNS](dns_config), à l’exception des champs NS, du [bureau d’enregistrement](/registrar) où vous avez acheté votre nom de domaine vers le DNS dynamique où vous avez créé un compte à l’étape 1. +Déplacer les [zones DNS](/dns_config), à l’exception des champs NS, du [bureau d’enregistrement](#registrar) où vous avez acheté votre nom de domaine vers le DNS dynamique où vous avez créé un compte à l’étape 1. #### 3. Basculer la gestion de votre nom de domaine vers le serveur DNS dynamique -Cette étape consiste à faire savoir au [bureau d’enregistrement](/registrar) que le service de DNS sera assuré par le service de DynDNS. +Cette étape consiste à faire savoir au [bureau d’enregistrement](#registrar) que le service de DNS sera assuré par le service de DynDNS. Redirigez le champ NS vers l’adresse IP donnée par le service de DynDNS. -Ensuite, supprimez les [zones DNS](dns_config), à l’exception des champs NS, du [bureau d’enregistrement](/registrar). +Ensuite, supprimez les [zones DNS](/dns_config), à l’exception des champs NS, du [bureau d’enregistrement](#registrar). #### 4. Créer un identifiant de DNS dynamique Sur le service de DNS dynamique créer un identifiant qui sera entré dans un client de DNS dynamique. @@ -38,4 +53,4 @@ Nous allons utiliser le client de la box qui est plus simple à mettre en place. #### 5. Configurer la box Mettez l’identifiant du DNS dynamique et l’[adresse IP publique](http://ip.yunohost.org/) dans votre box. -<img src="/images/dns_dynamic-ip_box_conf.png" width=600> + diff --git a/dns_dynamicip.md b/pages/01.administrate/07.specific_use_cases/01.domains/02.dns_dynamic_ip/dns_dynamicip.md similarity index 59% rename from dns_dynamicip.md rename to pages/01.administrate/07.specific_use_cases/01.domains/02.dns_dynamic_ip/dns_dynamicip.md index 9d4223a5..8e6924e5 100644 --- a/dns_dynamicip.md +++ b/pages/01.administrate/07.specific_use_cases/01.domains/02.dns_dynamic_ip/dns_dynamicip.md @@ -1,11 +1,29 @@ -# DNS with a dynamic IP +--- +title: DNS with a dynamic IP +template: docs +taxonomy: + category: docs +routes: + default: '/dns_dynamicip' +--- -<div class="alert alert-warning">Before going further, make sure your global IP address is dynamic with: [ip.yunohost.org](http://ip.yunohost.org/). The global IP address of your box changes almost every day.</div> +! Before going further, make sure your global IP address is dynamic with: [ip.yunohost.org](http://ip.yunohost.org/). The global IP address of your box changes almost every day. -This tutorial aim to get around dynamic IP issue which is: when the IP public address of your (Internet Service Provider-) box changes, the DNS zone is not updated to point towards the new IP address, and consequently your server is no more reachable via its domain name. After setting up the solution proposed in this tutorial, the redirection from your domain name to the actual IP address of your server will not be lost anymore. +This tutorial aim to get around dynamic IP issue which is: when the IP public address of your (Internet Service Provider-) box changes, the DNS zone is not updated to point towards the new IP address, and consequently your server is no more reachable via its domain name + +After setting up the solution proposed in this tutorial, the redirection from your domain name to the actual IP address of your server will not be lost anymore. The method proposed here consists of automatizing the fact the box annonces its global IP adress change to the dynamic DNS, so that the DNS zone will automatically be updated. +### Registrars + +Here are some examples of registrars, companies where you can buy domain names: +* [OVH](http://ovh.com/) +* [GoDaddy](https://godaddy.com/) +* [Gandi](http://gandi.net/) +* [Namecheap](https://www.namecheap.com/) +* [BookMyName](https://www.bookmyname.com/) + If you own a domain name at **OVH**, you may go to step 4 and follow this [tutorial](/OVH), given that OVH proposes a DynDNS service. #### 1. Create an account to a Dynamic DNS service @@ -20,14 +38,14 @@ Here are sites which offer a DynDNS service free of charge: Register to one of them. It should provide you with one (or more) IP address to reach the service, and a login (that you may be able to self-define). #### 2. Move the DNS zones -Copy the [DNS zones](dns_config), except for the NS fields, from the [registrar](/registrar) where you bought your domain name from to the dynamic DNS service you registrer at in step 1. +Copy the [DNS zones](/dns_config), except for the NS fields, from the [registrar](#registrar) where you bought your domain name from to the dynamic DNS service you registrer at in step 1. #### 3. Switch the management of your domain name to the dynamic DNS server -This step consists in declaring to your [registrar](/registrar) that the DNS service will now be managed by the DynDNS service provider. +This step consists in declaring to your [registrar](#registrar) that the DNS service will now be managed by the DynDNS service provider. For this, fisrt declare in the NS field(s) the IP address provided by the DynDNS service. -Then, remove any other item in the [DNS zones](dns_config) (except the previous NS fields), from the [registrar](/registrar). +Then, remove any other item in the [DNS zones](/dns_config) (except the previous NS fields), from the [registrar](#registrar). #### 4. Configure the client This client could be your ISP-box, or a package installed on your server, such as `ddclient`. @@ -35,6 +53,6 @@ Here, we will use the client provided by the box, which is the more easy way. Enter the login of the dynamic DNS and its public IP address in your box (interface details may vary by ISP). -<img src="/images/dns_dynamic-ip_box_conf.png" width=600> + You're good to go ! diff --git a/dns_subdomains_fr.md b/pages/01.administrate/07.specific_use_cases/01.domains/03.dns_subdomains/dns_subdomains.fr.md similarity index 84% rename from dns_subdomains_fr.md rename to pages/01.administrate/07.specific_use_cases/01.domains/03.dns_subdomains/dns_subdomains.fr.md index 132ffe18..53a070d6 100644 --- a/dns_subdomains_fr.md +++ b/pages/01.administrate/07.specific_use_cases/01.domains/03.dns_subdomains/dns_subdomains.fr.md @@ -1,4 +1,11 @@ -## DNS et sous-domaines pour les applications +--- +title: DNS et sous-domaines pour les applications +template: docs +taxonomy: + category: docs +routes: + default: '/dns_subdomains' +--- ### Sous-domaines @@ -10,17 +17,17 @@ Dans la configuration de son DNS, on aura donc une entrée A avec l’adresse IP Nom Type Valeur ```bash @ A XYZ.XYZ.XYZ.XYZ -@ AAAA 1234:1234:1234:FFAA:FFAA:FFAA:FFAA:AAFF -* CNAME mondomaine.fr. -agenda CNAME mondomaine.fr. -blog CNAME mondomaine.fr. -rss CNAME mondomaine.fr. +@ AAAA 1234:1234:1234:FFAA:FFAA:FFAA:FFAA:AAFF +* CNAME mondomaine.fr. +agenda CNAME mondomaine.fr. +blog CNAME mondomaine.fr. +rss CNAME mondomaine.fr. ``` -permet d’avoir un `agenda.mondomaine.fr`, un `blog.mondomaine.fr` etc… +permet d’avoir un `agenda.mondomaine.fr`, un `blog.mondomaine.fr` etc. ### Installer une application sur un sous-domaine -Pour installer une application sur un sous-domaine, par exemple `blog.mondomaine.fr`, dans YunoHost, tout se fait via la partie administration. On ajoute tout d’abord le sous-domaine à la liste des domaines disponibles. La création d’un sous-domaine dans YunoHost créera les fichiers de configuration correspondants pour Nginx (le serveur web de YunoHost). +Pour installer une application sur un sous-domaine, par exemple `blog.mondomaine.fr`, dans YunoHost, tout se fait via la partie administration. On ajoute tout d’abord le sous-domaine à la liste des domaines disponibles. La création d’un sous-domaine dans YunoHost créera les fichiers de configuration correspondants pour NGINX (le serveur web de YunoHost). Puis dans la partie installation d’une application, on installe l’application de façon traditionnelle en choisissant ce sous-domaine comme domaine (par exemple `blog.mondomaine.fr`) et en indiquant comme chemin `/` (et non `/wordpress` qui est le chemin par défaut). On a alors un message d’avertissement indiquant qu’on ne pourra plus installer d’applications sur ce sous-domaine. On valide. Ça s’installe. diff --git a/dns_subdomains.md b/pages/01.administrate/07.specific_use_cases/01.domains/03.dns_subdomains/dns_subdomains.md similarity index 88% rename from dns_subdomains.md rename to pages/01.administrate/07.specific_use_cases/01.domains/03.dns_subdomains/dns_subdomains.md index 8f0b5a35..c70a0291 100644 --- a/dns_subdomains.md +++ b/pages/01.administrate/07.specific_use_cases/01.domains/03.dns_subdomains/dns_subdomains.md @@ -1,4 +1,11 @@ -## DNS and subdomains for the applications +--- +title: DNS and subdomains for the applications +template: docs +taxonomy: + category: docs +routes: + default: '/dns_subdomains' +--- ### Subdomains @@ -21,7 +28,7 @@ then you can access `agenda.mydomain.com`, `blog.mydomain.com` and `rss.mydomain ### Install an application on a subdomain -To install an application on a subdomain in YunoHost, for example `blog.mydomain.com`, the configuration is done in the administration panel. One first add the subdomain to the available domains list. The creation of a subdomain in Yunohost will create the corresponding configuration files for Nginx (the web server used in YunoHost). +To install an application on a subdomain in YunoHost, for example `blog.mydomain.com`, the configuration is done in the administration panel. One first add the subdomain to the available domains list. The creation of a subdomain in YunoHost will create the corresponding configuration files for NGINX (the web server used in YunoHost). Then, in the applications>install panel, one follows the classic installation process by choosing the desired subdomain as domain (for example `blog.mydomain.com`). One needs to choose the path `/` (in place of `/wordpress` for example). A warning message will appear telling that it won't be possible to install other application to this subdomain. After validation, the installation starts. diff --git a/pages/01.administrate/07.specific_use_cases/01.domains/04.dns_local_network/dns_local_network.es.md b/pages/01.administrate/07.specific_use_cases/01.domains/04.dns_local_network/dns_local_network.es.md new file mode 100644 index 00000000..dcb362d7 --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/01.domains/04.dns_local_network/dns_local_network.es.md @@ -0,0 +1,41 @@ +--- +title: Local network access to your server +template: docs +taxonomy: + category: docs +routes: + default: '/dns_local_network' +--- + +After completing your server installation, it is possible that your domain will not be accessible through the local network. This is an issue known as [hairpinning](http://en.wikipedia.org/wiki/Hairpinning) - a feature that is not well supported by some internet routers. + +To solve this issue you can: +- configure your router's DNS +- or alternatively - your /etc/hosts files on your clients workstation + +### Find the local IP address of your server + +First you need to find out the local IP of your server +- either using the tricks lister [here](/finding_the_local_ip) +- or if in the webadmin, in the Diagnosis section, under Internet Connectivity, IPv4, click on 'Details' and you should find an entry for 'Local IP' +- or using the command line on the server : `hostname -I` + +## Configurar el DNS de la caja Internet o del router + +Vas a crear una redirección que estará activa en toda tu red local. El objetivo es crear una redirección DNS hacia el IP de tu servidor en tu caja Internet. Hay que acceder a la interfaz de configuración de tu caja y a los parámetros DNS, y luego crear una redirección local (por ejemplo, `yunohost.local` puede redigir hacia `192.168.1.21`). + +## Configurar el archivo [hosts](https://es.wikipedia.org/wiki/Archivo_hosts) del ordenador cliente +Sólo deberías modificar el archivo hosts si no puedes modificar el DNS de tu caja Internet / router, porque el archivo hosts únicamente afectará el ordenador en el cual el archivo esté modificado. + +- En Windows, encontrarás el archivo hosts aquí : + `%SystemRoot%\system32\drivers\etc\` + > Es preciso visualizar los archivos y sistemas escondidos para ver el archivo hosts. +- En sistemas UNIX (GNU/Linux, macOS), lo encontrarás aquí : + `/etc/hosts` + > Necesitarás derechos root para modificar el archivo. + +Simplemente añade al final del archivo hosts una linea conteniendo la dirección IP privada del servidor y tu nombre de dominio + +```bash +192.168.1.62 domain.tld +``` diff --git a/dns_local_network_fr.md b/pages/01.administrate/07.specific_use_cases/01.domains/04.dns_local_network/dns_local_network.fr.md similarity index 55% rename from dns_local_network_fr.md rename to pages/01.administrate/07.specific_use_cases/01.domains/04.dns_local_network/dns_local_network.fr.md index bcea9e28..312bbbe9 100644 --- a/dns_local_network_fr.md +++ b/pages/01.administrate/07.specific_use_cases/01.domains/04.dns_local_network/dns_local_network.fr.md @@ -1,27 +1,31 @@ -#Accéder à son serveur depuis le réseau local +--- +title: Accéder à son serveur depuis le réseau local +template: docs +taxonomy: + category: docs +routes: + default: '/dns_local_network' +--- -Après installation de votre serveur, il est probable que votre nom de domaine ne soit pas accessible depuis le réseau local où se trouve le serveur. Ceci est un problème connu sous le nom de [hairpinning](http://fr.wikipedia.org/wiki/Hairpinning). +Après installation de votre serveur, il est possible que votre nom de domaine ne soit pas accessible depuis le réseau local où se trouve le serveur. Ceci est un problème connu sous le nom de [hairpinning](http://fr.wikipedia.org/wiki/Hairpinning) - une fonctionnalité mal supportée par certaines box internet. -Pour résoudre ce problème, il est nécessaire de configurer le DNS de votre routeur ou, à défaut, le ou les fichiers hosts de vos ordinateurs clients. +Pour résoudre ce problème: +- il est nécessaire de configurer le DNS de votre routeur +- à défaut, il est possible de modifier le ou les fichiers /etc/hosts de vos ordinateurs clients. -### Obtenir l’adresse IP locale du serveur -Afin de configurer le DNS ou le fichier hosts, il vous faut connaître l’adresse IP privée de votre serveur. Cette adresse est utilisable uniquement sur le réseau local où se trouve le serveur et n’est pas liée à votre adresse publique utilisée sur Internet. +### Trouver l’adresse IP locale du serveur -Vous pouvez retrouver l’adresse privée de votre serveur de différentes manières : -- Sur l’écran de connexion de YunoHost sur le serveur lui-même : -<img src="/images/ynh_login.png" width=600> +Tout d'abord il vous faut trouver l'adresse IP locale du serveur +- soit en utilisant l'une de astuces expliquées [ici](/finding_the_local_ip) +- ou en utilisant la webadmin, dans l'écran Diagnostique, section Connection Internet, IPv4, cliquer sur 'Détails' et vous devriez trouver une entrée pour 'IP locale'. +- ou en ligne de commande sur le serveur: `hostname -I` -- Depuis l’interface d’administration de votre serveur YunoHost : - dans Outils > État du serveur > Réseau -<img src="/images/ynh_admin_etat_ip.png" width=900> +## Configurer le DNS de la box -- Ou depuis votre routeur ou votre box, selon son modèle. - -## Configurer le DNS de la box ou du routeur - -L'idée ici est de créer une redirection qui sera active sur tout votre réseau. Le but est de créer une redirection DNS vers l'ip de votre serveur YunoHost dans votre box. Il faut donc accéder à l'interface de configuration de votre box et aux paramétrages DNS, puis créer la redirection locale (par exemple, yunohost.local renvoi sur 192.168.21). +L'idée ici est de créer une redirection qui sera active sur tout votre réseau. Le but est de créer une redirection DNS vers l'ip de votre serveur YunoHost dans votre box. Il faut donc accéder à l'interface de configuration de votre box et aux paramétrages DNS, puis créer la redirection locale (par exemple, `yunohost.local` renvoi sur `192.168.1.21`). ### Box SFR + Si vous ne disposez toujours pas de l’adresse IP privée de votre serveur, vous pouvez la trouver sur l’interface de votre box SFR : Dans l’onglet Réseau puis Général <img src="/images/ip_serveur.png" width=800> @@ -31,12 +35,13 @@ Rendez-vous dans l’onglet Réseau puis DNS pour ajouter votre nom de domaine a <img src="/images/dns_9box.png" width=800> ## Configurer le fichier [hosts](http://fr.wikipedia.org/wiki/Hosts) de l’ordinateur client + La modification du fichier hosts devrait être effectuée seulement si vous ne pouvez pas modifier le DNS de votre box ou de votre routeur, car le fichier hosts impactera uniquement l’ordinateur sur lequel le fichier est modifié. - Sous Windows, vous trouverez le fichier hosts ici : `%SystemRoot%\system32\drivers\etc\` > Il est nécessaire d’afficher les fichiers cachés et systèmes pour voir le fichier hosts. -- Sous les systèmes UNIX (GNU/Linux, Mac OS), vous le trouverez ici : +- Sous les systèmes UNIX (GNU/Linux, macOS), vous le trouverez ici : `/etc/hosts` > Les droits root sont nécessaires pour modifier le fichier. diff --git a/dns_local_network.md b/pages/01.administrate/07.specific_use_cases/01.domains/04.dns_local_network/dns_local_network.md similarity index 52% rename from dns_local_network.md rename to pages/01.administrate/07.specific_use_cases/01.domains/04.dns_local_network/dns_local_network.md index b5653f4e..54385178 100644 --- a/dns_local_network.md +++ b/pages/01.administrate/07.specific_use_cases/01.domains/04.dns_local_network/dns_local_network.md @@ -1,25 +1,28 @@ -#Local network access to your server +--- +title: Local network access to your server +template: docs +taxonomy: + category: docs +routes: + default: '/dns_local_network' +--- -After completing your server installation, it is most likely that your domain will not be accessible through the local network. This is a know issue known as [hairpinning](http://en.wikipedia.org/wiki/Hairpinning). +After completing your server installation, it is possible that your domain will not be accessible through the local network. This is an issue known as [hairpinning](http://en.wikipedia.org/wiki/Hairpinning) - a feature that is not well supported by some internet routers. -To resolve this issue, you need to configure your router dns or, failing, your hosts files on your clients workstation +To solve this issue you can: +- configure your router's DNS +- or alternatively - your /etc/hosts files on your clients workstation -### Get the server local IP adress -In order to configure DNS or hosts file, you must know the private IP adress of your server. This adress is only working in the server local network and is not linked to your public IP adress. +### Find the local IP address of your server -You may retrieve your server private IP adress through different means: -- Using the Yunohost connection screen on the server: -<img src="/images/ynh_login.png" width=600> +First you need to find out the local IP of your server +- either using the tricks lister [here](/finding_the_local_ip) +- or if in the webadmin, in the Diagnosis section, under Internet Connectivity, IPv4, click on 'Details' and you should find an entry for 'Local IP' +- or using the command line on the server : `hostname -I` -- Using Yunohost administration panel: - Go to Tools > State of the server > Network -<img src="/images/ynh_admin_etat_ip.png" width=900> +## Configure DNS on your Internet router -- Or using your router or internet box, depending on model. - -## Configure DNS of Internet box or router - -The goal here is to create a network wide redirection handled by your router. The idea is to create a DNS redirection to your server's IP. You should access your router's configuration and look for DNS configuration, then add a redirection to your server's IP (e.g. redirect "yunohost.local" to 192.168.1.21). +The goal here is to create a network wide redirection handled by your router. The idea is to create a DNS redirection to your server's IP. You should access your router's configuration and look for DNS configuration, then add a redirection to your server's IP (e.g. redirect `yunohost.local` to `192.168.1.21`). ### SFR Box If you haven't found your server private IP, you may find it using the SFR box admin panel: @@ -27,16 +30,18 @@ If you haven't found your server private IP, you may find it using the SFR box a <img src="/images/ip_serveur.png" width=800> #### Configure SFR box's DNS + Go to Network tab > DNS and add your domain name to the box's DNS. <img src="/images/dns_9box.png" width=800> ## Configure [hosts](https://en.wikipedia.org/wiki/Host_%28Unix%29) file on client workstation + Modifying hosts file should be done only if you cannot alter your box's DNS or router, because hosts file will only impact the workstation where the file was modified. - Windows hosts file is located at: `%SystemRoot%\system32\drivers\etc\` > You MUST activate hidden and system file display to see the hosts file. -- UNIX systems (GNU/Linux, Mac OS) hosts file is located at: +- UNIX systems (GNU/Linux, macOS) hosts file is located at: `/etc/hosts` > You MUST have root privileges to modify the file. diff --git a/OVH_fr.md b/pages/01.administrate/07.specific_use_cases/01.domains/05.OVH/OVH.fr.md similarity index 59% rename from OVH_fr.md rename to pages/01.administrate/07.specific_use_cases/01.domains/05.OVH/OVH.fr.md index 303626bd..1b17b7a3 100644 --- a/OVH_fr.md +++ b/pages/01.administrate/07.specific_use_cases/01.domains/05.OVH/OVH.fr.md @@ -1,19 +1,33 @@ -#Configuration DNS avec OVH +--- +title: Configuration DNS avec OVH +template: docs +taxonomy: + category: docs +routes: + default: '/OVH' +--- Nous allons voir comment configurer le DNS avec [OVH](http://www.ovh.com). -Après achat de votre nom de domaine, rendez vous dans l'espace client pour retrouver le panneau de configuration d'OVH, et cliquez sur votre domaine à gauche: +Après achat de votre nom de domaine, rendez vous dans l'espace client pour retrouver le panneau de configuration d'OVH, et cliquez sur votre domaine à gauche : -<img src="/images/ovh_control_panel.png" width=800> + -Cliquez sur l'onglet **Zone DNS**, puis sur **Ajouter une entrée**: +Cliquez sur l'onglet **Zone DNS**, puis sur **Ajouter une entrée** : -<img src="/images/ovh_dns_zone.png" width=800> + -Il suffit maintenant d'ajouter les redirections DNS comme indiqué dans la [configuration DNS standard](/dns_config). +Cliquer sur "Modifier en mode textuel", garder les 4 premières lignes : +```bash +$TTL 3600 +@ IN SOA dns104.ovh.net. tech.ovh.net. (2020083101 86400 3600 3600000 60) + IN NS dns104.ovh.net. + IN NS ns104.ovh.net. +``` +puis effacer tout ce qu'il y a en-dessous, et le remplacer par la configuration donnée par votre serveur, comme indiqué dans la [configuration DNS standard](/dns_config). -###IP dynamique +### IP dynamique [Tutoriel plus général sur l’IP dynamique](/dns_dynamicip). diff --git a/OVH.md b/pages/01.administrate/07.specific_use_cases/01.domains/05.OVH/OVH.md similarity index 56% rename from OVH.md rename to pages/01.administrate/07.specific_use_cases/01.domains/05.OVH/OVH.md index 1edcfa70..9255877a 100644 --- a/OVH.md +++ b/pages/01.administrate/07.specific_use_cases/01.domains/05.OVH/OVH.md @@ -1,21 +1,37 @@ -#DNS Configuration with OVH +--- +title: DNS Configuration with OVH +template: docs +taxonomy: + category: docs +routes: + default: '/OVH' +--- Let's see how to properly set the DNS redirections with [OVH](http://www.ovh.com). Once you bought your domain name, got to the Web Control Panel, and click on you domain name on the left side: -<img src="/images/ovh_control_panel.png" width=800> + Click on the **DNS Zone** tab, then on **Add an entry**: -<img src="/images/ovh_dns_zone.png" width=800> + Now you need to add the DNS redirections as specified by the [standard DNS zone configuration](/dns_config) +Click on "Change in text format", keep the first four lines: +```bash +$TTL 3600 +@ IN SOA dns104.ovh.net. tech.ovh.net. (2020083101 86400 3600 3600000 60) + IN NS dns104.ovh.net. + IN NS ns104.ovh.net. +``` +then erase everything below, and replace it with the configuration generated by YunoHost as explained in [this page](/dns_config). -###Dynamic IP -[General tutorial on dynamic IP](dns_dynamicip). +### Dynamic IP + +[General tutorial on dynamic IP](/dns_dynamicip). You should follow this part if you have a dynamic IP. @@ -26,7 +42,7 @@ Let's create a DynHost id. Follow [this tutorial](http://blog.developpez.com/brutus/p6316/ubuntu/configurer_dynhost_ovh_avec_ddclient) to install ddclient. ddclient will take care of telling OVH that the IP has changed. Then OVH will update the IP. -You need to add in the configuration file : +You need to add in the configuration file: * your login and password DynHost * your domain name diff --git a/isp_sfr_fr.md b/pages/01.administrate/07.specific_use_cases/02.isp/01.sfr/isp_sfr.fr.md similarity index 72% rename from isp_sfr_fr.md rename to pages/01.administrate/07.specific_use_cases/02.isp/01.sfr/isp_sfr.fr.md index 43c311fb..b5c0f6c8 100644 --- a/isp_sfr_fr.md +++ b/pages/01.administrate/07.specific_use_cases/02.isp/01.sfr/isp_sfr.fr.md @@ -1,14 +1,23 @@ -#SFR +--- +title: SFR +template: docs +taxonomy: + category: docs +routes: + default: '/isp_sfr' +--- + *Trouvez la liste d’autres fournisseurs d’accès Internet **[ici](/isp)**.* + #### Accès à l’administration de la box * Allez à cette adresse : http://192.168.1.1. * Authentifiez-vous, soit en appuyant sur le bouton de la box pendant 5 secondes soit avec les identifiants d’administration. -<img src="/images/sfr-authentification.png" width=900> + #### Courrier électronique Pour pouvoir envoyer des mails, il faut désactiver le filtrage. -<img src="/images/sfr-filtrage.png" width=600> + Source : https://assistance.sfr.fr/sfrmail-appli/sfrmail/envoyer-e-mail-serveur-smtp.html diff --git a/isp_orange_fr.md b/pages/01.administrate/07.specific_use_cases/02.isp/02.orange/isp_orange.fr.md similarity index 86% rename from isp_orange_fr.md rename to pages/01.administrate/07.specific_use_cases/02.isp/02.orange/isp_orange.fr.md index ffde62c6..73c9430e 100644 --- a/isp_orange_fr.md +++ b/pages/01.administrate/07.specific_use_cases/02.isp/02.orange/isp_orange.fr.md @@ -1,4 +1,12 @@ -# Orange +--- +title: Orange +template: docs +taxonomy: + category: docs +routes: + default: '/isp_orange' +--- + *Trouvez la liste d’autres fournisseurs d’accès Internet **[ici](/isp)**.* #### Le courrier électronique @@ -7,6 +15,9 @@ La box d’Orange bloque le port 25 pour limiter l’envoi de spam. La solution restante pour héberger son courrier chez soi consiste à le faire passer par les serveurs SMTP d’Orange. +! YunoHost intègre depuis la version 4.1 une intégration de la configuration des relais SMTP +! Cette section devrait donc être retravaillée (voire supprimée) au profit de [cette page](/email_configure_relay) + Pour cela, il faut éditer le fichier de configuration de postfix avec la commande : ```bash diff --git a/isp_free_fr.md b/pages/01.administrate/07.specific_use_cases/02.isp/03.free/isp_free.fr.md similarity index 96% rename from isp_free_fr.md rename to pages/01.administrate/07.specific_use_cases/02.isp/03.free/isp_free.fr.md index 58ebb590..aa8a9387 100644 --- a/isp_free_fr.md +++ b/pages/01.administrate/07.specific_use_cases/02.isp/03.free/isp_free.fr.md @@ -1,4 +1,11 @@ -# Free +--- +title: Free +template: docs +taxonomy: + category: docs +routes: + default: '/isp_free' +--- *Trouvez la liste d’autres fournisseurs d’accès Internet **[ici](/isp)**.* diff --git a/isp_es.md b/pages/01.administrate/07.specific_use_cases/02.isp/isp.es.md similarity index 89% rename from isp_es.md rename to pages/01.administrate/07.specific_use_cases/02.isp/isp.es.md index fed12f76..bfb0afa3 100644 --- a/isp_es.md +++ b/pages/01.administrate/07.specific_use_cases/02.isp/isp.es.md @@ -1,6 +1,13 @@ -# Proveedores de acceso a Internet +--- +title: Proveedores de acceso a Internet +template: docs +taxonomy: + category: docs +routes: + default: '/isp' +--- -<a class="btn btn-lg btn-default" href="/isp_box_config"> Configuración general del router</a> +[div class="btn btn-lg btn-default"] [ Configuración general del router](/isp_box_config) [/div] Aquí tienes una lista (no exhaustiva) de proveedores de acceso a Internet por país, con criterios de compatibilidad con el [self-hosting](/selfhosting). @@ -10,7 +17,7 @@ Un « **no** » puede implicar problemas de utilización del servidor o puede *Nota que algunos de estos proveedores como OVH y Orange también están presentes en España.* -Todos los proveedores de acceso a Internet [miembros de la Federación French Data Network] (http://www.ffdn.org/fr/membres) tienen una política a favor del auto-alojamiento / self-hosting. +Todos los proveedores de acceso a Internet [miembros de la Federación French Data Network](http://www.ffdn.org/fr/membres) tienen una política a favor del auto-alojamiento / self-hosting. * ✔ : sí * ✘ : no @@ -44,4 +51,4 @@ Para obtener una lista más completa y precisa, refiérete a la muy buena docume | :---: | :---: | :---: | :---: | :---: | :---: | :---: | | **Orange** | Livebox2 | sí (activado) | no | **no** | **no** | **no** | | **Moov** | | sí (activado) | | | | | -| **MTN** | | sí (activado) | | | | | \ No newline at end of file +| **MTN** | | sí (activado) | | | | | diff --git a/isp_fr.md b/pages/01.administrate/07.specific_use_cases/02.isp/isp.fr.md similarity index 87% rename from isp_fr.md rename to pages/01.administrate/07.specific_use_cases/02.isp/isp.fr.md index 35e6d8be..c8a60f1f 100644 --- a/isp_fr.md +++ b/pages/01.administrate/07.specific_use_cases/02.isp/isp.fr.md @@ -1,6 +1,13 @@ -# Fournisseurs d’accès à Internet +--- +title: Fournisseurs d'accès à Internet +template: docs +taxonomy: + category: docs +routes: + default: '/isp' +--- -<a class="btn btn-lg btn-default" href="/isp_box_config"> Configuration générale box</a> +[div class="btn btn-lg btn-default"] [ Configuration générale box](/isp_box_config) [/div] Voici une liste non exhaustive des fournisseurs d’accès à Internet par pays, contenant les critères de tolérance à l’[auto-hébergement](/selfhosting). @@ -18,8 +25,8 @@ Tous les fournisseurs d’accès à Internet [membres de la Fédération French | **[UPnP](https://fr.wikipedia.org/wiki/Universal_Plug_and_Play)** | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | | **[Port 25 ouvrable](/email)**<br> (fermé par défaut) | ✔ | ✔ | ✔ | ✘ | ✔ | ✔ | | **[Hairpinning](http://fr.wikipedia.org/wiki/Hairpinning)** | ✔ | ✔ | ✔/✘ | ✔ (depuis la Livebox 4) | ✔ | ✔ | -| **[Reverse DNS](https://en.wikipedia.org/wiki/Reverse_DNS_lookup)<br>personnalisable ** | ✔ | ✔ (sauf IPv6) pas de support | … | ✘ | ✘ | ✘ | -| **[IP fixe](/dns_dynamicip)** | ✔ | ✔ | ✔/✘ | ✘ | ✔ | ✔ | +| **[Reverse DNS](https://en.wikipedia.org/wiki/Reverse_DNS_lookup)<br>personnalisable ** | ✔ | ✔ (sauf IPv6, pas de support, et buggué sur certaines plages d'adresses ipv4) | … | ✘ | ✘ | ✘ | +| **[IP fixe](/dns_dynamicip)** | ✔ | ✔ | ✔/✘ | ✔ (depuis la Livebox 4) | ✔ | ✔ | | **[IPv6](https://fr.wikipedia.org/wiki/IPv6)** | ✔ | ✔ | ✔ | ✔ | … | … | | **[Non listé sur le DUL](https://en.wikipedia.org/wiki/Dialup_Users_List)** | … | ✘ | … | … | … | … | Pour une liste plus complète et précise, référez-vous à la très bonne documentation de [wiki.auto-hebergement.fr](http://wiki.auto-hebergement.fr/fournisseurs/fai#d%C3%A9tail_des_fai). diff --git a/isp.md b/pages/01.administrate/07.specific_use_cases/02.isp/isp.md similarity index 73% rename from isp.md rename to pages/01.administrate/07.specific_use_cases/02.isp/isp.md index ba3f8626..2f760d70 100644 --- a/isp.md +++ b/pages/01.administrate/07.specific_use_cases/02.isp/isp.md @@ -1,12 +1,19 @@ -# Internet service providers +--- +title: Internet service providers +template: docs +taxonomy: + category: docs +routes: + default: '/isp' +--- -<a class="btn btn-lg btn-default" href="/isp_box_config"> Main configuration box</a> +[div class="btn btn-lg btn-default"] [ Main configuration box](/isp_box_config) [/div] Here is a non-comprehensive list of internet service providers by country, which contains criteria about tolerance to self-hosting. A "no" may cause problems for using your server or may require you to make additional configuration changes. Status in brackets indicates the default behavior. -A list of French and Belgian ISPs is available on the [french page](/isp). +(For the list of ISP in France/Belgian, check the french version of this page) ### USA | Service provider | Box (modem/router) | uPnP available | Port 25 openable | [Hairpinning](http://en.wikipedia.org/wiki/Hairpinning) | Customizable reverse DNS | Fix IP | @@ -14,12 +21,16 @@ A list of French and Belgian ISPs is available on the [french page](/isp). | Cox | Multiple | Yes | No. Only for business class customer. | No | No | Yes, as a business class customer | | Charter | Multiple | Yes | No. Only for business class customer. | No | No | Yes, as a business class customer | | DSLExtreme | Multiple | Yes | Yes | No | No | Yes, extra charge. | +| AT&T| Multiple | Yes | No. Only for business class customer. | unknown. | unknown. | unknown. | +| Xfinity (Comcast)| Multiple | Yes | No. Only for business class customer. | unknown. | unknown. | Yes, as a business class customer| ### UK | Service provider | Box (modem/router) | uPnP available | Port 25 openable | [Hairpinning](http://en.wikipedia.org/wiki/Hairpinning) | Customizable reverse DNS | Fix IP | | --- | --- | --- | --- | --- | --- | --- | -| BT Internet | - | - | Yes| - | - | No | +| BT Internet | Yes | - | Yes| - | - | No | | Virgin Media | Yes | - | - | - | No | No | +| ZEN Internet | Yes | - | Yes | - | Yes | - | +| PlusNet | Yes | Yes | Yes | No | Yes, if you raise a ticket | Small one off Charge | ### Brazil | Service provider | Box (modem/router) | uPnP available | Port 25 openable | [Hairpinning](http://en.wikipedia.org/wiki/Hairpinning) | Customizable reverse DNS | Fix IP | @@ -54,7 +65,15 @@ Most of non business IP provided by ISP are blacklisted. | Service provider | Box (modem/router) | uPnP available | Port 25 openable | [Hairpinning](http://en.wikipedia.org/wiki/Hairpinning) | Customizable reverse DNS | Fix IP | | --- | --- | --- | --- | --- | --- | --- | | Sunrise | Multiple | No | Yes | No | - | - | -| Swisscom | Multiple | No | Yes | No | - | - | +| Swisscom | Multiple | No | Yes | No | No | No | | VTX | Multiple | No | Yes | No | - | - | +### South Korea + +| Service provider | Box (modem/router) | uPnP available | Port 25 openable | [Hairpinning](http://en.wikipedia.org/wiki/Hairpinning) | Customizable reverse DNS | Fix IP | +| --- | --- | --- | --- | --- | --- | --- | +| LG U+ (HelloVision) | Multiple | Yes | Yes (Without ISP Router) | No | - | Partial | +| KT(SkyLife, Qook&Show) | Multiple | Yes | Yes | No | - | Partial | +| SKT (SK Broadband) | Multiple | Yes | Yes | No | - | Partial | + If you want to add international ISPs information, please do consider [modifying this page](/write_documentation). diff --git a/pages/01.administrate/07.specific_use_cases/03.filezilla/filezilla.fr.md b/pages/01.administrate/07.specific_use_cases/03.filezilla/filezilla.fr.md new file mode 100644 index 00000000..407fa7e9 --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/03.filezilla/filezilla.fr.md @@ -0,0 +1,82 @@ +--- +title: Échanger des fichiers avec son serveur à l'aide d'une interface graphique +template: docs +taxonomy: + category: docs +routes: + default: '/filezilla' +--- + +Cette page explique comment échanger des fichiers (sauvegardes, musiques, photos, films...) avec son serveur à l'aide d'un outil graphique. C'est donc une méthode alternative au fait d'utiliser la commande `scp` qui peut être jugée technique et cryptique, ou de devoir installer Nextcloud. + +[FileZilla](https://filezilla-project.org/) permet d'accomplir cela. Il s'agit d'un logiciel libre disponible pour Windows, GNU/Linux et macOS. + +## Télécharger et installer FileZilla + +Vous pouvez télécharger FileZilla depuis [cette page](https://filezilla-project.org/download.php?type=client). Le site devrait détecter automatiquement la version nécessaire pour votre ordinateur. Sinon, suivez les instructions pour [installer le client](https://wiki.filezilla-project.org/Client_Installation) + +Installez le programme et lancez *Filezilla*. + +## Configuration + +1. Cliquez sur l'icône *Gestionnaire de Sites* en haut à gauche de sorte à créer une configuration utilisable ultérieurement. + +  + +2. Cliquez sur **Nouveau site** et donnez un nom au serveur que vous allez utiliser. Par exemple "Famille". Remplissez les paramètres comme sur la capture d'écran (en remplaçant l'adresse du serveur par la vôtre). Une fois terminé, cliquez sur **Connexion**. (N.B. : si vous souhaitez éditer les fichiers de l'application [custom webapp](https://github.com/YunoHost-Apps/my_webapp_ynh), il vous faudra utiliser un autre utilisateur que admin. Se référer à la documentation de custom webapp.) + +  + +3. Vous recevrez un avertissement. *Vous pouvez l'ignorer s'il s'agit de la première connexion*. + +  + +4. Filezilla vous demande maintenant le mot de passe `admin` pour vous connecter à votre serveur + +  + +5. Une fois cette configuration créée, elle sera réutilisable les fois suivantes. + +  + +## Utilisation + +1. Connectez-vous au Site créé précédemment. *Il se peut que le mot de passe soit redemandé.* + + La partie gauche correspond à votre ordinateur. La partie droite correspond au serveur YunoHost distant. Vous pouvez naviguer dans les dossiers et faire des glisser-déposer entre les deux panneaux. + +  + +2. Dans le panneau de droite, vous pouvez aller dans `/home/yunohost.backup/archives/` pour trouver les archives de [sauvegardes](/backup). + +  + +! [fa=cloud-download /] Assurez-vous de télécharger à la fois le fichier `.tar.gz` et le fichier `.json` + + + +---- + +Sources + +* [Documentation officielle](https://wiki.filezilla-project.org/FileZilla_Client_Tutorial_(fr)) +* [Tutoriel général à Filezilla](https://www.rc.fas.harvard.edu/resources/documentation/sftp-file-transfer/) + +## Alternatives à Filezilla + +### Sous GNU/Linux + +Depuis n'importe quel GNU/Linux récent, vous devriez pouvoir utiliser le gestionnaire de fichiers pour accéder à votre serveur. + +Nautilus de Gnome3 intègre de base des fonctionnalités similaires à FileZilla : + +* <https://help.gnome.org/users/gnome-help/stable/nautilus-connect.html.en> +* <https://www.techrepublic.com/article/how-to-use-linux-file-manager-to-connect-to-an-sftp-server/> + +### Sous Windows + +* [WinSCP](https://winscp.net/) est aussi un bon candidat pour Windows + +### Sous macOS + +* [Cyberduck](https://cyberduck.io/) logiciel libre pour macOS diff --git a/filezilla.md b/pages/01.administrate/07.specific_use_cases/03.filezilla/filezilla.md similarity index 63% rename from filezilla.md rename to pages/01.administrate/07.specific_use_cases/03.filezilla/filezilla.md index 4280a1b7..875f86c7 100644 --- a/filezilla.md +++ b/pages/01.administrate/07.specific_use_cases/03.filezilla/filezilla.md @@ -1,12 +1,15 @@ -# Exchange files with your server using a graphical interface +--- +title: Exchange files with your server using a graphical interface +template: docs +taxonomy: + category: docs +routes: + default: '/filezilla' +--- -This page explains how to exchange files (backup archives, music, pictures, -movies, ...) with your server using a graphical interface for the (S)FTP protocol. -This is an alternative to using `scp` which can be deemed technical and cryptic, -or using an app like Nextcloud. +This page explains how to exchange files (backup archives, music, pictures, movies...) with your server using a graphical interface for the (S)FTP protocol. This is an alternative to using `scp` which can be deemed technical and cryptic, or using an app like Nextcloud. -[FileZilla](https://filezilla-project.org/) can be used for this. It is a free -software and is available for Windows, Linux and macOS. +[FileZilla](https://filezilla-project.org/) can be used for this. It is a free software and is available for Windows, GNU/Linux and macOS. ## Download and install FileZilla @@ -18,45 +21,39 @@ Install the program and run *Filezilla*. 1. Click the *Site Manager* icon in the upper left to begin. -  +  2. Click **New Site** and give a name the server you will be using : *Family* here. Fill the settings as on the screenshot (replace the server adress with your own), and click on **Connect**. (N.B. : if you want to interact with the [custom webapp](https://github.com/YunoHost-Apps/my_webapp_ynh) files, you should use a different user than `admin`. Refer to the custom webapp documentation.) -  +  3. You will get a warning as you connect for the first time to the server. *You can ignore it safely the first time you get it.* -  +  4. Filezilla is now asking the `admin` password to connect to your server. -  +  5. Once bookmarked, your server will be backup up and you will get this screen. -  - -<div class="alert alert-success"> - <span class="glyphicon glyphicon-chevron-right"></span> You can now use your new bookmark to connect to the server -</div> +  ## Usage 1. Connect to the Site created previously. *Your passwork might be asked again* - The left panel corresponds to your computer. The right panel corresponds to your remote Yunohost server. You can browse folders and drag-and-drop files between the two panels. + The left panel corresponds to your computer. The right panel corresponds to your remote YunoHost server. You can browse folders and drag-and-drop files between the two panels. -  +  2. In the right panel, you can browse to `/home/yunohost.backup/archives/` to find [backup archives](/backup). -  +  -<div class="alert alert-warning"> - <span class="glyphicon glyphicon-cloud-download"></span> Be sure to download both the `.tar.gz` and `.json` files. -</div> +! [fa=cloud-download /] Be sure to download both the `.tar.gz` and `.json` files. - + ---- @@ -67,9 +64,9 @@ Sources ## Alternatives to Filezilla -### Linux +### GNU/Linux -From any recent Linux, you should be able to use the `file manager` to reach your server. +From any recent GNU/Linux, you should be able to use the `file manager` to reach your server. Nautilus from Gnome3 has features similar to FileZilla, out of the box. @@ -80,6 +77,6 @@ Nautilus from Gnome3 has features similar to FileZilla, out of the box. * [WinSCP](https://winscp.net/) is also a nice candidate for Windows -### MacOS +### macOS -* [Cyberduck](https://cyberduck.io/) is a free software available on MacOS +* [Cyberduck](https://cyberduck.io/) is a free software available on macOS diff --git a/theming_fr.md b/pages/01.administrate/07.specific_use_cases/04.theming/theming.fr.md similarity index 78% rename from theming_fr.md rename to pages/01.administrate/07.specific_use_cases/04.theming/theming.fr.md index 393e306d..d645dc99 100644 --- a/theming_fr.md +++ b/pages/01.administrate/07.specific_use_cases/04.theming/theming.fr.md @@ -1,4 +1,11 @@ -# Personnaliser l'apparence du portail utilisateur +--- +title: Personnaliser l'apparence du portail utilisateur +template: docs +taxonomy: + category: docs +routes: + default: '/theming' +--- ## Utiliser un thème @@ -19,17 +26,13 @@ Ensuite, vous pouvez utiliser `nano /etc/ssowat/conf.json.persistent` pour activ } ``` -<div class="alert alert-info" markdown="1"> -Vous devrez peut-être forcer le rafraîchissement du cache de votre navigateur pour que le thème se propage complètement. Vous pouvez le faire avec Ctrl+Maj+R sur Firefox. -</div> +!!! Vous devrez peut-être forcer le rafraîchissement du cache de votre navigateur pour que le thème se propage complètement. Vous pouvez le faire avec Ctrl+Maj+R sur Firefox. ## Ajouter le thème de quelqu'un d'autre Vous pouvez ajouter des thèmes créés par d'autres personnes en téléchargeant et en extrayant les fichiers correspondants dans un nouveau dossier `nom_du_theme` dans `/usr/share/ssowat/portal/assets/themes/`. -<div class="alert alert-warning" markdown="1"> -**Attention** : l'ajout de thèmes provenant d'inconnus sur Internet **est un risque de sécurité**. Cela équivaut à exécuter du code écrit par quelqu'un d'autre sur votre machine, et peut donc être utilisé à des fins malveillantes comme voler des mots de passe ! -</div> +! **Attention** : l'ajout de thèmes provenant d'inconnus sur Internet **est un risque de sécurité**. Cela équivaut à exécuter du code écrit par quelqu'un d'autre sur votre machine, et peut donc être utilisé à des fins malveillantes comme voler des mots de passe ! ## Créer votre propre thème diff --git a/theming.md b/pages/01.administrate/07.specific_use_cases/04.theming/theming.md similarity index 61% rename from theming.md rename to pages/01.administrate/07.specific_use_cases/04.theming/theming.md index 4f44f7cb..75a8c7a0 100644 --- a/theming.md +++ b/pages/01.administrate/07.specific_use_cases/04.theming/theming.md @@ -1,16 +1,23 @@ -# Customize the appearance of the user portal +--- +title: Customize the appearance of the user portal +template: docs +taxonomy: + category: docs +routes: + default: '/theming' +--- ## Using a theme Since YunoHost 3.5, you can change the theme of the user portal - though for now it requires tweaking via the command line. -You can list the available themes with : +You can list the available themes with: ```bash $ ls /usr/share/ssowat/portal/assets/themes/ ``` -Then you can use `nano /etc/ssowat/conf.json.persistent` to enable the theme you choose like this : +Then you can use `nano /etc/ssowat/conf.json.persistent` to enable the theme you choose like this: ```json { @@ -19,39 +26,35 @@ Then you can use `nano /etc/ssowat/conf.json.persistent` to enable the theme you } ``` -<div class="alert alert-info" markdown="1"> -You might need to force the refresh of your browser's cache for the theme to fully propagate. You can do so with Ctrl+Shift+R on Firefox. -</div> +!!! You might need to force the refresh of your browser's cache for the theme to fully propagate. You can do so with Ctrl+Shift+R on Firefox. ## Adding someone else's theme You may add themes created by other people by downloading and extracting the corresponding files in a new folder `the_theme_name` in `/usr/share/ssowat/portal/assets/themes/`. -<div class="alert alert-warning" markdown="1"> -**Beware** that adding third-party themes from random strangers on the internet **is a security risk**. It is equivalent to running someone's else code on your machine, which can be used for malicious purpose such as stealing credentials ! -</div> +! **Beware** that adding third-party themes from random strangers on the internet **is a security risk**. It is equivalent to running someone's else code on your machine, which can be used for malicious purpose such as stealing credentials! ## Creating your own theme -You can create your own theme by copying the existing theme of your choice. For instance starting from the light theme : +You can create your own theme by copying the existing theme of your choice. For instance starting from the light theme: ```bash cp -r /usr/share/ssowat/portal/assets/themes/{light,your_own_theme} ``` -Then, edit the files the css and js files in `/usr/share/ssowat/portal/assets/themes/your_own_theme` according to what you want to do : +Then, edit the files the CSS and JS files in `/usr/share/ssowat/portal/assets/themes/your_own_theme` according to what you want to do: -- `custom_portal.css` can be used to add custom CSS rules to the user portal ; -- `custom_overlay.css` can be used to customize the small YunoHost button overlay, displayed on apps page which includes it ; +- `custom_portal.css` can be used to add custom CSS rules to the user portal; +- `custom_overlay.css` can be used to customize the small YunoHost button overlay, displayed on apps page which includes it; - `custom_portal.js` can be used to add custom JS code to be ran both on the user portal or when injecting the small YunoHost button / overlay. You can also add your own images and assets which can then be used by the CSS and JS files. ### Example : customizing the logo -You may create your own theme simply to change the "branding" of the Yunohost user portal and replace the YunoHost logo with you own ! +You may create your own theme simply to change the "branding" of the YunoHost user portal and replace the YunoHost logo with you own! -To do so, upload your logo to `/usr/share/ssowat/portal/assets/themes/your_own_theme/`, and use the following CSS rules : +To do so, upload your logo to `/usr/share/ssowat/portal/assets/themes/your_own_theme/`, and use the following CSS rules: ```css /* Inside custom_portal.css */ diff --git a/external_storage_fr.md b/pages/01.administrate/07.specific_use_cases/05.external_storage/external_storage.fr.md similarity index 78% rename from external_storage_fr.md rename to pages/01.administrate/07.specific_use_cases/05.external_storage/external_storage.fr.md index 93de61cf..88e4f697 100644 --- a/external_storage_fr.md +++ b/pages/01.administrate/07.specific_use_cases/05.external_storage/external_storage.fr.md @@ -1,4 +1,11 @@ -# Ajouter un stockage externe à son serveur +--- +title: Ajouter un stockage externe à son serveur +template: docs +taxonomy: + category: docs +routes: + default: '/external_storage' +--- ## Introduction @@ -35,11 +42,9 @@ mmcblk0 179:0 0 14.9G 0 disk └─mmcblk0p2 179:2 0 14.8G 0 part / ``` -Ici, `mmcblk0` corresponds à une carte SD de 16Go (on voit que les partitions `mmcblk0p1` et `mmcblk0p2` correspondent à la partition de démarrage `/boot` et à la partition système `/`). Le disque dur branché corresponds à `sda` qui fait environ 1To, et contient une seule partition `sda1` qui n'est pas monté (pas de "MOUNTPOINT"). +Ici, `mmcblk0` correspond à une carte SD de 16Go (on voit que les partitions `mmcblk0p1` et `mmcblk0p2` correspondent à la partition de démarrage `/boot` et à la partition système `/`). Le disque dur branché correspond à `sda` qui fait environ 1To, et contient une seule partition `sda1` qui n'est pas monté (pas de "MOUNTPOINT"). -<div class="alert alert-warning" markdown="1"> -<span class="glyphicon glyphicon-warning-sign"></span> Sur un autre système, il se peut que votre système soit installé sur `sda` et que votre disque soit alors `sdb` par exemple. -</div> +! [fa=exclamation-triangle /] Sur un autre système, il se peut que votre système soit installé sur `sda` et que votre disque soit alors `sdb` par exemple. ## 2. (Optionnel) Formater le disque @@ -71,9 +76,9 @@ mkfs.ext4 /dev/VOTRE_DISQUE1 ## 3. Monter le disque -"Monter" un disque corresponds à le rendre effectivement accessible dans l'arborescence des fichiers. Nous allons choisir arbitrairement de monter le disque dans `/media/stockage` mais vous pouvez le nommer différement (par exemple `/media/mon_disque` ...). +"Monter" un disque signifie le rendre effectivement accessible dans l'arborescence des fichiers. Nous allons choisir arbitrairement de monter le disque dans `/media/stockage` mais vous pouvez le nommer différemment (par exemple `/media/mon_disque` ...). -Commençons par cŕeer le répertoire : +Commençons par créer le répertoire : ```bash mkdir /media/stockage ``` @@ -84,7 +89,7 @@ Puis nous pouvons monter le disque manuellement avec : mount /dev/VOTRE_DISQUE1 /media/stockage ``` -(Ici, `/dev/VOTRE_DISQUE1` corresponds à la première partition sur le disque) +(Ici, `/dev/VOTRE_DISQUE1` correspond à la première partition sur le disque) Ensuite, vous devriez pouvoir créer des fichiers dans `/media/stockage`, et, par exemple, ajouter `/media/stockage` comme périphérique externe dans Nextcloud. diff --git a/external_storage.md b/pages/01.administrate/07.specific_use_cases/05.external_storage/external_storage.md similarity index 89% rename from external_storage.md rename to pages/01.administrate/07.specific_use_cases/05.external_storage/external_storage.md index d9c436c7..9e5d5825 100644 --- a/external_storage.md +++ b/pages/01.administrate/07.specific_use_cases/05.external_storage/external_storage.md @@ -1,4 +1,11 @@ -# Adding an external storage to your server +--- +title: Adding an external storage to your server +template: docs +taxonomy: + category: docs +routes: + default: '/external_storage' +--- ## Introduction @@ -37,9 +44,7 @@ mmcblk0 179:0 0 14.9G 0 disk Here, `mmcblk0` corresponds to an SD card of 16Go (the partitions `mmcblk0p1` et `mmcblk0p2` are used as the boot partition `/boot` and the system partition `/`). The external drive is `sda` which is about 1TB and has only one partition `sda1` which is not mounted (no "MOUNTPOINT"). -<div class="alert alert-warning" markdown="1"> -<span class="glyphicon glyphicon-warning-sign"></span> On a different setup, your system partition might be `sda` and so your external drive might be `sdb` for instance. -</div> +! [fa=exclamation-triangle /] On a different setup, your system partition might be `sda` and so your external drive might be `sdb` for instance. ## 2. (Optional) Format the disk @@ -57,7 +62,7 @@ Check with `lsblk` that your disk really does contain a single partition. Before you can use your disk it has to be formatted. -You should be aware that **formating a drive implies to erasing every data on it !** If your disk is already "clean", you may ignore this step. +! You should be aware that **formating a drive implies to erasing every data on it!** If your disk is already "clean", you may ignore this step. To format the partition : diff --git a/email_migration_fr.md b/pages/01.administrate/07.specific_use_cases/06.email_migration/email_migration.fr.md similarity index 90% rename from email_migration_fr.md rename to pages/01.administrate/07.specific_use_cases/06.email_migration/email_migration.fr.md index 7e0151c6..c8782a3e 100644 --- a/email_migration_fr.md +++ b/pages/01.administrate/07.specific_use_cases/06.email_migration/email_migration.fr.md @@ -1,4 +1,11 @@ -# Migrer ses emails d'un ancien serveur mail vers YunoHost +--- +title: Migrer ses emails d'un ancien serveur mail vers YunoHost +template: docs +taxonomy: + category: docs +routes: + default: '/email_migration' +--- *[Documentation en rapport avec l’email de YunoHost](/email)*. diff --git a/email_migration.md b/pages/01.administrate/07.specific_use_cases/06.email_migration/email_migration.md similarity index 68% rename from email_migration.md rename to pages/01.administrate/07.specific_use_cases/06.email_migration/email_migration.md index 74b9388e..20d40c0e 100644 --- a/email_migration.md +++ b/pages/01.administrate/07.specific_use_cases/06.email_migration/email_migration.md @@ -1,8 +1,15 @@ -# Migrating email from an email provider to a YunoHost instance +--- +title: Migrating email from an email provider to a YunoHost instance +template: docs +taxonomy: + category: docs +routes: + default: '/email_migration' +--- *[Documentation linked to YunoHost email](/email)*. -Migration of his emails from a server to an other can be done with two recommended tools: ImapSync or Larch. +Migration of emails from one server to another can be done with two recommended tools: ImapSync or Larch. This tool must be installed on your desktop computer. The transfer method looks at this schema: @@ -16,7 +23,7 @@ Install ImapSync on your client computer by following this [guide](http://imapsy ```bash sudo dnf install imapsync # Under Fedora ``` -Transfer emails from a server to an other: +Transfer emails from one server to another: ```bash imapsync --host1 <domain/IP> --port1 993 --ssl1 --user1 <user> --password1 <password> \ --host2 <domain/IP> --port2 993 --ssl2 --user2 <user> --password2 <password> @@ -32,8 +39,8 @@ After beforehand installed `gem`, install `larch` on your client computer: ```bash sudo gem install larch ``` -Transfer emails from a server to an other: +Transfer emails from one server to another: ```bash larch -a -f imaps://serveur_d'origine.org -t imaps://serveur_de_destination.org ``` -For other type of tranfer refer you to Larch documentation. +For other types of transfer refer to [Larch documentation](https://github.com/rgrove/larch#label-Usage). diff --git a/pages/01.administrate/07.specific_use_cases/07.email_relay/email_configure_relay.fr.md b/pages/01.administrate/07.specific_use_cases/07.email_relay/email_configure_relay.fr.md new file mode 100644 index 00000000..b3541daa --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/07.email_relay/email_configure_relay.fr.md @@ -0,0 +1,66 @@ +--- +title: Configurer un relais SMTP +template: docs +taxonomy: + category: docs +routes: + default: '/email_configure_relay' +--- + +Si votre fournisseur internet bloque le port 25, ou si vous rencontrez un problème d’utilisation du serveur SMTP natif de YunoHost, vous pouvez configurer votre serveur YunoHost pour utiliser un relais SMTP. + +## Qu'est ce qu'un relais SMTP + +C'est un serveur SMTP tiers qui va envoyer les e-mails à la place de votre propre serveur SMTP. +Une fois correctement installé, le changement est totalement transparent pour l’utilisateur. Vos correspondants verront vos e-mails comme s’ils venaient de votre propre serveur, mais ils auront été envoyés depuis le relais SMTP que vous aurez choisi et configuré. + +! [fa=exclamation-triangle /] Il est important de noter que dans le monde de l'auto-hébergement, utiliser un relai SMTP est un énorme compromis ! En effet, le relais SMTP ne sera pas seulement capable d'envoyer les e-mails, mais il a également accès au contenu entier de l’e-mail que vous envoyez. Il faut faire attention également que vous n'aurez pas le choix, tout le trafic e-mails passera par ce relais une fois la configuration terminée. + +## Comment utiliser le relais SMTP avec YunoHost ? + +YunoHost supporte depuis la version 4.1 la configuration d'un relais SMTP. Pour le moment cette fonctionnalité ne soit pas accessible depuis l'interface d'administration : le paramétrage doit être fait en ligne de commande. + +### Étape 1 : S'inscrire chez un fournisseur de relais SMTP + +Beaucoup de fournisseurs existent dans ce domaine. Certains sont gratuits et d'autres proposent des services payants contre différentes options. Comme écrit plus haut vous devez être sûr de pouvoir lui faire confiance, mais cela reste à votre entier égard. + +### Étape 2 : Paramétrer sa zone DNS correctement + +Une fois inscrit, le paramétrage du relais SMTP demande de modifier la zone DNS de votre domaine. La procédure standard consiste à ajouter une clé DKIM, et SPF à la zone DNS. Les paramètres à modifier dépendent du fournisseur que vous aurez choisi. + +Habituellement les fournisseurs ont une documentation à ce sujet. + +! [fa=exclamation-triangle /] Attention une fois la zone DNS enregistrée, le relais SMTP peut envoyer des e-mails à votre nom sans que vous ne le sachiez + +## Étape 3 :Configurer YunoHost correctement + +Pour que YunoHost soit capable d'utiliser le relais, il faut paramétrer 3 choses. +1. Votre url de relais SMTP (on utilisera `smtprelay.tld`). +2. Votre nom d'utilisateur SMTP (on utilisera `username`). +3. Votre mot de passe SMTP (on utilisera `password`). + +Le fournisseur SMTP vous fournit ces trois informations. + +Premièrement se connecter sur son serveur en SSH avec la commande : + +```bash +ssh admin@domain.tld +``` + +Ensuite, mettre à jour les informations suivantes : + +```bash +sudo yunohost settings set smtp.relay.host -v smtprelay.tld +sudo yunohost settings set smtp.relay.user -v username +sudo yunohost settings set smtp.relay.password -v password +``` + +C'est une bonne idée de confirmer les informations en faisant `sudo yunohost settings list` + +Votre relais SMTP est maintenant configuré ! + +! [fa=exclamation-triangle /] Maintenant le relais SMTP est capable de lire et d'utiliser toutes les informations contenues dans les emails que vous envoyer sans votre accord. Mais ne sera pas capable de lire les informations des emails que vous recevez. + +## Vérifier la configuration + +Vous pouvez vérifier vos paramètres en envoyant un mail et voir si cela fonctionne. Certains relais SMTP vous confirment l'e-mail envoyé. Bien sur vous pouvez vérifier sur mail-tester.com pour prendre connaissance d’éventuelles problèmes. diff --git a/pages/01.administrate/07.specific_use_cases/07.email_relay/email_configure_relay.md b/pages/01.administrate/07.specific_use_cases/07.email_relay/email_configure_relay.md new file mode 100644 index 00000000..f3dfb734 --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/07.email_relay/email_configure_relay.md @@ -0,0 +1,75 @@ +--- +title: Configure SMTP relay +template: docs +taxonomy: + category: docs +routes: + default: '/email_configure_relay' +--- + +If your ISP blocks port 25, if you can't set a reverseDNS on your server, or if you have any other troubles using the built-in SMTP server on YunoHost, you may want to setup your YunoHost server to use a SMTP relay. + +## What is a SMTP relay? + +A SMTP relay is basically a third party hosted SMTP server that will send emails on behalf of your own SMTP server (Postfix service on YunoHost). +Once setup correctly on YunoHost, it will operate in a totally transparent manner, both for you and for your correspondents: they will see emails as coming from your YunoHost main URL, but all the sending will be delegated to the SMTP relay you have chosen and configured. + +! [fa=exclamation-triangle /] It's important to note that using a SMTP relay has to be seen as a (big) compromise in the world of self-hosting. Indeed, when using a SMTP relay, you will not only let a third party send emails on your behalf, but also be able to access to the full content of all the emails you'll send. Be also aware that a SMTP relay is setup for your whole YunoHost server: you can't choose which emails or which users go through it because all future emails will. + +## How to use a SMTP relay with YunoHost? + +YunoHost has a built-in SMTP relay configuration, available from version 4.1. That configuration is not yet available from the admin web interface, though. You will have to use the command line interface. + +### Step 1: Register on a SMTP relay provider + +Many providers exist. Some have free plans with or without limitations, it's up to you. As written above, you have to be careful with your choice as you will basically handover all your emails to that third party. Whether you can trust it or not, that's your call! + +### Step 2: Setup your DNS records correctly + +Once registered, the SMTP relay provider will usually ask you to modify your DNS. +Standard procedure is to add a DKIM key and a SPF key to your DNS records. +The way to modify these records and the value of the keys you'll have to add depend both on your domain name provider and SMTP relay provider. + +Usually, the SMTP relay provider will provide you with a guide on how to modify these records, together with an automatic check tool that will tell you when your DNS have been setup correctly. That step is mandatory to prove "the world" that you, owner of your domain name, did explicitly authorize your SMTP relay provider to send emails on your behalf. + +Please note that modifying your DNS records could sometimes take over 24h to take effect, so be patient! + +! [fa=exclamation-triangle /] From now on, a non trusty SMTP relay provider could send emails from your main domain without telling you. + +### Step 3: Setup YunoHost correctly + +In order to setup your YunoHost to use your SMTP relay, you will have to configure three things: +1. Your SMTP relay URL (for this tutorial we will use `smtprelay.tld`) +2. Your SMTP relay username (for this tutorial we will use `username`) +3. Your SMTP relay password (for this tutorial we will use `password`) + +Your SMTP relay will obviously provide you with these three things, that should be available in your control panel or whatsoever. + +You can log into your YunoHost server using SSH: +```bash +ssh admin@yourdomain.tld +``` + +Then you can update the three values as below: + +```bash +sudo yunohost settings set smtp.relay.host -v smtprelay.tld +sudo yunohost settings set smtp.relay.user -v username +sudo yunohost settings set smtp.relay.password -v password +``` + +It may be a good idea to double confirm your settings by doing: + +```bash +sudo yunohost settings list +``` + +Your SMTP relay is now configured! + +! [fa=exclamation-triangle /] From now on, a non trusty SMTP relay provider could read or use the data of all the emails you send without telling you (but still won't be able to read nor to use the data from emails you receive). + +### Step 4: Check your setup + +You can check your setup by sending emails and try if everything works. +Some of the SMTP relay will give you insights about the emails you send so that can also be a good way to check that everythings works as needed. +Of course, you can always have a try with [mail-tester.com](https://www.mail-tester.com/) to check for any problem or discrepancy. diff --git a/torhiddenservice_fr.md b/pages/01.administrate/07.specific_use_cases/08.tor/torhiddenservice.fr.md similarity index 74% rename from torhiddenservice_fr.md rename to pages/01.administrate/07.specific_use_cases/08.tor/torhiddenservice.fr.md index f5d7e4e0..a79d5fac 100644 --- a/torhiddenservice_fr.md +++ b/pages/01.administrate/07.specific_use_cases/08.tor/torhiddenservice.fr.md @@ -1,8 +1,13 @@ -## Utiliser YunoHost comme un service caché Tor -<div class="alert alert-warning"> -Ce tuto n'est pas complet ! Des données peuvent être récupérée avec cette installation comme le nom de domaine principal de votre yunohost, donc ce n'est pas un "service caché". -</div> -Voir https://www.torproject.org/docs/tor-hidden-service.html.en (anglais) +--- +title: Utiliser YunoHost comme un service caché Tor +template: docs +taxonomy: + category: docs +routes: + default: '/torhiddenservice' +--- + +! Ce tuto n'est pas complet ! Des données peuvent être récupérée avec cette installation comme le nom de domaine principal de votre yunohost, donc ce n'est pas un "service caché". Voir https://www.torproject.org/docs/tor-hidden-service.html.en (anglais) ### Installer Tor ```bash @@ -42,7 +47,7 @@ Si vous voulez éviter d’être redirigé vers le portail à la connexion pour #access_by_lua_file /usr/share/ssowat/access.lua; ``` -### Vérifier que l'on a pas fait d'erreurs dans la configuration de Nginx +### Vérifier que l'on a pas fait d'erreurs dans la configuration de NGINX ```bash nginx -t ``` diff --git a/torhiddenservice_it.md b/pages/01.administrate/07.specific_use_cases/08.tor/torhiddenservice.it.md similarity index 65% rename from torhiddenservice_it.md rename to pages/01.administrate/07.specific_use_cases/08.tor/torhiddenservice.it.md index 0dcf74fa..406e2fa3 100644 --- a/torhiddenservice_it.md +++ b/pages/01.administrate/07.specific_use_cases/08.tor/torhiddenservice.it.md @@ -1,9 +1,13 @@ -## Collegarsi a Yunohost attraverso un Hidden Service -<div class="alert alert-warning"> -Questo tutorial non è completo! Con queste impostazioni alcuni dati possono essere rivelati come ad esempio il dominio principale del tuo yunohost, di conseguenza non può essere considerato un reale "Hidden service". -</div> +--- +title: Collegarsi a YunoHost attraverso un Hidden Service +template: docs +taxonomy: + category: docs +routes: + default: '/torhiddenservice' +--- -Vedi https://www.torproject.org/docs/tor-hidden-service.html +! Questo tutorial non è completo! Con queste impostazioni alcuni dati possono essere rivelati come ad esempio il dominio principale del tuo yunohost, di conseguenza non può essere considerato un reale "Hidden service". Vedi https://www.torproject.org/docs/tor-hidden-service.html ### Installare Tor ```bash @@ -31,7 +35,7 @@ cat /var/lib/tor/hidden_service/hostname Il dominio dell'hidden service sarà una cosa tipo *random123456789.onion* -### Aggiungi il dominio .onion a Yunohost +### Aggiungi il dominio .onion a YunoHost ```bash yunohost domain add random123456789.onion ``` @@ -43,7 +47,7 @@ Se non vuoi essere rediretto al portale SSO al login puoi disattivare SSOwat spe #access_by_lua_file /usr/share/ssowat/access.lua; ``` -### Riavvia nginx +### Riavvia NGINX ```bash service nginx restart ``` diff --git a/torhiddenservice.md b/pages/01.administrate/07.specific_use_cases/08.tor/torhiddenservice.md similarity index 72% rename from torhiddenservice.md rename to pages/01.administrate/07.specific_use_cases/08.tor/torhiddenservice.md index 44a93a1b..71dadd67 100644 --- a/torhiddenservice.md +++ b/pages/01.administrate/07.specific_use_cases/08.tor/torhiddenservice.md @@ -1,9 +1,13 @@ -## Using YunoHost as a Tor Hidden Service -<div class="alert alert-warning"> -This tuto is not finished ! Some data could leak with this setup like the main domain of your yunohost, so it's not a "Hidden Service". -</div> +--- +title: Using YunoHost as a Tor Hidden Service +template: docs +taxonomy: + category: docs +routes: + default: '/torhiddenservice' +--- -See https://www.torproject.org/docs/tor-hidden-service.html.en +! This tuto is not finished ! Some data could leak with this setup like the main domain of your yunohost, so it's not a "Hidden Service". See https://www.torproject.org/docs/tor-hidden-service.html.en ### Installing Tor ```bash @@ -43,7 +47,7 @@ If you want to avoid being redirected to the SSO portal at login, you can deacti #access_by_lua_file /usr/share/ssowat/access.lua; ``` -### Restart nginx +### Restart NGINX ```bash service nginx restart ``` diff --git a/certificate_custom_fr.md b/pages/01.administrate/07.specific_use_cases/09.certificate_custom/certificate_custom.fr.md similarity index 62% rename from certificate_custom_fr.md rename to pages/01.administrate/07.specific_use_cases/09.certificate_custom/certificate_custom.fr.md index 31e19901..20b94a81 100644 --- a/certificate_custom_fr.md +++ b/pages/01.administrate/07.specific_use_cases/09.certificate_custom/certificate_custom.fr.md @@ -1,17 +1,32 @@ -**Note :** depuis la version 2.5, Yunohost intègre la gestion automatisée de certificats Let's Encrypt. Vous pouvez donc facilement et gratuitement [installer un certificat Let's Encrypt](/certificate). Le document suivant décrit la méthodologie pour installer un certificat, payant, d'une autre autorité de certification (**Gandi**, **RapidSSL**, **StartSSL**, **Cacert**). +--- +title: Certificats personnalisés +template: docs +taxonomy: + category: docs +routes: + default: '/certificate_custom' +--- + +**Note :** depuis la version 2.5, YunoHost intègre la gestion automatisée de certificats Let's Encrypt. Vous pouvez donc facilement et gratuitement [installer un certificat Let's Encrypt](/certificate). Le document suivant décrit la méthodologie pour installer un certificat, payant, d'une autre autorité de certification (**Gandi**, **RapidSSL**, **StartSSL**, **Cacert**). + +Quelques changements ont eu lieu qui impactent les procédures indiquées ci-dessous : + +* Le groupe metronome n'est plus utilisé directement mais ssl-cert. +* Un repertoire `/etc/yunohost/certs/DOMAIN.LTD-history/stamp` est utilisé pour conserver chaque configuration créée et un lien symbolique est créé dessus. ### Ajout d’un certificat signé par une autorité (autre que Let's Encrypt) -Après création du certificat auprès de votre autorité d’enregistrement, vous devez être en possession d’une clé privée, le fichier key et d’un certificat public, le fichier crt. -> Attention, le fichier key est très sensible, il est strictement personnel et doit être très bien sécurisé. +Après création du certificat auprès de votre autorité d’enregistrement, vous devez être en possession d’une clé privée, le fichier *key* et d’un certificat public, le fichier *crt*. +> Attention, le fichier *key* est très sensible, il est strictement personnel et doit être très bien sécurisé. Ces deux fichiers doivent être copiés sur le serveur, s’ils ne s’y trouvent pas déjà. + ```bash scp CERTIFICAT.crt admin@DOMAIN.TLD:ssl.crt scp CLE.key admin@DOMAIN.TLD:ssl.key ``` -Depuis Windows, scp est exploitable avec putty, en téléchargeant l’outil [pscp](http://the.earth.li/~sgtatham/putty/latest/x86/pscp.exe) +Depuis Windows, scp est exploitable avec Putty, en téléchargeant l’outil [pscp](http://the.earth.li/~sgtatham/putty/latest/x86/pscp.exe) ```bash pscp -P 22 CERTIFICAT.crt admin@DOMAIN.TLD:ssl.crt @@ -33,7 +48,7 @@ Puis allez dans le dossier parent pour poursuivre. cd /etc/yunohost/certs/DOMAIN.TLD/ ``` -Faites une sauvegarde des certificats d’origine de yunohost, par précaution. +Faites une sauvegarde des certificats d’origine de YunoHost, par précaution. ```bash sudo mkdir yunohost_self_signed @@ -70,7 +85,7 @@ Les certificats intermédiaires et root doivent être réunis avec le certificat cat ae_certs/ssl.crt ae_certs/intermediate_ca.pem ae_certs/ca.pem | sudo tee crt.pem ``` -La clé privée doit être, elle, convertie au format pem. +La clé privée doit être, elle, convertie au format `.pem`. ```bash sudo openssl rsa -in ae_certs/ssl.key -out key.pem -outform PEM @@ -84,21 +99,23 @@ cat crt.pem key.pem Les certificats et la clé privée doivent ressembler à cela : -`-----BEGIN CERTIFICATE-----`<br/> -`MIICVDCCAb0CAQEwDQYJKoZIhvcNAQEEBQAwdDELMAkGA1UEBhMCRlIxFTATBgNV`<br/> -`BAgTDENvcnNlIGR1IFN1ZDEQMA4GA1UEBxMHQWphY2NpbzEMMAoGA1UEChMDTExC`<br/> -`MREwDwYDVQQLEwhCVFMgSU5GTzEbMBkGA1UEAxMSc2VydmV1ci5idHNpbmZvLmZy`<br/> -`MB4XDTA0MDIwODE2MjQyNloXDTA0MDMwOTE2MjQyNlowcTELMAkGA1UEBhMCRlIx`<br/> -`FTATBgNVBAgTDENvcnNlIGR1IFN1ZDEQMA4GA1UEBxMHQWphY2NpbzEMMAoGA1UE`<br/> -`ChMDTExCMREwDwYDVQQLEwhCVFMgSU5GTzEYMBYGA1UEAxMPcHJvZi5idHNpbmZv`<br/> -`LmZyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDSUagxPSv3LtgDV5sygt12`<br/> -`kSbN/NWP0QUiPlksOkF2NkPfwW/mf55dD1hSndlOM/5kLbSBo5ieE3TgikF0Iktj`<br/> -`BWm5xSqewM5QDYzXFt031DrPX63Fvo+tCKTQoVItdEuJPMahVsXnDyYHeUURRWLW`<br/> -`wc0BzEgFZGGw7wiMF6wt5QIDAQABMA0GCSqGSIb3DQEBBAUAA4GBALD640iwKPMf`<br/> -`pqdYtfvmLnA7CiEuao60i/pzVJE2LIXXXbwYjNAM+7Lov+dFT+b5FcOUGqLymSG3`<br/> -`kSK6OOauBHItgiGI7C87u4EJaHDvGIUxHxQQGsUM0SCIIVGK7Lwm+8e9I2X0G2GP`<br/> -`9t/rrbdGzXXOCl3up99naL5XAzCIp6r5`<br/> -`-----END CERTIFICATE-----` +```plaintext +-----BEGIN CERTIFICATE----- +MIICVDCCAb0CAQEwDQYJKoZIhvcNAQEEBQAwdDELMAkGA1UEBhMCRlIxFTATBgNV +BAgTDENvcnNlIGR1IFN1ZDEQMA4GA1UEBxMHQWphY2NpbzEMMAoGA1UEChMDTExC +MREwDwYDVQQLEwhCVFMgSU5GTzEbMBkGA1UEAxMSc2VydmV1ci5idHNpbmZvLmZy +MB4XDTA0MDIwODE2MjQyNloXDTA0MDMwOTE2MjQyNlowcTELMAkGA1UEBhMCRlIx +FTATBgNVBAgTDENvcnNlIGR1IFN1ZDEQMA4GA1UEBxMHQWphY2NpbzEMMAoGA1UE +ChMDTExCMREwDwYDVQQLEwhCVFMgSU5GTzEYMBYGA1UEAxMPcHJvZi5idHNpbmZv +LmZyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDSUagxPSv3LtgDV5sygt12 +kSbN/NWP0QUiPlksOkF2NkPfwW/mf55dD1hSndlOM/5kLbSBo5ieE3TgikF0Iktj +BWm5xSqewM5QDYzXFt031DrPX63Fvo+tCKTQoVItdEuJPMahVsXnDyYHeUURRWLW +wc0BzEgFZGGw7wiMF6wt5QIDAQABMA0GCSqGSIb3DQEBBAUAA4GBALD640iwKPMf +pqdYtfvmLnA7CiEuao60i/pzVJE2LIXXXbwYjNAM+7Lov+dFT+b5FcOUGqLymSG3 +kSK6OOauBHItgiGI7C87u4EJaHDvGIUxHxQQGsUM0SCIIVGK7Lwm+8e9I2X0G2GP +9t/rrbdGzXXOCl3up99naL5XAzCIp6r5 +-----END CERTIFICATE----- +``` Enfin, sécurisez les fichiers de votre certificat. @@ -109,13 +126,14 @@ sudo chown root:root -R ae_certs sudo chmod 600 -R ae_certs ``` -Maintenant les certificats (les deux fichiers avec l'extension .pem) doivent être recopiés dans /etc/yunohost/certs/DOMAIN.TLD. +Maintenant les certificats (les deux fichiers avec l'extension `.pem`) doivent être recopiés dans `/etc/yunohost/certs/DOMAIN.TLD`. ```bash cp ae_certs/*.pem ./ ``` -Rechargez la configuration de nginx pour prendre en compte le nouveau certificat. +Rechargez la configuration de NGINX pour prendre en compte le nouveau certificat. + ```bash sudo service nginx reload ``` diff --git a/pages/01.administrate/07.specific_use_cases/09.certificate_custom/certificate_custom.md b/pages/01.administrate/07.specific_use_cases/09.certificate_custom/certificate_custom.md new file mode 100644 index 00000000..ee6eeb54 --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/09.certificate_custom/certificate_custom.md @@ -0,0 +1,141 @@ +--- +title: Custom certificates +template: docs +taxonomy: + category: docs +routes: + default: '/certificate_custom' +--- + +! **Note:** since version 2.5, YunoHost integrates Let's Encrypt certificates automated management. You can easily and freely [install a Let's Encrypt certificate](/certificate). The following document describes the steps for installing a paid certificate from a certification authority (**Gandi**, **RapidSSL**, **StartSSL**, **Cacert**). + +Some changes have taken place which impact the procedures indicated below: + +* Metronome group is no longer used directly but ssl-cert. +* A `/etc/yunohost/certs/DOMAIN.LTD-history/stamp` directory is used to keep each configuration created and a symlink is created. + +### Adding a signed certificate by an authority (other than Let's Encrypt) + +After the certificate creation with your registration authority, you must have a private key, the key file, and a public certificate, the crt file. +> Note that the key file is very sensitive, it is strictly personal and must be very well secured. + +These two files should be copied to the server, if they are not already there. + +```bash +scp CERTIFICATE.crt admin@DOMAIN.TLD:ssl.crt +scp KEY.key admin@DOMAIN.TLD:ssl.key +``` + +From Windows, scp can be used with Putty, by downloading the tool [pscp](http://the.earth.li/~sgtatham/putty/latest/x86/pscp.exe) + +```bash +pscp -P 22 CERTIFICATE.crt admin@DOMAIN.TLD:ssl.crt +pscp -P 22 KEY.key admin@DOMAIN.TLD:ssl.key +``` + +As soon as the files are on the server, the rest of the work will be done on it. In [ssh](/ssh) or locally. +First, create a folder to store the obtained certificates. + +```bash +sudo mkdir /etc/yunohost/certs/DOMAIN.TLD/ae_certs +sudo mv ssl.key ssl.crt /etc/yunohost/certs/DOMAIN.TLD/ae_certs/ +``` + +Then, go to the parent folder to continue. + +```bash +cd /etc/yunohost/certs/DOMAIN.TLD/ +``` + +As a caution, back up the certificates of origin from YunoHost. + +```bash +sudo mkdir yunohost_self_signed +sudo mv *.pem *.cnf yunohost_self_signed/ +``` + +Depending on the registration authority, intermediate and root certificates must be obtained. + +> **StartSSL** +> ```bash +> sudo wget http://www.startssl.com/certs/ca.pem -O ae_certs/ca.pem +> sudo wget http://www.startssl.com/certs/sub.class1.server.ca.pem -O ae_certs/intermediate_ca.pem +>``` + +> **Gandi** +> ```bash +> sudo wget https://www.gandi.net/static/CAs/GandiStandardSSLCA2.pem -O ae_certs/intermediate_ca.pem +>``` + +> **RapidSSL** +> ```bash +> sudo wget https://knowledge.rapidssl.com/library/VERISIGN/INTERNATIONAL_AFFILIATES/RapidSSL/AR1548/RapidSSLCABundle.txt -O ae_certs/intermediate_ca.pem +>``` + +> **Cacert** +> ```bash +> sudo wget http://www.cacert.org/certs/root.crt -O ae_certs/ca.pem +> sudo wget http://www.cacert.org/certs/class3.crt -O ae_certs/intermediate_ca.pem +>``` + +Intermediate and root certificates must be combined with the obtained certificate to create a unified certificate chain. + +```bash +cat ae_certs/ssl.crt ae_certs/intermediate_ca.pem ae_certs/ca.pem | sudo tee crt.pem +``` + +The private key must be converted to `.pem` format. + +```bash +sudo openssl rsa -in ae_certs/ssl.key -out key.pem -outform PEM +``` + +To ensure the certificates syntax, check the files contents. + +```bash +cat crt.pem key.pem +``` + +The certificates and private key should look like this: + +```plaintext +-----BEGIN CERTIFICATE----- +MIICVDCCAb0CAQEwDQYJKoZIhvcNAQEEBQAwdDELMAkGA1UEBhMCRlIxFTATBgNV +BAgTDENvcnNlIGR1IFN1ZDEQMA4GA1UEBxMHQWphY2NpbzEMMAoGA1UEChMDTExC +MREwDwYDVQQLEwhCVFMgSU5GTzEbMBkGA1UEAxMSc2VydmV1ci5idHNpbmZvLmZy +MB4XDTA0MDIwODE2MjQyNloXDTA0MDMwOTE2MjQyNlowcTELMAkGA1UEBhMCRlIx +FTATBgNVBAgTDENvcnNlIGR1IFN1ZDEQMA4GA1UEBxMHQWphY2NpbzEMMAoGA1UE +ChMDTExCMREwDwYDVQQLEwhCVFMgSU5GTzEYMBYGA1UEAxMPcHJvZi5idHNpbmZv +LmZyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDSUagxPSv3LtgDV5sygt12 +kSbN/NWP0QUiPlksOkF2NkPfwW/mf55dD1hSndlOM/5kLbSBo5ieE3TgikF0Iktj +BWm5xSqewM5QDYzXFt031DrPX63Fvo+tCKTQoVItdEuJPMahVsXnDyYHeUURRWLW +wc0BzEgFZGGw7wiMF6wt5QIDAQABMA0GCSqGSIb3DQEBBAUAA4GBALD640iwKPMf +pqdYtfvmLnA7CiEuao60i/pzVJE2LIXXXbwYjNAM+7Lov+dFT+b5FcOUGqLymSG3 +kSK6OOauBHItgiGI7C87u4EJaHDvGIUxHxQQGsUM0SCIIVGK7Lwm+8e9I2X0G2GP +9t/rrbdGzXXOCl3up99naL5XAzCIp6r5 +-----END CERTIFICATE----- +``` + +Finally, secure your certificate files. + +```bash +sudo chown root:metronome crt.pem key.pem +sudo chmod 640 crt.pem key.pem +sudo chown root:root -R ae_certs +sudo chmod 600 -R ae_certs +``` + +Now the certificates (two files with the extension `.pem`) must be copied in `/etc/yunohost/certs/DOMAIN.TLD`. + +```bash +cp ae_certs/*.pem ./ +``` + +Reload NGINX configuration to take into account the new certificate. + +```bash +sudo service nginx reload +``` + +Your certificate is ready. However, you can ensure that it is in place by testing the certificate using the <a href="https://www.geocerts.com/ssl_checker" target="_blank">geocerts</a>. + diff --git a/pages/01.administrate/07.specific_use_cases/10.vpn/vpn_advantage.es.md b/pages/01.administrate/07.specific_use_cases/10.vpn/vpn_advantage.es.md new file mode 100644 index 00000000..d6cdd1c1 --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/10.vpn/vpn_advantage.es.md @@ -0,0 +1,58 @@ +--- +title: Ventajas de una VPN para el autoalojamiento +template: docs +taxonomy: + category: docs +routes: + default: '/vpn_advantage' +--- + +Dado que la instalación de un servidor en casa es una práctica poco habitual, la mayoría de las conexiones a Internet que se proporcionan a los particulares no son adecuadas para este fin. Una VPN de red neutra que proporcione una dirección IPv4 fija y direcciones IPv6 puede ayudar a superar algunas limitaciones o dificultades. + +! <b>Advertencia</b>: no todos los proveedores de VPN existentes cumplen estos requisitos, asegúrese de que el que elija los cumpla. + +## Ventajas + +### Plug & Play + +Configurando una VPN en tu servidor, podrás hacerlo accesible al resto de Internet sin tener que cambiar la configuración del router al que lo conectas. Esto puede ser realmente útil si te vas de vacaciones, te mudas de casa o si tienes un corte de Internet, porque podrás conectarlo fácilmente a una persona de confianza sin tener que configurar el router de la persona que te ayuda. + +De la misma manera, te ahorrarás abrir los puertos de tu router, así como evitar el hairpinning. + +### Sin microcortes DNS + +Si su conexión a Internet no tiene una IP pública fija, se verá obligado a configurar un nombre de dominio dinámico (DNS dinámico). Esto puede ser aceptable, pero el DNS sólo se actualizará a intervalos regulares (cada dos minutos si es un nombre de dominio noho.st o nohost.me). Por lo tanto, existe la posibilidad de que ocasionalmente se produzcan errores de visualización en el navegador, o incluso que se muestre otro sitio (los riesgos se reducen, sin embargo, porque la práctica del autoalojamiento no está muy extendida). + +Con una VPN neutra, este problema se sortea porque la VPN puede compararse con una Conexión Virtual a Internet, que tiene su propia dirección IPv4 fija, por lo que no es necesario actualizar el nombre de dominio. + +### El caso del correo electrónico + +El correo es uno de los protocolos más complejos de autoalojar, normalmente es lo último que autoaloja un usuario. De hecho, es muy fácil encontrarse en una situación en la que los correos electrónicos enviados por el servidor son rechazados por los servidores SMTP de los destinatarios. + +Para evitarlo, necesitas, entre otras cosas: + + -configurar el DNS inverso de la conexión a Internet del servidor (o VPN) + -una IPv4 fija + -que esta IPv4 sea eliminada de todas las listas negras (en particular, la IP no debe estar en el DUL) + -poder abrir el puerto 25 (así como otros puertos SMTP) + +Desgraciadamente, ninguno de los ISP franceses más habituales respeta todos estos puntos. + +Para superar esto, el uso de una VPN que respete estos puntos puede ser una alternativa. + +### Confianza + +Por último, si no quiere que el contenido de las comunicaciones de su servidor sea espiable por los equipos presentes en la red de su proveedor de servicios de Internet, puede utilizar una VPN para cifrar sus comunicaciones y deportar su confianza a un proveedor de VPN. A modo de recordatorio, desde 2015, el gobierno despliega oficialmente cajas negras en los principales operadores de red cuyo objetivo es espiar todas las comunicaciones digitales francesas para, entre otras cosas, preservar los intereses científicos, económicos e industriales de Francia. + +## Desvenjajas +### Coste +Una VPN neutra tiene un coste, ya que el operador que la proporciona debe gestionar un servidor y utilizar el ancho de banda. Los precios de las VPN asociadas a FFDN rondan los 6 euros al mes. + +### Enrutamiento de paquetes + +Cuando se establece una VPN en el servidor, si no se establece una configuración particular, la transferencia de un archivo desde un ordenador de la red local al servidor que utiliza la VPN, pasará por el extremo de la VPN, es decir, por el servidor del proveedor de la VPN. + +Para superar este punto, hay dos soluciones: + + -transformando su servidor en un router y conectando su equipo doméstico a él, este equipo se beneficiará también de la confidencialidad de la VPN. + -utilizar el servidor de YunoHost como resolvedor de DNS cuando estés en casa, para redirigir los nombres de dominio del servidor a la ip local en lugar de la ip pública. Esta operación puede realizarse en cada dispositivo o en el router (si éste lo permite). diff --git a/vpn_advantage_fr.md b/pages/01.administrate/07.specific_use_cases/10.vpn/vpn_advantage.fr.md similarity index 93% rename from vpn_advantage_fr.md rename to pages/01.administrate/07.specific_use_cases/10.vpn/vpn_advantage.fr.md index 26a22708..183b5e9d 100644 --- a/vpn_advantage_fr.md +++ b/pages/01.administrate/07.specific_use_cases/10.vpn/vpn_advantage.fr.md @@ -1,10 +1,15 @@ -# Avantage d’un VPN pour l’auto-hébergement +--- +title: Avantage d'un VPN pour l'auto-hébergement +template: docs +taxonomy: + category: docs +routes: + default: '/vpn_advantage' +--- L'installation d'un serveur chez soi étant une pratique peu courante, la plupart des connexions Internet fournies aux particuliers sont inadaptées à sa mise en pratique. Un VPN respectant la neutralité du net et fournissant une adresse IPv4 fixe et des adresses IPv6 peut permettre de contourner certaines limitations ou certaines difficultés. -<div class="alert alert-warning"> -<b>Attention</b> : tous les fournisseurs VPN existants ne remplissent pas ces conditions, assurez-vous bien que celui que vous choisissez les remplis. -</div> +! <b>Attention</b> : tous les fournisseurs VPN existants ne remplissent pas ces conditions, assurez-vous bien que celui que vous choisissez les remplis. ## Avantages diff --git a/pages/01.administrate/07.specific_use_cases/11.moving_app_folder/moving_app_folder.fr.md b/pages/01.administrate/07.specific_use_cases/11.moving_app_folder/moving_app_folder.fr.md new file mode 100644 index 00000000..6f3f3c32 --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/11.moving_app_folder/moving_app_folder.fr.md @@ -0,0 +1,43 @@ +--- +title: Déplacer un dossier d'application vers un autre espace de stockage +template: docs +taxonomy: + category: docs +routes: + default: '/moving_app_folder' +--- + +Les dossiers d'application se trouvent (*habituellement*) dans `/var/www/$nom_application` + +Lorsqu'un dossier d'application devient trop volumineux il peut être intéressant de le déplacer vers un autre espace de stockage (comme un disque dur externe, une carte sd, etc.) + +Partant du principe que [le stockage externe est déjà monté](/external_storage), voici un guide pour déplacer le dossier de l'application wordpress : + + +#### 1. Déplacer le dossier wordpress et tout son contenu vers le stockage externe + +```shell +mv /var/www/wordpress /media/externalharddrive/ +``` +___ + +#### 2. Créer un lien symbolique + +Le programme qui va chercher des informations dans le dossier /var/www/wordpress sera redirigé vers le stockage externe. + +```shell +ln -s /media/externalharddrive/wordpress /var/www/wordpress +``` +___ + +#### 3. (peut être) bidouiller les permissions + +Après tout ça, il est possible que vous ayez à modifier les permissions de `/media/externalharddrive` pour que `www-data` (ou l'utilisateur de l'app) puisse y accéder. Quelque chose comme : + +```shell +chgrp www-data /media/externalharddrive +chmod g+rx /media/externalharddrive + +``` + +(À préciser par un expert) diff --git a/pages/01.administrate/07.specific_use_cases/11.moving_app_folder/moving_app_folder.md b/pages/01.administrate/07.specific_use_cases/11.moving_app_folder/moving_app_folder.md new file mode 100644 index 00000000..e0802f0e --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/11.moving_app_folder/moving_app_folder.md @@ -0,0 +1,45 @@ +--- +title: Moving an app folder to a different storage +template: docs +taxonomy: + category: docs +routes: + default: '/moving_app_folder' +--- + +Applications folder are (*usually*) located in `/var/www/$appname` + +If an application folder is expected to get bigger because of the amount of data it contains, it might be relevant to move it to another storage (like an external hard drive). + +Here's a summary of how to do this the application wordpress. Here, is is assumed that +[you already mounted the external hard-drive](/external_storage). + +#### 1. Move the entire wordpress folder to an external hard drive + +```shell +mv /var/www/wordpress /media/externalharddrive/ +``` + +#### 2. Create a symbolic link + +So that programs looking for files in /var/www/wordpress will actually take them from the harddrive + +```shell +ln -s /media/externalharddrive/wordpress /var/www/wordpress +``` + +#### 3. Tweak permissions (maybe?) + +After this, note that you may need to tweak the permissions of `/media/externalharddrive` so that `www-data` (or the user corresponding to the app) is able to read through the folder... Something like : + +```shell +chgrp www-data /media/externalharddrive +chmod g+rx /media/externalharddrive + +``` + +(but it depends on your exact setup... Please update this doc page if you figure +out what to do exactly) + +!!! If you want to do it with *NextCloud*, see [this Tutorial](/app_nextcloud). + diff --git a/admin_api_fr.md b/pages/01.administrate/07.specific_use_cases/12.api/admin_api.fr.md similarity index 78% rename from admin_api_fr.md rename to pages/01.administrate/07.specific_use_cases/12.api/admin_api.fr.md index bbd5e0cf..52b21df3 100644 --- a/admin_api_fr.md +++ b/pages/01.administrate/07.specific_use_cases/12.api/admin_api.fr.md @@ -1,12 +1,18 @@ -# Administration depuis l’API ou une application externe +--- +title: Administration depuis l'API ou une application externe +template: docs +taxonomy: + category: docs +routes: + default: '/admin_api' +--- Toutes les actions exécutables en ligne de commande le sont également via une API. L’API est accessible à l’adresse https://votre.serveur/yunohost/api. -Pour le moment, il n'existe pas de documentation des différentes routes ... mais -vous pouvez trouver l'actionmap [ici](https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/actionsmap/yunohost.yml) (en particulier les clefs `api`) +Pour le moment, il n'existe pas de documentation des différentes routes... mais vous pouvez trouver l'actionmap [ici](https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/actionsmap/yunohost.yml) (en particulier les clefs `api`) -## Avec `curl` +## Avec cURL -Il faut d’abord récupérer un cookie de connexion pour ensuite réaliser les actions. Voici un exemple via curl : +Il faut d’abord récupérer un cookie de connexion pour ensuite réaliser les actions. Voici un exemple avec cURL : ```bash # Login (avec mot de passe admin) @@ -22,11 +28,11 @@ curl -k -i -H "Accept: application/json" \ | grep } | python -mjson.tool ``` -# Avec une classe PHP +## Avec une classe PHP Pour simplifier l’administration à distance d’une instance YunoHost dans le cadre d’un projet CHATONS/Librehosters, des classes API ont été développées par des utilisateurs. -Par exemple, cette [classe PHP](https://github.com/scith/yunohost-api-php) vous permettra d’administrer votre instance YunoHost depuis une application PHP (site web, outil de gestion de capacité…). +Par exemple, cette [classe PHP](https://github.com/scith/yunohost-api-php) vous permettra d’administrer votre instance YunoHost depuis une application PHP (site Web, outil de gestion de capacité...). Voici un exemple de code PHP permettant d’ajouter un utilisateur dans votre instance YunoHost : @@ -55,4 +61,3 @@ if ($ynh->login()) { exit; } ``` - diff --git a/admin_api.md b/pages/01.administrate/07.specific_use_cases/12.api/admin_api.md similarity index 80% rename from admin_api.md rename to pages/01.administrate/07.specific_use_cases/12.api/admin_api.md index acf7c322..108deead 100644 --- a/admin_api.md +++ b/pages/01.administrate/07.specific_use_cases/12.api/admin_api.md @@ -1,10 +1,17 @@ -# Administration from the API or an external application +--- +title: Administration from the API or an external application +template: docs +taxonomy: + category: docs +routes: + default: '/admin_api' +--- -All command line actions can also be ran from the web API. The API is available at https://your.server/yunohost/api. For now there's no documentation on the various routes ... but you can get an idea by looking at the actionmap [here](https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/actionsmap/yunohost.yml) (in particular the `api` stuff). +All command line actions can also be ran from the web API. The API is available at https://your.server/yunohost/api. For now there's no documentation on the various routes... but you can get an idea by looking at the actionmap [here](https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/actionsmap/yunohost.yml) (in particular the `api` stuff). -## Using `curl` +## Using cURL -You must first retrieve a login cookie to perform the actions. Here is an example via curl: +You must first retrieve a login cookie to perform the actions. Here is an example with cURL: ```bash # Login (with admin password) diff --git a/pages/01.administrate/07.specific_use_cases/specific_use_cases.fr.md b/pages/01.administrate/07.specific_use_cases/specific_use_cases.fr.md new file mode 100644 index 00000000..e4b84c34 --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/specific_use_cases.fr.md @@ -0,0 +1,10 @@ +--- +title: Cas d'usage spécifiques +template: docs +taxonomy: + category: docs +routes: + default: '/specific_use_cases' +--- + +Dans les pages suivantes, vous trouverez des explications spécifiques à certains cas d'utilisation diff --git a/pages/01.administrate/07.specific_use_cases/specific_use_cases.md b/pages/01.administrate/07.specific_use_cases/specific_use_cases.md new file mode 100644 index 00000000..d610070d --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/specific_use_cases.md @@ -0,0 +1,10 @@ +--- +title: Specific use cases +template: docs +taxonomy: + category: docs +routes: + default: '/specific_use_cases' +--- + +In the following pages you will find tutorials for specific use cases. diff --git a/pages/01.administrate/08.troubleshooting/01.fail2ban/fail2ban.fr.md b/pages/01.administrate/08.troubleshooting/01.fail2ban/fail2ban.fr.md new file mode 100644 index 00000000..2858c20a --- /dev/null +++ b/pages/01.administrate/08.troubleshooting/01.fail2ban/fail2ban.fr.md @@ -0,0 +1,72 @@ +--- +title: Fail2Ban +template: docs +taxonomy: + category: docs +routes: + default: '/fail2ban' +--- + +**Fail2Ban** est un logiciel de prévention des intrusions qui protège les serveurs informatiques contre les attaques de brute-force. Il surveille certains journaux et bannira les adresses IP qui montrent un comportement de brute-forcing. + +En particulier, **Fail2Ban** surveille les tentatives de connexion `SSH`. Après 5 tentatives de connexion échouées sur SSH, Fail2Ban banniera l’adresse IP pendant 10 minutes. Si cette adresse récidive plusieurs fois, elle peut être bannie pendant une semaine. + +## Débannir une adresse IP + +Pour débloquer une addresse IP, vous devez d’abord accéder à votre serveur par un moyen quelconque (par exemple à partir d’une autre adresse IP ou d’une autre connexion internet que celle bannie). + +Ensuite, regardez le **journal de Fail2Ban** pour identifier dans quelle `prison` ou `jail` l’adresse IP a été bannie : + +```bash +sudo tail /var/log/fail2ban.log +2019-01-07 16:24:47 fail2ban.filter [1837]: INFO [sshd] Found 11.22.33.44 +2019-01-07 16:24:49 fail2ban.filter [1837]: INFO [sshd] Found 11.22.33.44 +2019-01-07 16:24:51 fail2ban.filter [1837]: INFO [sshd] Found 11.22.33.44 +2019-01-07 16:24:54 fail2ban.filter [1837]: INFO [sshd] Found 11.22.33.44 +2019-01-07 16:24:57 fail2ban.filter [1837]: INFO [sshd] Found 11.22.33.44 +2019-01-07 16:24:57 fail2ban.actions [1837]: NOTICE [sshd] Ban 11.22.33.44 +2019-01-07 16:24:57 fail2ban.filter [1837]: NOTICE [recidive] Ban 11.22.33.44 +``` + +Ici, l’adresse IP `11.22.33.44` a été bannie dans les jails `sshd` et `recidive`. + +Puis débanissez l’adresse IP avec les commandes suivantes : + +```bash +sudo fail2ban-client set sshd unbanip 11.22.33.44 +sudo fail2ban-client set recidive unbanip 11.22.33.44 +``` + +## Passer une adresse IP en liste blanche / whitelist + +Si vous ne voulez plus qu’une adresse IP « légitime » soit bloquée par **YunoHost**, alors il faut la renseigner dans la liste blanche ou whitelist du fichier de configuration de la `prison`. + +Lors d’une mise à jour du logiciel **Fail2Ban**, le fichier d’origine `/etc/fail2ban/jail.conf` est écrasé. C’est donc dans un nouveau fichier que nous allons stocker les modifications. Elles seront ainsi conservées dans le temps. + +1. Commencez par créer le nouveau fichier de configuration des prisons qui s’appelera `yunohost-whitelist.conf` : + + ```bash + sudo touch /etc/fail2ban/jail.d/yunohost-whitelist.conf + ``` + +2. Éditez ce nouveau fichier avec votre éditeur préféré : + + ```bash + sudo nano /etc/fail2ban/jail.d/yunohost-whitelist.conf + ``` + +3. Coller le contenu suivant dans le fichier et adapter l’adresse IP `XXX.XXX.XXX.XXX` : + + ```bash + [DEFAULT] + + ignoreip = 127.0.0.1/8 XXX.XXX.XXX.XXX #<= l'adresse IP (on peut en mettre plusieurs, séparées par un espace) que vous voulez passer en liste blanche / whitelist + ``` + +4. Sauvegardez le fichier et rechargez la configuration de Fail2Ban : + + ```bash + sudo fail2ban-client reload + ``` + +Félicitations, plus de risques de se bannir de son propre serveur YunoHost ! diff --git a/pages/01.administrate/08.troubleshooting/01.fail2ban/fail2ban.md b/pages/01.administrate/08.troubleshooting/01.fail2ban/fail2ban.md new file mode 100644 index 00000000..74d22c6d --- /dev/null +++ b/pages/01.administrate/08.troubleshooting/01.fail2ban/fail2ban.md @@ -0,0 +1,72 @@ +--- +title: Fail2Ban +template: docs +taxonomy: + category: docs +routes: + default: '/fail2ban' +--- + +**Fail2Ban** is an intrusion prevention software that protects computer servers against brute-force attacks. It monitors certain logs and will ban IP addresses that show brute-force-like behavior. + +In particular, **Fail2Ban** monitors `SSH` connection attempts. After 5 failed SSH connection attempts, Fail2Ban will ban the IP address from connecting via SSH for 10 minutes. If this address fails several times, it might get banned for a week. + +## Unban an IP address + +To unblock an IP address, you must first access your server by some means (for example from another IP address or from another internet connection than the banned one). + +Then, look at the **Fail2Ban’s log** to identify in which `jail` the IP address has been banned: + +```bash +sudo tail /var/log/fail2ban.log +2019-01-07 16:24:47 fail2ban.filter [1837]: INFO [sshd] Found 11.22.33.44 +2019-01-07 16:24:49 fail2ban.filter [1837]: INFO [sshd] Found 11.22.33.44 +2019-01-07 16:24:51 fail2ban.filter [1837]: INFO [sshd] Found 11.22.33.44 +2019-01-07 16:24:54 fail2ban.filter [1837]: INFO [sshd] Found 11.22.33.44 +2019-01-07 16:24:57 fail2ban.filter [1837]: INFO [sshd] Found 11.22.33.44 +2019-01-07 16:24:57 fail2ban.actions [1837]: NOTICE [sshd] Ban 11.22.33.44 +2019-01-07 16:24:57 fail2ban.filter [1837]: NOTICE [recidive] Ban 11.22.33.44 +``` + +Here, the `11.22.33.44` IP address has been banned in the `sshd` and `recidive` jails. + +Then deban the IP address with the following commands: + +```bash +sudo fail2ban-client set sshd unbanip 11.22.33.44 +sudo fail2ban-client set recidive unbanip 11.22.33.44 +``` + +## Whitelist an IP address + +If you don’t want a "legitimate" IP address to be blocked by **YunoHost** anymore, then you have to fill it in the whitelist of the `jail` configuration file. + +When updating the **Fail2Ban** software, the original `/etc/fail2ban/jail.conf` file is overwritten. So it is on a new dedicated file that we will store the changes. They will thus be preserved over time. + +1. Start by creating the new jail configuration file which will be called `yunohost-whitelist.conf`: + + ```bash + sudo touch /etc/fail2ban/jail.d/yunohost-whitelist.conf + ``` + +2. Edit this new file with your favorite editor: + + ```bash + sudo nano /etc/fail2ban/jail.d/yunohost-whitelist.conf + ``` + +3. Paste the following content into the file and adapt the IP address `XXX.XXX.XXX.XXX`: + + ```bash + [DEFAULT] + + ignoreip = 127.0.0.1/8 XXX.XXX.XXX.XXX #<= the IP address (you can put more than one, separated by a space) that you want to whitelist + ``` + +4. Save the file and reload the Fail2Ban configuration: + + ```bash + sudo fail2ban-client reload + ``` + +Congratulations, no more risks of banning yourself from your own YunoHost server! diff --git a/pages/01.administrate/08.troubleshooting/02.admin_password/change_admin_password.fr.md b/pages/01.administrate/08.troubleshooting/02.admin_password/change_admin_password.fr.md new file mode 100644 index 00000000..6a3eef38 --- /dev/null +++ b/pages/01.administrate/08.troubleshooting/02.admin_password/change_admin_password.fr.md @@ -0,0 +1,28 @@ +--- +title: Changer le mot de passe d'administration +template: docs +taxonomy: + category: docs +routes: + default: '/change_admin_password' +--- + +Vous voudrez peut-être changer votre mot de passe d'administrateur pour des raisons de sécurité ou parce que vous l'avez oublié. + +Si vous avez oublié votre mot de passe ou si vous ne pouvez pas vous connecter en utilisant l'utilisateur `admin`, vous +pouvez peut-être encore changer le mot de passe en vous connectant en tant que "root" sur +SSH (à partir de votre réseau local ! ou en utilisant un mode rescure si vous êtes sur un VPS...) + +## Sur l'interface d'administration web + +1. Connectez-vous à l'interface web d'administration. +2. Allez dans la section Outis > Changer le mot de passe d’administration. + + +## En ligne de commande + + +```bash +yunohost tools adminpw +``` + diff --git a/pages/01.administrate/08.troubleshooting/02.admin_password/change_admin_password.md b/pages/01.administrate/08.troubleshooting/02.admin_password/change_admin_password.md new file mode 100644 index 00000000..1abba53a --- /dev/null +++ b/pages/01.administrate/08.troubleshooting/02.admin_password/change_admin_password.md @@ -0,0 +1,28 @@ +--- +title: Changing the administration password +template: docs +taxonomy: + category: docs +routes: + default: '/change_admin_password' +--- + +You may want to change your administrator password for security reason or because you forgot it. + +If you forgot your password or are unable to connect using the `admin` user, you +may still be able to change the password if you're able to login as `root` on +SSH (from your local network! or using a rescue mode if you're on a VPS...) + +## Using the web administration interface + +First, connect to your web administration. + +Then go to Tools > Change administration password. + + +## Using the command line interface + + +```bash +yunohost tools adminpw +``` diff --git a/noaccess_fr.md b/pages/01.administrate/08.troubleshooting/03.noaccess/noaccess.fr.md similarity index 92% rename from noaccess_fr.md rename to pages/01.administrate/08.troubleshooting/03.noaccess/noaccess.fr.md index ec69c1cd..15879610 100644 --- a/noaccess_fr.md +++ b/pages/01.administrate/08.troubleshooting/03.noaccess/noaccess.fr.md @@ -1,13 +1,17 @@ -# Récupérer l'accès à son YunoHost - +--- +title: Récupérer l'accès à son YunoHost +template: docs +taxonomy: + category: docs +routes: + default: '/noaccess' +--- Il existe de nombreuses causes pouvant empêcher totalement ou partiellement d'accéder en administrateur à un serveur YunoHost. Dans de nombreux cas, un des moyens d'accès est inaccessible, mais les autres sont fonctionnels. Cette page va vous aider à diagnostiquer, obtenir un accès et si besoin réparer votre système. Les pannes les plus courantes sont priorisées de haut en bas. Il vous suffit de tester chaque hypothèse. - - ## Vous avez accès au serveur via l'adresse IP, mais pas avec le nom de domaine ? #### Si vous êtes auto-hébergé à la maison : il faut configurer les redirection de ports @@ -32,20 +36,15 @@ Vous pouvez valider que les enregistrements DNS sont corrects en comparant le r - Vous avez une IP dynamique. Dans ce cas, il faut mettre en place un script qui se charge de mettre à jour régulièrement votre IP (ou d'utiliser un nom de domaine en nohost.me, noho.st ou ynh.fr qui inclue un tel mécanisme) - - -## Vous êtes face à une erreur de certificat qui vous empêche d'accéder à la webadmin +## Vous êtes face à une erreur de certificat qui vous empêche d’accéder à la webadmin Si vous venez d'installer votre serveur ou d'ajouter un nouveau domaine, il utilise pour le moment un certificat auto-signé. Dans ce cas, il devrait être possible et légitime d'ajouter *exceptionnellement* une exception de sécurité le temps d'[installer un certificat Let's Encrypt](/certificate) à condition d'être sur une connexion internet sûre (pas avec Tor Browser par exemple). Une erreur de certificat peut également être affichée dans certain cas où vous avez fait une faute de frappe dans la barre d'adresse de votre navigateur. - - ## Vous avez accès en SSH mais pas à la Web admin ou inversement - #### Vous essayez de vous connecter en SSH avec `root` plutôt qu'avec `admin` Par défaut, la connexion en SSH doit s'effectuer avec l'utilisateur `admin`. Il est possible de se connecter à la machine avec l'utilisateur `root` *seulement depuis le réseau local* sur lequel se situe le serveur (ou bien via la console web / VNC pour des VPS). @@ -54,25 +53,25 @@ Lorsque vous exécutez des commandes `yunohost` en tant qu'admin, il faut les pr #### Vous avez été banni temporairement -Votre serveur YunoHost inclut un mécanisme (fail2ban) qui banni automatiquement les IPs qui échouent plusieurs fois à s'authentifier. Dans certains cas, il peut s'agir d'un programme (par exemple un client Nextcloud) qui est configuré avec un ancien mot de passe ou d'un utilisateur qui utilise la même IP que vous. +Votre serveur YunoHost inclut un mécanisme (Fail2Ban) qui banni automatiquement les IPs qui échouent plusieurs fois à s'authentifier. Dans certains cas, il peut s'agir d'un programme (par exemple un client Nextcloud) qui est configuré avec un ancien mot de passe ou d'un utilisateur qui utilise la même IP que vous. Si vous avez été banni en tentant d'accéder à une page web, seul les pages web sont inaccessibles, vous devriez donc pouvoir accéder au serveur en SSH. De même, si vous avez été banni en SSH vous devriez pouvoir accéder à la webadmin. Si vous avez été banni à la fois en SSH et à la webadmin, vous pouvez essayer d'accéder à votre serveur avec une autre IP, par exemple en utilisant la 4G d'un smartphone ou en utilisant Tor Browser. -Voir aussi: [débannir une IP sur Fail2ban](/fail2ban) +Voir aussi : [débannir une IP sur Fail2Ban](/fail2ban) -NB: le bannissement dure en général 10 à 12 minutes. Le bannissement n'est actif qu'en IPv4. +NB : le bannissement dure en général 10 à 12 minutes. Le bannissement n'est actif qu'en IPv4. -#### Le serveur web nginx est cassé +#### Le serveur web NGINX est cassé -Peut-être que le serveur web nginx est en panne. Vous pouvez vérifier cela [en ssh](/ssh) avec `yunohost service status ssh`. Si il est en panne, vérifiez que la configuration ne comporte pas d'erreur avec `nginx -t`. Si la configuration est cassée, ceci est peut-être du à une l'installation ou désinstallation d'une application de mauvaise qualité... Si vous êtes perdu, [demandez de l'aide](/help). +Peut-être que le serveur web NGINX est en panne. Vous pouvez vérifier cela [en ssh](/ssh) avec `yunohost service status ssh`. Si il est en panne, vérifiez que la configuration ne comporte pas d'erreur avec `nginx -t`. Si la configuration est cassée, ceci est peut-être du à une l'installation ou désinstallation d'une application de mauvaise qualité... Si vous êtes perdu, [demandez de l'aide](/help). -Il se peut également que le serveur web (nginx) ou le serveur ssh aient été tués suite à un manque d'espace disque ou de RAM / swap. +Il se peut également que le serveur web (NGINX) ou le serveur ssh aient été tués suite à un manque d'espace disque ou de RAM / swap. - Tentez de relancer le service avec `systemctl restart nginx`. -- Vous pouvez contrôler l'espace disque utilisé avec `df -h`. Si une de vos partitions est remplie à 100%, il faut identifier ce qui prend de la place sur votre système et faire de la place. Il est possible d'installer l'utilitaire `ncdu` avec `apt install ncdu` puis de faire `ncdu /` pour analyser la taille des dossiers de toute l'arborescence. -- Vous pouvez contrôler l'utilisation de la RAM / swap avec `free -h`. En fonction des résultats, il peut être nécessaire d'optimiser votre serveur pour qu'il utilise moins de RAM (suppression d'app lourdes et inutiles, ...), d'ajouter de la RAM ou d'ajouter un fichier de swap. +- Vous pouvez contrôler l'espace disque utilisé avec `df -h`. Si une de vos partitions est remplie à 100%, il faut identifier ce qui prend de la place sur votre système et faire de la place. Il est possible d'installer l'utilitaire `ncdu` avec `apt install ncdu` puis de faire `ncdu /` pour analyser la taille des dossiers de toute l'arborescence. +- Vous pouvez contrôler l'utilisation de la RAM / swap avec `free -h`. En fonction des résultats, il peut être nécessaire d'optimiser votre serveur pour qu'il utilise moins de RAM (suppression d'app lourdes et inutiles...), d'ajouter de la RAM ou d'ajouter un fichier de swap. #### Votre serveur est accessible en IPv6 mais pas en IPv4 ou inversement @@ -85,18 +84,11 @@ Dans ce cas il faut résoudre votre problème de connectivité. Dans certains, cas une mise à jour de votre box a activé l'IPv6, entraînant des problèmes de configuration au niveau de votre nom de domaine. - - - - - ## La webadmin fonctionne, mais certaines applications web me renvoient une erreur 502. Il est fort probablement que le service correspondant à ces applications soit en panne (typiquement pour les applications PHP, il s'agit de php7.0-fpm ou php7.3-fpm). Vous pouvez alors tenter de relancer le service, et si cela ne fonctionne pas, regarder les logs du service correspondant et/ou [demander de l'aide](/help). - - ## Vous avez perdu votre mot de passe administrateur ? (ou bien le mot de passe est refusé) Si vous arrivez à afficher la page web d'administration (forcez le rafraîchissement avec CTRL + F5 pour être sur) et que vous n'arrivez pas à vous connectez, vous avez probablement un mot de passe erroné. @@ -126,7 +118,7 @@ Vous pouvez aussi essayer avec le domaine `yunohost.local` s'il n'y a qu'un seul Il faut voir avec votre fournisseur de VPN pour renouveler le VPN et mettre à jour les paramètre de l'app VPN Client. -TODO: à compléter +TODO : à compléter ## Votre serveur est coincé au démarrage @@ -134,17 +126,14 @@ Dans certains cas, votre serveur peut rester coincé au démarrage. Il peut s'ag Si vous êtes en mode `rescue` avec `grub`, dans ce cas il peut s'agir d'un problème de configuration de `grub` ou d'un disque corrompu. -Dans ce cas il faut accéder au disque avec un autre système (mode `rescue` du fournisseur, live usb, lire la carte SD ou le disque dur avec un autre ordinateur) et essayer de vérifier l'intégrité des partitions avec `smartctl`, `fsck` et `mount`. +Dans ce cas il faut accéder au disque avec un autre système (mode `rescue` du fournisseur, live USB, lire la carte SD ou le disque dur avec un autre ordinateur) et essayer de vérifier l'intégrité des partitions avec `smartctl`, `fsck` et `mount`. Si les disques sont corrompus et difficiles à monter, il faut sauvegarder les données et potentiellement refaire un formatage/réinstaller et/ou changer le disque. Si on arrive à monter le disque, il est possible d'utiliser `systemd-nspawn` pour entrer dans la base de données. Sinon, relancer `grub-update` et `grub-install` en `chroot` ou avec `systemd-nspawn`. - - - -## L'accès en VNC ou via écran ne fonctionne pas +## L’accès en VNC ou via écran ne fonctionne pas Dans ce cas il peut s'agir d'un problème matériel sur votre serveur physique ou d'un problème d'hyperviseur si c'est un VPS. diff --git a/pages/01.administrate/08.troubleshooting/03.noaccess/noaccess.md b/pages/01.administrate/08.troubleshooting/03.noaccess/noaccess.md new file mode 100644 index 00000000..0f352330 --- /dev/null +++ b/pages/01.administrate/08.troubleshooting/03.noaccess/noaccess.md @@ -0,0 +1,131 @@ +--- +title: Get access back into YunoHost +template: docs +taxonomy: + category: docs +routes: + default: '/noaccess' +--- + +There are several reasons that could lead to one administrator's access being partially or completely blocked off their YunoHost server. In numerous cases, one of the access methods is blocked, but others are not. + +This page will help you diagnose the issue, get back access, and if needed repair your system. Most common causes are listed first, so follow the tutorial from top to bottom. + +## You have access to the server with its local IP address, but not its domain name. + +#### If you are self-hosted at home: fix ports forwarding + +Check that you are getting access to the server by using its public IP (you can find at [https://ip.yunohost.org](https://ip.yunohost.org). If this does not work: + - Make sure you have [set up forwarding](/isp_box_config) + - Some ISP routers do not support *hairpinning*, which prevents you from reaching your server by its domain name from within your local network. If so, you can use a cellular connection, or tweak your `hosts` file on your computer to make it bind your domain name to the local IP address instead of the public one. + +#### Configure DNS records + +! This is not a problem if you are using a domain from `nohost.me`, `noho.st` or `ynh.fr`) + +You have to configure your [DNS records](/dns_config) (at least `A` records, and `AAAA` if you have an IPv6 connection). + +You can check that the DNS records are correct by comparing the results given by [this service](https://www.whatsmydns.net/) with the [IP given by our service](https://ip.yunohost.org). + +#### Other probable causes + +- You domain `noho.st`, `nohost.me`, or `ynh.fr` is unreachable following a failure on YunoHost's infrastructure. Check the [forum](https://forum.yunohost.org/) for announcements or people posting about the same issue. +- Your domain name may be expired. Check that on your registrar's client panel, or by using the command `whois yourdomain.tld`. +- You have a dynamic IP address. In that case, you need to set up a script or a client that takes care of regularly update it. Refer to the page on [DNS with a dynamic IP](/dns_dynamicip) to see how. You can also use a domain `nohost.me`, `noho.st` or `ynh.fr` that includes this features. + +## You are getting a certificate error that prevents you from reaching the webadmin + +- A certificate error may be displayed if you have made a typo in the address bar of your browser. + +- If you have just installed your server, or just installed a new domain, it uses a self-signed certificate. In that case, it is possible and understandable to add a *temporary* security exception so that you can [install a Let's Encrypt certificate](/certificate), provided you have a secure Internet connection. + +## You have access via SSH but not via the webadmin, or inversely + +#### You are trying to log in with SSH as `root` instead of `admin` user. + +By default, SSH connection has to be made as `admin`. It possible to log into the server as `root` *only from the local network of the server*. If your server is a VPS, the web console or VNC provided by VPS providers may work. + +If you are running `yunohost` commands in the CLI as `admin`, you have to call them with `sudo` before (for example `sudo yunohost user list`). You can also become `root` by running `sudo su`. + +#### You have been temporarily banned + +Your YunoHost server includes a service, Fail2ban, which automatically bans IPs that fail several times in a row to log in. In some cases it can be software (e.g. Nextcloud client) that are confifured with an old password, or a user who has the same IP as you have. + +If you have been banned while trying to access a web page, and only web pages are unreachable, you may have access to your server via SSH. Similarly, if you have been banned from SSH, webadmin access may work. + +If you have been banned from both SSH and webadmin, you can try to reach your server through another IP address. For example through the cellular network of your phone, a VPN, Tor, or another proxy. + +See also : [unban an IP on Fail2Ban](/fail2ban) + +!!!! Ban are usually 10 to 12-minute-long, and on IPv4 only. + +#### NGINX web server is broken + +Maybe the NGINX web server is out of order. You can check that [trough SSH](/ssh) with the command `yunohost service status ssh`. If it is failinf, check that its configuration is correct by running `nginx -t`. If it is indeed broken, it may be due to the installation or removal of a low-quality app... If you need support, [ask for it](/help). + +The NGINX or SSH servers may have been killed due to a lack of storage space, RAM, or swap. + +- Try restarting the service with `systemctl restart nginx`. +- You can check used storage with `df -h`. If one of your partitions is full, you need to identify what fills it and make rooù. You can use `ncdu` command (install it with `apt install ncdu` to browse from the root directory: `ncdu /` +- You can check RAM and swap usage with `free -h`. Depending on the result, it may be necessary to optimize your server to use less RAM (removal of heavy or unused apps...), add more RAM or add a swap file. + +#### Your server is reachable by IPv6, but not IPv4, or inversely + +You can check that by `ping`ing it: + +```bash +ping -4 yourdomain.tld # or its IPv4 +ping -6 yourdomain.tld # or its IPv6 +``` + +If one of the two is working, use it to connect by SSH or the webadmin. + +If none are working, you need to resolv your connection issue. In some cases, an update of your router may have enabled IPv6 and DNS configuration may be disrupted. + +## Webadmin is working, but some web apps are returning 502 errors. + +It is highly probable that the underlying service for these apps is failing (e.g. PHP apps requiring `php7.0-fpm` or `php7.3-fpm`). You can then try to restart the services, and/or ask for [help](/help) + +## You have lost your admin password, or the password is seemingly wrong + +If you can reach the webadmin login page (force reload with `CTRL + F5` to be sure), and you cannot log in, your password is probably wrong. + +If yoy are sure of your passord, it may be due to the `slapd` service failing. If that's the case, log into the server by SSH as `root`. +- If your server is at home, you most likely have access to the local network. From this network, you can follow the [SSH instructions](/ssh)`. +- If your server is a VPS, your provider may offer a web console. + +Once logged in, you have to check the state of the service with `yunohost service status slapd` and/or reset your admin password with `yunohost tools adminpw`. + +If this is still failing, on a VPS you may be able to reboot in rescue mode. Do not hesitate to ask for [help](/help) + +!!! To be completed. + +## Your VPN expired or does not connect any more + +If you have a VPN with fixed IP, maybe it has expired, or the provider's infrastructure is failing. + +In that case, contact your VPN provider to renew it and update the parameters of the VPN Client app. + +Meanwhile, try reaching your server if it is at home, by: +- its local IP, retrievable from your router configuration panel or `sudo arp-scan --local` +- reaching it at `yunohost.local`, if it is at home and that you have only one YunoHost server in your network. + +!!! To be completed. + +## Your server does not boot + +In some cases your server may be stuck at boot. It may come from a new, buggy, kernel. Try changing to another kernel on the boot screen (via VNC for VPS). + +If you are in "rescue" mode with `grub`, it may be due a misconfiguration of `grub`, or a corrupted drive. + +In that case, access the storage drive from another system (your provider's "rescue" mode, live USB drive, read the SD or drive on another computer) and try to check partitions integrity with `smartctl`, `fsck`, and `mount`. + +If disks are corrupted or hard to miunt, you have to save your data and maybe reformat, reinstall, and/or change the drive. If you succeed in mounting the drive, you can use `systemd-nspawn` to access its database. + +Otherwise, run `grub-update`, `grub-install` again with `chroot` or with `systemd-nspawn`. + +## VNC or screen access does not work + +It may be due hardware issue on your server, or with the hypervisor if it is on a VPS. + +If you are renting your server, contact the support of your provider. Otherwise, try fixing your machine by replacing failing components. diff --git a/pages/01.administrate/08.troubleshooting/04.ipv6/ipv6.fr.md b/pages/01.administrate/08.troubleshooting/04.ipv6/ipv6.fr.md new file mode 100644 index 00000000..40d5c39e --- /dev/null +++ b/pages/01.administrate/08.troubleshooting/04.ipv6/ipv6.fr.md @@ -0,0 +1,52 @@ +--- +title: Configuration de l'IPv6 +template: docs +taxonomy: + category: docs +routes: + default: '/ipv6' +--- + +L'IPv6 peut fonctionner directement dans certains cas. Mais dans d'autres, ou chez certains hébergeurs spécifiques, vous devez activer l'IPv6 manuellement. + +## Avec un VPS chez OVH + +OVH donne une adresse IPv4 et une IPv6 pour ses VPS, mais par défaut, seule l'IPv4 fonctionne. +La documentation d'OVH à ce sujet est ici : https://docs.ovh.com/fr/vps/configurer-ipv6/ + +### Configurer le serveur DNS + +Ici : https://yunohost.org/#/dns_subdomains + +### Configurer le serveur + +Sur le panneau de gestion d'OVH, vous aller récupérer 3 informations : +- l'adresse IPv6 du serveur +- l'adresse passerelle IPv6 +- le préfixe IPv6. Les offres VPS SSD d'OVH ne fournissent qu'**une** seule adresse IPV6, le préfixe est donc `/128` + +Sur votre VPS, vous aller créer une sauvegarde de votre fichier de configuration des interfaces réseau dans votre répertoire home avec la commande : `cp /etc/network/interfaces ~/interfaces`. + +Ensuite, vous pouvez modifier le fichier de configuration `/etc/network/interfaces`. + +! Dans cet exemple, nous considérons que votre interface réseau est `eth0`. Si elle est différente (vérifiez avec `ip a`) vous devez adapter l'exemple pour correspondre à votre situation. + +```plaintext +iface eth0 inet6 static +address <votre adresse IPv6> +netmask <votre préfixe IPv6> +post-up /sbin/ip -6 route add <la passerelle IPv6> dev eth0 +post-up /sbin/ip -6 route add default via <la passerelle IPv6> dev eth0 +pre-down /sbin/ip -6 route del default via <la passerelle IPv6> dev eth0 +pre-down /sbin/ip -6 route del <la passerelle IPv6> dev eth0 +``` + +Maintenant, enregistrez le fichier et redémarrez les services réseau avec : `service networking restart`. (TODO : ideally we should find a way to validate the content of the configuration, otherwise it could fuck up the network stack and get disconnected from the VPS ?) + +Vérifiez votre configuration avec les commandes : +- `ip a` pour afficher les adresses IP des interfaces +- `hostname -I` pour afficher les adresses IP du système +- essayez de faire un test de `ping` sur un serveur IPv6 (vous pouvez utiliser `ping6 ipv6.yunohost.org`) +- essayez de faire un test de `ping` sur votre server depuis votre PC (cela exige que votre PC puisse utiliser l'IPv6) + +Et voilà ! diff --git a/pages/01.administrate/08.troubleshooting/04.ipv6/ipv6.md b/pages/01.administrate/08.troubleshooting/04.ipv6/ipv6.md new file mode 100644 index 00000000..0748792d --- /dev/null +++ b/pages/01.administrate/08.troubleshooting/04.ipv6/ipv6.md @@ -0,0 +1,51 @@ +--- +title: Setting up IPv6 +template: docs +taxonomy: + category: docs +routes: + default: '/ipv6' +--- + +IPv6 may work out of the box in many cases. But in some cases or some specific provider, you may need to tweak things manually to enable IPv6. + +## With a VPS from OVH + +OVH give one IPv4 address and one IPv6 address for VPS but by default, only IPv4 is OK. +The OVH's documentation is here : https://docs.ovh.com/gb/en/vps/configuring-ipv6/ + +### Configure the DNS server + +Here : https://yunohost.org/#/dns_subdomains + +### Configure the server + +On the OVH panel, you will copy 3 element : +- the IPv6 address +- the IPv6 gateway address +- the IPv6 prefix. On OVH's VPS SSD, prefixes are `/128` because you have only *one* IPv6 address. + +On your VPS, create a backup of the network configuration with : `cp /etc/network/interfaces ~/interfaces` in home directory. +Then, you can edit the configuration file (`/etc/network/interfaces`) with the following. It is assumed that : + +! In this example, it is assumed that your network interface is `eth0`. If it's different (check with `ip a`) you need to adapt the example below. + +```plaintext +iface eth0 inet6 static +address <your IPv6 address> +netmask <your IPv6 prefix> +post-up /sbin/ip -6 route add <the IPv6 gateway> dev eth0 +post-up /sbin/ip -6 route add default via <the IPv6 gateway> dev eth0 +pre-down /sbin/ip -6 route del default via <the IPv6 gateway> dev eth0 +pre-down /sbin/ip -6 route del <the IPv6 gateway> dev eth0 +``` + +Now, save the file and restart the network service with : `service networking restart`. (TODO : ideally we should find a way to validate the content of the configuration, otherwise it could fuck up the network stack and get disconnected from the VPS ?) + +Check your configuration with these commands : +- `ip a` to display network interfaces and addresses +- `hostname -I` to display the system IP addresses +- try to ping an IPv6 server (for example you can use `ping6 ip6.yunohost.org`) +- try to ping your server from your PC (assuming your PC has IPv6 enabled) + +If it's ok, it's ok ! diff --git a/blacklist_forms_fr.md b/pages/01.administrate/08.troubleshooting/05.unblacklisting/blacklist_forms.fr.md similarity index 83% rename from blacklist_forms_fr.md rename to pages/01.administrate/08.troubleshooting/05.unblacklisting/blacklist_forms.fr.md index 2f71a42f..d45f637e 100644 --- a/blacklist_forms_fr.md +++ b/pages/01.administrate/08.troubleshooting/05.unblacklisting/blacklist_forms.fr.md @@ -1,8 +1,17 @@ -# Formulaires de retrait de liste noire +--- +title: Formulaires de retrait de liste noire +template: docs +taxonomy: + category: docs +routes: + default: '/blacklist_forms' +--- + Il peut arriver que votre serveur (son adresse IP) soit ajouté à la liste noire de certains fournisseurs d’adresse de courrier électronique ou de services anti-spam. Les courriels envoyés à ces adresses sont alors filtrés et n’arrivent pas à destination. + #### Testez votre serveur Pour tester si votre serveur est sur une liste noire, vous pouvez utiliser les outils suivants : -* [https://www.mail-tester.com](Test en envoyant un mail) +* [Test en envoyant un email](https://www.mail-tester.com) * [Test à partir de l’adresse IP](http://whatismyipaddress.com/blacklist-check) Le cas échéant, voici certains des formulaires vous permettant de retirer votre adresse IP de ces listes : diff --git a/blacklist_forms.md b/pages/01.administrate/08.troubleshooting/05.unblacklisting/blacklist_forms.md similarity index 85% rename from blacklist_forms.md rename to pages/01.administrate/08.troubleshooting/05.unblacklisting/blacklist_forms.md index 2fa654c9..168ec91e 100644 --- a/blacklist_forms.md +++ b/pages/01.administrate/08.troubleshooting/05.unblacklisting/blacklist_forms.md @@ -1,4 +1,11 @@ -#Blacklist forms +--- +title: Unblacklisting forms +template: docs +taxonomy: + category: docs +routes: + default: '/blacklist_forms' +--- It could happen sometimes that your IP is blacklisted by some email provider, or anti-spam services. diff --git a/jessie_stretch_migration_fr.md b/pages/01.administrate/08.troubleshooting/06.jessie_stretch/jessie_stretch_migration.fr.md similarity index 93% rename from jessie_stretch_migration_fr.md rename to pages/01.administrate/08.troubleshooting/06.jessie_stretch/jessie_stretch_migration.fr.md index 548b6235..9b77a26d 100644 --- a/jessie_stretch_migration_fr.md +++ b/pages/01.administrate/08.troubleshooting/06.jessie_stretch/jessie_stretch_migration.fr.md @@ -1,4 +1,11 @@ -# Migrer vers Stretch +--- +title: Migrer vers Stretch +template: docs +taxonomy: + category: docs +routes: + default: '/jessie_stretch_migration' +--- L'objectif cette page est de décrire le processus de migration d'une instance en YunoHost 2.7.x (tournant sous Debian Jessie/8.x) vers YunoHost 3.0 (tournant sous Debian Stretch/9.x) @@ -34,7 +41,7 @@ puis lisez attentivement l'avertissement et les instructions. En fonction de votre matériel et des paquets installés, la migration peut prendre jusqu'à quelques heures. -Notez qu'il est attendu de voir certaines erreurs (en particulier à propos de fail2ban) pendant la migration - ne vous en inquiétez pas trop. +Notez qu'il est attendu de voir certaines erreurs (en particulier à propos de Fail2Ban) pendant la migration - ne vous en inquiétez pas trop. #### Si la migration a crashé / échoué à un moment. @@ -46,9 +53,9 @@ Si la migration a échoué a un moment donné, la première chose à faire est d Pour cela, allez dans Outils > Diagnostique. (Vous pouvez aussi regarder ce qui est affiché dans le pied de page). En ligne de commande, vous pouvez aussi utiliser `lsb_release -a` et `yunohost --version`. -#### Vérifiez que fail2ban et le pare-feu sont actifs. +#### Vérifiez que Fail2Ban et le pare-feu sont actifs. -Vous devriez voir que fail2ban et le firewall sont actifs. Depuis la webadmin, dans Services (chercher 'fail2ban' et 'yunohost-firewall'). Depuis la ligne de commande, faites `yunohost service status fail2ban yunohost-firewall` : les deux devraient être en `active: active`. +Vous devriez voir que Fail2Ban et le firewall sont actifs. Depuis la webadmin, dans Services (chercher 'fail2ban' et 'yunohost-firewall'). Depuis la ligne de commande, faites `yunohost service status fail2ban yunohost-firewall` : les deux devraient être en `active: active`. #### Vérifiez que les applications fonctionnent diff --git a/jessie_stretch_migration.md b/pages/01.administrate/08.troubleshooting/06.jessie_stretch/jessie_stretch_migration.md similarity index 70% rename from jessie_stretch_migration.md rename to pages/01.administrate/08.troubleshooting/06.jessie_stretch/jessie_stretch_migration.md index c7b2c10d..17ff656b 100644 --- a/jessie_stretch_migration.md +++ b/pages/01.administrate/08.troubleshooting/06.jessie_stretch/jessie_stretch_migration.md @@ -1,4 +1,11 @@ -# Migrating an existing instance to Stretch +--- +title: Migrating an existing instance to Stretch +template: docs +taxonomy: + category: docs +routes: + default: '/jessie_stretch_migration' +--- This page is dedicated to help you migrating an instance from YunoHost 2.7.x (running on Debian Jessie/8.x) to YunoHost 3.0 (running on Debian Stretch/9.x). @@ -10,9 +17,9 @@ This page is dedicated to help you migrating an instance from YunoHost 2.7.x (ru - Yet, please don't rush into thinking that you should rush into reinstalling your system. A common "mistake" is to be willing to reinstall a server at the slightest complication. But turns out that reinstalling a system can also be complicated. Instead, if you happen to run into issues, we encourage you to try to investigate and understand what's going on and reach for help instead of just throwing away everything because it looks simpler. -- About external email clients : if you or your users are using external email clients (typically Thunderbird, K9Mail, ...) be aware that the SMTP port changed from 465 (with SSL/TLS) to 587 (STARTTLS). See [this page of doc dedicated to email clients](/email_configure_client). Webmail configurations such as Rainloop should also be updated using the corresponding administration interface. +- About external email clients: if you or your users are using external email clients (typically Thunderbird, K9Mail...) be aware that the SMTP port changed from 465 (with SSL/TLS) to 587 (STARTTLS). See [this page of doc dedicated to email clients](/email_configure_client). Webmail configurations such as Rainloop should also be updated using the corresponding administration interface. -- For advanced users : if you have some custom scripts for backups, be aware that we made some backward-incompatible changes in the backup command line. The deprecated `--hooks`/`--ignore-hooks` options were removed, as well as the options `--ignore-apps`, `--ignore-system`. To make things more intuitive, `yunohost backup create --apps wordpress` (for example) will only backup wordpress, i.e. you don't have to add `--ignore-system` to not backup the system. +- For advanced users: if you have some custom scripts for backups, be aware that we made some backward-incompatible changes in the backup command line. The deprecated `--hooks`/`--ignore-hooks` options were removed, as well as the options `--ignore-apps`, `--ignore-system`. To make things more intuitive, `yunohost backup create --apps wordpress` (for example) will only backup wordpress, i.e. you don't have to add `--ignore-system` to not backup the system. ## Migration procedure @@ -22,7 +29,7 @@ After upgrading to 2.7.14, go to Tools > Migrations to access the migrations int #### From the command line -After upgrading to 2.7.14, run : +After upgrading to 2.7.14, run: ```bash sudo yunohost tools migrations migrate @@ -34,7 +41,7 @@ then read carefully and accept the disclaimer. Depending on your hardware and packages installed, the migration might take up to a few hours. -Note that it is expected to see some errors (in particular about fail2ban) during the migration, so don't worry too much about them. +Note that it is expected to see some errors (in particular about Fail2Ban) during the migration, so don't worry too much about them. #### If the migration crashed / failed at some point. @@ -46,9 +53,9 @@ If the migration failed at some point, it should be possible to relaunch it. If You should be able to see this from the webadmin Tools > Diagnosis, and also in the footer of the page. On the command line, you can use `lsb_release -a` and `yunohost --version`. -#### Check that fail2ban and the firewall are active +#### Check that Fail2Ban and the firewall are active -You should be able to see that fail2ban and the firewall are active. From the webadmin in Services (look for 'fail2ban' and 'yunohost-firewall'). From the command line, run `yunohost service status fail2ban yunohost-firewall`. They should both have `active: active`. +You should be able to see that Fail2Ban and the firewall are active. From the webadmin in Services (look for 'fail2ban' and 'yunohost-firewall'). From the command line, run `yunohost service status fail2ban yunohost-firewall`. They should both have `active: active`. #### Check that your applications are working diff --git a/pages/01.administrate/08.troubleshooting/07.stretch_buster/stretch_buster_migration.fr.md b/pages/01.administrate/08.troubleshooting/07.stretch_buster/stretch_buster_migration.fr.md new file mode 100644 index 00000000..02ec15b9 --- /dev/null +++ b/pages/01.administrate/08.troubleshooting/07.stretch_buster/stretch_buster_migration.fr.md @@ -0,0 +1,72 @@ +--- +title: Migrer vers Buster +template: docs +taxonomy: + category: docs +routes: + default: '/stretch_buster_migration' +--- + +L'objectif cette page est de décrire le processus de migration d'une instance en YunoHost 3.8.x (tournant sous Debian Stretch/9.x) vers YunoHost 4.x (tournant sous Debian Buster/10.x) + +## Notes importantes + +- L'équipe de YunoHost a fait de son mieux pour que cette migration se passe autant en douceur que possible. Elle a été testée durant plusieurs mois et sur plusieurs types d'installations. + +- Néanmoins, vous devez être conscient qu'il s'agit d'une opération délicate. L'administration système est un sujet compliqué et couvrir tous les cas particuliers n'est pas chose aisée. En conséquence, si vous hébergez des données et des systèmes critiques, [faites des sauvegardes](/backup). Et dans tous les cas, soyez patients et attentifs durant la migration. + +- Ne vous précipitez pas à vouloir faire une réinstallation de votre système en pensant que cela serait "plus simple" (sigh). (Une attitude qui revient régulièrement est de vouloir réinstaller son système à la moindre complication...). À la place, si vous rencontrez des problèmes, nous vous encourageons à investiguer, chercher à comprendre et [trouver de l'aide sur le chat ou le forum](/help). + +## Procédure de migration + +#### Depuis la webadmin + +Après avoir mis à jour vers la version en 3.8.5.x, allez dans Outils > Migrations pour accéder à l'interface de migration. Il vous faudra ensuite lire l'avertissement attentivement et l'accepter pour lancer la migration. + +#### Depuis la ligne de commande + +Après avoir mis à jour vers la version 3.8.5.x, lancez : + +```bash +sudo yunohost tools migrations migrate +``` + +puis lisez attentivement l'avertissement et les instructions. + +## Pendant la migration + +En fonction de votre matériel et des paquets installés, la migration peut prendre jusqu'à une ou deux heures. + +Les logs seront affichés dans la barre de message en haut (vous pouvez approcher la souris dessus pour voir l'historique en entier). Ils seront également consultable après coup (comme les autres opérations) dans Outils > Journaux. + +Notez que même si vous fermez la page d'admin, la migration continuera (par contre l'interface d'admin sera partiellement indisponible). + +#### Si la migration a crashé / échoué à un moment. + +Si la migration a échoué a un moment donné, la première chose à faire est de tenter de la relancer. Si cela ne fonctionne toujours pas, il vous faut [trouver de l'aide](/help) (prière de fournir le/les messages correspondants ou tout élément qui vous fait penser que ça n'a pas marché). + +## Choses à vérifier après la migration + +#### Vérifiez que vous êtes véritablement sous Debian Buster / YunoHost 4.x + +Pour cela, vous pouvez aller dans la partie Diagnostic (section Système de base). (Vous pouvez aussi regarder ce qui est affiché à droite dans le pied de page de la webadmin). En ligne de commande, vous pouvez aussi utiliser `lsb_release -a` et `yunohost --version`. + +#### Vérifiez que le diagnostic ne rapporte pas de problème particulier + +Également dans la section Diagnostic de la webadmin, vérifiez qu'il n'y a pas de problème apparu suite à la migration (par exemple un service qui ne tournerais plus...) + +#### Vérifiez que les applications fonctionnent + +Vérifiez que vos applications installées fonctionnent... Si elles ne fonctionnent pas, il est recommandé de tenter de les mettre à jour. (ou bien de manière générale, il est recommandé de les mettre à jour même si elles fonctionnent !). + +## Soucis (mineurs) connus après la migration + +- Quelques fichiers de configurations (`/etc/nsswitch.conf` et `/etc/nslcd.conf`) apparaîtrons comme manuellement modifiés. Vous pouvez appliquer la regen-conf en toute sécurité pour régler le problème avec la commande: + +```bash +yunohost tools regen-conf nsswitch nslcd --force +``` + +(nous allons essayer de corriger ceci automatiquement) + +- Il se peut que la migration postgresql (censée s'effectuer automatiquement après la migration à Buster) ne fonctionne pas correctement... Certains utilisateurs ont rapporté que relancer la migration suffisait à résoudre le problème. (Nous allons voir pour comprendre et corriger ce soucis) diff --git a/pages/01.administrate/08.troubleshooting/07.stretch_buster/stretch_buster_migration.md b/pages/01.administrate/08.troubleshooting/07.stretch_buster/stretch_buster_migration.md new file mode 100644 index 00000000..b4a28ea3 --- /dev/null +++ b/pages/01.administrate/08.troubleshooting/07.stretch_buster/stretch_buster_migration.md @@ -0,0 +1,72 @@ +--- +title: Migrating an existing instance to Buster +template: docs +taxonomy: + category: docs +routes: + default: '/stretch_buster_migration' +--- + +This page is dedicated to help you migrating an instance from YunoHost 3.8.x (running on Debian Stretch/9.x) to YunoHost 4.x (running on Debian Buster/10.x). + +## Important notes + +- The YunoHost team did its best to make sure that the migration is as smooth as possible and was tested over the course of several months in several cases. + +- With that said, please be aware that this is a delicate operation. System administration is a complicated topic and covering every particular cases is quite hard. Therefore, if you host critical data and services, please [make backups](/backup). And in any case, be patient and attentive during the migration. + +- Please don't rush into thinking that you should need to reinstall your system from scratch thinking it would be "simpler" (sigh). (A common attitude is to be willing to reinstall a server at the slightest complication...) Instead, if you happen to run into issues, we encourage you to try to investigate and understand what's going on and [reach for help on the chat and the forum](/help). + +## Migration procedure + +#### From the webadmin + +After upgrading to 3.8.5.x, go to Tools > Migrations to access the migrations interface. You will have to read carefully and accept the disclaimer then launch the migration. + +#### From the command line + +After upgrading to 3.8.5.x, run : + +```bash +sudo yunohost tools migrations migrate +``` + +then read carefully and accept the disclaimer. + +## During the migration + +Depending on your hardware and packages installed, the migration might take up to a few hours. + +The logs will be shown in the message bar (you can hover it to see the whole history). They will also be available after the migration (like any other operations) in Tools > Logs. + +Note that even if you close the webadmin page for some reason, the migration will continue in the background (but the webadmin will be partially unavailable). + +#### If the migration crashed / failed at some point. + +If the migration failed at some point, it should be possible to relaunch it. If it still doesn't work, you can try to [get help](/help) (please provide the corresponding messages or whatever makes you tell that it's not working). + +## What to do after the upgrade + +#### Check that you actually are on Debian Buster and YunoHost 4.x + +For this, go in Diagnosis (category Base system) or look at the footer of the webadmin. In the command line, you can use `lsb_release -a` and `yunohost --version`. + +#### Check that no issue appeared in the diagnosis + +Also in the Diagnosis in the webadmin, make sure that no specific issue appeared after running the migration (for example a service that crashed for some reason). + +#### Check that your applications are working + +Test that your applications are working. If they aren't, you should try to upgrade them (it is also a good idea to upgrade them even if they are working anyway). + +## Current known (minor) issues after the migration + +- Some file (`/etc/nsswitch.conf` and `/etc/nslcd.conf`) will appear as manually modified after the migration. You can safely apply the regen-conf with: + +```bash +yunohost tools regen-conf nsswitch nslcd --force +``` + +(we will try to do this automatically somehow) + +- Sometimes the postgresql migration (that is supposed to happen automatically after the buster migration is ran) fails to run properly... Some users reported that re-launching manually the postgresql migration fixed the issue (we will try to understand and fix this somehow) diff --git a/pages/01.administrate/08.troubleshooting/troubleshooting.fr.md b/pages/01.administrate/08.troubleshooting/troubleshooting.fr.md new file mode 100644 index 00000000..a6f1e415 --- /dev/null +++ b/pages/01.administrate/08.troubleshooting/troubleshooting.fr.md @@ -0,0 +1,26 @@ +--- +title: Dépannage +template: docs +taxonomy: + category: docs +routes: + default: '/troubleshooting' +--- + +Voici quelques conseils généraux à suivre lorsque vous rencontrez des problèmes avec votre serveur. + +## 0. Ne paniquez pas. + +Restez calme. La plupart des problèmes sont moins grave que ce que les débutants pensent. Pour l'amour de Dieu <small>(ou de votre déité, animal, nourriture préférée)</small>, ne sautez pas à pieds joint dans la "spirate de réinstallation" en pensant que réinstaller à partir de zéro va magiquement résoudre vos problèmes. Réinstaller est une opération lourde et n'est pas une bonne stratégie sur le long-terme pour résoudre les problèmes. Vous finirez par vous lasser et n'apprendrez rien. + +## 1. Regardez sur le forum ou bugtrackers si quelqu'un a eu un problème similaire. + +Cherchez dans [le forum](https://forum.yunohost.org) des fils de discussions qui discutent de choses similaire aux problème que vous rencontrez. Si vous avez un soucis lié à une application en particulier, vous pouvez également tenter de chercher un ticket similaire sur le bugtracker de l'application, par exemple [ici se trouve le bugtracker de l'app wordpress](https://github.com/YunoHost-Apps/wordpress_ynh/issues). + +## 2. Demandez de l'aide + +Soit sur [le forum](https://forum.yunohost.org) ou bien le chat : c.f. [cette page](/help) + +!!! POUR L'AMOUR DE DIEU, PRIÈRE DE fournir du contexte ! Les bénévoles ne peuvent PAS vous aider si vous ne prenez pas *cinq* petites minutes pour décrire votre contexte : quel type de hardware, quelle version de Yunohost, qu'est-ce que vous essayez de faire, ce qui s'est passé, et **les journaux (logs) correspondants**. + + diff --git a/pages/01.administrate/08.troubleshooting/troubleshooting.md b/pages/01.administrate/08.troubleshooting/troubleshooting.md new file mode 100644 index 00000000..8cf90dbc --- /dev/null +++ b/pages/01.administrate/08.troubleshooting/troubleshooting.md @@ -0,0 +1,26 @@ +--- +title: Troubleshooting +template: docs +taxonomy: + category: docs +routes: + default: '/troubleshooting' +--- + +Here are some general advices when encountering issues with your server. + +## 0. Don't panic. + +Stay calm. Most issues are less worse than newcomers usually think. For the love of God <small>(or your favourite deity / animal / food)</small>, please don't jump into the "reinstallation spiral" thinking reinstalling your serve from scratch will magically fix stuff. Reinstalling is a heavy operation and is not a good long-term strategy for fixing problems. You will get tired and won't learn anything. + +## 1. Look for similar issues on the forum or bugtrackers. + +Search [the forum](https://forum.yunohost.org) for topics similar to the issue you're encountering. If you have issues with a specific app, you may also want to check the corresponding bugtracker of the app, for example [here is the bugtracker for the Wordpress app](https://github.com/YunoHost-Apps/wordpress_ynh/issues). + +## 2. Ask for help + +Either on [the forum](https://forum.yunohost.org) or the chat : c.f. [this page](/help) + +!!! FOR THE LOVE OF GOD, PLEASE provide basic context ! Volunteers can NOT help you if you do not take *five* minutes to describe your context : which kind of hardware, which Yunohost version, what you are trying to do, what you tried, what happened and **the corresponding logs**. + + diff --git a/pages/01.administrate/admindoc.de.md b/pages/01.administrate/admindoc.de.md new file mode 100644 index 00000000..aa2fcb86 --- /dev/null +++ b/pages/01.administrate/admindoc.de.md @@ -0,0 +1,12 @@ +--- +title: Administratorhandbuch +template: chapter +taxonomy: + category: docs +routes: + default: '/admindoc' +--- + +### Administrieren + +# Entdecke das Selbsthosten und lerne, wie YunoHost installiert und benutzt wird diff --git a/pages/01.administrate/admindoc.fr.md b/pages/01.administrate/admindoc.fr.md new file mode 100644 index 00000000..bedfb7c6 --- /dev/null +++ b/pages/01.administrate/admindoc.fr.md @@ -0,0 +1,12 @@ +--- +title: Guide d'administration +template: chapter +taxonomy: + category: docs +routes: + default: '/admindoc' +--- + +### Administrer + +# Découvrez l'auto-hébergement, comment installer et utiliser YunoHost diff --git a/pages/01.administrate/chapter.md b/pages/01.administrate/chapter.md new file mode 100644 index 00000000..ba508167 --- /dev/null +++ b/pages/01.administrate/chapter.md @@ -0,0 +1,12 @@ +--- +title: Admin guide +template: chapter +taxonomy: + category: docs +routes: + default: /admindoc +--- + +### Administrate + +# Discover self-hosting, how to install and use YunoHost diff --git a/pages/02.applications/01.catalog/apps.de.md b/pages/02.applications/01.catalog/apps.de.md new file mode 100644 index 00000000..d21a53d6 --- /dev/null +++ b/pages/02.applications/01.catalog/apps.de.md @@ -0,0 +1,134 @@ +--- +title: Anwendungskatalog +template: docs +taxonomy: + category: docs +routes: + default: '/apps' +twig_first: true +process: + twig: true +--- + +<div class="javascriptDisclaimer"> +Für diese Seite muss JavaScript aktiviert sein, damit sie korrekt angezeigt werden kann :s. +</div> + +<div class="input-group"> + <span id="filter-app-icon" class="input-group-addon"><i class="fa fa-search"></i></span> + <input id="filter-app-cards" type="text" class="form-control" placeholder="Anwendungen suchen..." aria-describedby="basic-addon1"/> +</div> + +!!! Das Packaging-Team für Anwendungen freut sich, Ihre Kommentare zu bekommen! ! Wenn Sie Probleme oder mögliche Verbesserungen durch die Installation einer Anwendung finden, zögern Sie nicht, mit Meldung von Fehlern direkt auf dem entsprechenden Code-Repository beizutragen. + +! Die markierten Anwendungen <span class = "label label-warning label-as-badge"> schlechte Qualität </span> funktionieren wahrscheinlich, aber respektieren Sie keine guten Verpackungspraktiken oder unterstützen Sie keine bestimmten Funktionen wie Backups / Datenwiederherstellung oder die einmalige Authentifizierung. Seien Sie vorsichtig, wenn Sie sie installieren. + +{% set catalog = read_file('/var/www/app_yunohost/apps/builds/default/doc_catalog/apps.json')|json_decode(true) %} + +<div id="app-cards-list" class="app-cards-list"> +{% for app_id, infos in catalog.apps %} + +{% if grav.language.getActive in infos.description %} + {% set descr_lang = grav.language.getActive %} +{% else %} + {% set descr_lang = 'en' %} +{% endif %} + +<div class="app-card panel panel-default" data-appid="{{ app_id }}" data-level="{{ infos.level }}"> +<div class="app-title"> +{% if infos.good_quality %} +<i class="fa fa-star" style="color: gold"></i> +{% endif %} +{{ infos.name }} +<span class="label label-default">{{infos.category}}</span> +{% if infos.broken %} +<span class="label label-error">gebrochen</span> +{% else %} +{% if infos.bad_quality %} +<span class="label label-warning">schlechte Qualität</span> +{% endif %} +{% endif %} +</div> +<div class="app-descr">{{ infos.description[descr_lang] }}</div> +<div class="app-footer"> +<div class="app-buttons btn-group" role="group"> + +<a href="{{infos.url}}" target="_BLANK" type="button" class="btn btn-default col-sm-4"> <i class="fa fa-code"></i> Code </a> +<a href="app_{{app_id}}" target="_BLANK" type="button" class="btn btn-default col-sm-4"> <i class="fa fa-book"></i> Doc </a> +<a href="https://install-app.yunohost.org/?app={{app_id}}" target="_BLANK" type="button" class="btn btn-{% if infos.bad_quality %}error{% else %}success{% endif %} col-sm-4 active"> <i class="fa fa-plus"></i> Install </a> + +</div> +</div> +</div> +{% endfor %} +</div> + +! Wenn Sie keine bestimmte Anwendung finden, nach der Sie suchen, können Sie es der [gewünschten Apps-Liste](/apps_wishlist) hinzufügen. + +<!-- +Javascript helpers +--> + +<script> + +$(document).ready(function () { + + $(".javascriptDisclaimer").hide(); + + function filter() { + + var user_input_in_search_field = $('#filter-app-cards').val().toLowerCase(); + + $('.app-card').each(function() { + // This is where we actually define how apps are filtered: + // we look for the name of the app (h3) and try to find the user input + // + we check this app match the current quality filter + var text = $(this).find('.app-title').text().toLowerCase() + " " + $(this).find('.app-descr').text().toLowerCase(); + if (text.indexOf(user_input_in_search_field) >= 0) + { + $(this).show(); + } + else + { + $(this).hide(); + } + }); + } + + function sort() { + var sorted = $('.app-card').sort(function (a, b) { + var level_a = Math.min(parseInt($(a).data('level')), 8); + var level_b = Math.min(parseInt($(b).data('level')), 8); + if (level_a > level_b) + { + return -1; + } + else if (level_a < level_b) + { + return 1; + } + else { + var id_a = $(a).data('appid'); + var id_b = $(b).data('appid'); + return id_a > id_b ? 1 : -1; + } + }); + $("#app-cards-list").html(sorted); + } + + //================================================= + // Search & filter bar event + //================================================= + $('#filter-app-cards').keyup(filter); + + $('a[data-quality-filter]').on("click", function(){ + $('#current-quality-filter').text($(this).text()); + $('#current-quality-filter').data("filter", $(this).data("quality-filter")); + filter(); + }); + + sort(); + filter(); + +}); +</script> diff --git a/pages/02.applications/01.catalog/apps.fr.md b/pages/02.applications/01.catalog/apps.fr.md new file mode 100644 index 00000000..1e3c36c7 --- /dev/null +++ b/pages/02.applications/01.catalog/apps.fr.md @@ -0,0 +1,134 @@ +--- +title: Catalogue d'applications +template: docs +taxonomy: + category: docs +routes: + default: '/apps' +twig_first: true +process: + twig: true +--- + +<div class="javascriptDisclaimer"> +Cette page requiert que JavaScript soit activé pour s'afficher correctement :s. +</div> + +<div class="input-group"> + <span id="filter-app-icon" class="input-group-addon"><i class="fa fa-search"></i></span> + <input id="filter-app-cards" type="text" class="form-control" placeholder="Rechercher des apps..." aria-describedby="basic-addon1"/> +</div> + +!!! L'équipe de packaging d'applications sera heureuse de recevoir vos commentaires ! Si vous trouvez des problèmes ou des améliorations possibles en installant une app, n'hésitez pas à contribuer en créant un ticket (issue) directement sur le dépôt de code. + +! Les applications étiquettées <span class="label label-warning label-as-badge">mauvaise qualité</span> fonctionnent peut-être, mais ne respectent pas les bonnes pratiques de packaging ou ne supportent pas certaines fonctionnalités comme les sauvegardes/restauration ou l'authentication unifiée. Soyez prudent si vous les installez. + +{% set catalog = read_file('/var/www/app_yunohost/apps/builds/default/doc_catalog/apps.json')|json_decode(true) %} + +<div id="app-cards-list" class="app-cards-list"> +{% for app_id, infos in catalog.apps %} + +{% if grav.language.getActive in infos.description %} + {% set descr_lang = grav.language.getActive %} +{% else %} + {% set descr_lang = 'en' %} +{% endif %} + +<div class="app-card panel panel-default" data-appid="{{ app_id }}" data-level="{{ infos.level }}"> +<div class="app-title"> +{% if infos.good_quality %} +<i class="fa fa-star" style="color: gold"></i> +{% endif %} +{{ infos.name }} +<span class="label label-default">{{infos.category}}</span> +{% if infos.broken %} +<span class="label label-error">cassée</span> +{% else %} +{% if infos.bad_quality %} +<span class="label label-warning">mauvaise qualité</span> +{% endif %} +{% endif %} +</div> +<div class="app-descr">{{ infos.description[descr_lang] }}</div> +<div class="app-footer"> +<div class="app-buttons btn-group" role="group"> + +<a href="{{infos.url}}" target="_BLANK" type="button" class="btn btn-default col-sm-4"> <i class="fa fa-code"></i> Code </a> +<a href="app_{{app_id}}" target="_BLANK" type="button" class="btn btn-default col-sm-4"> <i class="fa fa-book"></i> Doc </a> +<a href="https://install-app.yunohost.org/?app={{app_id}}" target="_BLANK" type="button" class="btn btn-{% if infos.bad_quality %}error{% else %}success{% endif %} col-sm-4 active"> <i class="fa fa-plus"></i> Install </a> + +</div> +</div> +</div> +{% endfor %} +</div> + +! Si vous ne trouvez pas une application précise que vous recherchez, vous pouvez l'ajouter à la [liste d'apps souhaitées](/apps_wishlist). + +<!-- +Javascript helpers +--> + +<script> + +$(document).ready(function () { + + $(".javascriptDisclaimer").hide(); + + function filter() { + + var user_input_in_search_field = $('#filter-app-cards').val().toLowerCase(); + + $('.app-card').each(function() { + // This is where we actually define how apps are filtered: + // we look for the name of the app (h3) and try to find the user input + // + we check this app match the current quality filter + var text = $(this).find('.app-title').text().toLowerCase() + " " + $(this).find('.app-descr').text().toLowerCase(); + if (text.indexOf(user_input_in_search_field) >= 0) + { + $(this).show(); + } + else + { + $(this).hide(); + } + }); + } + + function sort() { + var sorted = $('.app-card').sort(function (a, b) { + var level_a = Math.min(parseInt($(a).data('level')), 8); + var level_b = Math.min(parseInt($(b).data('level')), 8); + if (level_a > level_b) + { + return -1; + } + else if (level_a < level_b) + { + return 1; + } + else { + var id_a = $(a).data('appid'); + var id_b = $(b).data('appid'); + return id_a > id_b ? 1 : -1; + } + }); + $("#app-cards-list").html(sorted); + } + + //================================================= + // Search & filter bar event + //================================================= + $('#filter-app-cards').keyup(filter); + + $('a[data-quality-filter]').on("click", function(){ + $('#current-quality-filter').text($(this).text()); + $('#current-quality-filter').data("filter", $(this).data("quality-filter")); + filter(); + }); + + sort(); + filter(); + +}); +</script> diff --git a/pages/02.applications/01.catalog/apps.md b/pages/02.applications/01.catalog/apps.md new file mode 100644 index 00000000..421795f8 --- /dev/null +++ b/pages/02.applications/01.catalog/apps.md @@ -0,0 +1,136 @@ +--- +title: Application catalog +template: docs +taxonomy: + category: docs +routes: + default: '/apps' +twig_first: true +process: + twig: true +--- + +<div class="javascriptDisclaimer"> +This page requires JavaScript enabled to display properly :s. +</div> + +<div class="input-group"> + <span id="filter-app-icon" class="input-group-addon"><i class="fa fa-search"></i></span> + <input id="filter-app-cards" type="text" class="form-control" placeholder="Search for apps..." aria-describedby="basic-addon1"/> +</div> + +!!! The application packaging team will welcome your feedback! If you install an app and find issues or possible improvements, do not hesitate to contribute by reporting your issues directly on the corresponding code repositories. + +! Applications flagged as <span class="label label-warning label-as-badge">low quality</span> may be working, but they may not respect good packaging practices or lack integration of some features like backup/restore or single authentication. Be cautious when installing them. + +{% set catalog = read_file('/var/www/app_yunohost/apps/builds/default/doc_catalog/apps.json')|json_decode(true) %} + +<div id="app-cards-list" class="app-cards-list"> +{% for app_id, infos in catalog.apps %} + +{% if grav.language.getActive in infos.description %} + {% set descr_lang = grav.language.getActive %} +{% else %} + {% set descr_lang = 'en' %} +{% endif %} + +<div class="app-card panel panel-default" data-appid="{{ app_id }}" data-level="{{ infos.level }}"> +<div class="app-title"> +{% if infos.good_quality %} +<i class="fa fa-star" style="color: gold"></i> +{% endif %} +{{ infos.name }} +<span class="label label-default">{{infos.category}}</span> +{% if infos.broken %} +<span class="label label-error">broken</span> +{% else %} +{% if infos.bad_quality %} +<span class="label label-warning">low quality</span> +{% endif %} +{% endif %} +</div> +<div class="app-descr">{{ infos.description[descr_lang] }}</div> +<div class="app-footer"> +<div class="app-buttons btn-group" role="group"> + +<a href="{{infos.url}}" target="_BLANK" type="button" class="btn btn-default col-sm-4"> <i class="fa fa-code"></i> Code </a> +<a href="app_{{app_id}}" target="_BLANK" type="button" class="btn btn-default col-sm-4"> <i class="fa fa-book"></i> Doc </a> +<a href="https://install-app.yunohost.org/?app={{app_id}}" target="_BLANK" type="button" class="btn btn-{% if infos.bad_quality %}error{% else %}success{% endif %} col-sm-4 active"> <i class="fa fa-plus"></i> Install </a> + +</div> +</div> +</div> +{% endfor %} +</div> + +! If you don't find the app you are looking for, you can add it to the [apps wishlist](/apps_wishlist). + + + +<!-- +Javascript helpers +--> + +<script> + +$(document).ready(function () { + + $(".javascriptDisclaimer").hide(); + + function filter() { + + var user_input_in_search_field = $('#filter-app-cards').val().toLowerCase(); + + $('.app-card').each(function() { + // This is where we actually define how apps are filtered: + // we look for the name of the app (h3) and try to find the user input + // + we check this app match the current quality filter + var text = $(this).find('.app-title').text().toLowerCase() + " " + $(this).find('.app-descr').text().toLowerCase(); + if (text.indexOf(user_input_in_search_field) >= 0) + { + $(this).show(); + } + else + { + $(this).hide(); + } + }); + } + + function sort() { + var sorted = $('.app-card').sort(function (a, b) { + var level_a = Math.min(parseInt($(a).data('level')), 8); + var level_b = Math.min(parseInt($(b).data('level')), 8); + if (level_a > level_b) + { + return -1; + } + else if (level_a < level_b) + { + return 1; + } + else { + var id_a = $(a).data('appid'); + var id_b = $(b).data('appid'); + return id_a > id_b ? 1 : -1; + } + }); + $("#app-cards-list").html(sorted); + } + + //================================================= + // Search & filter bar event + //================================================= + $('#filter-app-cards').keyup(filter); + + $('a[data-quality-filter]').on("click", function(){ + $('#current-quality-filter').text($(this).text()); + $('#current-quality-filter').data("filter", $(this).data("quality-filter")); + filter(); + }); + + sort(); + filter(); + +}); +</script> diff --git a/pages/02.applications/02.docs/adminer/app_adminer.fr.md b/pages/02.applications/02.docs/adminer/app_adminer.fr.md new file mode 100644 index 00000000..58cf4216 --- /dev/null +++ b/pages/02.applications/02.docs/adminer/app_adminer.fr.md @@ -0,0 +1,24 @@ +--- +title: Adminer +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_adminer' +--- + + + +[](https://install-app.yunohost.org/?app=adminer) [](https://dash.yunohost.org/appci/app/adminer) + +### Index + +- [Liens utiles](#liens-utiles) + +Adminer (anciennement phpMinAdmin, meilleure alternative à phpMyAdmin) est un outil de gestion de base de données (MySQL, MariaDB, PostgreSQL, SQLite, MS SQL, Oracle, SimpleDB, Elasticsearch, MongoDB). Remplacez phpMyAdmin par Adminer et vous obtiendrez une interface utilisateur plus ordonnée, une meilleure prise en charge des fonctionnalités MySQL, des performances plus élevées et plus de sécurité. [Voir comparaison détaillée](https://www.adminer.org/en/phpmyadmin). + +## Liens utiles + ++ Site web : [adminer.org (en)](https://www.adminer.org/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/adminer](https://github.com/YunoHost-Apps/adminer_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/adminer/issues](https://github.com/YunoHost-Apps/adminer_ynh/issues) diff --git a/pages/02.applications/02.docs/adminer/app_adminer.md b/pages/02.applications/02.docs/adminer/app_adminer.md new file mode 100644 index 00000000..50581bce --- /dev/null +++ b/pages/02.applications/02.docs/adminer/app_adminer.md @@ -0,0 +1,24 @@ +--- +title: Adminer +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_adminer' +--- + + + +[](https://install-app.yunohost.org/?app=adminer) [](https://dash.yunohost.org/appci/app/adminer) + +### Index + +- [Useful links](#useful-links) + +Adminer (formerly phpMinAdmin better alternate to phpMyAdmin) is a full-featured database management tool (MySQL, MariaDB, PostgreSQL, SQLite, MS SQL, Oracle, SimpleDB, Elasticsearch, MongoDB). Replace phpMyAdmin with Adminer and you will get a tidier user interface, better support for MySQL features, higher performance and more security. [See detailed comparison](https://www.adminer.org/en/phpmyadmin). + +## Useful links + ++ Website: [adminer.org](https://www.adminer.org/) ++ Application software repository: [github.com - YunoHost-Apps/adminer](https://github.com/YunoHost-Apps/adminer_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/adminer/issues](https://github.com/YunoHost-Apps/adminer_ynh/issues) diff --git a/pages/02.applications/02.docs/airsonic/app_airsonic.fr.md b/pages/02.applications/02.docs/airsonic/app_airsonic.fr.md new file mode 100644 index 00000000..3950e18b --- /dev/null +++ b/pages/02.applications/02.docs/airsonic/app_airsonic.fr.md @@ -0,0 +1,27 @@ +--- +title: Airsonic +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_airsonic' +--- + + + +[](https://install-app.yunohost.org/?app=airsonic) [](https://dash.yunohost.org/appci/app/airsonic) + +### Index + +- [Liens utiles](#liens-utiles) + +Airsonic est un streamer de médias gratuit basé sur le web, offrant un accès constant à votre musique. Utilisez-le pour partager votre musique avec vos amis ou pour écouter votre propre musique au travail. Vous pouvez diffuser en continu sur plusieurs lecteurs simultanément, par exemple sur un lecteur dans votre cuisine et un autre dans votre salon. + +Airsonic est conçu pour gérer de très grandes collections de musique (des centaines de gigaoctets). Bien qu'il soit optimisé pour le streaming MP3, il fonctionne pour tout format audio ou vidéo pouvant être diffusé via HTTP, par exemple AAC et OGG. En utilisant des plug-ins de transcodage, Airsonic prend en charge la conversion et la diffusion en continu à la volée de pratiquement tous les formats audio, y compris WMA, FLAC, APE, Musepack, WavPack et Shorten. + +## Liens utiles + + + Site web : [airsonic.github.io (en)](https://airsonic.github.io/) + + Documentation officielle : [airsonic.github.io/docs (en)](https://airsonic.github.io/docs/) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/airsonic](https://github.com/YunoHost-Apps/airsonic_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/airsonic/issues](https://github.com/YunoHost-Apps/airsonic_ynh/issues) diff --git a/pages/02.applications/02.docs/airsonic/app_airsonic.md b/pages/02.applications/02.docs/airsonic/app_airsonic.md new file mode 100644 index 00000000..6300ab63 --- /dev/null +++ b/pages/02.applications/02.docs/airsonic/app_airsonic.md @@ -0,0 +1,27 @@ +--- +title: Airsonic +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_airsonic' +--- + + + +[](https://install-app.yunohost.org/?app=airsonic) [](https://dash.yunohost.org/appci/app/airsonic) + +### Index + +- [Useful links](#useful-links) + +Airsonic is a free, web-based media streamer, providing ubiquitous access to your music. Use it to share your music with friends, or to listen to your own music while at work. You can stream to multiple players simultaneously, for instance to one player in your kitchen and another in your living room. + +Airsonic is designed to handle very large music collections (hundreds of gigabytes). Although optimized for MP3 streaming, it works for any audio or video format that can stream over HTTP, for instance AAC and OGG. By using transcoder plug-ins, Airsonic supports on-the-fly conversion and streaming of virtually any audio format, including WMA, FLAC, APE, Musepack, WavPack and Shorten. + +## Useful links + + + Website: [airsonic.github.io](https://airsonic.github.io/) + + Official documentation: [airsonic.github.io - docs](https://airsonic.github.io/docs/) + + Application software repository: [github.com - YunoHost-Apps/airsonic](https://github.com/YunoHost-Apps/airsonic_ynh) + + Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/airsonic/issues](https://github.com/YunoHost-Apps/airsonic_ynh/issues) diff --git a/pages/02.applications/02.docs/ampache/app_ampache.fr.md b/pages/02.applications/02.docs/ampache/app_ampache.fr.md new file mode 100644 index 00000000..0cf53d47 --- /dev/null +++ b/pages/02.applications/02.docs/ampache/app_ampache.fr.md @@ -0,0 +1,30 @@ +--- +title: Ampache +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_ampache' +--- + + + +[](https://install-app.yunohost.org/?app=ampache) [](https://dash.yunohost.org/appci/app/ampache) + +### Index + +- [Limitations avec YunoHost](#limitations-avec-yunohost) +- [Liens utiles](#liens-utiles) + +Ampache est un logiciel libre de streaming audio. + +## Limitations avec YunoHost + +L'authentification du SSO ne fonctionne pas entièrement à partir du panel d'utilisateurs, nous devons y travailler. En fait, cela peut perturber les clients Ampache externes comme Subsonic. + +## Liens utiles + ++ Site web : [ampache.org (en)](http://ampache.org/) ++ Documentation officielle : [github.com - Ampache/wiki (en)](https://github.com/ampache/ampache/wiki) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/ampache](https://github.com/YunoHost-Apps/ampache_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/ampache/issues](https://github.com/YunoHost-Apps/ampache_ynh/issues) diff --git a/pages/02.applications/02.docs/ampache/app_ampache.md b/pages/02.applications/02.docs/ampache/app_ampache.md new file mode 100644 index 00000000..4f512a15 --- /dev/null +++ b/pages/02.applications/02.docs/ampache/app_ampache.md @@ -0,0 +1,30 @@ +--- +title: Ampache +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_ampache' +--- + + + +[](https://install-app.yunohost.org/?app=ampache) [](https://dash.yunohost.org/appci/app/ampache) + +### Index + +- [Limitations with YunoHost](#limitations-with-yunohost) +- [Useful links](#useful-links) + +Ampache is libre audio streaming software. + +## Limitations with YunoHost + +Since SSO authentication does not work entirely from the user panel, we need to work on it. In fact, this can be disruptive to external Ampache clients such as Subsonic. + +## Useful links + ++ Website: [ampache.org](http://ampache.org/) ++ Official documentation: [github.com - Ampache/wiki](https://github.com/ampache/ampache/wiki) ++ Application software repository: [github.com - YunoHost-Apps/ampache](https://github.com/YunoHost-Apps/ampache_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/ampache/issues](https://github.com/YunoHost-Apps/ampache_ynh/issues) diff --git a/pages/02.applications/02.docs/anarchism/app_anarchism.fr.md b/pages/02.applications/02.docs/anarchism/app_anarchism.fr.md new file mode 100644 index 00000000..98671fe6 --- /dev/null +++ b/pages/02.applications/02.docs/anarchism/app_anarchism.fr.md @@ -0,0 +1,24 @@ +--- +title: Anarchism +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_anarchism' +--- + + + +[](https://install-app.yunohost.org/?app=anarchism) [](https://dash.yunohost.org/appci/app/anarchism) + +### Index + +- [Liens utiles](#liens-utiles) + +Ceci est une FAQ anarchiste. Son but est de présenter ce que l'anarchisme représente réellement et d'indiquer pourquoi vous devriez devenir anarchiste. + +## Liens utiles + ++ Site web : [salsa.debian.org - anarchism (en)](https://salsa.debian.org/debian/anarchism) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/anarchism](https://github.com/YunoHost-Apps/anarchism_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/anarchism/issues](https://github.com/YunoHost-Apps/anarchism_ynh/issues) diff --git a/pages/02.applications/02.docs/anarchism/app_anarchism.md b/pages/02.applications/02.docs/anarchism/app_anarchism.md new file mode 100644 index 00000000..37b6f548 --- /dev/null +++ b/pages/02.applications/02.docs/anarchism/app_anarchism.md @@ -0,0 +1,24 @@ +--- +title: Anarchism +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_anarchism' +--- + + + +[](https://install-app.yunohost.org/?app=anarchism) [](https://dash.yunohost.org/appci/app/anarchism) + +### Index + +- [Useful links](#useful-links) + +This is an anarchist FAQ. Its aim is to present what anarchism really stands for and indicate why you should become an anarchist. + +## Useful links + ++ Website: [salsa.debian.org - anarchism](https://salsa.debian.org/debian/anarchism) ++ Application software repository: [github.com - YunoHost-Apps/anarchism](https://github.com/YunoHost-Apps/anarchism_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/anarchism/issues](https://github.com/YunoHost-Apps/anarchism_ynh/issues) diff --git a/pages/02.applications/02.docs/anfora/app_anfora.fr.md b/pages/02.applications/02.docs/anfora/app_anfora.fr.md new file mode 100644 index 00000000..94c3b1bb --- /dev/null +++ b/pages/02.applications/02.docs/anfora/app_anfora.fr.md @@ -0,0 +1,24 @@ +--- +title: Anfora +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_anfora' +--- + + + +[](https://install-app.yunohost.org/?app=anfora) [](https://dash.yunohost.org/appci/app/anfora) + +### Index + +- [Liens utiles](#liens-utiles) + +Galerie de photos auto-hébergée, réseau social fédéré. + +## Liens utiles + ++ Site web : [anfora.app (en)](https://anfora.app/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/anfora](https://github.com/YunoHost-Apps/anfora_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/anfora/issues](https://github.com/YunoHost-Apps/anfora_ynh/issues) diff --git a/pages/02.applications/02.docs/anfora/app_anfora.md b/pages/02.applications/02.docs/anfora/app_anfora.md new file mode 100644 index 00000000..3b9f30fc --- /dev/null +++ b/pages/02.applications/02.docs/anfora/app_anfora.md @@ -0,0 +1,24 @@ +--- +title: Anfora +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_anfora' +--- + + + +[](https://install-app.yunohost.org/?app=anfora) [](https://dash.yunohost.org/appci/app/anfora) + +### Index + +- [Useful links](#useful-links) + +Self-hosted photo gallery federated social network. + +## Useful links + ++ Website: [anfora.app](https://anfora.app/) ++ Application software repository: [github.com - YunoHost-Apps/anfora](https://github.com/YunoHost-Apps/anfora_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/anfora/issues](https://github.com/YunoHost-Apps/anfora_ynh/issues) diff --git a/pages/02.applications/02.docs/appsdoc.md_ b/pages/02.applications/02.docs/appsdoc.md_ new file mode 100644 index 00000000..32e978bc --- /dev/null +++ b/pages/02.applications/02.docs/appsdoc.md_ @@ -0,0 +1,128 @@ +--- +title: Apps list +template: docs +taxonomy: + category: docs +routes: + default: '/appsdoc' +--- + +- [Adminer](app_adminer) +- [Airsonic](app_airsonic) +- [Ampache](app_ampache) +- [Anarchism](app_anarchism) +- [Anfora](app_anfora) +- [Archivist](app_archivist) +- [Baïkal](app_baikal) +- [Bitwarden](app_bitwarden) +- [Bibliogram](app_bibliogram) +- [Bludit](app_bludit) +- [Blogotext](app_blogotext) +- [BookStack](app_bookstack) +- [Borg](app_borg) +- [BoZoN](app_bozon) +- [Calibre-Web](app_calibreweb) +- [Cheky](app_cheky) +- [CiviCRM](app_civicrm_drupal7) +- [CodiMD](app_codimd) +- [Collabora](app_collabora) +- [Collabora (in Docker)](app_collaboradocker) +- [Concret5](app_concrete5) +- [Cowyo](app_cowyo) +- [Custom Webapp](app_my_webapp) +- [Diagrams.net](app_diagramsnet) +- [Discourse](app_discourse) +- [Distbin](app_distbin) +- [Dokuwiki](app_dokuwiki) +- [Dolibarr](app_dolibarr) +- [Dotclear 2](app_dotclear2) +- [Drupal](app_drupal) +- [Drupal 7](app_drupal7) +- [Etherpad (with mypads's plugin)](app_etherpad_mypads) +- [Fallback](app_fallback) +- [FirefoxSync](app_ffsync) +- [Fireflyiii](app_firefly-iii) +- [Flarum](app_flarum) +- [FluxBB](app_fluxbb) +- [Framaforms](app_framaforms) +- [FreshRSS](app_freshrss) +- [Friendica](app_friendica) +- [Funkwhale](app_funkwhale) +- [Galene](app_galene) +- [Garradin](app_garradin) +- [Gitea](app_gitea) +- [GitLab](app_gitlab) +- [GitLab Runner](app_gitlab-runner) +- [Glowing Bear](app_glowing_bear) +- [Gogs](app_gogs) +- [Gotify](app_gotify) +- [Grav](app_grav) +- [Halcyon](app_halcyon) +- [Haste](app_haste) +- [HedgeDoc](app_hedgedoc) +- [Hextris](app_hextris) +- [Horde](app_horde) +- [Hubzilla](app_hubzilla) +- [InvoiceNinja](app_invoiceninja) +- [Jappix](app_jappix) +- [Jirafeau](app_jirafeau) +- [Jitsi](app_jitsi) +- [JupyterLab](app_jupyterlab) +- [Keeweb](app_keeweb) +- [Kresus](app_kresus) +- [Leed](app_leed) +- [Limesurvey](app_limesurvey) +- [Lstu](app_lstu) +- [Lufi](app_lufi) +- [Lutim](app_lutim) +- [Lychee](app_lychee) +- [Mattermost](app_mattermost) +- [Mailman](app_mailman) +- [Mantis](app_mantis) +- [Matomo](app_matomo) +- [Mattermost](app_mattermost) +- [Mediawiki](app_mediawiki) +- [Mindmaps](app_mindmaps) +- [Minetest](app_minetest) +- [Minidlna](app_minidlna) +- [Mobilizon](app_mobilizon) +- [Moodle](app_moodle) +- [Mumble](app_mumbleserver) +- [Navidrome](app_navidrome) +- [Netdata](app_netdata) +- [Nextcloud](app_nextcloud) +- [Noalyss](app_noalyss) +- [OnlyOffice](app_onlyoffice) +- [Opensondage](app_opensondage) +- [OSticket](app_osticket) +- [Peertube](app_peertube) +- [PHPmyadmin](app_phpmyadmin) +- [PHPsysinfo](app_phpsysinfo) +- [Pihole](app_pihole) +- [Piwigo](app_piwigo) +- [Pleroma](app_pleroma) +- [Plume](app_plume) +- [Pluxml](app_pluxml) +- [PrivateBin](app_privatebin) +- [Radicale](app_radicale) +- [Rainloop](app_rainloop) +- [Searx](app_searx) +- [Shaarli](app_shaarli) +- [Shellinabox](app_shellinabox) +- [Simple-torrent](app_simple-torrent) +- [Slingcode](app_slingcode) +- [Sogo](app_sogo) +- [Spip](app_spip) +- [Strut](app_strut) +- [Transmission](app_transmission) +- [TinyTinyRSS](app_ttrss) +- [Unattended upgrades](app_unattended_upgrades) +- [Wallabag2](app_wallabag2) +- [Weblate](app_weblate) +- [Wekan](app_wekan) +- [Wiki.js](app_wikijs) +- [Webtrees](app_webtrees) +- [WordPress](app_wordpress) +- [Yunofav](app_yunofav) +- [Zerobin](app_zerobin) +- (Note that you can add a new page here if you want to start document in another `app`...) diff --git a/pages/02.applications/02.docs/archivist/app_archivist.fr.md b/pages/02.applications/02.docs/archivist/app_archivist.fr.md new file mode 100644 index 00000000..c0b6dc28 --- /dev/null +++ b/pages/02.applications/02.docs/archivist/app_archivist.fr.md @@ -0,0 +1,25 @@ +--- +title: Archivist +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_archivist' +--- + + + +[](https://install-app.yunohost.org/?app=archivist) [](https://dash.yunohost.org/appci/app/archivist) + +### Index + +- [Liens utiles](#liens-utiles) + +Archivist est un système de sauvegarde automatique de votre serveur. Il est capable de faire des sauvegardes de votre noyau YunoHost et de vos applications en utilisant la commande de sauvegarde YunoHost. Il peut également effectuer des sauvegardes de répertoires spécifiques. +Vos sauvegardes peuvent être envoyées à de nombreux autres endroits, locaux ou distants. Archivist est automatiquement lancé périodiquement pour mettre à jour vos sauvegardes et envoyer les modifications aux autres endroits. + +## Liens utiles + ++ Site web : [github.com - maniackcrudelis/archivist](https://github.com/maniackcrudelis/archivist) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/archivist](https://github.com/YunoHost-Apps/archivist_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/archivist/issues](https://github.com/YunoHost-Apps/archivist_ynh/issues) diff --git a/pages/02.applications/02.docs/archivist/app_archivist.md b/pages/02.applications/02.docs/archivist/app_archivist.md new file mode 100644 index 00000000..91816e0e --- /dev/null +++ b/pages/02.applications/02.docs/archivist/app_archivist.md @@ -0,0 +1,25 @@ +--- +title: Archivist +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_archivist' +--- + + + +[](https://install-app.yunohost.org/?app=archivist) [](https://dash.yunohost.org/appci/app/archivist) + +### Index + +- [Useful links](#useful-links) + +Archivist is an automatic backup system for your server. It is able to makes backups of your YunoHost core and your apps by using the YunoHost backup command. It can also makes backups of specified directories. +Your backups can be send to many other places, local or distant. Archivist is automatically launched periodicaly to update your backups and send the modifications to the other places. + +## Useful links + ++ Website: [github.com - maniackcrudelis/archivist](https://github.com/maniackcrudelis/archivist) ++ Application software repository: [github.com - YunoHost-Apps/archivist](https://github.com/YunoHost-Apps/archivist_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/archivist/issues](https://github.com/YunoHost-Apps/archivist_ynh/issues) diff --git a/pages/02.applications/02.docs/baikal/app_baikal.fr.md b/pages/02.applications/02.docs/baikal/app_baikal.fr.md new file mode 100644 index 00000000..ee630f75 --- /dev/null +++ b/pages/02.applications/02.docs/baikal/app_baikal.fr.md @@ -0,0 +1,81 @@ +--- +title: Baikal +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_baikal' +--- + + + +[](https://install-app.yunohost.org/?app=baikal) [](https://dash.yunohost.org/appci/app/baikal) + +### Index + +- [Configuration](#Configuration) + - [Connexion à l'interface d'administration](#Connexion-à-l-interface-d-administration) + - [Création d'un nouvel utilisateur](#Création-d-un-nouvel-utilisateur) +- [Connexion CalDAV](#Connexion-CalDAV) + - [Connexion de Thunderbird avec Lightning](#Connexion-de-Thunderbird-avec-Lightning) + - [Connexion de AgenDAV](#Connexion-de-AgenDAV) +- [Connexion CardDAV](#Connexion-CardDAV) +- [Liens utiles](#liens-utiles) + +Baïkal est un serveur de calendriers et de contacts accessible par les protocoles CalDAV (calendriers) et CardDAV (carnets d’adresses), autorisant ainsi la synchronisation avec de nombreux clients (Thunderbird + Lightning par exemple). + +**AVERTISSEMENT** : Baïkal ne fonctionnera pas si vous avez installé un **Nextcloud** (leurs fonctions cardav/caldav entrent en conflit). + +## Configuration + +### Connexion à l’interface d’administration + +Pour configurer l'appliation il faut se rendre à l'adresse : `sous.domaine.tld/admin` ou `domaine.tld/baikal/admin` +Le nom d’utilisateur à spécifier est `admin` suivi du mot de passe spécifique que vous avez choisi lors de l’installation de Baïkal. Attention, le mot de passe ne doit pas contenir de carractères spéciaux. + +### Authentification LDAP + +Par défaut, Baïkal est configuré pour importer les utilisateurs depuis l'annuaire LDAP de YunoHost. Les utilisateurs YunoHost apparaîtront dans le menu `Users and ressources` après une première authentification. + +## Connexion CalDAV + +### Connexion de Thunderbird avec Lightning + +Ajoutez un nouvel agenda de type « Réseau » puis « CalDAV ». + +L’URL à entrer est la suivante : + +`https://example.com/baikal/cal.php/calendars/username/default` + +*En prenant soin de remplacer « example.com » par votre domaine puis « username » par votre nom d’utilisateur* + +### Connexion de AgenDAV + +AgenDAV est un client web permettant de manipuler vos calendriers. Il est packagé pour YunoHost et vous pouvez donc l’installer juste après avoir installé Baïkal. + +AgenDAV est déjà connecté à Baïkal, aucune manipulation n’est nécessaire. Si vous créez une entrée dans le calendrier Thunderbird + Lightning, il vous suffit d’actualiser votre page AgenDAV pour voir les modifications apparaître. + +AgenDAV vous permet également de créer de nouveaux calendriers très simplement. + +## Connexion CardDAV + +En utilisant l'exemple avec RoundCube Ajoutez un nouveau carnet d’adresses en allant dans Paramètres > Préférences > CardDAV. + +Renseigner : ++ Nom du carnet d’adresses : `default` ++ Nom d’utilisateur : `username` ++ Mot de passe : `leMotDePasseAssociéAUusername` ++ URL : `https://example.com/baikal/card.php/addressbooks/username/default` + +*En prenant soin de remplacer « example.com » par votre domaine et « username » par votre nom d’utilisateur* + +Enregistrer + +Le carnet d’adresses est maintenant accessible. + +## Liens utiles + + + Site web : [www.baikal-server.com (en)](http://www.baikal-server.com/) + + Documentation officielle : [sabre.io - baikal (en)](https://sabre.io/baikal/) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/bikal](https://github.com/YunoHost-apps/baikal_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/baikal/issues](https://github.com/YunoHost-apps/baikal_ynh/issues) diff --git a/pages/02.applications/02.docs/baikal/app_baikal.md b/pages/02.applications/02.docs/baikal/app_baikal.md new file mode 100644 index 00000000..2efd023a --- /dev/null +++ b/pages/02.applications/02.docs/baikal/app_baikal.md @@ -0,0 +1,83 @@ +--- +title: Baikal +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_baikal' +--- + + + +[](https://install-app.yunohost.org/?app=baikal) [](https://dash.yunohost.org/appci/app/baikal) + +### Index + +- [Configuration](#Configuration) + - [Login to admin interface](#Login-to-administration-interface) + - [Creating a new user](#Create-a-new-user) +- [CalDAV connection](#CalDAV-connection) + - [Connecting Thunderbird with Lightning](#Connecting-Thunderbird-with-Lightning) + - [Connecting to AgenDAV](#Connecting-to-AgenDAV) +- [CardDAV Connection](#CardDAV-Connection) +- [Useful links](#Useful-links) + +Baïkal is a server for calendars and address books, which uses the CalDav and CardDav protocol. Baïkal can be synced with a lot of clients, like Thunderbird + Lightning. + +**WARNING**: Baïkal will not work if you have installed a **Nextcloud** (the Nextcloud CardDav/CalDav functions conflict). + +## Configuration + +### Connecting to the administration interface + +To configure the app, go to the address: `sub.domain.tld/admin` or `domain.tld/baikal/admin`. +The username to specify is `admin`, followed by the specific password you chose when installing Baïkal. The password can contain any special characters. + +### LDAP authentication + +By default, Baïkal is configured to look for users in YunoHost's LDAP +directory. YunoHost's users will appear under `User and ressources` menu after their +first authentication. + +## CalDAV connection + +### Connecting Thunderbird with Lightning + +Add a new agenda with type "Network" and "CalDAV" + +The new URL to add is: + +https://domain.org/baikal/cal.php/calendars/username/default + +Be careful to replace "domain.org" with your own domain and the "username" with your username. + +### Connecting to AgenDAV + +AgenDAV is a web client for using your calendars. It's packaged for YunoHost and you can used it after installing Baïkal. + +AgenDAV is already connected to Baïkal, any other configuration is necessary. If you create a new entry in Thunderbird + Lightning calendar, refresh your AgenDAV page is enough to see your modifications. + +AgenDAV also allows you to create a new calendars very easily. + +## CardDAV Connection + +Using the example with RoundCube Add a new address book by going to Settings > Preferences > CardDAV. + +Make sure it is filled with: +* Addressbook name: `default` +* Username: `username` +* Password: `thePasswordAssociatedToUsername` +* URL : `https://example.com/baikal/card.php/addressbooks/username/default` + +* Make sure to replace "example.com" with your domain and "username" with your username* + +Save. + +Now, the adressbook is accessible. + +## Useful links + + + Website: [www.baikal-server.com](http://www.baikal-server.com/) + + Official documentation: [sabre.io - baikal](https://sabre.io/baikal/) + + Apps software repository: [github.com - YunoHost-Apps/bikal](https://github.com/YunoHost-apps/baikal_ynh) + + Fix a bug or suggest an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/baikal/issues](https://github.com/YunoHost-apps/baikal_ynh/issues) diff --git a/pages/02.applications/02.docs/bibliogram/app_bibliogram.fr.md b/pages/02.applications/02.docs/bibliogram/app_bibliogram.fr.md new file mode 100644 index 00000000..1e88724c --- /dev/null +++ b/pages/02.applications/02.docs/bibliogram/app_bibliogram.fr.md @@ -0,0 +1,24 @@ +--- +title: Bibliogram +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_bibliogram' +--- + + + +[](https://install-app.yunohost.org/?app=bibliogram) [](https://dash.yunohost.org/appci/app/bibliogram) + +### Index + +- [Liens utiles](#useful-links) + +Bibliogram est un site Web qui prend les données de profil public d'Instagram et les met dans une page plus conviviale qui se charge plus rapidement, donne des images téléchargeables, élimine les publicités, génère des flux RSS et ne vous invite pas à vous inscrire. + +## Liens utiles + ++ Site web : [git.sr.ht - bibliogram](https://git.sr.ht/~cadence/bibliogram) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/bibliogram](https://github.com/YunoHost-Apps/bibliogram_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/bibliogram/issues](https://github.com/YunoHost-Apps/bibliogram_ynh/issues) diff --git a/pages/02.applications/02.docs/bibliogram/app_bibliogram.md b/pages/02.applications/02.docs/bibliogram/app_bibliogram.md new file mode 100644 index 00000000..d3c8deb5 --- /dev/null +++ b/pages/02.applications/02.docs/bibliogram/app_bibliogram.md @@ -0,0 +1,24 @@ +--- +title: Bibliogram +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_bibliogram' +--- + + + +[](https://install-app.yunohost.org/?app=bibliogram) [](https://dash.yunohost.org/appci/app/bibliogram) + +### Index + +- [Useful links](#useful-links) + +Bibliogram is a website that takes data from Instagram's public profile views and puts it into a friendlier page that loads faster, gives downloadable images, eliminates ads, generates RSS feeds, and doesn't urge you to sign up. + +## Useful links + ++ Website: [git.sr.ht - bibliogram](https://git.sr.ht/~cadence/bibliogram) ++ Application software repository: [github.com - YunoHost-Apps/bibliogram](https://github.com/YunoHost-Apps/bibliogram_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/bibliogram/issues](https://github.com/YunoHost-Apps/bibliogram_ynh/issues) diff --git a/pages/02.applications/02.docs/bitwarden/app_bitwarden.fr.md b/pages/02.applications/02.docs/bitwarden/app_bitwarden.fr.md new file mode 100644 index 00000000..c1143cfa --- /dev/null +++ b/pages/02.applications/02.docs/bitwarden/app_bitwarden.fr.md @@ -0,0 +1,54 @@ +--- +title: Bitwarden +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_bitwarden' +--- + + + +[](https://install-app.yunohost.org/?app=bitwarden) [](https://dash.yunohost.org/appci/app/bitwarden) + +### Index + +- [Configuration](#configuration) +- [Limitations avec YunoHost](#limitations-avec-yunohost) +- [Applications clientes](#applications-clientes) +- [Liens utiles](#liens-utiles) + +Bitwarden est un gestionnaire de mots de passe freemium et open source sous licence AGPL, qui permet de générer et de conserver des mots de passe de manière sécurisée. Ces éléments sont protégés par un seul et unique mot de passe appelé « mot de passe maître ». Il est créé en 2016 par Kyle Spearrin, un architecte logiciel. + +Le logiciel est disponible sur la plupart des systèmes d'exploitation (GNU/Linux, Windows, macOS, iOS, Android ainsi qu'en ligne de commande), et comme module d'extension pour navigateur web. Il est également possible de consulter ses mot de passe depuis un site web.[¹](#sources) + +## Configuration + +Pour configurer l'appliation il faut se rendre à l'adresse : `sous.domaine.tld/admin` + +## Limitations avec YunoHost + +Les authentification HTTP et LDAP ne sont pas pris en charges. + +## Applications clientes + +| Nom de l'application [²] | Plateforme | Multi-comptes | Source | Play Store | F-Droid | Apple Store | +|--------------------------|------------|---------------|--------|------------|---------|-------------| +| Bitwarden | GNU/Linux / macOS / Windows | Oui | [bitwarden.com - download](https://bitwarden.com/#download) | +| Bitwarden | Android / iOS | ? | | [Playstore - Birwarden](https://play.google.com/store/apps/details?id=com.x8bit.bitwarden) | X | [App Store - Bitwarden](https://itunes.apple.com/app/bitwarden-free-password-manager/id1137397744?mt=8) | + + +> [²]: (of) : Officielle / (no) : non officiel + +## Liens utiles + + + Site web : [bitwarden.com (en)](https://bitwarden.com/) + + Documentation officielle : [help.bitwarden.com (en)](https://help.bitwarden.com/) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/bitwarden](https://github.com/YunoHost-Apps/bitwarden_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/bitwarden/issues](https://github.com/YunoHost-Apps/bitwarden_ynh/issues) + + ------ + + ### Sources + +¹ [wikipedia.org - Bitwarden](https://fr.wikipedia.org/wiki/Bitwarden) diff --git a/pages/02.applications/02.docs/bitwarden/app_bitwarden.md b/pages/02.applications/02.docs/bitwarden/app_bitwarden.md new file mode 100644 index 00000000..eeff2bd5 --- /dev/null +++ b/pages/02.applications/02.docs/bitwarden/app_bitwarden.md @@ -0,0 +1,53 @@ +--- +title: Bitwarden +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_bitwarden' +--- + + + +[](https://install-app.yunohost.org/?app=bitwarden) [](https://dash.yunohost.org/appci/app/bitwarden) + +### Index + +- [Configuration](#configuration) +- [Limitations with YunoHost](#limitations-with-yunohost) +- [Customer Applications](#customer-applications) +- [Useful links](#useful-links) + +Bitwarden is a freemium libre password manager under AGPL license, allowing generation and storage of passwords in a secure way. These are protected by a single password called the "master password". It was created in 2016 by Kyle Spearrin, a software architect. + +The software is available for most operating systems (GNU/Linux, Windows, macOS, iOS, Android and command-line), and as a web browser plug-in. It is also possible to view passwords from a website.[¹](#sources) + +## Configuration + +To configure the app, go to this address: `sub.domain.tld/admin` + +## Limitations with YunoHost + +HTTP and LDAP authentication are not supported. + +## Customer applications + +| Application name [²] | Platform | Multi-account | Source | Play Store | F-Droid | Apple Store | +|----------------------|----------|---------------|--------|------------|---------|-------------| +| Bitwarden | GNU/Linux / macOS / Windows | Oui | [bitwarden.com - download](https://bitwarden.com/#download) | +| Bitwarden | Android / iOS | ? | | [Playstore - Birwarden](https://play.google.com/store/apps/details?id=com.x8bit.bitwarden) | X | [App Store - Bitwarden](https://itunes.apple.com/app/bitwarden-free-password-manager/id1137397744?mt=8) | + +> [²]: (of) : Official / (un) : Unofficial + +## Useful links + ++ Website: [bitwarden.com](https://bitwarden.com/) ++ Official documentation: [help.bitwarden.com](https://help.bitwarden.com/) ++ Application software repository: [github.com - YunoHost-Apps/bitwarden](https://github.com/YunoHost-Apps/bitwarden_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/bitwarden/issues](https://github.com/YunoHost-Apps/bitwarden_ynh/issues) + +----- + +### Sources + +¹ [wikipedia.org - Bitwarden](https://en.wikipedia.org/wiki/Bitwarden) diff --git a/pages/02.applications/02.docs/blogotext/app_blogotext.fr.md b/pages/02.applications/02.docs/blogotext/app_blogotext.fr.md new file mode 100644 index 00000000..508a9de6 --- /dev/null +++ b/pages/02.applications/02.docs/blogotext/app_blogotext.fr.md @@ -0,0 +1,47 @@ +--- +title: BlogoText +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_blogotext' +--- + + + +[](https://install-app.yunohost.org/?app=blogotext) [](https://dash.yunohost.org/appci/app/blogotext) + +### Index + +- [Fonctionnalités]( #fonctionnalités) +- [Limitations avec YunoHost](#limitations-avec-yunohost) +- [Liens utiles](#liens-utiles) + +BlogoText n'est pas seulement un moteur de blog mais propose plutôt un portail dédié à l'écriture de contenu. En effet, l'interface administrateur propose, en plus des outils traditionnels dédiés au blog, un lecteur de flux RSS, un hébergeur de fichiers et un outil permettant de partager des liens. + +L'avantage de ce CMS est qu'il est très léger et sera parfait pour s'occuper de la partie blog ou actualité de votre site web. BlogoText est écrit en PHP, exploite une base de données SQLite et à seulement besoin de 2Mo d'espace disque. [¹](#sources) + +## Fonctionnalités + + + Blog avec commentaires et flux RSS + + Partage de liens + + Lecteur RSS + + Téléversement et partage d'images/fichiers + + import-export au format JSON/ZIP/HTML; import WordPress + + Support Addons + +## Limitations avec YunoHost + +Les authentification HTTP et LDAP ne sont pas pris en charges. L'application n'est pas multi-utilisateurs⋅trices. + +## Liens utiles + + + Site web : [blogotext.org](https://blogotext.org) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/blogotext](https://github.com/YunoHost-Apps/blogotext_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/blogotext/issues](https://github.com/YunoHost-Apps/blogotext_ynh/issues) + +------ + +### Sources + +¹ [framalibre.org - BlogoText](https://framalibre.org/content/blogotext) diff --git a/pages/02.applications/02.docs/blogotext/app_blogotext.md b/pages/02.applications/02.docs/blogotext/app_blogotext.md new file mode 100644 index 00000000..7c9fd290 --- /dev/null +++ b/pages/02.applications/02.docs/blogotext/app_blogotext.md @@ -0,0 +1,47 @@ +--- +title: BlogoText +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_blogotext' +--- + + + +[](https://install-app.yunohost.org/?app=blogotext) [](https://dash.yunohost.org/appci/app/blogotext) + +### Index + +- [Features](#features) +- [Limitations with YunoHost](#limitations-with-yunohost) +- [Useful links](#useful-links) + +BlogoText is not only a blog engine but rather a portal dedicated to writing content. Indeed, the administrator interface offers, in addition to the traditional tools dedicated to the blog, an RSS feed reader, a file host and a tool to share links. + +The advantage of this CMS is that it is very light and will be perfect to take care of the blog or news part of your website. BlogoText is written in PHP, runs a SQLite database and needs only 2MB of disk space.[¹](#sources) + +## Features + + + Blog with comments and RSS feeds + + Links sharing + + RSS Reader + + Images/Files uploading and sharing + + JSON/ZIP/HTML import-export; WordPress import + + Support Addons + +## Limitations with YunoHost + +HTTP and LDAP authentication are not supported. The application is not multi-user. + +## Useful links + + + Website: [blogotext.org (fr)](https://blogotext.org) + + Application software repository: [github.com - YunoHost-Apps/blogotext](https://github.com/YunoHost-Apps/blogotext_ynh) + + Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/blogotext/issues](https://github.com/YunoHost-Apps/blogotext_ynh/issues) + + ----- + + ### Sources + +¹ [framalibre.org - BlogoText (fr)](https://framalibre.org/content/blogotext) diff --git a/pages/02.applications/02.docs/bludit/app_bludit.fr.md b/pages/02.applications/02.docs/bludit/app_bludit.fr.md new file mode 100644 index 00000000..c3b0c5ed --- /dev/null +++ b/pages/02.applications/02.docs/bludit/app_bludit.fr.md @@ -0,0 +1,25 @@ +--- +title: Bludit +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_bludit' +--- + + + +[](https://install-app.yunohost.org/?app=bludit) [](https://dash.yunohost.org/appci/app/bludit) + +### Index + +- [Liens utiles](#liens-utiles) + +Bludit est une application Web pour créer votre propre site Web ou blog en quelques secondes; c'est totalement gratuit et open source. Bludit est un CMS Flat-File, ce qui (dans ce cas) signifie que Bludit utilise des fichiers au format JSON pour stocker le contenu. Vous n'avez pas besoin d'installer ou de configurer une base de données; vous n'avez besoin que d'un serveur Web prenant en charge PHP. + +## Liens utiles + + + Site web : [www.bludit.com (en)](https://www.bludit.com/) + + Documentation officielle : [docs.bludit.com - (en)](https://docs.bludit.com/en/) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/bludit](https://github.com/YunoHost-Apps/bludit_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/bludit/issues](https://github.com/YunoHost-Apps/bludit_ynh/issues) diff --git a/pages/02.applications/02.docs/bludit/app_bludit.md b/pages/02.applications/02.docs/bludit/app_bludit.md new file mode 100644 index 00000000..3b03a91a --- /dev/null +++ b/pages/02.applications/02.docs/bludit/app_bludit.md @@ -0,0 +1,25 @@ +--- +title: Bludit +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_bludit' +--- + + + +[](https://install-app.yunohost.org/?app=bludit) [](https://dash.yunohost.org/appci/app/bludit) + +### Index + +- [Useful links](#useful-links) + +Bludit is a web application to build your own website or blog in seconds; it's completely free and open source. Bludit is a Flat-File CMS, which (in this case) means that Bludit uses files in the JSON format to store the content. You don't need to install or configure a database; you only need a web server with PHP support. + +## Useful links + ++ Website: [www.bludit.com (en)](https://www.bludit.com/) ++ Official documentation: [docs.bludit.com - (en)](https://docs.bludit.com/en/) ++ Application software repository: [github.com - YunoHost-Apps/bludit](https://github.com/YunoHost-Apps/bludit_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/bludit/issues](https://github.com/YunoHost-Apps/bludit_ynh/issues) diff --git a/pages/02.applications/02.docs/bookstack/app_bookstack.fr.md b/pages/02.applications/02.docs/bookstack/app_bookstack.fr.md new file mode 100644 index 00000000..592b8e9e --- /dev/null +++ b/pages/02.applications/02.docs/bookstack/app_bookstack.fr.md @@ -0,0 +1,26 @@ +--- +title: Bookstack +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_bookstack' +--- + + + +[](https://install-app.yunohost.org/?app=bookstack) [](https://dash.yunohost.org/appci/app/bookstack) + +### Index + +- [Liens utiles](#useful-links) + +BookStack est une plate-forme simple, auto-hébergée et facile à utiliser pour organiser et stocker des informations. + + +## Liens utiles + ++ Site web : [bookstackapp.com](https://www.bookstackapp.com/) ++ Documentation officielle : [bookstackapp.com/docs](https://www.bookstackapp.com/docs/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/bookstack](https://github.com/YunoHost-Apps/bibliogram_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/bookstack/issues](https://github.com/YunoHost-Apps/bookstack_ynh/issues) \ No newline at end of file diff --git a/pages/02.applications/02.docs/bookstack/app_bookstack.md b/pages/02.applications/02.docs/bookstack/app_bookstack.md new file mode 100644 index 00000000..2dff540b --- /dev/null +++ b/pages/02.applications/02.docs/bookstack/app_bookstack.md @@ -0,0 +1,25 @@ +--- +title: Bookstack +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_bookstack' +--- + + + +[](https://install-app.yunohost.org/?app=bookstack) [](https://dash.yunohost.org/appci/app/bookstack) + +### Index + +- [Useful links](#useful-links) + +BookStack is a simple, self-hosted, easy-to-use platform for organising and storing information. + +## Useful links + ++ Website: [bookstackapp.com](https://www.bookstackapp.com/) ++ Official documentation: [bookstackapp.com/docs](https://www.bookstackapp.com/docs/) ++ Application software repository: [github.com - YunoHost-Apps/bookstack](https://github.com/YunoHost-Apps/bookstack_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/bookstack/issues](https://github.com/YunoHost-Apps/bookstack_ynh/issues) diff --git a/pages/02.applications/02.docs/borg/app_borg.fr.md b/pages/02.applications/02.docs/borg/app_borg.fr.md new file mode 100644 index 00000000..a748408c --- /dev/null +++ b/pages/02.applications/02.docs/borg/app_borg.fr.md @@ -0,0 +1,33 @@ +--- +title: Borg +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_borg' +--- + + + +[](https://install-app.yunohost.org/?app=borg) [](https://dash.yunohost.org/appci/app/borg) + +### Index + +- [Liens utiles](#liens-utiles) + +BorgBackup (abréviation : Borg) est un programme de sauvegarde par déduplication. En option, il prend en charge la compression et le cryptage authentifié. + +L'objectif principal de Borg est de fournir un moyen efficace et sûr de sauvegarder les données. La technique de déduplication des données utilisée rend Borg adapté aux sauvegardes quotidiennes puisque seules les modifications sont stockées. La technique de cryptage authentifié permet de sauvegarder des données sur des cibles qui ne sont pas totalement fiables.[¹](#sources) + +## Liens utiles + ++ Site web : [www.borgbackup.org (en)](https://www.borgbackup.org/) ++ Documentation officielle : [borgbackup.readthedocs.io (en)](https://borgbackup.readthedocs.io/en/stable/) ++ Dépôt logiciel de l'application : [github.com - YunoHost- Apps/borg](https://github.com/YunoHost-Apps/borg_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/borg/issues](https://github.com/YunoHost-Apps/borg_ynh/issues) + +------ + +### Sources + +¹ [borgbackup.readthedocs.io (en)](https://borgbackup.readthedocs.io/en/stable/#what-is-borgbackup) diff --git a/pages/02.applications/02.docs/borg/app_borg.md b/pages/02.applications/02.docs/borg/app_borg.md new file mode 100644 index 00000000..9e02355f --- /dev/null +++ b/pages/02.applications/02.docs/borg/app_borg.md @@ -0,0 +1,33 @@ +--- +title: Borg +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_borg' +--- + + + +[](https://install-app.yunohost.org/?app=borg) [](https://dash.yunohost.org/appci/app/borg) + +### Index + +- [Useful links](#useful-links) + +BorgBackup (short: Borg) is a deduplicating backup program. Optionally, it supports compression and authenticated encryption. + +The main goal of Borg is to provide an efficient and secure way to backup data. The data deduplication technique used makes Borg suitable for daily backups since only changes are stored. The authenticated encryption technique makes it suitable for backups to not fully trusted targets.[¹](#sources) + +## Useful links + ++ Website: [www.borgbackup.org](https://www.borgbackup.org/) ++ Official documentation: [borgbackup.readthedocs.io](https://borgbackup.readthedocs.io/en/stable/) ++ Application software repository: [github.com - YunoHost- Apps/borg](https://github.com/YunoHost-Apps/borg_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/borg/issues](https://github.com/YunoHost-Apps/borg_ynh/issues) + +------ + +### Sources + +¹ [borgbackup.readthedocs.io](https://borgbackup.readthedocs.io/en/stable/#what-is-borgbackup) diff --git a/pages/02.applications/02.docs/bozon/app_bozon.fr.md b/pages/02.applications/02.docs/bozon/app_bozon.fr.md new file mode 100644 index 00000000..a77cb72e --- /dev/null +++ b/pages/02.applications/02.docs/bozon/app_bozon.fr.md @@ -0,0 +1,24 @@ +--- +title: BoZon +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_bozon' +--- + + + +[](https://install-app.yunohost.org/?app=bozon) [](https://ci-apps.yunohost.org/jenkins/job/bozon%20%28Community%29/lastBuild/consoleFull) + +### Index + +- [Liens utiles](#liens-utiles) + +Application minimaliste de partage de fichiers par glisser-déposer + +## Liens utiles + ++ Site web : [github.com - broncowdd/BoZoN (en)](https://github.com/broncowdd/BoZoN) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/bozon](https://github.com/YunoHost-Apps/bozon_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/bozon/issues](https://github.com/YunoHost-Apps/bozon_ynh/issues) diff --git a/pages/02.applications/02.docs/bozon/app_bozon.md b/pages/02.applications/02.docs/bozon/app_bozon.md new file mode 100644 index 00000000..4aed37b7 --- /dev/null +++ b/pages/02.applications/02.docs/bozon/app_bozon.md @@ -0,0 +1,24 @@ +--- +title: BoZon +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_bozon' +--- + + + +[](https://install-app.yunohost.org/?app=bozon) [](https://ci-apps.yunohost.org/jenkins/job/bozon%20%28Community%29/lastBuild/consoleFull) + +### Index + +- [Useful links](#useful-links) + +Minimalist Drag & drop file sharing app + +## Useful links + ++ Website: [github.com - broncowdd/BoZoN](https://github.com/broncowdd/BoZoN) ++ Application software repository: [github.com - YunoHost-Apps/bozon](https://github.com/YunoHost-Apps/bozon_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/bozon/issues](https://github.com/YunoHost-Apps/bozon_ynh/issues) diff --git a/pages/02.applications/02.docs/calibreweb/app_calibreweb.fr.md b/pages/02.applications/02.docs/calibreweb/app_calibreweb.fr.md new file mode 100644 index 00000000..98d3c439 --- /dev/null +++ b/pages/02.applications/02.docs/calibreweb/app_calibreweb.fr.md @@ -0,0 +1,24 @@ +--- +title: Calibre-web +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_calibreweb' +--- + + + +[](https://install-app.yunohost.org/?app=calibreweb) [](https://ci-apps.yunohost.org/jenkins/job/calibreweb%20%28Community%29/lastBuild/consoleFull) + +### Index + +- [Liens utiles](#liens-utiles) + +Calibre-Web est une application web fournissant une interface propre pour naviguer, lire et télécharger des livres électroniques en utilisant une base de données Calibre existante. + +## Liens utiles + ++ Site web : [github.com - janeczku/calibre-web (en)](https://github.com/janeczku/calibre-web) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/calibreweb](https://github.com/YunoHost-Apps/calibreweb_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/calibreweb](https://github.com/YunoHost-Apps/calibreweb_ynh/issues) diff --git a/pages/02.applications/02.docs/calibreweb/app_calibreweb.md b/pages/02.applications/02.docs/calibreweb/app_calibreweb.md new file mode 100644 index 00000000..9b21fbf8 --- /dev/null +++ b/pages/02.applications/02.docs/calibreweb/app_calibreweb.md @@ -0,0 +1,24 @@ +--- +title: Calibre-web +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_calibreweb' +--- + + + +[](https://install-app.yunohost.org/?app=calibreweb) [](https://ci-apps.yunohost.org/jenkins/job/calibreweb%20%28Community%29/lastBuild/consoleFull) + +### Index + +- [Useful links](#useful-links) + +Calibre-Web is a web app providing a clean interface for browsing, reading and downloading eBooks using an existing Calibre database. + +## Useful links + ++ Website: [github.com - janeczku/calibre-web](https://github.com/janeczku/calibre-web) ++ Application software repository: [github.com - YunoHost-Apps/calibreweb](https://github.com/YunoHost-Apps/calibreweb_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/calibreweb](https://github.com/YunoHost-Apps/calibreweb_ynh/issues) diff --git a/pages/02.applications/02.docs/cheky/app_cheky.fr.md b/pages/02.applications/02.docs/cheky/app_cheky.fr.md new file mode 100644 index 00000000..130f3460 --- /dev/null +++ b/pages/02.applications/02.docs/cheky/app_cheky.fr.md @@ -0,0 +1,30 @@ +--- +title: Cheky +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_cheky' +--- + + + +[](https://install-app.yunohost.org/?app=cheky) [](https://dash.yunohost.org/appci/app/cheky) + +### Index + +- [Limitations avec YunoHost](#limitations-avec-yunohost) +- [Liens utiles](#liens-utiles) + +Cheky est un logiciel écrit en PHP vous permettant de recevoir les nouvelles annonces publiées sur les sites internet Leboncoin.fr et SeLoger.com. Vous pouvez recevoir les alertes via différents canaux de communication. + +## Limitations avec YunoHost + +Les mises à jour depuis l'ancien package LBCAlerte ne sont pas possibles, l'application est uniquement en français. Cheky ne fonctionne pas avec le [SSO](https://yunohost.org/#/users). + +## Liens utiles + ++ Site web : [www.cheky.net](https://www.cheky.net/) ++ Documentation officielle : [www.cheky.net - documentation](https://www.cheky.net/documentation) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/cheky](https://github.com/YunoHost-Apps/cheky_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/cheky](https://github.com/YunoHost-Apps/cheky_ynh/issues) diff --git a/pages/02.applications/02.docs/cheky/app_cheky.md b/pages/02.applications/02.docs/cheky/app_cheky.md new file mode 100644 index 00000000..2d9354fc --- /dev/null +++ b/pages/02.applications/02.docs/cheky/app_cheky.md @@ -0,0 +1,30 @@ +--- +title: Checky +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_cheky' +--- + + + +[](https://install-app.yunohost.org/?app=cheky) [](https://dash.yunohost.org/appci/app/cheky) + +### Index + +- [Limitations with YunoHost](#limitations-with-yunohost) +- [Useful links](#useful-links) + +Cheky is a software written in PHP allowing you to receive new ads published on the websites Leboncoin.fr and SeLoger.com. You can receive alerts via different communication channels. + +## Limitations with YunoHost + +Updates from the old LBCAlerte package are not possible, the application is only in French. Cheky does not work with [SSO](https://yunohost.org/#/users). + +## Useful links + ++ Website: [www.cheky.net (fr)](https://www.cheky.net/) ++ Official documentation: [www.cheky.net - documentation (fr)](https://www.cheky.net/documentation) ++ Application software repository: [github.com - YunoHost-Apps/cheky](https://github.com/YunoHost-Apps/cheky_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/cheky](https://github.com/YunoHost-Apps/cheky_ynh/issues) diff --git a/pages/02.applications/02.docs/civicrm_drupal7/app_civicrm_drupal7.fr.md b/pages/02.applications/02.docs/civicrm_drupal7/app_civicrm_drupal7.fr.md new file mode 100644 index 00000000..a6c6c76c --- /dev/null +++ b/pages/02.applications/02.docs/civicrm_drupal7/app_civicrm_drupal7.fr.md @@ -0,0 +1,31 @@ +--- +title: CiviCRM +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_civicrm_drupal7' +--- + + + +[](https://install-app.yunohost.org/?app=civicrm_drupal7) [](https://dash.yunohost.org/appci/app/civicrm_drupal7) + +### Index + +- [Liens utiles](#liens-utiles) + +CiviCRM est une solution Web Open Source de gestion de la relation client. Elle a été spécialement conçue pour répondre aux besoins des organismes à but non lucratif, des organisations non gouvernementales et des groupes de pression.[¹](#sources) + +## Liens utiles + ++ Site web : [civicrm.org (en)](https://civicrm.org/) ++ Documentation officielle : [docs.civicrm.org (en)](https://docs.civicrm.org/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/civicrm_drupal7](https://github.com/YunoHost-Apps/civicrm_drupal7_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/civicrm_drupal7](https://github.com/YunoHost-Apps/civicrm_drupal7_ynh/issues) + +------ + +### Sources + +¹ [wikipedia.org - CiviCRM](https://fr.wikipedia.org/wiki/CiviCRM) diff --git a/pages/02.applications/02.docs/civicrm_drupal7/app_civicrm_drupal7.md b/pages/02.applications/02.docs/civicrm_drupal7/app_civicrm_drupal7.md new file mode 100644 index 00000000..8af05b45 --- /dev/null +++ b/pages/02.applications/02.docs/civicrm_drupal7/app_civicrm_drupal7.md @@ -0,0 +1,31 @@ +--- +title: CiviCRM +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_civicrm_drupal7' +--- + + + +[](https://install-app.yunohost.org/?app=civicrm_drupal7) [](https://dash.yunohost.org/appci/app/civicrm_drupal7) + +### Index + +- [Useful links](#useful-links) + +CiviCRM is a web-based suite of internationalized open-source software for constituency relationship management that falls under the broad rubric of customer relationship management. It is specifically designed for the needs of non-profit,non-governmental, and advocacy groups, and serves as an association-management system.[¹](#sources) + +## Useful links + ++ Website: [civicrm.org](https://civicrm.org/) ++ Official documentation: [docs.civicrm.org](https://docs.civicrm.org/) ++ Application software repository: [github.com - YunoHost-Apps/civicrm_drupal7](https://github.com/YunoHost-Apps/civicrm_drupal7_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/civicrm_drupal7](https://github.com/YunoHost-Apps/civicrm_drupal7_ynh/issues) + +------ + +### Sources + +¹ [wikipedia.org - CiviCRM](https://en.wikipedia.org/wiki/CiviCRM) diff --git a/pages/02.applications/02.docs/codimd/app_codimd.fr.md b/pages/02.applications/02.docs/codimd/app_codimd.fr.md new file mode 100644 index 00000000..52dad66e --- /dev/null +++ b/pages/02.applications/02.docs/codimd/app_codimd.fr.md @@ -0,0 +1,27 @@ +--- +title: CodiMD +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_codimd' +--- + + + +[](https://install-app.yunohost.org/?app=codimd) [](https://dash.yunohost.org/appci/app/codimd) + +### Index + +- [Liens utiles](#liens-utiles) + +CodiMD est un service web de traitement de texte collaboratif en temps réel. Il utilise le langage Markdown, qui est un moyen simple pour formater un texte. +CodiMD propose un vaste choix de fonctionnalités pour toutes les utilisations courantes du traitement de texte parmi lesquelles gestion des titres, table de matières, insertion d’images, tableaux, notes de bas de page, incrustation de vidéos, visualisateurs PDF, expressions mathématiques LaTeX avec MathJax, diagrammes, etc. +Différents niveaux de permission permettent de choisir qui peut lire ou éditer le document. + +## Liens utiles + ++ Démo officielle : [https://demo.codimd.org/](https://demo.codimd.org/) ++ Documentation officielle : [github.com/codimd](https://github.com/codimd/server/tree/master/docs/) ++ Dépôt logiciel de l’application : [github.com - YunoHost-Apps/codimd](https://github.com/YunoHost-Apps/codimd_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/codimd/issues](https://github.com/YunoHost-Apps/codimd_ynh/issues) diff --git a/pages/02.applications/02.docs/codimd/app_codimd.md b/pages/02.applications/02.docs/codimd/app_codimd.md new file mode 100644 index 00000000..8b821fce --- /dev/null +++ b/pages/02.applications/02.docs/codimd/app_codimd.md @@ -0,0 +1,27 @@ +--- +title: CodiMD +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_codimd' +--- + + + +[](https://install-app.yunohost.org/?app=codimd) [](https://dash.yunohost.org/appci/app/codimd) + +### Index + +- [Useful links](#useful-links) + +CodiMD is a collaborative, real-time word processing web service. It uses Markdown language, which is a simple way to format text. +CodiMD offers a wide range of features for all common uses of word processing, including title management, table of contents, insertion of images, tables, footnotes, video overlay, PDF viewers, LaTeX mathematical expressions with MathJax, diagrams, etc. +Different levels of permission allow you to choose who can read or edit the document. + +## Useful links + ++ Official demo: [https://demo.codimd.org/](https://demo.codimd.org/) ++ Official documentation: [github.com/codimd](https://github.com/codimd/server/tree/master/docs/) ++ Application software repository: [github.com - YunoHost-Apps/codimd](https://github.com/YunoHost-Apps/codimd_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/codimd/issues](https://github.com/YunoHost-Apps/codimd_ynh/issues) diff --git a/pages/02.applications/02.docs/collabora/app_collabora.fr.md b/pages/02.applications/02.docs/collabora/app_collabora.fr.md new file mode 100644 index 00000000..84153e98 --- /dev/null +++ b/pages/02.applications/02.docs/collabora/app_collabora.fr.md @@ -0,0 +1,24 @@ +--- +title: Collabora +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_collabora' +--- + + + +[](https://install-app.yunohost.org/?app=collabora) [](https://dash.yunohost.org/appci/app/collabora) + +### Index + +- [Liens utiles](#liens-utiles) + +Collabora est une suite bureautique en ligne basée sur LibreOffice et utilisable avec Nextcloud ou ownCloud. Elle permet d'éditer des documents textes, des tableaux, des diaporamas. L'édition en ligne peut se faire en simultanée et permet d'exporter et d'imprimer des documents grâce au format PDF généré. + +## Liens utiles + ++ Site web : [www.collaboraoffice.com](https://www.collaboraoffice.com/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/collabora](https://github.com/YunoHost-Apps/collabora_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/collabora/issues](https://github.com/YunoHost-Apps/collabora_ynh/issues) diff --git a/pages/02.applications/02.docs/collabora/app_collabora.md b/pages/02.applications/02.docs/collabora/app_collabora.md new file mode 100644 index 00000000..4f8f4142 --- /dev/null +++ b/pages/02.applications/02.docs/collabora/app_collabora.md @@ -0,0 +1,24 @@ +--- +title: Collabora +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_collabora' +--- + + + +[](https://install-app.yunohost.org/?app=collabora) [](https://dash.yunohost.org/appci/app/collabora) + +### Index + +- [Useful links](#useful-links) + +Collabora is an online office suite based on LibreOffice and usable with Nextcloud or ownCloud. It allows you to edit text documents, tables, slideshows. The online edition can be done simultaneously and allows you to export and print documents using the generated PDF format. + +## Useful links + ++ Website: [www.collaboraoffice.com](https://www.collaboraoffice.com/) ++ Application software repository: [github.com - YunoHost-Apps/collabora](https://github.com/YunoHost-Apps/collabora_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/collabora/issues](https://github.com/YunoHost-Apps/collabora_ynh/issues) diff --git a/app_collaboradocker_fr.md b/pages/02.applications/02.docs/collaboradocker/app_collaboradocker.fr.md similarity index 56% rename from app_collaboradocker_fr.md rename to pages/02.applications/02.docs/collaboradocker/app_collaboradocker.fr.md index a9af6a57..ea0f7bae 100644 --- a/app_collaboradocker_fr.md +++ b/pages/02.applications/02.docs/collaboradocker/app_collaboradocker.fr.md @@ -1,16 +1,25 @@ -# Installer Collabora avec Nextcloud via Docker +--- +title: Collabora via Docker +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_collaboradocker' +--- -**Note :** la marche à suivre detaillée est réalisée ici à partir d’une instance Yunohost sur Debian 8 (celle-ci n'a pas été testée suite à la migration vers la version 3 de Yunohost). Ces instructions ont pour pré-requis que les domaines/sous-domaines sont correctement configurés au niveau des DNS et de votre instance Yunohost (voir [DNS](/dns), [DNS et installation d’une application sur un sous-domaine](/dns_subdomains), [Configurer les enregistrements DNS](/dns_config) et [Nom de domaine en noho.st / nohost.me / ynh.fr](/dns_nohost_me)). +# Installer Collabora avec Nextcloud avec Docker + +**Note :** la marche à suivre detaillée est réalisée ici à partir d’une instance YunoHost sur Debian 8 (celle-ci n'a pas été testée suite à la migration vers la version 3 de YunoHost). Ces instructions ont pour pré-requis que les domaines/sous-domaines sont correctement configurés au niveau des DNS et de votre instance YunoHost (voir [DNS](/dns_config), [DNS et installation d’une application sur un sous-domaine](/dns_subdomains), [Configurer les enregistrements DNS](/dns_config) et [Nom de domaine en noho.st / nohost.me / ynh.fr](/dns_nohost_me)). ### 0. Installer Nextcloud -Si l'application Nexcloud n'est pas déja installée sur votre instance Yunohost, vous pouvez l’installer depuis le lien suivant : [Installer Nextcloud](https://install-app.yunohost.org/?app=nextcloud) +Si l'application Nexcloud n'est pas déja installée sur votre instance YunoHost, vous pouvez l’installer depuis le lien suivant : [Installer Nextcloud](https://install-app.yunohost.org/?app=nextcloud) -### 1. Installer l'application Collabora dans yunohost +### 1. Installer l'application Collabora dans YunHost **dans l'interface d'administration :** -Applications > Installer > En bas de la page _Installer une application personnalisée_ > Renseigner l’url « https://github.com/aymhce/collaboradocker_ynh » > Définir le nom de domaine secondaire/sous-domaine dédié à l'application Collabora. +Applications > Installer > En bas de la page _Installer une application personnalisée_ > Renseigner l’URL « https://github.com/aymhce/collaboradocker_ynh » > Définir le nom de domaine secondaire/sous-domaine dédié à l'application Collabora. ### 2. Configuration dans Nextcloud @@ -22,10 +31,12 @@ Cliquer sur l'icône de l'utilisateur en haut à droite > Applications > Bure **Configurer Collabora sur Nextcloud :** Cliquer sur l'icone de l'utilisateur en haut à droite > Paramètres > Sous _Administration_, _Collabora en ligne_ . - Renseigner le « Serveur Collabora en ligne » par le nom de domaine choisi lors de l’installation de collabora dans yunohost (précédé de « https:// »). + Renseigner le « Serveur Collabora en ligne » par le nom de domaine choisi lors de l’installation de Collabora dans YunoHost (précédé de « https:// »). ### 3. Reboot + Pour permettre la mise en marche du lien collabora-Nextcloud, le système doit être rebooté. Faisable depuis l'interface d'administration : Outils > Arrêter/redémarrer > `Redémarrer`. Ou depuis la ligne de commande : ``sudo reboot now``. ## Débug -Suite à certaines mises à jour du système, de yunohost ou des applications, Collabora peut afficher un message d'erreur du type "c'est embarrassant...". Pour remettre les choses en marche, il suffit de redémarrer la machine docker, avec la commande ``systemctl restart docker``. + +Suite à certaines mises à jour du système, de YunoHost ou des applications, Collabora peut afficher un message d'erreur du type "c'est embarrassant...". Pour remettre les choses en marche, il suffit de redémarrer la machine docker, avec la commande `systemctl restart docker`. diff --git a/pages/02.applications/02.docs/collaboradocker/app_collaboradocker.md b/pages/02.applications/02.docs/collaboradocker/app_collaboradocker.md new file mode 100644 index 00000000..54e6017f --- /dev/null +++ b/pages/02.applications/02.docs/collaboradocker/app_collaboradocker.md @@ -0,0 +1,41 @@ +--- +title: Collabora via Docker +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_collaboradocker' +--- + +# Install Collabora with Nextcloud, using Docker + +**Note:** This walkthrough is based on a Debian 8 instance, and has not been tested since version 3 upgrade of YunoHost. As a prerequisite, you must have configured your domains and sub-domains in the DNS, in compliance with: [DNS](/dns_config), [Sub-domain install of an app](/dns_subdomains), [DNS settings](/dns_config) and [noho.st / nohost.me / ynh.fr domains](/dns_nohost_me). + +### 0. Install Nextcloud + +If Nextcloud is not already installed on your YunoHost instance, you may do so with this link: [Install Nextcloud](https://install-app.yunohost.org/?app=nextcloud) + +### 1. Install Collabora app within YunoHost + +**In the admin interface:** + +Applications > Install > at the bottom _Install a custom application_ > enter this URL « https://github.com/aymhce/collaboradocker_ynh » > Enter the domain/subdomain name you wish for the Collabora application. + +### 2. Configuration within Nextcloud + + **Add the Collabora Online application in Nextcloud:** + +Click on the user icon (top right) > Applications > Desktop & Text > Under the « Collabora Online » tile, click on `Activate` . + +**Setup Collabora in Nextcloud:** + +Click on the user icon (top right) > Parametres > Under _Administration_, _Collabora Online_ . +Specify the « Online Collabora server » with the domain name chosen during the Collabora install in YunoHost (full with « https:// »). + +### 3. Reboot + +To allow all the pieces to work, system must be reboot. You can do so through the admin interface (Tools > Stop/reboot > `Reboot`) or via the command line interface: `sudo reboot now`. + +## Debugging + +Following some system, YunoHost or app updates, Collabora may display an error message such as "It's embarrassing...". To put things back in order, you just have to restart the docker machine, with the command `systemctl restart docker`. diff --git a/pages/02.applications/02.docs/concrete5/app_concrete5.fr.md b/pages/02.applications/02.docs/concrete5/app_concrete5.fr.md new file mode 100644 index 00000000..d6d09c65 --- /dev/null +++ b/pages/02.applications/02.docs/concrete5/app_concrete5.fr.md @@ -0,0 +1,27 @@ +--- +title: Concret5 +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_concrete5' +--- + + + +[](https://install-app.yunohost.org/?app=concrete5) [](https://dash.yunohost.org/appci/app/concrete5) + +### Index + +- [Limitations avec YunoHost](#limitations-avec-yunohost) +- [Liens utiles](#liens-utiles) + +## Limitations avec YunoHost + +L'authentification LDAP et HTTP n'est pas prise en charge. + +## Liens utiles + ++ Site web : [documentation.concrete5.org (en)](https://documentation.concrete5.org/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/concrete5](https://github.com/YunoHost-Apps/concrete5_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/concrete5](https://github.com/YunoHost-Apps/concrete5_ynh/issues) diff --git a/pages/02.applications/02.docs/concrete5/app_concrete5.md b/pages/02.applications/02.docs/concrete5/app_concrete5.md new file mode 100644 index 00000000..75274cfd --- /dev/null +++ b/pages/02.applications/02.docs/concrete5/app_concrete5.md @@ -0,0 +1,27 @@ +--- +title: Concret5 +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_concrete5' +--- + + + +[](https://install-app.yunohost.org/?app=concrete5) [](https://dash.yunohost.org/appci/app/concrete5) + +### Index + +- [Limitations with YunoHost](#limitations-with-yunohost) +- [Useful links](#useful-links) + +## Limitations with YunoHost + +LDAP and HTTP auth are not supported. + +## Useful links + ++ Website: [documentation.concrete5.org](https://documentation.concrete5.org/) ++ Application software repository: [github.com - YunoHost-Apps/concrete5](https://github.com/YunoHost-Apps/concrete5_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/concrete5/issues](https://github.com/YunoHost-Apps/concrete5_ynh/issues) diff --git a/pages/02.applications/02.docs/cowyo/app_cowyo.fr.md b/pages/02.applications/02.docs/cowyo/app_cowyo.fr.md new file mode 100644 index 00000000..ba361bb1 --- /dev/null +++ b/pages/02.applications/02.docs/cowyo/app_cowyo.fr.md @@ -0,0 +1,30 @@ +--- +title: Cowyo +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_cowyo' +--- + + + +[](https://install-app.yunohost.org/?app=cowyo) [](https://ci-apps.yunohost.org/ci/apps/cowyo/) + +### Index + +- [Limitations avec YunoHost](#limitations-avec-yunohost) +- [Liens utiles](#liens-utiles) + +Cowyo est un serveur wiki autonome qui permet de prendre des notes facilement et rapidement. La caractéristique la plus importante ici est la simplicité. Les autres caractéristiques sont le versionnage, le verrouillage des pages, les messages autodestructeurs, le cryptage et la lisibilité. + +## Limitations avec YunoHost + +De par sa conception, Cowyo a besoin de son propre domaine dédié. Il ne supporte pas les multiples utilisateurs. + +## Liens utiles + ++ Site web (demo) : [cowyo.com](https://cowyo.com) ++ Documentation officielle : [github.com - schollz/cowyo/README (en)](https://github.com/schollz/cowyo/blob/master/README.md) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/cowyo](https://github.com/YunoHost-Apps/cowyo_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/cowyo](https://github.com/YunoHost-Apps/cowyo_ynh/issues) diff --git a/pages/02.applications/02.docs/cowyo/app_cowyo.md b/pages/02.applications/02.docs/cowyo/app_cowyo.md new file mode 100644 index 00000000..75f64fab --- /dev/null +++ b/pages/02.applications/02.docs/cowyo/app_cowyo.md @@ -0,0 +1,30 @@ +--- +title: Cowyo +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_cowyo' +--- + + + +[](https://install-app.yunohost.org/?app=cowyo) [](https://ci-apps.yunohost.org/ci/apps/cowyo/) + +### Index + +- [Limitations with YunoHost](#limitations-with-yunohost) +- [Useful links](#useful-links) + +Cowyo is a self-contained wiki server that makes jotting notes easy and fast. The most important feature here is simplicity. Other features include versioning, page locking, self-destructing messages, encryption, and listifying. + +## Limitations with YunoHost + +By design, cowyo requires its own domain. He does not support multiple users. + +## Useful links + ++ Website (demo): [cowyo.com](https://cowyo.com) ++ Official documentation: [github.com - schollz/cowyo/README](https://github.com/schollz/cowyo/blob/master/README.md) ++ Application software repository: [github.com - YunoHost-Apps/cowyo](https://github.com/YunoHost-Apps/cowyo_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/cowyo/issues](https://github.com/YunoHost-Apps/cowyo_ynh/issues) diff --git a/pages/02.applications/02.docs/diagramsnet/app_diagramsnet.fr.md b/pages/02.applications/02.docs/diagramsnet/app_diagramsnet.fr.md new file mode 100644 index 00000000..2fcaee5f --- /dev/null +++ b/pages/02.applications/02.docs/diagramsnet/app_diagramsnet.fr.md @@ -0,0 +1,33 @@ +--- +title: Diagram.net +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_diagramsnet' +--- + + + +[](https://install-app.yunohost.org/?app=diagramsnet) [](https://dash.yunohost.org/appci/app/diagramsnet) + +### Index + +- [Liens utiles](#liens-utiles) + +diagrams.net vous permet de créer un large éventail de diagrammes, allant de simples arborescences et organigrammes, à des diagrammes très techniques de réseaux, de baies et d'électricité. + +Il s'agit d'un éditeur et d'un visualiseur de diagrammes en ligne gratuit qui propose une grande variété de formes, d'icônes, de connecteurs et de modèles pour vous aider à démarrer rapidement. Il est également doté de fonctions qui permettent aux utilisateurs expérimentés de se sentir chez eux.[¹](#sources) + +## Liens utiles + + + Site web : [www.diagrams.net (en)](https://www.diagrams.net/index.html) + + Documentation officielle : [www.diagrams.net - doc (en)](https://www.diagrams.net/doc/) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/diagramsnet](https://github.com/YunoHost-Apps/diagramsnet_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/diagramsnet/issues](https://github.com/YunoHost-Apps/diagramsnet_ynh/issues) + + ------ + +### Sources + + ¹ [www.diagrams.net - about (en)](https://www.diagrams.net/about.html) diff --git a/pages/02.applications/02.docs/diagramsnet/app_diagramsnet.md b/pages/02.applications/02.docs/diagramsnet/app_diagramsnet.md new file mode 100644 index 00000000..b16657eb --- /dev/null +++ b/pages/02.applications/02.docs/diagramsnet/app_diagramsnet.md @@ -0,0 +1,33 @@ +--- +title: Diagrams.net +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_diagramsnet' +--- + + + +[](https://install-app.yunohost.org/?app=diagramsnet) [](https://dash.yunohost.org/appci/app/diagramsnet) + +### Index + +- [Useful links](#useful-links) + +diagrams.net lets you create a wide range of diagrams, from simple tree and flow diagrams, to highly technical network, rack and electrical diagrams. + +It’s a free, online diagram editor and viewer with a wide variety of shapes, icons, connector and templates to help you get started quickly. It’s also feature-rich–experienced diagrammers will feel at home.[¹](#sources) + +## Useful links + ++ Website: [www.diagrams.net](https://www.diagrams.net/index.html) ++ Official documentation: [www.diagrams.net - doc](https://www.diagrams.net/doc/) ++ Application software repository: [github.com - YunoHost-Apps/diagramsnet](https://github.com/YunoHost-Apps/diagramsnet_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/diagramsnet/issues](https://github.com/YunoHost-Apps/diagramsnet_ynh/issues) + +----- + +### Sources + +¹ [www.diagrams.net - about](https://www.diagrams.net/about.html) diff --git a/pages/02.applications/02.docs/discourse/app_discourse.fr.md b/pages/02.applications/02.docs/discourse/app_discourse.fr.md new file mode 100644 index 00000000..4a7c6592 --- /dev/null +++ b/pages/02.applications/02.docs/discourse/app_discourse.fr.md @@ -0,0 +1,36 @@ +--- +title: Discourse +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_discourse' +--- + + + +[](https://install-app.yunohost.org/?app=discourse) [](https://ci-apps.yunohost.org/jenkins/job/discourse%20%28Community%29/lastBuild/consoleFull) + +### Index + +- [Limitations avec YunoHost](#limitations-avec-yunohost) +- [Liens utiles](#liens-utiles) + +Discourse dispose des fonctionnalités usuelles d’un forum de discussion : utilisateurs, discussions, recherche, messages privés, etc. Le mode « liste de diffusion » permet d’utiliser la plupart des fonctionnalités du forum via des courriers électroniques. Écrit en ruby et en JavaScript, il nécessite une base de données PostgreSQL et un serveur d’envoi de courrier électronique.[¹](#sources) + +## Limitations avec YunoHost + +Dans le tableau de bord de l'administration, la version installée est indiquée comme inconnue (du fait que nous n'utilisons pas Git pour l'installation) ; vous pouvez ignorer cela sans risque car le paquet YunoHost sera maintenu. Sur les appareils ARM, les avatars générés par défaut ne portent pas les initiales du profil (il ne s'agit que d'un simple disque). + +## Liens utiles + + + Site web : [www.discourse.org (en)](https://www.discourse.org/) + + Documentation officielle : [www.discourse.org - customers (en)](https://www.discourse.org/customers) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/discourse](https://github.com/YunoHost-Apps/discourse_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/discourse/issues](https://github.com/YunoHost-Apps/discourse_ynh/issues) + + ------ + +### Sources + +¹ [framalibre.org - Discourse](https://framalibre.org/content/discourse) diff --git a/pages/02.applications/02.docs/discourse/app_discourse.md b/pages/02.applications/02.docs/discourse/app_discourse.md new file mode 100644 index 00000000..c7a48b3a --- /dev/null +++ b/pages/02.applications/02.docs/discourse/app_discourse.md @@ -0,0 +1,36 @@ +--- +title: Discourse +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_discourse' +--- + + + +[](https://install-app.yunohost.org/?app=discourse) [](https://ci-apps.yunohost.org/jenkins/job/discourse%20%28Community%29/lastBuild/consoleFull) + +### Index + +- [Limitations with YunoHost](#limitations-with-yunohost) +- [Useful links](#useful-links) + +Discourse has all the usual features of a discussion forum: users, discussions, search, private messages, etc. The "mailing list" mode allows you to use most of the forum's functionalities via e-mail. Written in Ruby and JavaScript, it requires a PostgreSQL database and a mail server.[¹](#sources) + +## Limitations with YunoHost + +In the administration dashboard, The installed version is shown as unknown (due the fact that we don't use Git for installation); you can safely ignore that as the YunoHost package will be maintained. On ARM devices, default generated avatars are missing the profile initials (they are only a plain discus). + +## Useful links + ++ Website: [www.discourse.org](https://www.discourse.org/) ++ Official documentation: [www.discourse.org - customers](https://www.discourse.org/customers) ++ Application software repository: [github.com - YunoHost-Apps/discourse](https://github.com/YunoHost-Apps/discourse_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/discourse/issues](https://github.com/YunoHost-Apps/discourse_ynh/issues) + +----- + +### Sources + +¹ [framalibre.org - Discourse (fr)](https://framalibre.org/content/discourse) diff --git a/pages/02.applications/02.docs/distbin/app_distbin.fr.md b/pages/02.applications/02.docs/distbin/app_distbin.fr.md new file mode 100644 index 00000000..0106e2f1 --- /dev/null +++ b/pages/02.applications/02.docs/distbin/app_distbin.fr.md @@ -0,0 +1,26 @@ +--- +title: Distbin +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_distbin' +--- + + + +[](https://install-app.yunohost.org/?app=distbin) [](https://dash.yunohost.org/appci/app/distbin) + +### Index + +- [Liens utiles](#liens-utiles) + +Un pastebin distribué, c'est-à-dire un service où n'importe qui peut poster des choses sur le Web, et d'autres peuvent réagir en postant n'importe où ailleurs sur le Web (y compris ici). + +Un endroit en réseau pour stocker les documents Web postés. Ceci est destiné à permettre la distribution de commentaires et de réactions sociales autour de ces documents en utilisant les meilleures pratiques recommandées ou notées par le groupe de travail du W3C sur le Web social. + +## Liens utiles + + + Documentation officielle : [github.com - gobengo/distbin (en)](https://github.com/gobengo/distbin) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/distbin](https://github.com/YunoHost-Apps/distbin_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/distbin/issues](https://github.com/YunoHost-Apps/distbin_ynh/issues) diff --git a/pages/02.applications/02.docs/distbin/app_distbin.md b/pages/02.applications/02.docs/distbin/app_distbin.md new file mode 100644 index 00000000..aa3bc2d1 --- /dev/null +++ b/pages/02.applications/02.docs/distbin/app_distbin.md @@ -0,0 +1,26 @@ +--- +title: Distbin +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_distbin' +--- + + + +[](https://install-app.yunohost.org/?app=distbin) [](https://dash.yunohost.org/appci/app/distbin) + +### Index + +- [Useful links](#useful-links) + +A distributed pastebin. i.e. it is a service where anyone can post things on the web, and others can react by posting anywhere else on the web (including here). + +A networked place to store posted web documents. This is meant to allow for distributed social commentary and reaction around these documents using best practices recommended or noted by the W3C Social Web Working Group. + +## Useful links + ++ Official documentation: [github.com - gobengo/distbin](https://github.com/gobengo/distbin) ++ Application software repository: [github.com - YunoHost-Apps/distbin](https://github.com/YunoHost-Apps/distbin_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/distbin/issues](https://github.com/YunoHost-Apps/distbin_ynh/issues) diff --git a/pages/02.applications/02.docs/docs.md b/pages/02.applications/02.docs/docs.md new file mode 100644 index 00000000..86418a54 --- /dev/null +++ b/pages/02.applications/02.docs/docs.md @@ -0,0 +1,21 @@ +--- +title: Documentations +content: + order: + by: basename + dir: asc + pagination: false + url_taxonomy_filters: true + items: + - '@self.children' + - '@taxonomy.category': [docs, apps] +twig_first: true +process: + twig: true +--- + +<ul> +{% for p in page.collection %} + <li><a href="{{ p.url }}">{{ p.title|e }}</a></li> +{% endfor %} +</ul> diff --git a/pages/02.applications/02.docs/dokuwiki/app_dokuwiki.fr.md b/pages/02.applications/02.docs/dokuwiki/app_dokuwiki.fr.md new file mode 100644 index 00000000..755e6c99 --- /dev/null +++ b/pages/02.applications/02.docs/dokuwiki/app_dokuwiki.fr.md @@ -0,0 +1,36 @@ +--- +title: DokuWiki +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_dokuwiki' +--- + + + +[](https://install-app.yunohost.org/?app=dokuwiki) [](https://dash.yunohost.org/appci/app/dokuwiki) + +### Index + +- [Limitations avec YunoHost](#limitations-avec-yunohost) +- [Liens utiles](#liens-utiles) + +DokuWiki est un moteur de wiki libre sous licence GNU GPL conforme aux standards, simple à utiliser, dont le but principal est de créer des documentations de toute sorte. Ce logiciel est développé en PHP par Andreas Gohr. [...] Il a une syntaxe simple qui assure la lisibilité des fichiers de données en dehors du Wiki, et facilite la création de textes structurés. Toutes les données sont stockées dans des fichiers texte, et donc aucune base de données n’est nécessaire.[¹](#sources) + +## Limitations avec YunoHost + +Il est pour le moment impossible d'ajouter et d'utiliser les utilisateurs internes de DokuWiki, seulement ceux de YunoHost. + +## Liens utiles + ++ Site web : [dokuwiki.org](https://www.dokuwiki.org/start?id=fr:dokuwiki) ++ Documentation officielle : [dokuwiki.org - Manuel Dokuwiki](https://www.dokuwiki.org/start?id=fr:manual) ++ Dépôt logiciel de l'application : [github.com - YunoHost-App/dokuwiki](https://github.com/YunoHost-Apps/dokuwiki_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/dokuwiki/issues](https://github.com/YunoHost-Apps/dokuwiki_ynh/issues) + +------ + +### Sources + +¹ [wikipedia.org - Dokuwiki](https://fr.wikipedia.org/wiki/DokuWiki) diff --git a/pages/02.applications/02.docs/dokuwiki/app_dokuwiki.md b/pages/02.applications/02.docs/dokuwiki/app_dokuwiki.md new file mode 100644 index 00000000..2f737c9e --- /dev/null +++ b/pages/02.applications/02.docs/dokuwiki/app_dokuwiki.md @@ -0,0 +1,36 @@ +--- +title: DokuWiki +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_dokuwiki' +--- + + + +[](https://install-app.yunohost.org/?app=dokuwiki) [](https://dash.yunohost.org/appci/app/dokuwiki) + +### Index + +- [Limitations with YunoHost](#limitations-with-yunohost) +- [Useful links](#useful-links) + +DokuWiki is a standards-compliant, easy-to-use, standards-compliant GNU GPL free wiki engine whose main purpose is to create documentation of all kinds. This software is developed in PHP by Andreas Gohr. ...] It has a simple syntax that ensures the readability of data files outside of the wiki, and facilitates the creation of structured texts. All data is stored in text files, so no database is needed. [¹](#sources) + +## Limitations with YunoHost + +It is currently impossible to add and use internal DokuWiki users, only YunoHost users. + +## Useful links + ++ Website: [dokuwiki.org](https://dokuwiki.org) ++ Official documentation: [dokuwiki.org - Manual](https://www.dokuwiki.org/manual) ++ Application software repository: [github.com - YunoHost-App/dokuwiki](https://github.com/YunoHost-Apps/dokuwiki_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com -YunoHost-Apps/dokuwiki/issues](https://github.com/YunoHost-Apps/dokuwiki_ynh/issues) + +------ + +### Sources + +¹ [wikipedia.org - Dokuwiki (fr)](https://fr.wikipedia.org/wiki/DokuWiki) diff --git a/pages/02.applications/02.docs/dolibarr/app_dolibarr.fr.md b/pages/02.applications/02.docs/dolibarr/app_dolibarr.fr.md new file mode 100644 index 00000000..7a1afd2f --- /dev/null +++ b/pages/02.applications/02.docs/dolibarr/app_dolibarr.fr.md @@ -0,0 +1,36 @@ +--- +title: Dolibarr +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_dolibarr' +--- + + + +[](https://install-app.yunohost.org/?app=dolibarr) [](https://dash.yunohost.org/appci/app/dolibarr) + +### Index + +- [Limitations avec YunoHost](#limitations-avec-yunohost) +- [Liens utiles](#liens-utiles) + +Dolibarr ERP/CRM est un progiciel de gestion intégré (PGI, ERP en anglais) et gestion de la relation client (GRC, CRM en anglais) open source pour les petites et moyennes entreprises, les indépendants, auto-entrepreneurs ou les associations.[¹](#sources) + +## Limitations avec YunoHost + +Dolibarr doit être une application non publique pour pouvoir relier les comptes des YunoHost. La suppression d'un compte n'est pas prise en compte dans Dolibarr. + +## Liens utiles + + + Site web : [www.dolibarr.fr](https://www.dolibarr.fr/) + + Documentation officielle : [www.dolibarr.fr - documentation](https://www.dolibarr.fr/documentation) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/dolibarr](https://github.com/YunoHost-Apps/dolibarr_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/dolibarr/issues](https://github.com/YunoHost-Apps/dolibarr_ynh/issues) + + ------ + +### Sources + + ¹ [wikipedia.org - Dolibarr](https://fr.wikipedia.org/wiki/Dolibarr) diff --git a/pages/02.applications/02.docs/dolibarr/app_dolibarr.md b/pages/02.applications/02.docs/dolibarr/app_dolibarr.md new file mode 100644 index 00000000..ae1c5406 --- /dev/null +++ b/pages/02.applications/02.docs/dolibarr/app_dolibarr.md @@ -0,0 +1,36 @@ +--- +title: Dolibarr +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_dolibarr' +--- + + + +[](https://install-app.yunohost.org/?app=dolibarr) [](https://dash.yunohost.org/appci/app/dolibarr) + +### Index + +- [Limitations with YunoHost](#limitations-with-yunohost) +- [Useful links](#useful-links) + +Dolibarr ERP CRM is an open source, free software package for small and medium companies, foundations or freelancers. It includes different features for enterprise resource planning (ERP) and customer relationship management (CRM) but also other features for different activities.[¹](#sources) + +## Limitations with YunoHost + +Dolibarr must be a non-public application to be able to link YunoHost accounts. The deletion of an account is not taken into account in Dolibarr. + +## Useful links + ++ Website: [www.dolibarr.org](https://www.dolibarr.org/) ++ Official documentation: [www.dolibarr.org - documentation-home](https://www.dolibarr.org/documentation-home) ++ Application software repository: [github.com - YunoHost-Apps/dolibarr](https://github.com/YunoHost-Apps/dolibarr_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/dolibarr/issues](https://github.com/YunoHost-Apps/dolibarr_ynh/issues) + +----- + +### Sources + +¹ [wikipedia.org - Dolibarr](https://en.wikipedia.org/wiki/Dolibarr) diff --git a/pages/02.applications/02.docs/dotclear2/app_dotclear2.fr.md b/pages/02.applications/02.docs/dotclear2/app_dotclear2.fr.md new file mode 100644 index 00000000..87b356a3 --- /dev/null +++ b/pages/02.applications/02.docs/dotclear2/app_dotclear2.fr.md @@ -0,0 +1,33 @@ +--- +title: Dotclear 2 +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_dotclear2' +--- + + + +[](https://install-app.yunohost.org/?app=dotclear2) [](https://dash.yunohost.org/appci/app/dotclear2) + +### Index + +- [Liens utiles](#liens-utiles) + +Dotclear est une application de publication de blogs à code source libre distribuée sous la licence GNU GPLv2. Développé à l'origine par Olivier Meunier à partir de 2002, Dotclear a maintenant attiré une solide équipe de développeurs. Il est relativement populaire dans les pays francophones, où il est utilisé par plusieurs grandes plateformes de blogs (Gandi Blogs, Marine nationale, etc.). + +L'objectif proposé par Dotclear est de développer un logiciel qui respecte pleinement les standards du web basés sur des solutions open source, avec une interface et des capacités de publication multilingues. Il est écrit en PHP.[¹](#sources) + +## Liens utiles + + + Site web : [dotclear.org](https://fr.dotclear.org/) + + Documentation officielle : [dotclear.org - documentation](https://fr.dotclear.org/documentation/) + + Dépôt logiciel de l'application : [github.com - YunoHost- Apps/dotclear2](https://github.com/YunoHost-Apps/dotclear2_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/dotclear2/issues](https://github.com/YunoHost-Apps/dotclear2_ynh/issues) + + ------ + +### Sources + +¹ [wikipedia.org - Dotclear (en)](https://en.wikipedia.org/wiki/Dotclear) diff --git a/pages/02.applications/02.docs/dotclear2/app_dotclear2.md b/pages/02.applications/02.docs/dotclear2/app_dotclear2.md new file mode 100644 index 00000000..10998e55 --- /dev/null +++ b/pages/02.applications/02.docs/dotclear2/app_dotclear2.md @@ -0,0 +1,33 @@ +--- +title: Dotclear 2 +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_dotclear2' +--- + + + +[](https://install-app.yunohost.org/?app=dotclear2) [](https://dash.yunohost.org/appci/app/dotclear2) + +### Index + +- [Useful links](#useful-links) + +Dotclear is an open-source blog publishing application distributed under the GNU GPLv2. Developed originally by Olivier Meunier from 2002, Dotclear has now attracted a solid team of developers. It is relatively popular in French speaking countries, where it is used by several major blogging platforms (Gandi Blogs, Marine nationale, etc.). + +Dotclear's proposed aim is to develop a software that fully respects web standards based on open source solutions, with multilingual interface and publishing capabilities. It is written in PHP. [¹](#sources) + +## Useful links + ++ Website: [dotclear.org](https://dotclear.org/) ++ Official documentation: [dotclear.org - documentation/2.0](https://dotclear.org/documentation/2.0) ++ Application software repository: [github.com - YunoHost-Apps/dotclear2](https://github.com/YunoHost-Apps/dotclear2_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/dotclear2/issues](https://github.com/YunoHost-Apps/dotclear2_ynh/issues) + +----- + +### Sources + +¹ [wikipedia.org - Dotclear](https://en.wikipedia.org/wiki/Dotclear) diff --git a/pages/02.applications/02.docs/drupal/app_drupal.fr.md b/pages/02.applications/02.docs/drupal/app_drupal.fr.md new file mode 100644 index 00000000..812f09b7 --- /dev/null +++ b/pages/02.applications/02.docs/drupal/app_drupal.fr.md @@ -0,0 +1,31 @@ +--- +title: Drupal +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_drupal' +--- + + + +[](https://install-app.yunohost.org/?app=drupal) [](https://dash.yunohost.org/appci/app/drupal) + +### Index + +- [Liens utiles](#liens-utiles) + +Drupal est un système de gestion de contenu (CMS) libre et open-source publié sous la licence publique générale GNU et écrit en PHP.[¹](#sources) + +## Liens utiles + + + Site web : [www.drupal.fr](https://www.drupal.fr/) + + Documentation officielle : [www.drupal.fr - documentation](https://www.drupal.fr/documentation) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/drupal](https://github.com/YunoHost-Apps/drupal_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/drupal/issues](https://github.com/YunoHost-Apps/drupal_ynh/issues) + + ------ + + ### Sources + + ¹ [wikipedia.org - Drupal](https://fr.wikipedia.org/wiki/Drupal) diff --git a/pages/02.applications/02.docs/drupal/app_drupal.md b/pages/02.applications/02.docs/drupal/app_drupal.md new file mode 100644 index 00000000..1a45177f --- /dev/null +++ b/pages/02.applications/02.docs/drupal/app_drupal.md @@ -0,0 +1,31 @@ +--- +title: Drupal +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_drupal' +--- + + + +[](https://install-app.yunohost.org/?app=drupal) [](https://dash.yunohost.org/appci/app/drupal) + +### Index + +- [Useful links](#useful-links) + +Drupal is a free and open-source web content management framework written in PHP and distributed under the GNU General Public License. Drupal provides a back-end framework for at least 2.3% of all websites worldwide – ranging from personal blogs to corporate, political, and government sites. Systems also use Drupal for knowledge management and for business collaboration.[¹](#sources) + +## Useful links + ++ Website: [www.drupal.org](https://www.drupal.org/) ++ Official documentation: [www.drupal.org - documentation](https://www.drupal.org/documentation) ++ Application software repository: [github.com - YunoHost-Apps/drupal](https://github.com/YunoHost-Apps/drupal_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/drupal/issues](https://github.com/YunoHost-Apps/drupal_ynh/issues) + +----- + +### Sources + +¹ [wikipedia.org - Drupal](https://en.wikipedia.org/wiki/Drupal) diff --git a/pages/02.applications/02.docs/drupal7/app_drupal7.fr.md b/pages/02.applications/02.docs/drupal7/app_drupal7.fr.md new file mode 100644 index 00000000..9d72a3fe --- /dev/null +++ b/pages/02.applications/02.docs/drupal7/app_drupal7.fr.md @@ -0,0 +1,32 @@ +--- +title: Drupal 7 +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_drupal7' +--- + + + +[](https://install-app.yunohost.org/?app=drupal) [](https://dash.yunohost.org/appci/app/drupal) + +### Index + +- [Liens utiles](#liens-utiles) + +Drupal1 est un système de gestion de contenu (CMS) libre et open-source publié sous la licence publique générale GNU et écrit en PHP.[¹](#sources) + Cette application YunoHost propose uniquement la version 7 de Drupal, si vous désirez la dernière version disponible pour YunoHost [voir ici](/app_drupal) + +## Liens utiles + + + Site web : [www.drupal.fr](https://www.drupal.fr/) + + Documentation officielle : [www.drupal.org - docs/7 (en)](https://www.drupal.org/docs/7) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/drupal7](https://github.com/YunoHost-Apps/drupal7_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/drupal7/issues](https://github.com/YunoHost-Apps/drupal7_ynh/issues) + + ------ + +### Sources + + ¹ [wikipedia.org - Drupal](https://fr.wikipedia.org/wiki/Drupal) diff --git a/pages/02.applications/02.docs/drupal7/app_drupal7.md b/pages/02.applications/02.docs/drupal7/app_drupal7.md new file mode 100644 index 00000000..6539cd6d --- /dev/null +++ b/pages/02.applications/02.docs/drupal7/app_drupal7.md @@ -0,0 +1,32 @@ +--- +title: Drupal 7 +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_drupal7' +--- + + + +[](https://install-app.yunohost.org/?app=drupal) [](https://dash.yunohost.org/appci/app/drupal) + +### Index + +- [Useful links](#useful-links) + +Drupal is a free and open-source web content management framework written in PHP and distributed under the GNU General Public License. Drupal provides a back-end framework for at least 2.3% of all websites worldwide – ranging from personal blogs to corporate, political, and government sites. Systems also use Drupal for knowledge management and for business collaboration.[¹](#sources) + This YunoHost application offers only version 7 of Drupal, if you want the latest version available for YunoHost [see here](/app_drupal) + +## Useful links + ++ Website: [www.drupal.org](https://www.drupal.org/) ++ Official documentation: [www.drupal.fr - docs/7](https://www.drupal.org/docs/7) ++ Application software repository: [github.com - YunoHost-Apps/drupal](https://github.com/YunoHost-Apps/drupal_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/drupal/issues](https://github.com/YunoHost-Apps/drupal_ynh/issues) + +----- + +### Sources + +¹ [wikipedia.org - Drupal](https://en.wikipedia.org/wiki/Drupal) diff --git a/pages/02.applications/02.docs/etherpad_mypads/app_etherpad_mypads.fr.md b/pages/02.applications/02.docs/etherpad_mypads/app_etherpad_mypads.fr.md new file mode 100644 index 00000000..97a49f9a --- /dev/null +++ b/pages/02.applications/02.docs/etherpad_mypads/app_etherpad_mypads.fr.md @@ -0,0 +1,38 @@ +--- +title: Etherpad avec plugin MyPads +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_etherpad_mypads' +--- + + + +[](https://install-app.yunohost.org/?app=etherpad_mypads) [](https://dash.yunohost.org/appci/app/etherpad_mypads) + +### Index + +- [Configuration](#configuration) +- [Liens utiles](#liens-utiles) + +Etherpad est un éditeur de texte libre en ligne fonctionnant en mode collaboratif et en temps réel. Il permet à plusieurs personnes de partager l'élaboration simultanée d'un texte, et d'en discuter en parallèle, via une messagerie instantanée. Il peut avoir des usages pédagogiques, notamment pour l'apprentissage collaboratif.[¹](#sources) + +## Configuration + +Il est possible d'accéder à deux panneaux de configurations : + + pour Etherpad : `domaine.tld/admin` + + pour MyPads : `domaine.tld/mypads/?/admin` + +## Liens utiles + ++ Site web : [etherpad.org (en)](https://etherpad.org/) ++ Documentation officielle : [etherpad.org - doc (en)](https://etherpad.org/doc/v1.8.4/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-App/etherpad_mypads](https://github.com/YunoHost-Apps/etherpad_mypads_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/etherpad_mypads/issues](https://github.com/YunoHost-Apps/etherpad_mypads_ynh/issues) + +------ + +### Sources + +¹ [wikipedia.org - Etherpad](https://fr.wikipedia.org/wiki/Etherpad) diff --git a/pages/02.applications/02.docs/etherpad_mypads/app_etherpad_mypads.md b/pages/02.applications/02.docs/etherpad_mypads/app_etherpad_mypads.md new file mode 100644 index 00000000..ceea1437 --- /dev/null +++ b/pages/02.applications/02.docs/etherpad_mypads/app_etherpad_mypads.md @@ -0,0 +1,38 @@ +--- +title: Etherpad with MyPads plugin +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_etherpad_mypads' +--- + + + +[](https://install-app.yunohost.org/?app=etherpad_mypads) [](https://dash.yunohost.org/appci/app/etherpad_mypads) + +### Index + +- [Configuration](#configuration) +- [Useful links](#useful-links) + +Etherpad is an online free text editor working in collaborative mode and in real time. It allows several people to share the simultaneous creation of a text, and to discuss it in parallel, via instant messaging. It can have pedagogical uses, especially for collaborative learning.[¹](#sources) + +## Configuration + +Two control panels can be accessed: + + for Etherpad: `domain.tld/admin`. + + for MyPads: `domain.tld/mypads/?/admin`. + +## Useful links + ++ Website: [etherpad.org](https://etherpad.org/) ++ Official documentation: [etherpad.org - doc](https://etherpad.org/doc/v1.8.4/) ++ Application software repository: [github.com - YunoHost-App/etherpad_mypads](https://github.com/YunoHost-Apps/etherpad_mypads_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/etherpad_mypads/issues](https://github.com/YunoHost-Apps/etherpad_mypads_ynh/issues) + +------ + +### Sources + +¹ [wikipedia.org - Etherpad (fr)](https://fr.wikipedia.org/wiki/Etherpad) diff --git a/pages/02.applications/02.docs/fallback/app_fallback.fr.md b/pages/02.applications/02.docs/fallback/app_fallback.fr.md new file mode 100644 index 00000000..300f83a1 --- /dev/null +++ b/pages/02.applications/02.docs/fallback/app_fallback.fr.md @@ -0,0 +1,29 @@ +--- +title: Fallback +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_fallback' +--- + + + +[](https://install-app.yunohost.org/?app=fallback) [](https://dash.yunohost.org/appci/app/fallback) + +### Index + +- [Configuration](#configuration) +- [Liens utiles](#liens-utiles) + +Fallback est une application spéciale, uniquement par interface de ligne de commande, qui permet d'avoir un serveur secondaire que vous pouvez utiliser si votre serveur principal tombe en panne. +Cet autre serveur vous permettra de déployer une copie de votre serveur pour vous ramener sur internet pendant votre panne. + +## Configuration + +Après l'installation, vous ne devriez plus avoir rien à configurer. Si vous le souhaitez quand même, vous pouvez trouver la liste des applications à sauvegarder dans le fichier `/home/yunohost.app/fallback/app_list` et une configuration globale dans cet autre fichier `/home/yunohost.app/fallback/config.conf` + +## Liens utiles + + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/fallback](https://github.com/YunoHost-Apps/fallback_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/fallback/issues](https://github.com/YunoHost-Apps/fallback_ynh/issues) diff --git a/pages/02.applications/02.docs/fallback/app_fallback.md b/pages/02.applications/02.docs/fallback/app_fallback.md new file mode 100644 index 00000000..81da072d --- /dev/null +++ b/pages/02.applications/02.docs/fallback/app_fallback.md @@ -0,0 +1,29 @@ +--- +title: Fallback +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_fallback' +--- + + + +[](https://install-app.yunohost.org/?app=fallback) [](https://dash.yunohost.org/appci/app/fallback) + +### Index + +- [Configuration](#configuration) +- [Useful links](#useful-links) + +Fallback is a special app, only by command line interface, which provide a way to have a secondary server which you can used if your main server goes down. +This other server will allow you to deploy a copy of your server to bring back you to internet during your break down. + +## Configuration + +After the installation, you should not have anything else to configure. If you want anyway, you can find the list of app to backup in the file `/home/yunohost.app/fallback/app_list` and a global configuration in this other file `/home/yunohost.app/fallback/config.conf` + +## Useful links + ++ Application software repository: [github.com - YunoHost-Apps/fallback](https://github.com/YunoHost-Apps/fallback_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/fallback/issues](https://github.com/YunoHost-Apps/fallback_ynh/issues) diff --git a/pages/02.applications/02.docs/ffsync/app_ffsync.fr.md b/pages/02.applications/02.docs/ffsync/app_ffsync.fr.md new file mode 100644 index 00000000..dedf3a39 --- /dev/null +++ b/pages/02.applications/02.docs/ffsync/app_ffsync.fr.md @@ -0,0 +1,47 @@ +--- +title: Firefox Sync +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_ffsync' +--- + + + +[](https://install-app.yunohost.org/?app=ffsync) [](https://dash.yunohost.org/appci/app/ffsync) + +### Index + +- [Configuration](#configuration) + - [Firefox bureau](#firefox-bureau) + - [Firefox mobile](#firefox-mobile) +- [Limitations avec YunoHost](#limitations-avec-yunohost) +- [Liens utiles](#liens-utiles) + +Firefox Sync permet la synchronisation des favoris, des marques-pages, de l’historique, des onglets, des extensions entre plusieurs instances du navigateur web Firefox. + +## Configuration + +Une fois installé, le site `domain.tld/path` devrait afficher une page expliquant comment le configurer. +Pour utiliser votre serveur personnel de synchronisation Firefox, vous allez devoir configurer votre explorateur internet [Firefox](https://www.mozilla.org/fr/firefox/new/). + +### Firefox bureau + +1. Une fois Firefox lancé ouvrer cette adresse URL : `about:config` +2. Recherchez : `identity.sync.tokenserver.uri` +3. Remplacez l’URL par la vôtre : `https://mondomaine.tld/adresse/token/1.0/sync/1.5` +4. Créez un compte chez Mozilla : https://accounts.firefox.com/signup + +### Firefox mobile + +Avec les versions récentes de Firefox pour mobile la démarche est identique à la version bureau. + +## Limitations avec YunoHost + +Par défaut, un serveur configuré reportera l'authentification sur le serveur de comptes hébergé par Mozilla à l'adresse https://accounts.firefox.com. Vous devrez donc toujours vous authentifier sur Mozilla, mais le stockage de vos informations se fera sur votre hôte. + +## Liens utiles + + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/APPLICATION](https://github.com/YunoHost-Apps/ffsync_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/ffsync/issues](https://github.com/YunoHost-Apps/ffsync_ynh/issues) diff --git a/app_ffsync_it.md b/pages/02.applications/02.docs/ffsync/app_ffsync.it.md similarity index 83% rename from app_ffsync_it.md rename to pages/02.applications/02.docs/ffsync/app_ffsync.it.md index c83e4b64..80c7ff03 100644 --- a/app_ffsync_it.md +++ b/pages/02.applications/02.docs/ffsync/app_ffsync.it.md @@ -1,4 +1,12 @@ -# Firefox Sync +--- +title: FireFox Sync +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_ffsync' +--- + Firefox Sync permette la sincronizzazione di plugin, schede, segnalibri, preferiti e cronologia fra diverse istanze di Firefox. ## Configurazione di Firefox diff --git a/pages/02.applications/02.docs/ffsync/app_ffsync.md b/pages/02.applications/02.docs/ffsync/app_ffsync.md new file mode 100644 index 00000000..7d75f891 --- /dev/null +++ b/pages/02.applications/02.docs/ffsync/app_ffsync.md @@ -0,0 +1,47 @@ +--- +title: Firefox Sync +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_ffsync' +--- + + + +[](https://install-app.yunohost.org/?app=ffsync) [](https://dash.yunohost.org/appci/app/ffsync) + +### Index + +- [Configuration](#configuration) + - [Firefox desktop](#firefox-desktop) + - [Firefox mobile](#firefox-mobile) +- [Limitations with YunoHost](#limitations-with-yunohost) +- [Useful links](#useful-links) + +Firefox Sync permits synchronize plugins, tabs, bookmarks, favorites, history over many Firefox instances. + +## Configuration + +Once installed, the `domain.tld/path` site should display a page explaining how to configure it. +To use your personal Firefox sync server, you will need to configure your [Firefox](https://www.mozilla.org/fr/firefox/new/) web browser. + +### Firefox desktop + +1. In Firefox URL bar put: `about:config`. +2. Search for: `identity.sync.tokenserver.uri`. +3. Replace the URL by: https://mydomain.tld/path/token/1.0/sync/1.5 +4. Create an account at Mozilla: https://accounts.firefox.com/signup + +### Firefox mobile + +With the last version of firefox mobile it's same than for desktop. + +## Limitations with YunoHost + +By default, a configured server will report authentication to the account server hosted by Mozilla at https://accounts.firefox.com. You will still need to authenticate to Mozilla, but your information will be stored on your host. + +## Useful links + ++ Application software repository: [github.com - YunoHost-Apps/ffsync](https://github.com/YunoHost-Apps/ffsync_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/ffsync/issues](https://github.com/YunoHost-Apps/ffsync_ynh/issues) diff --git a/pages/02.applications/02.docs/firefly-iii/app_firefly-iii.fr.md b/pages/02.applications/02.docs/firefly-iii/app_firefly-iii.fr.md new file mode 100644 index 00000000..8d342327 --- /dev/null +++ b/pages/02.applications/02.docs/firefly-iii/app_firefly-iii.fr.md @@ -0,0 +1,25 @@ +--- +title: Firefly III +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_firefly-iii' +--- + + + +[](https://install-app.yunohost.org/?app=firefly-iii) [](https://dash.yunohost.org/appci/app/firefly-iii) + +### Index + +- [Liens utiles](#liens-utiles) + +"Firefly III" est un gestionnaire (auto-hébergé) de vos finances personnelles. Il peut vous aider à suivre vos dépenses et vos revenus, afin que vous puissiez dépenser moins et épargner plus. Firefly III permet d'utiliser des budgets, des catégories et des étiquettes. Il peut importer des données provenant de sources externes et il dispose de nombreux rapports financiers soignés. + +## Liens utiles + + + Site web : [www.firefly-iii.org (en)](https://www.firefly-iii.org/) + + Documentation officielle : [docs.firefly-iii.org (en)](https://docs.firefly-iii.org/about-firefly-iii/introduction) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/firefly-iii](https://github.com/YunoHost-Apps/firefly-iii_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/firefly-iii/issues](https://github.com/YunoHost-Apps/firefly-iii_ynh/issues) diff --git a/pages/02.applications/02.docs/firefly-iii/app_firefly-iii.md b/pages/02.applications/02.docs/firefly-iii/app_firefly-iii.md new file mode 100644 index 00000000..a23d3172 --- /dev/null +++ b/pages/02.applications/02.docs/firefly-iii/app_firefly-iii.md @@ -0,0 +1,25 @@ +--- +title: Firefly III +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_firefly-iii' +--- + + + +[](https://install-app.yunohost.org/?app=firefly-iii) [](https://dash.yunohost.org/appci/app/firefly-iii) + +### Index + +- [Useful links](#useful-links) + +"Firefly III" is a (self-hosted) manager for your personal finances. It can help you keep track of your expenses and income, so you can spend less and save more. Firefly III supports the use of budgets, categories and tags. It can import data from external sources and it has many neat financial reports available. + +## Useful links + ++ Website: [www.firefly-iii.org](https://www.firefly-iii.org/) ++ Official documentation: [docs.firefly-iii.org](https://docs.firefly-iii.org/about-firefly-iii/introduction) ++ Application software repository: [github.com - YunoHost-Apps/firefly-iii](https://github.com/YunoHost-Apps/firefly-iii_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/firefly-iii/issues](https://github.com/YunoHost-Apps/firefly-iii_ynh/issues) diff --git a/pages/02.applications/02.docs/flarum/app_flarum.fr.md b/pages/02.applications/02.docs/flarum/app_flarum.fr.md new file mode 100644 index 00000000..de15fd5b --- /dev/null +++ b/pages/02.applications/02.docs/flarum/app_flarum.fr.md @@ -0,0 +1,25 @@ +--- +title: Flarum +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_flarum' +--- + + + +[](https://install-app.yunohost.org/?app=flarum) [](https://dash.yunohost.org/appci/app/flarum) + +### Index + +- [Liens utiles](#liens-utiles) + +Flarum est un système de forum, il est possible de lui adjoindre de multiples plugins. + +## Liens utiles + + + Site web : [flarum.org (en)](https://flarum.org/) + + Documentation officielle : [flarum.org - docs (en)](https://flarum.org/docs/) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/flarum](https://github.com/YunoHost-Apps/flarum_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/flarum/issues](https://github.com/YunoHost-Apps/flarum_ynh/issues) diff --git a/pages/02.applications/02.docs/flarum/app_flarum.md b/pages/02.applications/02.docs/flarum/app_flarum.md new file mode 100644 index 00000000..621c773c --- /dev/null +++ b/pages/02.applications/02.docs/flarum/app_flarum.md @@ -0,0 +1,25 @@ +--- +title: Flarum +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_flarum' +--- + + + +[](https://install-app.yunohost.org/?app=flarum) [](https://dash.yunohost.org/appci/app/flarum) + +### Index + +- [Useful links](#useful-links) + +Flarum is a forum system, it is possible to add multiple plugins to it. + +## Useful links + ++ Website: [flarum.org](https://flarum.org/) ++ Official documentation: [flarum.org - docs](https://flarum.org/docs/) ++ Application software repository: [github.com - YunoHost-Apps/flarum](https://github.com/YunoHost-Apps/flarum_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/flarum/issues](https://github.com/YunoHost-Apps/flarum_ynh/issues) diff --git a/pages/02.applications/02.docs/fluxbb/app_fluxbb.fr.md b/pages/02.applications/02.docs/fluxbb/app_fluxbb.fr.md new file mode 100644 index 00000000..08c6ee7a --- /dev/null +++ b/pages/02.applications/02.docs/fluxbb/app_fluxbb.fr.md @@ -0,0 +1,30 @@ +--- +title: FluxBB +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_fluxbb' +--- + + + +[](https://install-app.yunohost.org/?app=fluxbb) [](https://dash.yunohost.org/appci/app/fluxbb) + +### Index + +- [Limitations avec YunoHost](#limitations-avec-yunohost) +- [Liens utiles](#liens-utiles) + +FluxBB est un logiciel de forum rapide, léger et convivial pour votre site web. FluxBB est conçu comme une alternative plus légère et plus rapide à certaines des applications de forum traditionnelles lourdes en fonctionnalités. Il est facile à utiliser et a fait ses preuves en matière de stabilité et de sécurité, ce qui en fait un choix idéal de forum pour votre site web. + +## Limitations avec YunoHost + +Les authentification HTTP et LDAP ne sont pas pris en charges. + +## Liens utiles + + + Site web : [fluxbb.org (en)](https://fluxbb.org/) + + Documentation officielle : [fluxbb.org - docs (en)](https://fluxbb.org/docs/) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/fluxbb](https://github.com/YunoHost-Apps/fluxbb_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/fluxbb/issues](https://github.com/YunoHost-Apps/fluxbb_ynh/issues) diff --git a/pages/02.applications/02.docs/fluxbb/app_fluxbb.md b/pages/02.applications/02.docs/fluxbb/app_fluxbb.md new file mode 100644 index 00000000..bbbcc858 --- /dev/null +++ b/pages/02.applications/02.docs/fluxbb/app_fluxbb.md @@ -0,0 +1,30 @@ +--- +title: FluxBB +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_fluxbb' +--- + + + +[](https://install-app.yunohost.org/?app=fluxbb) [](https://dash.yunohost.org/appci/app/fluxbb) + +### Index + +- [Limitations with YunoHost](#limitations-with-yunohost) +- [Useful links](#useful-links) + +FluxBB is fast, light, user-friendly forum software for your website. FluxBB is designed as a lighter, faster alternative to some of the traditional feature heavy forum applications. It is easy to use and has a proven track record of stability and security making it an ideal choice of forum for your website. + +## Limitations with YunoHost + +HTTP and LDAP authentication are not supported. + +## Useful links + ++ Website: [fluxbb.org](https://fluxbb.org/) ++ Official documentation: [fluxbb.org - docs](https://fluxbb.org/docs/) ++ Application software repository: [github.com - YunoHost-Apps/fluxbb](https://github.com/YunoHost-Apps/fluxbb_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/fluxbb/issues](https://github.com/YunoHost-Apps/fluxbb_ynh/issues) diff --git a/pages/02.applications/02.docs/framaforms/app_framaforms.fr.md b/pages/02.applications/02.docs/framaforms/app_framaforms.fr.md new file mode 100644 index 00000000..caba4108 --- /dev/null +++ b/pages/02.applications/02.docs/framaforms/app_framaforms.fr.md @@ -0,0 +1,27 @@ +--- +title: Framaforms +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_framaforms' +--- + + + +[](https://install-app.yunohost.org/?app=framaforms) [](https://dash.yunohost.org/appci/app/framaforms) + +### Index + +- [Liens utiles](#liens-utiles) + +Framaforms est un service de formulaires et d'enquêtes en ligne. Les utilisateurs enregistrés sont autorisés à créer des formulaires, à les partager, à collecter et à visualiser les résultats par le biais d'une interface simple. +Il est possible d'être notifié de chaque réponse, de récupérer les réponses sous forme graphiques ou de tableaux. Les questionnaires peuvent être aussi élaborés sur plusieurs pages et présenter des champs conditionnels ou obligatoires. + +Liens utiles + ++ Site web : [framaforms.org](https://framaforms.org/) ++ Documentation officielle : [docs.framasoft.org/fr/framaforms](https://docs.framasoft.org/fr/framaforms/) ++ Démonstration: [Démo](https://framaforms.org/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/framaforms](https://github.com/YunoHost-Apps/framaforms_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/framaforms/issues](https://github.com/YunoHost-Apps/framaforms_ynh/issues) diff --git a/pages/02.applications/02.docs/framaforms/app_framaforms.md b/pages/02.applications/02.docs/framaforms/app_framaforms.md new file mode 100644 index 00000000..6b3ff6ce --- /dev/null +++ b/pages/02.applications/02.docs/framaforms/app_framaforms.md @@ -0,0 +1,25 @@ +--- +title: Framaforms +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_framaforms' +--- + +[](https://install-app.yunohost.org/?app=framaforms) [](https://dash.yunohost.org/appci/app/framaforms) + +### Index + +- [Useful links](#useful-links) + +Framaforms is an online forms and survey service. Registered users are allowed to create forms, share them, collect and view the results through a simple interface. +It is possible to be notified of each response, retrieve responses in graphical or tabular form. Questionnaires can also be developed on several pages and have conditional or mandatory fields. + +## Useful links + ++ Website: [framaforms.org](https://framaforms.org/) ++ Official documentation: [docs.framasoft.org/fr/framaforms](https://docs.framasoft.org/fr/framaforms/) ++ Demonstration: [Demo](https://framaforms.org/) ++ Application software repository: [github.com - YunoHost-Apps/framaforms](https://github.com/YunoHost-Apps/framaforms_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/framaforms/issues](https://github.com/YunoHost-Apps/framaforms_ynh/issues) diff --git a/pages/02.applications/02.docs/freshrss/app_freshrss.fr.md b/pages/02.applications/02.docs/freshrss/app_freshrss.fr.md new file mode 100644 index 00000000..f66db945 --- /dev/null +++ b/pages/02.applications/02.docs/freshrss/app_freshrss.fr.md @@ -0,0 +1,46 @@ +--- +title: FreshRSS +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_freshrss' +--- + + + +[](https://install-app.yunohost.org/?app=freshrss) [](https://dash.yunohost.org/appci/app/freshrss) + +### Index + +- [Configuration](#configuration) +- [Applications clientes](#applications-clientes) +- [Liens utiles](#liens-utiles) + +FreshRSS est un agrégateur et lecteur de flux RSS. Il permet de regrouper l’actualité de plusieurs sites différents dans un endroit unique pour que vous puissiez la lire sans devoir aller de site en site. + +FreshRSS a été conçu comme un agrégateur puissant et propose des tas de fonctionnalités. + +## Configuration + +API (mini) Comment faire : +1. Dans votre profil utilisateur `Paramètres > profil` +2. Définir un mot de passe API +3. Vérifiez que l'API fonctionne : https://exemple.tld/rss/api/greader.php +4. Configurez votre client avec : + + username : ynh user + + password : le mot de passe que vous venez de configurer + + URL : https://exemple.tld/rss/api/greader.php + +## Applications clientes + +| Nom de l'applications | Plateforme | Multi-comptes | F-Droid | Play Store | +|-----------------------|------------|---------------|---------|------------| +| Fresh RSS | Android | ? | [f-droid.org - Fresh RSS](https://f-droid.org/fr/packages/fr.chenry.android.freshrss/) | X | + +## Liens utiles + + + Site web : [www.freshrss.org (en)](https://www.freshrss.org/) + + Documentation officielle : [freshrss.github.io - FreshRSS](https://freshrss.github.io/FreshRSS/fr/) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/freshrss](https://github.com/YunoHost-Apps/freshrss_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/freshrss/issues](https://github.com/YunoHost-Apps/freshrss_ynh/issues) diff --git a/pages/02.applications/02.docs/freshrss/app_freshrss.md b/pages/02.applications/02.docs/freshrss/app_freshrss.md new file mode 100644 index 00000000..d698fcd9 --- /dev/null +++ b/pages/02.applications/02.docs/freshrss/app_freshrss.md @@ -0,0 +1,46 @@ +--- +title: FreshRSS +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_freshrss' +--- + + + +[](https://install-app.yunohost.org/?app=freshrss) [](https://dash.yunohost.org/appci/app/freshrss) + +### Index + +- [Configuration](#configuration) +- [Customer Applications](#customer-applications) +- [Useful links](#useful-links) + +FreshRSS is an RSS aggregator and reader. It allows you to read and follow several news websites at a glance without the need to browse from one website to another. + +FreshRSS has a lot of features including. + +## Configuration + +API (mini) How To +1. Into your user profile: `Settings > profil` +2. Setup an API password +3. Check the API is working: https://exemple.tld/rss/api/greader.php +4. Setup your client with: + + username: ynh user + + password: the password you just setup + + URL: https://exemple.tld/rss/api/greader.php + +## Customer applications + +| Application name | Platform | Multi-account | Play Store | F-Droid | Play Store | +|------------------|----------|---------------|------------|---------|------------| +| Fresh RSS | Android | ? | | [f-droid.org - Fresh RSS](https://f-droid.org/fr/packages/fr.chenry.android.freshrss/) | X | + +## Useful links + ++ Website: [www.freshrss.org](https://www.freshrss.org/) ++ Official documentation: [freshrss.github.io - FreshRSS](https://freshrss.github.io/FreshRSS/) ++ Application software repository: [github.com - YunoHost-Apps/freshrss](https://github.com/YunoHost-Apps/freshrss_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/freshrss/issues](https://github.com/YunoHost-Apps/freshrss_ynh/issues) diff --git a/pages/02.applications/02.docs/friendica/app_friendica.fr.md b/pages/02.applications/02.docs/friendica/app_friendica.fr.md new file mode 100644 index 00000000..e44804a8 --- /dev/null +++ b/pages/02.applications/02.docs/friendica/app_friendica.fr.md @@ -0,0 +1,44 @@ +--- +title: Friendica +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_friendica' +--- + + + +[](https://install-app.yunohost.org/?app=friendica) [](https://dash.yunohost.org/appci/app/friendica) + +### Index + +- [Configuration](#configuration) +- [Liens utiles](#liens-utiles) + +Friendica est une plateforme de communication décentralisée qui intègre la communication sociale. La plate-forme est liée à des projets sociaux indépendants et à des services aux entreprises. + +Son objectif est de libérer les amis, la famille et les collègues des entreprises qui récoltent des données ; Friendica vise à ce que la communication sociale soit libre et ouverte, tout en circulant entre tous les fournisseurs aussi facilement que le courrier électronique.[¹](#sources) + +## Configuration + +Avant l'installation, lisez les instructions d'installation de Friendica pour obtenir des informations à propos de l'installation + +Exigence de validation du certificat SSL (maintenant avec le support de Let's Encrypt !). Voir la section Installation ci-dessous. +Domaine dédié (doit être installé sous la racine web comme https://hub.example.com/ et non https://example.com/hub/ ) + +Note : Vous pouvez utiliser les comptes du LDAP de YunoHost. Il n'y a pas encore de SSO actif. + +## Liens utiles + ++ Site web : [friendi.ca](http://friendi.ca/) ++ Documentation officielle : [github.com/friendica/friendica/wiki](https://github.com/friendica/friendica/wiki) ++ Démonstration : [Démo](http://dir.friendica.social/servers) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/friendica](https://github.com/YunoHost-Apps/friendica_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/friendica/issues](https://github.com/YunoHost-Apps/friendica_ynh/issues) + +------ + +### Sources + +¹ [github.com - friendica/friendica (en)](https://github.com/friendica/friendica) diff --git a/pages/02.applications/02.docs/friendica/app_friendica.md b/pages/02.applications/02.docs/friendica/app_friendica.md new file mode 100644 index 00000000..de0f9262 --- /dev/null +++ b/pages/02.applications/02.docs/friendica/app_friendica.md @@ -0,0 +1,44 @@ +--- +title: Friendica +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_friendica' +--- + + + +[](https://install-app.yunohost.org/?app=friendica) [](https://dash.yunohost.org/appci/app/friendica) + +### Index + +- [Configuration](#configuration) +- [Useful links](#useful-links) + +Friendica is a decentralized communication platform that integrates social communication. The platform is linked to independent social projects and business services. + +Its aim is to free up friends, family and colleagues from companies that collect data; Friendica aims to make social communication free and open, while circulating between all providers as easily as email.[¹](#sources) + +## Configuration + +Before installing, read the Friendica installation instructions for important information about + +SSL certificate validation requirement (now with support for Let's Encrypt!). See Installation section below. +Dedicated domain (must install under web root like https://hub.example.com/ not https://example.com/hub/ ) + +Note: You can use accounts from YunoHost's LDAP. There are not yet active SSO. + +## Useful links + ++ Website : [friendi.ca](http://friendi.ca/) ++ Official documentation : [github.com/friendica/friendica/wiki](https://github.com/friendica/friendica/wiki) ++ Demonstration : [Demo](http://dir.friendica.social/servers) ++ Application software repository : [github.com - YunoHost-Apps/friendica](https://github.com/YunoHost-Apps/friendica_ynh) ++ Fix a bug or an improvement by creating a ticket (issue) : [github.com - YunoHost-Apps/friendica/issues](https://github.com/YunoHost-Apps/friendica_ynh/issues) + +------ + +### Sources + +¹ [github.com - friendica/friendica](https://github.com/friendica/friendica) diff --git a/pages/02.applications/02.docs/funkwhale/app_funkwhale.fr.md b/pages/02.applications/02.docs/funkwhale/app_funkwhale.fr.md new file mode 100644 index 00000000..12b9ac10 --- /dev/null +++ b/pages/02.applications/02.docs/funkwhale/app_funkwhale.fr.md @@ -0,0 +1,41 @@ +--- +title: Funkwhale +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_funkwhale' +--- + + + +[](https://install-app.yunohost.org/?app=funkwhale) [](https://dash.yunohost.org/appci/app/funkwhale) + +### Index + +- [Administration](#administration) +- [Limitations avec YunoHost](#limitations-avec-yunohost) +- [Liens utiles](#liens-utiles) + +Funkwhale est un serveur de flux continu de musique libre, auto-hébergé et fédéré. Chaque utilisateur⋅trice dispose d'une bibliothèque dans laquelle il/elle peut ajouter les titres qu'il/elle souhaite, et qu'il/elle peut partager avec d'autres utilisateurs, qu'ils soient sur la même instance ou non.[¹](#sources) + +## Administration + +La page d'admimnistration est disponible à l'adresse : `mon.domaine.tld/api/admin` + +## Limitations avec YunoHost + +Pour installer Funkwhale sur votre serveur YunoHost il est nécessaire d'avoir un nom de domaine dédié à Funkwhale. + +## Liens utiles + ++ Site web : [funkwhale.audio](https://funkwhale.audio/) ++ Documentation officielle : [docs.funkwhale.audio (en)](https://docs.funkwhale.audio/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/funkwhale](https://github.com/YunoHost-Apps/funkwhale_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/funkwhale/issues](https://github.com/YunoHost-Apps/funkwhale_ynh/issues) + +----- + +### Sources + +¹ [wikipedia.org - Funkwhale](https://fr.wikipedia.org/wiki/Funkwhale) diff --git a/pages/02.applications/02.docs/funkwhale/app_funkwhale.md b/pages/02.applications/02.docs/funkwhale/app_funkwhale.md new file mode 100644 index 00000000..c557b1fe --- /dev/null +++ b/pages/02.applications/02.docs/funkwhale/app_funkwhale.md @@ -0,0 +1,41 @@ +--- +title: Funkwhale +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_funkwhale' +--- + + + +[](https://install-app.yunohost.org/?app=funkwhale) [](https://dash.yunohost.org/appci/app/funkwhale) + +### Index + +- [Administration](#administration) +- [Limitations with YunoHost](#limitations-with-yunohost) +- [Useful links](#useful-links) + +Funkwhale is a self-hosted, federated free music streaming server. Each utilisateur⋅trice has a library in which he/she can add the titles he/she wants, and which he/she can share with other users, whether they are on the same instance or not. [¹](#sources) + +## Administration + +The administration page is available at: `my.domain.tld/api/admin` + +## Limitations with YunoHost + +To install Funkwhale on your YunoHost server it is necessary to have a domain name dedicated to Funkwhale. + +## Useful links + ++ Website: [funkwhale.audio](https://funkwhale.audio/) ++ Official documentation: [docs.funkwhale.audio](https://docs.funkwhale.audio/) ++ Application software repository: [github.com - YunoHost-Apps/funkwhale](https://github.com/YunoHost-Apps/funkwhale_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/funkwhale/issues](https://github.com/YunoHost-Apps/funkwhale_ynh/issues) + +----- + +### Sources + +¹ [wikipedia.org - Funkwhale](https://fr.wikipedia.org/wiki/Funkwhale) diff --git a/pages/02.applications/02.docs/galene/app_galene.fr.md b/pages/02.applications/02.docs/galene/app_galene.fr.md new file mode 100644 index 00000000..0e113586 --- /dev/null +++ b/pages/02.applications/02.docs/galene/app_galene.fr.md @@ -0,0 +1,23 @@ +--- +title: Galène +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_galene' +--- + +[](https://install-app.yunohost.org/?app=galene) [](https://dash.yunohost.org/appci/app/galene) + +### Index + +- [Liens utiles](#liens-utiles) + +*Galène* est un serveur de visioconférence facile à déployer (il suffit de copier quelques fichiers et d'exécuter le binaire) et qui nécessite des ressources serveur modérées. Il a été conçu à l'origine pour les conférences (où un seul orateur diffuse l'audio et la vidéo à des centaines ou des milliers d'utilisateurs), mais a ensuite évolué pour être utile pour les travaux pratiques des étudiants (où les utilisateurs sont divisés en plusieurs petits groupes) et les réunions (où un quelques dizaines d'utilisateurs interagissent les uns avec les autres). + +## Liens utiles + ++ Site web : [galene.org (en)](https://galene.org/) ++ Démonstration : [Démo](https://galene.org:8443/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/galene](https://github.com/YunoHost-Apps/galene_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/galene/issues](https://github.com/YunoHost-Apps/galene_ynh/issues) diff --git a/pages/02.applications/02.docs/galene/app_galene.md b/pages/02.applications/02.docs/galene/app_galene.md new file mode 100644 index 00000000..c52bc7bd --- /dev/null +++ b/pages/02.applications/02.docs/galene/app_galene.md @@ -0,0 +1,23 @@ +--- +title: Galène +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_galene' +--- + +[](https://install-app.yunohost.org/?app=galene) [](https://dash.yunohost.org/appci/app/galene) + +### Index + +- [Useful links](#useful-links) + +*Galène* is a videoconferencing server that is easy to deploy (just copy a few files and run the binary) and that requires moderate server resources. It was originally designed for lectures and conferences (where a single speaker streams audio and video to hundreds or thousands of users), but later evolved to be useful for student practicals (where users are divided into many small groups), and meetings (where a few dozen users interact with each other). + +## Useful links + ++ Website: [galene.org](https://galene.org/) ++ Demonstration: [Demo](https://galene.org:8443/) ++ Application software repository: [github.com - YunoHost-Apps/galene](https://github.com/YunoHost-Apps/galene_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/galene/issues](https://github.com/YunoHost-Apps/galene_ynh/issues) diff --git a/pages/02.applications/02.docs/garradin/app_garradin.fr.md b/pages/02.applications/02.docs/garradin/app_garradin.fr.md new file mode 100644 index 00000000..25f510c4 --- /dev/null +++ b/pages/02.applications/02.docs/garradin/app_garradin.fr.md @@ -0,0 +1,38 @@ +--- +title: Garradin +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_garradin' +--- + + + +[](https://install-app.yunohost.org/?app=garradin) [](https://dash.yunohost.org/appci/app/garradin) + +### Index + +- [Limitations avec YunoHost](#limitations-avec-yunohost) +- [Liens utiles](#liens-utiles) + +Garradin (mot signifiant argent dans un dialecte aborigène du nord de l'Australie, prononcé « gar-a-dine ») est un logiciel de gestion associative. Il est l'outil de prédilection pour gérer une association, un club sportif, une ONG, etc. Il est conçu pour répondre aux besoins d'une structure de petite à moyenne taille : gestion des adhérents, comptabilité, site Web, prise de notes en réunion, archivage et partage des documents de fonctionnement de l'association, discussion entre adhérents, etc.[¹](#sources) + +## Limitations avec YunoHost + +le système SSO n'est pas implémenté, ni l'installation directe. L'utilisateur admin devra créer son compte avec le formulaire de création de compte qu'il trouvera à la fin de l'installation. Plusieurs raisons m'ont poussé à ne pas implémenter le SSO. [Plus d'informations](https://github.com/YunoHost-Apps/garradin_ynh#probl%C3%A8mes--avertissements-) + +Applications disponible exclusivement en français. + +## Liens utiles + + + Site web : [garradin.eu](https://garradin.eu) + + Documentation officielle : [fossil.kd2.org - garradin](https://fossil.kd2.org/garradin/wiki?name=Garradin) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/garradin](https://github.com/YunoHost-Apps/garradin_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/garradin/issues](https://github.com/YunoHost-Apps/garradin_ynh/issues) + +------ + +### Sources + +¹ [garradin.eu - a-propos](https://garradin.eu/a-propos/) diff --git a/pages/02.applications/02.docs/garradin/app_garradin.md b/pages/02.applications/02.docs/garradin/app_garradin.md new file mode 100644 index 00000000..8d63cf2c --- /dev/null +++ b/pages/02.applications/02.docs/garradin/app_garradin.md @@ -0,0 +1,38 @@ +--- +title: Garradin +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_garradin' +--- + + + +[](https://install-app.yunohost.org/?app=garradin) [](https://dash.yunohost.org/appci/app/garradin) + +### Index + +- [Limitations with YunoHost](#limitations-with-yunohost) +- [Useful links](#useful-links) + +Garradin (a word meaning silver in an Aboriginal dialect of northern Australia, pronounced "gar-a-dine "em) is a software program for associative management. It is the tool of choice to manage an association, a sports club, an NGO, etc. It is designed to meet the needs of a small to medium-sized structure: membership management, accounting, website, note-taking at meetings, archiving and sharing of the association's operating documents, discussion between members, etc.¹](#sources) + +## Limitations with YunoHost + +the SSO system is not implemented, nor direct installation. The admin user will have to create his account with the account creation form that he will find at the end of the installation. Several reasons led me not to implement SSO. [More information (fr)](https://github.com/YunoHost-Apps/garradin_ynh#probl%C3%A8mes--avertissements-) + +Applications available exclusively in French. + +## Useful links + ++ Website: [garradin.eu (fr)](https://garradin.eu) ++ Official documentation: [fossil.kd2.org - garradin (fr)](https://fossil.kd2.org/garradin/wiki?name=Garradin) ++ Application software repository: [github.com - YunoHost-Apps/garradin](https://github.com/YunoHost-Apps/garradin_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/garradin/issues](https://github.com/YunoHost-Apps/garradin_ynh/issues) + +------ + +### Sources + +¹ [garradin.eu - a-propos (fr)](https://garradin.eu/a-propos/) diff --git a/pages/02.applications/02.docs/gitea/app_gitea.fr.md b/pages/02.applications/02.docs/gitea/app_gitea.fr.md new file mode 100644 index 00000000..c12e09f5 --- /dev/null +++ b/pages/02.applications/02.docs/gitea/app_gitea.fr.md @@ -0,0 +1,45 @@ +--- +title: Gitea +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_gitea' +--- + + + +[](https://install-app.yunohost.org/?app=gitea) [](https://dash.yunohost.org/appci/app/gitea) + +### Index + +- [Limitations avec YunoHost](#limitations-avec-yunohost) +- [Applications clientes](#applications-clientes) +- [Liens utiles](#liens-utiles) + +Gitea est un service Git auto-hébergé très simple à installer et à utiliser. Il est similaire à GitHub, Bitbucket ou GitLab. Le développement initial provient sur Gogs, mais il a été forké puis renommé Gitea.[¹](#sources) + +## Limitations avec YunoHost + +Si vous voulez utiliser les commandes Git (comme `git clone`, `git pull`, `git push`), vous devez rendre cette application publique. + +## Applications clientes + +| Nom de l'application [²] | Plateforme | Multi-comptes | Source | Play Store | F-Droid | Apple Store | +|:------------------------:|:----------:|:-------------:|:------:|:----------:|:-------:|:-----------:| +| GitNex (no) | Android | ? | [gitnex.com (en)](https://gitnex.com/) | [GitNex - PlayStore](https://play.google.com/store/apps/details?id=org.mian.gitnex) | [GitNex - F-Droid](https://f-droid.org/fr/packages/org.mian.gitnex/) | X | + +> [²]: (of) : Officielle / (no) : non officiel + +## Liens utiles + + + Site web : [gitea.io (en)](https://gitea.io/en-us/) + + Documentation officielle : [docs.gitea.io](https://docs.gitea.io/fr-fr/) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/gitea](https://github.com/YunoHost-Apps/gitea_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/gitea/issues](https://github.com/YunoHost-Apps/gitea_ynh/issues) + +------ + +### Sources + +¹ [docs.gitea.io](https://docs.gitea.io/fr-fr/) diff --git a/pages/02.applications/02.docs/gitea/app_gitea.md b/pages/02.applications/02.docs/gitea/app_gitea.md new file mode 100644 index 00000000..32070fe0 --- /dev/null +++ b/pages/02.applications/02.docs/gitea/app_gitea.md @@ -0,0 +1,45 @@ +--- +title: Gitea +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_gitea' +--- + + + +[](https://install-app.yunohost.org/?app=gitea) [](https://dash.yunohost.org/appci/app/gitea) + +### Index + +- [Limitations with YunoHost](#limitations-with-yunohost) +- [Customer Applications](#customer-applications) +- [Useful links](#useful-links) + +Gitea is a painless self-hosted Git service. It is similar to GitHub, Bitbucket, and GitLab. Gitea is a fork of Gogs.[¹](#sources) + +## Limitations with YunoHost + +If you want to use Git commands (like `git clone`, `git pull`, `git push`), you need to set this app as public. + +## Customer applications + +| Application name [²] | Platform | Multi-account |Source | Play Store | F-Droid | Apple Store | +|----------------------|----------|---------------|-------|------------|---------|-------------| +| GitNex (un) | Android | ? | [gitnex.com (en)](https://gitnex.com/) | [GitNex - PlayStore](https://play.google.com/store/apps/details?id=org.mian.gitnex) | [GitNex - F-Droid](https://f-droid.org/fr/packages/org.mian.gitnex/) | X | + +> [²]: (of) : Official / (un) : Unofficial + +## Useful links + ++ Website: [gitea.io](https://gitea.io/en-us/) ++ Official documentation: [docs.gitea.io](https://docs.gitea.io/en-us/) ++ Application software repository: [github.com - YunoHost-Apps/gitea](https://github.com/YunoHost-Apps/gitea_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/gitea/issues](https://github.com/YunoHost-Apps/gitea_ynh/issues) + +------ + +### Sources + +¹ [docs.gitea.io](https://docs.gitea.io/en-us/) diff --git a/pages/02.applications/02.docs/gitlab-runner/app_gitlab-runner.fr.md b/pages/02.applications/02.docs/gitlab-runner/app_gitlab-runner.fr.md new file mode 100644 index 00000000..81c4f7f8 --- /dev/null +++ b/pages/02.applications/02.docs/gitlab-runner/app_gitlab-runner.fr.md @@ -0,0 +1,29 @@ +--- +title: Gitlab Runner +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_gitlab-runner' +--- + + + +[](https://install-app.yunohost.org/?app=gitlab-runner) [](https://dash.yunohost.org/appci/app/gitlab-runner) + +### Index + +- [Configuration](#configuration) +- [Liens utiles](#liens-utiles) + +GitLab Runner est un outil d'intégration continue à utiliser avec une instance GitLab (YNH ou non). + +## Configuration + +Via le panneau d'administration de GitLab ou les paramettres "CI/CD" de votre projet. + +## Liens utiles + + + Documentation officielle : [docs.gitlab.com - runner (en)](https://docs.gitlab.com/runner/) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/gitlab-runner](https://github.com/YunoHost-Apps/gitlab-runner_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/gitlab-runner/issues](https://github.com/YunoHost-Apps/gitlab-runner_ynh/issues) diff --git a/pages/02.applications/02.docs/gitlab-runner/app_gitlab-runner.md b/pages/02.applications/02.docs/gitlab-runner/app_gitlab-runner.md new file mode 100644 index 00000000..21dbf58c --- /dev/null +++ b/pages/02.applications/02.docs/gitlab-runner/app_gitlab-runner.md @@ -0,0 +1,29 @@ +--- +title: Gitlab Runner +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_gitlab-runner' +--- + + + +[](https://install-app.yunohost.org/?app=gitlab-runner) [](https://dash.yunohost.org/appci/app/gitlab-runner) + +### Index + +- [Configuration](#configuration) +- [Useful links](#useful-links) + +GitLab Runner is a continuous integration tool to use with a GitLab instance (YNH or not). + +## Configuration + +By the admin panel of GitLab or the settings "CI/CD" of your project. + +## Useful links + ++ Official documentation: [docs.gitlab.com - runner](https://docs.gitlab.com/runner/) ++ Application software repository: [github.com - YunoHost-Apps/APPLICATION](https://github.com/YunoHost-Apps/gitlab-runner_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/APPLICATION/issues](https://github.com/YunoHost-Apps/gitlab-runner_ynh/issues) diff --git a/pages/02.applications/02.docs/gitlab/app_gitlab.fr.md b/pages/02.applications/02.docs/gitlab/app_gitlab.fr.md new file mode 100644 index 00000000..56d6471b --- /dev/null +++ b/pages/02.applications/02.docs/gitlab/app_gitlab.fr.md @@ -0,0 +1,43 @@ +--- +title: Gitlab +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_gitlab' +--- + + + +[](https://install-app.yunohost.org/?app=gitlab) [](https://dash.yunohost.org/appci/app/gitlab) + +### Index + +- [Limitations avec YunoHost](#limitations-avec-yunohost) +- [Applications clientes](#applications-clientes) +- [Liens utiles](#liens-utiles) + +GitLab est une forge logicielle très complète dont le développement est très dynamique (une nouvelle version sort tous les 22 du mois). Elle permet d'héberger des projets collaboratifs utilisant Git ainsi que gérer des discussions, des rapports de bugs et la documentation... GitLab est un logiciel open source qui existe deux versions, une version communautaire libre et une version entreprise propriétaire possédant plus de fonctionnalités.[¹](#sources) + +## Limitations avec YunoHost + +L'application GitLab n'est pas compatible avec les architectures 32-bit. + +## Applications clientes + +| Nom de l'applications | Plateforme | Multi-comptes | Play Store | F-Droid | Apple Store | +|:---------------------:|:----------:|:-------------:|:----------:|:-------:|:-----------:| +| LabCoat avec Deep Links for LabCoat | Android | ? | [play.google.com - LabCoat](https://play.google.com/store/apps/details?id=com.commit451.gitlab) / [play.google.com - Deep Links for LabCoat](https://play.google.com/store/apps/details?id=com.nomadlabs.labcoat.deeplinks) | [f-droid.org - LabCoat](https://f-droid.org/fr/packages/com.commit451.gitlab/) / [f-droid.org - Deep Links for LabCoat](https://f-droid.org/fr/packages/com.nomadlabs.labcoat.deeplinks/) | | + +## Liens utiles + ++ Site web : [about.gitlab.com (en)](https://about.gitlab.com/) ++ Documentation officielle : [docs.gitlab.com (en)](https://docs.gitlab.com/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/gitlab](https://github.com/YunoHost-Apps/gitlab_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/gitlab/issues](https://github.com/YunoHost-Apps/gitlab_ynh/issues) + +------ + +### Sources + +¹ [framalibre.org - GitLab](https://framalibre.org/content/gitlab) diff --git a/pages/02.applications/02.docs/gitlab/app_gitlab.md b/pages/02.applications/02.docs/gitlab/app_gitlab.md new file mode 100644 index 00000000..8b5921c8 --- /dev/null +++ b/pages/02.applications/02.docs/gitlab/app_gitlab.md @@ -0,0 +1,43 @@ +--- +title: Gitlab +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_gitlab' +--- + + + +[](https://install-app.yunohost.org/?app=gitlab) [](https://dash.yunohost.org/appci/app/gitlab) + +### Index + +- [Limitations with YunoHost](#limitations-with-yunohost) +- [Customer Applications](#customer-applications) +- [Useful links](#useful-links) + +GitLab is a Git web app forge very complete whith a dynamic development (a new version is released every 22nd of the month). GitLab is an open core software with two versions: A free community version and a proprietary enterprise version with more features. [¹](#sources) + +## Limitations with YunoHost + +The GitLab application is not compatible with 32-bit architectures. + +## Customer applications + +| Application name | Platform | Multi-account | Play Store | F-Droid | Apple Store | +|:----------------:|:--------:|:-------------:|:----------:|:-------:|:-----------:| +| LabCoat avec Deep Links for LabCoat | Android | ? | [play.google.com - LabCoat](https://play.google.com/store/apps/details?id=com.commit451.gitlab) / [play.google.com - Deep Links for LabCoat](https://play.google.com/store/apps/details?id=com.nomadlabs.labcoat.deeplinks) | [f-droid.org - LabCoat](https://f-droid.org/fr/packages/com.commit451.gitlab/) / [f-droid.org - Deep Links for LabCoat](https://f-droid.org/fr/packages/com.nomadlabs.labcoat.deeplinks/) | ? | + +## Useful links + ++ Website: [about.gitlab.com](https://about.gitlab.com/) ++ Official documentation: [docs.gitlab.com](https://docs.gitlab.com/) ++ Application software repository: [github.com - YunoHost-Apps/gitlab](https://github.com/YunoHost-Apps/gitlab_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com -YunoHost-Apps/gitlab/issues](https://github.com/YunoHost-Apps/gitlab_ynh/issues) + +------ + +### Sources + +¹ [framalibre.org - GitLab (fr)](https://framalibre.org/content/gitlab) diff --git a/pages/02.applications/02.docs/glowing_bear/app_glowing_bear.fr.md b/pages/02.applications/02.docs/glowing_bear/app_glowing_bear.fr.md new file mode 100644 index 00000000..1849dc64 --- /dev/null +++ b/pages/02.applications/02.docs/glowing_bear/app_glowing_bear.fr.md @@ -0,0 +1,31 @@ +--- +title: Glowing Bear +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_glowing_bear' +--- + + + +[](https://install-app.yunohost.org/?app=glowingbear) [](https://dash.yunohost.org/appci/app/glowingbear) + +### Index + +- [Liens utiles](#liens-utiles) + +Glowing Bear est un frontal web pour le client IRC WeeChat et s'efforce d'être une interface moderne. Il s'appuie sur WeeChat pour faire le gros du travail et offre en plus quelques fonctionnalités intéressantes, comme l'intégration d'images, de vidéos et d'autres contenus. Mais le meilleur, c'est que vous pouvez l'utiliser à partir de n'importe quel appareil Internet moderne - qu'il s'agisse d'un ordinateur, d'une tablette ou d'un smartphone - et que toutes vos affaires sont là, où que vous soyez. Vous n'avez pas à vous préoccuper des détails techniques compliqués, et tout ce qu'il vous faut, c'est un navigateur ou notre application.[¹](#sources) + +## Liens utiles + + + Site web : [www.glowing-bear.org](https://www.glowing-bear.org/) + + Documentation officielle : [github.com - glowing-bear/glowing-bear (en)](https://github.com/glowing-bear/glowing-bear) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/glowing_bear](https://github.com/YunoHost-Apps/glowing_bear_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/glowing_bear/issues](https://github.com/YunoHost-Apps/glowing_bear_ynh/issues) + +------ + +### Sources + +¹ [github.com - glowing-bear/glowing-bear (en)](https://github.com/glowing-bear/glowing-bear) diff --git a/pages/02.applications/02.docs/glowing_bear/app_glowing_bear.md b/pages/02.applications/02.docs/glowing_bear/app_glowing_bear.md new file mode 100644 index 00000000..29e1088d --- /dev/null +++ b/pages/02.applications/02.docs/glowing_bear/app_glowing_bear.md @@ -0,0 +1,31 @@ +--- +title: Glowing Bear +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_glowing_bear' +--- + + + +[](https://install-app.yunohost.org/?app=glowingbear) [](https://dash.yunohost.org/appci/app/glowingbear) + +### Index + +- [Useful links](#useful-links) + +Glowing Bear is a web frontend for the WeeChat IRC client and strives to be a modern interface. It relies on WeeChat to do all the heavy lifting and then provides some nice features on top of that, like embedding images, videos, and other content. The best part, however, is that you can use it from any modern internet device - whether it's a computer, tablet, or smart phone - and all your stuff is there, wherever you are. You don't have to deal with the messy technical details, and all you need to have installed is a browser or our app.[¹](#sources) + +## Useful links + ++ Website: [www.glowing-bear.org](https://www.glowing-bear.org/) ++ Official documentation: [github.com - glowing-bear/glowing-bear](https://github.com/glowing-bear/glowing-bear) ++ Application software repository: [github.com - YunoHost-Apps/glowing_bear](https://github.com/YunoHost-Apps/glowing_bear_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/glowing_bear/issues](https://github.com/YunoHost-Apps/glowing_bear_ynh/issues) + +------ + +### Sources + +¹ [github.com - glowing-bear/glowing-bear](https://github.com/glowing-bear/glowing-bear) diff --git a/pages/02.applications/02.docs/gogs/app_gogs.fr.md b/pages/02.applications/02.docs/gogs/app_gogs.fr.md new file mode 100644 index 00000000..134922fa --- /dev/null +++ b/pages/02.applications/02.docs/gogs/app_gogs.fr.md @@ -0,0 +1,26 @@ +--- +title: Gogs +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_gogs' +--- + + + +[](https://install-app.yunohost.org/?app=gogs) [](https://dash.yunohost.org/appci/app/gogs) + +### Index + +- [Liens utiles](#liens-utiles) + +Gogs est une forge logiciel minimaliste utilisant Git. Gogs a été conçu pour pouvoir fonctionner de manières optimale sur du matériel peu puissant type Raspberry Pi. Il est donc adapté à l'auto-hébergement d'une forge Git. +Pour utiliser pleinement la puissance de Gogs vous devez avoir appréhender ce qu'est Git et l'utilisation d'un [logiciel de gestion de versions](https://fr.wikipedia.org/wiki/Logiciel_de_gestion_de_versions). + +## Liens utiles + + + Site web : [gogs.io](https://gogs.io) + + Documentation officielle : [gogs.io - docs](https://gogs.io/docs) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/gogs](https://github.com/YunoHost-Apps/gogs_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/gogs/issues](https://github.com/YunoHost-Apps/gogs_ynh/issues) diff --git a/pages/02.applications/02.docs/gogs/app_gogs.md b/pages/02.applications/02.docs/gogs/app_gogs.md new file mode 100644 index 00000000..5a953063 --- /dev/null +++ b/pages/02.applications/02.docs/gogs/app_gogs.md @@ -0,0 +1,27 @@ +--- +title: Gogs +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_gogs' +--- + + + +[](https://install-app.yunohost.org/?app=gogs) [](https://dash.yunohost.org/appci/app/gogs) + +### Index + +- [Useful links](#useful-links) + +Gogs is a minimalist software forge using Git. Gogs has been designed to work best on low-powered hardware such as Raspberry Pi. +It is therefore suitable for self-hosting a Git forge. +To fully use the power of Gogs you need to understand what Git is and how to use version control software. + +## Useful links + ++ Website: [gogs.io](https://gogs.io/) ++ Official documentation: [gogs.io - docs](https://gogs.io/docs) ++ Application software repository: [github.com - YunoHost-Apps/gogs](https://github.com/YunoHost-Apps/gogs_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/gogs/issues](https://github.com/YunoHost-Apps/gogs_ynh/issues) diff --git a/pages/02.applications/02.docs/gotify/app_gotify.fr.md b/pages/02.applications/02.docs/gotify/app_gotify.fr.md new file mode 100644 index 00000000..d6d2506f --- /dev/null +++ b/pages/02.applications/02.docs/gotify/app_gotify.fr.md @@ -0,0 +1,45 @@ +--- +title: Gotify +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_gotify' +--- + + + +[](https://install-app.yunohost.org/?app=gotify) [](https://dash.yunohost.org/appci/app/gotify) + +### Index + +- [Configuration](#configuration) +- [Limitations avec YunoHost](#limitations-avec-yunohost) +- [Applications clientes](#applications-clientes) +- [Liens utiles](#liens-utiles) + +Un simple serveur pour envoyer et recevoir des messages. + +## Configuration + +Editer le fichier config.yml via SSH. + +## Limitations avec YunoHost + +Exiger un domaine dédié comme gotify.domain.tld. +Pas de support LDAP (bloqué jusqu'à ce que le noyau Gotify en amont le mette en œuvre) + +## Applications clientes + +| Nom de l'application¹ | Plateforme | Multi-comptes | Play Store | F-Droid | Apple Store | +|:----------------------:|:----------:|:-------------:|:-----------:|:-------:|:-----------:| +| Gotify (of) | Android | ? | [play.google.com - Gotify](https://play.google.com/store/apps/details?id=com.github.gotify) | [f-droid.org - Gotify](https://f-droid.org/de/packages/com.github.gotify/) | X | + +> ¹ (of) : Officielle / (no) : non officiel + +## Liens utiles + + + Site web : [gotify.net (en)](https://gotify.net/) + + Documentation officielle : [gotify.net - docs (en)](https://gotify.net/docs/index) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/gotify](https://github.com/YunoHost-Apps/gotify_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/gotify/issues](https://github.com/YunoHost-Apps/gotify_ynh/issues) diff --git a/pages/02.applications/02.docs/gotify/app_gotify.md b/pages/02.applications/02.docs/gotify/app_gotify.md new file mode 100644 index 00000000..5fecc32f --- /dev/null +++ b/pages/02.applications/02.docs/gotify/app_gotify.md @@ -0,0 +1,45 @@ +--- +title: Gotify +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_gotify' +--- + + + +[](https://install-app.yunohost.org/?app=gotify) [](https://dash.yunohost.org/appci/app/gotify) + +### Index + +- [Configuration](#configuration) +- [Limitations with YunoHost](#limitations-with-yunohost) +- [Customer Applications](#customer-applications) +- [Useful links](#useful-links) + +A simple server for sending and receiving messages. + +## Configuration + +Edit config.yml file via SSH. + +## Limitations with YunoHost + +Require dedicated domain like gotify.domain.tld. +No LDAP support (blocked until Gotify core upstream implements it) + +## Customer applications + +| Application name¹ | Platform | Multi-account | Play Store | F-Droid | Apple Store | +|:--------------------:|:--------:|:-------------:|:----------:|:-------:|:-----------:| +| Gotify (of) | Android | ? | [play.google.com - Gotify](https://play.google.com/store/apps/details?id=com.github.gotify) | [f-droid.org - Gotify](https://f-droid.org/de/packages/com.github.gotify/) | X | + +> ¹ (of) : Official / (un) : Unofficial + +## Useful links + ++ Website: [gotify.net](https://gotify.net/) ++ Official documentation: [https://gotify.net/docs/index](https://gotify.net/docs/index) ++ Application software repository: [github.com - YunoHost-Apps/gotify](https://github.com/YunoHost-Apps/gotify_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/gotify/issues](https://github.com/YunoHost-Apps/gotify_ynh/issues) diff --git a/pages/02.applications/02.docs/grav/app_grav.fr.md b/pages/02.applications/02.docs/grav/app_grav.fr.md new file mode 100644 index 00000000..d15f9148 --- /dev/null +++ b/pages/02.applications/02.docs/grav/app_grav.fr.md @@ -0,0 +1,31 @@ +--- +title: Grav +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_grav' +--- + + + +[](https://install-app.yunohost.org/?app=grav) [](https://dash.yunohost.org/appci/app/grav) + +### Index + +- [Liens utiles](#liens-utiles) + +Grav est une plateforme Web rapide, simple et flexible, basée sur des fichiers. Aucune installation n'est nécessaire. Il suffit d'extraire l'archive ZIP, et vous êtes déjà opérationnel. Il suit des principes similaires à ceux des autres plates-formes CMS à fichiers plats, mais sa philosophie de conception est différente de la plupart des autres. Grav est livré avec un puissant système de gestion des paquets qui permet une installation et une mise à jour simples des plugins et des thèmes, ainsi qu'une mise à jour simple de Grav lui-même.[¹](#sources) + +## Liens utiles + + + Site web : [getgrav.org (en)](https://getgrav.org/) + + Documentation officielle : [learn.getgrav.org (en)](https://learn.getgrav.org/) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/grav](https://github.com/YunoHost-Apps/grav_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/grav/issues](https://github.com/YunoHost-Apps/grav_ynh/issues) + +------ + +### Sources + +¹ [github.com - getgrav/grav (en)](https://github.com/getgrav/grav) diff --git a/pages/02.applications/02.docs/grav/app_grav.md b/pages/02.applications/02.docs/grav/app_grav.md new file mode 100644 index 00000000..d35ea9ec --- /dev/null +++ b/pages/02.applications/02.docs/grav/app_grav.md @@ -0,0 +1,31 @@ +--- +title: Grav +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_grav' +--- + + + +[](https://install-app.yunohost.org/?app=grav) [](https://dash.yunohost.org/appci/app/grav) + +### Index + +- [Useful links](#useful-links) + +Grav is a Fast, Simple, and Flexible, file-based Web-platform. There is Zero installation required. Just extract the ZIP archive, and you are already up and running. It follows similar principles to other flat-file CMS platforms, but has a different design philosophy than most. Grav comes with a powerful Package Management System to allow for simple installation and upgrading of plugins and themes, as well as simple updating of Grav itself.[¹](#sources) + +## Useful links + ++ Website: [getgrav.org](https://getgrav.org/) ++ Official documentation: [learn.getgrav.org](https://learn.getgrav.org/) ++ Application software repository: [github.com - YunoHost-Apps/grav](https://github.com/YunoHost-Apps/grav_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/grav/issues](https://github.com/YunoHost-Apps/grav_ynh/issues) + +------ + +### Sources + +¹ [github.com - getgrav/grav](https://github.com/getgrav/grav) diff --git a/pages/02.applications/02.docs/halcyon/app_halcyon.fr.md b/pages/02.applications/02.docs/halcyon/app_halcyon.fr.md new file mode 100644 index 00000000..ce0b74ef --- /dev/null +++ b/pages/02.applications/02.docs/halcyon/app_halcyon.fr.md @@ -0,0 +1,36 @@ +--- +title: Halcyon +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_halcyon' +--- + + + +[](https://install-app.yunohost.org/?app=halcyon) [](https://dash.yunohost.org/appci/app/halcyon) + +### Index + +- [Limitations avec YunoHost](#limitations-avec-yunohost) +- [Liens utiles](#liens-utiles) + +Halcyon est un client web pour Mastodon et Pleroma qui vise à recréer l'interface utilisateur simple et belle de Twitter tout en conservant tous les avantages des réseaux décentralisés.[¹](#sources) + +## Limitations avec YunoHost + +L'application nécessite un domaine dédié comme `halcyon.domaine.tld` + +## Liens utiles + + + Site web : [www.halcyon.social (en)](https://www.halcyon.social/) + + Documentation officielle : [www.halcyon.social - documentation (en)](https://www.halcyon.social/documentation.php) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/halcyon](https://github.com/YunoHost-Apps/halcyon_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/halcyon/issues](https://github.com/YunoHost-Apps/halcyon_ynh/issues) + +------ + +### Sources + +¹ [www.halcyon.social (en)](https://www.halcyon.social/) diff --git a/pages/02.applications/02.docs/halcyon/app_halcyon.md b/pages/02.applications/02.docs/halcyon/app_halcyon.md new file mode 100644 index 00000000..3282e5c7 --- /dev/null +++ b/pages/02.applications/02.docs/halcyon/app_halcyon.md @@ -0,0 +1,36 @@ +--- +title: Halcyon +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_halcyon' +--- + + + +[](https://install-app.yunohost.org/?app=halcyon) [](https://dash.yunohost.org/appci/app/halcyon) + +### Index + +- [Limitations with YunoHost](#limitations-with-yunohost) +- [Useful links](#useful-links) + +Halcyon is a webclient for Mastodon and Pleroma which aims to recreate the simple and beautiful user interface of Twitter while keeping all advantages of decentral networks in focus.[¹](#sources) + +## Limitations with YunoHost + +The app require a dedicated domain like `halcyon.domain.tld` + +## Useful links + ++ Website: [www.halcyon.social](https://www.halcyon.social/) ++ Official documentation: [www.halcyon.social - documentation](https://www.halcyon.social/documentation.php) ++ Application software repository: [github.com - YunoHost-Apps/halcyon](https://github.com/YunoHost-Apps/halcyon_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/halcyon/issues](https://github.com/YunoHost-Apps/halcyon_ynh/issues) + +------ + +### sources + +¹ [www.halcyon.social](https://www.halcyon.social/) diff --git a/pages/02.applications/02.docs/haste/app_haste.fr.md b/pages/02.applications/02.docs/haste/app_haste.fr.md new file mode 100644 index 00000000..354a7fc4 --- /dev/null +++ b/pages/02.applications/02.docs/haste/app_haste.fr.md @@ -0,0 +1,36 @@ +--- +title: Haste +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_haste' +--- + + + +[](https://install-app.yunohost.org/?app=haste) [](https://dash.yunohost.org/appci/app/haste) + +### Index + +- [Configuration](#Configuration) +- [Liens utiles](#useful-links) + +Haste est un logiciel pastebin open-source écrit en Node.js, facilement installable sur n'importe quel réseau. Le projet YunoHost utilise Haste comme pastebin pour le partage de log : [paste.yunohost.org](https://paste.yunohost.org/) + +## Configuration + +Ce paquet de Haste pour YunoHost comprend une commande [`haste`](https://github.com/diethnis/standalones/blob/master/hastebin.sh), vous permettant de partager du contenu avec le terminal : + +```bash +cat something | haste +https://haste.example.com/zuyejeduzu +``` + +Le [client Haste](https://github.com/seejohnrun/haste-client) est un client simple pour télécharger des données sur votre serveur Haste. + +## Liens utiles + ++ Documentation officielle : [hastebin.com - about](https://hastebin.com/about.md) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/haste](https://github.com/YunoHost-Apps/haste_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/haste/issues](https://github.com/YunoHost-Apps/haste_ynh/issues) diff --git a/pages/02.applications/02.docs/haste/app_haste.md b/pages/02.applications/02.docs/haste/app_haste.md new file mode 100644 index 00000000..935cc0fc --- /dev/null +++ b/pages/02.applications/02.docs/haste/app_haste.md @@ -0,0 +1,37 @@ +--- +title: Haste +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_haste' +--- + + + +[](https://install-app.yunohost.org/?app=haste) [](https://dash.yunohost.org/appci/app/haste) + +### Index + +- [Configuration](#Configuration) +- [Useful links](#useful-links) + +Haste is an open-source pastebin software written in Node.js, which is easily installable in any network. YunoHost Project uses Haste as pastebin for log sharing: [paste.yunohost.org](https://paste.yunohost.org/) + +## Configuration + +This Haste package for YunoHost includes the [`haste` command](https://github.com/diethnis/standalones/blob/master/hastebin.sh), allowing you to share content from terminal: + +```bash +cat something | haste +https://haste.example.com/zuyejeduzu +``` +The [Haste-client](https://github.com/seejohnrun/haste-client) is a simple client for uploading data to you Haste server. + +Haste requires a dedicated domain like `haste.domain.tld`. + +## Useful links + ++ Official documentation: [hastebin.com - about](https://hastebin.com/about.md) ++ Application software repository: [github.com - YunoHost-Apps/haste](https://github.com/YunoHost-Apps/haste_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/haste/issues](https://github.com/YunoHost-Apps/haste_ynh/issues) diff --git a/pages/02.applications/02.docs/hedgedoc/app_hedgedoc.fr.md b/pages/02.applications/02.docs/hedgedoc/app_hedgedoc.fr.md new file mode 100644 index 00000000..f8d47f23 --- /dev/null +++ b/pages/02.applications/02.docs/hedgedoc/app_hedgedoc.fr.md @@ -0,0 +1,27 @@ +--- +title: HedgeDoc +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_hedgedoc' +--- + + + +[](https://install-app.yunohost.org/?app=hedgedoc) [](https://dash.yunohost.org/appci/app/hedgedoc) + +### Index + +- [Liens utiles](#liens-utiles) + +HedgeDoc est un service web de traitement de texte collaboratif en temps réel. Il utilise le langage Markdown, qui est un moyen simple pour formater un texte. +HedgeDoc propose un vaste choix de fonctionnalités pour toutes les utilisations courantes du traitement de texte parmi lesquelles gestion des titres, table de matières, insertion d’images, tableaux, notes de bas de page, incrustation de vidéos, visualisateurs PDF, expressions mathématiques LaTeX avec MathJax, diagrammes, etc. +Différents niveaux de permission permettent de choisir qui peut lire ou éditer le document. + +## Liens utiles + ++ Démo officielle : [https://demo.hedgedoc.org/](https://demo.hedgedoc.org/) ++ Documentation officielle : [github.com/hedgedoc](https://github.com/hedgedoc/hedgedoc/tree/master/docs) ++ Dépôt logiciel de l’application : [github.com - YunoHost-Apps/hedgedoc](https://github.com/YunoHost-Apps/codimd_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/hedgedoc/issues](https://github.com/YunoHost-Apps/hedgedoc_ynh/issues) diff --git a/pages/02.applications/02.docs/hedgedoc/app_hedgedoc.md b/pages/02.applications/02.docs/hedgedoc/app_hedgedoc.md new file mode 100644 index 00000000..c75a4632 --- /dev/null +++ b/pages/02.applications/02.docs/hedgedoc/app_hedgedoc.md @@ -0,0 +1,27 @@ +--- +title: HedgeDoc +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_hedgedoc' +--- + + + +[](https://install-app.yunohost.org/?app=hedgedoc) [](https://dash.yunohost.org/appci/app/hedgedoc) + +### Index + +- [Useful links](#useful-links) + +HedgeDoc is a collaborative, real-time word processing web service. It uses Markdown language, which is a simple way to format text. +HedgeDoc offers a wide range of features for all common uses of word processing, including title management, table of contents, insertion of images, tables, footnotes, video overlay, PDF viewers, LaTeX mathematical expressions with MathJax, diagrams, etc. +Different levels of permission allow you to choose who can read or edit the document. + +## Useful links + ++ Official demo: [https://demo.hedgedoc.org/](https://demo.hedgedoc.org/) ++ Official documentation: [github.com/hedgedoc](https://github.com/hedgedoc/hedgedoc/tree/master/docs) ++ Application software repository: [github.com - YunoHost-Apps/hedgedoc](https://github.com/YunoHost-Apps/hedgedoc_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/hedgedoc/issues](https://github.com/YunoHost-Apps/hedgedoc_ynh/issues) diff --git a/pages/02.applications/02.docs/hextris/app_hextris.fr.md b/pages/02.applications/02.docs/hextris/app_hextris.fr.md new file mode 100644 index 00000000..6ebe08cf --- /dev/null +++ b/pages/02.applications/02.docs/hextris/app_hextris.fr.md @@ -0,0 +1,26 @@ +--- +title: Hextrix +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_hextris' +--- + + + +[](https://install-app.yunohost.org/?app=hextris) [](https://dash.yunohost.org/appci/app/hextris) + +### Index + +- [Liens utiles](#liens-utiles) + +Car parfois il faut savoir se détendre. Hébergez votre propre fork du célèbre Tetris et devenez le maitre de cet infernal hexagone. +Qui domptera cet hexagone ? + +## Liens utiles + + + Site web : [hextris.github.io (en)](http://hextris.github.io/) + + Documentation officielle : [github.com - Hextris (en)](https://github.com/Hextris/Hextris) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/hextris](https://github.com/YunoHost-Apps/hextris_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/hextris/issues](https://github.com/YunoHost-Apps/hextris_ynh/issues) diff --git a/pages/02.applications/02.docs/hextris/app_hextris.md b/pages/02.applications/02.docs/hextris/app_hextris.md new file mode 100644 index 00000000..84f6d4a4 --- /dev/null +++ b/pages/02.applications/02.docs/hextris/app_hextris.md @@ -0,0 +1,26 @@ +--- +title: Hextris +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_hextris' +--- + + + +[](https://install-app.yunohost.org/?app=hextris) [](https://dash.yunohost.org/appci/app/hextris) + +### Index + +- [Useful links](#useful-links) + +Because sometimes you have to know how to relax. Host your own fork of the famous Tetris and become the master of this infernal hexagon? Who will tame this infernal. + +## Useful links + ++ Website: [hextris.github.io](http://hextris.github.io/) ++ Official documentation: [github.com - Hextris](https://github.com/Hextris/Hextris) ++ Application software repository: [github.com - YunoHost-Apps/hextris](https://github.com/YunoHost-Apps/hextris_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/hextris/issues](https://github.com/YunoHost-Apps/hextris_ynh/issues) + hexagon? diff --git a/pages/02.applications/02.docs/horde/app_horde.fr.md b/pages/02.applications/02.docs/horde/app_horde.fr.md new file mode 100644 index 00000000..d9f596c4 --- /dev/null +++ b/pages/02.applications/02.docs/horde/app_horde.fr.md @@ -0,0 +1,31 @@ +--- +title: Horde +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_horde' +--- + + + +[](https://install-app.yunohost.org/?app=horde) [](https://dash.yunohost.org/appci/app/horde) + +### Index + +- [Liens utiles](#liens-utiles) + +Horde Groupware Webmail Edition est une suite de communication libre, prête à l'emploi, basée sur un navigateur. Les utilisateurs peuvent lire, envoyer et organiser des messages électroniques et gérer et partager des calendriers, des contacts, des tâches et des notes avec les composants conformes aux normes du projet Horde.[¹](#sources) + +## Liens utiles + + + Site web : [www.horde.org (en)](https://www.horde.org/) + + Documentation officielle : [wiki.horde.org (en)](https://wiki.horde.org/) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/horde](https://github.com/YunoHost-Apps/horde_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/horde/issues](https://github.com/YunoHost-Apps/horde_ynh/issues) + +------ + +### sources + +¹ [www.horde.org - apps (en)](https://www.horde.org/apps) diff --git a/pages/02.applications/02.docs/horde/app_horde.md b/pages/02.applications/02.docs/horde/app_horde.md new file mode 100644 index 00000000..f2e9c3fe --- /dev/null +++ b/pages/02.applications/02.docs/horde/app_horde.md @@ -0,0 +1,31 @@ +--- +title: Horde +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_horde' +--- + + + +[](https://install-app.yunohost.org/?app=horde) [](https://dash.yunohost.org/appci/app/horde) + +### Index + +- [Useful links](#useful-links) + +Horde Groupware Webmail Edition is a free, enterprise ready, browser based communication suite. Users can read, send and organize email messages and manage and share calendars, contacts, tasks and notes with the standards compliant components from the Horde Project.[¹](#sources) + +## Useful links + ++ Website: [www.horde.org](https://www.horde.org/) ++ Official documentation: [wiki.horde.org](https://wiki.horde.org/) ++ Application software repository: [github.com - YunoHost-Apps/horde](https://github.com/YunoHost-Apps/horde_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/horde/issues](https://github.com/YunoHost-Apps/horde_ynh/issues) + +------ + +### Sources + +¹ [www.horde.org - apps](https://www.horde.org/apps) diff --git a/pages/02.applications/02.docs/hubzilla/app_hubzilla.fr.md b/pages/02.applications/02.docs/hubzilla/app_hubzilla.fr.md new file mode 100644 index 00000000..63b7fa84 --- /dev/null +++ b/pages/02.applications/02.docs/hubzilla/app_hubzilla.fr.md @@ -0,0 +1,30 @@ +--- +title: Hubzilla +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_hubzilla' +--- + + + +[](https://install-app.yunohost.org/?app=hubzilla) [](https://dash.yunohost.org/appci/app/hubzilla) + +### Index + +- [Configuration](#configuration) +- [Liens utiles](#liens-utiles) + +Hubzilla est une plateforme de réseau social construite avec le contrôle de votre vie privée au centre. Vos communications en ligne peuvent être aussi publiques que vous le souhaitez ou aussi privées que vous le souhaitez. Conversations privées, photos privées, vidéos privées. Vos médias ne se cachent pas derrière une obscure URL que l'on peut deviner, ils sont protégés par une authentification de pointe à travers les domaines. Ce que tout cela signifie pour vous : moins de drame. + +## Configuration + +Hubzilla nécessite un domaine dédié comme par exemple `hubzilla.domaine.tld`. + +## Liens utiles + + + Site web : [zotlabs.org - hubzilla/hubzilla-project (en)](https://zotlabs.org/page/hubzilla/hubzilla-project) + + Documentation officielle : [zotlabs.org - help/about](https://zotlabs.org/help/fr/about/about) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/hubzilla](https://github.com/YunoHost-Apps/hubzilla_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/hubzilla/issues](https://github.com/YunoHost-Apps/hubzilla_ynh/issues) diff --git a/pages/02.applications/02.docs/hubzilla/app_hubzilla.md b/pages/02.applications/02.docs/hubzilla/app_hubzilla.md new file mode 100644 index 00000000..bf7fdb38 --- /dev/null +++ b/pages/02.applications/02.docs/hubzilla/app_hubzilla.md @@ -0,0 +1,30 @@ +--- +title: Hubzilla +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_hubzilla' +--- + + + +[](https://install-app.yunohost.org/?app=hubzilla) [](https://dash.yunohost.org/appci/app/hubzilla) + +### Index + +- [Configuration](#Configuration) +- [Useful links](#useful-links) + +Hubzilla is a social networking platform built with control of your privacy at center stage. Your online communications can be as public as you wish or as private as you require. Private conversations, private photos, private videos. Your media isn't hidden behind an obscure URL which can be guessed, it is protected by state-of-the-art cross-domain authentication. What this all means for you: less drama. + +## Configuration + +Hubzilla requires a dedicated domain like `hubzilla.domain.tld`. + +## Useful links + ++ Website: [zotlabs.org - hubzilla/hubzilla-project](https://zotlabs.org/page/hubzilla/hubzilla-project) ++ Official documentation: [zotlabs.org - help/about](https://zotlabs.org/help/en/about/about) ++ Application software repository: [github.com - YunoHost-Apps/hubzilla](https://github.com/YunoHost-Apps/hubzilla_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/hubzilla/issues](https://github.com/YunoHost-Apps/hubzilla_ynh/issues) diff --git a/pages/02.applications/02.docs/invoiceninga/app_invoiceninja.md b/pages/02.applications/02.docs/invoiceninga/app_invoiceninja.md new file mode 100644 index 00000000..1f52a6cf --- /dev/null +++ b/pages/02.applications/02.docs/invoiceninga/app_invoiceninja.md @@ -0,0 +1,33 @@ +--- +title: Invoice Ninja +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_invoiceninja' +--- + + + +[](https://install-app.yunohost.org/?app=invoiceninja) +[](https://dash.yunohost.org/appci/app/invoiceninja) + + +### Index + +- [Limitations with YunoHost](#limitations-with-yunohost) +- [Useful links](#useful-links) + +Invoice Ninja is an open-source platform to create and email invoices, track payments, expenses, time billable tasks and projects for clients. + + +## Limitations with YunoHost + +There is no official LDAP support. The first user gets created after installing Invoice Ninja. Other users can be created from inside the application + +## Useful links + ++ Website: https://www.invoiceninja.org/ ++ Application software repository: https://github.com/YunoHost-Apps/invoiceninja_ynh ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/invoiceninja/issues](https://github.com/YunoHost-Apps/invoiceninja_ynh/issues) ++ Official documentation: [Invoice Ninja User Guide](https://docs.invoiceninja.com/) diff --git a/pages/02.applications/02.docs/jappix/app_jappix.fr.md b/pages/02.applications/02.docs/jappix/app_jappix.fr.md new file mode 100644 index 00000000..06077e7b --- /dev/null +++ b/pages/02.applications/02.docs/jappix/app_jappix.fr.md @@ -0,0 +1,12 @@ +--- +title: Jappix +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_jappix' +--- + + + +Jappix est un client web [XMPP](/XMPP). diff --git a/pages/02.applications/02.docs/jappix/app_jappix.md b/pages/02.applications/02.docs/jappix/app_jappix.md new file mode 100644 index 00000000..58dc2201 --- /dev/null +++ b/pages/02.applications/02.docs/jappix/app_jappix.md @@ -0,0 +1,12 @@ +--- +title: Jappix +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_jappix' +--- + + + +Jappix is a web client for [XMPP](/XMPP). diff --git a/pages/02.applications/02.docs/jirafeau/app_jirafeau.fr.md b/pages/02.applications/02.docs/jirafeau/app_jirafeau.fr.md new file mode 100644 index 00000000..4454aee7 --- /dev/null +++ b/pages/02.applications/02.docs/jirafeau/app_jirafeau.fr.md @@ -0,0 +1,49 @@ +--- +title: Jirafeau +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_jirafeau' +--- + + + +[](https://install-app.yunohost.org/?app=jirafeau) [](https://dash.yunohost.org/appci/app/jirafeau) + +### Index + +- [Configuration](#configuration) + - [Changer les conditions d'utilisation du service](#changer-les-conditions-d'utilisation-du-service) + - [Administration](#administration) +- [Liens utiles](#liens-utiles) + +Jirafeau offre la possibilité d'héberger et de partager vos fichiers, le tout en toute simplicité. Choisissez un fichier, Jirafeau vous fournira un lien avec beaucoup d'options. +Il est possible de protéger vos liens avec mot de passe ainsi que de choisir la durée de rétention du fichier sur le serveur. Le fichier et le lien s'autodétruiront passé ce délai. +Les téléchargements des fichiers transmis peuvent être limités à une certaine date, et chaque fichier peut s'autodétruire après le premier téléchargement. +Jirafeau permet de configurer les temps maximum de rétention ainsi que la taille maximale par fichier. Le chiffrement est disponible en option.[¹](#sources) + +## Configuration + +### Changer les conditions d'utilisation du service + +Le texte de la licence sur la page "Conditions d'utilisation du service", qui est livrée avec l'installation par défaut, est basé sur les "Conditions d'utilisation du service de l'Initiative Open Source". +Pour modifier ce texte, il suffit de copier le fichier `/lib/tos.original.txt`, de le renommer en `/lib/tos.local.txt` et de l'adapter à vos propres besoins. +Si vous mettez à jour l'installation, alors seul le fichier `tos.original.txt` peut changer éventuellement, et non votre fichier `tos.local.txt`. + +### Administration + +Pour administrer les fichiers présents au sein de Jirafeau il suffit de se rendre à l'adresse `jirafeau.domaine.tld/admin.php`. + +## Liens utiles + + + Site web : [jirafeau.net](https://jirafeau.net/) + + Documentation officielle : [gitlab.com - mojo42/Jirafeau](https://gitlab.com/mojo42/Jirafeau) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/jirafeau](https://github.com/YunoHost-Apps/jirafeau_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/jirafeau/issues](https://github.com/YunoHost-Apps/jirafeau_ynh/issues) + +------ + +### Sources + +¹ [framalibre.org](https://framalibre.org/content/jirafeau) diff --git a/pages/02.applications/02.docs/jirafeau/app_jirafeau.md b/pages/02.applications/02.docs/jirafeau/app_jirafeau.md new file mode 100644 index 00000000..6969624a --- /dev/null +++ b/pages/02.applications/02.docs/jirafeau/app_jirafeau.md @@ -0,0 +1,49 @@ +--- +title: Jirafeau +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_jirafeau' +--- + + + +[](https://install-app.yunohost.org/?app=jirafeau) [](https://dash.yunohost.org/appci/app/jirafeau) + +### Index + +- [Configuration](#configuration) + - [Changing the conditions of use of the service](#changing-the-conditions-of-use-of-the-service) + - [Administration](#administration) +- [Useful links](#useful-links) + +Jirafeau offers the possibility to host and share your files with ease. Choose a file, Jirafeau will provide you with a link with many options. +It is possible to protect your links with a password as well as to choose how long the file will be kept on the server. The file and the link will self-destruct after this time. +Downloads of transmitted files can be limited to a certain date, and each file can self-destruct after the first download. +Jirafeau allows you to configure maximum retention times and maximum size per file. Encryption is available as an option.[¹](#sources) + +## Configuration + +### Changing the conditions of use of the service + +The license text on the "Terms of Service" page, which is shipped with the default installation, is "based on the Open Source Initiative Terms of Service". +To change this text simply copy the file `/lib/tos.original.txt`, rename it to `/lib/tos.local.txt` and adapt it to your own needs. +If you update the installation, then only the `tos.original.txt` file may change eventually, not your `tos.local.txt` file. + +### Administration + +To administrate the files within Jirafeau it is enough to go to the address `jirafeau.domaine.tld/admin.php`. + +## Useful links + ++ Website: [jirafeau.net](https://jirafeau.net/) ++ Official documentation: [gitlab.com - mojo42/Jirafeau (en)](https://gitlab.com/mojo42/Jirafeau) ++ Application software repository: [github.com - YunoHost-Apps/jirafeau](https://github.com/YunoHost-Apps/jirafeau_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/jirafeau/issues](https://github.com/YunoHost-Apps/jirafeau_ynh/issues) + +------ + +### Sources + +¹ [framalibre.org (fr)](https://framalibre.org/content/jirafeau) diff --git a/pages/02.applications/02.docs/jitsi/app_jitsi.fr.md b/pages/02.applications/02.docs/jitsi/app_jitsi.fr.md new file mode 100644 index 00000000..fc54e095 --- /dev/null +++ b/pages/02.applications/02.docs/jitsi/app_jitsi.fr.md @@ -0,0 +1,42 @@ +--- +title: Jitsi +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_jitsi' +--- + + + +[](https://install-app.yunohost.org/?app=jitsi) [](https://dash.yunohost.org/appci/app/jitsi) + +### Index + +- [Limitations avec YunoHost](#limitations-avec-yunohost) +- [Applications clientes](#applications-clientes) +- [Liens utiles](#liens-utiles) + +Jitsi Meet est un logiciel libre (Apache) qui propose des vidéos-conférences de haute qualité, sécurisées et évolutives. Des options de partages d'écran, de chats en direct, de demandes de prises de paroles, ainsi que de paramétrages de qualité de vidéo sont proposées pour faciliter les réunions de groupe. + +## Limitations avec YunoHost + +Jitsi-meet pour YunoHost est limité actuellement : + +* Il ne peut être utilisé qu'avec Chrome ou un navigateur basé sur Chromium (comme [Iron](https://www.srware.net/iron/)) ou [Firefox](https://www.mozilla.org/fr/firefox/browsers/) (à partir de la version 76) +* Il est actuellement limité à 2 participants par réunion + + +## Applications clientes + +| Nom de l'application | Plateforme | Multi-comptes | Autres réseaux supportés | Play Store | F-Droid | Apple Store | *Autres* | +|-----------------------|------------|---------------|-------------------------|------------|---------|-------------|----------| +| Jitsi Meet | Android - iOS | | | [Jitsi Meet](https://play.google.com/store/apps/details?id=org.jitsi.meet) | [Jitsi Meet](https://f-droid.org/en/packages/org.jitsi.meet/) | [Jitsi Meet](https://apps.apple.com/us/app/jitsi-meet/id1165103905) | | +| Jitsi Meet Desktop | Windows - macOS - GNU/Linux | | | | | | [Téléchargement](https://desktop.jitsi.org/Main/Download) | + +## Liens utiles + + + Site web : [jitsi.org](https://jitsi.org) + + Documentation officielle : [jitsi.org/user-faq](https://jitsi.org/user-faq/) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/jitsi](https://github.com/YunoHost-Apps/jitsi_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/jitsi/issues](https://github.com/YunoHost-Apps/jitsi_ynh/issues) diff --git a/pages/02.applications/02.docs/jitsi/app_jitsi.md b/pages/02.applications/02.docs/jitsi/app_jitsi.md new file mode 100644 index 00000000..7138c908 --- /dev/null +++ b/pages/02.applications/02.docs/jitsi/app_jitsi.md @@ -0,0 +1,42 @@ +--- +title: Jitsi +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_jitsi' +--- + + + +[](https://install-app.yunohost.org/?app=jitsi) [](https://dash.yunohost.org/appci/app/jitsi) + +### Index + +- [Limitations of YunoHost](#limitations-with-yunohost) +- [Customer Applications](#customer-applications) +- [Useful links](#useful-links) + +Jitsi Meet is an open source software (Apache) that offers high quality, secure and scalable video conferencing. Options for screen sharing, live chat, speech requests, as well as settings for video quality are offered to facilitate group meetings. + +## Limitations with YunoHost + +Jitsi for YunoHost for now as some limitations: + +* Can only be used using Chrome/Chromium (like [Iron](https://www.srware.net/iron/)) or [Firefox](https://www.mozilla.org/fr/firefox/browsers/) (since version 76) +* Is limited to two participants + + +## Customer applications + +| Application name | Platform | Multi-account | Other supported networks | Play Store | F-Droid | Apple Store | *Other* | +|-----------------------|------------|---------------|-------------------------|------------|---------|-------------|----------| +| Jitsi Meet | Android - iOS | | | [Jitsi Meet](https://play.google.com/store/apps/details?id=org.jitsi.meet) | [Jitsi Meet](https://f-droid.org/en/packages/org.jitsi.meet/) | [Jitsi Meet](https://apps.apple.com/us/app/jitsi-meet/id1165103905) | | +| Jitsi Meet Desktop | Windows - macOS - GNU/Linux | | | | | | [Download](https://desktop.jitsi.org/Main/Download) | + +## Useful links + + + Website : [jitsi.org](https://jitsi.org) + + Official documentation: [jitsi.org/user-faq](https://jitsi.org/user-faq/) + + Application software repository:: [github.com - YunoHost-Apps/jitsi](https://github.com/YunoHost-Apps/jitsi_ynh) + + Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/jitsi/issues](https://github.com/YunoHost-Apps/jitsi_ynh/issues) diff --git a/pages/02.applications/02.docs/jupyterlab/app_jupyterlab.fr.md b/pages/02.applications/02.docs/jupyterlab/app_jupyterlab.fr.md new file mode 100644 index 00000000..3ab1d675 --- /dev/null +++ b/pages/02.applications/02.docs/jupyterlab/app_jupyterlab.fr.md @@ -0,0 +1,25 @@ +--- +title: JupyterLab +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_jupyterlab' +--- + + + +[](https://install-app.yunohost.org/?app=jupyterlab) [](https://dash.yunohost.org/appci/app/jupyterlab) + +### Index + +- [Liens utiles](#liens-utiles) + +JupyterLab est une interface utilisateur de nouvelle génération pour le projet Jupyter offrant tous les modules de Jupyter Notebook (interpréteur Python, terminal, éditeur de texte, navigateur de fichiers, etc.) dans une interface utilisateur flexible et puissante. JupyterLab remplacera à terme Jupyter Notebook. + +## Liens utiles + ++ Site web : [github.com - JupyterHub](https://github.com/jupyterhub/jupyterhub) ++ Documentation officielle : [jupyterlab.readthedocs.io](https://jupyterlab.readthedocs.io/en/stable/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/jupyterlab](https://github.com/YunoHost-Apps/jupyterlab_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/jupyterlab/issues](https://github.com/YunoHost-Apps/jupyterlab_ynh/issues) diff --git a/pages/02.applications/02.docs/jupyterlab/app_jupyterlab.md b/pages/02.applications/02.docs/jupyterlab/app_jupyterlab.md new file mode 100644 index 00000000..2df0a866 --- /dev/null +++ b/pages/02.applications/02.docs/jupyterlab/app_jupyterlab.md @@ -0,0 +1,25 @@ +--- +title: JupyterLab +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_jupyterlab' +--- + + + +[](https://install-app.yunohost.org/?app=jupyterlab) [](https://dash.yunohost.org/appci/app/jupyterlab) + +### Index + +- [Useful links](#useful-links) + +JupyterLab is the next-generation user interface for Project Jupyter offering all the familiar building blocks of the classic Jupyter Notebook (notebook, terminal, text editor, file browser, rich outputs, etc.) in a flexible and powerful user interface. JupyterLab will eventually replace the classic Jupyter Notebook. + +## Useful links + ++ Website: [github.com - JupyterHub](https://github.com/jupyterhub/jupyterhub) ++ Official documentation: [jupyterlab.readthedocs.io](https://jupyterlab.readthedocs.io/en/stable/) ++ Application software repository: [github.com - YunoHost-Apps/jupyterlab](https://github.com/YunoHost-Apps/jupyterlab_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/jupyterlab/issues](https://github.com/YunoHost-Apps/jupyterlab_ynh/issues) diff --git a/pages/02.applications/02.docs/kanboard/app_kanboard.fr.md b/pages/02.applications/02.docs/kanboard/app_kanboard.fr.md new file mode 100644 index 00000000..de56ca41 --- /dev/null +++ b/pages/02.applications/02.docs/kanboard/app_kanboard.fr.md @@ -0,0 +1,27 @@ +--- +title: Kanboard +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_kanboard' +--- + + + +[](https://install-app.yunohost.org/?app=kanboard) [](https://dash.yunohost.org/appci/app/kanboard) + +### Index + +- [Liens utiles](#liens-utiles) + +Kanboard est un gestionnaire de tâches visuel qui permet de gérer facilement des petits projets de manière collaborative. L'outil est particulièrement adapté aux personnes qui utilisent la méthode Kanban. On peut voir Kanboard comme une alternative (simplifiée) au logiciel propriétaire Trello. Kanboard est un logiciel minimaliste, il se concentre uniquement sur les fonctionnalités réellement nécessaires. L'interface utilisateur est simple et clair. +L'outil est prévu pour fonctionner sur une petite machine tel qu'un Raspberry Pi ou un serveur virtuel privé (VPS). Il n'y a aucune dépendance externe, le glisser-déposer des tâches utilise les nouvelles API de HTML5. + +## Liens utiles + ++ Site web : [kanboard.org](https://kanboard.org) ++ Documentation officielle : [docs.kanboard.org/en/latest](https://docs.kanboard.org/fr/latest) ++ Démonstration : [Démo](https://framaboard.org) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/kanboard](https://github.com/YunoHost-Apps/kanboard_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/kanboard/issues](https://github.com/YunoHost-Apps/kanboard_ynh/issues) diff --git a/pages/02.applications/02.docs/kanboard/app_kanboard.md b/pages/02.applications/02.docs/kanboard/app_kanboard.md new file mode 100644 index 00000000..00a2a1ea --- /dev/null +++ b/pages/02.applications/02.docs/kanboard/app_kanboard.md @@ -0,0 +1,28 @@ +--- +title: Kanboard +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_kanboard' +--- + + + +[](https://install-app.yunohost.org/?app=kanboard) [](https://dash.yunohost.org/appci/app/kanboard) + +### Index + +- [Useful links](#useful-links) + +Kanboard is a visual task manager that makes it easy to manage small projects in a collaborative way. The tool is particularly suitable for people who use the Kanban method. Kanboard can be seen as a (Simplified) alternative to the proprietary Trello software. Kanboard is a minimalist software, it focuses only on the features that are really necessary. The user interface is simple and clear. +The tool is designed to run on a small machine such as a Raspberry Pi or a Virtual Private Server (VPS). There are no external dependencies, drag and drop of tasks uses the new HTML5 APIs. + + +## Useful links + ++ Website: [kanboard.org](https://kanboard.org) ++ Official documentation: [docs.kanboard.org/en/latest](https://docs.kanboard.org/en/latest) ++ Demonstration: [Demo](https://framaboard.org) ++ Application software repository: [github.com - YunoHost-Apps/kanboard](https://github.com/YunoHost-Apps/kanboard_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/kanboard/issues](https://github.com/YunoHost-Apps/kanboard_ynh/issues) diff --git a/pages/02.applications/02.docs/keeweb/app_keeweb.fr.md b/pages/02.applications/02.docs/keeweb/app_keeweb.fr.md new file mode 100644 index 00000000..84da5c7f --- /dev/null +++ b/pages/02.applications/02.docs/keeweb/app_keeweb.fr.md @@ -0,0 +1,28 @@ +--- +title: KeeWeb +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_keeweb' +--- + + + +[](https://install-app.yunohost.org/?app=keeweb) [](https://dash.yunohost.org/appci/app/keeweb) + +### Index + +- [Liens utiles](#liens-utiles) + +Un gestionnaire Web élégant et efficace pour gérer vos mots de passe à distance. +Le fichier contenant les mots de passe (.kdbx) peut vous suivre en local sur votre PC, sur une clef USB ou être stocké sur votre serveur en WebDAV. +KeeWeb gère aussi des fichiers compatibles avec les autres gestionnaires de mots de passe comme [KeePass](http://keepass.info), [KeePassX](https://www.keepassx.org/) ou [KeePassXC](https://keepassxc.org/). + +## Liens utiles + ++ Site web : [keeweb.info](https://keeweb.info) ++ Documentation officielle : [keeweb.info](https://keeweb.info) ++ Démonstration : [Démo](https://app.keeweb.info) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/keeweb](https://github.com/YunoHost-Apps/keeweb_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/keeweb/issues](https://github.com/YunoHost-Apps/keeweb_ynh/issues) diff --git a/pages/02.applications/02.docs/keeweb/app_keeweb.md b/pages/02.applications/02.docs/keeweb/app_keeweb.md new file mode 100644 index 00000000..770f9c76 --- /dev/null +++ b/pages/02.applications/02.docs/keeweb/app_keeweb.md @@ -0,0 +1,28 @@ +--- +title: KeeWeb +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_keeweb' +--- + + + +[](https://install-app.yunohost.org/?app=keeweb) [](https://dash.yunohost.org/appci/app/keeweb) + +### Index + +- [Useful links](#useful-links) + +An elegant and efficient web manager to manage your passwords remotely. +The file containing the passwords (.kdbx) can follow you locally on your PC, on a USB key or be stored on your server in WebDAV. +KeeWeb also manages files compatible with other password managers such as [KeePass](http://keepass.info), [KeePassX](https://www.keepassx.org/) or [KePassXC](https://keepassxc.org/). + +## Useful links + ++ Website: [keeweb.info](https://keeweb.info) ++ Official documentation: [keeweb.info](https://keeweb.info) ++ Demonstration: [Demo](https://app.keeweb.info) ++ Application software repository: [github.com - YunoHost-Apps/keeweb](https://github.com/YunoHost-Apps/keeweb_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/keeweb/issues](https://github.com/YunoHost-Apps/keeweb_ynh/issues) diff --git a/pages/02.applications/02.docs/kresus/app_kresus.fr.md b/pages/02.applications/02.docs/kresus/app_kresus.fr.md new file mode 100644 index 00000000..a96680e8 --- /dev/null +++ b/pages/02.applications/02.docs/kresus/app_kresus.fr.md @@ -0,0 +1,31 @@ +--- +title: Kresus +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_kresus' +--- + + + +[](https://install-app.yunohost.org/?app=kresus) [](https://dash.yunohost.org/appci/app/kresus) + +### Index + +- [Liens utiles](#liens-utiles) + +Kresus est un gestionnaire de finances personnelles gratuit et libre qui tourne sur votre serveur. Il récupère automatiquement et quotidiennement toutes vos nouvelles transactions bancaires et vous permet de les catégoriser, étudier via des graphiques, et établir un budget. + +* Retrouvez l'intégralité de vos comptes dans une même interface et visualisez leur solde en un coup d'œil ! +* Configurez simplement des alertes emails sur montant d'une transaction ou sur solde pour vous prévenir en cas d'événements importants sur vos comptes. +* Définissez vos propres libellés, finis les « Chèque n°168468 » ! Triez vos opérations par catégories. Effectuez des recherches complexes sur vos transactions, par période, catégorie, montant ou date ! +* Suivez l'évolution de vos mouvements d'argent en un clin d'œil avec les graphiques par catégorie, par période et par type de mouvement (dépenses ou rentrées d'argent). + +## Liens utiles + ++ Site web : [kresus.org](https://kresus.org/) ++ Documentation officielle : [kresus.org/en/doc.html](https://kresus.org/en/doc.html) ++ Démonstration : [Démo](https://kresus.org/demo.html) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/kresus](https://github.com/YunoHost-Apps/kresus_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/kresus/issues](https://github.com/YunoHost-Apps/kresus_ynh/issues) diff --git a/pages/02.applications/02.docs/kresus/app_kresus.md b/pages/02.applications/02.docs/kresus/app_kresus.md new file mode 100644 index 00000000..3039fcfe --- /dev/null +++ b/pages/02.applications/02.docs/kresus/app_kresus.md @@ -0,0 +1,32 @@ +--- +title: Kresus +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_kresus' +--- + + + +[](https://install-app.yunohost.org/?app=kresus) [](https://dash.yunohost.org/appci/app/kresus) + +### Index + +- [Useful links](#useful-links) + +Kresus is a free and open source personal finance manager running on your server. It automatically and daily retrieves all your new banking transactions and allows you to categorize them, study them via +graphs, and budgeting. + +* Find all your accounts in one interface and view their balance at a glance! +* Set up simple email alerts on transaction amounts and balances to notify you of important events in your accounts. +* Define your own wording, no more "n°168468"! Sort your transactions by category. Perform complex searches on your transactions, by period, category, amount or date! +* Follow the evolution of your money movements at a glance with the graphs by category, by period and by type of movement (expenses or receipts of money). + +## Useful links + ++ Website : [kresus.org](https://kresus.org/) ++ Official documentation : [kresus.org/en/doc.html](https://kresus.org/en/doc.html) ++ Demonstration : [Demo](https://kresus.org/demo.html) ++ Application software repository : [github.com - YunoHost-Apps/kresus](https://github.com/YunoHost-Apps/kresus_ynh) ++ Fix a bug or an improvement by creating a ticket (issue) : [github.com - YunoHost-Apps/kresus/issues](https://github.com/YunoHost-Apps/kresus_ynh/issues) diff --git a/pages/02.applications/02.docs/leed/app_leed.fr.md b/pages/02.applications/02.docs/leed/app_leed.fr.md new file mode 100644 index 00000000..5ac55db2 --- /dev/null +++ b/pages/02.applications/02.docs/leed/app_leed.fr.md @@ -0,0 +1,26 @@ +--- +title: Leed +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_leed' +--- + + + +[](https://install-app.yunohost.org/?app=leed) [](https://dash.yunohost.org/appci/app/leed) + +### Index + +- [Liens utiles](#liens-utiles) + +Leed (contraction de Light Feed) est un agrégateur RSS/ATOM minimaliste qui permet la consultation de flux RSS de manière rapide et non intrusive. +Cet agrégateur fonctionne avec un système de tâches automatiques afin de traiter les informations de manière transparente et de les afficher le plus rapidement possible lorsque vous vous y connectez. + +## Liens utiles + ++ Site web : [git.idleman.fr/LeedRSS/Leed](http://git.idleman.fr/LeedRSS/Leed) ++ Documentation officielle : [git.idleman.fr/LeedRSS/Leed](http://git.idleman.fr/LeedRSS/Leed) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/leed](https://github.com/YunoHost-Apps/leed_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/leed/issues](https://github.com/YunoHost-Apps/leed_ynh/issues) diff --git a/pages/02.applications/02.docs/leed/app_leed.md b/pages/02.applications/02.docs/leed/app_leed.md new file mode 100644 index 00000000..fa8214e9 --- /dev/null +++ b/pages/02.applications/02.docs/leed/app_leed.md @@ -0,0 +1,26 @@ +--- +title: Leed +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_leed' +--- + + + +[](https://install-app.yunohost.org/?app=leed) [](https://dash.yunohost.org/appci/app/leed) + +### Index + +- [Useful links](#useful-links) + +Leed (short for Light Feed) is a minimalist RSS/ATOM aggregator which offers fast RSS consultation and non-intrusive features. +This aggregator works with a system of automatic tasks in order to process the information transparently and display it as quickly as possible when you login. + +## Useful links + ++ Website: [git.idleman.fr/LeedRSS/Leed](http://git.idleman.fr/LeedRSS/Leed) ++ Official documentation: [git.idleman.fr/LeedRSS/Leed](http://git.idleman.fr/LeedRSS/Leed) ++ Application software repository: [github.com - YunoHost-Apps/leed](https://github.com/YunoHost-Apps/leed_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/leed/issues](https://github.com/YunoHost-Apps/leed_ynh/issues) diff --git a/pages/02.applications/02.docs/limesurvey/app_limesurvey.fr.md b/pages/02.applications/02.docs/limesurvey/app_limesurvey.fr.md new file mode 100644 index 00000000..b07f0cd9 --- /dev/null +++ b/pages/02.applications/02.docs/limesurvey/app_limesurvey.fr.md @@ -0,0 +1,35 @@ +--- +title: LimeSurvey +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_limesurvey' +--- + + + +[](https://install-app.yunohost.org/?app=limesurvey) [](https://dash.yunohost.org/appci/app/limesurvey) + +### Index + +- [Configuration](#configuration) +- [Limitations avec YunoHost](#limitations-avec-yunohost) +- [Liens utiles](#liens-utiles) + +LimeSurvey est un outil de création et diffusion de sondage/formulaire en ligne. + +## Configuration + +Pour configurer un questionnaire, il faut se rendre à `limesurvey.domaine.tld/admin`. + +## Limitations avec YunoHost + +Le multi-utilisateurs n'est pas supporté. + +## Liens utiles + + + Site web : [www.limesurvey.org](https://www.limesurvey.org/fr/) + + Documentation officielle : [manual.limesurvey.org](https://manual.limesurvey.org/LimeSurvey_Manual/fr) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/limesurvey](https://github.com/YunoHost-Apps/limesurvey_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/limesurvey/issues](https://github.com/YunoHost-Apps/limesurvey_ynh/issues) diff --git a/pages/02.applications/02.docs/limesurvey/app_limesurvey.md b/pages/02.applications/02.docs/limesurvey/app_limesurvey.md new file mode 100644 index 00000000..d23b67cc --- /dev/null +++ b/pages/02.applications/02.docs/limesurvey/app_limesurvey.md @@ -0,0 +1,35 @@ +--- +title: LimeSurvey +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_limesurvey' +--- + + + +[](https://install-app.yunohost.org/?app=limesurvey) [](https://dash.yunohost.org/appci/app/limesurvey) + +### Index + +- [Configuration](#configuration) +- [Limitations with YunoHost](#limitations-with-yunohost) +- [Useful links](#useful-links) + +LimeSurvey is a tool for creating and distributing online surveys/forms. + +## Configuration + +To configure a questionnaire, go to `limesurvey.domain.tld/admin`. + +## Limitations with YunoHost + +Multi-user is not supported. + +## Useful links + ++ Website: [www.limesurvey.org](https://www.limesurvey.org/) ++ Official documentation: [manual.limesurvey.org](https://manual.limesurvey.org/LimeSurvey_Manual) ++ Application software repository: [github.com - YunoHost-Apps/limesurvey](https://github.com/YunoHost-Apps/limesurvey_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/limesurvey/issues](https://github.com/YunoHost-Apps/limesurvey_ynh/issues) diff --git a/pages/02.applications/02.docs/lstu/app_lstu.fr.md b/pages/02.applications/02.docs/lstu/app_lstu.fr.md new file mode 100644 index 00000000..a717292f --- /dev/null +++ b/pages/02.applications/02.docs/lstu/app_lstu.fr.md @@ -0,0 +1,26 @@ +--- +title: Lstu +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_lstu' +--- + + + +[](https://install-app.yunohost.org/?app=lstu) [](https://dash.yunohost.org/appci/app/lstu) + +### Index + +- [Liens utiles](#liens-utiles) + +LSTU est l'acronyme de "Let's shorten that URL" et est un raccourcisseur d'URL. Il permet de réduire la taille et de personnaliser une URL et de générer en même temps un flashcode associé. Vous pouvez ainsi relayer une URL plus courte dans des SMS, sur des publications papier ou des affiches. Il propose aussi une API permettant de générer ces liens à partir d'appel d'autres applications. Une extension de navigateur vous permet aussi de raccourcir n'importe quelle URL en un clic. + +## Liens utiles + ++ Site web : [lstu.fr](https://lstu.fr) ++ Documentation officielle : [framagit.org/fiat-tux/hat-softwares/lstu/-/wikis/home](https://framagit.org/fiat-tux/hat-softwares/lstu/-/wikis/home) ++ Démonstration : [Démo](https://lstu.fr) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/lstu](https://github.com/YunoHost-Apps/lstu_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/lstu/issues](https://github.com/YunoHost-Apps/lstu_ynh/issues) diff --git a/pages/02.applications/02.docs/lstu/app_lstu.md b/pages/02.applications/02.docs/lstu/app_lstu.md new file mode 100644 index 00000000..c6e84bb4 --- /dev/null +++ b/pages/02.applications/02.docs/lstu/app_lstu.md @@ -0,0 +1,26 @@ +--- +title: Lstu +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_lstu' +--- + + + +[](https://install-app.yunohost.org/?app=lstu) [](https://dash.yunohost.org/appci/app/lstu) + +### Index + +- [Useful links](#useful-links) + +LSTU stands for "Let's shorten that URL" and is a URL shortener. It allows you to reduce the size and customize a URL and generate an associated flashcode at the same time. You can thus relay a shorter URL in text messages, on paper publications or posters. It also offers an API to generate these links from calls to other applications. A browser extension also allows you to shorten any URL in one click. + +## Useful links + ++ Website : [lstu.fr](https://lstu.fr) ++ Official documentation : [framagit.org/fiat-tux/hat-softwares/lstu/-/wikis/home](https://framagit.org/fiat-tux/hat-softwares/lstu/-/wikis/home) ++ Demonstration : [Demo](https://lstu.fr) ++ Application software repository : [github.com - YunoHost-Apps/lstu](https://github.com/YunoHost-Apps/lstu_ynh) ++ Fix a bug or an improvement by creating a ticket (issue) : [github.com - YunoHost-Apps/lstu/issues](https://github.com/YunoHost-Apps/lstu_ynh/issues) diff --git a/pages/02.applications/02.docs/lufi/app_lufi.fr.md b/pages/02.applications/02.docs/lufi/app_lufi.fr.md new file mode 100644 index 00000000..2aa3bc8f --- /dev/null +++ b/pages/02.applications/02.docs/lufi/app_lufi.fr.md @@ -0,0 +1,31 @@ +--- +title: Lufi +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_lufi' +--- + + + +[](https://install-app.yunohost.org/?app=lufi) [](https://dash.yunohost.org/appci/app/lufi) + +### Index + +- [Liens utiles](#liens-utiles) + +Lufi est un logiciel libre d’hébergement de fichiers. Les fichiers envoyés sur une instance de Lufi sont chiffrés avant l’envoi au serveur : l’administrateur du serveur ne peut pas voir le contenu de vos fichiers. +L’administrateur ne peut voir que le nom du fichier, sa taille et son type mime (son type de fichier : vidéo, texte, etc.).[¹](#sources) + +## Liens utiles + + + Site web : [Framagit.org/luc/lufi](https://framagit.org/luc/lufi) + + Site de démonstration : [demo.lufi.io](https://demo.lufi.io/) + + Documentation officielle : [Framagit.org - fiat-tux](https://framagit.org/fiat-tux/hat-softwares/lufi/-/wikis/home) + + Dépôt logiciel de Lufi : [github.com - YunoHost-Apps/lufi](https://github.com/YunoHost-Apps/lufi_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/lufi/issues](https://github.com/YunoHost-Apps/lufi_ynh/issues) + +### Sources + +¹ (https://demo.lufi.io/about) diff --git a/pages/02.applications/02.docs/lufi/app_lufi.md b/pages/02.applications/02.docs/lufi/app_lufi.md new file mode 100644 index 00000000..4e1a4d15 --- /dev/null +++ b/pages/02.applications/02.docs/lufi/app_lufi.md @@ -0,0 +1,27 @@ +--- +title: Lufi +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_lufi' +--- + + + +[](https://install-app.yunohost.org/?app=lufi) [](https://dash.yunohost.org/appci/app/lufi) + +### Index + +- [Useful Links](#useful-links) + +Lufi is a free file hosting software. Files sent on an instance of Lufi are encrypted before being sent to the server: the server administrator cannot see the content of your files. +The administrator can only see the file name, size and mime type (file type: video, text, etc.). + +## Useful links + + + Website: [Framagit.org/luc/lufi](https://framagit.org/luc/lufi) + + Demonstration: [demo.lufi.io](https://demo.lufi.io/) + + Official documentation: [Framagit.org - fiat-tux](https://framagit.org/fiat-tux/hat-softwares/lufi/-/wikis/home) + + Application software repository: [github.com - YunoHost-Apps/lufi](https://github.com/YunoHost-Apps/lufi_ynh) + + Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/lufi/issues](https://github.com/YunoHost-Apps/lufi_ynh/issues) diff --git a/pages/02.applications/02.docs/lutim/app_lutim.fr.md b/pages/02.applications/02.docs/lutim/app_lutim.fr.md new file mode 100644 index 00000000..88c0f8bf --- /dev/null +++ b/pages/02.applications/02.docs/lutim/app_lutim.fr.md @@ -0,0 +1,27 @@ +--- +title: Lutim +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_lutim' +--- + + + +[](https://install-app.yunohost.org/?app=lutim) [](https://dash.yunohost.org/appci/app/lutim) + +### Index + +- [Liens utiles](#liens-utiles) + +Lutim est un service gratuit et anonyme d’hébergement d’images. Il s’agit aussi du nom du logiciel (libre) qui fournit ce service. +Les images déposées sur Lutim peuvent être stockées indéfiniment, ou s’effacer dès le premier affichage ou au bout du délai choisi parmi ceux proposés. + +## Liens utiles + + + Site web : [Framagit - lutim](https://framagit.org/fiat-tux/hat-softwares/lutim) + + Documentation officielle : [lut.im/about](https://lut.im/about) + + Démonstration [lut.im](https://lut.im) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/lutim](https://github.com/YunoHost-Apps/lutim_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/lutim/issues](https://github.com/YunoHost-Apps/lutim_ynh/issues) diff --git a/pages/02.applications/02.docs/lutim/app_lutim.md b/pages/02.applications/02.docs/lutim/app_lutim.md new file mode 100644 index 00000000..0e762862 --- /dev/null +++ b/pages/02.applications/02.docs/lutim/app_lutim.md @@ -0,0 +1,27 @@ +--- +title: Lutim +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_lutim' +--- + + + +[](https://install-app.yunohost.org/?app=lutim) [](https://dash.yunohost.org/appci/app/lutim) + +### Index + +- [Useful links](#useful-links) + +Lutim is a free and anonymous image hosting service. It is also the name of the (free) software that provides this service. +Images uploaded to Lutim can be stored indefinitely, or can be deleted on first viewing or after a period of time chosen from those offered. + +## Useful links + + + Website : [Framagit - lutim](https://framagit.org/fiat-tux/hat-softwares/lutim) + + Official documentation : [lut.im/about](https://lut.im/about) + + Demonstration [lut.im](https://lut.im) + + Application software repository : [github.com - YunoHost-Apps/lutim](https://github.com/YunoHost-Apps/lutim_ynh) + + Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/lutim/issues](https://github.com/YunoHost-Apps/lutim_ynh/issues) diff --git a/pages/02.applications/02.docs/lychee/app_lychee.fr.md b/pages/02.applications/02.docs/lychee/app_lychee.fr.md new file mode 100644 index 00000000..9072ac27 --- /dev/null +++ b/pages/02.applications/02.docs/lychee/app_lychee.fr.md @@ -0,0 +1,26 @@ +--- +title: Lychee +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_lychee' +--- + + + +[](https://install-app.yunohost.org/?app=lychee) [](https://dash.yunohost.org/appci/app/lychee) + +### Index + +- [Liens utiles](#liens-utiles) + +Lychee est un outil de gestion de photos gratuit, qui fonctionne sur votre serveur ou votre espace Web. L'installation est une question de secondes. Téléchargez, gérez et partagez des photos comme à partir d'une application native. Lychee est livré avec tout ce dont vous avez besoin et toutes vos photos sont stockées en toute sécurité. + +## Liens utiles + + + Site web : [lycheeorg.github.io](https://lycheeorg.github.io/) + + Site de démonstration : [lycheeorg.github.io/demo](https://lycheeorg.github.io/demo/) + + Documentation officielle : [lycheeorg.github.io/docs](https://lycheeorg.github.io/docs/) + + Dépôt logiciel de Lychee : [github.com - YunoHost-Apps/lychee](https://github.com/YunoHost-Apps/lychee_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/lychee/issues](https://github.com/YunoHost-Apps/lychee_ynh/issues) diff --git a/pages/02.applications/02.docs/lychee/app_lychee.md b/pages/02.applications/02.docs/lychee/app_lychee.md new file mode 100644 index 00000000..f71cdf39 --- /dev/null +++ b/pages/02.applications/02.docs/lychee/app_lychee.md @@ -0,0 +1,26 @@ +--- +title: Lychee +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_lychee' +--- + + + +[](https://install-app.yunohost.org/?app=lychee) [](https://dash.yunohost.org/appci/app/lychee) + +### Index + +- [Useful Links](#useful-links) + +Lychee is a free photo-management tool, which runs on your server or web-space. Installing is a matter of seconds. Upload, manage and share photos like from a native application. Lychee comes with everything you need and all your photos are stored securely. + +## Useful links + + + Website: [lycheeorg.github.io](https://lycheeorg.github.io/) + + Demonstration: [lycheeorg.github.io/demo](https://lycheeorg.github.io/demo/) + + Official documentation: [lycheeorg.github.io/docs](https://lycheeorg.github.io/docs/) + + Application software repository: [github.com - YunoHost-Apps/lychee](https://github.com/YunoHost-Apps/lychee_ynh) + + Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/lychee/issues](https://github.com/YunoHost-Apps/lychee_ynh/issues) diff --git a/pages/02.applications/02.docs/mailman/app_mailman.fr.md b/pages/02.applications/02.docs/mailman/app_mailman.fr.md new file mode 100644 index 00000000..f0d78a52 --- /dev/null +++ b/pages/02.applications/02.docs/mailman/app_mailman.fr.md @@ -0,0 +1,25 @@ +--- +title: Mailman +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mailman' +--- + + + +[](https://install-app.yunohost.org/?app=mailman) [](https://dash.yunohost.org/appci/app/mailman) + +### Index + +- [Liens utiles](#liens-utiles) + +Mailman est un logiciel gratuit (léger) de gestion de listes de discussion et de bulletins d'information électroniques (newsletter). + +## Liens utiles + ++ Site web : [www.list.org](http://www.list.org/) ++ Documentation officielle : [mailman.readthedocs.io](https://mailman.readthedocs.io/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/mailman](https://github.com/YunoHost-Apps/mailman_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/mailman/issues](https://github.com/YunoHost-Apps/mailman_ynh/issues) diff --git a/pages/02.applications/02.docs/mailman/app_mailman.md b/pages/02.applications/02.docs/mailman/app_mailman.md new file mode 100644 index 00000000..05ad19a5 --- /dev/null +++ b/pages/02.applications/02.docs/mailman/app_mailman.md @@ -0,0 +1,25 @@ +--- +title: Mailman +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mailman' +--- + + + +[](https://install-app.yunohost.org/?app=mailman) [](https://dash.yunohost.org/appci/app/mailman) + +### Index + +- [Useful links](#useful-links) + +Mailman is a (lightweight) free software for managing electronic mail discussion and e-newsletter lists. + +## Useful links + ++ Website : [www.list.org](http://www.list.org/) ++ Official documentation : [mailman.readthedocs.io](https://mailman.readthedocs.io/) ++ Application software repository : [github.com - YunoHost-Apps/mailman](https://github.com/YunoHost-Apps/mailman_ynh) ++ Fix a bug or an improvement by creating a ticket (issue) : [github.com - YunoHost-Apps/mailman/issues](https://github.com/YunoHost-Apps/mailman_ynh/issues) diff --git a/pages/02.applications/02.docs/mantis/app_mantis.fr.md b/pages/02.applications/02.docs/mantis/app_mantis.fr.md new file mode 100644 index 00000000..d11d8927 --- /dev/null +++ b/pages/02.applications/02.docs/mantis/app_mantis.fr.md @@ -0,0 +1,25 @@ +--- +title: Mantis +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mantis' +--- + + + +[](https://install-app.yunohost.org/?app=mantis) [](https://dash.yunohost.org/appci/app/mantis) + +### Index + +- [Liens utiles](#liens-utiles) + +Mantis Bug Tracker est un système de suivi des bogues gratuit et open source. L'utilisation la plus courante de MantisBT est de suivre les bogues logiciels. Cependant, MantisBT est souvent configuré par les utilisateurs pour servir de système de suivi des problèmes plus générique et d'outil de gestion de projet. + +## Liens utiles + ++ Site web : [mantisbt.org](https://mantisbt.org) ++ Documentation officielle : [mantisbt.org/documentation.php](https://mantisbt.org/documentation.php) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/mantis](https://github.com/YunoHost-Apps/mantis_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/mantis/issues](https://github.com/YunoHost-Apps/mantis_ynh/issues) diff --git a/pages/02.applications/02.docs/mantis/app_mantis.md b/pages/02.applications/02.docs/mantis/app_mantis.md new file mode 100644 index 00000000..29989711 --- /dev/null +++ b/pages/02.applications/02.docs/mantis/app_mantis.md @@ -0,0 +1,25 @@ +--- +title: Mantis +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mantis' +--- + + + +[](https://install-app.yunohost.org/?app=mantis) [](https://dash.yunohost.org/appci/app/mantis) + +### Index + +- [Useful links](#useful-links) + +Mantis Bug Tracker is a free and open source, web-based bug tracking system. The most common use of MantisBT is to track software defects. However, MantisBT is often configured by users to serve as a more generic issue tracking system and project management tool. + +## Useful links + ++ Website: [mantisbt.org](https://mantisbt.org) ++ Official documentation: [mantisbt.org/documentation.php](https://mantisbt.org/documentation.php) ++ Application software repository: [github.com - YunoHost-Apps/mantis](https://github.com/YunoHost-Apps/mantis_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/mantis/issues](https://github.com/YunoHost-Apps/mantis_ynh/issues) diff --git a/pages/02.applications/02.docs/matomo/app_matomo.fr.md b/pages/02.applications/02.docs/matomo/app_matomo.fr.md new file mode 100644 index 00000000..c8944fc8 --- /dev/null +++ b/pages/02.applications/02.docs/matomo/app_matomo.fr.md @@ -0,0 +1,25 @@ +--- +title: Matomo +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_matomo' +--- + + + +[](https://install-app.yunohost.org/?app=matomo) [](https://dash.yunohost.org/appci/app/matomo) + +### Index + +- [Liens utiles](#liens-utiles) + +Matomo est une plateforme d'analyse open source de mesure de statistiques Web. Il s'agit d'un logiciel PHP MySQL complet que vous téléchargez et installez sur votre propre serveur Web. À la fin du processus d'installation de cinq minutes, vous recevrez un code JavaScript. Copiez et collez simplement cette balise sur les sites Web que vous souhaitez suivre et accédez à vos rapports d'analyse en temps réel. + +## Liens utiles + ++ Site web : [matomo.org](https://matomo.org) ++ Documentation officielle : [https://matomo.org/docs](https://matomo.org/docs) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/matomo](https://github.com/YunoHost-Apps/matomo_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/matomo/issues](https://github.com/YunoHost-Apps/matomo_ynh/issues) diff --git a/pages/02.applications/02.docs/matomo/app_matomo.md b/pages/02.applications/02.docs/matomo/app_matomo.md new file mode 100644 index 00000000..77ed88b6 --- /dev/null +++ b/pages/02.applications/02.docs/matomo/app_matomo.md @@ -0,0 +1,25 @@ +--- +title: Matomo +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_matomo' +--- + + + +[](https://install-app.yunohost.org/?app=matomo) [](https://dash.yunohost.org/appci/app/matomo) + +### Index + +- [Useful links](#useful-links) + +Matomo is the leading Free/Libre open analytics platform. It is a full-featured PHP MySQL software program that you download and install on your own webserver. At the end of the five-minute installation process, you will be given a JavaScript code. Simply copy and paste this tag on websites you wish to track and access your analytics reports in real-time. + +## Useful links + ++ Website: [matomo.org](https://matomo.org) ++ Official documentation: [https://matomo.org/docs](https://matomo.org/docs) ++ Application software repository: [github.com - YunoHost-Apps/matomo](https://github.com/YunoHost-Apps/matomo_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/matomo/issues](https://github.com/YunoHost-Apps/matomo_ynh/issues) diff --git a/pages/02.applications/02.docs/mattermost/app_mattermost.fr.md b/pages/02.applications/02.docs/mattermost/app_mattermost.fr.md new file mode 100644 index 00000000..8d8ec5fd --- /dev/null +++ b/pages/02.applications/02.docs/mattermost/app_mattermost.fr.md @@ -0,0 +1,30 @@ +--- +title: Mattermost +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mattermost' +--- + + + +[](https://install-app.yunohost.org/?app=mattermost) [](https://dash.yunohost.org/appci/app/mattermost) + +### Index + +- [Liens utiles](#liens-utiles) + +Mattermost est un logiciel décentralisé de communication en équipe. Pour les adeptes de Slack, l'importation de vos données est possible, permettant de faire la transition vers cet outil libre en douceur. + +La plate-forme permet : +* Le partage de messages et de fichiers sur différents appareils : PC, ordiphones et tablettes grâce aux applications dédiées. +* La mise en forme des messages se fait avec le langage Markdown. +* L'archivage continu et la recherche instantanée, et la prise en charge les notifications et les intégrations avec vos outils existants. + +## Liens utiles + ++ Site web : [mattermost.com](https://mattermost.com/) ++ Documentation officielle : [docs.mattermost.com/guides/user.html](https://docs.mattermost.com/guides/user.html) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/mattermost](https://github.com/YunoHost-Apps/mattermost_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/mattermost/issues](https://github.com/YunoHost-Apps/mattermost_ynh/issues) diff --git a/pages/02.applications/02.docs/mattermost/app_mattermost.md b/pages/02.applications/02.docs/mattermost/app_mattermost.md new file mode 100644 index 00000000..fc44e7bb --- /dev/null +++ b/pages/02.applications/02.docs/mattermost/app_mattermost.md @@ -0,0 +1,30 @@ +--- +title: Mattermost +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mattermost' +--- + + + +[](https://install-app.yunohost.org/?app=mattermost) [](https://dash.yunohost.org/appci/app/mattermost) + +### Index + +- [Useful links](#useful-links) + +Mattermost is a decentralized team communication software. For Slack enthusiasts, importing your data is possible, allowing a smooth transition to this free tool. + +The platform allows: +* The sharing of messages and files on different devices: PCs, computers and tablets thanks to dedicated applications. +* The formatting of messages is done with the Markdown language. +* Continuous archiving and instant search, and support for notifications and integrations with your existing tools. + +## Useful links + ++ Website: [mattermost.com](https://mattermost.com) ++ Official documentation: [docs.mattermost.com/guides/user.html](https://docs.mattermost.com/guides/user.html) ++ Application software repository: [github.com - YunoHost-Apps/mattermost](https://github.com/YunoHost-Apps/mattermost_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/mattermost/issues](https://github.com/YunoHost-Apps/mattermost_ynh/issues) diff --git a/pages/02.applications/02.docs/mediawiki/app_mediawiki.fr.md b/pages/02.applications/02.docs/mediawiki/app_mediawiki.fr.md new file mode 100644 index 00000000..134d45fc --- /dev/null +++ b/pages/02.applications/02.docs/mediawiki/app_mediawiki.fr.md @@ -0,0 +1,26 @@ +--- +title: MediaWiki +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mediawiki' +--- + + + +[](https://install-app.yunohost.org/?app=mediawiki) [](https://dash.yunohost.org/appci/app/mediawiki) + +### Index + +- [Liens utiles](#liens-utiles) + +MediaWiki est un ensemble wiki à base de logiciels libres Open source, développé à l’origine pour Wikipédia. + +## Liens utiles + ++ Site Web : [mediawiki.org] https://www.mediawiki.org/ ++ Documentation officielle : https://www.mediawiki.org/wiki ++ Support Desk : https://www.mediawiki.org/wiki/Project:Support_desk ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/mediawiki](https://github.com/YunoHost-Apps/mediawiki_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/mediawiki/issues](https://github.com/YunoHost-Apps/mediawiki_ynh/issues) diff --git a/pages/02.applications/02.docs/mediawiki/app_mediawiki.md b/pages/02.applications/02.docs/mediawiki/app_mediawiki.md new file mode 100644 index 00000000..d5a8136b --- /dev/null +++ b/pages/02.applications/02.docs/mediawiki/app_mediawiki.md @@ -0,0 +1,26 @@ +--- +title: MediaWiki +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mediawiki' +--- + + + +[](https://install-app.yunohost.org/?app=mediawiki) [](https://dash.yunohost.org/appci/app/mediawiki) + +### Index + +- [Useful links](#useful-links) + +MediaWiki is a free and open source software wiki package written in PHP, originally for use on Wikipedia. + +## Useful links + ++ Website: [mediawiki.org] https://www.mediawiki.org/ ++ Official documentation: [mediawiki.org/wiki/] https://www.mediawiki.org/wiki/ ++ Support Desk: https://www.mediawiki.org/wiki/Project:Support_desk ++ Application software repository: [github.com - YunoHost-Apps/mediawiki](https://github.com/YunoHost-Apps/mattermost_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/mediawiki/issues](https://github.com/YunoHost-Apps/mediawiki_ynh/issues) diff --git a/pages/02.applications/02.docs/mindmaps/app_mindmaps.fr.md b/pages/02.applications/02.docs/mindmaps/app_mindmaps.fr.md new file mode 100644 index 00000000..0596a976 --- /dev/null +++ b/pages/02.applications/02.docs/mindmaps/app_mindmaps.fr.md @@ -0,0 +1,26 @@ +--- +title: Mindmaps +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mindmaps' +--- + +[](https://install-app.yunohost.org/?app=mindmaps) [](https://dash.yunohost.org/appci/app/mindmaps) + +### Index + +- [Liens utiles](#useful-links) + +Mindmaps est une application de carte mentale basée sur HTML5. Il vous permet de créer des cartes mentales soignées dans le navigateur. + +Ce projet a commencé en 2011 comme une exploration de ce qu'il est possible de faire dans les navigateurs utilisant des API modernes. De nos jours, la plupart de ces choses sont assez courantes et la base de code est un peu dépassée. C'était bien avant React, ES6, webpack. Heck, il n'utilise même pas Backbone. + +Cependant, il n'y a aucune raison de changer quoi que ce soit et cela rend la base de code assez facile à utiliser. Il n'y a pas d'étape de compilation, pas de plugins babel, pas de frameworks. Juste une application JavaScript et un modèle très simple de modèle-vue-présentateur. + +## Liens utiles + ++ Site web : [www.mindmaps.app](https://www.mindmaps.app/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/mindmaps](https://github.com/YunoHost-Apps/mindmaps_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/mindmaps/issues](https://github.com/YunoHost-Apps/mindmaps_ynh/issues) diff --git a/pages/02.applications/02.docs/mindmaps/app_mindmaps.md b/pages/02.applications/02.docs/mindmaps/app_mindmaps.md new file mode 100644 index 00000000..bda0b507 --- /dev/null +++ b/pages/02.applications/02.docs/mindmaps/app_mindmaps.md @@ -0,0 +1,26 @@ +--- +title: Mindmaps +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mindmaps' +--- + +[](https://install-app.yunohost.org/?app=mindmaps) [](https://dash.yunohost.org/appci/app/mindmaps) + +### Index + +- [Useful links](#useful-links) + +Mindmaps is a HTML5 based mind mapping application. It lets you create neat looking mind maps in the browser. + +This project started in 2011 as an exploration into what's possible to do in browsers using modern APIs. Nowadays, most of this stuff is pretty common and the code base is a bit outdated. This was way before React, ES6, webpack. Heck, it doesn't even use Backbone. + +However, there is no reason to change any of that and it makes the code base quite easy to grok. There is no compilation step, no babel plugins, no frameworks. Just a JavaScript application and a very simple Model-View-Presenter pattern. + +## Useful links + ++ Website: [www.mindmaps.app](https://www.mindmaps.app/) ++ Application software repository: [github.com - YunoHost-Apps/mindmaps](https://github.com/YunoHost-Apps/mindmaps_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/mindmaps/issues](https://github.com/YunoHost-Apps/mindmaps_ynh/issues) diff --git a/pages/02.applications/02.docs/minetest/app_minetest.fr.md b/pages/02.applications/02.docs/minetest/app_minetest.fr.md new file mode 100644 index 00000000..27a1c2fc --- /dev/null +++ b/pages/02.applications/02.docs/minetest/app_minetest.fr.md @@ -0,0 +1,27 @@ +--- +title: Minetest +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_minetest' +--- + + + +[](https://install-app.yunohost.org/?app=minetest) [](https://dash.yunohost.org/appci/app/minetest) + +### Index + +- [Liens utiles](#liens-utiles) + +Un jeu de cubes dans un espace illimité ou pioches et pelles sont de rigueur pour édifier des constructions imaginaires, creuser des tunels, se promener au grès de ses envies, faire des rencontres, ramasser quelques fleurs de-ci de-là, nager... +Minetest c'est l'équivalent de Minecraft avec en supplément la gratuité du jeu et la possibilité d'intégrer une équipe de développement pour améliorer le produit. +Minetest, c'est aussi un serveur qui permet d'accueillir vos amis ou simplement quelques visiteurs curieux voire même des joueurs chevronnés. + +## Liens utiles + ++ Site web : [minetest.net](https://www.minetest.net/) ++ Documentation officielle : [wiki.minetest.net](https://wiki.minetest.net) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/minetest](https://github.com/YunoHost-Apps/minetest_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/minetest/issues](https://github.com/YunoHost-Apps/minetest_ynh/issues) diff --git a/pages/02.applications/02.docs/minetest/app_minetest.md b/pages/02.applications/02.docs/minetest/app_minetest.md new file mode 100644 index 00000000..f2fd500a --- /dev/null +++ b/pages/02.applications/02.docs/minetest/app_minetest.md @@ -0,0 +1,27 @@ +--- +title: Minetest +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_minetest' +--- + + + +[](https://install-app.yunohost.org/?app=minetest) [](https://dash.yunohost.org/appci/app/minetest) + +### Index + +- [Useful links](#useful-links) + +A game of cubes in an unlimited space where picks and shovels are de rigueur to build imaginary constructions, dig tunnels, walk in the sandstone of his wishes, make encounters, pick up a few flowers here and there, swimming... +Minetest is the equivalent of Minecraft with the addition of free gameplay and the possibility of integrating a development team to improve the product. +Minetest is also a server that allows you to welcome your friends or just a few curious visitors or even experienced players. + +## Useful links + ++ Website: [minetest.net](https://www.minetest.net/) ++ Official documentation: [wiki.minetest.net](https://wiki.minetest.net) ++ Application software repository: [github.com - YunoHost-Apps/minetest](https://github.com/YunoHost-Apps/minetest_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/minetest/issues](https://github.com/YunoHost-Apps/minetest_ynh/issues) diff --git a/pages/02.applications/02.docs/minidlna/app_minidlna.fr.md b/pages/02.applications/02.docs/minidlna/app_minidlna.fr.md new file mode 100644 index 00000000..a0465bde --- /dev/null +++ b/pages/02.applications/02.docs/minidlna/app_minidlna.fr.md @@ -0,0 +1,50 @@ +--- +title: MiniDLNA (Ready Media) +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_minidlna' +--- + + + +[](https://install-app.yunohost.org/?app=minidlna) [](https://dash.yunohost.org/appci/app/minidlna) + +### Index + +- [Configuration](#configuration) +- [Liens utiles](#liens-utiles) + +MiniDLNA (renommé Ready Media) est un serveur [DLNA](https://fr.wikipedia.org/wiki/Digital_Living_Network_Alliance) ultra léger. +Il permet de partager très simplement les fichiers multimédias avec tous les appareils compatibles présents sur le réseau local. + +MiniDLNA ne dispose pas d’une interface graphique, mais ne nécessite pas de configuration particulière. + +## Configuration + +### Quels fichiers multimédias sont partagés ? +MiniDLNA partage le dossier `/home/yunohost.multimedia/share`, qui est commun à chaque utilisateur dans le dossier `/home/$USER/Multimedia/Share`. +[Plus d’informations sur les dossiers multimédias](https://github.com/YunoHost-Apps/yunohost.multimedia). + +~~Si [Transmission](https://github.com/Kloadut/transmission_ynh) est installé, les médias téléchargés seront disponibles en DLNA.~~ + +### Comment consulter et lire les fichiers multimédias partagés par MiniDLNA ? +Pour voir et lire les fichiers multimédias, il suffit de disposer d’un client compatible DLNA/UPNP. + +La majorité des décodeurs TV fournis par les FAI sont compatibles DLNA, il suffit de chercher les sources de médias externes. +C’est le cas également pour les consoles de jeux dernière génération connectée à internet. + +Certaines TV et lecteur Blu-ray sont également compatibles DLNA. + +Dans tous les cas, il suffit en général d’aller chercher les sources externes, USB etc., pour trouver le serveur DLNA, affiché sous le nom **YunoHost DLNA**. + +Il existe une multitude de clients DLNA pour toutes les plateformes, dont voici une [liste non exhaustive](https://en.wikipedia.org/wiki/List_of_UPnP_AV_media_servers_and_clients#UPnP_AV_clients). +De manière générale, un client DLNA ne nécessite pas de configuration particulière pour accéder au partage de fichiers multimédias. + +## Liens utiles + + + Site web : [minidlna.sourceforge.net](http://minidlna.sourceforge.net/) + + Documentation : [doc.ubuntu-fr.org/minidlna](https://doc.ubuntu-fr.org/minidlna) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/minidlna](https://github.com/YunoHost-Apps/minidlna_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/minidlna/issues](https://github.com/YunoHost-Apps/minidlna_ynh/issues) diff --git a/pages/02.applications/02.docs/minidlna/app_minidlna.md b/pages/02.applications/02.docs/minidlna/app_minidlna.md new file mode 100644 index 00000000..c5850be7 --- /dev/null +++ b/pages/02.applications/02.docs/minidlna/app_minidlna.md @@ -0,0 +1,50 @@ +--- +title: MiniDLNA (Ready Media) +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_minidlna' +--- + + + +[](https://install-app.yunohost.org/?app=minidlna) [](https://dash.yunohost.org/appci/app/minidlna) + +### Index + +- [Configuration](#configuration) +- [Useful links](#useful-links) + +MiniDLNA (Ready Media) is a lightweight [DLNA](https://fr.wikipedia.org/wiki/Digital_Living_Network_Alliance) server. +It allows to easily share multimedia files with any compatible devices present on the LAN. + +MiniDLNA does not have a graphical interface, but it does not require any special configuration. + +## Configuration + +### What multimedia files are shared? +MiniDLNA (renamed Ready Media) sharing the folder `/home/yunohost.multimedia/share`, which is common to each user in `/home/$USER/Multimedia/Share`. +[More information about multimedia files here.](https://github.com/YunoHost-Apps/yunohost.multimedia) + +~~If [Transmission](https://github.com/Kloadut/transmission_ynh) is installed, the downloaded media will be available in DLNA.~~ + +### How to view and play media files shared by MiniDLNA? +To view and play media files, all you need is a compatible client DLNA/UPNP. + +The majority of set-top boxes provided by ISPs are DLNA compatible, simply look for sources of external media. +This is also true for the latest generation game consoles connected to internet. + +Some TV and Blu-ray player is also DLNA compatible. + +In any case, it is generally sufficient to seek external sources, USB etc., to find the DLNA server, displayed under the name **YunoHost DLNA**. + +There are a multitude of DLNA client for all platforms, including the following [not exhaustive list](https://en.wikipedia.org/wiki/List_of_UPnP_AV_media_servers_and_clients#UPnP_AV_clients). +In general, a DLNA client does not require any special configuration to access the media sharing. + +## Useful links + ++ Website: [minidlna.sourceforge.net](http://minidlna.sourceforge.net) ++ Official : [help.ubuntu.com/community/MiniDLNA](https://help.ubuntu.com/community/MiniDLNA) ++ Application software repository: [github.com - YunoHost-Apps/minidlna](https://github.com/YunoHost-Apps/minidlna_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/minidlna/issues](https://github.com/YunoHost-Apps/minidlna_ynh/issues) diff --git a/pages/02.applications/02.docs/mobilizon/app_mobilizon.fr.md b/pages/02.applications/02.docs/mobilizon/app_mobilizon.fr.md new file mode 100644 index 00000000..2c313219 --- /dev/null +++ b/pages/02.applications/02.docs/mobilizon/app_mobilizon.fr.md @@ -0,0 +1,34 @@ +--- +title: Mobilizon +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mobilizon' +--- + + + +[](https://install-app.yunohost.org/?app=mobilizon) [](https://dash.yunohost.org/appci/app/mobilizon) + +### Index + +- [Liens utiles](#liens-utiles) + +Mobilizon est un logiciel actuellement en cours de développement par Framasoft. Il permettra à chaque organisation ou individu de proposer sa propre plateforme de mobilisation. +Il sera possible de : + +* Publier des évènements, +* Créer des groupes, +* Dialoguer par messagerie, +* Avoir plusieurs identités avec un seul compte (pour séparer les évènements familiaux ou activités de loisirs de son activité militante, par exemple) +* Fédérer plusieurs instances Mobilizon pour échanger avec d’autres instances, afficher plus d’événements que juste ceux de son instance et favoriser les interactions (utilisation du protocole ActivityPub) + +Mobilizon sera un logiciel éthique permettant de s'émanciper de Facebook, Meetup, Eventbrite ou tout autre plateforme à but lucratif. Il sera respectueux de la vie privée et des données personnelles de ses utilisateurs. + +## Liens utiles + ++ Site web : [joinmobilizon.org](https://joinmobilizon.org) ++ Documentation officielle : [joinmobilizon.org/fr/faq](https://joinmobilizon.org/fr/faq) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/mobilizon](https://github.com/YunoHost-Apps/mobilizon_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/mobilizon/issues](https://github.com/YunoHost-Apps/mobilizon_ynh/issues) diff --git a/pages/02.applications/02.docs/mobilizon/app_mobilizon.md b/pages/02.applications/02.docs/mobilizon/app_mobilizon.md new file mode 100644 index 00000000..7391971a --- /dev/null +++ b/pages/02.applications/02.docs/mobilizon/app_mobilizon.md @@ -0,0 +1,27 @@ +--- +title: Mobilizon +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mobilizon' +--- + + + +[](https://install-app.yunohost.org/?app=mobilizon) [](https://dash.yunohost.org/appci/app/mobilizon) + +### Index + +- [Useful links](#useful-links) + +MobiliZon is your federated organization and mobilization platform. It's supported by Framasoft. +MobiliZon aims to solve existing platform's problems to organize events in a decentralised, libre and privacy friendly way. +Mobilizon is a tool designed to create platforms for managing communities and events. Its purpose is to help as many people as possible to free themselves from Facebook groups and events, from Meetup, etc. + +## Useful links + ++ Website: [joinmobilizon.org](https://joinmobilizon.org) ++ Official documentation: [joinmobilizon.org/fr/faq](https://joinmobilizon.org/en/faq) ++ Application software repository: [github.com - YunoHost-Apps/mobilizon](https://github.com/YunoHost-Apps/mobilizon_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/mobilizon/issues](https://github.com/YunoHost-Apps/mobilizon_ynh/issues) diff --git a/pages/02.applications/02.docs/moodle/app_moodle.fr.md b/pages/02.applications/02.docs/moodle/app_moodle.fr.md new file mode 100644 index 00000000..b0dd2025 --- /dev/null +++ b/pages/02.applications/02.docs/moodle/app_moodle.fr.md @@ -0,0 +1,27 @@ +--- +title: Moodle +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_moodle' +--- + + + +[](https://install-app.yunohost.org/?app=moodle) [](https://dash.yunohost.org/appci/app/moodle) + +### Index + +- [Liens utiles](#liens-utiles) + +Moodle est un LMS (Learning Management System ou environnement d'apprentissage) permettant de créér, partager, animer des ressources didactiques et de formation. +A minima on pourra l'utiliser pour partager des supports de cours (sous différents formats), mais il permet surtout de créer des activités d'apprentissage riches privilégiant les interactions entre les utilisateurs (apprenants comme formateurs). +Il intègre une dizaine d'activités (quiz, leçon, forum, wiki, devoir, sondage, atelier auto-évalué entre pairs...) et formats de ressources (pdf, texte, audio-visuel, image, scorm...) par défaut qui peuvent être enrichis par des modules complémentaires (notamment pour proposer des activités spécifiques à certains domaines). + +## Liens utiles + ++ Site web : [moodle.org](https://moodle.org) ++ Documentation officielle : [docs.moodle.org](https://docs.moodle.org) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/moodle](https://github.com/YunoHost-Apps/moodle_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/moodle/issues](https://github.com/YunoHost-Apps/moodle_ynh/issues) diff --git a/pages/02.applications/02.docs/moodle/app_moodle.md b/pages/02.applications/02.docs/moodle/app_moodle.md new file mode 100644 index 00000000..f2af924b --- /dev/null +++ b/pages/02.applications/02.docs/moodle/app_moodle.md @@ -0,0 +1,28 @@ +--- +title: Moodle +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_moodle' +--- + + + +[](https://install-app.yunohost.org/?app=moodle) [](https://dash.yunohost.org/appci/app/moodle) + +### Index + +- [Useful links](#useful-links) + +Moodle is a Learning Management System (LMS) for creating, sharing and animating learning and training resources. +At least it can be used to share course materials (in different formats), but above all, it allows the creation of rich learning activities focusing on interactions between users (learners like trainers). +It integrates about ten activities (quiz, lesson, forum, wiki, homework, survey, self-assessment workshop between peers...) and resource formats (pdf, text, audio-visual, image, scorm...) by default that can be enriched by modules +complementary (in particular to propose specific activities in certain areas). + +## Useful links + ++ Website: [moodle.org](https://moodle.org) ++ Official documentation: [docs.moodle.org](https://docs.moodle.org) ++ Application software repository: [github.com - YunoHost-Apps/moodle](https://github.com/YunoHost-Apps/moodle_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/moodle/issues](https://github.com/YunoHost-Apps/moodle_ynh/issues) diff --git a/pages/02.applications/02.docs/mumbleserver/app_mumbleserver.fr.md b/pages/02.applications/02.docs/mumbleserver/app_mumbleserver.fr.md new file mode 100644 index 00000000..6e8b836a --- /dev/null +++ b/pages/02.applications/02.docs/mumbleserver/app_mumbleserver.fr.md @@ -0,0 +1,28 @@ +--- +title: Mumble server +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mumbleserver' +--- + + + +[](https://install-app.yunohost.org/?app=mumbleserver) [](https://dash.yunohost.org/appci/app/mumbleserver) + +### Index + +- [Liens utiles](#liens-utiles) + +Mumble est un logiciel de voix sur IP efficace et stable qui vous permet de créer des salons audio pour plusieurs interlocuteurs. C'est un logiciel de VoIP qui fait bénéficier à ses utilisateurs d'une latence très faible tout en fournissant une qualité de son excellente. Mumble intègre également une surcouche visuelle qui se positionne discrètement au dessus des autres fenêtres afin d'avoir une vision sur l'activation des micros des gens avec qui vous parlez. +Ici, c'est la partir serveur 'Murmur' que vous installerez sur votre instance de YunoHost. + +Il est nécessaire d'utiliser un [client Mumble](https://wiki.mumble.info/wiki/3rd_Party_Applications) pour l'utiliser pour chaque interlocuteur·rice. + +## Liens utiles + ++ Site web : [www.mumble.info](https://www.mumble.info) ++ Documentation officielle : [wiki.mumble.info/wiki/Main_Page](https://wiki.mumble.info/wiki/Main_Page) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/mumbleserver](https://github.com/YunoHost-Apps/mumbleserver_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/mumbleserver/issues](https://github.com/YunoHost-Apps/mumbleserver_ynh/issues) diff --git a/pages/02.applications/02.docs/mumbleserver/app_mumbleserver.md b/pages/02.applications/02.docs/mumbleserver/app_mumbleserver.md new file mode 100644 index 00000000..88b7b165 --- /dev/null +++ b/pages/02.applications/02.docs/mumbleserver/app_mumbleserver.md @@ -0,0 +1,29 @@ +--- +title: Mumble server +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mumbleserver' +--- + + + +[](https://install-app.yunohost.org/?app=mumbleserver) [](https://dash.yunohost.org/appci/app/mumbleserver) + +### Index + +- [Useful links](#useful-links) + +Mumble is an efficient and stable Voice over IP software that allows you to create audio rooms for multiple people. It is a VoIP software that allows its users to benefit from very low latency and very high quality while providing excellent sound quality. Mumble also incorporates a visual overlay that discreetly positions itself above the other windows to provide a view of the microphone activation of the people you are talking to. +Here is the 'Murmur' server that you will install on your instance of YunoHost. + +It is necessary to use a [Mumble client](https://wiki.mumble.info/wiki/3rd_Party_Applications) to use it for each interlocutor. + + +## Useful links + ++ Website: [www.mumble.info](https://www.mumble.info) ++ Official documentation: [wiki.mumble.info/wiki/Main_Page](https://wiki.mumble.info/wiki/Main_Page) ++ Application software repository: [github.com - YunoHost-Apps/mumbleserver](https://github.com/YunoHost-Apps/mumbleserver_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/mumbleserver/issues](https://github.com/YunoHost-Apps/mumbleserver_ynh/issues) diff --git a/app_my_webapp_fr.md b/pages/02.applications/02.docs/my_webapp/app_my_webapp.fr.md similarity index 84% rename from app_my_webapp_fr.md rename to pages/02.applications/02.docs/my_webapp/app_my_webapp.fr.md index b454209e..105fc99e 100644 --- a/app_my_webapp_fr.md +++ b/pages/02.applications/02.docs/my_webapp/app_my_webapp.fr.md @@ -1,6 +1,13 @@ -# Documentation My_webapp +--- +title: My_webapp +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_my_webapp' +--- -En complément du Readme.md de l'application, voici des astuces utiles. +En complément du [Readme_fr.md](https://github.com/YunoHost-Apps/my_webapp_ynh/blob/testing/README_fr.md) de l'application, voici des astuces utiles. ## Mise à jour automatique du contenu du site. diff --git a/app_my_webapp.md b/pages/02.applications/02.docs/my_webapp/app_my_webapp.md similarity index 82% rename from app_my_webapp.md rename to pages/02.applications/02.docs/my_webapp/app_my_webapp.md index 9a626334..2726c58d 100644 --- a/app_my_webapp.md +++ b/pages/02.applications/02.docs/my_webapp/app_my_webapp.md @@ -1,6 +1,13 @@ -# Documentation My_webapp +--- +title: My_webapp +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_my_webapp' +--- -In addition to the application's Readme.md, here are some useful tips. +In addition to the application's [Readme.md](https://github.com/YunoHost-Apps/my_webapp_ynh/blob/testing/README.md), here are some useful tips. ## Automatic update of the site content diff --git a/pages/02.applications/02.docs/navidrome/app_navidrome.fr.md b/pages/02.applications/02.docs/navidrome/app_navidrome.fr.md new file mode 100644 index 00000000..b5fc1a01 --- /dev/null +++ b/pages/02.applications/02.docs/navidrome/app_navidrome.fr.md @@ -0,0 +1,24 @@ +--- +title: Navidrome +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_navidrome' +--- + + + +[](https://install-app.yunohost.org/?app=navidrome) [](https://dash.yunohost.org/appci/app/navidrome) + +### Index + +- [Liens utiles](#liens-utiles) + +Navidrome est un serveur et un streamer de collection de musique en ligne open source. Il vous donne la liberté d'écouter votre collection de musique à partir de n'importe quel navigateur ou appareil mobile. + +## Liens utiles + ++ Site web : [navidrome.org (en)](https://www.navidrome.org/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/navidrome](https://github.com/YunoHost-Apps/navidrome_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/navidrome/issues](https://github.com/YunoHost-Apps/navidrome_ynh/issues) diff --git a/pages/02.applications/02.docs/navidrome/app_navidrome.md b/pages/02.applications/02.docs/navidrome/app_navidrome.md new file mode 100644 index 00000000..888511b6 --- /dev/null +++ b/pages/02.applications/02.docs/navidrome/app_navidrome.md @@ -0,0 +1,24 @@ +--- +title: Navidrome +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_navidrome' +--- + + + +[](https://install-app.yunohost.org/?app=navidrome) [](https://dash.yunohost.org/appci/app/navidrome) + +### Index + +- [Useful links](#useful-links) + +Navidrome is an open source web-based music collection server and streamer. It gives you freedom to listen to your music collection from any browser or mobile device. + +## Useful links + ++ Website: [navidrome.org](https://www.navidrome.org/) ++ Application software repository: [github.com - YunoHost-Apps/navidrome](https://github.com/YunoHost-Apps/navidrome_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/navidrome/issues](https://github.com/YunoHost-Apps/navidrome_ynh/issues) diff --git a/pages/02.applications/02.docs/netdata/app_netdata.fr.md b/pages/02.applications/02.docs/netdata/app_netdata.fr.md new file mode 100644 index 00000000..28613697 --- /dev/null +++ b/pages/02.applications/02.docs/netdata/app_netdata.fr.md @@ -0,0 +1,255 @@ +--- +title: NetData +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_netdata' +--- + +[NetData](http://my-netdata.io/) est un système distribué de **surveillance des performances et de la santé en temps réel**. +Il fournit un **aperçu inégalé, en temps réel**, de tout ce qui se passe sur lesystème qu'il exécute (y compris les applications telles que les serveurs web et de base de données), en utilisantdes **tableaux de bord modernes et interactifs sur le web**. + +_netdata est **rapide** et **efficient**, conçu pour fonctionner en permanence sur tous les systèmes (serveurs **physiques** et **virtuels**, **conteneurs**, **dispositifs IoT**), sans en perturbant leur fonction principale. + +[](https://install-app.yunohost.org/?app=netdata) + +**Personnalisation apportée par le paquet:** + +* Accorde l'accès aux statistiques MySQL via un utilisateur `netdata`. +* Statistiques du journal racine NGINX en mettant l'utilisateur `netdata` dans le groupe `adm`. +* Statistiques Dovecot via l'accès aux statistiques de Dovecot pour l'utilisateur `net data` (fonctionne uniquement avec Dovecot 2.2.16+). + +**Autres recommandations:** +Nous n'autorisons pas les paquets YunoHost à apporter des modifications sensibles aux fichiers du système. Voici donc d'autres personnalisations que vous pouvez faire pour permettre une meilleure surveillance : + +* NGINX: + * Requêtes et connexions : suivez [ces recommandations](https://github.com/firehol/netdata/tree/master/python.d#nginx) pour activer `/stab_status` (par exemple en mettant la section `location` dans `/etc/nginx/conf.d/yunohost_admin.conf`). + * Journaux web : vous pouvez surveiller tous vos journaux web (weblogs) NGINX pour détecter les erreurs ; suivez [ces recommandations](https://github.com/firehol/netdata/tree/master/python.d#nginx_log). +* PHP-FPM : suivez [ces recommandations](https://github.com/firehol/netdata/tree/master/python.d#phpfpm). + +## Fonctionnalités + +<p align="center"> +<img src="https://cloud.githubusercontent.com/assets/2662304/19168687/f6a567be-8c19-11e6-8561-ce8d589e8346.gif"/> +</p> + + - Des **tableaux de bord interactifs époustouflants**<br/> + souris et tactile, en 2 thèmes : sombre et clair. + + - **Rapide comme l'éclair**<br/> + Répond à toutes les demandes en moins de 0,5 ms par métrique, même sur du matériel bas de gamme + + - **Haute efficacité**<br/> + Collecte des milliers de mesures par serveur et par seconde, avec seulement 1% d'utilisation d'un seul cœur du processeur, quelques Mo de RAM et aucune E/S de disque. + + - **Alarme sophistiquée**<br/> + Des centaines d'alarmes, **prête à l'emploi**!<br/> + Prend en charge les seuils dynamiques, l'hystérésis, les modèles d'alarme, plusieurs méthodes de notification basées sur les rôles (comme le courriel, slack.com, pushover.net, pushbullet.com, telegram.org, twilio.com, messagebird.com). + + - **Extensible**<br/> + Vous pouvez surveiller tout ce pour quoi vous pouvez obtenir une métrique, en utilisant son API de plugin (tout peut être un plugin NetData, BASH, Python, Perl, Node.JS, Java, Go, Ruby, etc.). + + - **Intégrable**<br/> + Il peut fonctionner partout où un noyau Linux fonctionne (même IoT), et ses graphiques peuvent également être intégrés à vos pages web. + + - **Personnalisable**<br/> + Des tableaux de bord personnalisés peuvent être construits en utilisant du HTML simple (pas de JavaScript nécessaire). + + - **Zéro configuration**<br/> + Détecte tout automatiquement, il peut collecter jusqu'à 5000 mesures par serveur dès son lancement. + + - **Zéro dépendance**<br/> + Il est même son propre serveur web, pour ses fichiers web statiques et son API web. + + - **Zéro maintenance**<br/> + Vous le lancez, il fait le reste. + + - **S'échelonne à l'infini**<br/> + En exigeant un minimum de ressources centrales. + + - **Plusieurs modes de fonctionnement**<br/> + Surveillance autonome de l'hôte, collecteur de données sans tête, proxy de transfert, proxy de stockage et de transfert, surveillance centrale de plusieurs hôtes, dans toutes les configurations possibles. + Chaque nœud peut avoir une politique différente de rétention des données et fonctionner avec ou sans surveillance de la santé. + + - **Support des back-ends de séries chronologiques**<br/> + Peut archiver ses mesures sur les bases de données de documents `graphite`, `opentsdb`, `prometheus`, ou sur les bases de données de documents JSON, avec le même niveau de détail ou un niveau inférieur (Inférieur : pour éviter qu'il n'encombre ces serveurs en raison de la quantité de données collectées). + + + +--- + +## Qu'est-ce qu'il surveille ? + +NetData collecte plusieurs milliers de mesures par appareil. +Toutes ces mesures sont collectées et visualisées en temps réel. + +> _Presque toutes les métriques sont auto-détectées, sans aucune configuration._ + +Voici une liste de ce qu'il surveille actuellement : + +- **Processeur central (CPU)**<br/> + Utilisation, interruptions, softirqs, fréquence, total et par cœur, états du CPU. + +- **Mémoire**<br/> + RAM, utilisation de la mémoire du noyau et de la swap, KSM (Kernel Samepage Merging), NUMA. + +- **Disques**<br/> + Par disque : E/S, opérations, fille d'attente, utilisation, espace, RAID logiciel (md). + +  + +- **Interfaces réseau**<br/> + Par interface : bande passante, paquets, erreurs, rejets. + +  + +- **Réseautage IPv4**<br/> + Bande passante, paquets, erreurs, fragments, + TCP : connexions, paquets, erreurs, poignée de main, + UDP : paquets, erreurs, + Diffusion : bande passante, paquets, + Multidiffusion : bande passante, paquets. + +- **Réseautage IPv6**<br/> + Bande passante, paquets, erreurs, fragments, ECT, + UDP : paquets, erreurs, + UDP-Lite : paquets, erreurs, + Diffusion : bande passante, + Multidiffusion : bande passante, paquets, + ICMP : messages, erreurs, échos, routeur, voisin, MLDv2, appartenance à un groupe, + ventiler par type. + +- **Communication inter-processus - IPC**<br/> + Tels que les sémaphores et les réseaux de sémaphores. + +- **netfilter / iptables Linux firewall**<br/> + Connexions, événements de suivi des connexions, erreurs. + +- **Protection DDoS de Linux**<br/> + Mesures de la SYNPROXIE. + +- **latences fping**</br> + Pour toute quantité d'hôtes, en indiquant la latence, les paquets et la perte de paquets. + +  + + +- **Processus**<br/> + En fonctionnement, bloqué, bifurqué, actif. + +- **Entropie**<br/> + Le pool de nombres aléatoires, utilisé en cryptographie. + +- **Serveurs et clients de fichiers NFS**<br/> + NFS v2, v3, v4 : E/S, cache, lecture anticipée, appels RPC. + +- **Réseau QoS**<br/> + le seul outil qui permet de visualiser les classes du réseau `tc` en temps réel. + +  + +- **Groupes de contrôle de Linux**<br/> + Conteneurs : systemd, lxc, docker. + +- **Applications**<br/> + En regroupant l'arbre des processus et en signalant l'utilisation du processeur, de la mémoire, la lecture des disques, l'écritures des disques, l'échange, les fils, les pipes, les prises - par groupe. + +  + +- **Utilisation des ressources par les utilisateurs et les groupes d'utilisateurs**<br/> + En résumant l'arbre de processus par utilisateur et par groupe, rapportant : processeur central, mémoire, lecture de disque, écriture de disque, échange (swap), fils, pipes, et sockets. + +- **Serveurs web Apache et lighttpd**<br/> + `mod-status` (v2.2, v2.4) et statistiques des journaux de cache, pour plusieurs serveurs. + +- **Serveurs web NGINX**<br/> + `stub-status`, pour plusieurs serveurs. + +- **Tomcat**<br/> + Accès, files, mémoire libre, volume. + +- **Fichiers journaux du serveur web**<br/> + Extrayant en temps réel les mesures de performance du serveur web et appliquant plusieurs contrôles de santé. + +- **Bases de données MySQL**<br/> + Plusieurs serveurs, chacun indiquant : bande passante, requêtes/s, gestionnaires, verrous, problèmes, + opérations tmp, connexions, métriques binlog, files, métriques innodb, et plus. + +- **Bases de données Postgres**<br/> + Plusieurs serveurs, chacun affichant : par base de données des statistiques (connexions, tuples + lecture - écriture - rendu, transactions, verrous), les processus d'arrière-plan, les index, + les tables, l'écriture à l'avance, l'écriture de fond et plus encore. + +- **Bases de données Redis**<br/> + Plusieurs serveurs, chacun affichant : opérations, taux de réussite, mémoire, clés, clients, esclaves. + +- **mongodb**<br/> + Opérations, clients, transactions, curseurs, connexions, assertions, serrures, etc. + +- **bases de données memcached**<br/> + Plusieurs serveurs, chacun indiquant : bande passante, connexions, objets. + +- **elasticsearch**<br/> + les performances de recherche et d'indexation, la latence, les délais, les statistiques sur les grappes, les statistiques sur les fils, etc. + +- **ISC Bind name servers**<br/> + Plusieurs serveurs, chacun affichant : les clients, les demandes, les requêtes, les mises à jour, les échecs et plusieurs mesures par vue. + +- **Serveurs de noms NSD**<br/> + Les requêtes, les zones, les protocoles, les types de requêtes, les transferts, etc. + +- **Serveurs de courrier électronique Postfix**<br/> + La file d'attente des messages (entrées, taille) + +- **Serveurs de courrier électronique Exim**<br/> + La file d'attente des messages (e-mails en file d'attente) + +- **Dovecot**<br/> + Serveurs POP3/IMAP + +- **ISC dhcpd**<br/> + L'utilisation des pools, les baux, etc. + +- **IPFS**<br/> + La bande passante, les pairs. + +- **Squid proxy servers**<br/> + Plusieurs serveurs, chacun indiquant : la bande passante et les requêtes des clients, la bande passante des serveurs et les requêtes. + +- **HAproxy**<br/> + La bande passante, les sessions, les backends, etc. + +- **varnish**<br/> + Les fils, les sessions, les succès, les objets, les backends, etc. + +- **OpenVPN**<br/> + Le statut par tunnel. + +- **Senseurs matériels**<br/> + Capteurs `lm_sensors` et `IPMI` : température, tension, ventilateurs, puissance, humidité. + +- **NUT et APC UPSes**<br/> + La charge, la tension de la batterie, la température, les mesures d'utilité, et les mesures de sortie. + +- **PHP-FPM**<br/> + Plusieurs instances, chacune rapportant les connexions, les demandes, et les performances. + +- **hddtemp**<br/> + La température des disques. + +- **smartd**<br/> + Les valeurs S.M.A.R.T. des disques. + +- **Dispositifs SNMP**<br/> + Peuvent également être surveillés (bien que vous devez les configurer). + +- **statsd**<br/> + [netdata est un serveur statsd complet](https://github.com/firehol/netdata/wiki/statsd). + +Et vous pouvez l'étendre, en écrivant des plugins qui collectent des données de n'importe quelle source, en utilisant n'importe quel langage informatique. + +## Liens + + * Signaler un bogue : https://github.com/YunoHost-Apps/netdata_ynh/issues + * Site web de NetData : http://my-netdata.io/ diff --git a/app_netdata.md b/pages/02.applications/02.docs/netdata/app_netdata.md similarity index 88% rename from app_netdata.md rename to pages/02.applications/02.docs/netdata/app_netdata.md index f3831882..2365cbdf 100644 --- a/app_netdata.md +++ b/pages/02.applications/02.docs/netdata/app_netdata.md @@ -1,262 +1,269 @@ -## NetData - -[NetData](http://my-netdata.io/) is a system for **distributed real-time performance and health monitoring**. -It provides **unparalleled insights, in real-time**, of everything happening on the -system it runs (including applications such as web and database servers), using -**modern interactive web dashboards**. - -_netdata is **fast** and **efficient**, designed to permanently run on all systems -(**physical** & **virtual** servers, **containers**, **IoT** devices), without -disrupting their core function._ - -[](https://install-app.yunohost.org/?app=piwigo) - -**Customization brought by the package:** - -* grant MySQL statistics access via a `netdata` user -* nginx root log statistics via putting `netdata` user in the `adm` group -* Dovecot statistics via giving access to Dovecot stats stocket to `netdata` user (works only with Dovecot 2.2.16+) - -**Further recommendations:** -We don't allow YunoHost packages to make sensible changes to system files. So here are further customizations you can make to allow more monitoring: - -* Nginx: - * requests/connections: follow [these recommandations](https://github.com/firehol/netdata/tree/master/python.d#nginx) to enable `/stab_status` (for example by putting the `location` section in `/etc/nginx/conf.d/yunohost_admin.conf` - * weblogs: you can monitor all your nginx weblogs for errors; follow [these recommendations](https://github.com/firehol/netdata/tree/master/python.d#nginx_log) -* phpfpm: follow [these recommandations](https://github.com/firehol/netdata/tree/master/python.d#phpfpm) - -## Features - -<p align="center"> -<img src="https://cloud.githubusercontent.com/assets/2662304/19168687/f6a567be-8c19-11e6-8561-ce8d589e8346.gif"/> -</p> - - - **Stunning interactive bootstrap dashboards**<br/> - mouse and touch friendly, in 2 themes: dark, light - - - **Amazingly fast**<br/> - responds to all queries in less than 0.5 ms per metric, - even on low-end hardware - - - **Highly efficient**<br/> - collects thousands of metrics per server per second, - with just 1% CPU utilization of a single core, a few MB of RAM and no disk I/O at all - - - **Sophisticated alarming**<br/> - hundreds of alarms, **out of the box**!<br/> - supports dynamic thresholds, hysteresis, alarm templates, - multiple role-based notification methods (such as email, slack.com, - pushover.net, pushbullet.com, telegram.org, twilio.com, messagebird.com) - - - **Extensible**<br/> - you can monitor anything you can get a metric for, - using its Plugin API (anything can be a netdata plugin, - BASH, python, perl, node.js, java, Go, ruby, etc) - - - **Embeddable**<br/> - it can run anywhere a Linux kernel runs (even IoT) - and its charts can be embedded on your web pages too - - - **Customizable**<br/> - custom dashboards can be built using simple HTML (no javascript necessary) - - - **Zero configuration**<br/> - auto-detects everything, it can collect up to 5000 metrics - per server out of the box - - - **Zero dependencies**<br/> - it is even its own web server, for its static web files and its web API - - - **Zero maintenance**<br/> - you just run it, it does the rest - - - **scales to infinity**<br/> - requiring minimal central resources - - - **several operating modes**<br/> - autonomous host monitoring, headless data collector, forwarding proxy, store and forward proxy, central multi-host monitoring, in all possible configurations. - Each node may have different metrics retention policy and run with or without health monitoring. - - - **time-series back-ends supported**<br/> - can archive its metrics on `graphite`, `opentsdb`, `prometheus`, json document DBs, in the same or lower detail - (lower: to prevent it from congesting these servers due to the amount of data collected) - - - ---- - -## What does it monitor? - -netdata collects several thousands of metrics per device. -All these metrics are collected and visualized in real-time. - -> _Almost all metrics are auto-detected, without any configuration._ - -This is a list of what it currently monitors: - -- **CPU**<br/> - usage, interrupts, softirqs, frequency, total and per core, CPU states - -- **Memory**<br/> - RAM, swap and kernel memory usage, KSM (Kernel Samepage Merging), NUMA - -- **Disks**<br/> - per disk: I/O, operations, backlog, utilization, space, software RAID (md) - -  - -- **Network interfaces**<br/> - per interface: bandwidth, packets, errors, drops - -  - -- **IPv4 networking**<br/> - bandwidth, packets, errors, fragments, - tcp: connections, packets, errors, handshake, - udp: packets, errors, - broadcast: bandwidth, packets, - multicast: bandwidth, packets - -- **IPv6 networking**<br/> - bandwidth, packets, errors, fragments, ECT, - udp: packets, errors, - udplite: packets, errors, - broadcast: bandwidth, - multicast: bandwidth, packets, - icmp: messages, errors, echos, router, neighbor, MLDv2, group membership, - break down by type - -- **Interprocess Communication - IPC**<br/> - such as semaphores and semaphores arrays - -- **netfilter / iptables Linux firewall**<br/> - connections, connection tracker events, errors - -- **Linux DDoS protection**<br/> - SYNPROXY metrics - -- **fping** latencies</br> - for any number of hosts, showing latency, packets and packet loss - -  - - -- **Processes**<br/> - running, blocked, forks, active - -- **Entropy**<br/> - random numbers pool, using in cryptography - -- **NFS file servers and clients**<br/> - NFS v2, v3, v4: I/O, cache, read ahead, RPC calls - -- **Network QoS**<br/> - the only tool that visualizes network `tc` classes in realtime - -  - -- **Linux Control Groups**<br/> - containers: systemd, lxc, docker - -- **Applications**<br/> - by grouping the process tree and reporting CPU, memory, disk reads, - disk writes, swap, threads, pipes, sockets - per group - -  - -- **Users and User Groups resource usage**<br/> - by summarizing the process tree per user and group, - reporting: CPU, memory, disk reads, disk writes, swap, threads, pipes, sockets - -- **Apache and lighttpd web servers**<br/> - `mod-status` (v2.2, v2.4) and cache log statistics, for multiple servers - -- **Nginx web servers**<br/> - `stub-status`, for multiple servers - -- **Tomcat**<br/> - accesses, threads, free memory, volume - -- **web server log files**<br/> - extracting in real-time, web server performance metrics and applying several health checks - -- **mySQL databases**<br/> - multiple servers, each showing: bandwidth, queries/s, handlers, locks, issues, - tmp operations, connections, binlog metrics, threads, innodb metrics, and more - -- **Postgres databases**<br/> - multiple servers, each showing: per database statistics (connections, tuples - read - written - returned, transactions, locks), backend processes, indexes, - tables, write ahead, background writer and more - -- **Redis databases**<br/> - multiple servers, each showing: operations, hit rate, memory, keys, clients, slaves - -- **mongodb**<br/> - operations, clients, transactions, cursors, connections, asserts, locks, etc - -- **memcached databases**<br/> - multiple servers, each showing: bandwidth, connections, items - -- **elasticsearch**<br/> - search and index performance, latency, timings, cluster statistics, threads statistics, etc - -- **ISC Bind name servers**<br/> - multiple servers, each showing: clients, requests, queries, updates, failures and several per view metrics - -- **NSD name servers**<br/> - queries, zones, protocols, query types, transfers, etc. - -- **Postfix email servers**<br/> - message queue (entries, size) - -- **exim email servers**<br/> - message queue (emails queued) - -- **Dovecot** POP3/IMAP servers<br/> - -- **ISC dhcpd**<br/> - pools utilization, leases, etc. - -- **IPFS**<br/> - bandwidth, peers - -- **Squid proxy servers**<br/> - multiple servers, each showing: clients bandwidth and requests, servers bandwidth and requests - -- **HAproxy**<br/> - bandwidth, sessions, backends, etc - -- **varnish**<br/> - threads, sessions, hits, objects, backends, etc - -- **OpenVPN**<br/> - status per tunnel - -- **Hardware sensors**<br/> - `lm_sensors` and `IPMI`: temperature, voltage, fans, power, humidity - -- **NUT and APC UPSes**<br/> - load, charge, battery voltage, temperature, utility metrics, output metrics - -- **PHP-FPM**<br/> - multiple instances, each reporting connections, requests, performance - -- **hddtemp**<br/> - disk temperatures - -- **smartd**<br/> - disk S.M.A.R.T. values - -- **SNMP devices**<br/> - can be monitored too (although you will need to configure these) - -- **statsd**<br/> - [netdata is a fully featured statsd server](https://github.com/firehol/netdata/wiki/statsd) - -And you can extend it, by writing plugins that collect data from any source, using any computer language. - -## Links - - * Report a bug: https://github.com/YunoHost-Apps/netdata_ynh/issues - * NetData website: http://my-netdata.io/ \ No newline at end of file +--- +title: NetData +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_netdata' +--- + +[NetData](http://my-netdata.io/) is a system for **distributed real-time performance and health monitoring**. +It provides **unparalleled insights, in real-time**, of everything happening on the +system it runs (including applications such as web and database servers), using +**modern interactive web dashboards**. + +_netdata is **fast** and **efficient**, designed to permanently run on all systems +(**physical** & **virtual** servers, **containers**, **IoT** devices), without +disrupting their core function._ + +[](https://install-app.yunohost.org/?app=piwigo) + +**Customization brought by the package:** + +* grant MySQL statistics access via a `netdata` user +* NGINX root log statistics via putting `netdata` user in the `adm` group +* Dovecot statistics via giving access to Dovecot stats stocket to `netdata` user (works only with Dovecot 2.2.16+) + +**Further recommendations:** +We don't allow YunoHost packages to make sensible changes to system files. So here are further customizations you can make to allow more monitoring: + +* NGINX: + * requests/connections: follow [these recommandations](https://github.com/firehol/netdata/tree/master/python.d#nginx) to enable `/stab_status` (for example by putting the `location` section in `/etc/nginx/conf.d/yunohost_admin.conf` + * weblogs: you can monitor all your NGINX weblogs for errors; follow [these recommendations](https://github.com/firehol/netdata/tree/master/python.d#nginx_log) +* PHP-FPM: follow [these recommandations](https://github.com/firehol/netdata/tree/master/python.d#phpfpm) + +## Features + +<p align="center"> +<img src="https://cloud.githubusercontent.com/assets/2662304/19168687/f6a567be-8c19-11e6-8561-ce8d589e8346.gif"/> +</p> + + - **Stunning interactive bootstrap dashboards**<br/> + mouse and touch friendly, in 2 themes: dark, light + + - **Amazingly fast**<br/> + responds to all queries in less than 0.5 ms per metric, + even on low-end hardware + + - **Highly efficient**<br/> + collects thousands of metrics per server per second, + with just 1% CPU utilization of a single core, a few MB of RAM and no disk I/O at all + + - **Sophisticated alarming**<br/> + hundreds of alarms, **out of the box**!<br/> + supports dynamic thresholds, hysteresis, alarm templates, + multiple role-based notification methods (such as email, slack.com, + pushover.net, pushbullet.com, telegram.org, twilio.com, messagebird.com) + + - **Extensible**<br/> + you can monitor anything you can get a metric for, + using its Plugin API (anything can be a NetData plugin, + BASH, Python, Perl, Node.JS, Java, Go, Ruby, etc.) + + - **Embeddable**<br/> + it can run anywhere a Linux kernel runs (even IoT) + and its charts can be embedded on your web pages too + + - **Customizable**<br/> + custom dashboards can be built using simple HTML (no JavaScript necessary) + + - **Zero configuration**<br/> + auto-detects everything, it can collect up to 5000 metrics + per server out of the box + + - **Zero dependencies**<br/> + it is even its own web server, for its static web files and its web API + + - **Zero maintenance**<br/> + you just run it, it does the rest + + - **scales to infinity**<br/> + requiring minimal central resources + + - **several operating modes**<br/> + autonomous host monitoring, headless data collector, forwarding proxy, store and forward proxy, central multi-host monitoring, in all possible configurations. + Each node may have different metrics retention policy and run with or without health monitoring. + + - **time-series back-ends supported**<br/> + can archive its metrics on `graphite`, `opentsdb`, `prometheus`, JSON document DBs, in the same or lower detail + (lower: to prevent it from congesting these servers due to the amount of data collected) + + + +--- + +## What does it monitor? + +netdata collects several thousands of metrics per device. +All these metrics are collected and visualized in real-time. + +> _Almost all metrics are auto-detected, without any configuration._ + +This is a list of what it currently monitors: + +- **CPU**<br/> + usage, interrupts, softirqs, frequency, total and per core, CPU states + +- **Memory**<br/> + RAM, swap and kernel memory usage, KSM (Kernel Samepage Merging), NUMA + +- **Disks**<br/> + per disk: I/O, operations, backlog, utilization, space, software RAID (md) + +  + +- **Network interfaces**<br/> + per interface: bandwidth, packets, errors, drops + +  + +- **IPv4 networking**<br/> + bandwidth, packets, errors, fragments, + TCP: connections, packets, errors, handshake, + UDP: packets, errors, + broadcast: bandwidth, packets, + multicast: bandwidth, packets + +- **IPv6 networking**<br/> + bandwidth, packets, errors, fragments, ECT, + UDP: packets, errors, + UDP-Lite: packets, errors, + broadcast: bandwidth, + multicast: bandwidth, packets, + ICMP: messages, errors, echos, router, neighbor, MLDv2, group membership, + break down by type + +- **Interprocess Communication - IPC**<br/> + such as semaphores and semaphores arrays + +- **netfilter / iptables Linux firewall**<br/> + connections, connection tracker events, errors + +- **Linux DDoS protection**<br/> + SYNPROXY metrics + +- **fping** latencies</br> + for any number of hosts, showing latency, packets and packet loss + +  + + +- **Processes**<br/> + running, blocked, forks, active + +- **Entropy**<br/> + random numbers pool, using in cryptography + +- **NFS file servers and clients**<br/> + NFS v2, v3, v4: I/O, cache, read ahead, RPC calls + +- **Network QoS**<br/> + the only tool that visualizes network `tc` classes in realtime + +  + +- **Linux Control Groups**<br/> + containers: systemd, lxc, docker + +- **Applications**<br/> + by grouping the process tree and reporting CPU, memory, disk reads, + disk writes, swap, threads, pipes, sockets - per group + +  + +- **Users and User Groups resource usage**<br/> + by summarizing the process tree per user and group, + reporting: CPU, memory, disk reads, disk writes, swap, threads, pipes, sockets + +- **Apache and lighttpd web servers**<br/> + `mod-status` (v2.2, v2.4) and cache log statistics, for multiple servers + +- **NGINX web servers**<br/> + `stub-status`, for multiple servers + +- **Tomcat**<br/> + accesses, threads, free memory, volume + +- **web server log files**<br/> + extracting in real-time, web server performance metrics and applying several health checks + +- **mySQL databases**<br/> + multiple servers, each showing: bandwidth, queries/s, handlers, locks, issues, + tmp operations, connections, binlog metrics, threads, innodb metrics, and more + +- **Postgres databases**<br/> + multiple servers, each showing: per database statistics (connections, tuples + read - written - returned, transactions, locks), backend processes, indexes, + tables, write ahead, background writer and more + +- **Redis databases**<br/> + multiple servers, each showing: operations, hit rate, memory, keys, clients, slaves + +- **mongodb**<br/> + operations, clients, transactions, cursors, connections, asserts, locks, etc. + +- **memcached databases**<br/> + multiple servers, each showing: bandwidth, connections, items + +- **elasticsearch**<br/> + search and index performance, latency, timings, cluster statistics, threads statistics, etc. + +- **ISC Bind name servers**<br/> + multiple servers, each showing: clients, requests, queries, updates, failures and several per view metrics + +- **NSD name servers**<br/> + queries, zones, protocols, query types, transfers, etc. + +- **Postfix email servers**<br/> + message queue (entries, size) + +- **exim email servers**<br/> + message queue (emails queued) + +- **Dovecot** POP3/IMAP servers<br/> + +- **ISC dhcpd**<br/> + pools utilization, leases, etc. + +- **IPFS**<br/> + bandwidth, peers + +- **Squid proxy servers**<br/> + multiple servers, each showing: clients bandwidth and requests, servers bandwidth and requests + +- **HAproxy**<br/> + bandwidth, sessions, backends, etc. + +- **varnish**<br/> + threads, sessions, hits, objects, backends, etc. + +- **OpenVPN**<br/> + status per tunnel + +- **Hardware sensors**<br/> + `lm_sensors` and `IPMI`: temperature, voltage, fans, power, humidity + +- **NUT and APC UPSes**<br/> + load, charge, battery voltage, temperature, utility metrics, output metrics + +- **PHP-FPM**<br/> + multiple instances, each reporting connections, requests, performance + +- **hddtemp**<br/> + disk temperatures + +- **smartd**<br/> + disk S.M.A.R.T. values + +- **SNMP devices**<br/> + can be monitored too (although you will need to configure these) + +- **statsd**<br/> + [netdata is a fully featured statsd server](https://github.com/firehol/netdata/wiki/statsd) + +And you can extend it, by writing plugins that collect data from any source, using any computer language. + +## Links + + * Report a bug: https://github.com/YunoHost-Apps/netdata_ynh/issues + * NetData website: http://my-netdata.io/ diff --git a/app_nextcloud_fr.md b/pages/02.applications/02.docs/nextcloud/app_nextcloud.fr.md similarity index 76% rename from app_nextcloud_fr.md rename to pages/02.applications/02.docs/nextcloud/app_nextcloud.fr.md index e5dc9000..9dfe5f6a 100644 --- a/app_nextcloud_fr.md +++ b/pages/02.applications/02.docs/nextcloud/app_nextcloud.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/nextcloud_logo.png" alt="logo de Nextcloud"> Nextcloud +--- +title: Nextcloud +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_nextcloud' +--- + + - [Découverte de l'environnement de Nextcloud](#EnvironnementNextcloud) - [Logiciels Clients pour mobile et ordinateur](#LogicielsClients) @@ -11,19 +20,19 @@ Nextcloud est un service d'hébergement de fichiers, de nombreuses applications ## Découverte de l'environnement de Nextcloud<a name="EnvironnementNextcloud" href=""></a> -Du fait de la constitution de Nextcloud, une base avec des applications tiers à installer, ce chapitre ne concernera que la base de nextcloud sans applications ajoutés. Plus d'informations sur les applications dans la partie dédiée ou sur le catalogue d'application de nextcloud : [apps.nextcloud.com](https://apps.nextcloud.com). +Du fait de la constitution de Nextcloud, une base avec des applications tiers à installer, ce chapitre ne concernera que la base de nextcloud sans applications ajoutés. Plus d'informations sur les applications dans la partie dédiée ou sur le catalogue d'application de Nextcloud : [apps.nextcloud.com](https://apps.nextcloud.com). Nextcloud est avant tout un service de cloud (comme Seafile et d'autres logiciels), il permet une synchronisation et le partage de fichiers sur internet et entre plusieurs terminaux (ordinateurs, smartphone) mais aussi avec plusieurs personnes. ## Logiciels Clients<a name="LogicielsClients" href=""></a> -Il existe des logiciels clients pour de nombreux terminaux. Vous pouvez les retrouver sur le site de nextcloud : [nextcloud.com/install/#install-clients](https://nextcloud.com/install/#install-clients) +Il existe des logiciels clients pour de nombreux terminaux. Vous pouvez les retrouver sur le site de Nextcloud : [nextcloud.com/install/#install-clients](https://nextcloud.com/install/#install-clients) ## Manipulations utiles & problèmes rencontrés<a name="ManipulationsUtiles" href=""></a> ### Ajouter de l'espace à Nextcloud<a name="AjoutEspace" href=""></a> La solution I. permet d'ajouter un lien vers un dossier local ou distant. -La solution II. permet de déplacer l'espace de stockage principal de nextcloud. +La solution II. permet de déplacer l'espace de stockage principal de Nextcloud. #### I. Ajouter un espace de stockage externe @@ -41,7 +50,7 @@ Enfin cliquer sur la coche pour valider le dossier. **Remarque** : Remplacez `nextcloud` par le nom de son instance, si vous avez plusieurs apps Nextcloud installées. -Commencez par éteindre le serveur web avec la commande: +Commencez par éteindre le serveur web avec la commande : ```bash systemctl stop nginx ``` @@ -50,7 +59,7 @@ systemctl stop nginx **Cas A : Stockage vierge, exclusif à Nextcloud** -Pour l'instant seul root peut y écrire dans `/media/stockage`; ce qui signifie que nginx et nextcloud ne pourront donc pas l'utiliser. +Pour l'instant seul root peut y écrire dans `/media/stockage` ; ce qui signifie que NGINX et Nextcloud ne pourront donc pas l'utiliser. ```bash chown -R nextcloud:nextcloud /media/stockage @@ -77,7 +86,7 @@ Cas B : cp -ir /home/yunohost.app/nextcloud /media/stockage/nextcloud_data ``` L'option `i` permet de vous demander quoi faire en cas de conflit de fichier, notamment si vous écrasez un ancien dossier de données Owncloud ou Nextcloud. -Pour vérifier que tout s'est bien passé, comparer ce qu'affichent ces deux commandes (le contenu doit être identique): +Pour vérifier que tout s'est bien passé, comparer ce qu'affichent ces deux commandes (le contenu doit être identique) : ```bash ls -la /home/yunohost.app/nextcloud @@ -88,13 +97,13 @@ Cas B : ls -al /media/stockage/nextcloud_data/nextcloud ##### Configurer Nextcloud -Pour informer Nextcloud de son nouveau répertoire, modifiez le fichier `/var/www/nextcloud/config/config.php` avec la commande: +Pour informer Nextcloud de son nouveau répertoire, modifiez le fichier `/var/www/nextcloud/config/config.php` avec la commande : ```bash nano /var/www/nextcloud/config/config.php ``` -Cherchez la ligne: +Cherchez la ligne : ```bash 'datadirectory' => '/home/yunohost.app/nextcloud/data', @@ -154,16 +163,48 @@ Les options à désactiver (Off) sont : - Rocket Loader - Email Obfuscation -Sauvegarder et nettoyer vos caches (Cloudflare, navigateur, ...) et le tour est joué. +Sauvegarder et nettoyer vos caches (Cloudflare, navigateur...) et le tour est joué. -## Applications Tiers<a name="AppsTiers" href=""></a> +## À propos de Keeweb - + [Calendrier](/app_nextcloud_calendar) - + [contact](/app_nextcloud_contact) - + [KeeWeb](/app_nextcloud_keeweb) - + [Carnet](/app_nextcloud_carnet) +L'application Keeweb sur le catalogue de nextcloud - [apps.nextcloud.com/keeweb](https://apps.nextcloud.com/apps/keeweb) + +L'application KeeWeb est un gestionnaire de mots de passe incorporé à Nextcloud. Elle permet par exemple de lire un fichier de type KeePass (*.kdbx*) stocké sur votre instance Nextcloud. + +Mais il arrive parfois que Nextcloud ne laisse pas l'application prendre en charge ces fichiers, ce qui rend alors impossible leur lecture de KeeWeb. Pour remédier à cela, +[une solution](https://github.com/jhass/nextcloud-keeweb/blob/master/README.md#mimetype-detection) existe. + +Se rendre dans le répertoire de configuration de Nextcloud : + +```bash +cd /var/www/nextcloud/config/ +``` + +S'il n'existe pas, créer le fichier *mimetypemapping.json* dont le propriétaire est l'utilisateur *nextcloud* : + +```bash +sudo su nextcloud -c "nano mimetypemapping.json" +``` + +Puis ajouter dans ce fichier le texte suivent : + +```bash +{ + "kdbx": ["x-application/kdbx"] +} +``` + +Enregistrer le fichier (**CTRL** + **o**) et quitter nano (**CTRL** + **c**). + +Ensuite lancer un scan en tant que root : + +```bash +sudo -u nextcloud php /var/www/nextcloud/occ files:scan --all +``` + +À présent, le problème est corrigé. ## Quelques liens utiles<a name="liensutiles" href=""></a> + Site officiel : [nextcloud.com (en)](https://nextcloud.com/) -+ Catalogue d'application pour nextcloud : [apps.nextcloud.com](https://apps.nextcloud.com/) ++ Catalogue d'application pour Nextcloud : [apps.nextcloud.com](https://apps.nextcloud.com/) diff --git a/app_nextcloud.md b/pages/02.applications/02.docs/nextcloud/app_nextcloud.md similarity index 74% rename from app_nextcloud.md rename to pages/02.applications/02.docs/nextcloud/app_nextcloud.md index 4bd63778..ed92f8cb 100644 --- a/app_nextcloud.md +++ b/pages/02.applications/02.docs/nextcloud/app_nextcloud.md @@ -1,4 +1,13 @@ -# <img src="/images/nextcloud_logo.png" alt="logo de Nextcloud"> Nextcloud +--- +title: Nextcloud +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_nextcloud' +--- + + - [Discovering the Nextcloud environment](#EnvironmentNextcloud) - [Mobile and computer client software](#ClientSoftware) @@ -7,7 +16,7 @@ - [Third Party Applications](#AppsTiers) - [Useful links](#UsefulLinks) -Nextcloud is a file hosting service, many applications can be installed to offer it new features such as a calendar, a directory, notes and many others (you can find some applications in the [third-party applications](#AppsTiers) part but there are many others depending on your needs). +Nextcloud is a file hosting service, many applications can be installed to offer it new features such as a calendar, a directory, notes and many others (you can find some applications in the [third-party applications](#AppsTiers) part but there are many others depending on your needs). ## Discovering the Nextcloud environment <a name="EnvironmentNextcloud" href=""></a> @@ -23,7 +32,7 @@ There are client software for all platforms. You can find them on the official n ### Add storage space <a name="AddSpace" href=""></a> Solution I. allows you to add a link to a local or remote folder. -Solution II. allows to move the main storage space of nextcloud. +Solution II. allows to move the main storage space of Nextcloud. #### I. Add an external storage space @@ -50,7 +59,7 @@ systemctl stop nginx **Case A: Blank storage, exclusive to Nextcloud** -For the moment only root can write to it in `/media/storage`, which means that nginx and nextcloud will not be able to use it. +For the moment only root can write to it in `/media/storage`, which means that NGINX and Nextcloud will not be able to use it. ```bash chown -R nextcloud:nextcloud /media/storage @@ -135,35 +144,64 @@ It's over now. Now test if everything is fine, try connecting to your Nextcloud ### Nextcloud and Cloudflare -If you use Cloudflare for your DNS, *which may be useful if you have a dynamic IP*, you will most likely have authentication problems with the Nextcloud application. On the Internet many people propose to create a rule that disables all options related to security and Cloudflare speed for the url pointing to your Nextcloud instance. Although it works, it is not the optimal solution. I propose, certainly to create a rule for the url pointing to your Nextcloud instance but to disable only 2 options. So here's how: +If you use Cloudflare for your DNS, *which may be useful if you have a dynamic IP*, you will most likely have authentication problems with the Nextcloud application. On the Internet many people propose to create a rule that disables all options related to security and Cloudflare speed for the URL pointing to your Nextcloud instance. Although it works, it is not the optimal solution. I propose, certainly to create a rule for the URL pointing to your Nextcloud instance but to disable only 2 options. So here's how: #### Cloudflare Page Rules In the Cloudflare control panel select your domain and find Page Rules -the url in your address bar will look like this: https://dash.cloudflare.com/*/domain.tld/page-rules +the URL in your address bar will look like this: https://dash.cloudflare.com/*/domain.tld/page-rules ##### Add a rule -The rule to be added must apply to the url of your Nextcloud instance either: +The rule to be added must apply to the URL of your Nextcloud instance either: - `https://nextcloud.domain.tld/**` if you use a subdomain -- `https://domain.tld/nextcloud/*`` if you have deployed Nextcloud in a directory +- `https://domain.tld/nextcloud/*` if you have deployed Nextcloud in a directory The options to disable (Off) are: - Rocket Loader - Email Obfuscation -Save and clean your caches (Cloudflare, browser,...) and that's it. +Save and clean your caches (Cloudflare, browser...) and that's it. -## Third Party Applications <a name="AppsTiers" href=""></a> +## About Keeweb - - [Calendrier](app_nextcloud_calendar) - - [contact](app_nextcloud_contact) - - [KeeWeb](app_nextcloud_keeweb) - - [Carnet](app_nextcloud_carnet) +The KeeWeb application is a password manager integrated into Nextcloud. For example, it allows you to read a KeePass file (*.kdbx*) stored on your Nextcloud instance. +But sometimes Nextcloud does not let the application support these files, which makes it impossible to read them from KeeWeb. To remedy this, +[a solution](https://github.com/jhass/nextcloud-keeweb/blob/master/README.md#mimetype-detection) exists. + +Go to the Nextcloud configuration directory: + +```bash +cd /var/www/nextcloud/config/ +``` + +If it does not exist, create the *mimetypemapping.json* file whose owner is the user *nextcloud* : + +```bash +sudo su nextcloud -c "nano mimetypemapping.json" +``` + +Then add in this file the following text: + +```bash +{ + "kdbx": ["x-application/kdbx"] +} +``` + +Save the file (**CTRL** + **o**) and exit nano (**CTRL** + **c**). + +Then run a scan by executing next command as root: + +```bash +sudo -u nextcloud php /var/www/nextcloud/occ files:scan --all +``` + +Now the problem is fixed. ## Useful links <a name="UsefulLinks" href=""></a> - - Official website : [nextcloud.com](https://nextcloud.com/) - - Application catalogue for nextcloud : [apps.nextcloud.com](https://apps.nextcloud.com/) + - Official website: [nextcloud.com](https://nextcloud.com/) + - Application catalogue for Nextcloud: [apps.nextcloud.com](https://apps.nextcloud.com/) diff --git a/app_nextcloud_keeweb_fr.md b/pages/02.applications/02.docs/nextcloud_keeweb/app_nextcloud_keeweb.fr.md similarity index 84% rename from app_nextcloud_keeweb_fr.md rename to pages/02.applications/02.docs/nextcloud_keeweb/app_nextcloud_keeweb.fr.md index 9a99f973..68aa53bf 100644 --- a/app_nextcloud_keeweb_fr.md +++ b/pages/02.applications/02.docs/nextcloud_keeweb/app_nextcloud_keeweb.fr.md @@ -1,4 +1,11 @@ -# L'application KeeWeb pour NextCloud +--- +title: KeeWeb pour Nextcloud +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_nextcloud_keeweb' +--- L'application Keeweb sur le catalogue de nextcloud - [apps.nextcloud.com/keeweb](https://apps.nextcloud.com/apps/keeweb) @@ -29,10 +36,10 @@ Puis ajouter dans ce fichier le texte suivent : Enregistrer le fichier (**CTRL** + **o**) et quitter nano (**CTRL** + **c**). -Ensuite lancer un scan en tant que root: +Ensuite lancer un scan en tant que root : ```bash sudo -u nextcloud php /var/www/nextcloud/occ files:scan --all ``` -A présent, le problème est corrigé. +À présent, le problème est corrigé. diff --git a/app_nextcloud_keeweb.md b/pages/02.applications/02.docs/nextcloud_keeweb/app_nextcloud_keeweb.md similarity index 88% rename from app_nextcloud_keeweb.md rename to pages/02.applications/02.docs/nextcloud_keeweb/app_nextcloud_keeweb.md index a6039426..5d50ce28 100644 --- a/app_nextcloud_keeweb.md +++ b/pages/02.applications/02.docs/nextcloud_keeweb/app_nextcloud_keeweb.md @@ -1,4 +1,11 @@ -# The KeeWeb application for NextCloud +--- +title: KeeWeb for Nextcloud +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_nextcloud_keeweb' +--- The KeeWeb application is a password manager integrated into Nextcloud. For example, it allows you to read a KeePass file (*.kdbx*) stored on your Nextcloud instance. But sometimes Nextcloud does not let the application support these files, which makes it impossible to read them from KeeWeb. To remedy this, diff --git a/app_noalyss_fr.md b/pages/02.applications/02.docs/noalyss/app_noalyss.fr.md similarity index 73% rename from app_noalyss_fr.md rename to pages/02.applications/02.docs/noalyss/app_noalyss.fr.md index eac70633..28ded15c 100644 --- a/app_noalyss_fr.md +++ b/pages/02.applications/02.docs/noalyss/app_noalyss.fr.md @@ -1,4 +1,11 @@ -# Noalyss +--- +title: Noalyss +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_noalyss' +--- Logiciel de comptabilité open source développé en PHP. @@ -6,8 +13,8 @@ Toute les infos sur ce logiciel sont disponible sur le [site du projet](http://w Pour apprendre à l'utiliser je vous invite à lire le [wiki du projet](http://www.noalyss.eu/?page_id=46&lang=fr_FR) -Le github du module Yunohost est [ici](https://github.com/YunoHost-Apps/noalyss_ynh) +Le github du module YunoHost est [ici](https://github.com/YunoHost-Apps/noalyss_ynh) Vous pouvez essayer le projet [ici](http://demo.noalyss.eu/index.php) avec les identifiants : demo /demo -Enfin pour ne pas galérer comme moi. Les identifiants et mot de passe administrateur lors de la première connexion sont : phpcompta / phpcompta \ No newline at end of file +Enfin pour ne pas galérer comme moi. Les identifiants et mot de passe administrateur lors de la première connexion sont : phpcompta / phpcompta diff --git a/app_noalyss.md b/pages/02.applications/02.docs/noalyss/app_noalyss.md similarity index 67% rename from app_noalyss.md rename to pages/02.applications/02.docs/noalyss/app_noalyss.md index 8762bf51..8ae0d519 100644 --- a/app_noalyss.md +++ b/pages/02.applications/02.docs/noalyss/app_noalyss.md @@ -1,4 +1,11 @@ -# Noalyss +--- +title: Noalyss +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_noalyss' +--- Open source accounting software developed in PHP. @@ -6,8 +13,8 @@ All the information on this software is available on the [project website](http: To learn how to use it I invite you to read the [project wiki](http://www.noalyss.eu/?page_id=46&lang=fr_FR_id=46&lang=en_EN) -The github of the Yunohost module is [here](https://github.com/YunoHost-Apps/noalyss_ynh_ynh) +The github of the YunoHost module is [here](https://github.com/YunoHost-Apps/noalyss_ynh_ynh) You can try the project [here](http://demo.noalyss.eu/index.php) with the identifiers: demo /demo -I mean, not to have to struggle like me. The administrator IDs and passwords for the first login are: phpcompta / phpcompta \ No newline at end of file +I mean, not to have to struggle like me. The administrator IDs and passwords for the first login are: phpcompta / phpcompta diff --git a/pages/02.applications/02.docs/onlyoffice/app_onlyoffice.fr.md b/pages/02.applications/02.docs/onlyoffice/app_onlyoffice.fr.md new file mode 100644 index 00000000..3699f453 --- /dev/null +++ b/pages/02.applications/02.docs/onlyoffice/app_onlyoffice.fr.md @@ -0,0 +1,36 @@ +--- +title: OnlyOffice Server +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_onlyoffice' +--- + + + +[](https://install-app.yunohost.org/?app=onlyoffice) [](https://dash.yunohost.org/appci/app/onlyoffice) + +### Index + +- [Liens utiles](#liens-utiles) +- [Configurer OnlyOffice Server avec Nextcloud](#Configurer-OnlyOffice-Server-avec-Nextcloud) + +OnlyOffice Server est une suite bureautique collaborative en ligne gratuite comprenant des visualiseurs et des éditeurs de texte, de feuilles de calcul et de présentations, entièrement compatible avec les formats Office Open XML : .docx, .xlsx, .pptx et permettant l'édition collaborative en temps réel. + +## Configurer OnlyOffice Server avec Nextcloud + +1. Installer [OnlyOffice Server](https://github.com/YunoHost-Apps/onlyoffice_ynh) dans un domaine différent de celui utilisé par Nextcloud : `https://onlyoffice.domain.org` et `https://domain.org/nextcloud` (par exemple) + +2. Installer [ONLYOFFICE connector](https://apps.nextcloud.com/apps/onlyoffice) dans Nextcloud +- Connectez-vous à Nextcloud en tant qu'administrateur et installer ONLYOFFICE Connector : -> Applications -> installez ONLYOFFICE. (Le numéro de version d'ONLYOFFICE Connector n'a pas besoin d'être le même que celui d'OnlyOffice Server). +- Dans Paramètres (`https://domain.org/nextcloud/settings/admin/onlyoffice`), entrez l'adresse de votre serveur OnlyOffice Server (par exemple : `https://onlyoffice.domain.org`) + +OnlyOffice Server est maintenant connecté à Nextcloud. + +## Liens utiles + ++ Site web : [www.onlyoffice.com](https://www.onlyoffice.com/) ++ ONLYOFFICE connector : [Nextcloud ONLYOFFICE Connector](https://apps.nextcloud.com/apps/onlyoffice) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/onlyoffice_ynh](https://github.com/YunoHost-Apps/onlyoffice_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/onlyoffice/issues](https://github.com/YunoHost-Apps/onlyoffice_ynh/issues) diff --git a/pages/02.applications/02.docs/onlyoffice/app_onlyoffice.md b/pages/02.applications/02.docs/onlyoffice/app_onlyoffice.md new file mode 100644 index 00000000..c0f907cc --- /dev/null +++ b/pages/02.applications/02.docs/onlyoffice/app_onlyoffice.md @@ -0,0 +1,36 @@ +--- +title: OnlyOffice Server +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_onlyoffice' +--- + + + +[](https://install-app.yunohost.org/?app=onlyoffice) [](https://dash.yunohost.org/appci/app/onlyoffice) + +### Index + +- [Useful links](#useful-links) +- [Connect OnlyOffice Server with Nextcloud](#Connect-OnlyOffice-Server-with-Nextcloud) + +ONLYOFFICE Server is a free collaborative online office suite comprising viewers and editors for texts, spreadsheets and presentations, fully compatible with Office Open XML formats: .docx, .xlsx, .pptx and enabling collaborative editing in real time. + +## Connect OnlyOffice Server with Nextcloud + +1. Install [OnlyOffice Server](https://github.com/YunoHost-Apps/onlyoffice_ynh) in a different domain than the one used by Nextcloud: `https://onlyoffice.domain.org` and `https://domain.org/nextcloud` (for example) + +2. Install [ONLYOFFICE connector](https://apps.nextcloud.com/apps/onlyoffice) in Nextcloud +- Connect to Nextcloud as admin and install ONLYOFFICE Connector: -> Applications -> install ONLYOFFICE. (ONLYOFFICE Connector doesn't need to match your OnlyOffice Server version number). +- In Settings (`https://domain.org/nextcloud/settings/admin/onlyoffice`), enter your OnlyOffice Server address (for example: `https://onlyoffice.domain.org`) + +OnlyOffice Server is now connected to Nextcloud. + +## Useful links + ++ Website: [www.onlyoffice.com](https://www.onlyoffice.com/) ++ ONLYOFFICE connector: [Nextcloud ONLYOFFICE Connector](https://apps.nextcloud.com/apps/onlyoffice) ++ Application software repository: [github.com - YunoHost-Apps/onlyoffice_ynh](https://github.com/YunoHost-Apps/onlyoffice_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/onlyoffice/issues](https://github.com/YunoHost-Apps/onlyoffice_ynh/issues) diff --git a/pages/02.applications/02.docs/opensondage/app_opensondage.fr.md b/pages/02.applications/02.docs/opensondage/app_opensondage.fr.md new file mode 100644 index 00000000..0869c92a --- /dev/null +++ b/pages/02.applications/02.docs/opensondage/app_opensondage.fr.md @@ -0,0 +1,32 @@ +--- +title: Opensondage +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_opensondage' +--- + + + +[](https://install-app.yunohost.org/?app=opensondage) [](https://dash.yunohost.org/appci/app/opensondage) + +### Index + +- [Liens utiles](#liens-utiles) + +Opensondage-Framadate est un service en ligne permettant de planifier un rendez-vous ou prendre des décisions rapidement et simplement. Aucune inscription préalable n’est nécessaire. +Voici comment ça fonctionne : + +1. Créez un sondage +2. Déterminez les dates ou les sujets à choisir +3. Envoyez le lien du sondage à vos amis ou collègues +4. Discutez et prenez votre décision + +## Liens utiles + ++ Site web : [framadate.org](https://framadate.org) ++ Documentation officielle : [docs.framasoft.org/fr/framadate](https://docs.framasoft.org/fr/framadate) ++ Démonstration: [Démo](https://framadate.org) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/opensondage](https://github.com/YunoHost-Apps/opensondage_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/opensondage/issues](https://github.com/YunoHost-Apps/opensondage_ynh/issues) diff --git a/pages/02.applications/02.docs/opensondage/app_opensondage.md b/pages/02.applications/02.docs/opensondage/app_opensondage.md new file mode 100644 index 00000000..e3557f80 --- /dev/null +++ b/pages/02.applications/02.docs/opensondage/app_opensondage.md @@ -0,0 +1,32 @@ +--- +title: Opensondage +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_opensondage' +--- + + + +[](https://install-app.yunohost.org/?app=opensondage) [](https://dash.yunohost.org/appci/app/opensondage) + +### Index + +- [Useful links](#useful-links) + +Opensondage-Framadate is an online service for planning an appointment or making a decision quickly and easily. No registration is required. It's a community free/libre software alternative to Doodle. +Here is how it works: + +1. Create a poll +2. Define dates or subjects to choose from +3. Send the poll link to your friends or colleagues +4. Discuss and make a decision + +## Useful links + ++ Website: [framadate.org](https://framadate.org) ++ Official documentation: [docs.framasoft.org/fr/framadate](https://docs.framasoft.org/en/framadate) ++ Demonstration: [Demo](https://framadate.org) ++ Application software repository: [github.com - YunoHost-Apps/opensondage](https://github.com/YunoHost-Apps/opensondage_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/opensondage/issues](https://github.com/YunoHost-Apps/opensondage_ynh/issues) diff --git a/pages/02.applications/02.docs/osticket/app_osticket.fr.md b/pages/02.applications/02.docs/osticket/app_osticket.fr.md new file mode 100644 index 00000000..95ea9a4f --- /dev/null +++ b/pages/02.applications/02.docs/osticket/app_osticket.fr.md @@ -0,0 +1,28 @@ +--- +title: osTicket +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_osticket' +--- + + + +[](https://install-app.yunohost.org/?app=osticket) [](https://dash.yunohost.org/appci/app/osticket) + +### Index + +- [Liens utiles](#liens-utiles) + +osTicket est un système de tickets d'assistance open source largement utilisé. Il intègre de manière transparente les demandes créées par courrier électronique et les formulaires en ligne dans une interface web multi-utilisateurs simple et facile à utiliser. Gérez, organisez et archivez facilement toutes vos demandes d'assistance et vos réponses en un seul endroit tout en offrant à vos clients la responsabilité et la réactivité qu'ils méritent. + +osTicket est une alternative attrayante aux systèmes de support client plus coûteux et complexes ; simple, léger, fiable, open source, et facile à installer et à utiliser. Le meilleur, c'est qu'il est entièrement gratuit. + +## Liens utiles + ++ Site web : [osticket.com](https://osticket.com/) ++ Documentation officielle : [docs.osticket.com](https://docs.osticket.com/) ++ Démonstration : [Démo](http://www.ostickethacks.com/demo/demo_info.php) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/osticket](https://github.com/YunoHost-Apps/osticket_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/osticket/issues](https://github.com/YunoHost-Apps/osticket_ynh/issues) diff --git a/pages/02.applications/02.docs/osticket/app_osticket.md b/pages/02.applications/02.docs/osticket/app_osticket.md new file mode 100644 index 00000000..88863f67 --- /dev/null +++ b/pages/02.applications/02.docs/osticket/app_osticket.md @@ -0,0 +1,28 @@ +--- +title: osTicket +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_osticket' +--- + + + +[](https://install-app.yunohost.org/?app=osticket) [](https://dash.yunohost.org/appci/app/osticket) + +### Index + +- [Useful links](#useful-links) + +osTicket is a widely-used open source support ticket system. It seamlessly integrates inquiries created via email and web-based forms into a simple easy to use multi-user web interface. Easily manage, organize and archive all your support requests and responses in one place while providing your clients with accountability and responsiveness they deserve. + +osTicket is an attractive alternative to higher-cost and complex customer support systems; simple, lightweight, reliable, open source, and easy to setup and use. The best part is, it's completely free. + +## Useful links + ++ Website : [osticket.com](https://osticket.com/) ++ Official documentation : [docs.osticket.com](https://docs.osticket.com/) ++ Demonstration : [Demo](http://www.ostickethacks.com/demo/demo_info.php) ++ Application software repository : [github.com - YunoHost-Apps/osticket](https://github.com/YunoHost-Apps/osticket_ynh) ++ Fix a bug or an improvement by creating a ticket (issue) : [github.com - YunoHost-Apps/osticket/issues](https://github.com/YunoHost-Apps/osticket_ynh/issues) diff --git a/pages/02.applications/02.docs/peertube/app_peertube.fr.md b/pages/02.applications/02.docs/peertube/app_peertube.fr.md new file mode 100644 index 00000000..fcf7ca6b --- /dev/null +++ b/pages/02.applications/02.docs/peertube/app_peertube.fr.md @@ -0,0 +1,26 @@ +--- +title: PeerTube +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_peertube' +--- + + + +[](https://install-app.yunohost.org/?app=peertube) [](https://dash.yunohost.org/appci/app/peertube) + +### Index +x +- [Liens utiles](#liens-utiles) + +PeerTube est un projet de logiciel d'hébergement vidéo. Il vous permet de regarder et de partager des vidéos avec d'autres personnes en utilisant votre propre serveur, qu'il s'agisse d'un simple PC à la maison ou dans un Datacenter. Vous n'avez pas besoin d'héberger des milliers de vidéos pour rendre votre instance intéressante pour une utilisation quotidienne. De manière fédérée, il dialoguera avec d'autres serveurs de votre choix pour agréger les références à leurs vidéos sans vraiment les héberger localement. + + +## Liens utiles + ++ Site web : [joinpeertube.org](https://joinpeertube.org) ++ Documentation officielle : [docs.joinpeertube.org](https://docs.joinpeertube.org) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/peertube](https://github.com/YunoHost-Apps/peertube_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/peertube/issues](https://github.com/YunoHost-Apps/peertube_ynh/issues) diff --git a/pages/02.applications/02.docs/peertube/app_peertube.md b/pages/02.applications/02.docs/peertube/app_peertube.md new file mode 100644 index 00000000..7c32126e --- /dev/null +++ b/pages/02.applications/02.docs/peertube/app_peertube.md @@ -0,0 +1,26 @@ +--- +title: PeerTube +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_peertube' +--- + + + +[](https://install-app.yunohost.org/?app=peertube) [](https://dash.yunohost.org/appci/app/peertube) + +### Index + +- [Useful links](#useful-links) + +PeerTube is a video hosting software project. It allows you to watch and share videos with others using your own server, be it a simple computer at home or in a datacenter. You don't need to host thousands of videos to make your instance interesting for daily use. In a federated fashion, it will talk with other servers of your choice to aggregate references to their videos without really hosting them locally. + + +## Useful links + ++ Website: [joinpeertube.org](https://joinpeertube.org) ++ Official documentation: [docs.joinpeertube.org](https://docs.joinpeertube.org) ++ Application software repository: [github.com - YunoHost-Apps/peertube](https://github.com/YunoHost-Apps/peertube_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/peertube/issues](https://github.com/YunoHost-Apps/peertube_ynh/issues) diff --git a/pages/02.applications/02.docs/phpmyadmin/app_phpmyadmin.fr.md b/pages/02.applications/02.docs/phpmyadmin/app_phpmyadmin.fr.md new file mode 100644 index 00000000..52301afb --- /dev/null +++ b/pages/02.applications/02.docs/phpmyadmin/app_phpmyadmin.fr.md @@ -0,0 +1,25 @@ +--- +title: phpMyAdmin +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_phpmyadmin' +--- + + + +[](https://install-app.yunohost.org/?app=phpmyadmin) [](https://dash.yunohost.org/appci/app/phpmyadmin) + +### Index + +- [Liens utiles](#liens-utiles) + +phpMyAdmin est un outil logiciel libre écrit en PHP, destiné à gérer l'administration de MySQL sur le Web. phpMyAdmin supporte un large éventail d'opérations sur MySQL et MariaDB. Les opérations fréquemment utilisées (gestion des bases de données, des tables, des colonnes, des relations, des index, des utilisateurs, des autorisations, etc.) peuvent être effectuées via l'interface utilisateur, tout en ayant la possibilité d'exécuter directement n'importe quelle instruction SQL. + +## Liens utiles + ++ Site web : [www.phpmyadmin.net](https://www.phpmyadmin.net/) ++ Documentation officielle : [www.phpmyadmin.net/docs](https://www.phpmyadmin.net/docs/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/phpmyadmin](https://github.com/YunoHost-Apps/phpmyadmin_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/phpmyadmin/issues](https://github.com/YunoHost-Apps/phpmyadmin_ynh/issues) diff --git a/pages/02.applications/02.docs/phpmyadmin/app_phpmyadmin.md b/pages/02.applications/02.docs/phpmyadmin/app_phpmyadmin.md new file mode 100644 index 00000000..fff12f83 --- /dev/null +++ b/pages/02.applications/02.docs/phpmyadmin/app_phpmyadmin.md @@ -0,0 +1,25 @@ +--- +title: phpMyAdmin +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_phpmyadmin' +--- + + + +[](https://install-app.yunohost.org/?app=phpmyadmin) [](https://dash.yunohost.org/appci/app/phpmyadmin) + +### Index + +- [Useful links](#useful-links) + +phpMyAdmin is a free software tool written in PHP, intended to handle the administration of MySQL over the Web. phpMyAdmin supports a wide range of operations on MySQL and MariaDB. Frequently used operations (managing databases, tables, columns, relations, indexes, users, permissions, etc.) can be performed via the user interface, while you still have the ability to directly execute any SQL statement. + +## Useful links + ++ Website: [www.phpmyadmin.net](https://www.phpmyadmin.net/) ++ Official documentation: [www.phpmyadmin.net/docs](https://www.phpmyadmin.net/docs/) ++ Application software repository: [github.com - YunoHost-Apps/phpmyadmin](https://github.com/YunoHost-Apps/phpmyadmin_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/phpmyadmin/issues](https://github.com/YunoHost-Apps/phpmyadmin_ynh/issues) diff --git a/pages/02.applications/02.docs/phpsysinfo/app_phpsysinfo.fr.md b/pages/02.applications/02.docs/phpsysinfo/app_phpsysinfo.fr.md new file mode 100644 index 00000000..92aa48c3 --- /dev/null +++ b/pages/02.applications/02.docs/phpsysinfo/app_phpsysinfo.fr.md @@ -0,0 +1,23 @@ +--- +title: phpSysInfo +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_phpsysinfo' +--- + + + +[](https://install-app.yunohost.org/?app=phpsysinfo) [](https://dash.yunohost.org/appci/app/phpsysinfo) + +### Index + +phpSysInfo est un script PHP personnalisable qui affiche bien les informations sur votre système (CPU, RAM, disques...). + +## Liens utiles + ++ Site web : [phpsysinfo.github.io/phpsysinfo](https://phpsysinfo.github.io/phpsysinfo/) ++ Démonstration : [Démo](https://phpsysinfo.github.io/phpsysinfo/demos.html) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/phpsysinfo](https://github.com/YunoHost-Apps/phpsysinfo_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/phpsysinfo/issues](https://github.com/YunoHost-Apps/phpsysinfo_ynh/issues) diff --git a/pages/02.applications/02.docs/phpsysinfo/app_phpsysinfo.md b/pages/02.applications/02.docs/phpsysinfo/app_phpsysinfo.md new file mode 100644 index 00000000..bce139c9 --- /dev/null +++ b/pages/02.applications/02.docs/phpsysinfo/app_phpsysinfo.md @@ -0,0 +1,25 @@ +--- +title: phpSysInfo +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_phpsysinfo' +--- + + + +[](https://install-app.yunohost.org/?app=phpsysinfo) [](https://dash.yunohost.org/appci/app/phpsysinfo) + +### Index + +- [Useful links](#useful-links) + +phpSysInfo is a customizable PHP script that displays information about your system (CPU, RAM, disks). + +## Useful links + ++ Website: [phpsysinfo.github.io/phpsysinfo](https://phpsysinfo.github.io/phpsysinfo/) ++ Demonstration: [Demo](https://phpsysinfo.github.io/phpsysinfo/demos.html) ++ Application software repository: [github.com - YunoHost-Apps/phpsysinfo](https://github.com/YunoHost-Apps/phpsysinfo_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/phpsysinfo/issues](https://github.com/YunoHost-Apps/phpsysinfo_ynh/issues) diff --git a/pages/02.applications/02.docs/pihole/app_pihole.fr.md b/pages/02.applications/02.docs/pihole/app_pihole.fr.md new file mode 100644 index 00000000..d7150f78 --- /dev/null +++ b/pages/02.applications/02.docs/pihole/app_pihole.fr.md @@ -0,0 +1,82 @@ +--- +title: Pi-hole +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_pihole' +--- + + + +[](https://install-app.yunohost.org/?app=pihole)[](https://dash.yunohost.org/appci/app/pihole) + +- [Utiliser Pi-Hole comme serveur DHCP](#utiliser-pi-hole-comme-serveur-dhcp) + - [Configurer Pi-Hole](#configurer-pi-hole) + - [Configurer mon routeur](#configurer-mon-routeur) + - [Restaurer le réseau](#restaurer-le-réseau) +- [Liens utiles](#liens-utiles) + +Pi-hole est un bloqueur de publicité au niveau du réseau qui agit comme un DNS menteur et éventuellement un serveur DHCP3, destiné à être utilisé sur un réseau privé. Il est conçu pour être installé sur des périphériques intégrés dotés de capacités réseau, tels que le Raspberry Pi, mais il peut être utilisé sur d'autres machines exécutant GNU/Linux ou dans des environnements virtualisés. + +## Utiliser Pi-Hole comme serveur DHCP + +> **Attention, vous devez savoir que toucher à votre DHCP pourrait casser votre réseau. +Dans le cas où votre serveur serait inaccessible, vous perdriez votre résolution dns et votre adresse IP. +Ainsi, vous perdriez toute connexion à internet et même la connexion à votre routeur.** + +> **Si vous rencontrez ce genre de problèmes, merci de lire la section "Comment restaurer mon réseau".** + +### Configurer Pi-hole + +Il y a 2 manière de configurer Pi-hole pour qu'il soit utilisé comme votre serveur DHCP. +- Soit vous pouvez choisir de l'utiliser lorsque vous installez l'application. +- Soit vous pouvez activer le serveur DHCP par la suite dans l'onglet "Settings", partie "Pi-hole DHCP Server". +Dans ce second cas, il peut être préférable de forcer l'ip du serveur à une adresse statique. + +### Configurer mon routeur + +Votre routeur ou celui de votre FAI dispose d'un serveur DHCP activé par défaut. +Si vous gardez ce DHCP, en même temps que celui de Pi-hole, vous allez avoir des conflits transparents entre eux. +Le premier serveur DHCP à répondre va distribuer ses propres ip et paramètres. +Donc vous devez éteindre le serveur DHCP de votre routeur et laisser Pi-hole gérer votre réseau. + +#### Pourquoi je devrais utiliser le DHCP de Pi-hole ? + +En utilisant le DHCP de Pi-hole, vous lui permettez de donner sa configuration dns à chacun de vos clients. De cette manière, chaque requête sera filtrée par Pi-hole. + +Un autre cas d'usage du DHCP de Pi-hole est le cas où vous rencontrez des problèmes de hairpinning (Vous ne pouvez pas vous connecter à votre serveur parce que son ip est votre ip publique, et votre routeur n'autorise pas cela). +Dans ce cas, utilisez le dns de Pi-hole va vous permettre de vous connecter à votre serveur par son adresse locale plutôt que son adresse publique. + +### Restaurer le réseau + +> Oups ! +Votre serveur Pi-hole est tombé, et vous n'avez plus de DHCP. +Ne paniquez pas, on va surmonter ça \o/ + +Utilisez votre terminal favori sur votre ordinateur de bureau. +Et tout d'abord, récupérer votre interface réseau (Le plus souvent `eth0`). +``` bash +sudo ifconfig +``` + +Ensuite, changer votre ip pour une ip statique. +``` bash +sudo ifconfig eth0 192.168.1.100 +``` + +Maintenant, vous pouvez vous connecter à votre routeur et rallumer son serveur DHCP pour l'utiliser à nouveau. +Vous pouvez maintenant retirer votre ip statique et réobtenir une ip dynamique. +``` bash +sudo ifconfig eth0 0.0.0.0 && sudo dhclient eth0 +``` + +> N'oubliez pas d'éteindre le DHCP de votre routeur si votre serveur fonctionne à nouveau. + +## Liens utiles + + + Site web : [pi-hole.net (en)](https://pi-hole.net) + + Documentation officielle : [docs.pi-hole.net (en)](https://docs.pi-hole.net/) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/pihole](https://github.com/YunoHost-Apps/pihole_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/pihole/issues](https://github.com/YunoHost-Apps/pihole_ynh/issues) + diff --git a/pages/02.applications/02.docs/pihole/app_pihole.md b/pages/02.applications/02.docs/pihole/app_pihole.md new file mode 100644 index 00000000..6138b73a --- /dev/null +++ b/pages/02.applications/02.docs/pihole/app_pihole.md @@ -0,0 +1,83 @@ +--- +title: Pi-hole +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_pihole' +--- + + + +[](https://install-app.yunohost.org/?app=pihole) [](https://dash.yunohost.org/appci/app/pihole) + +### Index + +- [Using Pi-Hole as a DHCP server](#using-pi-hole-as-a-dhcp-server) + - [Configure Pi-Hole](#configure-pi-hole) + - [Configure my router](#configure-my-router) + - [Restore Network](#restore-network) +- [Useful links](#useful-links) + +Pi-hole is a network-level ad blocker that acts as a DNS layer and possibly a DHCP3 server for use on a private network. It is designed to be installed on embedded devices with network capabilities, such as the Raspberry Pi, but can be used on other machines running GNU/Linux or in virtualised environments. + +## Using Pi-Hole as a DHCP server + +> **Warning, you should be aware that touching your DHCP could break your network. +In case your server is inaccessible, you will lose your dns resolution and IP address. +Thus, you would lose any connection to the internet and even the connection to your router.** + +> If you encounter this kind of problem, please read the section "How to restore my network". + +### Configure Pi-Hole + +There are 2 ways to configure Pi-hole to be used as your DHCP server. +- Either you can choose to use it when you install the application. +- Or you can activate the DHCP server afterwards in the "Settings" tab, part "Pi-hole DHCP Server". +In this second case, it may be preferable to force the server IP to a static address. + +### Configure my router + +Your router or your ISP's router has a DHCP server enabled by default. +If you keep this DHCP, along with Pi-hole's, you will have transparent conflicts between them. +The first DHCP server to respond will distribute its own IP and settings. +So you need to turn off your router's DHCP server and let Pi-hole manage your network. + +#### Why should I use Pi-hole's DHCP? + +By using Pi-hole's DHCP, you allow Pi-hole to give its dns configuration to each of your clients. This way, every request will be filtered by Pi-hole. + +Another case of using Pi-hole DHCP is if you have hairpinning problems (you can't connect to your server because its IP is your public IP, and your router doesn't allow this). +In this case, using Pi-hole's dns will allow you to connect to your server by its local address rather than its public address. + +### Restore network + +> Oops! +Your Pi-hole server has crashed, and you don't have DHCP anymore. +Don't panic. We'll get through this. + +Use your favorite device on your desktop computer. +And first, get your network interface (usually `eth0`). +```bash +sudo ifconfig +``` + +Then change your IP to a static one. +```bash +sudo ifconfig eth0 192.168.1.100 +``` + +Now you can connect to your router and reboot its DHCP server to use it again. +You can now remove your static IP and get a dynamic IP again. +```bash +sudo ifconfig eth0 0.0.0 && sudo dhclient eth0 +``` + +> Remember to turn off your router's DHCP if your server is running again. + +## Useful links + ++ Website: [pi-hole.net](https://pi-hole.net) ++ Official documentation: [docs.pi-hole.net](https://docs.pi-hole.net/) ++ Application software repository: [github.com - YunoHost-Apps/pihole](https://github.com/YunoHost-Apps/pihole_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/pihole/issues](https://github.com/YunoHost-Apps/pihole_ynh/issues) diff --git a/pages/02.applications/02.docs/piwigo/app_piwigo.fr.md b/pages/02.applications/02.docs/piwigo/app_piwigo.fr.md new file mode 100644 index 00000000..c219aa00 --- /dev/null +++ b/pages/02.applications/02.docs/piwigo/app_piwigo.fr.md @@ -0,0 +1,50 @@ +--- +title: Piwigo +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_piwigo' +--- + + + +[](https://install-app.yunohost.org/?app=piwigo) [](https://dash.yunohost.org/appci/app/piwigo) + +### Index + +- [Fonctionnalités](#fonctionnalités) +- [Applications clientes](#applications-clientes) +- [Liens utiles](#liens-utiles) + +**[Piwigo](https://fr.piwigo.org)** est un logiciel de galerie photos pour le Web, bâti par une communauté active d'utilisateurs et de développeurs. + +Les extensions rendent Piwigo facilement personnalisable. Cerise sur le gâteau, Piwigo est libre et gratuit. + +## Fonctionnalités + +En plus des [fonctionnalités principales](https://fr.piwigo.org/fonctionnalites) de Piwigo, ce paquet propose également : + +* une intégration avec le système de gestion des utilisateurs et le SSO de YunoHost : + * installation privée : limitée aux utilisateurs de YunoHost + * installation publique : + * SSO pour les utilisateurs YunoHost + * permet de gérer l'accès à d'autres utilisateurs, et mode invité possible +* de permettre à un utilisateur d'être administrateur (réglage lors de l'installation) + + + +## Applications clientes + +| Nom de l'application | Plateforme | Multi-comptes | Play Store | F-Droid | Apple Store | Autre | +|-----------------------|------------|---------------|------------|---------|-------------|---------| +| Piwigo | Android / iOS | ? | [Playstore - Piwigo](https://play.google.com/store/apps/details?id=org.piwigo.android&hl=fr) | [Piwigo - F-Droid](https://f-droid.org/packages/org.piwigo.android/)| [App Store - Piwigo](https://apps.apple.com/fr/app/piwigo/id472225196) | | +| digiKam | GNU/Linux / macOS / Windows | ? | | | | [digiKam Download](https://www.digikam.org/download/) | +| Shotwell | GNU/Linux | ? | | | | [Install Shotwell](https://wiki.gnome.org/Apps/Shotwell/BuildingAndInstalling) | + +## Liens utiles + ++ Site web : [Site Piwigo](https://fr.piwigo.org) ++ Documentation officielle : [Documentation](https://piwigo.org/doc/doku.php) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/piwigo](https://github.com/YunoHost-Apps/piwigo_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/piwigo/issues](https://github.com/YunoHost-Apps/piwigo_ynh/issues) diff --git a/pages/02.applications/02.docs/piwigo/app_piwigo.md b/pages/02.applications/02.docs/piwigo/app_piwigo.md new file mode 100644 index 00000000..1da388bb --- /dev/null +++ b/pages/02.applications/02.docs/piwigo/app_piwigo.md @@ -0,0 +1,50 @@ +--- +title: Piwigo +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_piwigo' +--- + + + +[](https://install-app.yunohost.org/?app=piwigo) [](https://dash.yunohost.org/appci/app/piwigo) + +### Index + +- [Features](#features) +- [Customer Applications](#customer-applications) +- [Useful links](#useful-links) + +[Piwigo](http://piwigo.org) is a photo gallery software for the Web, built by an active community of users and developers. + +Extensions make Piwigo easily customizable. Icing on the cake, Piwigo is free and opensource. + + + +## Features + +In addition to Piwigo [core features](http://piwigo.org/basics/features), the following are made available with +this package: + + * Integrate with YunoHost users and SSO: + * private mode: limit access to YunoHost users + * public mode: + * SSO for YunoHost users + * allow other users management, and guest mode + * Allow one YunoHost user to be the administrator (set at the installation) + +## Customer Applications +| Application name | Platform | Multi-account | Play Store | F-Droid | Apple Store | *Other* | +|------------------|----------|---------------|------------|---------|-------------|---------| +| Piwigo | Android / iOS | ? | [Playstore - Piwigo](https://play.google.com/store/apps/details?id=org.piwigo.android&hl=en) | [Piwigo - F-Droid](https://f-droid.org/packages/org.piwigo.android/)| [App Store - Piwigo](https://apps.apple.com/fr/app/piwigo/id472225196) | | +| digiKam | GNU/Linux / macOS / Windows | ? | | | | [digiKam Download](https://www.digikam.org/download/) | +| Shotwell | GNU/Linux | ? | | | | [Install Shotwell](https://wiki.gnome.org/Apps/Shotwell/BuildingAndInstalling) | + +## Useful links + ++ Website: [Piwigo](http://piwigo.org/) ++ Official documentation: [Documentation](https://piwigo.org/doc/doku.php) ++ Application software repository: [github.com - YunoHost-Apps/piwigo](https://github.com/YunoHost-Apps/piwigo_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/piwigo/issues](https://github.com/YunoHost-Apps/piwigo_ynh/issues) diff --git a/app_pleroma_fr.md b/pages/02.applications/02.docs/pleroma/app_pleroma.fr.md similarity index 63% rename from app_pleroma_fr.md rename to pages/02.applications/02.docs/pleroma/app_pleroma.fr.md index 44a4cdb1..2b09e298 100644 --- a/app_pleroma_fr.md +++ b/pages/02.applications/02.docs/pleroma/app_pleroma.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/pleroma_logo.png" alt="logo de Pleroma"> Pleroma +--- +title: Pleroma +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_pleroma' +--- + + - [Découverte de l'interface de Pleroma](#d%C3%A9couverte-de-linterface-de-pleroma) - [Logiciels Clients pour mobile et ordinateur](#applications-clients) @@ -12,18 +21,18 @@ Pour celles et ceux qui n'ont pas ou peu l'habitude des réseaux sociaux, voici ### Accueil de l'interface -<img src="/images/capture_globale.png" alt="Capture écran accueil de Pleroma"> + 1. Barre de menu - + <img src="/images/capture_menu_gauche.png" alt="Capture du bouton à gauche de la barre de menu"> Le bouton à gauche portant le nom de l'instance - dans la capture ci-dessus *Meta - Pleroma* - renvoie vers la page d'accueil de l'instance. Dans le cas où vous êtes connecté⋅e cela vous renverra vers la visualisation de votre *journal*, si ce n'est pas le cas vers *Le réseau connu*. - + <img src="/images/capture_menu_droite.png" alt="Capture des boutons à droite de la barre de menu"> Si vous êtes connecté⋅e vous aurez trois boutons, si vous ne l'êtes pas il n'y en aura que deux. Dans l'ordre, de gauche à droite : - + <img src="/images/capture_menu_droite_chercher_utilisateur.png" alt="Capture bouton chercher un⋅e utilisateur⋅trice"> Permet d'ajouter de nouveaux utilisateurs et nouvelles utilisatrices afin de les suivre et ainsi vous abonner à leurs publications. Il est possible de rechercher un·e utilisateur·trice avec seulement son pseudonyme (par exemple : *yunohost*) ou alors sous la forme @pseudonyme@instance.domaine (par exemple : *@yunohost@mastodon.social*) - + <img src="/images/capture_menu_droite_preferences.png" alt="Capture bouton préférences"> Permet d'accéder aux paramétres d'affichages de votre session. + +  Le bouton à gauche portant le nom de l'instance - dans la capture ci-dessus *Meta - Pleroma* - renvoie vers la page d'accueil de l'instance. Dans le cas où vous êtes connecté⋅e cela vous renverra vers la visualisation de votre *journal*, si ce n'est pas le cas vers *Le réseau connu*. + +  Si vous êtes connecté⋅e vous aurez trois boutons, si vous ne l'êtes pas il n'y en aura que deux. Dans l'ordre, de gauche à droite : + +  Permet d'ajouter de nouveaux utilisateurs et nouvelles utilisatrices afin de les suivre et ainsi vous abonner à leurs publications. Il est possible de rechercher un·e utilisateur·trice avec seulement son pseudonyme (par exemple : *yunohost*) ou alors sous la forme @pseudonyme@instance.domaine (par exemple : *@yunohost@mastodon.social*) + +  Permet d'accéder aux paramétres d'affichages de votre session. /!\ Si vous n'êtes pas connecté·e les modifications effectuées ne seront valables qu'un temps (jusqu'à ce que les cookies de fonctionnement soient effacés). - + <img src="/images/capture_menu_droite_deconnexion.png" alt="Capture Déconnexion"> Permet de se déconnecter de l'instance. Si vous n'êtes pas sur votre ordinateur personnel pensez-y ! + +  Permet de se déconnecter de l'instance. Si vous n'êtes pas sur votre ordinateur personnel pensez-y ! 2. Espace de Publications / Fenêtre de connexion -<img src="/images/capture_espace_connexion.png" alt="Fenêtre de connexion à la place de la zone de publications"> Si vous êtes connecté·e cet espace vous permet de publier vos messages et d'y joindre un média (images, GIF, vidéos, etc). Vous êtes limité⋅e dans le nombre de caractères, avec Pleroma la limitation est définie par l'administrateur·trice de l'instance. Si vous avez des questions envoyez lui un message. + Si vous êtes connecté·e cet espace vous permet de publier vos messages et d'y joindre un média (images, GIF, vidéos, etc). Vous êtes limité⋅e dans le nombre de caractères, avec Pleroma la limitation est définie par l'administrateur·trice de l'instance. Si vous avez des questions envoyez lui un message. 3. Fenêtre de visualisations C'est ici le centre ~~du monde~~ de Pleroma, vous pourrez y voir les différentes publications de vos contacts ou qui circulent sur l'instance ainsi que les re-toots et qui a publié. diff --git a/pages/02.applications/02.docs/pleroma/app_pleroma.md b/pages/02.applications/02.docs/pleroma/app_pleroma.md new file mode 100644 index 00000000..5885a7b2 --- /dev/null +++ b/pages/02.applications/02.docs/pleroma/app_pleroma.md @@ -0,0 +1,10 @@ +--- +title: Pleroma +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_pleroma' +--- + +Unfortunately, this page only exists in french for now. diff --git a/pages/02.applications/02.docs/plume/app_plume.fr.md b/pages/02.applications/02.docs/plume/app_plume.fr.md new file mode 100644 index 00000000..01671ae0 --- /dev/null +++ b/pages/02.applications/02.docs/plume/app_plume.fr.md @@ -0,0 +1,29 @@ +--- +title: Plume +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_plume' +--- + + + +[](https://install-app.yunohost.org/?app=plume) [](https://dash.yunohost.org/appci/app/plume) + +### Index + +- [Liens utiles](#liens-utiles) + +Plume est un moteur de blog décentralisé et fédéré en cours de développement. + +* Décentralisé : Chaque instance peut suivre une ou plusieurs autres instances Plume afin de permettre à ses utilisateur·rices de visionner les vidéos de celles-ci. +* Fédéré : Via le protocole ActivityPub, Plume peut interagir avec d'autres logiciels qui font partie du Fediverse, comme Mastodon ou PixelFed par exemple. + +## Liens utiles + ++ Site web : [joinplu.me](https://joinplu.me/) ++ Documentation officielle : [docs.joinplu.me](https://docs.joinplu.me/) ++ Démonstration : [Démo](https://joinplu.me/#instances) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/plume](https://github.com/YunoHost-Apps/plume_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/plume/issues](https://github.com/YunoHost-Apps/plume_ynh/issues) diff --git a/pages/02.applications/02.docs/plume/app_plume.md b/pages/02.applications/02.docs/plume/app_plume.md new file mode 100644 index 00000000..7dd1aa11 --- /dev/null +++ b/pages/02.applications/02.docs/plume/app_plume.md @@ -0,0 +1,30 @@ +--- +title: Plume +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_plume' +--- + + + +[](https://install-app.yunohost.org/?app=plume) [](https://dash.yunohost.org/appci/app/plume) + +### Index + +- [Useful links](#useful-links) + +Plume is a decentralized and federated blog engine under development. + +* Decentralized: Each instance can follow one or more other Plume instances in order to allow its rice-users to view their videos. +* Federated: Via the ActivityPub protocol, Plume can interact with other software that are part of the Fediverse, such as Mastodon or PixelFed for example. + + +## Useful links + ++ Website : [joinplu.me](https://joinplu.me/) ++ Official documentation : [docs.joinplu.me](https://docs.joinplu.me/) ++ Demonstration : [Demo](https://joinplu.me/#instances) ++ Application software repository : [github.com - YunoHost-Apps/plume](https://github.com/YunoHost-Apps/plume_ynh) ++ Fix a bug or an improvement by creating a ticket (issue) : [github.com - YunoHost-Apps/plume/issues](https://github.com/YunoHost-Apps/plume_ynh/issues) diff --git a/app_pluxml_fr.md b/pages/02.applications/02.docs/pluxml/app_pluxml.fr.md similarity index 72% rename from app_pluxml_fr.md rename to pages/02.applications/02.docs/pluxml/app_pluxml.fr.md index 4cd94e10..569d0e48 100644 --- a/app_pluxml_fr.md +++ b/pages/02.applications/02.docs/pluxml/app_pluxml.fr.md @@ -1,12 +1,19 @@ -# PluXml +--- +title: PluXml +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_pluxml' +--- - + PluXml est un moteur de blog/CMS stockant ces données en XML et ne nécessitant pas de base de données SQL. ## Aperçu - + ## Plugins et thèmes @@ -20,4 +27,4 @@ Pour sauvegarder votre blog, il est nécessaire de réaliser une copie du dossie PluXml : https://www.pluxml.org/ Documentation : https://wiki.pluxml.org/ -Forum : https://forum.pluxml.org/ \ No newline at end of file +Forum : https://forum.pluxml.org/ diff --git a/app_pluxml.md b/pages/02.applications/02.docs/pluxml/app_pluxml.md similarity index 57% rename from app_pluxml.md rename to pages/02.applications/02.docs/pluxml/app_pluxml.md index 66bc1056..4fe7d8fb 100644 --- a/app_pluxml.md +++ b/pages/02.applications/02.docs/pluxml/app_pluxml.md @@ -1,16 +1,23 @@ -# PluXml +--- +title: PluXml +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_pluxml' +--- - + PluXml is a blog/CMS storing data in XML and not in a SQL database. ## Overview - + ## Plugins and themes -Plugins and themes should respectively be installed in the following folders : `/var/www/pluxml/plugins`, `/var/www/pluxml/themes`. +Plugins and themes should respectively be installed in the following folders: `/var/www/pluxml/plugins`, `/var/www/pluxml/themes`. ## Backup @@ -20,4 +27,4 @@ To restore your blog, you should keep a copy of the folder `/var/www/pluxml/data PluXml : https://www.pluxml.org/ Documentation : https://wiki.pluxml.org/ -Forum : https://forum.pluxml.org/ \ No newline at end of file +Forum : https://forum.pluxml.org/ diff --git a/pages/02.applications/02.docs/privatebin/app_privatebin.fr.md b/pages/02.applications/02.docs/privatebin/app_privatebin.fr.md new file mode 100644 index 00000000..d385ae73 --- /dev/null +++ b/pages/02.applications/02.docs/privatebin/app_privatebin.fr.md @@ -0,0 +1,26 @@ +--- +title: PrivateBin +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_privatebin' +--- + + + +[](https://install-app.yunohost.org/?app=privatebin) [](https://dash.yunohost.org/appci/app/privatebin) + +### Index + +- [Liens utiles](#liens-utiles) + +PrivateBin est un service web permettant de stocker temporairement et de partager du texte simple de manière chiffrée, sans stockage lisible sur le serveur. La clef de chiffrement/déchiffrement n'est pas stockée sur le serveur mais dans l'URL transmise. Ainsi vous pouvez partager des informations sensibles (mots de passe, codes d'accès, et même une discussion) de manière confidentielle en communiquant à vos interlocuteurs l'adresse spécifique de votre contenu. De plus ce contenu a une valeur limitée dans le temps et est détruit passé un délai personnalisable. + +## Liens utiles + ++ Site web : [privatebin.info](https://privatebin.info/) ++ Documentation officielle : [github.com/PrivateBin/PrivateBin/wiki](https://github.com/PrivateBin/PrivateBin/wiki) ++ Démonstration : [Démo](https://privatebin.net/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/privatebin](https://github.com/YunoHost-Apps/privatebin_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/privatebin/issues](https://github.com/YunoHost-Apps/privatebin_ynh/issues) diff --git a/pages/02.applications/02.docs/privatebin/app_privatebin.md b/pages/02.applications/02.docs/privatebin/app_privatebin.md new file mode 100644 index 00000000..5d585cf4 --- /dev/null +++ b/pages/02.applications/02.docs/privatebin/app_privatebin.md @@ -0,0 +1,26 @@ +--- +title: PrivateBin +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_privatebin' +--- + + + +[](https://install-app.yunohost.org/?app=privatebin) [](https://dash.yunohost.org/appci/app/privatebin) + +### Index + +- [Useful links](#useful-links) + +PrivateBin is a web service for temporarily storing and sharing plain text in encrypted form without readable storage on the server. The encryption/decryption key is not stored on the server but in the transmitted URL. Thus you can share sensitive information (passwords, access codes, and even a discussion) in a confidential way by communicating to your interlocutors the specific address of your content. Moreover this content has a limited value in time and is destroyed after a customizable delay. + +## Useful links + ++ Website : [privatebin.info](https://privatebin.info/) ++ Official documentation : [github.com/PrivateBin/PrivateBin/wiki](https://github.com/PrivateBin/PrivateBin/wiki) ++ Demonstration : [Demo](https://privatebin.net/) ++ Application software repository : [github.com - YunoHost-Apps/privatebin](https://github.com/YunoHost-Apps/privatebin_ynh) ++ Fix a bug or an improvement by creating a ticket (issue) : [github.com - YunoHost-Apps/privatebin/issues](https://github.com/YunoHost-Apps/privatebin_ynh/issues) diff --git a/app_radicale_fr.md b/pages/02.applications/02.docs/radicale/app_radicale.fr.md similarity index 92% rename from app_radicale_fr.md rename to pages/02.applications/02.docs/radicale/app_radicale.fr.md index 27650239..6dfd034a 100644 --- a/app_radicale_fr.md +++ b/pages/02.applications/02.docs/radicale/app_radicale.fr.md @@ -1,4 +1,11 @@ -# Radicale +--- +title: Radicale +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_radicale' +--- Radicale est un serveur de calendrier et de contact CalDAV/CardDAV. Il ne dispose pas d’interface graphique d’administration. @@ -19,7 +26,7 @@ Pour connecter un autre client au serveur radicale, il faut renseigner ces adres - Exemple : https://example.org/radicale/moi/AddressBook.vcf/ ### Créer un nouveau calendrier ou un nouveau carnet d’adresses -Créer un nouveau calendrier ou un nouveau carnet d’adresses est très simple avec radicale, il suffit d’y accéder! Radicale créera tout nouveau calendrier ou carnet d’adresses inexistant si vous tentez d’y accéder. +Créer un nouveau calendrier ou un nouveau carnet d’adresses est très simple avec radicale, il suffit d’y accéder ! Radicale créera tout nouveau calendrier ou carnet d’adresses inexistant si vous tentez d’y accéder. Il suffit donc de se connecter (comme précédemment) à un calendrier ou un carnet d’adresses inexistant pour le créer. Cela peut être fait simplement avec un navigateur, pour le voir apparaître dans une collection déjà connectée à un client. @@ -50,7 +57,7 @@ collection: calendrier, carnet ou collection concernée. permission: permission, r (lecture), w (écriture) ou rw (lecture/écriture) ``` Le fichier *rights* contient plusieurs exemples pouvant être exploités. -Pour valider les modifications apportées au fichier */etc/radicale/rights*, radicale doit être rechargé via le service uwsgi. +Pour valider les modifications apportées au fichier */etc/radicale/rights*, radicale doit être rechargé via le service uWSGI. ```bash sudo service uwsgi restart ``` @@ -72,7 +79,7 @@ Dans les deux cas, le partage ne fonctionnera qu’en utilisant l’adresse comp Cette limitation peut s’avérer bloquante pour des clients gérant une seule collection, tel que InfCloud. Pour ce cas particulier, une solution permet de contourner ce problème. #### Partager des ressources directement dans la collection d’un utilisateur -> Cette solution est fonctionnelle, mais reste du bidouillage… +> Cette solution est fonctionnelle, mais reste du bidouillage... Pour permettre à un partage d’apparaître directement dans la collection d’un utilisateur, il faut exploiter l’usage des fichiers sous Radicale. En créant simplement un lien symbolique de la ressource à partager. @@ -86,7 +93,7 @@ En revanche, sans avoir recours à des règles pour chaque ressource de la colle ### Rendre le log de Radicale plus loquace Par défaut, le log de Radicale est réglé sur INFO. Ce mode épargne le disque dur mais ne permet pas de débugger Radicale en cas de problème. -Pour passer Radicale en mode DEBUG, il faut éditer le fichier */etc/radicale/logging* et passer INFO à DEBUG dans les sections *[logger_root]* et *[handler_file]* puis recharger le service uwsgi. +Pour passer Radicale en mode DEBUG, il faut éditer le fichier */etc/radicale/logging* et passer INFO à DEBUG dans les sections *[logger_root]* et *[handler_file]* puis recharger le service uWSGI. Dès lors, le log affiche toutes les requêtes qui sont faites à Radicale ainsi que l’analyse du fichier *rights*. Il est toutefois déconseillé de rester sur ce mode, car le log se remplie très rapidement. diff --git a/app_radicale.md b/pages/02.applications/02.docs/radicale/app_radicale.md similarity index 87% rename from app_radicale.md rename to pages/02.applications/02.docs/radicale/app_radicale.md index 4a41b02d..59a35ee0 100644 --- a/app_radicale.md +++ b/pages/02.applications/02.docs/radicale/app_radicale.md @@ -1,8 +1,15 @@ -# Radicale +--- +title: Radicale +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_radicale' +--- -Radical is a calendar and contact server CalDAV/CardDAV. It does not have a graphical administration interface. +Radicale is a calendar and contact server CalDAV/CardDAV. It does not have a graphical administration interface. -Radical is installed by default with the web client InfCloud that will view and edit your calendars and address books. +Radicale is installed by default with the web client InfCloud that will view and edit your calendars and address books. To connect another client to radical, we must inform these addresses: @@ -19,8 +26,7 @@ To connect another client to radical, we must inform these addresses: - Exemple: https://example.org/radicale/me/AddressBook.vcf/ ### Create a new schedule or a new address book -Create a new schedule or a new address book is very simple with radical, just go there! Radical create all new calendar or notebook to nonexistent addresses if you try to access it. - +Create a new schedule or a new address book is very simple with Radicale, just go there! Radicale creates all new calendar or notebook to nonexistent addresses if you try to access it. So just log on (as before) to a calendar or a nonexistent address book to create it. This can be done simply with a browser, to appear in a collection already connected to a client. @@ -50,7 +56,7 @@ collection: calendar, book or collection concerned. permission: permission, r (read), w (write) or rw (read/write) ``` *Rights* file contains several examples that can be exploited. -To validate changes to the */etc/radicale/rights* file, radical must be recharged via uwsgi service. +To validate changes to the */etc/radicale/rights* file, radical must be recharged via uWSGI service. ```bash sudo service uwsgi restart ``` @@ -72,7 +78,7 @@ In both cases, the sharing works only using the full address of the calendar or This limitation may be blocking for clients managing a single collection, as InfCloud. In this particular case, a solution overcomes this problem. #### Share resources directly in the collection of a user -> This solution is functional, but is an hack ... +> This solution is functional, but is an hack... To enable sharing to occur directly in the collection of a user, it must exploit the use of files in Radicale. By simply creating a symbolic link to the resource sharing. @@ -86,7 +92,7 @@ However, without recourse to the rules for each resource in the collection of us ### Making Radical log more verbose By default, the Radical log is set to INFO. This method savings the hard drive but does not debug Radicale in case of problems. -To pass Radicale in DEBUG mode, edit the */etc/radicale/logging* and change INFO to DEBUG in sections *[logger_root]* and *[handler_file]*. Then reload the uwsgi service. +To pass Radicale in DEBUG mode, edit the */etc/radicale/logging* and change INFO to DEBUG in sections *[logger_root]* and *[handler_file]*. Then reload the uWSGI service. Now, the log displays all requests that are made to Radicale and analysis of *rights* file. However, do not stay on this mode because the log is filled very quickly. diff --git a/pages/02.applications/02.docs/rainloop/app_rainloop.fr.md b/pages/02.applications/02.docs/rainloop/app_rainloop.fr.md new file mode 100644 index 00000000..a722efad --- /dev/null +++ b/pages/02.applications/02.docs/rainloop/app_rainloop.fr.md @@ -0,0 +1,51 @@ +--- +title: Rainloop +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_rainloop' +--- + + + +[](https://install-app.yunohost.org/?app=rainloop) [](https://dash.yunohost.org/appci/app/rainloop) + +### Index + +- [Configuration](#Configuration) +- [Liens utiles](#liens-utiles) + +Rainloop est un webmail simple et léger. + +## Configuration + +Pour le configurer après l'installation, veuillez vous rendre sur http://DOMAIN.TLD/rainloop/app/?admin + +- Le nom d'utilisateur admin par défaut est : admin +- Le mot de passe admin par défaut est : Mot de passe choisi lors de l'installation +- Si vous avez oublié votre mot de passe, vous pouvez le retrouver avec `sudo yunohost app setting rainloop password` + +### Carnet d'adresses +Rainloop intègre par défaut un carnet d'adresse avec les utilisateurs du serveur YunoHost. Chaque utilisateur peut ajouter un carnet d'adresse distant CardDAV via leurs propres paramètres. +- Si vous utilisez Baïkal, l'adresse à renseigner est du type : https://DOMAIN.TLD/baikal/card.php/addressbooks/UTILISATEUR/default/ +- Si vous utilisez Nextcloud, l'adresse à renseigner est du type : https://DOMAIN.TLD/nextcloud/remote.php/carddav/addressbooks/USER/contacts + +### Gestion des domaines +Les utilisateurs peuvent se servir de Rainloop pour accéder à d'autres boites mail que celle fournie par YunoHost (par exemple gmail.com ou laposte.net). L'option est disponible par le bouton "compte -> ajouter un compte". +L'administrateur doit pour cela autoriser la connexion à des domaines tiers, via une liste blanche dans l'interface administration. + +### Gestion des clés PGP +Rainloop stocke les clés PGP privées dans le stockage de navigateur. Cela implique que vos clés seront perdues quand vous videz le stockage de navigateur (navigation incognito, changement d'ordinateur, ...). Ce paquet intègre donc [PGPback de chtixof](https://github.com/chtixof/pgpback_ynh) pour que vous puissiez stocker vos clés privées PGP de manière sécurisée sur le serveur. Rendez-vous à l'adresse **http://DOMAIN.TLD/rainloop/pgpback** pour stocker vos clés privées PGP sur le serveur ou les restaurer dans un nouveau navigateur. + +### Mise à jour +Pour mettre à jour Rainloop lorsqu'une nouvelle version est disponible, lancez en console locale (SSH ou autre) : +`sudo yunohost app upgrade -u https://github.com/YunoHost-Apps/rainloop_ynh rainloop` + +## Liens utiles + ++ Site web : [www.rainloop.net](https://www.rainloop.net/) ++ Documentation officielle : [www.rainloop.net/docs/configuration](https://www.rainloop.net/docs/configuration/) ++ Démonstration : [Démo](https://mail.rainloop.net/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/rainloop](https://github.com/YunoHost-Apps/rainloop_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/rainloop/issues](https://github.com/YunoHost-Apps/rainloop_ynh/issues) diff --git a/pages/02.applications/02.docs/rainloop/app_rainloop.md b/pages/02.applications/02.docs/rainloop/app_rainloop.md new file mode 100644 index 00000000..d605bda3 --- /dev/null +++ b/pages/02.applications/02.docs/rainloop/app_rainloop.md @@ -0,0 +1,52 @@ +--- +title: Rainloop +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_rainloop' +--- + + + +[](https://install-app.yunohost.org/?app=rainloop) [](https://dash.yunohost.org/appci/app/rainloop) + +### Index + +- [Configuration](#Configuration) +- [Useful links](#useful-links) + +Rainloop is a lightweight webmail. + +## Configuration + +To configure it, go to http://DOMAIN.TLD/rainloop/app/?admin + +- The default login is: admin +- The default password is: Password chosen during install +- If you lost the admin password, you can retrieve it using `sudo yunohost app setting rainloop password` + +### CardDAV +Each user can add a remote cardDAV server from their own parameters interface. + +- If you use Baïkal, the CardDAV address is: https://DOMAIN.TLD/baikal/card.php/addressbooks/USER/default/ +- If you use Nextcloud, the CardDAV address is: https://DOMAIN.TLD/nextcloud/remote.php/carddav/addressbooks/USER/contacts + +### Domains +Users can use Rainloop to access mailboxes other than the one provided by YunoHost (e.g. gmail.com or live.com). The option is available through the "account -> add an account" button. +The administrator must authorize the connection to third party domains, via a white list in the administration interface. + +### PGP Keys +Rainloop saves your PGP private keys in the browser storage. This means that you will loose your private keys if you clear your browser storage (e.g., private browsing, different computer...). This packages integrates [PGPback by chtixof](https://github.com/chtixof/pgpback_ynh) so you can store your PGP private keys on the server securely. Go to **http://DOMAIN.TLD/rainloop/pgpback** to backup your PGP keys on the server or restore them. + +### Upgrade +To upgrade the app once a new rainloop version is available, simply run in a local shell via ssh or otherwise: +`sudo yunohost app upgrade -u https://github.com/YunoHost-Apps/rainloop_ynh rainloop` + +## Useful links + ++ Website : [www.rainloop.net](https://www.rainloop.net/) ++ Official documentation : [www.rainloop.net/docs/configuration](https://www.rainloop.net/docs/configuration/) ++ Demonstration : [Demo](https://mail.rainloop.net/) ++ Application software repository : [github.com - YunoHost-Apps/rainloop](https://github.com/YunoHost-Apps/rainloop_ynh) ++ Fix a bug or an improvement by creating a ticket (issue) : [github.com - YunoHost-Apps/rainloop/issues](https://github.com/YunoHost-Apps/rainloop_ynh/issues) diff --git a/pages/02.applications/02.docs/roundcube/app_roundcube.fr.md b/pages/02.applications/02.docs/roundcube/app_roundcube.fr.md new file mode 100644 index 00000000..45aa9ba4 --- /dev/null +++ b/pages/02.applications/02.docs/roundcube/app_roundcube.fr.md @@ -0,0 +1,41 @@ +--- +title: Roundcube +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_roundcube' +--- + + + +[](https://install-app.yunohost.org/?app=roundcube) [](https://dash.yunohost.org/appci/app/roundcube) + +### Index + +- [Liens utiles](#liens-utiles) + +Roundcube est un client web de courrier électronique libre ou aussi appelé un webmail. + +### Synchronisation des contacts + +Roundcube vous propose à l'installation, via un greffon tiers, de pouvoir synchroniser vos contacts avec un serveur CardDAV. Utiliser un serveur CardDAV comme Baïkal ou l’application « Contacts » de Nextcloud, tous deux disponibles pour YunoHost, a l’avantage de permettre une gestion centralisée de vos contacts. + +De la même façon que le protocole IMAP vous permet de synchroniser vos courriels avec votre serveur mail, CardDAV vous permet d’avoir accès à vos contacts depuis une multitude de clients, dont Roundcube. Avec CardDAV, nous n’aurez donc plus besoin d’importer vos contacts dans chaque client. + +Notez que si Baïkal ou Nextcloud sont déjà installés, les carnets d'adresses qui y sont définis seront automatiquement ajoutés pour chaque utilisateur dans Roundcube. + +---- + +Si vous avez installé Nextcloud après, voici comment ajouter vos carnets d'adresses : + +* Rendez-vous dans la section « Contacts » de votre espace Nextcloud et cliquez sur l’icône représentant une roue dentée en bas à gauche. Ensuite, cliquez sur l’icône « Lien CardDAV » et copiez l’URL qui s’affiche en dessous. +* Rendez-vous ensuite dans la section CardDAV des paramètres de Roundcube et entrez « nextcloud » dans le champ « Label », collez l’URL que vous venez de copier et enfin entrez votre nom d’utilisateur et votre mot de passe. Vos contacts sont désormais synchronisés ! + +## Liens utiles + ++ Site web : [roundcube.net](https://roundcube.net/) ++ Documentation officielle : [github.com/roundcube/roundcubemail/wiki](https://github.com/roundcube/roundcubemail/wiki) ++ Démonstration : [Démo](https://demo.yunohost.org/webmail/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/roundcube](https://github.com/YunoHost-Apps/roundcube_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/roundcube/issues](https://github.com/YunoHost-Apps/roundcube_ynh/issues) diff --git a/pages/02.applications/02.docs/roundcube/app_roundcube.md b/pages/02.applications/02.docs/roundcube/app_roundcube.md new file mode 100644 index 00000000..261c1a61 --- /dev/null +++ b/pages/02.applications/02.docs/roundcube/app_roundcube.md @@ -0,0 +1,41 @@ +--- +title: Roundcube +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_roundcube' +--- + + + +[](https://install-app.yunohost.org/?app=roundcube) [](https://dash.yunohost.org/appci/app/roundcube) + +### Index + +- [Useful links](#useful-links) + +Roundcube is a web client for email messaging also called webmail. + +### Synchronize your contacts + +Roundcube offers you at the installation to synchronize your contacts with a CardDAV server, through a third party plugin. Using a CardDAV server like Baïkal or Nextcloud's "Contacts" application, both available in YunoHost, allows you to centralize and manage your contacts. + +Similarly to IMAP that allows you to synchronize your emails with your mail server, CardDAV allows you to access your contacts through multiple clients, such as Roundcube. Thanks to CardDAV, you will not have to import your contacts in each of your devices. + +Note that addressbooks defined in Baïkal or Nextcloud will be automatically added in Roundcube for each user if they are already installed. + +---- + +In case you've installed Nextcloud after, here is how to add your addressbooks: + +* Go to "Contacts" section of your Nextcloud application and click on the gear wheel icon located at the bottom left. Then, click on "CardDAV link" and copy the URL that appeared. +* Go to Roundcube's CardDAV section and type in "nextcloud" in "Label" field, paste the previously copied URL and type your username and password. Your contacts are now synchronized! + +## Useful links + ++ Website : [roundcube.net](https://roundcube.net/) ++ Official documentation : [github.com/roundcube/roundcubemail/wiki](https://github.com/roundcube/roundcubemail/wiki) ++ Demonstration : [Demo](https://demo.yunohost.org/webmail/) ++ Application software repository : [github.com - YunoHost-Apps/roundcube](https://github.com/YunoHost-Apps/roundcube_ynh) ++ Fix a bug or an improvement by creating a ticket (issue) : [github.com - YunoHost-Apps/roundcube/issues](https://github.com/YunoHost-Apps/roundcube_ynh/issues) diff --git a/pages/02.applications/02.docs/searx/app_searx.fr.md b/pages/02.applications/02.docs/searx/app_searx.fr.md new file mode 100644 index 00000000..82251b98 --- /dev/null +++ b/pages/02.applications/02.docs/searx/app_searx.fr.md @@ -0,0 +1,28 @@ +--- +title: Searx +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_searx' +--- + + + +[](https://install-app.yunohost.org/?app=searx) [](https://dash.yunohost.org/appci/app/searx) + +### Index + +- [Liens utiles](#liens-utiles) + +Searx est un métamoteur de recherche libre et décentralisé. Les requêtes effectuées ne sont pas enregistrées par Searx afin de protéger la vie privée des utilisateur·rice·s. +En tant que métamoteur, searx collecte et affiche les résultats issus de plusieurs dizaines de moteurs de recherche. Les moteurs utilisés (ou non) sont paramétrables dans les préférences. +En tant que logiciel décentralisé, searx est installé sur différentes instances (différents serveurs). En France, des associations comme Framasoft, Aquilenet ou La Quadrature du Net l'ont installé sur leurs serveurs. + +## Liens utiles + ++ Site web : [searx.me](https://searx.me/) ++ Documentation officielle : [asciimoo.github.io/searx](https://asciimoo.github.io/searx/) ++ Démonstration : [Démo](https://demo.yunohost.org/searx/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/searx](https://github.com/YunoHost-Apps/searx_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/searx/issues](https://github.com/YunoHost-Apps/searx_ynh/issues) diff --git a/pages/02.applications/02.docs/searx/app_searx.md b/pages/02.applications/02.docs/searx/app_searx.md new file mode 100644 index 00000000..108a9ebc --- /dev/null +++ b/pages/02.applications/02.docs/searx/app_searx.md @@ -0,0 +1,27 @@ +--- +title: Searx +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_searx' +--- + + + +[](https://install-app.yunohost.org/?app=searx) [](https://dash.yunohost.org/appci/app/searx) + +### Index + +- [Useful links](#useful-links) + +Searx is a free and decentralized meta-search engine. The queries made are not saved by Searx in order to protect the privacy of the user. As a metasearch engine, searx collects and displays results from dozens of search engines. The search engines used (or not) can be configured in the preferences. +As a decentralized software, searx is installed on different instances (different servers). In France, associations such as Framasoft, Aquilenet or La Quadrature du Net have installed it on their servers. + +## Useful links + ++ Website: [searx.me](https://searx.me/) ++ Official documentation: [asciimoo.github.io/searx](https://asciimoo.github.io/searx/) ++ Demonstration: [Demo](https://demo.yunohost.org/searx/) ++ Application software repository: [github.com - YunoHost-Apps/searx](https://github.com/YunoHost-Apps/searx_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/searx/issues](https://github.com/YunoHost-Apps/searx_ynh/issues) diff --git a/pages/02.applications/02.docs/shaarli/app_shaarli.fr.md b/pages/02.applications/02.docs/shaarli/app_shaarli.fr.md new file mode 100644 index 00000000..b272dffa --- /dev/null +++ b/pages/02.applications/02.docs/shaarli/app_shaarli.fr.md @@ -0,0 +1,24 @@ +--- +title: Shaarli +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_shaarli' +--- + +## Présentation + +Shaarli est un clone libre de feu del.icio.us : il s'agit d'une application légère permettant d'archiver et de partager des marque-pages, étiquetés à l'aide de tags. Chaque marque-page peut être "public" ou "privé", et peut recevoir une note descriptive. + +Le moteur de recherche intégré à l'application interroge les tags, le titre des pages archivées, ainsi que le contenu de l'éventuelle note associée. Il est ainsi très aisé de retrouver une marque-page, même plusieurs années après son enregistrement. + +L'enregistrement d'une page peut s'effectuer de plusieurs façons : grâce à un bookmarklet, depuis l'application elle-même, ou depuis une application Android. + +Shaarli est intéressant pour toutes celles et tous ceux qui souhaitent conserver la trace de pages Web et y accéder depuis partout, et ce sans surcharger les marque-pages (ou "favoris") de leur navigateur. + +## Liens utiles + +- [Page officielle](https://sebsauvage.net/wiki/doku.php?id=php:shaarli) de Shaarli +- [Application Shaarlier](https://f-droid.org/fr/packages/com.dimtion.shaarlier/) sur Android +- [Fil de discussion](https://forum.yunohost.org/t/shaarli-version-0-10-4/2200) concernant Shaarli sur le forum diff --git a/pages/02.applications/02.docs/shaarli/app_shaarli.md b/pages/02.applications/02.docs/shaarli/app_shaarli.md new file mode 100644 index 00000000..cdf6c315 --- /dev/null +++ b/pages/02.applications/02.docs/shaarli/app_shaarli.md @@ -0,0 +1,10 @@ +--- +title: Shaarli +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_shaarli' +--- + +(This page only exists in french for now) diff --git a/pages/02.applications/02.docs/shellinabox/app_shellinabox.fr.md b/pages/02.applications/02.docs/shellinabox/app_shellinabox.fr.md new file mode 100644 index 00000000..3b0a4311 --- /dev/null +++ b/pages/02.applications/02.docs/shellinabox/app_shellinabox.fr.md @@ -0,0 +1,25 @@ +--- +title: Shellinabox +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_shellinabox' +--- + + + +[](https://install-app.yunohost.org/?app=shellinabox) [](https://dash.yunohost.org/appci/app/shellinabox) + +### Index + +- [Liens utiles](#liens-utiles) + +Shellinabox met en œuvre un serveur web qui peut saisir des lignes de commande arbitraires vers un émulateur de terminal. Cet émulateur est accessible à tout navigateur Web compatible JavaScript et CSS et ne nécessite pas de plugins supplémentaires à votre navigateur Internet. + +## Liens utiles + ++ Site web : [github.com/shellinabox/shellinabox](https://github.com/shellinabox/shellinabox) ++ Documentation officielle : [github.com/shellinabox/shellinabox/wiki/shellinaboxd_man](https://github.com/shellinabox/shellinabox/wiki/shellinaboxd_man) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/shellinabox](https://github.com/YunoHost-Apps/shellinabox_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/shellinabox/issues](https://github.com/YunoHost-Apps/shellinabox_ynh/issues) diff --git a/pages/02.applications/02.docs/shellinabox/app_shellinabox.md b/pages/02.applications/02.docs/shellinabox/app_shellinabox.md new file mode 100644 index 00000000..70a09274 --- /dev/null +++ b/pages/02.applications/02.docs/shellinabox/app_shellinabox.md @@ -0,0 +1,25 @@ +--- +title: Shellinabox +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_shellinabox' +--- + + + +[](https://install-app.yunohost.org/?app=shellinabox) [](https://dash.yunohost.org/appci/app/shellinabox) + +### Index + +- [Useful links](#useful-links) + +Shellinabox implements a web server that can export arbitrary command line tools to a web based terminal emulator. This emulator is accessible to any JavaScript and CSS enabled web browser and does not require any additional browser plugins. + +## Useful links + ++ Website: [github.com/shellinabox/shellinabox](https://github.com/shellinabox/shellinabox) ++ Official documentation: [github.com/shellinabox/shellinabox/wiki/shellinaboxd_man](https://github.com/shellinabox/shellinabox/wiki/shellinaboxd_man) ++ Application software repository: [github.com - YunoHost-Apps/shellinabox](https://github.com/YunoHost-Apps/shellinabox_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/shellinabox/issues](https://github.com/YunoHost-Apps/shellinabox_ynh/issues) diff --git a/pages/02.applications/02.docs/simple-torrent/app_simple-torrent.fr.md b/pages/02.applications/02.docs/simple-torrent/app_simple-torrent.fr.md new file mode 100644 index 00000000..de351cec --- /dev/null +++ b/pages/02.applications/02.docs/simple-torrent/app_simple-torrent.fr.md @@ -0,0 +1,24 @@ +--- +title: Simple Torrent +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_simple-torrent' +--- + + + +[](https://install-app.yunohost.org/?app=simple-torrent) [](https://dash.yunohost.org/appci/app/simple-torrent) + +### Index + +- [Liens utiles](#liens-utiles) + +Simple Torrent est un client torrent distant auto-hébergé, écrit en Go (golang). Démarrez des torrents à distance, téléchargez des ensembles de fichiers sur le disque local du serveur, qui sont ensuite récupérables ou diffusables via HTTP. + +## Liens utiles + + + Documentation officielle : [wiki](https://github.com/boypt/simple-torrent/wiki) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/simple-torrent](https://github.com/YunoHost-Apps/simple-torrent_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/simple-torrent/issues](https://github.com/YunoHost-Apps/simple-torrent_ynh/issues) diff --git a/pages/02.applications/02.docs/simple-torrent/app_simple-torrent.md b/pages/02.applications/02.docs/simple-torrent/app_simple-torrent.md new file mode 100644 index 00000000..f9abb112 --- /dev/null +++ b/pages/02.applications/02.docs/simple-torrent/app_simple-torrent.md @@ -0,0 +1,24 @@ +--- +title: Simple Torrent +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_simple-torrent' +--- + + + +[](https://install-app.yunohost.org/?app=simple-torrent) [](https://dash.yunohost.org/appci/app/simple-torrent) + +### Index + +- [Useful links](#useful-links) + +Simple Torrent is a a self-hosted remote torrent client, written in Go (golang). Started torrents remotely, download sets of files on the local disk of the server, which are then retrievable or streamable via HTTP. + +## Useful links + ++ Official documentation: [wiki](https://github.com/boypt/simple-torrent/wiki) ++ Application software repository: [github.com - YunoHost-Apps/simple-torrent](https://github.com/YunoHost-Apps/simple-torrent_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/simple-torrent/issues](https://github.com/YunoHost-Apps/simple-torrent_ynh/issues) diff --git a/pages/02.applications/02.docs/slingcode/app_slingcode.fr.md b/pages/02.applications/02.docs/slingcode/app_slingcode.fr.md new file mode 100644 index 00000000..f6ddcd28 --- /dev/null +++ b/pages/02.applications/02.docs/slingcode/app_slingcode.fr.md @@ -0,0 +1,24 @@ +--- +title: Slingcode +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_slingcode' +--- + + + +[](https://install-app.yunohost.org/?app=slingcode) [](https://dash.yunohost.org/appci/app/slingcode) + +### Index + +- [Liens utiles](#liens-utiles) + +Slingcode est un éditeur de code contenu dans un unique fichier HTML. Il n'a pas de composant serveur, ce qui signifie que toutes vos données sont stockées dans le cache de votre navigateur. Cependant, il est toujours possible de créer des applications Web, de les exécuter, de les exporter et même de les partager en peer-to-peer. + +## Liens utiles + ++ Site web : [slingcode.net (en)](https://slingcode.net/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/slingcode](https://github.com/chr15m/slingcode) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/slingcode/issues](https://github.com/YunoHost-Apps/slingcode_ynh/issues) diff --git a/pages/02.applications/02.docs/slingcode/app_slingcode.md b/pages/02.applications/02.docs/slingcode/app_slingcode.md new file mode 100644 index 00000000..f7167e86 --- /dev/null +++ b/pages/02.applications/02.docs/slingcode/app_slingcode.md @@ -0,0 +1,24 @@ +--- +title: Slingcode +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_slingcode' +--- + + + +[](https://install-app.yunohost.org/?app=slingcode) [](https://dash.yunohost.org/appci/app/slingcode) + +### Index + +- [Useful links](#useful-links) + +Slingcode is a code editor contained in a single HTML file. Therefore, it has no server component, so all of your data is stored in your browser's cache. However, it is still possible to make web apps, run them, export them, and even share them using peer-to-peer. + +## Useful links + ++ Website: [slingcode.net](https://slingcode.net/) ++ Application software repository: [github.com - YunoHost-Apps/slingcode](https://github.com/chr15m/slingcode) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/slingcode/issues](https://github.com/YunoHost-Apps/slingcode_ynh/issues) diff --git a/pages/02.applications/02.docs/sogo/app_sogo.fr.md b/pages/02.applications/02.docs/sogo/app_sogo.fr.md new file mode 100644 index 00000000..ee7de8c9 --- /dev/null +++ b/pages/02.applications/02.docs/sogo/app_sogo.fr.md @@ -0,0 +1,23 @@ +--- +title: SOGo +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_sogo' +--- + + + +[](https://install-app.yunohost.org/?app=sogo) [](https://dash.yunohost.org/appci/app/sogo) + +### Index + +- [Liens utiles](#liens-utiles) + +SOGo est un service de webmail pour votre serveur email, c'est une alternative à [RoundCube](/app_roundcube). Il permet aussi la gestion des agendas et contacts présents sur le serveur. + +## Quelques liens utiles + + + Site officiel de SOGo : [sogo.nu](https://sogo.nu) + + Dépot de l'application pour YunoHost : [github.com/YunoHost-Apps/sogo_ynh](https://github.com/YunoHost-Apps/sogo_ynh) diff --git a/pages/02.applications/02.docs/sogo/app_sogo.md b/pages/02.applications/02.docs/sogo/app_sogo.md new file mode 100644 index 00000000..441920f7 --- /dev/null +++ b/pages/02.applications/02.docs/sogo/app_sogo.md @@ -0,0 +1,23 @@ +--- +title: SOGo +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_sogo' +--- + + + +[](https://install-app.yunohost.org/?app=sogo) [](https://dash.yunohost.org/appci/app/sogo) + +### Index + +- [Useful links](#useful-links) + +SOGo is an opensource groupware solution which has Webmail, a global address book, calender and contacts which can be synced via CalDAV or CardDAV. + +## Useful links + ++ Application software repository: [sogo.nu](https://sogo.nu) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com/YunoHost-Apps/sogo_ynh](https://github.com/YunoHost-Apps/sogo_ynh) diff --git a/app_spip_fr.md b/pages/02.applications/02.docs/spip/app_spip.fr.md similarity index 87% rename from app_spip_fr.md rename to pages/02.applications/02.docs/spip/app_spip.fr.md index 78310855..b9470359 100644 --- a/app_spip_fr.md +++ b/pages/02.applications/02.docs/spip/app_spip.fr.md @@ -1,4 +1,11 @@ -# SPIP for YunoHost +--- +title: SPIP +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_spip' +--- ### SPIP c'est quoi ? @@ -6,7 +13,7 @@ SPIP est un système de publication pour l’Internet qui s’attache particuli Source : [spip.net](https://www.spip.net/fr_rubrique91.html) -### Fonctionnalité de l'application pour Yunohost +### Fonctionnalité de l'application pour YunoHost * Installation de la base sans passer par le système d'installation * Support multilingue diff --git a/app_spip.md b/pages/02.applications/02.docs/spip/app_spip.md similarity index 87% rename from app_spip.md rename to pages/02.applications/02.docs/spip/app_spip.md index 880b41e6..9fd0ecec 100644 --- a/app_spip.md +++ b/pages/02.applications/02.docs/spip/app_spip.md @@ -1,4 +1,11 @@ -# SPIP for YunoHost +--- +title: SPIP +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_spip' +--- #### SPIP is what? @@ -6,7 +13,7 @@ SPIP is an Internet publishing system that focuses on collective functioning, mu Source:[spip.net](https://www.spip.net/fr_rubrique91.html_rubrique91.html) -#### Application functionality for Yunohost +#### Application functionality for YunoHost * Installation of the base without going through the installation system * Multilingual support diff --git a/pages/02.applications/02.docs/strut/app_strut.fr.md b/pages/02.applications/02.docs/strut/app_strut.fr.md new file mode 100644 index 00000000..6d048d14 --- /dev/null +++ b/pages/02.applications/02.docs/strut/app_strut.fr.md @@ -0,0 +1,25 @@ +--- +title: Strut +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_strut' +--- + + + +[](https://install-app.yunohost.org/?app=strut) [](https://dash.yunohost.org/appci/app/strut) + +### Index + +- [Liens utiles](#liens-utiles) + +Strut est un logiciel de création en ligne de diaporamas. Il permet de créer des diapositives simples en incluant textes, images, formes, sites web ou vidéos, ainsi que la disposition des diapos. Il utilise la librairie Impress.js et vous permet de sauvegarder votre projet en local ou de l'exporter en ZIP contenant les fichiers sources et le HTML. + +## Liens utiles + ++ Site web : [strut.io](http://strut.io) ++ Démonstration: [Démo](http://strut.io/dist/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/strut](https://github.com/YunoHost-Apps/strut_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/strut/issues](https://github.com/YunoHost-Apps/strut_ynh/issues) diff --git a/pages/02.applications/02.docs/strut/app_strut.md b/pages/02.applications/02.docs/strut/app_strut.md new file mode 100644 index 00000000..bd8a08c3 --- /dev/null +++ b/pages/02.applications/02.docs/strut/app_strut.md @@ -0,0 +1,26 @@ +--- +title: Strut +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_strut' +--- + + + +[](https://install-app.yunohost.org/?app=strut) [](https://dash.yunohost.org/appci/app/strut) + +### Index + +- [Useful links](#useful-links) + +Strut is an online slideshow creation software. It allows you to create simple slides by including text, images, shapes, websites or videos, as well as the layout of the slides. It uses the Impress.js library and +allows you to save your project locally or export it as a ZIP file containing the source files and HTML. + +## Useful links + ++ Website: [strut.io](http://strut.io) ++ Demonstration: [Demo](http://strut.io/dist/) ++ Application software repository: [github.com - YunoHost-Apps/strut](https://github.com/YunoHost-Apps/strut_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/strut/issues](https://github.com/YunoHost-Apps/strut_ynh/issues) diff --git a/app_transmission_fr.md b/pages/02.applications/02.docs/transmission/app_transmission.fr.md similarity index 90% rename from app_transmission_fr.md rename to pages/02.applications/02.docs/transmission/app_transmission.fr.md index df00ad3d..936d0a35 100644 --- a/app_transmission_fr.md +++ b/pages/02.applications/02.docs/transmission/app_transmission.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/transmission.png">Transmission +--- +title: Transmission +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_transmission' +--- + + Transmission ### C’est quoi Transmission ? Transmission est un logiciel de téléchargement et de partage de fichiers basé sur le protocole BitTorrent. @@ -39,4 +48,4 @@ Pour plus de détails sur le transfert de fichier avec *scp* voir ici : http:// Si vous rencontrez des problèmes de droits `Permission denied` après l’ajout de fichiers à seeder, changez l’utilisateur qui possède les droits sur ces fichiers : ```bash chown -R debian-transmission: /home/yunohost.transmission/completed/* -``` \ No newline at end of file +``` diff --git a/app_transmission.md b/pages/02.applications/02.docs/transmission/app_transmission.md similarity index 75% rename from app_transmission.md rename to pages/02.applications/02.docs/transmission/app_transmission.md index 854a2bda..6e1ed3a9 100644 --- a/app_transmission.md +++ b/pages/02.applications/02.docs/transmission/app_transmission.md @@ -1,6 +1,15 @@ -# <img src="/images/transmission.png">Transmission +--- +title: Transmission +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_transmission' +--- -### What is Transmission? + + +### What is Transmission? Transmission is a share software based on BitTorrent protocol. * [Transmission web site](http://transmissionbt.com/) @@ -30,10 +39,10 @@ scp (-r) /your/file/ root@your-domain.org:/home/yunohost.transmission/completed ``` ##### How to download a complete folder? -Once connected to your server, using [SSH](ssh), move to the download folder and zip it : +Once connected to your server, using [SSH](/ssh), move to the download folder and ZIP it: ```bash cd /home/yunohost.transmission/completed zip -r your_archive.zip [dossier] ``` -More informations about file transfer using *scp*: http://doc.ubuntu-fr.org/ssh#transfert_-_copie_de_fichiers (french, need english documentation) +More informations about file transfer using *scp*: http://doc.ubuntu-fr.org/ssh#transfert_-_copie_de_fichiers (French, need English documentation) diff --git a/pages/02.applications/02.docs/ttrss/app_ttrss.fr.md b/pages/02.applications/02.docs/ttrss/app_ttrss.fr.md new file mode 100644 index 00000000..0808cbb9 --- /dev/null +++ b/pages/02.applications/02.docs/ttrss/app_ttrss.fr.md @@ -0,0 +1,40 @@ +--- +title: Tiny Tiny RSS +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_ttrss' +--- + + + +[](https://install-app.yunohost.org/?app=ttrss) [](https://dash.yunohost.org/appci/app/ttrss) + +### Index + +- [Liens utiles](#liens-utiles) + +Tiny Tiny RSS est un lecteur de flux d’actualité utilisant les protocoles RSS et Atom. + +### Exportation/importation des flux + +Il est possible de faire une sauvegarde de ces flux d’actualité en format opml. + +Pour cela, il faut aller dans Actions -> Configuration -> onglet flux -> chapitre OPML -> Exporter/Importer en OPML. + +### Client Android + +Il est possible d’utiliser le client Android ttrss-reader pour consulter ces flux : **[ttrss-reader](https://f-droid.org/packages/org.ttrssreader/)** + +Sur l’interface web, dans Actions -> Configuration, cochez « Activer l’accès par API » +puis dans ttrss-reader sur Android, l’adresse du serveur Tiny Tiny RSS : https://votredomaine.org/ttrss, nom d’utilisateur, mot de passe. (pas besoin d’utiliser l’authentification HTTP) + +**Note** : vous pouvez avoir besoin de désinstaller, puis réinstaller entièrement l'application Tiny Tiny RSS via l’administration de YunoHost pour que la connexion puisse se faire. + +## Liens utiles + + + Site web : [git.tt-rss.org/git/tt-rss/wiki](https://git.tt-rss.org/git/tt-rss/wiki) + + Site de démonstration (login : `demo`, `demo`): [srv.tt-rss.org/tt-rss/](https://srv.tt-rss.org/tt-rss/) + + Dépôt logiciel de Tiny Tiny RSS : [github.com - YunoHost-Apps/ttrss](https://github.com/YunoHost-Apps/ttrss_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/ttrss/issues](https://github.com/YunoHost-Apps/ttrss_ynh/issues) diff --git a/pages/02.applications/02.docs/ttrss/app_ttrss.md b/pages/02.applications/02.docs/ttrss/app_ttrss.md new file mode 100644 index 00000000..61c7c0c8 --- /dev/null +++ b/pages/02.applications/02.docs/ttrss/app_ttrss.md @@ -0,0 +1,38 @@ +--- +title: Tiny Tiny RSS +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_ttrss' +--- + + + +[](https://install-app.yunohost.org/?app=ttrss) [](https://dash.yunohost.org/appci/app/ttrss) + +### Index + +- [Liens utiles](#liens-utiles) + +Tiny Tiny RSS is a news feed reader using RSS and Atom protocols. + +### Exporting/importing feeds +Tiny Tiny RSS allows you to save your feeds in opml format. +In order to do so, go to Actions -> Configuration -> feed tab -> OPML section -> Export/Import OPML. + +### Android Client + +You can read your feeds on Android using ttrss-reader application: **[ttrss-reader](https://f-droid.org/packages/org.ttrssreader/)** + +To use it, you need to go to Actions -> Configuration, in Tiny Tiny RSS web interface and select "Activate API". +Then, in your android ttrss-reader, fill the Tiny Tiny RSS server adress: https://yourdomain.org/ttrss, username, password (no need to use HTTP authentification). + +**Note**: you may need to uninstall and reinstall the Tiny Tiny RSS application through the YunoHost admin panel in order to be able to connect. + +## Useful links + + + Website: [git.tt-rss.org/git/tt-rss/wiki](https://git.tt-rss.org/git/tt-rss/wiki) + + Official documentation: (login as `demo`, `demo`): [srv.tt-rss.org/tt-rss/](https://srv.tt-rss.org/tt-rss/) + + Application software repository: [github.com - YunoHost-Apps/ttrss](https://github.com/YunoHost-Apps/ttrss_ynh) + + Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/ttrss/issues](https://github.com/YunoHost-Apps/ttrss_ynh/issues) diff --git a/pages/02.applications/02.docs/unattended_upgrades/app_unattended_upgrades.fr.md b/pages/02.applications/02.docs/unattended_upgrades/app_unattended_upgrades.fr.md new file mode 100644 index 00000000..063a4231 --- /dev/null +++ b/pages/02.applications/02.docs/unattended_upgrades/app_unattended_upgrades.fr.md @@ -0,0 +1,25 @@ +--- +title: Unattented upgrades +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_unattended_upgrades' +--- + + + +[](https://install-app.yunohost.org/?app=unattended_upgrades) [](https://dash.yunohost.org/appci/app/unattended_upgrades) + +### Index + +- [Liens utiles](#liens-utiles) + +Unattended_upgrades est un outil qui permet de télécharger et installer les mises à jour de sécurité automatiquement et sans surveillance, en prenant soin de n'installer que les paquets provenant de la source APT configurée, et en vérifiant les invites dpkg concernant les modifications du fichier de configuration. +Apticron est un simple script qui envoie des courriels sur les mises à jour de paquets en attente comme les mises à jour de sécurité, en gérant correctement les paquets en attente. + +## Liens utiles + ++ Documentation officielle : [wiki.debian.org/UnattendedUpgrades](https://wiki.debian.org/UnattendedUpgrades) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/unattended_upgrades](https://github.com/YunoHost-Apps/unattended_upgrades_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/unattended_upgrades/issues](https://github.com/YunoHost-Apps/unattended_upgrades_ynh/issues) diff --git a/pages/02.applications/02.docs/unattended_upgrades/app_unattended_upgrades.md b/pages/02.applications/02.docs/unattended_upgrades/app_unattended_upgrades.md new file mode 100644 index 00000000..cfb5bbc0 --- /dev/null +++ b/pages/02.applications/02.docs/unattended_upgrades/app_unattended_upgrades.md @@ -0,0 +1,25 @@ +--- +title: Unattended upgrades +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_unattended_upgrades' +--- + + + +[](https://install-app.yunohost.org/?app=unattended_upgrades) [](https://dash.yunohost.org/appci/app/unattended_upgrades) + +### Index + +- [Useful links](#useful-links) + +Unattended-upgrades can download and install security upgrades automatically and unattended, taking care to only install packages from the configured APT source, and checking for dpkg prompts about configuration file changes. +Apticron is a simple script which sends emails about pending package updates such as security updates, properly handling packages on hold both by dselect and aptitude. + +## Useful links + ++ Official documentation: [wiki.debian.org/UnattendedUpgrades](https://wiki.debian.org/UnattendedUpgrades) ++ Application software repository: [github.com - YunoHost-Apps/unattended_upgrades](https://github.com/YunoHost-Apps/unattended_upgrades_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/unattended_upgrades/issues](https://github.com/YunoHost-Apps/unattended_upgrades_ynh/issues) diff --git a/pages/02.applications/02.docs/wallabag2/app_wallabag2.fr.md b/pages/02.applications/02.docs/wallabag2/app_wallabag2.fr.md new file mode 100644 index 00000000..8c4e7544 --- /dev/null +++ b/pages/02.applications/02.docs/wallabag2/app_wallabag2.fr.md @@ -0,0 +1,41 @@ +--- +title: Wallabag2 +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_wallabag2' +--- + + + +[](https://install-app.yunohost.org/?app=wallabag2) [](https://dash.yunohost.org/appci/app/wallabag2) + +### Index + +- [Liens utiles](#liens-utiles) + +Wallabag est une application de lecture différée : elle permet simplement d’archiver une page web en ne conservant que le contenu. Les éléments superflus (menus, publicités, etc.) sont supprimés. Sont disponibles : une interface web, des add-ons pour navigateurs (Firefox / Chrome / Opera), des applications pour mobile (Android / iOS / Windows Phone) et même sur liseuse (PocketBook / Kobo). + +### Fonctionnalités + +En plus des fonctionnalités principales de Wallabag, ce paquet propose également : + +* Une intégration avec le système de gestion des utilisateurs et le SSO de YunoHost - e.g. un bouton de déconnexion +* De permettre à un utilisateur d'être administrateur (réglage lors de l'installation) +* Un import asynchrone utilisant Redis (à activer dans les *Paramètres Internes*). L'import via RabbitMQ n'est pas (encore ?) supporté. + +## Liens utiles + ++ Site web : [www.wallabag.org](https://www.wallabag.org/) ++ Documentation officielle : [doc.wallabag.org](https://doc.wallabag.org/) ++ Démonstration : [Démo](https://vimeo.com/video/167435064) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/wallabag2](https://github.com/YunoHost-Apps/wallabag2_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/wallabag2/issues](https://github.com/YunoHost-Apps/wallabag2_ynh/issues) + +---- + +### Mettre à niveau depuis la v1.x + +La mise à niveau depuis le paquet YunoHost de Wallabag v1 demande une opération manuelle, c'est pourquoi un nouveau paquet est fourni. Pour le processus de migration, merci de vous référer à [la documentation officielle +de Wallabag](https://doc.wallabag.org/fr/user/import/wallabagv1.html). diff --git a/pages/02.applications/02.docs/wallabag2/app_wallabag2.md b/pages/02.applications/02.docs/wallabag2/app_wallabag2.md new file mode 100644 index 00000000..d919d84b --- /dev/null +++ b/pages/02.applications/02.docs/wallabag2/app_wallabag2.md @@ -0,0 +1,42 @@ +--- +title: Wallabag2 +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_wallabag2' +--- + + + +[](https://install-app.yunohost.org/?app=wallabag2) [](https://dash.yunohost.org/appci/app/wallabag2) + +### Index + +- [Useful links](#useful-links) + +Wallabag is a self hostable Read-It-Later application allowing you to not miss any content anymore. Click, save, read it when you can. +It extracts content so that you can read it when you have time. + +### Features + +In addition to Wallabag core features, the following are made available with this package: + + * Integrate with YunoHost users and SSO - i.e. logout button + * Allow one user to be the administrator (set at the installation) + * Asynchronous import using Redis (need to be enabled in the *Internal Settings*). RabbitMQ import not supported (yet ?) + +## Useful links + ++ Website : [www.wallabag.org](https://www.wallabag.org/) ++ Official documentation : [doc.wallabag.org](https://doc.wallabag.org/) ++ Demonstration : [Demo](https://vimeo.com/video/167435064) ++ Application software repository : [github.com - YunoHost-Apps/wallabag2](https://github.com/YunoHost-Apps/wallabag2_ynh) ++ Fix a bug or an improvement by creating a ticket (issue) : [github.com - YunoHost-Apps/wallabag2/issues](https://github.com/YunoHost-Apps/wallabag2_ynh/issues) + +---- + +### Upgrade from v1.x + +No automatic upgrade process is available. You need a manual (but simple) migration from Wallabag v1. +Please take a look at the [official documentation](https://doc.wallabag.org/en/user/import/wallabagv1.html). diff --git a/pages/02.applications/02.docs/weblate/app_weblate.fr.md b/pages/02.applications/02.docs/weblate/app_weblate.fr.md new file mode 100644 index 00000000..b150ac0a --- /dev/null +++ b/pages/02.applications/02.docs/weblate/app_weblate.fr.md @@ -0,0 +1,29 @@ +--- +title: Weblate +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_weblate' +--- + + + +[](https://install-app.yunohost.org/?app=weblate) [](https://dash.yunohost.org/appci/app/weblate) + +### Index + +- [Liens utiles](#liens-utiles) + +Weblate est un outil de traduction en mode web fortement lié aux systèmes de contrôle de versions. A travers une interface utilisateur claire et simple, Weblate permet la propagation de traductions entre sous-projets, peut vérifier la qualité des traductions et est automatiquement lié aux fichiers sources. +Weblate fonctionne très bien avec un serveur GitLab, GitHub, Bitbucket. Il est possible d'importer les traductions déjà existantes d'un projet, de permettre à tout le monde de contribuer à la traduction d'un projet via son interface Web, et ensuite pousser les traductions sur le repository. +Il y a un système de revue, de suggestions, de commentaires sur une traduction. +On peut installer une authentification tiers, par exemple on peut se connecter avec son compte GitHub. Notre compte permet ensuite de garder un historique. + +## Liens utiles + ++ Site web : [weblate.org](https://weblate.org/) ++ Documentation officielle : [docs.weblate.org](https://docs.weblate.org/) ++ Démonstration: [Démo](https://docs.weblate.org/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/weblate](https://github.com/YunoHost-Apps/weblate_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/weblate/issues](https://github.com/YunoHost-Apps/weblate_ynh/issues) diff --git a/pages/02.applications/02.docs/weblate/app_weblate.md b/pages/02.applications/02.docs/weblate/app_weblate.md new file mode 100644 index 00000000..0b1d993e --- /dev/null +++ b/pages/02.applications/02.docs/weblate/app_weblate.md @@ -0,0 +1,31 @@ +--- +title: Weblate +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_weblate' +--- + + + +[](https://install-app.yunohost.org/?app=weblate) [](https://dash.yunohost.org/appci/app/weblate) + +### Index + +- [Useful links](#useful-links) + +Weblate is a web-based translation tool strongly linked to version control systems. Through a clear and simple user interface, Weblate allows the propagation of translations between sub-projects, can check the +quality of the translations and is automatically linked to the source files. +Weblate works very well with a GitLab, GitHub, Bitbucket server. It is possible to import already existing translations of a project, allowing everyone to contribute to the translation of a project via its web interface, +and then push the translations to the repository. +There is a system for reviewing, suggesting, commenting on a translation. +You can install a third party authentication, for example you can log in with your GitHub account. Our account then allows us to keep a history. + +## Useful links + ++ Website: [weblate.org](https://weblate.org/) ++ Official documentation: [docs.weblate.org](https://docs.weblate.org/) ++ Demonstration: [Demo](https://docs.weblate.org/) ++ Application software repository: [github.com - YunoHost-Apps/weblate](https://github.com/YunoHost-Apps/weblate_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/weblate/issues](https://github.com/YunoHost-Apps/weblate_ynh/issues) diff --git a/app_webtrees_fr.md b/pages/02.applications/02.docs/webtrees/app_webtrees.fr.md similarity index 75% rename from app_webtrees_fr.md rename to pages/02.applications/02.docs/webtrees/app_webtrees.fr.md index ca030140..fca91947 100644 --- a/app_webtrees_fr.md +++ b/pages/02.applications/02.docs/webtrees/app_webtrees.fr.md @@ -1,7 +1,14 @@ -#Webtrees +--- +title: Webtrees +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_webtrees' +--- webtrees est le chef de file sur le Web des logiciels de généalogie conversationnels en ligne. C'est un logiciel Open Source et il coûte zéro $ - oui, totalement GRATUIT ! Vous n'avez besoin que d'un serveur web avec PHP et MySQL. -Il exploite les fichiers de généalogie au format GEDCOM standard, par conséquent, il est compatible avec toutes les applications de bureau majeures; il vise à être efficient et efficace en utilisant la bonne combinaison d'outils tiers, des techniques de conception et des normes d'ouverture standards. \ No newline at end of file +Il exploite les fichiers de généalogie au format GEDCOM standard, par conséquent, il est compatible avec toutes les applications de bureau majeures; il vise à être efficient et efficace en utilisant la bonne combinaison d'outils tiers, des techniques de conception et des normes d'ouverture standards. diff --git a/app_webtrees.md b/pages/02.applications/02.docs/webtrees/app_webtrees.md similarity index 83% rename from app_webtrees.md rename to pages/02.applications/02.docs/webtrees/app_webtrees.md index d3c9e776..603a3d74 100644 --- a/app_webtrees.md +++ b/pages/02.applications/02.docs/webtrees/app_webtrees.md @@ -1,8 +1,15 @@ -#Webtrees +--- +title: Webtrees +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_webtrees' +--- webtrees is the web's leading online collaborative genealogy application. * It works from standard GEDCOM files, and is therefore compatible with every major desktop application. * It aims to to be efficient and effective by using the right combination of third-party tools, design techniques and open standards. -webtrees allows you to view and edit your genealogy on your website. It has full editing capabilities, full privacy functions, and supports imedia such as photos and document images. As an online program, it fosters extended family participation and good ancestral recording habits, as it simplifies the process of collaborating with others working on your family lines. Your latest information is always on your web site and available for others to see, defined by viewing rules you set. \ No newline at end of file +webtrees allows you to view and edit your genealogy on your website. It has full editing capabilities, full privacy functions, and supports imedia such as photos and document images. As an online program, it fosters extended family participation and good ancestral recording habits, as it simplifies the process of collaborating with others working on your family lines. Your latest information is always on your web site and available for others to see, defined by viewing rules you set. diff --git a/pages/02.applications/02.docs/wekan/app_wekan.fr.md b/pages/02.applications/02.docs/wekan/app_wekan.fr.md new file mode 100644 index 00000000..34348259 --- /dev/null +++ b/pages/02.applications/02.docs/wekan/app_wekan.fr.md @@ -0,0 +1,26 @@ +--- +title: Wekan +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_wekan' +--- + + + +[](https://install-app.yunohost.org/?app=wekan) [](https://dash.yunohost.org/appci/app/wekan) + +### Index + +- [Liens utiles](#liens-utiles) + +Wekan est un gestionnaire de tâches collaboratif en ligne. Il facilite la gestion de projets par l'élaboration de todo listes. +Wekan propose une grande diversité de fonctionnalités, ce qui en fait un service très complet et adapté à des projets complexes. Si vous cherchez un outil kanban plus simple, vous pouvez utiliser [Kanboard](/app_kanboard). + +## Liens utiles + ++ Site web : [wekan.github.io](https://wekan.github.io/) ++ Documentation officielle : [github.com/wekan/wekan/wiki](https://github.com/wekan/wekan/wiki) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/wekan](https://github.com/YunoHost-Apps/wekan_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/wekan/issues](https://github.com/YunoHost-Apps/wekan_ynh/issues) diff --git a/pages/02.applications/02.docs/wekan/app_wekan.md b/pages/02.applications/02.docs/wekan/app_wekan.md new file mode 100644 index 00000000..b0d7a4e8 --- /dev/null +++ b/pages/02.applications/02.docs/wekan/app_wekan.md @@ -0,0 +1,26 @@ +--- +title: Wekan +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_wekan' +--- + + + +[](https://install-app.yunohost.org/?app=wekan) [](https://dash.yunohost.org/appci/app/wekan) + +### Index + +- [Useful links](#useful-links) + +Wekan is an online collaborative task manager. It facilitates the management of projects through the development of todo lists. +Wekan offers a wide range of features, making it a very complete service adapted to complex projects. If you are looking for a simpler kanban tool, you can use [Kanboard](/app_kanboard) + +## Useful links + ++ Website: [wekan.github.io](https://wekan.github.io/) ++ Official documentation: [github.com/wekan/wekan/wiki](https://github.com/wekan/wekan/wiki) ++ Application software repository: [github.com - YunoHost-Apps/wekan](https://github.com/YunoHost-Apps/wekan_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/wekan/issues](https://github.com/YunoHost-Apps/wekan_ynh/issues) diff --git a/pages/02.applications/02.docs/wikijs/app_wikijs.fr.md b/pages/02.applications/02.docs/wikijs/app_wikijs.fr.md new file mode 100644 index 00000000..828eb0bf --- /dev/null +++ b/pages/02.applications/02.docs/wikijs/app_wikijs.fr.md @@ -0,0 +1,30 @@ +--- +title: Wiki.js +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_wikijs' +--- + + + +[](https://install-app.yunohost.org/?app=wikijs) [](https://dash.yunohost.org/appci/app/wikijs) + +### Index + +- [Configuration](#configuration) +- [Liens utiles](#liens-utiles) + +Wiki.js est un wiki libre, moderne et rapide basé sur Node.js, Git et Markdown. + +## Configuration + +Wiki.js nécessite un domaine racine dédié, par exemple `wikijs.domaine.tld`. + +## Liens utiles + + + Site web : [wiki.js.org (en)](https://wiki.js.org/) + + Documentation officielle : [docs.requarks.io (en)](https://docs.requarks.io/) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/wikijs](https://github.com/YunoHost-Apps/wikijs_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/wikijs/issues](https://github.com/YunoHost-Apps/wikijs_ynh/issues) diff --git a/pages/02.applications/02.docs/wikijs/app_wikijs.md b/pages/02.applications/02.docs/wikijs/app_wikijs.md new file mode 100644 index 00000000..66d32837 --- /dev/null +++ b/pages/02.applications/02.docs/wikijs/app_wikijs.md @@ -0,0 +1,30 @@ +--- +title: Wiki.js +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_wikijs' +--- + + + +[](https://install-app.yunohost.org/?app=wikijs) [](https://dash.yunohost.org/appci/app/wikijs) + +### Index + +- [Configuration](#configuration) +- [Useful links](#useful-links) + +Wiki.js is a free, modern and fast wiki based on Node.js, Git and Markdown. + +## Configuration + +Wiki.js requires a dedicated root domain, e.g. `wikijs.domain.tld` + +## Useful links + ++ Website: [wiki.js.org](https://wiki.js.org/) ++ Official documentation: [docs.requarks.io](https://docs.requarks.io/) ++ Application software repository: [github.com - YunoHost-Apps/wikijs](https://github.com/YunoHost-Apps/wikijs_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/wikijs/issues](https://github.com/YunoHost-Apps/wikijs_ynh/issues) diff --git a/pages/02.applications/02.docs/wordpress/app_wordpress.fr.md b/pages/02.applications/02.docs/wordpress/app_wordpress.fr.md new file mode 100644 index 00000000..0d058dda --- /dev/null +++ b/pages/02.applications/02.docs/wordpress/app_wordpress.fr.md @@ -0,0 +1,38 @@ +--- +title: WordPress +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_wordpress' +--- + + + +[](https://install-app.yunohost.org/?app=wordpress) [](https://dash.yunohost.org/appci/app/wordpress) + +### Index + +- [Limitations avec YunoHost](#limitations-avec-yunohost) +- [Liens utiles](#liens-utiles) + +WordPress est un système de gestion de contenu (SGC ou content management system (CMS) en anglais) gratuit, libre et open-source. Ce logiciel écrit en PHP repose sur une base de données MySQL et est distribué par l'entreprise américaine Automattic. Les fonctionnalités de WordPress lui permettent de créer et gérer différents types de sites Web : site vitrine, site de vente en ligne, site applicatif, blogue, ou encore portfolio. Il est distribué selon les termes de la licence GNU GPL version 2.[¹](#sources) + +## Limitations avec YunoHost + +Le multisite est uniquement disponible sur des sous-répertoires. + +Comme le plugin de mise à jour automatique ne fonctionne pas comme prévu, faites attention à garder wordpress à jour depuis le panneau d'administration de WordPress, et pas seulement depuis le panneau d'administration de YunoHost. Pour des raisons de sécurité, contrôler que toutes les mises à jour sont régulièrement appliquées dans le panneau d'administration de WordPress ainsi que dans le panneau d'administration de YunoHost. + +## Liens utiles + ++ Site web : [wordpress.org](https://fr.wordpress.org/) ++ Documentation officielle : [codex.wordpress.org (en)](https://codex.wordpress.org/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/wordpress](https://github.com/YunoHost-Apps/wordpress_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/wordpress/issues](https://github.com/YunoHost-Apps/wordpress_ynh/issues) + +----------- + +### Sources + +¹ [wikipedia.org - WordPress](https://fr.wikipedia.org/wiki/WordPress) diff --git a/pages/02.applications/02.docs/wordpress/app_wordpress.md b/pages/02.applications/02.docs/wordpress/app_wordpress.md new file mode 100644 index 00000000..c1aefbba --- /dev/null +++ b/pages/02.applications/02.docs/wordpress/app_wordpress.md @@ -0,0 +1,38 @@ +--- +title: WordPress +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_wordpress' +--- + + + +[](https://install-app.yunohost.org/?app=wordpress) [](https://dash.yunohost.org/appci/app/wordpress) + +### Index + +- [Limitations with YunoHost](#limitations-with-yunohost) +- [Useful links](#useful-links) + +WordPress is a free, open-source, open source content management system (CMS). This software written in PHP is based on a MySQL database and is distributed by the American company Automattic. WordPress' functionalities allow it to create and manage different types of websites: showcase site, online store site, application site, blog, or portfolio. It is distributed under the terms of the GNU GPL version 2 license.[¹](#sources) + +## Limitations with YunoHost + +Multisite is only available on subdirectories. + +As the auto-update plugin does not work as expected, be careful to keep wordpress up to date from the WordPress admin panel, not just from the YunoHost admin panel. For security reasons, make sure that all updates are regularly applied in the WordPress Control Panel as well as in the YunoHost Control Panel. + +## Useful links + ++ Website: [wordpress.org](https://wordpress.org/) ++ Official documentation: [codex.wordpress.org](https://codex.wordpress.org/) ++ Application software repository: [github.com - YunoHost-Apps/wordpress](https://github.com/YunoHost-Apps/wordpress_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com -YunoHost-Apps/wordpress/issues](https://github.com/YunoHost-Apps/wordpress_ynh/issues) + +----------- + +### Sources + +¹ [wikipedia.org - WordPress (fr)](https://fr.wikipedia.org/wiki/WordPress) diff --git a/pages/02.applications/02.docs/writing_guide/app_writing_guide.fr.md b/pages/02.applications/02.docs/writing_guide/app_writing_guide.fr.md new file mode 100644 index 00000000..08a456b4 --- /dev/null +++ b/pages/02.applications/02.docs/writing_guide/app_writing_guide.fr.md @@ -0,0 +1,42 @@ +--- +title: Canevas pour la documentation des apps +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_writing_guide' +--- + + + +[](https://install-app.yunohost.org/?app=APPLICATION) [](https://dash.yunohost.org/appci/app/APPLICATION) + +### Index + +- [Configuration](#configuration) +- [Limitations avec YunoHost](#limitations-avec-yunohost) +- [Applications clientes](#applications-clientes) +- [Liens utiles](#liens-utiles) + +**Présentation générale de l'application.** *Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce rutrum sodales mauris eu viverra. Sed dapibus, tellus sit amet interdum condimentum, enim eros faucibus ligula, sed suscipit orci velit at felis. Etiam quam lacus, vulputate eu scelerisque ac, sollicitudin rutrum orci. Cras eu ante porttitor, laoreet odio sed, hendrerit tellus. Nulla luctus sem in arcu scelerisque cursus. Nulla ut tellus at leo porttitor tincidunt. Morbi vitae purus convallis, elementum lectus non, dignissim orci. Integer eget egestas mauris. Nunc nunc dolor, cursus in quam mollis, rutrum fermentum nibh. Aliquam molestie velit a nulla porttitor, sit amet tincidunt erat laoreet.* + +## Configuration + +**Si la configuration de l'application ne se fait pas avec le panel admin de YunoHost.** *Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce rutrum sodales mauris eu viverra. Sed dapibus, tellus sit amet interdum condimentum, enim eros faucibus ligula, sed suscipit orci velit at felis. Etiam quam lacus, vulputate eu scelerisque ac, sollicitudin rutrum orci. Cras eu ante porttitor, laoreet odio sed, hendrerit tellus. Nulla luctus sem in arcu scelerisque cursus. Nulla ut tellus at leo porttitor tincidunt. Morbi vitae purus convallis, elementum lectus non, dignissim orci. Integer eget egestas mauris. Nunc nunc dolor, cursus in quam mollis, rutrum fermentum nibh. Aliquam molestie velit a nulla porttitor, sit amet tincidunt erat laoreet.* + +## Limitations avec YunoHost + +**Explication des limitations actuelles en utilisation de l'application avec YunoHost.** *Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce rutrum sodales mauris eu viverra. Sed dapibus, tellus sit amet interdum condimentum, enim eros faucibus ligula, sed suscipit orci velit at felis. Etiam quam lacus, vulputate eu scelerisque ac, sollicitudin rutrum orci. Cras eu ante porttitor, laoreet odio sed, hendrerit tellus. Nulla luctus sem in arcu scelerisque cursus. Nulla ut tellus at leo porttitor tincidunt. Morbi vitae purus convallis, elementum lectus non, dignissim orci. Integer eget egestas mauris. Nunc nunc dolor, cursus in quam mollis, rutrum fermentum nibh. Aliquam molestie velit a nulla porttitor, sit amet tincidunt erat laoreet.* + +## Applications clientes + +| Nom de l'application | Plateforme | Multi-comptes | Autres réseaux supportés | Play Store | F-Droid | Apple Store | *Autres* | +|-----------------------|------------|---------------|-------------------------|------------|---------|-------------|----------| +| | | | | | | | | + +## Liens utiles + + + Site web : [SITE WEB](#) + + Documentation officielle : [DOCUMENTATION](#) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/APPLICATION](https://github.com/YunoHost-Apps/APPLICATION_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/APPLICATION/issues](https://github.com/YunoHost-Apps/APPLICATION_ynh/issues) diff --git a/pages/02.applications/02.docs/writing_guide/app_writing_guide.md b/pages/02.applications/02.docs/writing_guide/app_writing_guide.md new file mode 100644 index 00000000..90b46e0f --- /dev/null +++ b/pages/02.applications/02.docs/writing_guide/app_writing_guide.md @@ -0,0 +1,42 @@ +--- +title: Template for app documentation +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_writing_guide' +--- + + + +[](https://install-app.yunohost.org/?app=APPLICATION) [](https://dash.yunohost.org/appci/app/APPLICATION) + +### Index + +- [Configuration](#configuration) +- [Limitations of YunoHost](#limitations-with-yunohost) +- [Customer Applications](#customer-applications) +- [Useful links](#useful-links) + +**General presentation of the application.** *Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce rutrum sodales mauris eu viverra. Sed dapibus, tellus sit amet interdum condimentum, enim eros faucibus ligula, sed suscipit orci velit at felis. Etiam quam lacus, vulputate eu scelerisque ac, sollicitudin rutrum orci. Cras eu ante porttitor, laoreet odio sed, hendrerit tellus. Nulla luctus sem in arcu scelerisque cursus. Nulla ut tellus at leo porttitor tincidunt. Morbi vitae purus convallis, elementum lectus non, dignissim orci. Integer eget egestas mauris. Nunc nunc dolor, cursus in quam mollis, rutrum fermentum nibh. Aliquam molestie velit a nulla porttitor, sit amet tincidunt erat laoreet.* + +## Configuration + +**If the configuration of the application is not done with the admin panel of YunoHost.** *Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce rutrum sodales mauris eu viverra. Sed dapibus, tellus sit amet interdum condimentum, enim eros faucibus ligula, sed suscipit orci velit at felis. Etiam quam lacus, vulputate eu scelerisque ac, sollicitudin rutrum orci. Cras eu ante porttitor, laoreet odio sed, hendrerit tellus. Nulla luctus sem in arcu scelerisque cursus. Nulla ut tellus at leo porttitor tincidunt. Morbi vitae purus convallis, elementum lectus non, dignissim orci. Integer eget egestas mauris. Nunc nunc dolor, cursus in quam mollis, rutrum fermentum nibh. Aliquam molestie velit a nulla porttitor, sit amet tincidunt erat laoreet.* + +## Limitations with YunoHost + +**Explanation of the current limitations in using the application with YunoHost.** *Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce rutrum sodales mauris eu viverra. Sed dapibus, tellus sit amet interdum condimentum, enim eros faucibus ligula, sed suscipit orci velit at felis. Etiam quam lacus, vulputate eu scelerisque ac, sollicitudin rutrum orci. Cras eu ante porttitor, laoreet odio sed, hendrerit tellus. Nulla luctus sem in arcu scelerisque cursus. Nulla ut tellus at leo porttitor tincidunt. Morbi vitae purus convallis, elementum lectus non, dignissim orci. Integer eget egestas mauris. Nunc nunc dolor, cursus in quam mollis, rutrum fermentum nibh. Aliquam molestie velit a nulla porttitor, sit amet tincidunt erat laoreet.* + +## Customer applications + +| Application name | Platform | Multi-account | Other supported networks | Play Store | F-Droid | Apple Store | *Other* | +|------------------|----------|---------------|--------------------------|------------|---------|-------------|---------| +| | | | | | | | | + +## Useful links + ++ Website: [WEBSITE](#) ++ Official documentation: [DOCUMENTATION](#) ++ Application software repository: [github.com - YunoHost-Apps/APPLICATION](https://github.com/YunoHost-Apps/APPLICATION_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/APPLICATION/issues](https://github.com/YunoHost-Apps/APPLICATION_ynh/issues) diff --git a/pages/02.applications/02.docs/yunofav/app_yunofav.fr.md b/pages/02.applications/02.docs/yunofav/app_yunofav.fr.md new file mode 100644 index 00000000..101f42c0 --- /dev/null +++ b/pages/02.applications/02.docs/yunofav/app_yunofav.fr.md @@ -0,0 +1,15 @@ +--- +title: Yunofav +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_yunofav' +--- + +### Page de liens favoris pour YunoHost + +page d'accueil : https://github.com/YunoHost-Apps/yunofav_ynh + + +Fonctionnalité : Crée une page pour vos liens préférés, en utilisant le style et le fonctionnement des tuiles YunoHost. diff --git a/pages/02.applications/02.docs/yunofav/app_yunofav.md b/pages/02.applications/02.docs/yunofav/app_yunofav.md new file mode 100644 index 00000000..9a7b7fe5 --- /dev/null +++ b/pages/02.applications/02.docs/yunofav/app_yunofav.md @@ -0,0 +1,14 @@ +--- +title: Yunofav +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_yunofav' +--- + +### Page of favorite links for YunoHost + +homepage: https://github.com/YunoHost-Apps/yunofav_ynh + +Functionality: Creates a page for your favorite links, using the YunoHost tiles look and feel. diff --git a/pages/02.applications/02.docs/zerobin/app_zerobin.fr.md b/pages/02.applications/02.docs/zerobin/app_zerobin.fr.md new file mode 100644 index 00000000..d1ecd41a --- /dev/null +++ b/pages/02.applications/02.docs/zerobin/app_zerobin.fr.md @@ -0,0 +1,26 @@ +--- +title: Zerobin +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_zerobin' +--- + + + +[](https://install-app.yunohost.org/?app=zerobin) [](https://dash.yunohost.org/appci/app/zerobin) + +### Index + +- [Liens utiles](#liens-utiles) + +Zerobin est un service web permettant de stocker temporairement et de partager du texte simple de manière chiffrée, sans stockage lisible sur le serveur. La clef de chiffrement/déchiffrement n'est pas stockée sur le serveur mais dans l'URL transmise. Ainsi vous pouvez partager des informations sensibles (mots de passe, codes d'accès, et même une discussion) de manière confidentielle en communiquant à vos interlocuteurs l'adresse spécifique de votre contenu. De plus ce contenu a une valeur limitée dans le temps et est détruit passé un délai personnalisable. + +## Liens utiles + ++ Site web : [privatebin.info](https://privatebin.info/) ++ Documentation officielle : [github.com/PrivateBin/PrivateBin/wiki](https://github.com/PrivateBin/PrivateBin/wiki) ++ Démonstration : [Démo](https://privatebin.net/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/zerobin](https://github.com/YunoHost-Apps/zerobin_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/zerobin/issues](https://github.com/YunoHost-Apps/zerobin_ynh/issues) diff --git a/pages/02.applications/02.docs/zerobin/app_zerobin.md b/pages/02.applications/02.docs/zerobin/app_zerobin.md new file mode 100644 index 00000000..4a276fc8 --- /dev/null +++ b/pages/02.applications/02.docs/zerobin/app_zerobin.md @@ -0,0 +1,26 @@ +--- +title: Zerobin +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_zerobin' +--- + + + +[](https://install-app.yunohost.org/?app=zerobin) [](https://dash.yunohost.org/appci/app/zerobin) + +### Index + +- [Useful links](#useful-links) + +Zerobin is a web service for temporarily storing and sharing plain text in encrypted form without readable storage on the server. The encryption/decryption key is not stored on the server but in the transmitted URL. Thus you can share sensitive information (passwords, access codes, and even a discussion) in a confidential way by communicating to your interlocutors the specific address of your content. Moreover this content has a limited value in time and is destroyed after a customizable delay. + +## Useful links + ++ Website : [privatebin.info](https://privatebin.info/) ++ Official documentation : [github.com/PrivateBin/PrivateBin/wiki](https://github.com/PrivateBin/PrivateBin/wiki) ++ Demonstration : [Demo](https://privatebin.net/) ++ Application software repository : [github.com - YunoHost-Apps/zerobin](https://github.com/YunoHost-Apps/zerobin_ynh) ++ Fix a bug or an improvement by creating a ticket (issue) : [github.com - YunoHost-Apps/zerobin/issues](https://github.com/YunoHost-Apps/zerobin_ynh/issues) diff --git a/pages/02.applications/03.framasoft/apps_framasoft.fr.md b/pages/02.applications/03.framasoft/apps_framasoft.fr.md new file mode 100644 index 00000000..5391bc14 --- /dev/null +++ b/pages/02.applications/03.framasoft/apps_framasoft.fr.md @@ -0,0 +1,55 @@ +--- +title: Équivalence avec les applications Framasoft +template: docs +taxonomy: + category: docs +routes: + default: '/apps_framasoft' +--- + +| App Framasoft | Équivalent | Package | +| :---: | :---: | :---: | +| Framabag | Wallabag | [[fa=git /]](https://github.com/YunoHost-Apps/wallabag2_ynh)   | +| Framabee | Searx | [[fa=git /]](https://github.com/YunoHost-Apps/searx_ynh)   | +| Framabin | PrivateBin | [[fa=git /]](https://github.com/YunoHost-apps/zerobin_ynh)   | +| Framaboard | Kanboard | [[fa=git /]](https://github.com/YunoHost-Apps/kanboard_ynh)   | +| Framabookin | BicBucStriim | [[fa=git /]](https://github.com/YunoHost-Apps/bicbucstriim_ynh)   | +| Framacalc | Ethercalc | [[fa=git /]](https://github.com/YunoHost-Apps/ethercalc_ynh)   | +| Framacarte | uMap | [[fa=git /]](https://github.com/YunoHost-Apps/umap_ynh)   | +| Framaclic | Matomo | [[fa=git /]](https://github.com/YunoHost-Apps/matomo_ynh)   | +| Framadate | OpenSondage | [[fa=git /]](https://github.com/YunoHost-Apps/opensondage_ynh)   | +| Framadrive | Nextcloud | [[fa=git /]](https://github.com/YunoHost-apps/nextcloud_ynh)   | +| Framadrop | Lufi | [[fa=git /]](https://github.com/YunoHost-Apps/lufi_ynh)   | +| Framaestro | Framaestro | [[fa=git /]](https://github.com/YunoHost-Apps/framaestro_ynh)   | +| Framaforms | Framaforms | [[fa=git /]](https://github.com/YunoHost-Apps/framaforms_ynh)   | +| Framagames | Framagames | [[fa=git /]](https://github.com/YunoHost-Apps/framagames_ynh)   | +| Framagenda | (Agenda Nextcloud) | c.f. Nextcloud | +| Framagit | GitLab | [[fa=git /]](https://github.com/YunoHost-Apps/gitlab_ynh)   | +| | Gogs | [[fa=git /]](https://github.com/YunoHost-Apps/gogs_ynh)   | +| Frama.link | Lstu | [[fa=git /]](https://github.com/YunoHost-Apps/lstu_ynh)   | +| Framalistes | Mailman | [[fa=git /]](https://github.com/YunoHost-Apps/mailman_ynh)   | +| | Sympa | [[fa=git /]](https://github.com/alexAubin/sympa_ynh)   | +| Framanews | TinyTinyRSS | [[fa=git /]](https://github.com/YunoHost-apps/ttrss_ynh)   | +| Framanotes | Turtl | [[fa=git /]](https://github.com/YunoHost-Apps/turtl_ynh)   | +| Framapad | Etherpad + mypads | [[fa=git /]](https://github.com/YunoHost-Apps/etherpad_mypads_ynh)   | +| Framapiaf | Mastodon | [[fa=git /]](https://github.com/YunoHost-Apps/mastodon_ynh)   | +| Framapic | Lutim | [[fa=git /]](https://github.com/YunoHost-Apps/lutim_ynh)   | +| Framasites | Grav | [[fa=git /]](https://github.com/YunoHost-Apps/grav_ynh)   | +| Framaslides | Strut | [[fa=git /]](https://github.com/YunoHost-Apps/strut_ynh)   | +| Framasphère | Diaspora | [[fa=git /]](https://github.com/aymhce/diaspora_ynh)   | +| Framatalk | Jitsi Meet | [[fa=git /]](https://github.com/YunoHost-Apps/jitsi_ynh)   | +| Framateam | Mattermost | [[fa=git /]](https://github.com/YunoHost-Apps/mattermost_ynh)   | +| Framatrad | ? | Non packagé | +| Framatube | Peertube | [[fa=git /]](https://github.com/YunoHost-Apps/peertube_ynh)   | +| Framavectoriel | SVG-Edit | [[fa=git /]](https://github.com/YunoHost-Apps/svgedit_ynh)   | +| Framavox | Loomio | Non packagé | +| Framemo | Scrumblr | [[fa=git /]](https://github.com/YunoHost-Apps/scrumblr_ynh)   | +| Framindmap | Wisemapping | [[fa=git /]](https://github.com/YunoHost-Apps/wisemapping_ynh)   | +| Framinetest | Minetest | [[fa=git /]](https://github.com/YunoHost-Apps/minetest_ynh)   | +| MyFrama | Shaarli | [[fa=git /]](https://github.com/YunoHost-Apps/shaarli_ynh)   | + +### Voir aussi + +- [Liste complète des applications packagées](/apps) +- [La roadmap 'Dégooglisons'](https://github.com/YunoHost/issues/milestone/13) + diff --git a/pages/02.applications/04.wishlist/apps_wishlist.md b/pages/02.applications/04.wishlist/apps_wishlist.md new file mode 100644 index 00000000..7d0dcfd2 --- /dev/null +++ b/pages/02.applications/04.wishlist/apps_wishlist.md @@ -0,0 +1,335 @@ +--- +title: Apps wishlist +template: docs +taxonomy: + category: docs +routes: + default: '/apps_wishlist' +--- + +The following list is a compiled wishlist of applications that would be nice-to-have. + +You can [contribute to this list by adding something you'd like to be packaged](/write_documentation), or learn more on [how to package applications](/packaging_apps) to create a new package or improve a package draft. + +<div class="alert alert-info">Before adding an app in this wish-list, please check your app is not <a href="/apps">already available in YunoHost's app catalogue</a></div> + +| Name | Description | Upstream | Package draft | +| ------ | ----------- | -------- | ------------- | +| 10er10 | | [Upstream](https://github.com/dready92/10er10) | | +| [AbanteCart](https://abantecart.com) | Create an e-commerce website | | [Package Draft](https://github.com/YunoHost-Apps/abantecart_ynh) | +| AdGuard | | [Upstream](https://github.com/AdguardTeam/AdGuardHome) | [Package Draft](https://github.com/YunoHost-Apps/adguard_ynh) | +| adhocserver | An ad hoc server for the Sony PSP | | [Package Draft](https://github.com/matlink/adhocserver_ynh) | +| [agora](https://www.agora-project.net/) | Create collaborative and creative digital space | | [Package Draft](https://github.com/YunoHost-Apps/agora_ynh) | +| [Ajenti](https://ajenti.org) | | [Upstream](https://github.com/ajenti/ajenti/) | | +| Akaunting | Manage payments/invoices/expenses | [Upstream](https://github.com/akaunting/akaunting) | | +| Anki Sync Server | a personal Anki server |[Upstream](https://github.com/ankicommunity/anki-sync-server) | | +| [AnonAddy](https://anonaddy.com/) | Anonymous email forwarding - Create Unlimited Email Aliases For Free | [Upstream](https://github.com/anonaddy/anonaddy) | | +| [askbot](https://askbot.com/) | Questions and answers | | [Package Draft](https://github.com/zamentur/askbot_ynh) | +| Beehive | | [Upstream](https://github.com/muesli/beehive) | | +| [BicBucStriim](https://projekte.textmulch.de/bicbucstriim/) | Manage an e-book collection | | [Package Draft](https://github.com/YunoHost-Apps/bicbucstriim_ynh) | +| [BigBlueButton](https://bigbluebutton.org) | Web conferencing system | [Upstream](https://github.com/bigbluebutton/bigbluebutton) | | +| [Bitmessage](https://bitmessage.org/) | | [Upstream](https://github.com/Bitmessage/PyBitmessage) | | +| Blynk | | [Upstream](https://github.com/blynkkk/blynk-library) | | +| [Bolt](https://bolt.cm/) | Content Management Tool | | [Package Draft](https://github.com/realitygaps/bolt_ynh) | +| BookWyrm | Social reading and reviewing, decentralized with ActivityPub | [Upstream](https://github.com/mouse-reeve/bookwyrm) | | +| BTCPay Server | | [Upstream](https://github.com/btcpayserver/btcpayserver) | | +| [Cagette](https://www.cagette.net/) | A marketplace for local farmers and producers | [Upstream](https://github.com/CagetteNet/cagette) | | +| [Caliopen](https://www.caliopen.org) | A unified inteface for all your private communications | | [Package Draft](https://github.com/YunoHost-Apps/caliopen_ynh) | +| [cgit](https://git.zx2c4.com/cgit/about) | | | | +| [CheckUp](https://sourcegraph.github.io/checkup) | | [Upstream](https://github.com/sourcegraph/checkup) | | +| chtickynotes | Note manager | | [Package Draft](https://github.com/YunoHost-Apps/chtickynotes_ynh) | +| [Citadel-suite](https://www.citadel.org) | Groupware platform | | | +| [Cockpit](https://cockpit-project.org/) | | | [Package Draft](https://github.com/YunoHost-Apps/cockpit_ynh) | +| coin | Member dashboard for non profit ISP | [Upstream](https://code.ffdn.org/FFDN/coin/) | [Package Draft](https://github.com/YunoHost-Apps/coin_ynh) | +| Commafeed | | [Upstream](https://github.com/Athou/commafeed) | | +| cops | Calibre OPDS | | [Package Draft](https://github.com/YunoHost-Apps/cops_ynh) | +| [Coquelicot](https://coquelicot.potager.org/) | A “one-click” file sharing web application | | [Package Draft](https://github.com/YunoHost-Apps/coquelicot_ynh) | +| [CouchDB](https://couchdb.apache.org/) | Database management | | | +| [Cozy](https://cozy.io/en/) | | | | +| Croodle | Vote for a schedule / polling | [Upstream](https://github.com/jelhan/croodle) | | +| [Darkwire.io](https://darkwire.io/) | End-to-end encrypted instant web chat | [Upstream](https://github.com/seripap/darkwire.io) | | +| [democracyOS](https://democracyos.org/) | Vote / make decisions in a collective | | [Package Draft](https://github.com/YunoHost-Apps/democracyos_ynh) | +| [diasporadocker](https://diasporafoundation.org/) | A open and powerfull social network | | [Package Draft](https://github.com/aymhce/diasporadocker_ynh) | +| DirectoryLister | | [Upstream](https://github.com/DirectoryLister/DirectoryLister) | | +| Django_app | Skeleton for django apps | | [Package Draft](https://github.com/Jojo144/django_app_ynh) | +| Docker_container | Deploy applications with Docker | | [Package Draft](https://github.com/scith/docker_container_ynh) | +| Docker_rstudio | A web development environment for statistics with R | | [Package Draft](https://github.com/scith/docker_rstudio_ynh) | +| Docker-registry | | [Upstream](https://github.com/docker/distribution/) | [Package Draft](https://github.com/plopoyop/docker-registry_ynh) | +| DockerUI | Deploy applications with Docker | | [Package Draft](https://github.com/YunoHost-Apps/dockerui_ynh) | +| Docspell | Simple document organizer | [Upstream](https://github.com/eikek/docspell) | | +| [DomainMOD](https://domainmod.org) | Domain portfolio management application | | | +| [Domoticz](https://domoticz.com) | Home automation system web application | | [Package Draft](https://github.com/anubister/domoticz_ynh) | +| Draw.io | Online diagram creation | [Upstream](https://github.com/jgraph/drawio) | | +| [Duniter](https://duniter.org) | Participate in the Duniter blockchain | | [Package Draft](https://github.com/YunoHost-Apps/duniter_ynh) | +| Dynette | Dynette is a dyndns server | [Upstream](https://github.com/YunoHost/dynette) | [Package Draft](https://github.com/YunoHost-Apps/dynette_ynh) | +| [EasyAppointments](https://easyappointments.org/) | Online appointment booker | | | +| [eLabFTW](https://www.elabftw.net/) | Electronic lab notebook | [Upstream](https://github.com/elabftw/elabftw) | | +| Emoncms | | [Upstream](https://github.com/emoncms/emoncms) | | +| [Epicyon](https://epicyon.net/) | | [Upstream](https://gitlab.com/bashrc2/epicyon) | | +| [erine.email](https://erine.email/) | | [Upstream](https://gitlab.com/mdavranche/erine.email) | | +| [ERPnext](https://erpnext.com/) | | [Upstream](https://github.com/frappe/erpnext) | | +| [EteSync](https://www.etesync.com/) | | [Upstream](https://github.com/etesync) | | +| [Ethercalc](https://ethercalc.net/) | Collaborative spreadsheet editor | | [Package Draft](https://github.com/YunoHost-Apps/ethercalc_ynh) | +| Facette | | | [Package Draft](https://github.com/YunoHost-Apps/facette_ynh) | +| [Federated wiki](http://fed.wiki.org/view/welcome-visitors/view/federated-wiki) | Farm for fedwiki sites | [Upstream](https://github.com/fedwiki) | | +| [Ferdi server](https://getferdi.com) | Messaging aggregation | [Upstream](https://github.com/getferdi/server) | | +| [FEX](https://fex.rus.uni-stuttgart.de/) | | | | +| [Filestash](https://www.filestash.app/) | | [Upstream](https://github.com/mickael-kerjean/filestash) | | +| FitTrackee | | [Upstream](https://github.com/SamR1/FitTrackee) | | +| Flask | Skeleton for flask apps | | [Package Draft](https://github.com/YunoHost-Apps/flask_ynh) | +| [foodsoft](https://foodcoops.github.io/foodsoft-hosting/) | Manage a non-profit food cooperative | | [Package Draft](https://github.com/YunoHost-Apps/foodsoft_ynh) | +| [Fossil](https://www.fossil-scm.org) | | | | +| Framaestro | Online service aggregator | [Upstream](https://framagit.org/framasoft/framaestro) | [Package Draft](https://github.com/YunoHost-Apps/framaestro_ynh) | +| Framaestro_hub | Online service aggregator hub | [Upstream](https://github.com/mozilla/togetherjs.git) | [Package Draft](https://github.com/YunoHost-Apps/framaestro_hub_ynh) | +| [freeboard](https://freeboard.io/) | A real-time dashboard builder for IOT | | [Package Draft](https://github.com/YunoHost-Apps/freeboard_ynh) | +| [freepbx](https://freepbx.org) | VOIP | | [Package Draft](https://github.com/YunoHost-Apps/freepbx_ynh) | +| [ftssolr](https://wiki.dovecot.org/Plugins/FTS/Solr) | Full-text search via IMAP through a Solr indexing server | | [Package Draft](https://github.com/YunoHost-Apps/ftssolr_ynh) | +| galette | Membership management for non-profit organizations | | [Package Draft](https://github.com/YunoHost-Apps/galette_ynh) | +| [Gancio](https://gancio.org/) | | [Upstream](https://framagit.org/les/gancio) | | +| gateone | HTML5-powered terminal emulator and SSH client | | [Package Draft](https://github.com/Kloadut/gateone_ynh) | +| [Geneweb](https://geneweb.tuxfamily.org) | | [Upstream](https://github.com/geneweb/geneweb) | | +| GetSimple CMS | | [Upstream](https://github.com/GetSimpleCMS/GetSimpleCMS) | | +| gitolite | Git server | | [Package Draft](https://github.com/matlink/gitolite_ynh) | +| gitrepositories | | | [Package Draft](https://github.com/YunoHost-Apps/gitrepositories_ynh) | +| gitweb | Git forge (c.f. Gitolite) | | [Package Draft](https://github.com/matlink/gitweb_ynh) | +| [glitch-soc](https://glitch-soc.github.io/docs/) | A libre and federated social network | | [Package Draft](https://github.com/Tagadda/glitch-soc_ynh) | +| glpi | Create a beautiful blog or website easily | | [Package Draft](https://github.com/abeudin/glpi_ynh) | +| gnusocial | Create a federated comunication node | | [Package Draft](https://github.com/YunoHost-Apps/gnusocial_ynh) | +| [Goaccess](https://goaccess.io) | Web log analyzer | [Upstream](https://github.com/allinurl/goaccess) | | +| gogs_webhost | Turn a Gogs repository to static web hosting | | [Package Draft](https://github.com/YunoHost-Apps/gogs_webhost_ynh) | +| Gollum | A simple Git-powered wiki | [Upstream](https://github.com/gollum/gollum) | [Package Draft](https://github.com/YunoHost-Apps/gollum_ynh) | +| Goploader | | [Upstream](https://github.com/Depado/goploader) | | +| Gpodder.net | | | | +| Granary | | [Upstream](https://github.com/snarfed/granary) | | +| [Graphhopper](https://www.graphhopper.com/) | | [Upstream](https://github.com/graphhopper/graphhopper) | | +| [Guacamole](https://guacamole.apache.org/) | Clientless remote desktop gateway | | | +| [Habitica](https://habitica.com/) | | [Upstream](https://github.com/HabitRPG/habitica) | | +| headphones | Automatic music downloader | | [Package Draft](https://github.com/YunoHost-Apps/headphones_ynh) | +| Helpy | | [Upstream](https://github.com/helpyio/helpy) | | +| [Hexo](https://hexo.io/) | | [Upstream](https://github.com/hexojs/hexo) | | +| Hometown | | [Upstream](https://github.com/hometown-fork/hometown) | | +| [htpc-manager](https://htpc.io) | Manage your HTPC from anywhere | | [Package Draft](https://github.com/scith/htpc-manager_ynh) | +| huginn | Build agents that monitor and act on your behalf | | [Package Draft](https://github.com/YunoHost-Apps/huginn_ynh) | +| [humhub](https://www.humhub.org) | Enterprise Social Network | | [Package Draft](https://github.com/yunohost-apps/humhub_ynh) | +| [Icecast 2](https://www.icecast.org) | | [Upstream](https://gitlab.xiph.org/xiph/icecast-server/) | | +| [ikiwiki](https://ikiwiki.info) | | | | +| internetarchive | Offline version of the Internet Archive | [Upstream](https://github.com/internetarchive/dweb-mirror) | [Package Draft](https://github.com/mitra42/internetarchive_ynh) | +| [InvoicePlane](https://invoiceplane.com) | | [Upstream](https://github.com/InvoicePlane/InvoicePlane) | | +| [IPFS](https://ipfs.io) | | [Upstream](https://github.com/ipfs/ipfs) | | +| [Isso](https://posativ.org/isso) | Comment server | [Upstream](https://github.com/posativ/isso) | | +| jappix_mini | Jappix Mini XMPP chat website integration | | [Package Draft](https://github.com/YunoHost-Apps/jappix_mini_ynh) | +| [Jitsi](https://jitsi.org/) | Video conferencing web application | | [Package Draft](https://github.com/YunoHost-Apps/jitsi_ynh) | +| [joomla](https://www.joomla.org) | A content management system | | [Package Draft](https://github.com/YunoHost-Apps/joomla_ynh) | +| [Joplin](https://joplin.cozic.net/) | | [Upstream](https://github.com/laurent22/joplin) | | +| Joplin-web | | [Upstream](https://github.com/foxmask/joplin-web) | | +| [JS Bin](https://jsbin.com/) | | [Upstream](https://github.com/jsbin/jsbin) | | +| [Karaoke-forever](https://www.karaoke-forever.com/) | Organize karaoke parties | [Upstream](https://github.com/bhj/karaoke-forever) | | +| [Kill the newsletter](https://kill-the-newsletter.com/) | Convert email newsletters to RSS feeds | [Upstream](https://github.com/leafac/kill-the-newsletter.com) | | +| kiwiirc | Web IRC client | | [Package Draft](https://github.com/YunoHost-Apps/kiwiirc_ynh) | +| [Kiwix](https://www.kiwix.org/) | Offline Wikipedia or other sites | [Upstream](https://github.com/kiwix/) | | +| [Known](https://withknown.com) | | [Upstream](https://github.com/idno/known) | | +| [kodi](https://kodi.tv) | Media center application | | [Package Draft](https://github.com/YunoHost-Apps/kodi_ynh) | +| [Koel](https://koel.phanan.net) | | [Upstream](https://github.com/phanan/koel) | | +| Kontalk | | [Upstream](https://github.com/kontalk) | | +| [Koozip](https://koozic.net) | | [Upstream](https://github.com/DocMarty84/koozic) | | +| L'atelier | | [Upstream](https://github.com/jbl2024/latelier) | | +| [LBCAlerte](https://alerte.ilatumi.org/) | | | [Package Draft](https://github.com/YunoHost-Apps/LBCAlerte_ynh) | +| lektor | A static website generator | | [Package Draft](https://github.com/YunoHost-Apps/lektor_ynh) | +| [Lemmy](https://dev.lemmy.ml) | A federated alternative to Reddit | [Upstream](https://github.com/dessalines/lemmy) | | +| [Lessy](https://lessy.io) | | [Upstream](https://github.com/lessy-community/lessy) | | +| [LibreOffice Online](https://www.libreoffice.org/download/libreoffice-online/) | | | | +| linuxdash | Low-overhead monitoring web dashboard | [Upstream](https://github.com/afaqurk/linux-dash) | [Package Draft](https://github.com/YunoHost-Apps/linuxdash_ynh) | +| [LiquidSoap](https://www.liquidsoap.info/) | Audio and video streaming language | [Upstream](https://github.com/savonet/liquidsoap) | | +| [listmonk](https://listmonk.app) | Self-hosted newsletter & mailing list manager | [Upstream](https://github.com/knadh/listmonk) | | +| LocomotiveCMS | | [Upstream](https://github.com/locomotivecms/engine) | | +| [Loki](https://docs.loki.network/ServiceNodes/DebianPackageGuide/)| Service node for the Loki Network | [Upstream](https://github.com/loki-project/) | | +| [Loomio](https://www.loomio.org) | | [Upstream](https://github.com/loomio/loomio/) | | +| [MaidSafe](https://maidsafe.net) | | [Upstream](https://github.com/maidsafe) | | +| [mailman3](https://docs.mailman3.org/) | Electronic mailing list manager | | [Package Draft](https://github.com/YunoHost-Apps/mailman3_ynh) | +| [Mailpile](https://www.mailpile.is) | | [Upstream](https://github.com/mailpile/Mailpile) | | +| [Mailtrain](https://mailtrain.org/) | | [Upstream](https://github.com/Mailtrain-org/mailtrain) | | +| [Mautic](https://github.com/mautic/mautic) | | | | +| mediadrop | Video Platform | | [Package Draft](https://github.com/YunoHost-Apps/mediadrop_ynh) | +| [Mediagoblin](https://mediagoblin.org/) | Video streaming platform | [Upstream](https://savannah.gnu.org/projects/mediagoblin) | | +| [medusa](https://pymedusa.com/) | Automatic TV shows downloader | | [Package Draft](https://github.com/guigot/medusa_ynh) | +| [Megaglest](https://megaglest.org/) | realtime stategy game | [Upstream](https://megaglest.org/linux-packages.html) | | +| [Metabase](https://www.metabase.com/) | analytics dashboard | [Upstream](https://github.com/metabase/metabase) | | +| microblog.pub | | [Upstream](https://github.com/tsileo/microblog.pub) | | +| miniflux | Minimal RSS reader | | [Package Draft](https://github.com/mat-mo/miniflux_ynh) | +| [Mirakel](https://mirakel.azapps.de/taskwarrior.html) | | [Upstream](https://github.com/GothenburgBitFactory/taskwarrior) | | +| modernpaste | A modern, feature-rich Pastebin alternative | [Upstream](https://github.com/LINKIWI/modern-paste) | [Package Draft](https://github.com/YunoHost-Apps/modernpaste_ynh) | +| [Modoboa](https://modoboa.org) | | [Upstream](https://github.com/modoboa/) | | +| [MongoPassion](https://mongopassion.24eme.fr/demo/) | Web-based project for management of MongoDB databases | [Upstream](https://github.com/24eme/MongoPassion) | | +| [mopidy](https://www.mopidy.com/) | An extensible music server | | [Package Draft](https://github.com/YunoHost-Apps/mopidy_ynh) | +| [mosquitto](https://mosquitto.org) | | | [Package Draft](https://github.com/YunoHost-Apps/mosquitto_ynh) | +| MotionEye | | [Upstream](https://github.com/ccrisan/motioneye) | | +| mumble_admin_plugin | Mumble-server web interface | | [Package Draft](https://github.com/matlink/mumble_admin_plugin_ynh) | +| Mumble-web | Mumble web interface | [Upstream](https://github.com/Johni0702/mumble-web) | [Package Draft](https://github.com/YunoHost-Apps/mumbleserver_ynh/pull/32) | +| munin | Resource monitoring tool | | [Package Draft](https://github.com/YunoHost-Apps/munin_ynh) | +| Museek+ | | [Upstream](https://github.com/eLvErDe/museek-plus) | | +| [MyBB](https://mybb.com/) | | [Upstream](https://github.com/mybb) | | +| mycryptochat | Encrypted IM | | [Package Draft](https://github.com/mrtino/mycryptochat_ynh) | +| mx-puppet-discord | A bridge between Matrix and Discord | [Upstream](https://github.com/matrix-discord/mx-puppet-discord) | | +| [N8n.io](https://n8n.io) | | | | +| Netrunner | | [Upstream](https://github.com/mtgred/netrunner) | | +| nexusoss | Sonatype Nexus Repository manager OSS | | [Package Draft](https://github.com/YunoHost-Apps/nexusoss_ynh) | +| Nitter | | [Upstream](https://github.com/zedeus/nitter) | | +| [ntopng](https://www.ntop.org/) | | | [Package Draft](https://github.com/YunoHost-Apps/ntopng_ynh) | +| [Odoo](https://www.odoo.com/) | An open source ERP and CRM | [Upstream](https://github.com/odoo/odoo) | [Package Draft](https://github.com/YunoHost-Apps/libreerp_ynh) | +| ofbiz | Apache-OFBiz ERP | | [Package Draft](https://github.com/nomakaFr/ofbiz_ynh) | +| OhMyForm | | [Upstream](https://github.com/ohmyform) | | +| Ombi | | [Upstream](https://github.com/tidusjar/Ombi) | | +| [Omeka S](https://omeka.org/s/) | | [Upstream](https://github.com/omeka/omeka-s) | | +| [OpenBazaar](https://openbazaar.org) | | [Upstream](https://github.com/openbazaar) | | +| [OpenCart](https://www.opencart.com) | | [Upstream](https://github.com/opencart/opencart) | | +| [OpenEats](https://open-eats.github.io/) | | [Upstream](https://github.com/open-eats/OpenEats) | | +| [openHAB](https://www.openhab.org/) | Smart home platform | [Upstream](https://github.com/openhab) | | +| openid-simplesamlphp | OpenID provider based on SimpleSAMLphp | | [Package Draft](https://github.com/julienmalik/openid-simplesamlphp_ynh) | +| [OpenNote](https://foxusa.github.io/OpenNote/OpenNote/) | An alternative to Microsoft OneNote and EverNote | | [Package Draft](https://github.com/YunoHost-Apps/OpenNote_ynh) | +| openproject | | [Upstream](https://github.com/opf/openproject) | [Package Draft](https://github.com/moutonjr/openproject_ynh) | +| OpenSourceBilling | | [Upstream](https://github.com/vteams/open-source-billing) | | +| [osada](https://zotlabs.com/osada/) | A decentralized publication platform and social network | | [Package Draft](https://github.com/YunoHost-Apps/osada_ynh) | +| [osjs](https://www.os-js.org/) | Desktop you have access to through your web-browser | | [Package Draft](https://github.com/YunoHost-Apps/osjs_ynh) | +| [osmw](https://www.openstreetmap.org/) | Cartography software | | [Package Draft](https://github.com/YunoHost-Apps/osmw_ynh) | +| OSRM | | [Upstream](https://github.com/Project-OSRM/osrm-backend) | | +| [OX Open-Xchange](https://www.open-xchange.com) | Linux groupware solution | [Upstream](https://github.com/open-xchange/) | | +| [Padloc](https://padloc.app/) | Simple, secure password and data management for individuals and teams | [Upstream](https://github.com/padloc/padloc) | | +| [pagure](https://pagure.io/pagure) | A Git forge | | [Package Draft](https://github.com/YunoHost-Apps/pagure_ynh) | +| Paperless | | [Upstream](https://github.com/danielquinn/paperless) | | +| [Paperwork](https://paperwork.cloud) | | [Upstream](https://github.com/paperwork/paperwork) | | +| [Passbolt](https://www.passbolt.com) | Password manager | [Upstream](https://github.com/passbolt) | | +| Pelias | | [Upstream](https://github.com/pelias/pelias) | | +| Pelican | Pelican Static Site Generator | | [Package Draft](https://github.com/YunoHost-Apps/pelican_ynh) | +| [Photoprism](https://photoprism.org/) | | [Upstream](https://github.com/photoprism/photoprism) | | +| [phpbb](https://www.phpbb.com/) | Bulletin board software | [Upstream](https://github.com/phpbb) | [Package Draft](https://github.com/YunoHost-apps/phpbb_ynh) | +| [phpboost](https://www.phpboost.com/) | | | [Package Draft](https://github.com/YunoHost-Apps/phpboost_ynh) | +| [phpipam](https://phpipam.net/) | | | [Package Draft](https://github.com/YunoHost-Apps/phpipam_ynh) | +| phplicensewatcher | A license manager | | [Package Draft](https://github.com/YunoHost-Apps/phplicensewatcher_ynh) | +| [PHPList](https://www.phplist.com) | | [Upstream](https://github.com/phpList) | | +| [Phraseanet](https://docs.phraseanet.com/3.8/fr/index.html#) | | [Upstream](https://github.com/alchemy-fr/Phraseanet-Docs) | | +| [pia](https://github.com/LINCnil/pia) | A tool to help carrying out Privacy Impact Assessments | | [Package Draft](https://github.com/YunoHost-Apps/pia_ynh) | +| Pico | | [Upstream](https://github.com/picocms/Pico) | | +| Playmaker | | [Upstream](https://github.com/NoMore201/playmaker) | | +| [plonecms](plone.org) | Create a modern website with a CMS written in Python | | [Package Draft](https://github.com/YunoHost-Apps/plonecms_ynh) | +| [Presentator](https://presentator.io/) | A design collaboration platform | | | +| [prestashop](https://www.prestashop.com/) | Create an e-commerce website | | [Package Draft](https://github.com/YunoHost-Apps/prestashop_ynh) | +| [Privoxy](https://www.privoxy.org) | | | | +| [ProcessMaker](https://www.processmaker.com) | | | | +| proftpd | | | [Package Draft](https://github.com/abeudin/proftpd_ynh) | +| ProtonMail’s WebClient | | [Upstream](https://github.com/ProtonMail/WebClient) | | +| [psitransfer](https://psi.cx/tags/PsiTransfer/) | Transfer files or images without problems | | [Package Draft](https://github.com/YunoHost-Apps/psitransfer_ynh) | +| [pterodactyl](https://pterodactyl.io/) | | | [Package Draft](https://github.com/YunoHost-Apps/pterodactyl_ynh) | +| [pufferpanel](https://emby.media/) | | | [Package Draft](https://github.com/YunoHost-Apps/pufferpanel_ynh) | +| Pump.io | File sharing and synchronization | [Upstream](https://github.com/pump-io/pump.io) | | +| pydio | File sharing platform | | [Package Draft](https://github.com/YunoHost-Apps/pydio_ynh) | +| [Pydio Cells](https://pydio.com/) | | [Upstream](https://github.com/pydio/cells) | | +| [pyload](https://pyload.net/) | | [Upstream](https://github.com/pyload/pyload) | [Package Draft](https://github.com/YunoHost-Apps/pyload_ynh) | +| qBittorrent | | [Upstream](https://github.com/qbittorrent/qBittorrent) | | +| [Questions2answer](https://www.question2answer.org/) | | | | +| [racktables](https://racktables.org) | | [Upstream](https://github.com/RackTables/racktables) | | +| Radarr | | [Upstream](https://github.com/Radarr/Radarr) | | +| Race for the galaxy | | [Upstream](https://github.com/bnordli/rftg) | | +| [redmine](https://www.redmine.org/) | A flexible project management web application | | [Package Draft](https://github.com/YunoHost-Apps/redmine_ynh) | +| remoteStorage | A remoteStorage server implementation written in PHP | [Upstream](https://github.com/fkooman/php-remote-storage) | [Package Draft](https://github.com/YunoHost-Apps/RemoteStorage_ynh) | +| [Request Tracker](https://bestpractical.com) | | [Upstream](https://github.com/bestpractical/rt) | | +| [Restya](https://restya.com) | | [Upstream](https://github.com/RestyaPlatform/board/) | | +| [Retroshare](https://retroshare.cc/) | | [Upstream](https://github.com/RetroShare/RetroShare) | | +| [roadiz](https://www.roadiz.io) | Create a modern website | | [Package Draft](https://github.com/YunoHost-Apps/roadiz_ynh) | +| [rocketchat](https://rocket.chat) | A chat platform | | [Package Draft](https://github.com/YunoHost-Apps/rocketchat_ynh) | +| rs-short | An URL shortener | [Upstream](https://git.42l.fr/42l/rs-short) | | +| [rspamdui](https://rspamd.com/webui) | A web UI for the Rspamd spam filtering system | | [Package Draft](https://github.com/YunoHost-Apps/rspamdui_ynh) | +| rutorrent | Torrent client | | [Package Draft](https://github.com/CotzaDev/rutorrent_ynh) | +| rwtxt | Minimalist CMS | [Upstream](https://github.com/schollz/rwtxt) | | +| [sat](https://salut-a-toi.org) | An all-in-one tool to manage all your communications | | [Package Draft](https://github.com/YunoHost-Apps/sat_ynh) | +| [ScenariChain-server](https://download.scenari.software/SCENARIchain-server/) | | | | +| [Schleuder](https://schleuder.org/schleuder/docs/concept.html) | A GPG-enabled mailing list manager | | | +| scm-manager | Share and manage Git, Mercurial and Subversion repositories | | [Package Draft](https://github.com/drfred1981/scm-manager_ynh) | +| scrumblr | Software for notes | | [Package Draft](https://github.com/YunoHost-Apps/scrumblr_ynh) | +| [Scuttlebutt Pub](https://www.scuttlebutt.nz/contributing) | | | | +| [seenthis](https://www.seenthis.net/) | Short-blogging destiné à la veille d’actualité | | [Package Draft](https://github.com/magikcypress/seenthis_ynh) | +| [Semantic MediaWiki](https://www.semantic-mediawiki.org/wiki/Semantic_MediaWiki) | lets you store and query data within the [MediaWiki](https://en.wikipedia.org/wiki/MediaWiki)'s pages | [Upstream](https://github.com/SemanticMediaWiki/SemanticMediaWiki) | | +| [shadowsocks](https://shadowsocks.org) | A SOCKS5 proxy to protect your Internet traffic | | [Package Draft](https://github.com/YunoHost-Apps/shadowsocks_ynh) | +| [ShareLatex](https://www.sharelatex.com) | | [Upstream](https://github.com/overleaf/overleaf) | | +| shinken | A flexible and scalable monitoring framework | [Upstream](https://github.com/naparuba/shinken) | [Package Draft](https://github.com/YunoHost-apps/shinken_ynh) | +| shuri | URL Shortener | [Upstream](https://github.com/pips-/shuri) | [Package Draft](https://github.com/YunoHost-Apps/shuri_ynh) | +| sickbeard | Automatic TV show downloader | | [Package Draft](https://github.com/YunoHost-Apps/sickbeard_ynh) | +| [sickrage](https://sickchill.github.io/) | Automatic TV shows downloader | | [Package Draft](https://github.com/YunoHost-Apps/sickrage_ynh) | +| [Signal Proxy](https://signal.org/blog/help-iran-reconnect/) | Fight censorship and bypass traffic securely to the Signal service | [Upstream](https://github.com/signalapp/Signal-TLS-Proxy) | | +| simpad | Simple markdown editor | [Upstream](https://github.com/beli3ver/SiMPad) | [Package Draft](https://github.com/YunoHost-Apps/simpad_ynh) | +| [SimpleLogin](https://simplelogin.io) | Privacy-first e-mail forwarding and identity provider service | [Upstream](https://github.com/simple-login/app) | | +| [smokeping](https://oss.oetiker.ch/smokeping/) | | [Upstream](https://github.com/oetiker/SmokePing) | | +| [SocialHome](https://socialhome.network) | A federated personal profile | [Upstream](https://github.com/jaywink/socialhome) | | +| [Sonarr](https://sonarr.tv) | | [Upstream](https://github.com/Sonarr/Sonarr) | | +| [sonerezh](https://www.sonerezh.bzh) | Stream music from everywhere | | [Package Draft](https://github.com/YunoHost-Apps/sonerezh_ynh) | +| Spacedeck | A real-time collaborative whiteboard | [Upstream](https://github.com/spacedeck/spacedeck-open) | | +| sphinx | | [Upstream](https://github.com/sphinx-doc/sphinx) | [Package Draft](https://github.com/YunoHost-Apps/sphinx_ynh) | +| squid3| A caching proxy | | [Package Draft](https://github.com/YunoHost-Apps/squid3_ynh) | +| [Stackedit](https://stackedit.io) | | [Upstream](https://github.com/benweet/stackedit) | | +| [StandardNotes](https://standardfile.org/) | A clean, simple, E2E-encrypted notes app | [Upstream](https://github.com/standardnotes/web) | | +| Streisand | | [Upstream](https://github.com/jlund/streisand) | | +| studs | A survey tool, the ancestor of OpenSondage | | [Package Draft](https://github.com/YunoHost-Apps/studs_ynh) | +| subsonic | Subsonic is an open source, web-based media server | | [Package Draft](https://github.com/drfred1981/subsonic_ynh) | +| Subspace | A simple WireGuard VPN server GUI | [Upstream](https://github.com/subspacecloud/subspace) | | +| Sydent | Identity-serverfor matrix | [Upstream](https://github.com/matrix-org/sydent) | | +| [sympa](https://www.sympa.org/) | Mailing List manager | | [Package Draft](https://github.com/YunoHost-Apps/sympa_ynh) | +| Synapse-Admin | Management GUI for matrix-synapse | [Upstream](https://github.com/Awesome-Technologies/synapse-admin) | | +| [Syspass](https://www.syspass.org/) | | [Upstream](https://github.com/nuxsmin/sysPass) | | +| [Taiga](https://taiga.io) | | [Upstream](https://github.com/taigaio/) | | +| [Taskwarrior](https://taskwarrior.org) | | [Upstream](https://github.com/GothenburgBitFactory/taskwarrior) | | +| [teampass](https://www.teampass.net) | Passwords Manager | | [Package Draft](https://github.com/YunoHost-Apps/teampass_ynh) | +| [Technitium DNS](https://technitium.com/dns/) | | [Upstream](https://github.com/TechnitiumSoftware/DnsServer) | | +| [Teddy.io](https://teedy.io/) | Document manager | [Upstream](https://github.com/sismics/docs) | | +| telegram_chatbot | Telegram chatbot - mini chatbot for Telegram | | [Package Draft](https://github.com/YunoHost-Apps/telegram_chatbot_ynh) | +| TellForm | | [Upstream](https://github.com/tellform/tellform) | | +| [tes3mp](https://tes3mp.com/) | | | [Package Draft](https://github.com/YunoHost-Apps/tes3mp_ynh) | +|[Theia-IDE](https://theia-ide.org/) | VS Code-like cloud IDE |[Upstream](https://hub.docker.com/r/theiaide/theia-full)| | +| Thredded | | [Upstream](https://github.com/thredded/thredded) | | +| Tinylist | | [Upstream](https://github.com/baggachipz/tinylist) | | +| [TMate](https://tmate.io/) | | [Upstream](https://github.com/tmate-io/tmate) | | +| torrelay | | | [Package Draft](https://github.com/matlink/torrelay_ynh) | +| Tracim | | [Upstream](https://github.com/tracim/tracim) | | +| Traccar | Modern GPS Tracking Platform | [Upstream](https://github.com/traccar/traccar) | | +| transpay | Interface to receive and manage donations with Stripe | | [Package Draft](https://github.com/YunoHost-Apps/transpay_ynh) | +| transwhat | A gateway to WhatsApp from Jabber | | [Package Draft](https://github.com/Josue-T/transwhat_ynh) | +| Trilium Notes | Build large personal knowledge base with notes | [Upstream](https://github.com/zadam/trilium) | | +| [Tryton](https://www.tryton.org/) | A solid ERP system | | | +| [turtl](https://turtlapp.com/) | A secure collaboratite notebook | | [Package Draft](https://github.com/YunoHost-Apps/turtl_ynh) | +| tutao | End-to-end encrypted e-mail client | [Upstream](https://github.com/tutao/tutanota/) | [Package Draft](https://github.com/YunoHost-Apps/tutao_ynh) | +| [Twake](https://twake.app/fr/home)| All of the organizational tools you need to make your projects succeed brought together on one platform.| | | +| Twister | | [Upstream](https://github.com/miguelfreitas/twister-core/) | | +| [TwitRSS.me](https://twitrss.me/) | Create RSS feeds from Twitter | [Upstream](https://github.com/ciderpunx/twitrssme) | | +| [umap](https://umap.openstreetmap.fr/) | Cartography software | | [Package Draft](https://github.com/YunoHost-Apps/umap_ynh) | +| [unbound](https://nlnetlabs.nl/projects/unbound/about/) | | | [Package Draft](https://github.com/YunoHost-Apps/unbound_ynh) | +| [upmpdcli](https://www.lesbonscomptes.com/upmpdcli/) | | [Upstream](https://framagit.org/medoc92/upmpdcli) | | +| [Uwazi](https://www.uwazi.io/) | | [Upstream](https://github.com/huridocs/uwazi) | | +| [Volumio](https://volumio.org) | | [Upstream](https://github.com/volumio) | | +| [vpnserver](https://openvpn.net) | Create/provide VPNs from your server | | [Package Draft](https://github.com/YunoHost-Apps/vpnserver_ynh) | +| [Webhook.site](https://docs.webhook.site/) | | [Upstream](https://github.com/fredsted/webhook.site) | | +| [WebODF](https://webodf.org) | | [Upstream](https://github.com/webodf/WebODF) | | +| webogram | Webogram - a new era of messaging | [Upstream](https://github.com/zhukov/webogram) | [Package Draft](https://github.com/YunoHost-Apps/webogram_ynh) | +| [WebThings Gateway](https://iot.mozilla.org/gateway/) | | [Upstream](https://github.com/mozilla-iot/) | | +| [webtrees](https://www.webtrees.net) | Web-based genealogy | | [Package Draft](https://github.com/YunoHost-Apps/webtrees_ynh) | +| Whoogle | A metasearch engine | [Upstream](https://github.com/benbusby/whoogle-search) | | +| [wildfly](https://wildfly.org) | | | [Package Draft](https://github.com/YunoHost-Apps/wildfly_ynh) | +| [Wireguard](https://www.wireguard.com/) | | [Upstream](https://git.zx2c4.com/WireGuard/) | | +| Wisemapping | An online mind mapping editor | [Upstream](https://bitbucket.org/wisemapping/wisemapping-open-source) | [Package Draft](https://github.com/YunoHost-Apps/wisemapping_ynh) | +| Xibo | A FLOSS digital signage solution | [Upstream](https://github.com/xibosignage) | | +| [Xonotic](https://xonotic.org) | | [Upstream](https://gitlab.com/xonotic) | | +| yacy | Free and decentrelized search engine | | [Package Draft](https://github.com/YunoHost-Apps/yacy_ynh) | +| [Yggdrasil](https://yggdrasil-network.github.io/) | | [Upstream](https://github.com/yggdrasil-network/yggdrasil-go) | | +| youtube-dl-webui | Web interface for youtube-dl | | [Package Draft](https://github.com/YunoHost-Apps/youtube-dl-webui_ynh) | +| yunofav | A page of favorite links | | [Package Draft](https://github.com/YunoHost-Apps/yunofav_ynh) | +| [yunohost](https://yunohost.org) | YunoHost in YunoHost, crazy :D ! | | [Package Draft](https://github.com/aymhce/yunohost_ynh) | +| Zammad | | [Upstream](https://github.com/zammad/zammad) | | +| [Zola](https://www.getzola.org/) | Static site generator | | | +| zomburl | An URL shortening service | | [Package Draft](https://github.com/courgette/zomburl_ynh) | +| Zoneminder | | [Upstream](https://github.com/ZoneMinder/zoneminder) | | +| [Zulip](https://zulipchat.com/) | | [Upstream](https://github.com/zulip/zulip) | | +| Zusam | A truly private space for you and your friends | [Upstream](https://github.com/zusam/zusam) | [Package Draft](https://github.com/zusam/zusam_ynh) | + +### Other references listing self-hosted applications + +- [List of awesome selfhosted apps](https://github.com/Kickball/awesome-selfhosted) +- [List of awesome sysadmin apps](https://github.com/kahun/awesome-sysadmin) +- [List of awesome Node.js projects](https://github.com/sqreen/awesome-nodejs-projects) +- [List of SIP softwares/applications](https://en.wikipedia.org/wiki/List_of_SIP_software#Free_and_open-source_license) diff --git a/pages/03.community/01.forum/forum.fr.md b/pages/03.community/01.forum/forum.fr.md new file mode 100644 index 00000000..8bd374e9 --- /dev/null +++ b/pages/03.community/01.forum/forum.fr.md @@ -0,0 +1,5 @@ +--- +title: Forum +template: docs +redirect: 'https://forum.yunohost.org/tag/fr' +--- diff --git a/pages/03.community/01.forum/forum.md b/pages/03.community/01.forum/forum.md new file mode 100644 index 00000000..6a686595 --- /dev/null +++ b/pages/03.community/01.forum/forum.md @@ -0,0 +1,5 @@ +--- +title: Forum +template: docs +redirect: 'https://forum.yunohost.org/tag/en' +--- diff --git a/pages/03.community/02.chat_rooms/chat_rooms.es.md b/pages/03.community/02.chat_rooms/chat_rooms.es.md new file mode 100644 index 00000000..63248221 --- /dev/null +++ b/pages/03.community/02.chat_rooms/chat_rooms.es.md @@ -0,0 +1,46 @@ +--- +title: Salas de chat +template: docs +taxonomy: + category: docs +routes: + default: '/chat_rooms' +--- + +El proyecto YunoHost utiliza salas de chat como medio de communicación. + +Puede unirse a una sala de chat utilizando : +- un [cliente IRC](https://es.wikipedia.org/wiki/Anexo:Clientes_IRC) por ejemplo [KiwiIRC](https://kiwiirc.com/client/irc.freenode.net/yunohost) +- un [cliente XMPP](https://es.wikipedia.org/wiki/Anexo:Comparaci%C3%B3n_de_clientes_de_mensajer%C3%ADa_instant%C3%A1nea) +- un [cliente Matrix](https://matrix.org/docs/guides/faq.html#what-clients-are-available%3F) + + +#### Sala de chat de ayuda y soporte + +Existen salas publicas de chat de [soporte](/help) y ayuda para YunoHost: +- IRC: **#yunohost** on irc.freenode.net ; +- Matrix: **#freenode_#yunohost:matrix.org** ; +- XMPP: **[support@conference.yunohost.org](xmpp:support@conference.yunohost.org?join)** + +#### sala de chat para desarrolladores + +Salas de chat para el desarollo de YunoHost: +- IRC: **#yunohost-dev** on irc.freenode.net ; +- Matrix: **#freenode_#yunohost-dev:matrix.org** ; +- XMPP: **[dev@conference.yunohost.org](xmpp:dev@conference.yunohost.org?join)** + +Actualmente, la sala principal de chat para contribuciones en YunoHost +Para mas ayuda, vea la sala de chat **#yunohost** encima. + +#### Sala de chat para las integración de aplicaciones +Estos permite la ayuda mutua para los integradores de aplicaciones y también para conversar de evoluciones et de herramientas de integración continua. +- IRC: **#yunohost-apps** en irc.freenode.net +- Matrix: **#freenode_#yunohost-apps:matrix.org** +- XMPP: **[apps@conference.yunohost.org](xmpp:apps@conference.yunohost.org?join)** + +#### Sala de chat de Documentación +Lugar donde la comunidad conversa sincroniza y mantiene actualisado la documentación en los aspectos varios como (backend, frontend, apps, proyecto, comunidad...) +Puede tambien compartir sus materiales sobre YunoHost (videos, presentaciones, etc.). +- IRC: **#yunohost-doc** on irc.freenode.net +- Matrix: **#freenode_#yunohost-doc:matrix.org** +- XMPP: **[doc@conference.yunohost.org](xmpp:doc@conference.yunohost.org?join)** diff --git a/chat_rooms_fr.md b/pages/03.community/02.chat_rooms/chat_rooms.fr.md similarity index 71% rename from chat_rooms_fr.md rename to pages/03.community/02.chat_rooms/chat_rooms.fr.md index e382d234..2b75c282 100644 --- a/chat_rooms_fr.md +++ b/pages/03.community/02.chat_rooms/chat_rooms.fr.md @@ -1,21 +1,28 @@ -## Salons de discussions +--- +title: Salons de discussions +template: docs +taxonomy: + category: docs +routes: + default: '/chat_rooms' +--- Parmi d’autres outils, le projet YunoHost se sert de salons de discussions pour communiquer. -Vous pouvez rejoindre ces salons avec: -- un [Client IRC](https://fr.wikipedia.org/wiki/Liste_de_clients_IRC) +Vous pouvez rejoindre ces salons avec : +- un [Client IRC](https://fr.wikipedia.org/wiki/Liste_de_clients_IRC) par exemple [KiwiIRC](https://kiwiirc.com/client/irc.freenode.net/yunohost) - un [Client XMPP](https://fr.wikipedia.org/wiki/Clients_XMPP) - un [Client Matrix](https://linuxfr.org/news/matrix-pour-decentraliser-skype-whatsapp-signal-slack-et-discord) #### Salon d'entraide et de support Le salon d’[entraide](/help) est là pour permettre aux utilisateurs de YunoHost de s'aider mutuellement. -- IRC : **#yunohost** sur irc.freenode.net (voir kiwiirc ci-dessus) +- IRC : **#yunohost** sur irc.freenode.net (voir KiwiIRC ci-dessus) - Matrix : **#freenode_#yunohost:matrix.org** - XMPP : **[support@conference.yunohost.org](xmpp:support@conference.yunohost.org?join)** #### Développement -Salon de développement du cœur de YunoHost: +Salon de développement du cœur de YunoHost : - IRC : **#yunohost-dev** sur irc.freenode.net - Matrix : **#freenode_#yunohost-dev:matrix.org** - XMPP : **[dev@conference.yunohost.org](xmpp:dev@conference.yunohost.org?join)** @@ -31,8 +38,8 @@ Il sert également à discuter de l’évolution du packaging, des outils d’in - XMPP : **[apps@conference.yunohost.org](xmpp:apps@conference.yunohost.org?join)** #### Documentation -Le salon de documentation du projet Yunohost. Il permet aux contributeurs d'échanger, pour synchroniser et maintenir une documentation à jour sur les différents aspects du projet : backend, frontend, apps, projet, communauté... -Vous pouvez aussi y partager vos communications au public à propos de Yunohost (présentations, vidéos...) pour permettre leur référencement dans la documentation. -- IRC: **#yunohost-doc** sur irc.freenode.net -- Matrix: **#freenode_#yunohost-doc:matrix.org** -- XMPP: **[doc@conference.yunohost.org](xmpp:doc@conference.yunohost.org?join)** +Le salon de documentation du projet YunoHost. Il permet aux contributeurs d'échanger, pour synchroniser et maintenir une documentation à jour sur les différents aspects du projet : backend, frontend, apps, projet, communauté... +Vous pouvez aussi y partager vos communications au public à propos de YunoHost (présentations, vidéos...) pour permettre leur référencement dans la documentation. +- IRC : **#yunohost-doc** sur irc.freenode.net +- Matrix : **#freenode_#yunohost-doc:matrix.org** +- XMPP : **[doc@conference.yunohost.org](xmpp:doc@conference.yunohost.org?join)** diff --git a/chat_rooms.md b/pages/03.community/02.chat_rooms/chat_rooms.md similarity index 64% rename from chat_rooms.md rename to pages/03.community/02.chat_rooms/chat_rooms.md index 2ac36abf..b4d58572 100644 --- a/chat_rooms.md +++ b/pages/03.community/02.chat_rooms/chat_rooms.md @@ -1,42 +1,49 @@ -## Chat rooms +--- +title: Chat rooms +template: docs +taxonomy: + category: docs +routes: + default: '/chat_rooms' +--- Amoung other communication tools, YunoHost project use chat rooms to communicate. -You could join those chat rooms using : -- an [IRC Client](https://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients) for example [kiwiirc](https://kiwiirc.com/client/irc.freenode.net/yunohost) +You could join those chat rooms using: +- an [IRC Client](https://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients) for example [KiwiIRC](https://kiwiirc.com/client/irc.freenode.net/yunohost) - an [XMPP client](https://en.wikipedia.org/wiki/Comparison_of_instant_messaging_clients) - a [Matrix client](https://matrix.org/docs/guides/faq.html#what-clients-are-available%3F) -#### Help and support chatroom +#### Help and support chat room -There is a [support](/help) chatroom for YunoHost users mutual support and help. +There is a [support](/help) chat room for YunoHost users mutual support and help. -- IRC: **#yunohost** on irc.freenode.net ; -- Matrix: **#freenode_#yunohost:matrix.org** ; +- IRC: **#yunohost** on irc.freenode.net +- Matrix: **#freenode_#yunohost:matrix.org** - XMPP: **[support@conference.yunohost.org](xmpp:support@conference.yunohost.org?join)** -#### Development chatroom +#### Development chat room -YunoHost core development chat room : -- IRC: **#yunohost-dev** on irc.freenode.net ; -- Matrix: **#freenode_#yunohost-dev:matrix.org** ; +YunoHost core development chat room: +- IRC: **#yunohost-dev** on irc.freenode.net +- Matrix: **#freenode_#yunohost-dev:matrix.org** - XMPP: **[dev@conference.yunohost.org](xmpp:dev@conference.yunohost.org?join)** Currently, the main chat room for contributions on YunoHost project. For help, please see **#yunohost** chat room above. -#### Applications chatroom +#### Applications chat room Application packaging development chat room. It allow packagers to help each other. -It also allow to discuss packaging evolution, continuous integration tools : +It also allow to discuss packaging evolution, continuous integration tools: - IRC: **#yunohost-apps** on irc.freenode.net - Matrix: **#freenode_#yunohost-apps:matrix.org** - XMPP: **[apps@conference.yunohost.org](xmpp:apps@conference.yunohost.org?join)** -#### Documentation chatroom -Yunohost project documentation chat room. It allow people to discuss, synchronize and maintain +#### Documentation chat room +YunoHost project documentation chat room. It allow people to discuss, synchronize and maintain an up-to-date documentation on the differents aspects of the project (backend, frontend, apps, project, community...). -You may also share here your public communications about Yunohost (videos, presentations, etc.), to allow proper referencing. +You may also share here your public communications about YunoHost (videos, presentations, etc.), to allow proper referencing. - IRC: **#yunohost-doc** on irc.freenode.net - Matrix: **#freenode_#yunohost-doc:matrix.org** - XMPP: **[doc@conference.yunohost.org](xmpp:doc@conference.yunohost.org?join)** diff --git a/help_ar.md b/pages/03.community/03.help/help.ar.md similarity index 64% rename from help_ar.md rename to pages/03.community/03.help/help.ar.md index f66f7bc4..95b53c00 100644 --- a/help_ar.md +++ b/pages/03.community/03.help/help.ar.md @@ -1,33 +1,37 @@ -# <div dir=rtl>هل تبحث عن مساعدة ؟</div> +--- +title: هل تبحث عن مساعدة +template: docs +taxonomy: + category: docs +routes: + default: '/help' +--- + +<h3>إتصل بغرفة المساعدة</h3> + +!!! **ProTips™** +!!! - Non c'è bisogno di chiedere se puoi chiedere qualcosa, chiedi e basta ! +!!! - *Sii paziente*, potrebbero servire alcuni minuti prima che qualcuno veda i tuoi messaggi. +!!! - لا تطرح سؤالا لمُجرّد الطرح، بل إطرح سؤالك ! +!!! - تحلّى بالصبر، في بعض الأحيان يمكن أن تمر بضع دقائق قبل أن يرى أحد المستخدمين سؤالك. -<h3 dir="rtl">إتصل بغرفة المساعدة</h3> <center> -<div class="alert alert-info" markdown="1" style="max-width:700px;"> -<strong>ProTips™</strong> -<ul dir="rtl" style="text-align:right;"> -<li>لا تطرح سؤالا لمُجرّد الطرح، بل إطرح سؤالك !</li> -<li><em>تحلّى بالصبر</em>، في بعض الأحيان يمكن أن تمر بضع دقائق قبل أن يرى أحد المستخدمين سؤالك.</li> -</ul> -</div> -<div dir="rtl"><strong>الإسم المستعار</strong> : <input id="nickname" value="foobar__" type="text"> -</div> -<iframe src="https://kiwiirc.com/client/irc.freenode.org:+6697/?nick=foobar|?&theme=mini#yunohost" style="border:0; width:100%; height:450px;"></iframe> +<strong>الإسم المستعار</strong> : <input id="nickname" value="ynhuser__" type="text"> + +<iframe src="https://kiwiirc.com/nextclient/?settings=7b72a0a81838360686798199ed53624f" style="border:0; width:100%; height:450px;"></iframe> </br> </br> -<div dir="rtl"> <em>ملاحظة : يمكن الإتصال كذلك بغرفة المحادثة باستخدام تطبيق XMPP الخاص بك على العنوان التالي </br> support@conference.yunohost.org </br> -<a target="_blank" href="https://kiwiirc.com/client/irc.freenode.org:+6697/?nick=foobar|?&theme=mini#yunohost">kiwiirc</a> باستخدام freenode على #yunohost IRC أو </br> +<a target="_blank" href="https://kiwiirc.com/nextclient/?settings=7b72a0a81838360686798199ed53624f">kiwiirc</a> باستخدام freenode على #yunohost IRC أو </br> <a target="_blank" href="https://riot.im/app/#/room/#yunohost:matrix.org">Riot</a> باستخدام Matrix أو </br> </em> -</div> </center> -<h3 dir="rtl">... أو إطرح سؤالك في المنتدى !</h3> +<h3>... أو إطرح سؤالك في المنتدى !</h3> -<div dir="rtl"> <center> <button id="goForum" type="button" class="btn btn-success" style="font-weight:bold;"> <span class="glyphicon glyphicon-comment"></span> إنتقل إلى المنتدى @@ -39,7 +43,6 @@ support@conference.yunohost.org </br> <center> <br> <em>يرجى الإبلاغ عن المشاكل على أداة متعقّب الأخطاء الخاصة بالمشروع أو إتصل بالمطوّرين</em><br><br> -</div> <button id="goBugtracker" type="button" class="btn btn-warning" style="font-weight:bold;"> <span class="glyphicon glyphicon-exclamation-sign"></span> أبلِغ عن عِلّة أو خلل </button> @@ -50,7 +53,6 @@ support@conference.yunohost.org </br> </br> </br> <center> -<div dir="rtl"> <em>ملاحظة : يمكن الإتصال كذلك بغرفة التطوير باستخدام تطبيق XMPP الخاص بك على العناوين التالية </br> dev@conference.yunohost.org and apps@conference.yunohost.org</em> </center> diff --git a/pages/03.community/03.help/help.fr.md b/pages/03.community/03.help/help.fr.md new file mode 100644 index 00000000..44b1740d --- /dev/null +++ b/pages/03.community/03.help/help.fr.md @@ -0,0 +1,41 @@ +--- +title: Besoin d'aide ? +template: docs +taxonomy: + category: docs +routes: + default: '/help' +--- + +## Connectez-vous au salon de support + +!!! **ProTips™** +!!! - Don't ask to ask, just ask ! +!!! - *Be patient*, it can take a few minutes before someone sees your messages. + +[center] +<iframe src="https://kiwiirc.com/nextclient/?settings=7b72a0a81838360686798199ed53624f" style="width:100%;height:450px;border:0;display:block"></iframe> +[/center] + +!!! **Note:** ce salon est accessible via +!!! - Matrix (`#freenode_#yunohost:matrix.org` [en utilisant Element](https://app.element.io/#/room/#freenode_yunohost:matrix.org)) +!!! - IRC (`#yunohost` on freenode, [en utilisant Kiwiirc](https://kiwiirc.com/nextclient/?settings=7b72a0a81838360686798199ed53624f&target=blank)) +!!! - XMPP (`support@conference.yunohost.org`) + +## ... or ask on the forum ! + +[center] +[[fa=comment /] Aller sur le forum](https://forum.yunohost.org/?target=_blank&classes=btn,btn-lg,btn-success) +[/center] + +## You've found a bug ? + +!!!! Please report bugs on our bugtracker or contact the developers + +[center] + +[[fa=exclamation-circle /] Rapporter un bug](https://github.com/yunohost/issues/issues?target=_blank&classes=btn,btn-lg,btn-warning) [[fa=comment /] Contacter les développeur.euse.s](https://kiwiirc.com/client/irc.freenode.net/yunohost-dev?target=_blank&classes=btn,btn-lg,btn-warning) + +[/center] + +!!! Note : vous pouvez aussi vous connecter aux salons de discussions dev et apps, voir [la page correspondante](/chat_rooms) diff --git a/help_it.md b/pages/03.community/03.help/help.it.md similarity index 65% rename from help_it.md rename to pages/03.community/03.help/help.it.md index 47534494..0b10d9d2 100644 --- a/help_it.md +++ b/pages/03.community/03.help/help.it.md @@ -1,20 +1,25 @@ -# Cerchi aiuto? +--- +title: Cerchi aiuto? +template: docs +taxonomy: + category: docs +routes: + default: '/help' +--- <h3>Connettiti alla chat di supporto</h3> + +!!! **ProTips™** +!!! - Non c'è bisogno di chiedere se puoi chiedere qualcosa, chiedi e basta ! +!!! - *Sii paziente*, potrebbero servire alcuni minuti prima che qualcuno veda i tuoi messaggi. + <center> -<div class="alert alert-info" markdown="1" style="max-width:700px;"> -<strong>ProTips�</strong> -<ul style="text-align:left;"> -<li>Non chiedere tanto per chiedere, chiedi e basta !</li> -<li><em>Sii paziente</em>, potrebbero servire alcuni minuti prima che qualcuno veda i tuoi messaggi.</li> -</ul> -</div> -<iframe src="https://kiwiirc.com/client/irc.freenode.org:+6697/?nick=foobar|?&theme=mini#yunohost" style="border:0; width:100%; height:450px;"></iframe> +<iframe src="https://kiwiirc.com/nextclient/?settings=7b72a0a81838360686798199ed53624f" style="width:100%;height:450px;border:0;display:block"></iframe> </br> </br> -<em>Nota : questa stanza e disponibile via IRC (#yunohost su freenode - <a href="https://kiwiirc.com/client/irc.freenode.org:+6697/?nick=foobar|?&theme=mini#yunohost">usando kiwiirc</a>), via XMPP <small>(support@conference.yunohost.org)</small>, o Matrix <small>(#freenode_#yunohost:matrix.org - <a target="_blank" href="https://riot.im/app/#/room/#yunohost:matrix.org">usando Riot</a>)</small></em> +<em>Nota : questa stanza e disponibile via IRC (#yunohost su freenode - <a href="https://kiwiirc.com/nextclient/?settings=7b72a0a81838360686798199ed53624f">usando kiwiirc</a>), via XMPP <small>(support@conference.yunohost.org)</small>, o Matrix <small>(#freenode_#yunohost:matrix.org - <a target="_blank" href="https://riot.im/app/#/room/#yunohost:matrix.org">usando Riot</a>)</small></em> </center> <h3>... o chiedi nel forum !</h3> diff --git a/pages/03.community/03.help/help.md b/pages/03.community/03.help/help.md new file mode 100644 index 00000000..a2722496 --- /dev/null +++ b/pages/03.community/03.help/help.md @@ -0,0 +1,41 @@ +--- +title: Looking for help? +template: docs +taxonomy: + category: docs +routes: + default: '/help' +--- + +## Connect to the support chatroom + +!!! **ProTips™** +!!! - Don't ask to ask, just ask ! +!!! - *Be patient*, it can take a few minutes before someone sees your messages. + +[center] +<iframe src="https://kiwiirc.com/nextclient/?settings=7b72a0a81838360686798199ed53624f" style="width:100%;height:450px;border:0;display:block"></iframe> +[/center] + +!!! **Note:** this room is available via +!!! - Matrix (`#freenode_#yunohost:matrix.org` [using Element](https://riot.im/app/#/room/#yunohost:matrix.org?target=_blank)) +!!! - IRC (`#yunohost` on freenode, [using kiwiirc](https://kiwiirc.com/nextclient/?settings=7b72a0a81838360686798199ed53624f&target=blank)) +!!! - XMPP (`support@conference.yunohost.org`) + +## ... or ask on the forum ! + +[center] +[[fa=comment /] Go to the forum](https://forum.yunohost.org/?target=_blank&classes=btn,btn-lg,btn-success) +[/center] + +## You've found a bug ? + +!!!! Please report bugs on our bugtracker or contact the developers + +[center] + +[[fa=exclamation-circle /] Report a bug](https://github.com/yunohost/issues/issues?target=_blank&classes=btn,btn-lg,btn-warning) [[fa=comment /] Contact the developers](https://kiwiirc.com/client/irc.freenode.net/yunohost-dev?target=_blank&classes=btn,btn-lg,btn-warning) + +[/center] + +!!! Note : you can also connect to the dev and apps chatrooms, see [the corresponding page](/chat_rooms) diff --git a/faq_de.md b/pages/03.community/04.faq/faq.de.md similarity index 86% rename from faq_de.md rename to pages/03.community/04.faq/faq.de.md index a2640231..5a066f24 100644 --- a/faq_de.md +++ b/pages/03.community/04.faq/faq.de.md @@ -1,4 +1,11 @@ -# Häufig gestellte Fragen +--- +title: Häufig gestellte Fragen +template: docs +taxonomy: + category: docs +routes: + default: '/faq' +--- #### Unter welcher Lizenz wird YunoHost angeboten ? @@ -20,11 +27,11 @@ Wir bieten eine Software an, die es für jeden möglichst einfach machen soll, e #### Aber was *macht* YunoHost überhaupt ? -YunoHost könnte einen Distribution oder ein Betriebssystem genannt werden, aber es ist eigentlich "nur" eine Ebene, die über Debian betrieben wird und welche die meiste, schwierige Arbeit für Sie übernimmt. +YunoHost könnte eine Distribution oder ein Betriebssystem genannt werden, aber es ist eigentlich "nur" eine Ebene, die über Debian betrieben wird und welche die meiste, schwierige Arbeit für Sie übernimmt. -Zum Beispiel, wenn Sie Wordpress installieren möchten, müssten Sie einige Befehle eintippen, um Benutzer zu generieren, einen Webserver einrichten, einen SQL Server einrichten, das Wordpress Archiv herunterladen, entpacken, den Webserver kofigurieren, die SQL Datenbank konfigurieren und schließlich Wordpress einrichten. YunoHost übernimmt all das für Sie, zähmt das technische Chaos und "tippt alle Befehle für Sie", sodass Sie sich auf das konzentrieren können, was wirklich wichtig ist. +Zum Beispiel, wenn Sie Wordpress installieren möchten, müssten Sie einige Befehle eintippen, um Benutzer zu generieren, einen Webserver einrichten, einen SQL Server einrichten, das Wordpress Archiv herunterladen, entpacken, den Webserver konfigurieren, die SQL Datenbank konfigurieren und schließlich Wordpress einrichten. YunoHost übernimmt all das für Sie, zähmt das technische Chaos und "tippt alle Befehle für Sie", sodass Sie sich auf das konzentrieren können, was wirklich wichtig ist. -Mehr Informationen finden Sie [hier](whatsyunohost) ! +Mehr Informationen finden Sie [hier](/whatsyunohost) ! #### Kann ich meine eigene, persönliche Internetseite mit YunoHost betreiben ? @@ -63,7 +70,7 @@ Wenn Ihnen das möglich ist, können Sie auch gerne Sachspenden leisten (ein Tei #### Wie kann ich zum Projekt beitragen ? -Es gibt viele Wege [zum Projekt beizutragen](contribute) :). +Es gibt viele Wege [zum Projekt beizutragen](/contribute) :). Zögern Sie nicht, mit uns über Ihre Ideen zu sprechen! @@ -72,7 +79,7 @@ Es ist ein weit verbreitetes Missverständnis, dass Neulinge bei offenen Softwar #### Was sind YunoHost organisatorische Grundsätze ? -Das beschreiben wir in [diesem Dokument](project_organization) :). +Das beschreiben wir in [diesem Dokument](/project_organization) :). #### Werdet ihr YunoHosts für [Lieblingsdistribution hier einfügen] portieren ? @@ -102,7 +109,7 @@ Mittellange Antwort: Früher wurden die Apps in .deb gepackt. Was für ein Albtr <p>Es hat sich herausgestellt, dass das Packen für YunoHost einen leicht anderen Zweck erfüllt als das Erstellen klassischer Pakete wie .deb. Debian Pakete haben nur den Anspruch Dateien, Befehle, Programme und Dienste auf dem System zu installieren. Es bleibt oft an Ihnen diese richtig zu konfigurieren, weil es einfach keinen standardisierte Server-Konfiguration gibt. Typischerweise erfordern Web-Apps einen sehr hohen Konfigurationsaufwand, weil sie auf dem Webserver und einer Datenbank (und dem single sign-on) aufbauen.</p> -<p>YunoHost richtet Konzepte auf höchster Ebene ein (Apps, Domain-Namen, Benutzer, ...) und definiert eine standardmäßige Einrichtung (Nginx, Postfix, Metronome, SSOwat, ...) und kann deshalb die Konfiguration für den Anwender übernehmen.</p> +<p>YunoHost richtet Konzepte auf höchster Ebene ein (Apps, Domain-Namen, Benutzer...) und definiert eine standardmäßige Einrichtung (NGINX, Postfix, Metronome, SSOwat...) und kann deshalb die Konfiguration für den Anwender übernehmen.</p> <p>Wer trotzdem glaubt, man könne deb Pakete dazu bringen, all dies zu leisten, möge sich die vorherige Antwort anschauen.</p> </div> diff --git a/faq_fr.md b/pages/03.community/04.faq/faq.fr.md similarity index 77% rename from faq_fr.md rename to pages/03.community/04.faq/faq.fr.md index 5b9d49ca..6aa06f9c 100644 --- a/faq_fr.md +++ b/pages/03.community/04.faq/faq.fr.md @@ -1,4 +1,11 @@ -# Foire aux questions +--- +title: Foire aux questions +template: docs +taxonomy: + category: docs +routes: + default: '/faq' +--- #### Sous quelle licence est distribué YunoHost ? @@ -11,36 +18,26 @@ Les applications et leurs paquets ont leurs licences respectives. #### Quel est l’objectif de YunoHost ? -Nous pensons que la décentralisation d’Internet, et la reprise du contrôle et -de la responsabilité des données et services par les citoyens est un enjeu -crucial pour garantir une société libre et démocratique. +Nous pensons que la décentralisation d’Internet, et la reprise du contrôle et de la responsabilité des données et services par les citoyens est un enjeu crucial pour garantir une société libre et démocratique. Le projet YunoHost cherche à démocratiser l’auto-hébergement. -Nous fournissons un logiciel qui cherche à rendre simple le fait de gérer et -d’administrer un serveur soi-même, en minimisant les compétences et le temps -requis. +Nous fournissons un logiciel qui cherche à rendre simple le fait de gérer et d’administrer un serveur soi-même, en minimisant les compétences et le temps requis. #### Mais qu’est-ce que ça fait *vraiment* ? -YunoHost peut être appelé une distribution ou un système d’exploitation, mais -dans les faits, c’est une « simple » sur-couche à Debian, qui gère les -manipulations pénibles à votre place. +YunoHost peut être appelé une distribution ou un système d’exploitation, mais dans les faits, c’est une « simple » sur-couche à Debian, qui gère les manipulations pénibles à votre place. -Par exemple, pour installer un WordPress à la main, il vous faudrait taper -toute une série de commandes pour créer des utilisateurs, mettre en place un -serveur web, mettre en place un serveur SQL, télécharger l’archive de WordPress, -la décompresser, configurer le serveur web, configurer la base de données SQL, et finalement configurer WordPress. YunoHost gère toute cette partie technique et « tape les commandes à votre place », pour que vous puissiez vous concentrer sur ce qui compte vraiment. +Par exemple, pour installer un WordPress à la main, il vous faudrait taper toute une série de commandes pour créer des utilisateurs, mettre en place un serveur web, mettre en place un serveur SQL, télécharger l’archive de WordPress, la décompresser, configurer le serveur web, configurer la base de données SQL, et finalement configurer WordPress. YunoHost gère toute cette partie technique et « tape les commandes à votre place », pour que vous puissiez vous concentrer sur ce qui compte vraiment. -Plus d’informations sur [cette page](whatsyunohost) ! +Plus d’informations sur [cette page](/whatsyunohost) ! #### Puis-je gérer mon propre site web avec YunoHost ? Oui ! Il faut regarder du côté de [cette app](https://github.com/YunoHost-Apps/my_webapp_ynh). -Elle fournit une « coquille vide » : après l’installation, il suffit d’envoyer vos fichiers (via SSH/SCP ou SFTP) au bon endroit. Il est aussi possible -d’avoir du PHP et une base de donnée SQL si besoin. +Elle fournit une « coquille vide » : après l’installation, il suffit d’envoyer vos fichiers (via SSH/SCP ou SFTP) au bon endroit. Il est aussi possible d’avoir du PHP et une base de donnée SQL si besoin. #### Peut-on héberger plusieurs sites indépendants avec des noms de domaines différents ? @@ -72,21 +69,15 @@ Si vous le pouvez, vous pouvez aussi faire des contributions en nature (une part #### Comment puis-je contribuer au projet ? -Il existe [plusieurs façons de contribuer](contribute) :). +Il existe [plusieurs façons de contribuer](/contribute) :). N’hésitez pas à venir nous parler de vos idées ! -Une idée répandue parmi les nouveaux contributeurs aux logiciels libres est -de ne pas être « assez compétent ». En pratique, croyez-le, personne n’est -compétent :). Ce qui compte vraiment est : [d’aimer ce que vous faites](https://www.youtube.com/watch?v=zIbR5TAz2xQ&t=113s), -être sympathique avec les autres êtres humains du projet, être patient et têtu -avec les machines, et avoir du temps libre. À part ça, juste faire ce que vous -pouvez, c’est déjà trop cool ! - +Une idée répandue parmi les nouveaux contributeurs aux logiciels libres est de ne pas être « assez compétent ». En pratique, croyez-le, personne n’est compétent :). Ce qui compte vraiment est : [d’aimer ce que vous faites](https://www.youtube.com/watch?v=zIbR5TAz2xQ&t=113s), être sympathique avec les autres êtres humains du projet, être patient et têtu avec les machines, et avoir du temps libre. À part ça, juste faire ce que vous pouvez, c’est déjà trop cool ! #### Quel est le modèle politique de YunoHost ? -Il est décrit dans [ce document](project_organization) :). +Il est décrit dans [ce document](/project_organization) :). #### Pouvez-vous porter YunoHost sur [ma distro préférée] ? @@ -115,7 +106,7 @@ Réponse moyenne : Par le passé, les apps étaient gérées via des .deb. C’ <p>Il se trouve que l’objectif des paquets d’application YunoHost est subtilement différent de celui des paquets traditionnels (comme les .deb de Debian) qui remplissent le rôle d’installer des éléments bas-niveau tels que des fichiers, commandes, programmes ou services sur le système. Il est à la charge de l’administrateur de les configurer ensuite proprement, simplement parce qu’il n’existe pas d’environnement standard. Typiquement, les applications web requièrent beaucoup de configuration car elles ont besoin de s’interfacer avec un serveur web et une base de données (et le système de connexion unique / SSO).</p> -<p>YunoHost manipule des abstractions haut-niveau (apps, domaines, utilisateurs…) et définit un environnement standard (Nginx, Postfix, Metronome, SSOwat…) et, grâce à cela, peut gérer la configuration à la place de l’administrateur.</p> +<p>YunoHost manipule des abstractions haut-niveau (apps, domaines, utilisateurs…) et définit un environnement standard (NGINX, Postfix, Metronome, SSOwat...) et, grâce à cela, peut gérer la configuration à la place de l’administrateur.</p> <p>Si vous restez persuadé que l’on peut néanmoins bricoler les paquets .deb pour gérer tout cela, voir les réponses précédentes.</p> </div> diff --git a/faq.md b/pages/03.community/04.faq/faq.md similarity index 66% rename from faq.md rename to pages/03.community/04.faq/faq.md index 48517168..49bf873c 100644 --- a/faq.md +++ b/pages/03.community/04.faq/faq.md @@ -1,5 +1,11 @@ -# Frequently Asked Questions - +--- +title: Frequently Asked Questions +template: docs +taxonomy: + category: docs +routes: + default: '/faq' +--- #### Under which license is YunoHost distributed? @@ -12,38 +18,24 @@ Applications and applications packages have their own licenses. #### What's YunoHost goal? -We believe that decentralizing the Internet, and empowering people to take control and -responsibility back over their own data and services, is a crucial issue to guarantee -a free and democratic society. +We believe that decentralizing the Internet, and empowering people to take control and responsibility back over their own data and services, is a crucial issue to guarantee a free and democratic society. The YunoHost project aims to democratize self-hosting. -It provides a software that aims to make it easy for people to run and -administrate their own server, with minimal knowledge and required time. +It provides a software that aims to make it easy for people to run and administrate their own server, with minimal knowledge and required time. #### But what does YunoHost exactly *do*? -YunoHost may be called a distribution or an operating system, but it's actually -"just" a simple layer added over the top of Debian, which does most of the hard -work for you. +YunoHost may be called a distribution or an operating system, but it's actually "just" a simple layer added over the top of Debian, which does most of the hard work for you. -For instance, if you wanted to install Wordpress, you would need to type a bunch -of commands to create some users, setup a web server, setup a SQL server, -download the Wordpress archive, uncompress it, configure the web server, -configure the SQL database, and finally configure Wordpress. YunoHost handles -the technical details and "types all these commands for you", so that you can focus -on what really matters. +For instance, if you wanted to install WordPress, you would need to type a bunch of commands to create some users, setup a web server, setup a SQL server, download the WordPress archive, uncompress it, configure the web server, configure the SQL database, and finally configure WordPress. YunoHost handles the technical details and "types all these commands for you", so that you can focus on what really matters. -More info on [this page](whatsyunohost) ! +More info on [this page](/whatsyunohost)! #### Can I host my own personal website with YunoHost? -Yes! Have a look at the [Custom Web app](https://github.com/YunoHost-Apps/my_webapp_ynh). -It provides an "empty shell" : after installing it, just upload your files -(via SSH/SCP or SFTP) to the right location. You can have PHP and a SQL database -if you need. - +Yes! Have a look at the [Custom Web app](https://github.com/YunoHost-Apps/my_webapp_ynh). It provides an "empty shell" : after installing it, just upload your files (via SSH/SCP or SFTP) to the right location. You can have PHP and a SQL database if you need. #### Can I host many independent websites with different domain names? @@ -57,45 +49,34 @@ The [SSO](https://github.com/Kloadut/SSOwat/) (single sign-on) cannot properly a #### What's YunoHost's business model? -At the moment, YunoHost is maintained only by volunteers working in their free -time. Basically no money is involved in the project (apart from server fees -or stickers :P). +At the moment, YunoHost is maintained only by volunteers working in their free time. Basically no money is involved in the project (apart from server fees or stickers :P). -Considering that a few contributors are investing a large amount of time in the -project, we are thinking about ways to make the project sustainable. +Considering that a few contributors are investing a large amount of time in the project, we are thinking about ways to make the project sustainable. -This could be achieved via donations, grants, and a few contributors -have professional activities related to YunoHost. +This could be achieved via donations, grants, and a few contributors have professional activities related to YunoHost. #### Can I donate to the project? -Yes, you can! YunoHost needs money to pay servers and domain names. We would -also like contributors to be able to continue contributing rather than look for -jobs elsewhere. +Yes, you can! YunoHost needs money to pay servers and domain names. We would also like contributors to be able to continue contributing rather than look for jobs elsewhere. You can donate using [our donation interface](https://donate.yunohost.org) -If you can, you can also make in-kind contributions, like servers (some of our -infrastructure relies on servers from a few associations). +If you can, you can also make in-kind contributions, like servers (some of our infrastructure relies on servers from a few associations). #### How can I contribute to the project? -There are [many ways to contribute](contribute) :). +There are [many ways to contribute](/contribute) :). Don't hesitate to come talk to us about your ideas! -A common misconception for newcomers in free software projects is to think that -they are "not skilled enough". In practice, nobody is "skilled" :). What really -matter is : [liking what you do](https://www.youtube.com/watch?v=zIbR5TAz2xQ&t=113s), -being friendly with other human beings, being patient and stubborn with machines, -and having some free time. Other than that, just doing what you can is already awesome! +A common misconception for newcomers in free software projects is to think that they are "not skilled enough". In practice, nobody is "skilled" :). What really matter is: [liking what you do](https://www.youtube.com/watch?v=zIbR5TAz2xQ&t=113s), being friendly with other human beings, being patient and stubborn with machines, and having some free time. Other than that, just doing what you can is already awesome! #### What's YunoHost's political model? -It is described in [this document](project_organization) :). +It is described in [this document](/project_organization) :). #### Will you port YunoHost to [insert favorite distro]? @@ -112,7 +93,7 @@ Short answer: No. We don't have the energy for it and this is irrelevant. </div> -#### I checked how apps packaging work. Why are you reinventing [insert favorite package format] ? +#### I checked how apps packaging work. Why are you reinventing [insert favorite package format]? Short answer: We are not. @@ -125,7 +106,7 @@ Medium answer: Apps were packaged in .deb in the past. It was a nightmare. We're <p>Turns out, YunoHost apps packaging holds a subtly different purpose than traditional packaging like .deb. Debian packages fulfill the low-level purpose of installing files, commands, programs and services on the system. It is often your duty to configure them properly, simply because there is no standard server setup. Typically, web apps requires a lot of configuration because they rely on a web server and a database (and the single sign-on).</p> -<p>YunoHost manipulates high-level abstractions (apps, domains, users, ...) and defines a standard setup (Nginx, Postfix, Metronome, SSOwat, ...) and, because of this, can handle the configuration for the user.</p> +<p>YunoHost manipulates high-level abstractions (apps, domains, users...) and defines a standard setup (NGINX, Postfix, Metronome, SSOwat...) and, because of this, can handle the configuration for the user.</p> <p>If you still think it's possible to handle everything by fiddling with .deb packages, see previous answers.</p> </div> diff --git a/orga/yunohost_project_organization_fr.md b/pages/03.community/05.project_organization/yunohost_project_organization.fr.md similarity index 92% rename from orga/yunohost_project_organization_fr.md rename to pages/03.community/05.project_organization/yunohost_project_organization.fr.md index d9622c97..c867617c 100644 --- a/orga/yunohost_project_organization_fr.md +++ b/pages/03.community/05.project_organization/yunohost_project_organization.fr.md @@ -1,6 +1,18 @@ -# Organisation du projet YunoHost +--- +title: Organisation du projet +template: docs +taxonomy: + category: docs +routes: + default: '/yunohost_project_organization' + aliases: + - '/project_organization' +--- + +! This page is outdated and should be reworked ## Objectif du document + Ce document a pour objectif de permettre aux contributeurs de se sentir légitimes d’effectuer une contribution dans le projet YunoHost avec un avis collectif. Il vise également à renforcer le projet en le structurant autour de groupes de travail autonomes pouvant résister au départ ou à l'absence de certains contributeurs. Le projet étant communautaire, les décisions prises hâtivement et discrètement par un groupe restreint de contributeurs peuvent entraîner des frustrations postérieures. Pour pallier ce problème, la solution proposée ici est de faire en sorte que les décisions soient prises collectivement, qu’elles soient suffisamment réfléchies, et qu'elles soient documentées ou rendues publiques. @@ -15,7 +27,7 @@ Le but de YunoHost est de rendre accessibles au plus grand nombre l’installati #### Un logiciel libre et communautaire -YunoHost est un logiciel sous licence libre, entièrement communautaire, et reposant sur des applications elles-mêmes communautaires et souvent libres (roundcube, baikal, etc...). +YunoHost est un logiciel sous licence libre, entièrement communautaire, et reposant sur des applications elles-mêmes communautaires et souvent libres (Roundcube, Baïkal, etc.). #### Que chacun peut s'approprier @@ -51,7 +63,7 @@ La constitution de groupes part du constat que YunoHost compte beaucoup de sous- - ##### Groupe Infra/Adminsys - Infrastructure - - Site web (wiki, forum, salon de discussion, redmine, mumble) + - Site web (wiki, forum, salon de discussion, Redmine, Mumble) - Démo - Services - [ip.yunohost.org](https://ip.yunohost.org/) et ip6.yunohost.org @@ -90,7 +102,7 @@ Le Conseil est indépendant des groupes et réunit les contributeurs souhaitant Le choix d'un outil de communication est laissé au Conseil, ses décisions doivent néanmoins être consultables par l'ensemble de la communauté de contributeurs. Pour participer aux votes du Conseil, il faut avoir contribué au projet et avoir obtenu un droit de vote (ou d'entrée) au sein du Conseil. Ce droit est délivré par le Conseil (éventuellement sur demande). Le Conseil est libre à tout moment de modifier le processus de décision. -Être membre du Conseil n'implique pas forcément d'avoir l'ensemble des accès (infrastructure, dépôt etc...). +Être membre du Conseil n'implique pas forcément d'avoir l'ensemble des accès (infrastructure, dépôt etc.). ### Processus de validation des pull requests @@ -100,9 +112,9 @@ Si un consensus ne peut être trouvé au sein d'un groupe en suivant le processu #### 1. Proposition -N'importe quel contributeur peut proposer une pull request (abrégée PR dans la suite) dans les divers dépôts liés au projet YunoHost (core, apps, infra, ...). +N'importe quel contributeur peut proposer une pull request (abrégée PR dans la suite) dans les divers dépôts liés au projet YunoHost (core, apps, infra...). -L'auteur est vivement encouragé à décrire sa proposition en donnant le maximum des informations +L'auteur est vivement encouragé à décrire sa proposition en donnant le maximum des informations pertinentes. Le groupe peut, à cette fin, proposer un modèle des informations à inclure, comme par exemple : - status actuel de la PR (ex. : non terminé, en attente de revues, choix techniques à faire...) @@ -112,17 +124,17 @@ inclure, comme par exemple : L'auteur est vivement encouragé à respecter les bonnes pratiques suivantes : - une PR doit concerner exclusivement un sujet précis. Par exemple, elle ne doit pas à la fois résoudre un bug et ajouter une fonctionnalité (à moins que l'un implique l'autre) ; -- avant de débuter l'implémentation d'une fonctionnalité qui fait intervenir des choix de conception (nom et format de commande ou d'option, nouvelle API, interface utilisateur, ...), discuter en amont de manière informelle avec le groupe pour s'assurer que l'implémentation imaginée convienne au plus grand nombre et reste dans l'esprit du projet ; +- avant de débuter l'implémentation d'une fonctionnalité qui fait intervenir des choix de conception (nom et format de commande ou d'option, nouvelle API, interface utilisateur...), discuter en amont de manière informelle avec le groupe pour s'assurer que l'implémentation imaginée convienne au plus grand nombre et reste dans l'esprit du projet ; - nommer sa PR avec un titre explicite, et la branche associée avec un nom explicite ; -- donner les références vers d'autres éléments liés à la PR (rapport de bug sur le bugtracker, message sur le forum, ...) +- donner les références vers d'autres éléments liés à la PR (rapport de bug sur le bugtracker, message sur le forum...) Une PR peut être créée même si son auteur juge qu'elle n'est pas encore terminée. Dans ce cas, il doit déclarer explicitement dans le fil de discussion de la PR lorsqu'il juge la PR prête. Cela n'empêche pas les autres contributeurs d'émettre des avis sur la PR pendant ce temps. Il appartient aussi à l'auteur de la PR de juger de son importance. (Ce jugement pourra cependant être contesté par les autres membres du groupe concerné par la PR.) Les niveaux d'importance utilisés sont les suivants : - **micro** : concerne uniquement un détail de forme et/ou qui ne nécessite pas d'être débattue et testée. Elle doit être facilement réversible. -- **mineure** : impacte de manière légère le projet (e.g. refactoring d'une petite partie de code, réparation d'un bug, ...) -- **moyenne** : impacte de manière significative l'architecture d'une partie du code (e.g. refactoring de tout un aspect ou de tout un fichier, ajout d'une fonctionnalité importante, sortie d'une version testing, ...) -- **majeure** : impacte lourdement l'ensemble du projet (e.g. migration d'une dépendance critique, changement de version de Debian, sortie d'une version stable, ...) +- **mineure** : impacte de manière légère le projet (e.g. refactoring d'une petite partie de code, réparation d'un bug...) +- **moyenne** : impacte de manière significative l'architecture d'une partie du code (e.g. refactoring de tout un aspect ou de tout un fichier, ajout d'une fonctionnalité importante, sortie d'une version testing...) +- **majeure** : impacte lourdement l'ensemble du projet (e.g. migration d'une dépendance critique, changement de version de Debian, sortie d'une version stable...) #### 2. Revue et validation collective @@ -131,7 +143,7 @@ Il appartient aussi à l'auteur de la PR de juger de son importance. (Ce jugemen Une fois la PR déclarée comme terminée, les contributeurs sont invités à donner leurs avis, relire et tester les changements proposés pour les valider. Lorsque des bugs ou des implémentations mauvaises ou incomplètes sont trouvées, les relecteurs rapportent cordialement le problème à l'auteur de la PR sur le fil de discussion. Si le problème trouvé est simple à corriger (e.g. typo ou détail de forme), le relecteur est encouragé à amender la PR pour corriger le problème lui-même. Sinon, l'auteur fait de son mieux pour corriger les problèmes soulevés. -Les relecteurs rapportent également le degré de relecture et de tests effectués (c.f. liste ci-dessous). Selon l'importance de la PR (mineure, moyenne ou majeure), différents quotas de tests et approbations sont à remplir pour que celle-ci soit validée. Les relecteurs peuvent valider une fois chaque type de relecture/test nécessaire (par exemple, un relecteur peut donner un point d'accord sur le principe, un autre point de relecture en diagonale, et un autre point de test dans des cas simples.). L'auteur de la PR ne compte pas dans ces quotas de validation. La proposition doit aussi passer les tests automatiques disponibles dans le groupe (CI, tests unitaires/fonctionnels, linter, ...). +Les relecteurs rapportent également le degré de relecture et de tests effectués (c.f. liste ci-dessous). Selon l'importance de la PR (mineure, moyenne ou majeure), différents quotas de tests et approbations sont à remplir pour que celle-ci soit validée. Les relecteurs peuvent valider une fois chaque type de relecture/test nécessaire (par exemple, un relecteur peut donner un point d'accord sur le principe, un autre point de relecture en diagonale, et un autre point de test dans des cas simples.). L'auteur de la PR ne compte pas dans ces quotas de validation. La proposition doit aussi passer les tests automatiques disponibles dans le groupe (CI, tests unitaires/fonctionnels, linter...). | | **Mineure** | **Moyenne** | **Majeure** | |-----------------------------------|-------------|--------------|-------------| @@ -148,7 +160,7 @@ Si l'auteur ne fait pas parti du groupe concerné par la PR, tous ces quotas son Une fois les quotas de relecture remplis, et si aucun refus n'a été prononcé et qu'aucune demande de changement n'est en attente, n'importe quel membre du groupe peut alors déclarer et marquer la PR comme "prête à être mergée". -Pendant une durée de 3 jours suivant cette déclaration, les membres du groupe peuvent encore relire, demander des changements ou émettre un refus vis-à-vis de la PR. Dans ce cas, le merge est interrompu et le processus retourne à la partie 2). Pour les PRs moyennes et majeures, la durée est augmentée jusqu'à ce qu'il se soit écoulé au moins une semaine par rapport au moment où la PR a été déclarée comme prête par son auteur. +Pendant une durée de 3 jours suivant cette déclaration, les membres du groupe peuvent encore relire, demander des changements ou émettre un refus vis-à-vis de la PR. Dans ce cas, le merge est interrompu et le processus retourne à la partie 2. Pour les PRs moyennes et majeures, la durée est augmentée jusqu'à ce qu'il se soit écoulé au moins une semaine par rapport au moment où la PR a été déclarée comme prête par son auteur. À l'issue de cette durée, n'importe quel membre du groupe peut merger la PR. Lorsque celle-ci comporte plusieurs commits, il est recommandé d'utiliser la fonction "squash and merge" pour garder l'historique de commit propre. @@ -170,7 +182,7 @@ Une PR peut être développée par plusieurs personnes. Chacun est invité à y Si ces commits sont conséquents, dans ce cas on peut prendre **partiellement** en compte l'avis des auteurs dans les quotas de relectures et de tests. -Exemple: si une PR est écrite par A et B (50/50), A et B pourront relire le code de l'autre. Dans ce cas, on pourra par exemple compter une relecture pour ces 2 relectures partielles. +Exemple : si une PR est écrite par A et B (50/50), A et B pourront relire le code de l'autre. Dans ce cas, on pourra par exemple compter une relecture pour ces 2 relectures partielles. ##### Validation "allégé" en cas de manque de relecteurs @@ -255,14 +267,14 @@ Cette partie liste les kits de droits d’administration pour les différents gr ## Décisions à venir pour les groupes ### Conseil -- Faut-il élire les membres du Conseil plutôt que de les coopter ? Risque de se transformer en "campagne politique"! +- Faut-il élire les membres du Conseil plutôt que de les coopter ? Risque de se transformer en "campagne politique" ! - Faut-il limiter l'ouverture des groupes d'intérêts par cooptation comme pour le Conseil ? - Proposition de changer Conseil en Collégiale -- Migrer le serveur d’infrastructure du projet sous YunoHost. (avec apps déjà packagées pad, gogs, mumble?) +- Migrer le serveur d’infrastructure du projet sous YunoHost. (avec apps déjà packagées pad, Gogs, Mumble?) - Nouveau système pour la documentation - Amélioration de la documentation - Migration du serveur XMPP -- Hébergement de notre forge git +- Hébergement de notre forge Git - Revoir système de build : stable <— testing <— branches - Gel de nohost.me et question de l'abandon des services @@ -271,7 +283,7 @@ Cette partie liste les kits de droits d’administration pour les différents gr - Chaque ticket fait l'objet d'une branche et d'un ticket, tu fais une pull/merge request, la communauté vérifie que ça fonctionne, une décision est prise d'intégrer. ### Groupe Apps - - Pour les apps communautaires, les issues sont bien sur Github, les discussions sur le forum + - Pour les apps communautaires, les issues sont bien sur GitHub, les discussions sur le forum ### Groupe Communication - Rapport de bug à partir du forum @@ -294,7 +306,6 @@ Cette partie liste les kits de droits d’administration pour les différents gr - Rencontres à des évènements. - Réunions hebdomadaires Mumble. - [Forum](https://forum.yunohost.org). -- Listes de diffusion : [contrib](https://list.yunohost.org/cgi-bin/mailman/listinfo/contrib) et [apps](https://list.yunohost.org/cgi-bin/mailman/listinfo/apps) - [Bugtracker Redmine](https://dev.yunohost.org). -- Forge git pour la review de code : [YunoHost](https://github.com/YunoHost) [YunoHost-Apps](https://github.com/YunoHost-Apps). +- Forge Git pour la review de code : [YunoHost](https://github.com/YunoHost) [YunoHost-Apps](https://github.com/YunoHost-Apps). - [Salons de discussions XMPP](https://yunohost.org/#/chat_rooms_fr) diff --git a/orga/yunohost_project_organization.md b/pages/03.community/05.project_organization/yunohost_project_organization.md similarity index 98% rename from orga/yunohost_project_organization.md rename to pages/03.community/05.project_organization/yunohost_project_organization.md index 4fdfe208..89b046e7 100644 --- a/orga/yunohost_project_organization.md +++ b/pages/03.community/05.project_organization/yunohost_project_organization.md @@ -1,4 +1,15 @@ -# YunoHost project organisation +--- +title: Project organisation +template: docs +taxonomy: + category: docs +routes: + default: '/yunohost_project_organization' + aliases: + - '/project_organization' +--- + +! This page is outdated and should be reworked ## Document objective @@ -17,7 +28,7 @@ The goal of YunoHost is to make accessible to the largest number of people, the #### A free and community-based software -YunoHost is a software under free licence, fully community-based and based on applications which are themselves community-based and often free (roundcube, baikal, etc.) +YunoHost is a software under free licence, fully community-based and based on applications which are themselves community-based and often free (Roundcube, baïkal, etc.) #### That everyone can appropriate @@ -52,7 +63,7 @@ Groups are structured as a result of the fact that YunoHost counts many sub-proj - ##### Infra/Sysadmin Group - Infrastructure - - Website (wiki, forum, chat room, redmine, mumble) + - Website (wiki, forum, chat room, redmine, Mumble) - Demo - Services - [ip.yunohost.org](https://ip.yunohost.org/) and ip6.yunohost.org @@ -62,8 +73,7 @@ Groups are structured as a result of the fact that YunoHost counts many sub-proj - [yunopaste](http://paste.yunohost.org/) - ##### Apps Group - - Official apps - - Community-based apps + - apps.json list - App development tools (package_checker, package linter) - ##### Communication Group @@ -319,7 +329,6 @@ This part list administration rights for differents groups of YunoHost project: - Get-togethers at events - Weekly Mumble meetings - [Forum](https://forum.yunohost.org). -- Mailing lists: [contrib](https://list.yunohost.org/cgi-bin/mailman/listinfo/contrib) and [apps](https://list.yunohost.org/cgi-bin/mailman/listinfo/apps) - [Bugtracker Redmine](https://dev.yunohost.org). - Git Forge for code reviews: [YunoHost](https://github.com/YunoHost) [YunoHost-Apps](https://github.com/YunoHost-Apps). - [XMPP chat rooms](https://yunohost.org/#/chat_rooms) diff --git a/pages/03.community/06.project_sponsors/sponsors_partners.fr.md b/pages/03.community/06.project_sponsors/sponsors_partners.fr.md new file mode 100644 index 00000000..ec7d13ad --- /dev/null +++ b/pages/03.community/06.project_sponsors/sponsors_partners.fr.md @@ -0,0 +1,22 @@ +--- +title: Mécénes et partenaires +template: docs +taxonomy: + category: docs +routes: + default: '/sponsors_partners' +--- + +Afin d'avancer et de faire fonctionner le projet, en plus du travail des bénévoles et des dons, YunoHost bénéficie du soutien de mécènes et de partenaires. + +Une liste des mécènes de YunoHost, fournissant l'infrastructure et des services aux projets : +- [GITOYEN](https://gitoyen.net) : association regroupant plusieurs entreprises et associations intervenant comme fournisseur d’infrastructure d’hébergement et d’accès à Internet. +- [GLOBENET](http://www.globenet.org) : association militante, au service de la liberté d’expression, proposant des services Internet. +- [LDN-NET](https://ldn-fai.net/) : association pour la défense d’un Internet libre, neutre et décentralisé dont le moyen d’action principale est d’être un fournisseur d’accès Internet (FAI) assocatif et local. +- [NBS System](https://www.nbs-system.com/): société spécialisée dans l’hébergement, la sécurisation des Clouds, l’infogérance (Systèmes d’information, Applications SaaS, Plateformes web) et les services managés. +- [NLNET](https://nlnet.nl/) : La Fondation NLnet soutient les organisations et les personnes qui contribuent à une société de l'information ouverte. +- [TETANEUTRAL-NET](https://tetaneutral.net/) : fournisseur d'accès à Internet associatif opérant actuellement un réseau radio sur Toulouse et ses environs et un hébergeur. + +Une liste des partenaires de YunoHost : +- [FFDN](https://www.ffdn.org/) : La fédération FDN regroupe des Fournisseurs d'Accès à Internet associatifs se reconnaissant dans des valeurs communes : bénévolat, solidarité, fonctionnement démocratique et à but non lucratif ; défense et promotion de la neutralité du Net. +- [Framasoft](https://framasoft.org/) : association d’éducation populaire, un groupe d’ami·es convaincu·es qu’un monde numérique émancipateur est possible, persuadé·es qu’il adviendra grâce à des actions concrètes sur le terrain et en ligne avec vous et pour vous ! diff --git a/pages/03.community/06.project_sponsors/sponsors_partners.md b/pages/03.community/06.project_sponsors/sponsors_partners.md new file mode 100644 index 00000000..7cb0e06e --- /dev/null +++ b/pages/03.community/06.project_sponsors/sponsors_partners.md @@ -0,0 +1,22 @@ +--- +title: Sponsors and partners +template: docs +taxonomy: + category: docs +routes: + default: '/sponsors_partners' +--- + +In order to advance and make the project works, in addition to the work of volunteers and donations, YunoHost benefits from the support of sponsors and partners. + +Here is a list of YunoHost sponsors, providing infrastructure and services to the project: +- [GITOYEN](https://gitoyen.net): association bringing together several companies and associations acting as a provider of hosting infrastructure and Internet access. +- [GLOBENET](http://www.globenet.org): activist association, at the service of freedom of expression, offering internet services. +- [LDN-NET](https://ldn-fai.net/) : association for the defense of a free, neutral and decentralized Internet whose main means of action is to be an Internet access provider associative and local. +- [NBS System](https://www.nbs-system.com/): company specialized in hosting, securing Clouds, outsourcing (Information Systems, SaaS Applications, Web Platforms) and managed services. +- [NLNET](https://nlnet.nl/): The NLnet Foundation supports organizations and people that contribute to an open information society. +- [TETANEUTRAL-NET](https://tetaneutral.net/): associative Internet access provider currently operating a radio network in Toulouse and its surroundings and a hoster. + +Here is a list of YunoHost partners: +- [FFDN](https://www.ffdn.org/): The FDN federation gathers associative Internet Access Providers who recognize themselves in common values: volunteering, solidarity, democratic functioning and non-profit; defense and promotion of net neutrality. +- [Framasoft](https://framasoft.org/) : popular education association, a group of friends convinced that an emancipatory digital world is possible, convinced that it will happen thanks to concrete actions on the ground and online with you and for you! diff --git a/pages/03.community/07.project_budget/project_budget.fr.md b/pages/03.community/07.project_budget/project_budget.fr.md new file mode 100644 index 00000000..b2b5a3c6 --- /dev/null +++ b/pages/03.community/07.project_budget/project_budget.fr.md @@ -0,0 +1,42 @@ +--- +title: Budget du projet +template: docs +taxonomy: + category: docs +routes: + default: '/project_budget' +--- + +# Budget prévisionnel pour 2019/2020 + +## Revenus attendus + +* Dons via Liberapay : 3000€ +* Subvention de NLNet : 20K€ + +## Dépenses prévues + +* Developpement : 20K€ +* Location Serveur : ~500 € + * VPS Scaleway: 20.33*12: 243.96€/year + * VPS Digital O. (forum): 172.80€/year +* Noms de domaine : ~150 € + * nohost.me : 11.99 €HT/ans + * ynh.fr : 6.99 €HT/ans (doit être confirmé avec frju ?) + * noho.st : ~35 €TTC/ans + * yunohost.org : 13.99 €HT/ans + * yunohost.com : 9.99 €HT/ans + * labriqueinter.net : 12.49 €Ht/ans + * internetcu.be : 17.99 €HT/ans +* Communication : ~400 € + * Stickers : 100€ + * Tracts : 100€ + * T-shirt : 200€ +* Déplacements (ex. : aller aux conférences) : ~700 € + * AG FFDN 2020 : 225€ (en tout) + * Event colibris : 150€ + * FOSDEM ou autre conf : 300€ +* Compte bancaire fees : 7×12 € soit ~100 € +* Brique Camp : 500€ + +**Balance 2020-2021** : +650 € diff --git a/pages/03.community/07.project_budget/project_budget.md b/pages/03.community/07.project_budget/project_budget.md new file mode 100644 index 00000000..19f4e059 --- /dev/null +++ b/pages/03.community/07.project_budget/project_budget.md @@ -0,0 +1,39 @@ +--- +title: Project budget +template: docs +taxonomy: + category: docs +routes: + default: '/project_budget' +--- + +# Estimated budget for 2020/2021 + +## Expected revenues + +* Donations: 3000€/year +* Grant from NLNet: 20K€ + +## Expected expenses + +* Development: 20K€ +* Server renting: 500€ + * VPS Scaleway: 20.33*12: 243.96€/year + * VPS Digital O. (forum): 172.80€/year +* Domain names: ~150€ + * nohost.me: 11.99€HT/year + * ynh.fr: 6.99€HT/year (to be confirmed with frju?) + * noho.st: ~35€ TTC/year + * YunoHost.org: 13.99€HT/year + * YunoHost.com: 9.99€HT/year + * labriqueinter.net: 12.49€HT/year + * internetcu.be: 17.99€HT/year +* Communication: ~400€ +* Travel (e.g. to go to conferences): ~700€ + * AG FFDN 2020: 225€ (en tout) + * Event colibris: 150€ + * FOSDEM ou autre conf: 300€ +* Bank account fees: 7x12€ => ~100€ +* Brique Camp: 500€ + +**Balance 2020-2021**: +650€ diff --git a/communication.md b/pages/03.community/08.project_press/communication.md similarity index 88% rename from communication.md rename to pages/03.community/08.project_press/communication.md index 168ac856..93e0ce5e 100644 --- a/communication.md +++ b/pages/03.community/08.project_press/communication.md @@ -1,4 +1,11 @@ -# Communication +--- +title: Communication +template: docs +taxonomy: + category: docs +routes: + default: '/communication' +--- ## Talks / conf @@ -6,7 +13,7 @@ * (EN) [FOSDEM 2019 - The operating system to build the decentralized Internet](https://cinema.yunohost.support/videos/watch/1eb49594-0283-4a01-8691-3817a3cb31e6) ([slides](https://github.com/YunoHost/yunohost-fosdem-2019)) * (FR) [Capitole du libre 2018 - YunoHost: un des chemins vers la décentralisation - Bram](https://www.youtube.com/watch?v=OEXEStoOYpw) ([slides](https://psycojoker.github.io/yunohost-cdl-2018/)) * (FR) [Journées du logiciel libre 2018 - YunoHost : vers l’auto-hébergement et au-delà - Bram](https://www.videos-libr.es/videos/watch/45b48b1e-1b10-4e09-b29a-a404bd42c5d0) ([slides](https://psycojoker.github.io/yunohost-jdll-2018/)) -* (FR) Ubuntu Party Novembre 2017 - De Framasoft à Yunohost, réapproprions nous le cloud ([slides](https://blog.genma.fr/?De-Framasoft-a-Yunohost-reapproprions-nous-le-cloud)) +* (FR) Ubuntu Party Novembre 2017 - De Framasoft à YunoHost, réapproprions nous le cloud ([slides](https://blog.genma.fr/?De-Framasoft-a-Yunohost-reapproprions-nous-le-cloud)) * (FR) [Capitole du libre 2017 - YunoHost : vers l'auto-hébergement et au-delà - JimboJoe](https://2017.capitoledulibre.org/programme/#yunohost-vers-lauto-hebergement-et-au-dela) ([slides](https://github.com/YunoHost/yunohost-cdl-2017/raw/master/YunoHost-CDL2017.pdf)) * (FR) [PSES 2017 – Construire l’Internet du Futur avec YunoHost – Aleks, ljf](https://data.passageenseine.org/2017/aleks-ljf_internet-futur-yunohost.webm) ([slides](https://data.passageenseine.org/2017/aleks-ljf_internet-futur-yunohost.pdf)) * (FR) [Université de technologie de compiègne 2017 – Agir pour un internet éthique – LJF](http://webtv.utc.fr/watch_video.php?v=O34AA7RBR1AH) @@ -21,10 +28,9 @@ ## Articles / Press review -<a href="https://linuxfr.org/news/yunohost-2-0-l-auto-hebergement-a-portee-de-clic"><img src="/images/Linuxfr.png" width=180></a> -<a href="https://linuxfr.org/news/yunohost-2-0-l-auto-hebergement-a-portee-de-clic"><img src="/images/Linuxfr.png" width=180></a> -<a href="https://www.linux-pratique.com/2016/07/et-si-vous-passiez-a-lauto-hebergement/"><img src="/images/linux-pratique-96.jpg" width=150 /></a> -<a href="http://www.linux-magazine.com/Issues/2018/208/YunoHost"><img src="/images/linux-magazine-208.jpg" width=150 /></a> +[](https://linuxfr.org/news/yunohost-2-0-l-auto-hebergement-a-portee-de-clic) +[](https://www.linux-pratique.com/2016/07/et-si-vous-passiez-a-lauto-hebergement/) +[](https://www.linux-magazine.com/Issues/2018/208/YunoHost) * LinuxFr (french): - [YunoHost 2.0 : self hosting at click range](https://linuxfr.org/news/yunohost-2-0-l-auto-hebergement-a-portee-de-clic) - [Internet cube and YunoHost projects evolutions](https://linuxfr.org/news/evolutions-des-projets-la-brique-internet-et-yunohost-des-versions-2-2-2-4-et-2-5) @@ -34,9 +40,9 @@ - (FR) [Duhaz.fr: Devenir votre propre hébergeur](https://www.duhaz.fr/blog/devenir-votre-propre-h%C3%A9bergeur/) - (FR) [Faimaison.net: au revoir Google, bonjour liberté!](https://www.faimaison.net/actualites/chatons-leprette-mai2019.html) - (FR) [Tineternet.net: Reprendre la main sur ses données avec l'auto-hébergement](https://www.tinternet.net/article/2019/05/dossier-reprendre-la-main-sur-ses-donnees-avec-lauto-hebergement) -- (DE) [Yunohost Serverinstallation auf Laptop](https://www.giammi.com/2019/04/19/yunohost-serverinstallation-auf-laptop/) -- (FR) [Cenabumix: Retour d’expérience Yunohost sur Raspberry](https://wiki.cenabumix.org/wordpress/2018/03/17/retour-dexperience-yunohost-sur-raspberry/) -- (FR) [Geber.ga: Yunohost, ou l'auto-hébergement à portée de main...](https://www.geber.ga/yunohost-ou-l-auto-hebergement-a-portee-de-main/) +- (DE) [YunoHost Serverinstallation auf Laptop](https://www.giammi.com/2019/04/19/yunohost-serverinstallation-auf-laptop/) +- (FR) [Cenabumix: Retour d’expérience YunoHost sur Raspberry](https://wiki.cenabumix.org/wordpress/2018/03/17/retour-dexperience-yunohost-sur-raspberry/) +- (FR) [Geber.ga: YunoHost, ou l'auto-hébergement à portée de main...](https://www.geber.ga/yunohost-ou-l-auto-hebergement-a-portee-de-main/) - (EN) [Nequalsonelifestyle.com: Self Hosting Without Self Owning](https://www.nequalsonelifestyle.com/2019/05/04/self-hosting-without-self-owning/) - (EN) [Skysilk.com: How to Install YunoHost On a Debian VPS](https://www.skysilk.com/blog/2019/how-to-install-yunohost-on-a-debian-vps/) - (FR) [Alternativelibertaire.org: Auto-hébergement](https://www.alternativelibertaire.org/?Auto-hebergement-1-Un-serveur-a-mon-seul-service) diff --git a/security_team_fr.md b/pages/03.community/09.security_team/security_team.fr.md similarity index 85% rename from security_team_fr.md rename to pages/03.community/09.security_team/security_team.fr.md index a3ae1720..3186cffb 100644 --- a/security_team_fr.md +++ b/pages/03.community/09.security_team/security_team.fr.md @@ -1,4 +1,11 @@ -# Équipe sécurité +--- +title: Équipe sécurité +template: docs +taxonomy: + category: docs +routes: + default: '/security_team' +--- Contactez l'équipe sécurité par email : `security@yunohost.org`. diff --git a/security_team.md b/pages/03.community/09.security_team/security_team.md similarity index 80% rename from security_team.md rename to pages/03.community/09.security_team/security_team.md index a0e1686f..fd97120b 100644 --- a/security_team.md +++ b/pages/03.community/09.security_team/security_team.md @@ -1,4 +1,11 @@ -# Security team +--- +title: Security team +template: docs +taxonomy: + category: docs +routes: + default: '/security_team' +--- Contact the security team by mail: `security@yunohost.org`. @@ -12,4 +19,4 @@ uid YunoHost Security <security@yunohost.org> sub 4096R/446838AF 2016-07-01 ``` -See https://gist.github.com/opi/4496024dc3ff29ab2e068fd57092ab7c or https://twitter.com/yunohost/status/748975105393459200 for other trustable fingerprints \ No newline at end of file +See https://gist.github.com/opi/4496024dc3ff29ab2e068fd57092ab7c or https://twitter.com/yunohost/status/748975105393459200 for other trustable fingerprints diff --git a/pages/03.community/10.ngo/use_case_non-profit_organisations.ca.md b/pages/03.community/10.ngo/use_case_non-profit_organisations.ca.md new file mode 100644 index 00000000..23deee39 --- /dev/null +++ b/pages/03.community/10.ngo/use_case_non-profit_organisations.ca.md @@ -0,0 +1,201 @@ +--- +title: Use cases for NGOs +template: docs +taxonomy: + category: docs +routes: + default: '/use_case_non-profit_organisations' +page-toc: + active: true +--- + +L'objectiu d'aquest document és presentar un cas d'ús específic de [YunoHost](https://yunohost.org) per a organitzacions sense ànim de lucre. + +## Qui + +Organitzacions sense ànim de lucre, ONGs o qualsevol tipus d'associació. + +## Què + +Normalment les organitzacions sense ànim de lucre han de donar alguns serveis públics: + +* Consell d'administració / Comitè director / Voluntàries amb: + * [Correus electrònics](#mails) + * [Calendari](#calendar) + * [Contacte](#contact) + * [Fitxers compartits / Drive](#shared-files) + * [Missatgeria instantània](#instant-communication) + * [Intranet / base de coneixements](#intranet) + * [ERP / Comptabilitat](#erp-accounting) +* Membres amb: + * [Pàgina web pública amb accés privat i individual](#public-web-site) + * [Adhesió](#membership) + * [Inscripció a esdeveniments](#events-registration) + * [Butlletí d'informació](#newsletter-mailing) + * [Fòrum](#forum) +* Públic amb: + * [Pàgina web pública](#public-web-site) + * [Butlletí d'informació](#newsletter-mailing) + +## Quan + +Quan l'organització estigui preparada per a fer el pas. + +## On + +El servidor YunoHost de l'organització pot estar allotjat en diferents llocs: +* Allotjament propi en un servidor, ordinador o Raspberry darrera una connexió ADSL, SDSL o fibra +* Serveis d'allotjament de [Chatons](https://chatons.org), [librehosters](https://framagit.org/librehosters/awesome-librehosters) +* Serveis d'allotjament comercials que ofereixin màquines virtuals Debian + +## Per què + +YunoHost pot cobrir la majoria de necessitats d'una organització sense ànim de lucre i permet tenir el control sobre les dades de l'organització. + + +## Com + +### YunoHost + +YunoHost és una distribució GNU/Linux basada en Debian empaquetada amb programari lliure que automatitza la instal·lació d'un servidor web personal. L'objectiu de YunoHost és permetre a les usuàries allotjar fàcilment els seus propis serveis web al oferir una interfície web en la que es poden instal·lar diferents aplicacions només amb uns quants clics. + + + +YunoHost de base ofereix: +* Un sistema d'aplicacions +* Una interfície web +* Una interfície per línia de comandes (CLI): Moulinette +* Un servidor web: NGINX +* Un servidor DNS: Dnsmasq +* Una base de dades: MariaDB +* Un sistema de còpies de seguretat +* Un SSO: SSOwat +* OpenLDAP +* Correu electrònic: + * SMTP: Postfix + * IMAP & POP3: Dovecot + * Un antispam: rspamd, rmilter +* Un servidor de missatgeria instantània XMPP: Metronome IM + +### Nom de domini + +La primera cosa que s'haurà de tenir per poder instal·lar un servidor YunoHost és un nom de domini. Habitualment el nom de domini el pot oferir el mateix servei d'allotjament. + +### Correus electrònics + +De base, YunoHost ofereix un sistema de correus electrònics disponible utilitzant POP / IMAP / SMTP. +Els comptes de correu electrònic es poden gestionar per mitjà de la interfície web o de la línia de comandes. Els comptes creats es guarden en l'OpenLDAP. + +Es poden instal·lar paquets addicionals per donar més funcionalitats al sistema de correu electrònic de YunoHost: +* Un client web utilitzant [Roundcube](https://github.com/YunoHost-Apps/roundcube_ynh), [Rainloop](https://github.com/YunoHost-Apps/rainloop_ynh) +* ActiveSync utilitzant [Z-Push](https://github.com/YunoHost-Apps/z-push_ynh) +* Un grup de difusió interna utilitzant [Mailman](https://github.com/YunoHost-Apps/mailman_ynh) + +### Calendari + +Per oferir calendaris personals o compartits haureu d'instal·lar: +* [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh) +* [Baikal](https://github.com/YunoHost-Apps/baikal_ynh) + +### Contactes + +Per oferir un sistema de contactes personal haureu d'instal·lar: +* [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh) +* [Baïkal](https://github.com/YunoHost-Apps/baikal_ynh) + +### Fitxers compartits + +Per oferir un sistema de fitxers compartit: carpetes personals i compartides, podeu instal·lar [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh). +Els fitxers estaran disponibles a través d'una interfície web o bé utilitzant un client de sincronització. + +### Missatgeria instantània + +De base YunoHost ofereix un servidor XMPP, pel que podeu instal·lar un client web: [Jappix](https://github.com/YunoHost-Apps/jappix_ynh). + +També podeu instal·lar un servidor matrix: +* El servidor: [Synapse](https://github.com/YunoHost-Apps/synapse_ynh) +* Un client web: [Riot](https://github.com/YunoHost-Apps/riot_ynh) + +### Intranet + +Per a una organització sense ànim de lucre, una bona manera d'implementar una intranet és oferir una wiki interna per a que les usuàries puguin llegir, editar i afegir contingut. Vegeu aquí alguns paquets que permeten implementar una wiki: +* [DokuWiki](https://github.com/YunoHost-Apps/docuwiki_ynh) utilitzant la sintaxi wiki +* [Wiki.js](https://github.com/YunoHost-Apps/wikijs_ynh) utilitzant la sintaxi markdown + +### ERP / Comptabilitat + +Arribats a un cert punt una organització sense ànim de lucre podria necessitar un sistema de comptabilitat / ERP, aquí hi ha dos propostes: +* [OpenERP/Odoo](https://github.com/YunoHost-Apps/libreerp_ynh) +* [Dolibarr](https://github.com/YunoHost-Apps/dolibarr_ynh) + +### Pàgina web pública + +Hi ha múltiples maneres d'implementar una pàgina web pública: +* Un pàgina simple amb HTML, CSS, etc. utilitzant: [Custom Webapp](https://github.com/YunoHost-Apps/my_webapp_ynh) +* Utilitzant un CMS (sistema de gestió de contingut) com [Wordpress](https://github.com/YunoHost-Apps/_ynh), [Drupal](https://github.com/YunoHost-Apps/drupal_ynh) , [Grav](https://github.com/YunoHost-Apps/grav_ynh), [PluXml](https://github.com/YunoHost-Apps/pluxml_ynh) + +Però us proposem una alternativa una mica més potent: [CiviCRM on Drupal 7](https://github.com/YunoHost-Apps/civicrm_drupal7_ynh): +* Drupal és un entorn de treball potent de codi obert per la gestió de contingut +* amb CiviCRM que és un CRM de codi obert per a les organitzacions sense ànim de lucre + +### Adhesió + +Amb CiviCRM podeu tenir adhesions en línia i pagament. + +### Inscripció a esdeveniments + +Amb CiviCRM, podeu posar a disposició una agenda en línia per permetre als membres o al públic inscriure's gratuïtament o pagant. + +### Butlletí d'informació + +La millor manera de gestionar-ho és utilitzar el mòdul de llistes de difusió de CiviCRM. + +### Fòrum + +Hi ha múltiples opcions, tenir un fòrum integrat a Drupal o utilitzar un sistema dedicat com ara [Flarum](https://github.com/YunoHost-Apps/flarum_ynh). + +### Còpies de seguretat + +YunoHost ofereix el seu propi sistema de còpies de seguretat. Abans de cada actualització, YunoHost fa una còpia de seguretat de la versió actual del paquet i la restaura automàticament si falla l'actualització. +Les còpies de seguretat de YunoHost s'emmagatzemen localment a `/home/yunohost.backup/archives`. + +Però per un servidor en producció, còpies de seguretat locals no són suficients, així que s'hauran d'implementar còpies de seguretat alternatives: +* Còpia de seguretat de la màquina virtual si ho permet el sistema d'allotjament. +* [Archivist](https://github.com/YunoHost-Apps/archivist_ynh) és un sistema de còpies de seguretat automàtiques del servidor. Les còpies de seguretat es poden enviar a d'altres llocs, locals o distants. +* [Borg](https://github.com/YunoHost-Apps/borg_ynh) i [Borg Server](https://github.com/YunoHost-Apps/borgserver_ynh) permeten externalitzar les còpies de seguretat. +* [Fallback](https://github.com/YunoHost-Apps/fallback_ynh), si teniu de servidors YunoHost, permet tenir un servidor secundari que pot ser utilitzat en cas que caigui el servidor principal. Aquest servidor secundari permetrà desplegar una còpia del servidor i tornar a posar en marxar YunoHost durant la caiguda. + +### Anar més enllà + +#### Galeria de fotografies federada + +* [Pixelfed](https://github.com/YunoHost-Apps/pixelfed_ynh) + +#### Galeria àudio federada + +* [Reel2Bits](https://github.com/YunoHost-Apps/reel2bits_ynh) +* [Funkwhale](https://github.com/YunoHost-Apps/funkwhale_ynh) + +#### Galeria vídeo federada + +* [PeerTube](https://github.com/YunoHost-Apps/peertube_ynh) + +#### Xarxa social federada + +* [Mastodon](https://github.com/YunoHost-Apps/mastodon_ynh) +* [Pleroma](https://github.com/YunoHost-Apps/pleroma_ynh) +* [Mobilizon](https://github.com/YunoHost-Apps/mobilizon_ynh) + +#### Blog federat + +* [Plume](https://github.com/YunoHost-Apps/plume_ynh) +* [Writefreely](https://github.com/YunoHost-Apps/writefreely_ynh) + +#### Xat + +* [Mattermost](https://github.com/YunoHost-Apps/mattermost_ynh) + +## Conclusió + +YunoHost por cobrir el 99% de les necessitats de les organitzacions sense ànim de lucre, permetent així que recuperin la sobirania i puguin protegir les seves dades, així com escollir les aplicacions que volen utilitzar. +I si n'hi ha alguna que no està disponible, poden [empaquetar-la per YunoHost](/contributordoc), és molt senzill. diff --git a/use_case_non-profit_organisations_fr.md b/pages/03.community/10.ngo/use_case_non-profit_organisations.fr.md similarity index 82% rename from use_case_non-profit_organisations_fr.md rename to pages/03.community/10.ngo/use_case_non-profit_organisations.fr.md index 292fff67..7d217971 100644 --- a/use_case_non-profit_organisations_fr.md +++ b/pages/03.community/10.ngo/use_case_non-profit_organisations.fr.md @@ -1,16 +1,13 @@ -# YunoHost for non-profit - -## Table of Contents -* [Introduction](#introduction) -* [Qui ](#qui) -* [Quoi](#quoi) -* [Quand](#quand) -* [Où](#o-) -* [Pourquoi](#pourquoi) -* [Comment](#comment) -* [Conclusion](#conclusion) - -## Introduction +--- +title: Cas d'usages pour associations +template: docs +taxonomy: + category: docs +routes: + default: '/use_case_non-profit_organisations' +page-toc: + active: true +--- L'objet de ce document est de présenter une utilisation spécifique de [YunoHost](https://yunohost.org/) pour des organisations à but non lucratif. @@ -20,9 +17,9 @@ Organisations à but non lucratif, ONG ou tout type d'association. ## Quoi -Les organisations à but non lucratif doivent généralement fournir différents services à différents publics: +Les organisations à but non lucratif doivent généralement fournir différents services à différents publics : -* Conseil d'administration / Comité directeur / Bénévoles avec: +* Conseil d'administration / Comité directeur / Bénévoles avec : * [Mails](#mails) * [Calendrier](#calendrier) * [Contact](#contact) @@ -30,13 +27,13 @@ Les organisations à but non lucratif doivent généralement fournir différents * [Communication instantanée](#communication-instantan-e) * [Intranet / Base de connaissances](#intranet) * [ERP / Comptabilité](#erp-comptabilit-) -* Membres avec: +* Membres avec : * [Site Web public avec accès privé et individuel](#site-web-public) * [Adhésion](#adh-sion) * [Inscriptions aux événements](#inscriptions-aux-v-nements) * [Mailings](#newsletter-mailing) * [Forum](#forum) -* Public avec: +* Public avec : * [Site Web public](#site-web-public) * [Newsletter](#newsletter-mailing) @@ -65,16 +62,16 @@ YunoHost est une distribution basée sur Debian GNU/Linux qui automatise l’ins YunoHost fournit immédiatement: * Un système d'application -* Une interface web -* Une interface de ligne de commande (CLI): Moulinette -* Un serveur Web : Nginx +* Une interface Web +* Une interface de ligne de commande (CLI) : Moulinette +* Un serveur Web : NGINX * Un serveur DNS : Dnsmasq -* Une base de données: MariaDB +* Une base de données : MariaDB * Un système de sauvegarde -* Un SSO: SSOwat +* Un SSO : SSOwat * OpenLDAP * Email : - * SMTP: Postfix + * SMTP : Postfix * IMAP & POP3 : Dovecot * Un antispam : rspamd, rmilter * Serveur XMPP de messagerie instantanée : Metronome IM @@ -85,7 +82,7 @@ La première chose dont vous aurez besoin pour implémenter un serveur YunoHost ### Mails -De base, YunoHost fournit un système de messagerie disponible en utilisant POP / IMAP / SMTP. +YunoHost fournit par défaut un système de messagerie disponible en utilisant POP / IMAP / SMTP. Les comptes de messagerie seront gérés à l'aide de l'interface Web ou de la ligne de commande. Les comptes créés sont stockés dans OpenLDAP. Des packages supplémentaires peuvent être installés pour fournir davantage de fonctionnalités au système de messagerie YunoHost : @@ -97,13 +94,13 @@ Des packages supplémentaires peuvent être installés pour fournir davantage de Pour fournir des calendriers personnels ou partagés, vous devrez installer : * [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh) -* [Baikal](https://github.com/YunoHost-Apps/baikal_ynh) +* [Baïkal](https://github.com/YunoHost-Apps/baikal_ynh) ### Contact Pour fournir un système de contact personnel, vous devrez installer : * [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh) -* [Baikal](https://github.com/YunoHost-Apps/baikal_ynh) +* [Baïkal](https://github.com/YunoHost-Apps/baikal_ynh) ### Fichiers partagés @@ -112,17 +109,17 @@ Les fichiers seront disponibles à partir d'une interface Web ou à l'aide d'un ### Communication instantanée -De base, YunoHost fournit immédiatement un serveur XMPP pour lequel vous pouvez installer un client Web: [Jappix](https://github.com/YunoHost-Apps/jappix_ynh) +Par défaut, YunoHost fournit immédiatement un serveur XMPP pour lequel vous pouvez installer un client Web : [Jappix](https://github.com/YunoHost-Apps/jappix_ynh) Vous pouvez également installer un serveur Matrix : -* Le serveur: [Synapse](https://github.com/YunoHost-Apps/synapse_ynh) -* Un client web: [Riot](https://github.com/YunoHost-Apps/riot_ynh) +* Le serveur : [Synapse](https://github.com/YunoHost-Apps/synapse_ynh) +* Un client Web : [Element](https://github.com/YunoHost-Apps/element_ynh) ### Intranet Pour une organisation à but non lucratif, un bon moyen de mettre en œuvre un intranet est de fournir un wiki permettant aux utilisateurs internes de lire, éditer et ajouter du contenu. Voici quelques paquets pour implémenter un wiki : -* [DokuWiki](https://github.com/YunoHost-Apps/docuwiki_ynh) using wiki syntax -* [Wiki.js](https://github.com/YunoHost-Apps/wikijs_ynh) using markdown syntax +* [DokuWiki](https://github.com/YunoHost-Apps/docuwiki_ynh) utilisant une syntaxe wiki +* [Wiki.js](https://github.com/YunoHost-Apps/wikijs_ynh) utilisant une syntaxe Markdown ### ERP / Comptabilité @@ -133,12 +130,12 @@ Pour une organisation à but non lucratif, un bon moyen de mettre en œuvre un i ### Site Web Public Il existe plusieurs façons d'implémenter un site Web public : -* Un simple site HTML, CSS, etc... en utilisant : [Custom Webapp](https://github.com/YunoHost-Apps/my_webapp_ynh) -* Utiliser un CMS (système de gestion de contenu) comme [Wordpress](https://github.com/YunoHost-Apps/_ynh), [Drupal](https://github.com/YunoHost-Apps/drupal_ynh) , [Grav](https://github.com/YunoHost-Apps/grav_ynh), [PluXml](https://github.com/YunoHost-Apps/pluxml_ynh) +* Un simple site HTML, CSS, etc. en utilisant : [Custom Webapp](https://github.com/YunoHost-Apps/my_webapp_ynh) +* Utiliser un CMS (système de gestion de contenu) comme [WordPress](https://github.com/YunoHost-Apps/_ynh), [Drupal](https://github.com/YunoHost-Apps/drupal_ynh), [Grav](https://github.com/YunoHost-Apps/grav_ynh), [PluXml](https://github.com/YunoHost-Apps/pluxml_ynh) -Mais nous proposerons quelque chose de plus puissant : [CiviCRM on Drupal 7](https://github.com/YunoHost-Apps/civicrm_drupal7_ynh): +Mais nous proposerons quelque chose de plus puissant : [CiviCRM on Drupal 7](https://github.com/YunoHost-Apps/civicrm_drupal7_ynh) : * Drupal qui est un puissant framework de gestion de contenu -* avec CiviCRM qui est un CRM OpenSource à destination des organisations à but non lucratif +* avec CiviCRM qui est un CRM open source à destination des organisations à but non lucratif #### Adhésion @@ -159,7 +156,7 @@ Vous avez plusieurs choix, avoir un forum intégré dans Drupal ou utiliser un s ### Sauvegarde YunoHost fournit son propre système de sauvegarde. Avant toute mise à niveau de paquet, YunoHost sauvegarde la version actuelle du paquet et la restaure automatiquement si la mise à niveau échoue. -Les sauvegardes Yunohost sont stockées localement dans `/home/yunohost.backup/archives`. +Les sauvegardes YunoHost sont stockées localement dans `/home/yunohost.backup/archives`. Mais pour la production, la sauvegarde stockée localement ne suffit pas, vous devez donc mettre en œuvre des stratégies de sauvegarde supplémentaires : * Sauvegarde de la machine virtuelle si fournie par le système d'hébergement. diff --git a/use_case_non-profit_organisations.md b/pages/03.community/10.ngo/use_case_non-profit_organisations.md similarity index 86% rename from use_case_non-profit_organisations.md rename to pages/03.community/10.ngo/use_case_non-profit_organisations.md index bc488f75..0b585731 100644 --- a/use_case_non-profit_organisations.md +++ b/pages/03.community/10.ngo/use_case_non-profit_organisations.md @@ -1,18 +1,15 @@ -# YunoHost for non-profit +--- +title: Use cases for NGOs +template: docs +taxonomy: + category: docs +routes: + default: '/use_case_non-profit_organisations' +page-toc: + active: true +--- -## Table of Contents -* [Introduction](#introduction) -* [Who](#who) -* [What](#what) -* [When](#when) -* [Where](#where) -* [Why](#why) -* [How](#how) -* [Conclusion](#conclusion) - -## Introduction - -The object of this document is to present a specific use of [YunoHost](https://yunohost.org/) for non-profit organizations. +The purpose of this document is to present a specific use of [YunoHost](https://yunohost.org/) for non-profit organizations. ## Who @@ -68,11 +65,11 @@ Out of the box YunoHost provide: * A system of application * A web interface * A command-line interface (CLI): Moulinette -* A web server: Nginx +* A web server: NGINX * A DNS server: Dnsmasq * A database: MariaDB * A backup system -* An SSO : SSOwat +* An SSO: SSOwat * OpenLDAP * Email: * SMTP: Postfix @@ -98,13 +95,13 @@ Additional package can be installed to provide more functionality to the YunoHos To provide personal or shared calendars you will need to install: * [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh) -* [Baikal](https://github.com/YunoHost-Apps/baikal_ynh) +* [Baïkal](https://github.com/YunoHost-Apps/baikal_ynh) ### Contact To provide personal contact system you will need to install: * [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh) -* [Baikal](https://github.com/YunoHost-Apps/baikal_ynh) +* [Baïkal](https://github.com/YunoHost-Apps/baikal_ynh) ### Shared files @@ -117,13 +114,13 @@ Out of the box, YunoHost provide an XMPP server, for which you can install a web You can also install a matrix server: * The server: [Synapse](https://github.com/YunoHost-Apps/synapse_ynh) -* A web client: [Riot](https://github.com/YunoHost-Apps/riot_ynh) +* A web client: [Element](https://github.com/YunoHost-Apps/element_ynh) ### Intranet For an non-profit organization a good way to implement an intranet is to provide a wiki to let internal users read, edit and add content. Here are some packages to implement a wiki: * [DokuWiki](https://github.com/YunoHost-Apps/docuwiki_ynh) using wiki syntax -* [Wiki.js](https://github.com/YunoHost-Apps/wikijs_ynh) using markdown syntax +* [Wiki.js](https://github.com/YunoHost-Apps/wikijs_ynh) using Markdown syntax ### ERP / Accounting @@ -134,8 +131,8 @@ At some time a non-profit organization could need an accounting/erp system, here ### Public Web Site There are several way to implement a Public Web Site: -* Simple html, css, etc... Website using: [Custom Webapp](https://github.com/YunoHost-Apps/my_webapp_ynh) -* Using a CMS (Content Management System) like [Wordpress](https://github.com/YunoHost-Apps/_ynh), [Drupal](https://github.com/YunoHost-Apps/drupal_ynh) , [Grav](https://github.com/YunoHost-Apps/grav_ynh), [PluXml](https://github.com/YunoHost-Apps/pluxml_ynh) +* Simple HTML, CSS, etc. Website using: [Custom Webapp](https://github.com/YunoHost-Apps/my_webapp_ynh) +* Using a CMS (Content Management System) like [WordPress](https://github.com/YunoHost-Apps/_ynh), [Drupal](https://github.com/YunoHost-Apps/drupal_ynh), [Grav](https://github.com/YunoHost-Apps/grav_ynh), [PluXml](https://github.com/YunoHost-Apps/pluxml_ynh) But we will propose something more powerful: [CiviCRM on Drupal 7](https://github.com/YunoHost-Apps/civicrm_drupal7_ynh): * Drupal that is a powerful open source content management framework @@ -160,13 +157,13 @@ You have several choices, or having an integrated forum in Drupal or using a ded ### Backup YunoHost provide is own backup system. Before any package upgrade, YunoHost backup the current version of the package and automaticaly restore it if the upgrade fails. -Yunohost backup are stored localy in `/home/yunohost.backup/archives`. +YunoHost backup are stored localy in `/home/yunohost.backup/archives`. But for production, localy stored backup are not enough, so you will need to implement aditional backup strategies: * Backup of the the Virtual Machine if provided by the hosting system. * [Archivist](https://github.com/YunoHost-Apps/archivist_ynh) is an automatic backup system for your server. Your backups can be send to many other places, local or distant. * [Borg](https://github.com/YunoHost-Apps/borg_ynh) and [Borg Server](https://github.com/YunoHost-Apps/borgserver_ynh) allow to externalize backups. -* [Fallback](https://github.com/YunoHost-Apps/fallback_ynh), if you have two yunohost servers, provide a way to have a secondary server which you can used if your main server goes down. This secondary server will allow you to deploy a copy of your server to bring back your YunoHost during your break down. +* [Fallback](https://github.com/YunoHost-Apps/fallback_ynh), if you have two YunoHost servers, provide a way to have a secondary server which you can used if your main server goes down. This secondary server will allow you to deploy a copy of your server to bring back your YunoHost during your break down. ### Go further diff --git a/use_case_non-profit_organisations_oc.md b/pages/03.community/10.ngo/use_case_non-profit_organisations.oc.md similarity index 91% rename from use_case_non-profit_organisations_oc.md rename to pages/03.community/10.ngo/use_case_non-profit_organisations.oc.md index 8f4d6862..563c0fd7 100644 --- a/use_case_non-profit_organisations_oc.md +++ b/pages/03.community/10.ngo/use_case_non-profit_organisations.oc.md @@ -1,16 +1,13 @@ -# YunoHost per organizacion sens tòca lucrativa - -## Ensenhador -* [Introduccion](#introduccion) -* [Qual ](#qual) -* [Qué](#qué) -* [Quand](#quand) -* [Ont](#ont) -* [Perque](#perque) -* [Cossí](#cossí) -* [Conclusion](#conclusion) - -## Introduccion +--- +title: Use cases for NGOs +template: docs +taxonomy: + category: docs +routes: + default: '/use_case_non-profit_organisations' +page-toc: + active: true +--- L'objectiu d’aqueste document es de presentar una utilizacion especifica de [YunoHost](https://yunohost.org/) per d’organizacions sens tòca lucrativa. @@ -53,7 +50,7 @@ Lo servidor YunoHost pòt èsser albergat a diferents endreches : ## Perque -YunoHost pòt correspondre als besonhs d'una organizacion sens tòca lucrativa e li permetre de servar lo mestritge de sas donadas. +YunoHost pòt correspondre als besonhs d'una organizacion sens tòca lucrativa e li permetre de servar lo mestritge de sas donadas. ## Cossí @@ -67,7 +64,7 @@ YunoHost provesís sul pic: * Un sistèma d'aplicacion * Una interfàcia web * Una interfàcia en linha de comanda (CLI) : Moulinette -* Un servidor Web : Nginx +* Un servidor Web : NGINX * Un servidor DNS : Dnsmasq * Una basa de donadas : MariaDB * Un sistèma de salvagarda @@ -97,7 +94,7 @@ De paquets suplementaris pòdon èsser installats per provesir mai de foncionali Per fornir de calendièrs personals o partejats, vos calrà installar : * [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh) -* [Baikal](https://github.com/YunoHost-Apps/baikal_ynh) +* [Baïkal](https://github.com/YunoHost-Apps/baikal_ynh) ### Contacte @@ -133,10 +130,10 @@ Arriba un moment ont a l’organizacion sens tòca lucrativa li pòsca far beson ### Site Web Public Existís mantuns biaisses de construire un site Web public : -* Un simple site HTML, CSS, etc... en utilizant : [Custom Webapp](https://github.com/YunoHost-Apps/my_webapp_ynh) -* Utilizar un CMS (sistèma de gestion de contengut) coma [Wordpress](https://github.com/YunoHost-Apps/_ynh), [Drupal](https://github.com/YunoHost-Apps/drupal_ynh) , [Grav](https://github.com/YunoHost-Apps/grav_ynh), [PluXml](https://github.com/YunoHost-Apps/pluxml_ynh) +* Un simple site HTML, CSS, etc. en utilizant : [Custom Webapp](https://github.com/YunoHost-Apps/my_webapp_ynh) +* Utilizar un CMS (sistèma de gestion de contengut) coma [Wordpress](https://github.com/YunoHost-Apps/_ynh), [Drupal](https://github.com/YunoHost-Apps/drupal_ynh), [Grav](https://github.com/YunoHost-Apps/grav_ynh), [PluXml](https://github.com/YunoHost-Apps/pluxml_ynh) -Mas prepausam quicòm de mai potent : [CiviCRM on Drupal 7](https://github.com/YunoHost-Apps/civicrm_drupal7_ynh): +Mas prepausam quicòm de mai potent : [CiviCRM on Drupal 7](https://github.com/YunoHost-Apps/civicrm_drupal7_ynh) : * Drupal qu’es un framework potent de gestion de contengut * amb CiviCRM qu’es un CRM OpenSource a destinacion de las organizacions sens tòca lucrativa @@ -159,7 +156,7 @@ Avètz mantun possibilitats, aver un forum integrat a Drupal o utilizar un sist ### Salvagarda YunoHost fornís son pròpri sistèma de salvagarda. Abans tota mesa a nivèl de paquet, YunoHost salvagarda la version actuala del paquet e la restaura automaticament se la mesa a nivèl se debana pas corrèctament. -Las salvagardas Yunohost son gardadas localament dins `/home/yunohost.backup/archives`. +Las salvagardas YunoHost son gardadas localament dins `/home/yunohost.backup/archives`. Mas per la produccion, la salvagarda gardada localament basta pas, vos cal emplegar d’estrategias de salvagarda suplementàrias : * Salvagarda de la maquina virtuala se fornida pel sistèma d’albergament. diff --git a/pages/03.community/11.chatons/chatons.fr.md b/pages/03.community/11.chatons/chatons.fr.md new file mode 100644 index 00000000..40519d6b --- /dev/null +++ b/pages/03.community/11.chatons/chatons.fr.md @@ -0,0 +1,5 @@ +--- +title: Créer son CHATONS avec YunoHost +template: docs +redirect: 'https://wiki.chatons.org/doku.php/yunohost' +--- diff --git a/pages/03.community/11.chatons/chatons.md b/pages/03.community/11.chatons/chatons.md new file mode 100644 index 00000000..df888eec --- /dev/null +++ b/pages/03.community/11.chatons/chatons.md @@ -0,0 +1,5 @@ +--- +title: Creating a CHATONS with YunoHost +template: docs +redirect: 'https://wiki.chatons.org/doku.php/yunohost' +--- diff --git a/pages/03.community/chapter.md b/pages/03.community/chapter.md new file mode 100644 index 00000000..54a832c6 --- /dev/null +++ b/pages/03.community/chapter.md @@ -0,0 +1,10 @@ +--- +title: Community +template: chapter +taxonomy: + category: docs +routes: + default: /community +--- + +# Community diff --git a/pages/03.community/community.fr.md b/pages/03.community/community.fr.md new file mode 100644 index 00000000..5a297ef5 --- /dev/null +++ b/pages/03.community/community.fr.md @@ -0,0 +1,10 @@ +--- +title: Communauté +template: chapter +taxonomy: + category: docs +routes: + default: '/community' +--- + +# Communauté diff --git a/pages/04.contribute/02.write_documentation/01.writing_documentation_guide/doc_writing_guide.fr.md b/pages/04.contribute/02.write_documentation/01.writing_documentation_guide/doc_writing_guide.fr.md new file mode 100644 index 00000000..296d25f1 --- /dev/null +++ b/pages/04.contribute/02.write_documentation/01.writing_documentation_guide/doc_writing_guide.fr.md @@ -0,0 +1,43 @@ +--- +title: Guide de rédaction de la documentation des applications +template: docs +taxonomy: + category: docs +routes: + default: '/doc_writing_guide' +--- + +## Page de documentation utilisateurs·rices / administrateurs⋅rices + +Ajouter un bouton installer en un clic (comme par exemple : https://yunohost.org/app_piwigo) et un bouton sur le niveau d'intégration de l'application. + +Classement des applications disponibles par tags (genre, Git, gestion associations, courriels, etc.). + +## Quelques usages types et d'ordre général (trame de rédaction) + + + Lorsqu'un lien renvoie vers une page qui n'est pas dans la langue de la page d'origine, il est d'usage d'ajouter `(en)`(Pour un lien qui pointe vers une page en anglais). + + renommer les images dans l'ordre suivant :`nomapplication_descriptif.ext` + +### Trame générale documentation applications + + 1. Logo (dimension 80 pixels de hauteur) + titre de niveau 1. + 1. Bouton installer en un clic, Niveau d'intégration pour chaque type de processeur. + 1. Un index en tête de documentation avec renvoi vers l'ensemble des chapitres de la documentation. + 1. Une présentation générale de l'application et de sa fonction. + 2. Une partie configuration de l'application. + 1. Une partie administration de l'application. + 1. Une partie sur les limitations liées à YunoHost. + 1. Une partie sur les clients desktop (s'il en existe). Lien vers différentes applications tierces s'il en existe plusieurs (lien possible avec le catalogue d'applications [framalibre.org](https://framalibre.org)) ou un lien vers la page concernant les applications desktop si des applications officielles sont fournies. + 1. Une partie avec : + - le lien vers le site officiel + - le lien vers la documentation officielle + - les liens vers le package de YunoHost et issues + +Trame pour la rédaction des pages de documentations : [ici](/app_writing_guide) + +## Feuille de route + +1. Documenter les applications. + 1. Documenter les applications au travail (marqué : work) niveau 8/7/6. + 1. Traduire la page de documentation a minima en français et en anglais. + 1. Faire une PR sur le dépôt de l'application concernée vers la page de documentation. diff --git a/pages/04.contribute/02.write_documentation/01.writing_documentation_guide/doc_writing_guide.md b/pages/04.contribute/02.write_documentation/01.writing_documentation_guide/doc_writing_guide.md new file mode 100644 index 00000000..b853e359 --- /dev/null +++ b/pages/04.contribute/02.write_documentation/01.writing_documentation_guide/doc_writing_guide.md @@ -0,0 +1,42 @@ +--- +title: Guide to writing application documentation +template: docs +taxonomy: + category: docs +routes: + default: '/doc_writing_guide' +--- + +## Users / Administrators documentation pages + +Add a one-click install button (such as https://yunohost.org/app_piwigo) and a button on the application integration level. + +Classification of available applications by tags (genre, Git, association management, e-mails, etc.). + +## Some typical and general uses (writing framework) + + + rename the images in the following order:`description_application.ext`. + +### General frame application documentation + + 1. Logo (dimension 80 pixels high) + level 1 title. + 1. One-click install button, Integration level for each type of processor. + 1. An index at the top of the documentation with cross-references to all the chapters of the documentation. + 1. A general presentation of the application and its function. + 2. A configuration part of the application. + 1. An administration part of the application. + 1. A part on limitations related to YunoHost. + 1. A part on desktop clients (if any). A link to different third-party applications if there are several (possible link to the applications catalgue [framalibre.org](https://framalibre.org)) or a link to the page about desktop applications if official applications are provided. + 1. A part with: + - the link to the official site + - the link to the documentation + - Links to the YunoHost package and issues + +Screen for writing documentation pages: [here](/app_writing_guide) + +## Roadmap + +1. Document applications. + 1. Document applications at work (marked: work) level 8/7/6. + 1. Translate the documentation page at least into French and English. + 1. Do a PR on the application repository diff --git a/pages/04.contribute/02.write_documentation/02.markdown_guide/doc_markdown_guide.fr.md b/pages/04.contribute/02.write_documentation/02.markdown_guide/doc_markdown_guide.fr.md new file mode 100644 index 00000000..400f5220 --- /dev/null +++ b/pages/04.contribute/02.write_documentation/02.markdown_guide/doc_markdown_guide.fr.md @@ -0,0 +1,260 @@ +--- +title: Guide Markdown +template: docs +taxonomy: + category: docs +routes: + default: '/doc_markdown_guide' +--- + +Le Markdown est un langage de balisage créé en 2004, de nombreux add-on développant les possibilités de ce langage existent. L'objectif de ce guide est de tendre vers l’exhaustivité des possibilités de ce langage de formatage dans le cadre de la documentation de YunoHost et non des langages Markdown en général. + +Markdown permet de formater du texte à l'aide de balises, il permet une lecture *humaine* du texte ; même avec le formatage. Même si un unique bloc note est nécessaire il existe de nombreux logiciels markdowns (Markdown sur [framalibre.org](https://framalibre.org/recherche-par-crit-res?keys=markdown)). Sa prise en main est relativement facile. + +## Les différents niveaux de titres + +En rédigeant des titres comme suit : +```markdown +# Titre de niveau 1 +## Titre de niveau 2 +### Titre de niveau 3 +#### Titre de niveau 4 +##### Titre de niveau 5 +###### Titre de niveau 6 +``` + +Ils apparaissent comme cela : +# Titre de niveau 1 +## Titre de niveau 2 +### Titre de niveau 3 +#### Titre de niveau 4 +##### Titre de niveau 5 +###### Titre de niveau 6 + +## Formatage dans les paragraphes + +Pour taper un retour à la ligne sans créer de nouveau paragraphe, il est nécessaire de taper **deux espaces consécutifs**.Sans cela, le texte continuera à la suite en respectant les contraintes générales du style de la page. + +En rédigeant ça : + +```markdown +Pour du texte en *italique il faut encadrer par un astérisque* `*` +Pour rédiger du **texte en gras par deux astérisques** `**` +On peut aussi ~~barrer le texte~~ en encadrant avec deux tildes `~` +``` + +On peut lire ça : + +Pour du texte en *italique il faut encadrer par un astérisque* `*` +Pour rédiger du **texte en gras par deux astérisques** `**` +On peut aussi ~~barrer le texte~~ en encadrant avec deux tildes `~` + +## Créer des liens + +Pour créer un lien vers un site hors de la documentation de YunoHost : + +```markdown +[Texte à afficher](https://lelien.tld) +``` + +s'affichera comme tel : +[Texte à afficher](https://lelien.tld) + +C'est identique pour les pages de la documentation, excepté que le lien est interne. Le nom de la page est sa route par défault définie dans son *header*: +```markdown +[Page du wiki](/write_documentation) +``` + +Le lien renverra vers la page avec la bonne configuration de langue si la page existe, ou vers une autre langue disponible (l'anglais, généralement) si elle n'existe pas. +[Page du wiki](/write_documentation) + +! Notez qu'il ne faut donc pas préciser le code de langue au début des liens vers d'autres pages de la documentation : `/fr`, `/en`, etc. sont superflus. + +### Créer des ancres +Une ancre permet de faire un lien vers un point précis dans une page, c'est comme ça que fonctionnent les index en haut de page. Pour créer une ancre, il faut insérer du code à l'endroit de l'ancre sous la forme suivante : + +```markdown +Du texte qui ne sait même pas qu'il a une ancre <a name="nomancre"></a> +``` + +Ce qui s'affiche : +Du texte qui ne sait même pas qu'il a une ancre <a name="nomancre"></a> + +Il est aussi possible de directement renvoyer une ancre au titre, en notant le lien en minuscule avec des `-` à la place des espaces. +Il ne reste plus qu'à désigner l'ancre au texte que l'on souhaite rendre interactif : + +```markdown +[Mon ancre qui renvoie vers les listes](#nomdelancre) +[Mon ancre qui renvoie vers le titre des tableaux](#les-tableaux) +``` + +[Mon ancre qui renvoie vers les listes](#nomdelancre) +[Mon ancre qui renvoie vers le titre des tableaux](#les-tableaux) + +## Afficher des images + +Pour afficher des images, le principe est identique aux liens, excepté l'ajout d'un `!` avant le texte à afficher qui est ici considéré comme le texte à afficher en cas d'impossibilité de chargement de l'image. Une description de l'image convient. + +```markdown + +``` + + + +Il est possible de faire un lien avec une image, exemple : +```markdown +[](/write_documentation) +``` +[](/write_documentation) + +L'encart de *texte à afficher en cas d'impossibilité de chargement de l'image* entre les crochets dans le lien de l'image n'est pas obligatoire mais fortement recommandé. + +## Formater une citation + +Les citations permettent de mettre en valeur un propos tenu par une autre personne, le wiki gère lui-même la façon dont c'est valorisé. Markdown utilise un chevron fermant, ce symbole : `>`, pour annoncer une citation. Il suffit de les rajouter avant la citation, comme tel : + +```markdown +>Du texte de citation du premier niveau +>qui peut être formaté en différentes lignes + +>> Et une seconde citation +>> avec des doubles chevrons +``` +S'affichera : + +>Du texte de citation du premier niveau +>qui peut être formaté en différentes lignes + +>> Et une seconde citation +>> avec des doubles chevrons + +## Les listes + +Les listes permettent d'afficher une suite de textes dans une présentation facile, c'est ainsi que sont rédigés les index tels que celui de la page de la [documentation contributeur](/contributordoc). + +### Listes ordonnées + +Les listes ordonnées peuvent s'incrémenter autant que vous le désirez, il n'est pas obligé de donner la bonne correspondance au nombre. Il est possible de noter avec des `1.` et installer trois espaces pour marquer l'incrémentation. Pour une meilleure compréhension du texte brut, il peut être pratique d'utiliser les chiffres de manière croissante pour marquer l'incrémentation, mais ce sont bien les trois `espaces` conséquents avant la sous-liste qui désigneront l'incrémentation. + +```markdown +1. Liste 1 +1. Liste 2 +1. liste 3 + 1. Liste 3a + 1. Liste 3b + 1. Liste 3b1 + 1. Liste 3b2 + 1. Liste 3b3 + 1. Liste 1 + 1. Liste 2 + 1. liste 3 +5. Liste 4 +3. Liste 5 +4. liste 6 +``` + +On obtient : + +1. Liste 1 +1. Liste 2 +1. liste 3 + 1. Liste 3a + 1. Liste 3b + 1. Liste 3b1 + 1. Liste 3b2 + 1. Liste 3b3 + 1. Liste 1 + 1. Liste 2 + 1. liste 3 +5. Liste 4 +3. Liste 5 +4. liste 6 + +### Listes non ordonnées<a name="nomdelancre"></a> + +Pour créer une liste non ordonnée, il faut utiliser les symboles `*`, `+` ou `*`. Cela ne changera pas l'apparence du marqueur dans la restitution du texte. C'est l'incrémentation de la liste qui définira le visuel. Pour une meilleure lecture du texte brut, il peut être pratique d'utiliser les différents symboles pour marquer l'incrémentation, mais ce sont bien les trois espaces avant la sous-liste qui désigneront l'incrémentation. +Comme tel : +```markdown ++ Liste 1 ++ Liste 2 ++ liste 3 + - Liste 3a + - Liste 3b + * Liste 3b1 + * Liste 3b2 + * Liste 3b3 + + Liste 1 + + Liste 2 + + liste 3 +- Liste 4 +* Liste 5 ++ liste 6 +``` + +Ce qui affichera : ++ Liste 1 ++ Liste 2 ++ liste 3 + - Liste 3a + - Liste 3b + * Liste 3b1 + * Liste 3b2 + * Liste 3b3 + + Liste 1 + + Liste 2 + + liste 3 +- Liste 4 +* Liste 5 ++ liste 6 + +## Les tableaux + +Pour créer un tableau, il faut utiliser la barre verticale `|` (appelé 'pipe') et les tirets `-`. Il est obligatoire d'ajouter une ligne de tirets sous la première ligne du tableau. Il n'y a aucune contrainte dans la taille de ce dernier. Il est possible de formater le tableau avec les `:` dans la seconde ligne du tableau, trois options s'offrent à vous : + +| Colonne alignée à gauche | Colonne centrée | Colonne alignée à droite | +|:-------------------------|:---------------:|-------------------------:| +|`:-----` | `:----:` | `-----:` | + +```markdown +| **Un tableau** | Une colonne | Une seconde | Autant que l'on veut | +|:--------------:|:-----------:|:-----------:|:--------------------:| +| Une ligne formatée | | Et du **texte en gras** | Ou en *italique* | +| D'autres lignes | | | [Ou un lien](/contributordoc) | +``` +Ce qui affichera ça : + +| **Un tableau** | Une colonne | Une seconde | Autant que l'on veut | +|:--------------:|:-----------:|:-----------:|:--------------------:| +| Une ligne formatée | | Et du **texte en gras** | Ou en *italique* | +| D'autres lignes | | | [Ou un lien](/contributordoc) | + +## Bloc de codes + +Pour afficher du texte en brut, des `blocs de code` peuvent être créés en utilisant l'accent grave `Alt Gr + è` : + +```markdown +Soit inline, par exemple pour mettre en valeur une touche comme `Ctrl` +``` + +ou directement en bloc. +La seule différence est dans la quantité d'accents graves : +Minimum trois accents graves en ouverture et fermeture de bloc et deux accents graves qui encadrent le morceau de texte à formater dans une ligne + +Ce qui donnera au rendu : + +Soit inline, par exemple pour mettre en valeur une touche comme `Ctrl` +''' +```markdown +ou directement en bloc. +La seule différence est dans la quantité d'accents graves : +Minimum trois accents graves en ouverture et fermeture de bloc et deux accents graves qui encadrent le morceau de texte à formater dans une ligne +``` +''' +## Liens utiles + + + La documentation du langage originel Markdown : [daringfireball.net/projects/markdown (en)](https://daringfireball.net/projects/markdown/) + + Tutoriel Markdown sur [markdowntutorial.com](https://markdowntutorial.com) + +## Aller plus loin + +De manière plus générale, pour comprendre comment est formaté un texte il suffit juste d'inspecter le document source avec une application note. Ce n'est pas pour autant que le wiki de YunoHost pourra l'exploiter. Il existe bien d'autres possibilités d'utiliser la syntaxe markdown, n'hésitez pas à ajouter des fonctionnalités manquantes. Si vous avez observé des manques et/ou que vous avez des questions, contactez-nous sur [le forum](https://forum.yunohost.org) ou par message direct sur le salon IRC : **#yunohost** sur [irc.freenode.net](https://irc.freenode.net). diff --git a/pages/04.contribute/02.write_documentation/02.markdown_guide/doc_markdown_guide.md b/pages/04.contribute/02.write_documentation/02.markdown_guide/doc_markdown_guide.md new file mode 100644 index 00000000..368c75ef --- /dev/null +++ b/pages/04.contribute/02.write_documentation/02.markdown_guide/doc_markdown_guide.md @@ -0,0 +1,261 @@ +--- +title: Guide Markdown +template: docs +taxonomy: + category: docs +routes: + default: '/doc_markdown_guide' +--- + +Markdown is a markup language created in 2004, many add-ons developing the possibilities of this language exist. The objective of this guide is to aim for the exhaustiveness of the possibilities of this formatting language within the framework of the YunoHost documentation and not Markdown languages in general. + +Markdown allows text to be formatted using tags, it allows *human* reading of the text; even with formatting. Even if only one notepad is needed there are many markdowns software (Markdown on [framalibre.org (fr)](https://framalibre.org/recherche-par-crit-res?keys=markdown)). It is relatively easy to use. + +## The different levels of titles + +By writing titles as follows: +```markdown +# Level 1 title +## Level 2 title +### Level 3 title +#### Level 4 title +##### Level 5 title +###### Level 6 title +``` + +They appear like this: +# Level 1 title +## Level 2 title +### Level 3 title +#### Level 4 title +##### Level 5 title +###### Level 6 title + +## Formatting in paragraphs + +To type a line break without creating a new paragraph, it is necessary to type **two consecutive spaces**. Otherwise, the text will continue in a row respecting the general constraints of the page style. + +By writing this: + +```markdown +For text in *italic you have to frame it with an asterisk* `*` +To write **bold text by two asterisks** `**` +You can also ~~bar the text~~ by framing it with two tildes `~` +``` + +It reads like this: + +For text in *italic you have to frame it with an asterisk* `*` +To write **bold text by two asterisks** `**` +You can also ~~bar the text~~ by framing it with two tildes `~` + +## Create links + +To create a link to a site outside of the YunoHost documentation: + +```markdown +[Text to display](https://lelien.tld) +``` + +will be displayed as such: +[Text to display](https://lelien.tld) + +It is the same for the documentation pages, except that the link is internal. The page name is its default route, as defined in its page header: +```markdown +[Wiki Page](/write_documentation) +``` + +The link will return to the page with the correct language setting if the page exists, or defaults to the next available language (French, usually): +[Wiki page](/write_documentation) + +! Note that language codes are thus not to be included at the beginning of the links to other documentation pages: `/en`, `/fr`, etc. are superfluous. + +### Create anchors +An anchor allows you to make a link to a specific point in a page, that's how the indexes at the top of the page work. To create an anchor, you need to insert code at the anchor location in the following form : + +```markdown +Text that will be doesn't even know it has an anchor. +``` + +What's displayed is: +Text that will be doesn't even know it has an anchor. + +It is also possible to return an anchor directly to the title, noting the link in lower case with `-`s instead of spaces. +All that remains is to designate the anchor to the text you want to make interactive: + +```markdown +[My Anchor Returns to Lists](#anchorname) +[My Anchor that refers to the title of the tables](#tables) +``` + +[My Anchor Returns to Lists](#anchorame) +[My Anchor that refers to the title of the tables](#tables) + +## Displaying images + +To display images, the principle is the same as for links, except that a `!` is added before the text to be displayed, which is considered here as the text to be displayed if the image cannot be loaded. A description of the image is appropriate. + +```markdown + +``` + + + +It is possible to make a link with an image, for example: +```markdown +[](/write_documentation) +``` +[](/write_documentation) + +The insert of *text to be displayed if the image cannot be loaded* between the brackets in the image link is not mandatory but strongly recommended. + +## Format a quote + +Quotes are used to highlight a statement made by another person, the wiki itself manages the way it is highlighted. Markdown uses a closing chevron, this symbol: `>`, to announce a quote. Just add it before the quote, as such: + +```markdown +>First level quotation text +>which can be formatted in different lines + +>> And a second quote +>> with double rafters +``` +Will be displayed: + +>First level quotation text +>which can be formatted in different lines + +>> And a second quote +>> with double rafters + +## Lists + +Lists allow to display a series of texts in an easy presentation, this is how indexes such as the [contributing documentation](/contributordoc) page are written. + +### Ordered lists + +The ordered lists can be incremented as much as you wish, it is not necessary to give the right match to the number. It is possible to write down with `1.` and put in three spaces to mark the increment. For a better understanding of the plain text, it may be fine to use the numbers in ascending order to mark the increment, but it is the three consistent `spaces' before the sub-list that will mark the increment. + +```markdown +1. List 1 +1. List 2 +1. list 3 + 1. List 3a + 1. List 3b + 1. List 3b1 + 1. List 3b2 + 1. List 3b3 + 1. List 1 + 1. List 2 + 1. list 3 +1. List 4 +1. List 5 +1. list 6 +``` + +You get: + +1. List 1 +1. List 2 +1. list 3 + 1. List 3a + 1. List 3b + 1. List 3b1 + 1. List 3b2 + 1. List 3b3 + 1. List 1 + 1. List 2 + 1. list 3 +5. List 4 +3. List 5 +4. list 6 + +### Unordered lists<a name="anchorname"></a> + +To create an unordered list, use the symbols `*`, `+` or `*`. This will not change the appearance of the marker in the text output. It is the incrementing of the list that will define the visual. For a better reading of the plain text, it may be good to use the different symbols to mark the increment, but it is the three spaces before the sub-list that will indicate the increment. +As such: +```markdown ++ List 1 ++ List 2 ++ list 3 + - List 3a + - List 3b + * List 3b1 + * List 3b2 + * List 3b3 + + List 1 + + List 2 + + list 3 +- List 4 +* List 5 ++ list 6 +``` + +This will read: ++ List 1 ++ List 2 ++ list 3 + - List 3a + - List 3b + * List 3b1 + * List 3b2 + * List 3b3 + + List 1 + + List 2 + + list 3 +- List 4 +* List 5 ++ list 6 + +## Tables + +To create an array, use the vertical bar `|` and dashes `--`. It is mandatory to add a line of dashes under the first line of the table. There is no constraint in the size of the table. It is possible to format the array with the `:` in the second row of the array, three options are available: + +| Left aligned column | Centered column | Right aligned column | +|:--------------------|:---------------:|---------------------:| +|`:-----` | `:----:` | `-----:` | + +```markdown +| **One table** | One column | One second | As many as you want | +|:-------------:|:----------:|:----------:|:-------------------:| +| | And formatted line | | And bold text | | Or *italic* | +| More lines | | | [Or a link](/contributordoc) | +``` +Which would say this: + +| **One table** | One column | One second | As many as you want | +|:-------------:|:----------:|:----------:|:-------------------:| +| | And formatted line | | And bold text | | Or *italic* | +| More lines | | | [Or a link](/contributordoc) | + +## Code block + +To display plain text, `blocks of code' can be created using the grave accent `Alt Gr + è` : + +```markdown +Either inline, for example to highlight a key like `Ctrl`. +``` + +or directly as a block. +The only difference is in the amount of bass accents: +At least three low pitched accents at the opening and closing of the block and two low pitched accents that frame the piece of text to be formatted in a line. + +Which will give the rendering: + +Either inline, for example to highlight a key like `Ctrl`. +''' +```markdown +or directly as a block. +The only difference is in the amount of bass accents: +At least three low pitched accents at the opening and closing of the block and two low pitched accents that frame the piece of text to be formatted in a line. +``` +''' + +## Useful links + + + The documentation of the original Markdown language: [daringfireball.net/projects/markdown](https://daringfireball.net/projects/markdown/) + + Markdown Tutorial on [markdowntutorial.com](https://markdowntutorial.com) + +## Going further + +In a more general way, to understand how a text is formatted just inspect the source document with a note application. This does not mean that the YunoHost wiki will be able to exploit it. There are many other possibilities to use markdown syntax, feel free to add missing features. If you've noticed some missing features and/or have questions, please contact us on [the forum](https://forum.yunohost.org) or by direct message on the IRC room: **#yunohost** on [irc.freenode.net](https://irc.freenode.net). diff --git a/pages/04.contribute/02.write_documentation/03.git/doc_use_git.fr.md b/pages/04.contribute/02.write_documentation/03.git/doc_use_git.fr.md new file mode 100644 index 00000000..ddcf1516 --- /dev/null +++ b/pages/04.contribute/02.write_documentation/03.git/doc_use_git.fr.md @@ -0,0 +1,52 @@ +--- +title: Propulser une contribution avec Git +template: docs +taxonomy: + category: docs +routes: + default: '/doc_use_git' +--- + +Il est bien sûr possible de contribuer directement sur la documentation de YunoHost, mais ce n’est pas la manière la plus pratique de le faire tant pour le·la contributeur·rice que pour la personne qui va injecter votre contribution dans la documentation. Voici un tutoriel pour comprendre et créer une contribution à la documentation de YunoHost en utilisant l’outil [Git (en)](https://git-scm.com/) et [github.com](http://github.com/) qui est le service de forge Git qui héberge et stocke le code source de YunoHost ainsi que sa documentation. + +## Création d’un compte sur github.com +Pour pouvoir envoyer vos contributions via GitHub, il est nécessaire d’avoir un compte sur GitHub. Pour créer le compte vous aurez besoin d’une adresse e-mail valide à laquelle vous avez accès. GitHub est un outil puissant qui propose de nombreuses fonctionnalités, l’interface peut être un peu effrayante au début. +Vous n’êtes pas obligé·e de donner vos noms et prénoms, vous pouvez utiliser un pseudonyme (lors de l’inscription `Username`). + + +## Forker la documentation de YunoHost dans votre dépôt personnel +Forker le code source permet de créer une nouvelle branche de développement d’un code source de logiciel ou dans le cas présent, le code source de la documentation. En créant une nouvelle branche, cela vous permet de modifier le code et d’ajouter vos contributions sans altérer le code de la branche `master` qui est le rendu public de la documentation. Ce qui vous permet de ne pas devoir tout marquer mais le faire en plusieurs étapes. (Notamment pour les contributions demandant plus de temps de travail). + +Forker un projet sur GitHub est extrêmement simple, il suffit de cliquer sur le bouton Fork, cela créera un nouveau dépôt sur votre espace de GitHub. + + +Dans le titre du nouveau dépôt, vous verrez de quelle provenance vient le dépôt, dans le cas présent `YunoHost/doc` + + +> **Point de vigilance !** + +> Si vous forkez le dépôt d’un·e autre contributeur·rice que YunoHost, vous aurez les mêmes fichiers. Sauf que quand vous enverrez vos modifications, elles seront envoyées au contributeur et non au dépôt YunoHost. L’avantage est que ça vous permet de développer une autre branche créée par le·la contributeur·rice et ainsi travailler avec une autre personne à une amélioration avant proposition au dépôt principal. +> Il n’est pas possible d’avoir un fork du dépot d’un·e contributeur·rice et le fork dépôt d’origine au même moment dans votre propre dépôt. + +## Modifier et ajouter votre contribution +Une fois le dépôt forké (copié), il faudra créer une nouvelle branche de développement au sein de votre dépôt. C’est à travers cette branche que vous allez modifier les fichiers et ainsi proposer des améliorations de la documentation. Le fait que ce soit une nouvelle branche vous permettra par la suite de faire une Pull Request, c’est à dire une demande d’ajout de vos contributions au sein de la branche `master` qui est la branche principale de la documentation. Les règles de développement sur GitHub changent selon les développeurs de chaque dépôt, certains ont une branche testing dans laquelle il faut proposer les contributions. +Plus d’informations sur ce qu’est une branche sur git-scm.com : [Les branches avec Git - Ce qu’est une branche](https://git-scm.com/book/fr/v1/Les-branches-avec-Git-Ce-qu-est-une-branche). + +## Envoyer votre contribution par une Pull Request +Faire une Pull Request correspond au moment où vous souhaitez partager votre travail avec le reste des contributeurs⋅rices et l’intégrer au dépot master (dépôt principal de YunoHost). Lors de la publication d’une Pull Request, couramment nommée PR, les contributeurs⋅rices pourront amender, commenter, ajouter, corriger votre contribution avant intégration complète au dépôt. + +## Suivre votre contribution et prendre en compte les retours des contributeurs·trices +Lorsque vous avez déjà fait une PR (Pull Request), les modifications de votre branche de développement sur le dépôt Git se rajouteront automatiquement à la PR. Cela ne nécessite aucune action supplémentaire. Vous pouvez aussi intégrer les propositions de modifications de contributeurs, qui lorsqu’ils·elles auditeront le code, peuvent trouver des erreurs ou de nouvelles formulations plus adaptées. + +## Faire remonter des erreurs et des souhaits par des issues +YunoHost dispose d’un dépôt Git spécifique pour le recueil des issues : [github.com/YunoHost/issues](https://github.com/YunoHost/issues) +Une issue aussi appelé ticket, est un problème identifié ou alors un souhait de développement ; dans le cas présent pour la documentation, mais c’est valable pour tout dépôt logiciel. Dans le cadre de la documentation de YunoHost il sera surtout proposé des issues pour le développement de la documentation, les problèmes identifiés étant facilement corrigeables. + +## Aller plus loin avec Git et travailler sur son poste de travail +Utiliser la puissance de Git et ainsi travailler sur son ordinateur personnel, permet entre autres de ne pas avoir à créer de `commit` à chaque enregistrement intermédiaire des pages de documentations modifiées. Cela permet aussi d’utiliser des outils et logiciels qui permettent une distinction plus facile des codes utilisés dans une page de documentation. + +- Ressource en ligne : [docs.microsoft.com - Configurer un référentiel Git localement pour la documentation](https://docs.microsoft.com/fr-fr/contribute/get-started-setup-local) + +## Quelques ressources ailleurs sur le net pour aller plus loin + - [Gérer son code avec Git et GitHub - openclassrooms.com](https://openclassrooms.com/fr/courses/2342361-gerez-votre-code-avec-git-et-github) + - [Interface utilisateurs·trices de Git - git-scm.com](https://git-scm.com/download/gui/linux) diff --git a/pages/04.contribute/02.write_documentation/03.git/doc_use_git.md b/pages/04.contribute/02.write_documentation/03.git/doc_use_git.md new file mode 100644 index 00000000..7726cfa7 --- /dev/null +++ b/pages/04.contribute/02.write_documentation/03.git/doc_use_git.md @@ -0,0 +1,49 @@ +--- +title: Propel a contribution with GitHub +template: docs +taxonomy: + category: docs +routes: + default: '/doc_use_git' +--- + +It is of course possible to contribute directly to the YunoHost documentation, but this is not the most convenient way to do so for both the contributor and the person who will inject your contribution into the documentation. Here is a tutorial to understand and create a contribution to the YunoHost documentation using [Git](https://git-scm.com/) and [github.com](http://github.com/) which is the Git forge service that hosts and stores the YunoHost source code and documentation. + +## Create an account on github.com +To be able to send your contributions via GitHub, you need to have an account on GitHub, to create the account you will need a valid email address that you have access to. GitHub is a powerful tool with many features, the interface can be a little scary at first. +You don't have to give your first and last names, you can use a nickname (when you register `Username`). + +## Fork the YunoHost documentation in your personal repository +To fork the source code allows you to create a new branch of development of a software source code or in this case the source code of the documentation. By creating a new branch, this allows you to modify the code and add your contributions without altering the code of the `master` branch, which is the public release of the documentation. This allows you not to have to write down everything at once, but to do it in several steps. (Especially for contributions that require more time). + +Forking a project on GitHub is extremely simple, just click on the Fork button, this will create a new repository on your GitHub account. + +In the title of the new repository, you will see where the repository comes from, in this case `YunoHost/doc`. + + +> **Point of vigilance !** +> If you forge the repository of another contributor than yunohost, you'll get the same files. Except that when you send your changes, they will be sent to the contributor and not to the yunohost repository. The advantage is that it allows you to develop another branch created by the contributor and work with another person on an improvement before submitting it to the main repository. +> It is not possible to have a fork from a contributor's repository and the original repository fork at the same time in your own account. + +## Modify and add your contribution +Once the repository is forked (copied), you will need to create a new development branch within your repository. It is through this branch that you will modify the files and thus propose improvements to the documentation. The fact that it is a new branch will allow you to make a Pull Request, i.e. a request to add your contributions to the `master` branch, which is the main documentation branch. The development rules on GitHub change depending on the developers of each repository, some have a testing branch in which to offer contributions. +More information on what a branch on git-scm.com is: [Branching with Git - What a branch is](https://git-scm.com/book/fr/v1/Les-branches-avec-Git-Ce-qu-est-une-branche). + +## Send your contribution by a Pull Request +Create a Pull Request when you want to share your work with the other contributors and integrate it into the master repository (YunoHost's main repository). When publishing a Pull Request, commonly called PR, contributors will be able to amend, comment, add, correct your contribution before it is fully integrated into the repository. + +## Track your contribution and take into account feedback from contributors +When you've already create a Pull Request (PR), changes to your development branch in the Git repository will automatically be added to the PR. This doesn't require any additional action. You can also include proposed changes from contributors, who, when they audit the code, may find errors or new, better wording. + +## Bringing up mistakes and wishes through issues +YunoHost has a specific Git repository to collect issues: [github.com/YunoHost/issues](https://github.com/YunoHost/issues) +An issue, also called a ticket, is an identified problem or a development wish; in this case for documentation, but it is valid for any software repository. Within the framework of the YunoHost documentation it will be mainly proposed issues for the development of the documentation, the identified problems being easily correctable. + +## Going further with Git and working on his workstation +Using the power of Git to work on your personal computer means you don't have to create a `commit` each time you save modified documentation pages. It also allows you to use tools and software that make it easier to distinguish between tags used in a documentation page. + +- Online resource: [docs.microsoft.com - Setting up a Git repository locally for documentation](https://docs.microsoft.com/fr-fr/contribute/get-started-setup-local) + +## Some resources elsewhere on the net to go further + - [Managing your code with Git and GitHub - openclassrooms.com](https://openclassrooms.com/fr/courses/2342361-gerez-votre-code-avec-git-et-github) + - [Git User Interface - git-scm.com](https://git-scm.com/download/gui/linux) diff --git a/pages/04.contribute/02.write_documentation/write_documentation.fr.md b/pages/04.contribute/02.write_documentation/write_documentation.fr.md new file mode 100644 index 00000000..23d66ca9 --- /dev/null +++ b/pages/04.contribute/02.write_documentation/write_documentation.fr.md @@ -0,0 +1,150 @@ +--- +title: Rédaction de la documentation +template: docs +taxonomy: + category: docs +routes: + default: '/write_documentation' +--- + +## Via GitHub + +La documentation de YunoHost est gérée sur un [dépôt Git](https://github.com/YunoHost/doc). + +Si vous n'êtes pas familier avec GitHub, il y a un bouton "Éditer" en haut de chaque page qui vous redirigera vers l'éditeur en ligne de GitHub et qui vous aidera à proposer vos modifications (appelées *Pull Requests*). + +Directement sur GitHub, vous pouvez faire un *fork* du dépôt, y faire vos modifications, et envoyer vos *pull requests*. + +Puisque l'éditeur en ligne ne permet pas d'ajouter des fichiers, utiliser Git par la ligne de commande est la méthode recommandée si vous voulez ajouter des médias (comme des images). + +## Grav + +Sous le capot, la documentation est déployée avec le [CMS Grav](https://getgrav.org/?target=_blank). + +La structure du dépôt est décrite ici: + +```bash ++-- config + +-- site.yaml + +-- system.yaml + +-- themes + +-- yunohost-docs.yaml + # Quelques paramètres pour le thème de la documentation ++-- images + # Contains the images used in the documentation pages. ++-- pages + # The directory containing the documentation pages. + # The pages hierarchy is reflected by the directory hierarchy. + +-- 00.home + +-- 01.administrate + +-- 02.applications + +-- 03.community + +-- 04.contribute ++-- themes + +-- learn4 + +-- yunohost-docs + # Contient le code du thème, qui est une extension du thème Learn4 ++-- .gitignore + # Contient les instructions pour ne pas envoyer de fichier + # sensible ou inutile vers le dépôt Git ++-- README.md +``` + +!!!! Pour en apprendre plus sur les fonctionnalités de Grav, vous pouvez consulter sa [documentation](https://learn.getgrav.org?target=_blank) (en anglais). Le reste de cette page donne quelques consignes spécifiques pour contribuer à la documentation de YunoHost. + +## L'en-tête des pages Grav + +Chaque page commence par un en-tête qui donne les instructions à Grav sur comment la traiter. Regardons l'en-tête de cette page : + +``` +--- +title: Rédaction de la documentation +template: docs +taxonomy: + category: docs +routes: + default: '/write_documentation' +--- + +``` + +1. L'en-tête commence et finit par une ligne contenant `---` ; +2. La clé `title` gère le premier titre de la page, son nom dans le menu de navigation à gauche, et son nom dans l'onglet du navigateur ; +3. Les clés `template` et `taxonomy` doivent toujours être inclues et laissées telles quelles. Elles informent Grav sur quel thème appliquer aux pages, et permettent de les ordonner correctement. +4. La clé `routes` et son enfant `default` font que la page est accessible par défaut à l'adresse `https://yunohost.org/docs/write_documentation` au lieu de devoir la chercher à l'adresse `https://yunohost.org/docs/contribute/write_documentation`, qui correspond à son emplacement réel dans la hiérarchie des dossiers. + +## Syntaxe + +Vous pouvez utiliser la syntaxe Markdown, consultez la page de [documentation dédiée](/doc_markdown_guide) pour plus d'information. + +! Notez qu'il ne faut pas préciser le code de langue au début des liens vers d'autres pages de la documentation : `/fr`, `/en`, etc. sont superflus. + +Pour étendre les fonctionnalités de Markdown, des extensions ont été ajoutées à Grav. Vous pouvez consulter leur propre documentation sur GitHub pour découvrir comment vous en servir. +```text +anchors +external_links +flex-objects +highlight +image-captions +markdown-notices +presentation +presentation-deckset +shortcode-core +``` + +## Pages spéciales + +Quelques pages de la documentation sont générées automatiquement ou dynamiquement. + +| Page | Chemin | Notes | +|---------------|--------|-------| +| Catalogue d'applications | `/pages/02.applications/01.catalog/apps.md` | Récupère et traite le fichier [app.json](https://github.com/YunoHost/apps/blob/master/apps.json?target=_blank) | +| Apps helpers | `pages/04.contribute/04.packaging_apps/11.helpers/packaging_apps_helpers.md` | Générée par ce [script](https://github.com/YunoHost/yunohost/blob/dev/doc/generate_helper_doc.py?target=_blank), à partir de ce [canevas](https://github.com/YunoHost/yunohost/blob/dev/doc/helper_doc_template.md?target=_blank) | +| Documentation des apps | `pages/02.applications/02.docs/docs.md` | Liste les sous-pages du même dossier qui ont les clés `taxonomy.category: docs, apps` dans leur en-tête | + +## Hébergez votre propre documentation de test + +! Ces instructions ne sont pas encore complètement testées. Aidez-nous en nous rapportant tout problème que vous rencontriez. + +0. *Fork* le dépôt de la documentation YunoHost sur GitHub +1. Installez l'app Grav pour YunoHost : `yunohost app install grav` +2. Installez les extensions suivantes via l'admin ou la ligne de commande de Grav : +```text +anchors +breadcrumbs +external_links +feed +flex-objects +git-sync +highlight +image-captions +langswitcher +markdown-notices +presentation +presentation-deckset +shortcode-core +tntsearch +``` +3. Paramétrez l'extension Git Sync. + 1. Choisissez `GitHub` et vos identifiants GitHub + 2. Entrez l'adresse de votre *fork*, par exemple `https://github.com/username/doc` + 3. Copiez l'URL du webhook, par exemple `https://grav.example/_git-sync-ca25c111f0de` + 4. "Basic settings" > "Folders to Sync" : `pages` `images` `themes` + 5. "Git Repo Settings" > "User not required" : Enabled + 6. "Git Repo Settings" > "Web Hooks secret" : Enabled + 7. "Advanced settings" > "local branch" : `master` + 8. "Advanced settings" > "remote branch" : `master` +(vous pouvez changer `master` en une autre branche si vous le souhaitez, mais n'oubliez pas de la créer au préalable sur GitHub) + 9. "Advanced settings" > "Committer Name" : votre nom d'utilisateur sur GitHub + 10. "Advanced settings" > "Committer Email" : votre email renseigné sur GitHub + 11. Enregistrez et cliquez sur "Reset Local Copy" + 12. Renseignez les adresses dans les clés `commits` et `tree` dans `config/themes/yunohost-docs.yaml` pour quelles pointent vers l'adresse de votre *fork* sur GitHub +4. Assurez-vous que les dossiers `user/pages/01.home` et `user/pages/02.typography` sont supprimés. +5. Dans l'administration de Grav, dans "Configuration" > "System" : + 1. "Language" > "Supported" : `en` `fr` `de` `es` `ar` + 2. "Language" > "Override Default Language" : `en` + 3. "Language" > "Set language from browser" : `Yes` + 4. "HTTP Headers" > "Etag" : `Yes` + 5. "Advanced" > "Blueprint Compatibility" : `Yes` + 6. "Advanced" > "YAML Compatibility" : `Yes` + 7. "Advanced" > "Twig Compatibility" : `Yes` diff --git a/pages/04.contribute/02.write_documentation/write_documentation.md b/pages/04.contribute/02.write_documentation/write_documentation.md new file mode 100644 index 00000000..d9321c7f --- /dev/null +++ b/pages/04.contribute/02.write_documentation/write_documentation.md @@ -0,0 +1,151 @@ +--- +title: Write documentation +template: docs +taxonomy: + category: docs +routes: + default: '/write_documentation' +--- + + +## Via GitHub + +The YunoHost documentation is managed through a [Git repository](https://github.com/YunoHost/doc). + +If you are not familiar with GitHub, there is an "Edit" button at the top of each page that will redirect you to the GitHub online editor that will help you making your change proposals (Pull Requests). + +Directly on GitHub, you can fork the repository, make your changes, and send pull requests. + +Because the online editor doesn't support uploading files, using Git is the prefered way if you need to upload media (e.g. images). + +## Grav + +Under the hood, the documentation is served by the [Grav CMS](https://getgrav.org/?target=_blank). + +The structure of the repository is described below: + +```bash ++-- config + +-- site.yaml + +-- system.yaml + +-- themes + +-- yunohost-docs.yaml + # Some settings for the documentation theme ++-- images + # Contains the images used in the documentation pages. ++-- pages + # The directory containing the documentation pages. + # The pages hierarchy is reflected by the directory hierarchy. + +-- 00.home + +-- 01.administrate + +-- 02.applications + +-- 03.community + +-- 04.contribute ++-- themes + +-- learn4 + +-- yunohost-docs + # Contains the theme's code, which extends Learn4 theme's code ++-- .gitignore + # Contains the instructions to not send sensitive + # or useless files over to the Git repository ++-- README.md +``` + +!!!! To learn more about Grav's features, you can head over to its [documentation](https://learn.getgrav.org?target=_blank). The remainder of this page will show you some specific instructions to contribute to YunoHost's documentation. + +## Grav header + +Each page starts with a header that gives instructions to Grav on how to process them. Let us have a look into the header of this page: + +``` +--- +title: Write documentation +template: docs +taxonomy: + category: docs +routes: + default: '/write_documentation' +--- + +``` + +1. The header starts and ends with a line containing `---` +2. The `title` key manages the first heading title of the page, its name in the navigation menu on the left, and its name in the browser tab +3. `template` and `taxonomy` keys should always be left as is. They instruct Grav to use the proper theme and order the pages properly. +4. `routes`' `default` key makes the page available by default on `https://yunohost.org/docs/write_documentation` instead of needing to reaching it on `https://yunohost.org/docs/contribute/write_documentation`, which is where it is stored in the directory hierarchy. + +## Syntax + +You can use Markdown syntax, refer to the [documentation](/doc_markdown_guide) for further information. + +! Note that language codes are not to be included at the beginning of the links to other documentation pages: `/en`, `/fr`, etc. are superfluous. + +To improve Markdown capabilities, additional plugins are installed in Grav. You can refer to their own documentation on GitHub to see how to use them. +```text +anchors +external_links +flex-objects +highlight +image-captions +markdown-notices +presentation +presentation-deckset +shortcode-core +``` + +## Special pages + +Some pages of the documentation are automatically or dynamically generated. + +| Page | Path | Notes | +|---------------|-------|-------| +| Apps catalog | `/pages/02.applications/01.catalog/apps.md` | Retrieves and processes [app.json](https://github.com/YunoHost/apps/blob/master/apps.json?target=_blank) | +| Apps helpers | `pages/04.contribute/04.packaging_apps/11.helpers/packaging_apps_helpers.md` | Generated by this [script](https://github.com/YunoHost/yunohost/blob/dev/doc/generate_helper_doc.py?target=_blank), from this [template](https://github.com/YunoHost/yunohost/blob/dev/doc/helper_doc_template.md?target=_blank) | +| Per-app documentation | `pages/02.applications/02.docs/docs.md` | Lists the subpages in the same directory which have `taxonomy.category: docs, apps` in its header | + +## Host your own testing documentation + +! These instructions are yet to be fully tested. Please help us by reporting any issue you may have with them. + +0. Fork YunoHost documentation repository +1. Install Grav's YunoHost package: `yunohost app install grav` +2. Install the following plugins through Grav's admin panel or CLI: +```text +anchors +breadcrumbs +external_links +feed +flex-objects +git-sync +highlight +image-captions +langswitcher +markdown-notices +presentation +presentation-deckset +shortcode-core +tntsearch +``` +3. Set-up Git Sync plugin. + 1. Choose GitHub and your credentials on GitHub + 2. Set the repo, e.g. `https://github.com/username/doc` + 3. Copy the Webhook's URL, e.g. `https://grav.example/_git-sync-ca25c111f0de` + 4. Basic settings > Folders to Sync: `pages` `images` `themes` + 5. Git Repo Settings > User not required: Enabled + 6. Git Repo Settings > Web Hooks secret: Enabled + 7. Advanced settings > local branch: `master` + 8. Advanced settings > remote branch: `master` +(you can change `master` if you want to work on another branch, but do not forget to create it on GitHub first) + 9. Advanced settings > Committer Name: your GitHub username + 10. Advanced settings > Committer Email: your email saved on GitHub + 11. Save and Reset Local Copy + 12. Set `commits` and `tree` keys in `config/themes/yunohost-docs.yaml` to point to your fork's repository +4. Make sure `user/pages/01.home` and `user/pages/02.typography` directories are deleted. +5. Configuration > System: + 1. Language > Supported: `en` `fr` `de` `es` `ar` + 2. Language > Override Default Language: `en` + 3. Language > Set language from browser: `Yes` + 4. HTTP Headers > Etag: `Yes` + 5. Advanced > Blueprint Compatibility: `Yes` + 6. Advanced > YAML Compatibility: `Yes` + 7. Advanced > Twig Compatibility: `Yes` diff --git a/packaging_apps_fr.md b/pages/04.contribute/04.packaging_apps/02.technical_intro/packaging_apps.fr.md similarity index 61% rename from packaging_apps_fr.md rename to pages/04.contribute/04.packaging_apps/02.technical_intro/packaging_apps.fr.md index a0c1f114..9f8a1d75 100644 --- a/packaging_apps_fr.md +++ b/pages/04.contribute/04.packaging_apps/02.technical_intro/packaging_apps.fr.md @@ -1,11 +1,22 @@ -# Packaging d’applications <img src="/images/yunohost_package.png" width=100/> +--- +title: Packaging d'applications +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps' +--- + + Ce document a pour but de vous apprendre à packager une application pour YunoHost. +! This page is outdated and should be reworked + ### Prérequis Pour packager une application, voici les prérequis : -* Un compte sur un serveur git comme [GitHub](https://github.com/) pour pouvoir ensuite publier l’application ; -* Maîtriser un minimum [git](/packaging_apps_git), le Shell et d’autres notions de programmation ; +* Un compte sur un serveur Git comme [GitHub](https://github.com/) pour pouvoir ensuite publier l’application ; +* Maîtriser un minimum [Git](/packaging_apps_git), le Shell et d’autres notions de programmation ; * Une [machine virtuelle ou sur un serveur distant](/install) ou un environnement de développement, [ynh-dev](https://github.com/yunohost/ynh-dev) ou [VirtualBox](/packaging_apps_virtualbox), pour packager et tester son paquet. @@ -20,60 +31,30 @@ Un paquet YunoHost est composé : * d’un fichier `LICENSE` contenant la licence du paquet * d’une page de présentation du paquet contenu dans un fichier `README.md` -<a class="btn btn-lg btn-default" href="https://github.com/YunoHost/example_ynh">Paquet de base</a> n’hésitez pas à vous en servir comme base de travail. +[div class="btn btn-lg btn-default"] [Paquet de base](https://github.com/YunoHost/example_ynh) [/div] n’hésitez pas à vous en servir comme base de travail. ## Manifeste -<a class="btn btn-lg btn-default" href="/packaging_apps_manifest">Manifeste</a> +[div class="btn btn-lg btn-default"] [Manifeste](/packaging_apps_manifest) [/div] ## Les scripts -<a class="btn btn-lg btn-default" href="/packaging_apps_scripts">Scripts</a> +[div class="btn btn-lg btn-default"] [Scripts](/packaging_apps_scripts) [/div] ### Architecture et arguments Comme les instances de YunoHost possèdent une architecture unifiée, vous serez capable de deviner la plupart des réglages nécessaires. Mais si vous avez besoin de réglages spécifiques, comme le nom de domaine ou un chemin web pour configurer l’application, vous devrez les demander aux administrateurs lors de l’installation (voir la section `arguments` dans le § **Manifeste** ci-dessus). -<a class="btn btn-lg btn-default" href="/packaging_apps_arguments_management">Gestion des arguments</a> +[div class="btn btn-lg btn-default"] [Gestion des arguments](/packaging_apps_arguments_management) [/div] -### Configuration Nginx -<a class="btn btn-lg btn-default" href="/packaging_apps_nginx_conf">Configuration Nginx</a> +### Configuration NGINX +[div class="btn btn-lg btn-default"] [Configuration NGINX](/packaging_apps_nginx_conf) [/div] ### Multi-instance -<a class="btn btn-lg btn-default" href="/packaging_apps_multiinstance">Multi-instance</a> +[div class="btn btn-lg btn-default"] [Multi-instance](/packaging_apps_multiinstance) [/div] ### Hooks -<a class="btn btn-lg btn-default" href="/packaging_apps_hooks">Hooks</a> +[div class="btn btn-lg btn-default"] [Hooks](/packaging_apps_hooks) [/div] ### Commandes pratiques -<a class="btn btn-lg btn-default" href="/packaging_apps_helpers">Commandes pratiques</a> - -### Référencement des logs -Dans de nombreuses situations, vous pouvez vouloir indexer un fichier de log pour qu'il soit affiché dans la webadmin. Pour indexer un log, il faut créer un fichier d'indexation dans `/var/log/yunohost/categories/app/APPNAME.yml`. - -Il est possible de spécifier la date de début en commençant le nom de fichier par la date `YYYYMMDD-HHMMSS`. - -Exemple de fichier de log d'indexation: -```bash -log_path: /chemin/vers/le/fichier.log -``` - -Il est possible d'afficher des infos complémentaires, la variable env sera affichée dans la partie "Contexte" : -```bash -extra: - env: - args1: value1 - args2: value2 - args3: value3 -``` - -Il est possible de rattacher le log à une application précise et/ou un service, un nom de domaine, une personne : -```bash -related_to: - - ['app', 'APPNAME'] - - ['service', 'SERVICE1'] - - ['service', 'SERVICE2'] - - ['domain', 'DOMAIN.TLD'] -``` - -Ces informations seront utilisées pour permettre de filtrer les logs en relation avec une de ces entités application, service, domaine, personne. +[div class="btn btn-lg btn-default"] [Commandes pratiques](/packaging_apps_helpers) [/div] ### Améliorer la qualité du paquet d’installation @@ -83,13 +64,13 @@ Vous trouverez ci-dessous une liste des points à vérifier concernant la qualit * Votre script d’installation utilise une méthode d’installation en ligne de commande plutôt qu’un appel curl via un formulaire web d’installation ; * Votre script d’installation enregistre les réponses de l’utilisateur ; * Vous avez vérifié les sources de l’application avec une somme de contrôle (sha256, sha1 ou md5) ou une signature PGP ; -* Vos scripts ont été testés sur Debian Stretch 32 bits, 64 bits et ARM ; +* Vos scripts ont été testés sur Debian Buster 32 bits, 64 bits et ARM ; * Les scripts backup et restore sont présents et fonctionnels. Pour mesurer la qualité d'un paquet, celui-ci obtiendra un [niveau](/packaging_apps_levels), déterminé en fonction de divers critères d'installation et selon le respect des [règles de packaging](/packaging_apps_guidelines). ### Script de vérification du paquet -<a class="btn btn-lg btn-default" href="https://github.com/YunoHost/package_checker">Vérificateur de paquets</a> +[div class="btn btn-lg btn-default"] [Vérificateur de paquets](https://github.com/YunoHost/package_checker) [/div] Il s’agit d’un script Python qui vérifie : * que le paquet est à jour concernant les dernières spécifications @@ -100,11 +81,11 @@ Il s’agit d’un script Python qui vérifie : ### Intégration continue Un serveur d'intégration continue est a disposition des packagers désirant tester leurs applications. -<a class="btn btn-lg btn-default" href="packaging_apps_ci">Intégration continue</a> +[div class="btn btn-lg btn-default"] [Intégration continue](packaging_apps_ci) [/div] ### Publiez et demandez des tests de votre application -* Demandez des tests et des retours sur votre application en publiant un [post sur le Forum](https://forum.yunohost.org/) dans la [catégorie `App integration`](https://forum.yunohost.org/c/app-integration). +* Demandez des tests et des retours sur votre application en publiant un [post sur le Forum](https://forum.yunohost.org/) dans la [catégorie `Discussion > Apps`](https://forum.yunohost.org/c/discuss/discuss-apps/). * Si votre paquet et l'application qu'il contient sont sous licence libre, faites une demande d’ajout de votre application dans le [dépôt des applications](https://github.com/YunoHost/apps) (voir aussi [la liste des apps](/apps)). Vous pouvez ajouter une application même si celle-ci n'est pour le moment pas fonctionelle : l'état d'avancement peut être `notworking`, `inprogress` ou `working`. @@ -114,4 +95,4 @@ Un serveur d'intégration continue est a disposition des packagers désirant tes **!! Section obsolète au 08/03/19** - Le fonctionnement du projet est en cours d'évolution sur ce point. -Pour qu’une application devienne officielle, elle doit être suffisamment testée, stable et fonctionner sous Debian Stretch 64 bits, 32 bits et ARM. Si ces conditions vous paraissent réunies, demandez l’[intégration officielle](https://github.com/YunoHost/apps) de votre application. +Pour qu’une application devienne officielle, elle doit être suffisamment testée, stable et fonctionner sous Debian Buster 64 bits, 32 bits et ARM. Si ces conditions vous paraissent réunies, demandez l’[intégration officielle](https://github.com/YunoHost/apps) de votre application. diff --git a/packaging_apps.md b/pages/04.contribute/04.packaging_apps/02.technical_intro/packaging_apps.md similarity index 60% rename from packaging_apps.md rename to pages/04.contribute/04.packaging_apps/02.technical_intro/packaging_apps.md index bf2c2601..33da1b70 100644 --- a/packaging_apps.md +++ b/pages/04.contribute/04.packaging_apps/02.technical_intro/packaging_apps.md @@ -1,12 +1,23 @@ -# App packaging <img src="/images/yunohost_package.png" width=100/> +--- +title: App packaging +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps' +--- + + The purpose of this document is to teach you how to package an application for YunoHost. +! This page is outdated and should be reworked + ### Requirements To package an application, here are the requirements: -* An account on a git server (e.g. [GitHub](https://github.com/)) to publish the application; -* Basic knowledge of [git](/packaging_apps_git), bash shell and other programming stuff; -* A testing [virtual machine or a distant server](/install), or a development environement, [ynh-dev](https://github.com/yunohost/ynh-dev) or [VirtualBox](/packaging_apps_virtualbox), to package and test the package. +* An account on a Git server (e.g. [GitHub](https://github.com/)) to publish the application; +* Basic knowledge of [Git](/packaging_apps_git), bash shell and other programming stuff; +* A testing [virtual machine or a distant server](/install) or [VirtualBox](/packaging_apps_virtualbox), to package and test the package. Alternatively you can also use [ynh-dev](https://github.com/yunohost/ynh-dev), it is meant for the core but can totally be used for developping apps, but be aware that for now the documentation on this part is lacking. ### Content A YunoHost package is composed of: @@ -17,25 +28,25 @@ A YunoHost package is composed of: * A `LICENSE` file containing the license of the package * A presentation page of your package in a `README.md` file -<a class="btn btn-lg btn-default" href="https://github.com/YunoHost/example_ynh"> A basic package</a> +[div class="btn btn-lg btn-default"] [ A basic package](https://github.com/YunoHost/example_ynh) [/div] feel free to use it as a framework. ## Manifest -<a class="btn btn-lg btn-default" href="/packaging_apps_manifest">Manifest</a> +[div class="btn btn-lg btn-default"] [Manifest](/packaging_apps_manifest) [/div] ## Scripts -<a class="btn btn-lg btn-default" href="/packaging_apps_scripts">Scripts</a> +[div class="btn btn-lg btn-default"] [Scripts](/packaging_apps_scripts) [/div] ### Architecture and arguments Since YunoHost has a unified architecture, you will be able to guess most of the settings you need. But if you need variable ones, like the domain or web path, you will have to ask the administrator at installation (see `arguments` section in the manifest above). -<a class="btn btn-lg btn-default" href="/packaging_apps_arguments_management">Arguments management</a> +[div class="btn btn-lg btn-default"] [Arguments management](/packaging_apps_arguments_management) [/div] -### Nginx configuration -<a class="btn btn-lg btn-default" href="/packaging_apps_nginx_conf">Nginx configuration</a> +### NGINX configuration +[div class="btn btn-lg btn-default"] [NGINX configuration](/packaging_apps_nginx_conf) [/div] ### Multi-instance -<a class="btn btn-lg btn-default" href="/packaging_apps_multiinstance">Multi-instance</a> +[div class="btn btn-lg btn-default"] [Multi-instance](/packaging_apps_multiinstance) [/div] ### Hooks YunoHost provides a hook system, which is accessible via the packager's script callbacks in command line. @@ -46,38 +57,7 @@ The scripts have to be placed in the `hooks` repository at the root of the YunoH Take a look at the [Nextcloud package](https://github.com/YunoHost-Apps/nextcloud_ynh/) for a working example. ### Helpers -<a class="btn btn-lg btn-default" href="/packaging_apps_helpers">Helpers</a> - -### Registering a log file - -In a lot of case, you might want to register a log file created by your app, to make it available in the webadmin. To register a log, you can create a reference file `/var/log/yunohost/categories/app/APPNAME.yml`. - -You can specify a start date by starting the file name with the date formatted as `YYYYMMDD-HHMMSS`. - -Example of yml metadata log file: -```bash -log_path: /path/to/your/log/file.log -``` - -If you want display some context info, you can add: -```bash -extra: - env: - args1: value1 - args2: value2 - args3: value3 -``` - -You can attach the log to an app, domain, service or user like this : -```bash -related_to: - - ['app', 'APPNAME'] - - ['service', 'SERVICE1'] - - ['service', 'SERVICE2'] - - ['domain', 'DOMAIN.TLD'] -``` - -This will be used to filter logs and display all log related to an entity like a user, a domain, an app or a service. +[div class="btn btn-lg btn-default"] [Helpers](/packaging_apps_helpers) [/div] ### Test it! In order to test your package, you can execute your script standalone as `admin` (do not forget to append required arguments): @@ -101,13 +81,13 @@ Here is a list of best practices for application install scripts: * install script should use the command-line method instead of calls to curl through web install form; * install script should save install answers; * application sources should be checked with a control sum (sha256, sha1 or md5) or a PGP signature; -* scripts should be tested on Debian Stretch 32 bits, 64 bits and ARM architectures; +* scripts should be tested on Debian Buster 32 bits, 64 bits and ARM architectures; * backup and restore scripts should be present and functional. -To be define the quality of a package, it'll obtained a [level](/packaging_apps_levels), determined according to somes criteria of installation and according to respect to [package guidelines](packaging_apps_guidelines). +To be define the quality of a package, it'll obtained a [level](/packaging_apps_levels), determined according to somes criteria of installation and according to respect to [package guidelines](/packaging_apps_guidelines). ### Package script checker -<a class="btn btn-lg btn-default" href="https://github.com/YunoHost/package_checker">Package checker</a> +[div class="btn btn-lg btn-default"] [Package checker](https://github.com/YunoHost/package_checker) [/div] This Python script checks: * that the package is up to date wich last specifications @@ -118,11 +98,11 @@ This Python script checks: ### Continuous integration A continuous integration server is available for packagers who want to test their apps. -<a class="btn btn-lg btn-default" href="packaging_apps_ci">Continuous integration</a> +[div class="btn btn-lg btn-default"] [Continuous integration](packaging_apps_ci) [/div] ### Publish and ask for testing your application -* Publishing a [post on the Forum](https://forum.yunohost.org/) with the [`App integration` category](https://forum.yunohost.org/c/app-integration), to ask for testing and feedback on your application. +* Publishing a [post on the Forum](https://forum.yunohost.org/) in the [`Discuss > Apps` category](https://forum.yunohost.org/c/discuss/discuss-apps/), to ask for testing and feedback on your application. * If your application is released under a free software license, you may ask the YunoHost app team to integrate your application to the [app repository](https://github.com/YunoHost/apps) (c.f. also the [app list](/apps)). You can add your application even if it is not stable or working yet : the current state can be specified to `notworking`, `inprogress`, or `working`. @@ -132,4 +112,4 @@ A continuous integration server is available for packagers who want to test thei **!! This section is obsolete as of 08/03/19** - The project's organization regarging this point is to be changed. -To become an official application, it must be tested well enough, be stable and should work on Debian Stretch 64 bits, 32 bits and ARM architectures. If you think those conditions are met, ask for [official integration](https://github.com/YunoHost/apps) of your application. +To become an official application, it must be tested well enough, be stable and should work on Debian Buster 64 bits, 32 bits and ARM architectures. If you think those conditions are met, ask for [official integration](https://github.com/YunoHost/apps) of your application. diff --git a/packaging_apps_git_fr.md b/pages/04.contribute/04.packaging_apps/03.git/packaging_apps_git.fr.md similarity index 97% rename from packaging_apps_git_fr.md rename to pages/04.contribute/04.packaging_apps/03.git/packaging_apps_git.fr.md index 95172258..c2ed3187 100644 --- a/packaging_apps_git_fr.md +++ b/pages/04.contribute/04.packaging_apps/03.git/packaging_apps_git.fr.md @@ -1,4 +1,11 @@ -# Comment utiliser Git pour packager les applications +--- +title: Utiliser Git pour packager les applications +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_git' +--- Git... Notre cher Git bien-aimé, que l'on peut aussi décrire comme "Goddamn Idiotic Truckload of sh*t" (Un stupide putain gros tas de m\*rde), selon Linus. Si vous ne connaissez pas encore Git, soyez sûr que vous serez bientôt d'accord avec cette description. @@ -23,14 +30,14 @@ La branche master est la branche qui contient la version de l'application que le La bonne habitude à prendre est de travailler à partir de la branche testing, et lorsque tout est réglé et testé, vous pouvez fusionner la branche testing dans master, afin que les utilisateurs puissent profiter de la nouvelle version de votre package. Pour voir et modifier la branche actuelle, utilisez ce bouton : -<img src="/images/github_branch.png" width=100%> + #### Modifier un fichier Maintenant que vous êtes sur la bonne branche, voyons comment éditer un fichier sur GitHub. Vous pouvez éditer n'importe quel fichier en utilisant l'icône du petit crayon : -<img src="/images/github_edit.png" width=100%> + Si vous n'avez pas la permission d'écrire sur le dépôt, vous verrez (comme sur l'image) que vous allez créer un fork (nous verrons plus loin ce qu'est un fork). Si vous avez la permission d'écrire, vous allez simplement modifier le fichier, sans forker. @@ -39,7 +46,7 @@ Si vous avez la permission d'écrire, vous allez simplement modifier le fichier, Lorsque vous avez fini de modifier le fichier, vous pouvez faire un commit de vos modifications. Derrière ce mot, l'idée est assez simple, vous allez juste enregistrer vos modifications... -<img src="/images/github_commit.png" width=100%> + Le premier champ est le nom de votre commit, une phrase très courte pour expliquer pourquoi vous avez fait cette modification. Le deuxième champ est un champ plus grand pour une explication plus complète, si vous en avez besoin. @@ -67,7 +74,7 @@ Il se peut que vous deviez tout de même forker sur votre propre compte pour pou Après avoir effectué vos commits, que ce soit sur une branche ou un fork, vous souhaitez proposer vos modifications pour qu'elles soient intégrées dans le dépôt principal, ou dans la branche d'origine. Pour ce faire, vous allez créer une pull request. GitHub vous demande généralement directement si vous souhaitez le faire. Sinon, vous trouverez le bouton de création d'une pull request juste ici : -<img src="/images/github_pull_request.png" width=100%> + Lors de la création d'une pull request à partir d'un fork, pour faciliter le travail de révision du code, **ne jamais** décocher la case *Allow edits from maintainers*. Cette option permet simplement aux mainteneurs du dépôt d'origine de modifier directement votre travail. @@ -75,7 +82,7 @@ Lors de la création d'une pull request à partir d'un fork, pour faciliter le t Conformément à la [YEP 1.7](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines.md#yep-17), votre application doit être intégrée à l'organisation YunoHost-Apps, mais si vous n'avez jamais contribué à une application auparavant ou si vous n'avez jamais eu d'application dans cette organisation, vous n'en aurez peut-être pas l'autorisation. -Tout d'abord, vous devez avoir la permission d'écrire dans l'organisation, pour ce faire, demandez au groupe Apps sur le salon xmpp Apps. +Tout d'abord, vous devez avoir la permission d'écrire dans l'organisation, pour ce faire, demandez au groupe Apps sur le salon XMPP Apps. Pour transférer votre application sur l'organisation YunoHost-Apps, allez dans votre dépôt et dans l'onglet *Settings*. En bas de la page, vous trouverez *Transfer ownership*. @@ -116,7 +123,7 @@ Dans le contexte d'un nouveau package, vous devrez également créer un dépôt Ce qui n'est pas plus compliqué qu'un gros bouton vert *New*. Ne vous embêtez pas avec des README, .gitignore ou licence. Créez simplement le dépôt lui-même. vous pouvez maintenant cloner ce nouveau dépôt avec Git. -<img src="/images/github_create_new_repo.png" width=100%> + Vous disposez maintenant de 2 dépôts clonés sur votre ordinateur. Copiez tous les fichiers de l'application example_ynh, **excepté le répertoire .git** (vous voulez juste les fichiers eux-mêmes) dans votre nouveau package. diff --git a/packaging_apps_git.md b/pages/04.contribute/04.packaging_apps/03.git/packaging_apps_git.md similarity index 96% rename from packaging_apps_git.md rename to pages/04.contribute/04.packaging_apps/03.git/packaging_apps_git.md index 1ddb6ff2..58062371 100644 --- a/packaging_apps_git.md +++ b/pages/04.contribute/04.packaging_apps/03.git/packaging_apps_git.md @@ -1,4 +1,11 @@ -# How to use Git to package apps +--- +title: Use Git to package apps +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_git' +--- Git... Our dear beloved Git, which can be described also as "Goddamn Idiotic Truckload of sh*t", according to Linus. Be sure if you don't know Git yet that you will soon agree with that description. @@ -23,14 +30,14 @@ The master branch is the branch that contains the version of the app users will The usual thing to do is to work from the testing branch, and when everything is settled and tested, you can merge the testing branch in master, so users will enjoy the new release of your package. To see and change the current branch, use this button: -<img src="/images/github_branch.png" width=100%> + #### Edit a file Now that you're on the right branch, let's see how to edit a file on GitHub. You can edit any file by using the small pencil icon: -<img src="/images/github_edit.png" width=100%> + If you don't have the permission to write on the repository, you will see (as on the picture) that you're going to create a fork (we'll see below what a fork is). If you have the permission to write, you will just edit the file, without forking. @@ -39,7 +46,7 @@ If you have the permission to write, you will just edit the file, without forkin When you're done with your modification on the file, you can commit your changes. Behind that word, the idea is quite simple, you're just going to save your changes... -<img src="/images/github_commit.png" width=100%> + The first field is the name of your commit, a very short sentence to explain why you did this modification. The second field is a large one for a more complete explanation, if you need it. @@ -67,7 +74,7 @@ You may still need to fork on your own account to be able to save your modificat After you have committed your changes, whether on a branch or a fork, you want to propose your modifications to be integrated into the main repository, or the original branch. To do so, you're going to *create a pull request*. GitHub usually ask you directly if you want to do so. Otherwise, you'll find the button to create a pull request just here: -<img src="/images/github_pull_request.png" width=100%> + When creating a pull request from a fork, to ease the work of the reviewers, **do never** uncheck the checkbox *Allow edits from maintainers*. That option simply allow the maintainers of the original repository to edit directly your work. @@ -75,7 +82,7 @@ When creating a pull request from a fork, to ease the work of the reviewers, **d Following the [YEP 1.7](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines.md#yep-17), your app has to be into the YunoHost-Apps organization, but if you have never contributed to an app before or never had any app into this organization you may not have the permission. -First, you need the permission to write into the organization, to do so, ask to the Apps group on the Apps xmpp room. +First, you need the permission to write into the organization, to do so, ask to the Apps group on the Apps XMPP room. To transfer your app to the YunoHost-Apps organization, go to your repository and to *Settings* tab. At the bottom of the page, you will find *Transfer ownership*. @@ -116,7 +123,7 @@ In the context of a new package, you will also need to create a repository on Gi Which is as simple as a big green *New* button. Don't bother with README, .gitignore or license. Just create the repository itself. you can now git clone that new repository. -<img src="/images/github_create_new_repo.png" width=100%> + You now have 2 repositories cloned on your computer. Copy all the files from the example_ynh app, **except the .git directory** (You just want the files themselves) to your new package. diff --git a/packaging_apps_virtualbox_fr.md b/pages/04.contribute/04.packaging_apps/04.virtualbox/packaging_apps_virtualbox.fr.md similarity index 91% rename from packaging_apps_virtualbox_fr.md rename to pages/04.contribute/04.packaging_apps/04.virtualbox/packaging_apps_virtualbox.fr.md index baaa0f5c..7911e92d 100644 --- a/packaging_apps_virtualbox_fr.md +++ b/pages/04.contribute/04.packaging_apps/04.virtualbox/packaging_apps_virtualbox.fr.md @@ -1,4 +1,11 @@ -# Créer un environnement de développement avec VirtualBox +--- +title: Créer un environnement de développement avec VirtualBox +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_virtualbox' +--- Cette page de documentation va vous expliquer comment mettre en place un serveur YunoHost virtuel, avec VirtualBox, pour travailler sur le packaging d'application. @@ -13,7 +20,7 @@ Nous parlerons ici de VirtualBox, pour son approche graphique facile à utiliser ## Installer VirtualBox -Depuis un système GNU Linux, installer simplement le paquet `virtualbox-qt`. +Depuis un système GNU/Linux, installer simplement le paquet `virtualbox-qt`. Depuis un système Windows ou macOS, il faudra se référer à la page de [téléchargement de VirtualBox](https://www.virtualbox.org/wiki/Downloads) pour récupérer le fichier d'installation adéquat. Le paquet virtualbox est déprécié depuis debian 9, un fichier d'installation .deb est disponible sur la même page. Quel que soit votre système, il ne devrait pas être nécessaire d'installer l'extension pack ou les additions invités. @@ -40,14 +47,14 @@ Avant de commencer à jouer avec la machine virtuelle, il convient de faire un p Arrêtez la machine virtuelle avant tout. La gestion des instantanés se fait dans l'onglet "Instantanés" -<img src="/images/virtualbox_packaging1-fr.jpg" width=80%> + Et on crée un premier instantané -<img src="/images/virtualbox_packaging2-fr.jpg" width=30%> + À présent on peut commencer à travailler sur la machine virtuelle et créer autant d'instantanés que souhaité pour jalonner le travail. -<img src="/images/virtualbox_packaging3-fr.jpg" width=80%> + Dans cet exemple, on pourra facilement revenir en arrière, après avoir testé la suppression du package par exemple et restaurer la machine virtuelle dans l'état précédent avec le package encore installé avec succès. Et lorsque le package sera pleinement fonctionnel, il suffira de supprimer les instantanés liés à ce package pour revenir à l'état initial de la machine virtuelle. @@ -57,14 +64,14 @@ Nous disposerons ainsi d'un serveur YunoHost vierge de toute installation d'appl En plus de l'usage d'instantanés successifs, il est également possible de dériver un nouvel état actuel et de nouveaux instantanés depuis un instantané plus ancien que le dernier. -<img src="/images/virtualbox_packaging4-fr.jpg" width=80%> + Dans cet exemple, j'ai dérivé deux branches depuis mon installation réussie du package, pour tester indépendamment la suppression simple de l'application, l'upgrade et le backup/restore. Finalement je suis reparti de la base de la machine virtuelle pour démarrer un nouveau test sur un autre package, sans pour autant abandonner le précédent test. À tout moment, il est possible de revenir sur un instantané précédent en le restaurant. La machine démarrera toujours sur l'"État actuel". -<img src="/images/virtualbox_packaging5-fr.jpg" width=80%> + > Il est toujours possible de créer un nouvel instantané, que la machine soit à l'arrêt ou non. Mais pour restaurer un instantané, la machine ne doit pas être en cours d'exécution. @@ -87,6 +94,6 @@ ssh admin@11.22.33.44 Pour copier facilement les fichiers du package ou utiliser un éditeur de texte graphique, on peut également se connecter en sftp avec un explorateur de fichier. Il suffit de se connecter à l'adresse `sftp://admin@mon.domain/` avec l'explorateur. -<img src="/images/virtualbox_packaging6.jpg" width=80%> + > Sur Windows ou macOS, l'explorateur de fichier ne supporte pas nativement le protocole sftp… diff --git a/packaging_apps_virtualbox.md b/pages/04.contribute/04.packaging_apps/04.virtualbox/packaging_apps_virtualbox.md similarity index 87% rename from packaging_apps_virtualbox.md rename to pages/04.contribute/04.packaging_apps/04.virtualbox/packaging_apps_virtualbox.md index 49e87483..0a3b6c9a 100644 --- a/packaging_apps_virtualbox.md +++ b/pages/04.contribute/04.packaging_apps/04.virtualbox/packaging_apps_virtualbox.md @@ -1,19 +1,26 @@ -# Create a development environment with VirtualBox +--- +title: Create a development environment with VirtualBox +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_virtualbox' +--- -This documentation page aims at explaining how to setup a Yunohost virtual server, using VirtualBox, to work on application packaging. +This documentation page aims at explaining how to setup a YunoHost virtual server, using VirtualBox, to work on application packaging. -## Why use VirtualBox rather than an actual YunoHost production server to package an application ? +## Why use VirtualBox rather than an actual YunoHost production server to package an application? -There are mostly two reasons why one should prefer a virtual server rather than their own server : +There are mostly two reasons why one should prefer a virtual server rather than their own server: -- You can freely torture a virtual server without any risk of breaking it, since you can always restore it to a former working state. It would really be a pity to break your own real server ! +- You can freely torture a virtual server without any risk of breaking it, since you can always restore it to a former working state. It would really be a pity to break your own real server! - In a typical workflow, a virtual server state would be restored from a known snapshot before starting any work on it, so as to always keep a clean system, without any residues of a former installation. This allows to always be as close a possible to a user first installation. We will discuss VirtualBox in this guide, as it comes with an easy to use GUI. If you prefer a pure commandline approach to handling your virtual machine, you should use [ynh-dev](/dev) instead. ## Installing VirtualBox -From a GNU Linux system, simply install the `virtualbox-qt` package. +From a GNU/Linux system, simply install the `virtualbox-qt` package. From a Windows or macOS machine, you'd have to refer to the [VirtualBox download page](https://www.virtualbox.org/wiki/Downloads) to fetch the appropriate installation package. The virtualbox package is deprecated since Debian 9, a `.deb` installation package is available on the abovementioned referenced page. Whatever your system, there should be no need to install the extension pack or the guest addons. @@ -40,14 +47,14 @@ Before starting to play with the virtual machine, now is a good time to take a f First, stop the virtual machine. Managing snapshots is done in the 'Snapshots' tab -<img src="/images/virtualbox_packaging1-en.png" width=80%> + Here, we're creating a first snapshot -<img src="/images/virtualbox_packaging2-en.png" width=30%> + We can now start to work on the virtual machine and create as many snapshots as desired for each milestone of our modifications. -<img src="/images/virtualbox_packaging3-en.png" width=80%> + In this example, after having validated our particular package removal works fine, we can easily get back in time by restoring the virtual machine to its previous state with the package still installed. Once the package will be fully functional, it will just be a matter of deleting the snaphots associated with this package work to get the virtual machine back to its initial state. @@ -57,14 +64,14 @@ For our next test, we will then be back to a freshly installed YunoHost serveur, In addition to successive snapshots, it is also possible to create a new machine state and additional snapshots from an older machine snapshot/state. -<img src="/images/virtualbox_packaging4-en.png" width=80%> + In this example, I have created two branches since my successful package installation, so as to independently test just the application removal, upgrade and backup/restore steps. I eventually got back to the virtual machine base state to start a new test on another package, without dropping my former test whatsoever. At any time, it is possible to get back to a previous snapshot simply by restoring it. The machine always start on the "Current state" state. -<img src="/images/virtualbox_packaging5-en.png" width=80%> + > It is always possible to create a new snapshot, whether the machine is stopped or not. To restore a snapshot however, the machine cannot be running. @@ -86,6 +93,6 @@ We can now work on the virtual machine using the commandline. To easily copy the package files or use a graphical text editor, one can also connect via `sftp` using a file explorer. It's a simple matter of using the `sftp://admin@my.domain/` address. -<img src="/images/virtualbox_packaging6.jpg" width=80%> + -> Note: on Windows or macOS, the file explorer does not natively support the `sftp` protocol… +> Note: on Windows or macOS, the file explorer does not natively support the `sftp` protocol... diff --git a/packaging_apps_manifest_fr.md b/pages/04.contribute/04.packaging_apps/05.manifest/packaging_apps_manifest.fr.md similarity index 90% rename from packaging_apps_manifest_fr.md rename to pages/04.contribute/04.packaging_apps/05.manifest/packaging_apps_manifest.fr.md index 50a9c611..f76bfe74 100644 --- a/packaging_apps_manifest_fr.md +++ b/pages/04.contribute/04.packaging_apps/05.manifest/packaging_apps_manifest.fr.md @@ -1,4 +1,11 @@ -<a class="btn btn-lg btn-default" href="/packaging_apps">Packaging d’application</a> +--- +title: Packaging d'application +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_manifest' +--- ## Manifeste Le fichier `manifest.json` définit les constantes de l’application, un ensemble de valeurs dont YunoHost a besoin pour identifier l’application et l’installer correctement. Voici un exemple : @@ -78,9 +85,9 @@ Le fichier `manifest.json` définit les constantes de l’application, un ensemb * **arguments** : * **install** : paramètres à demander à l’administrateur lors de l’installation. * **name** : identifiant du paramètre - * **type** : (optionnel) type de paramètre parmis `domain`, `path`, `user`, `app`, `boolean`, `string` et `password`. Le champ sera caché dans le cas d’un mot de passe. + * **type** : (optionnel) type de paramètre parmi `domain`, `path`, `user`, `app`, `boolean`, `string` et `password`. Le champ sera caché dans le cas d’un mot de passe. * **choices** : (optionnel) restreint les réponses possibles à plusieurs choix. - * **optional** : (optionnel) champs qui indique si ce paramètre est optionnel. Il peut avoir les valeurs `true` ou `false`. + * **optional** : (optionnel) champ qui indique si ce paramètre est optionnel. Il peut avoir les valeurs `true` ou `false`. * **ask** : question posée (au minimum en anglais – `en`) que vous pouvez traduire dans plusieurs langues. * **example** : (optionnel) valeur d’exemple pour aider l’administrateur à remplir le formulaire d’installation. * **default** : (optionnel) valeur par défaut. diff --git a/packaging_apps_manifest.md b/pages/04.contribute/04.packaging_apps/05.manifest/packaging_apps_manifest.md similarity index 96% rename from packaging_apps_manifest.md rename to pages/04.contribute/04.packaging_apps/05.manifest/packaging_apps_manifest.md index f4407aa1..e01a0e97 100644 --- a/packaging_apps_manifest.md +++ b/pages/04.contribute/04.packaging_apps/05.manifest/packaging_apps_manifest.md @@ -1,4 +1,11 @@ -<a class="btn btn-lg btn-default" href="/packaging_apps">Application packaging</a> +--- +title: Application packaging +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_manifest' +--- ## Manifest The `manifest.json` file defines the app's constants, a bunch of values that YunoHost needs to identify the app and install it correctly. It looks like this: diff --git a/packaging_apps_scripts_fr.md b/pages/04.contribute/04.packaging_apps/06.scripts/packaging_apps_scripts.fr.md similarity index 88% rename from packaging_apps_scripts_fr.md rename to pages/04.contribute/04.packaging_apps/06.scripts/packaging_apps_scripts.fr.md index 8854f287..7a37129a 100644 --- a/packaging_apps_scripts_fr.md +++ b/pages/04.contribute/04.packaging_apps/06.scripts/packaging_apps_scripts.fr.md @@ -1,6 +1,11 @@ -<a class="btn btn-lg btn-default" href="/packaging_apps">Packaging d’application</a> - -## Les scripts +--- +title: Scripts +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_scripts' +--- Un paquet YunoHost doit contenir cinq scripts Shell : `install`, `remove`, `upgrade`, `backup` et `restore`. Un 6ème script `change_url` peut aussi être ajouté de façon optionnelle. Ces scripts seront exécutés en tant que `root` sur les serveurs YunoHost. @@ -17,15 +22,15 @@ Il est possible d'utiliser des helpers et d'importer une librairie de fonction p Cette variable contient le chemin du répertoire de travail courant du contexte d'exécution du script. Elle peut être utile pour retrouver le chemin initial si on s'est déplacé pendant l'exécution du script. Elle est utilisée par certains helpers pour être sûr d'utiliser le bon. #### YNH_APP_ID -Contient l'identifiant de l'application sans le numéro d'instance +Contient l'identifiant de l'application sans le numéro d'instance. Exemple: strut #### YNH_APP_INSTANCE_NAME -Contient le nom d'instance qui sera utilisé dans de nombreuses situation pour pouvoir gérer l'installation multiple d'une même app. +Contient le nom d'instance qui sera utilisé dans de nombreuses situations pour pouvoir gérer l'installation multiple d'une même app. Exemple: strut__3 #### YNH_APP_INSTANCE_NUMBER -Contient le numéro de l'instance. Attention il ne s'agit pas forcément du nombre d'instance toujours installée, car une ancienne application peut avoir été désinstallée. +Contient le numéro de l'instance. Attention il ne s'agit pas forcément du nombre d'instances toujours installées, car une ancienne application peut avoir été désinstallée. Exemple: 3 @@ -47,7 +52,7 @@ Par exemple, si dans le manifest nous avons une question de cette forme } ``` -Le nom de la question `domain` donc dans le script on peut accéder à cette variable via $YNH_APP_ARG_DOMAIN. L'usage est de créer une variable plus courte comme ceci: +Le nom de la question `domain` donc dans le script on peut accéder à cette variable via $YNH_APP_ARG_DOMAIN. L'usage est de créer une variable plus courte comme ceci : ```bash domain=$YNH_APP_ARG_DOMAIN diff --git a/packaging_apps_scripts.md b/pages/04.contribute/04.packaging_apps/06.scripts/packaging_apps_scripts.md similarity index 95% rename from packaging_apps_scripts.md rename to pages/04.contribute/04.packaging_apps/06.scripts/packaging_apps_scripts.md index 7d5c4a88..28862b55 100644 --- a/packaging_apps_scripts.md +++ b/pages/04.contribute/04.packaging_apps/06.scripts/packaging_apps_scripts.md @@ -1,6 +1,11 @@ -<a class="btn btn-lg btn-default" href="/packaging_apps">Application packaging</a> - -## Scripts +--- +title: Scripts +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_scripts' +--- For now, a YunoHost package must contain five Shell scripts: `install`, `remove`, `upgrade`, `backup` and `restore`. A 6th script `change_url` can also be added optionally. These scripts will be executed as `root` on the YunoHost instances. @@ -45,7 +50,7 @@ For example, if in the manifest we have a question like this "de": "Wählen Sie bitte einen Domain für OpenSondage" }, "example": "domain.org" -}, +} ``` The name of the question is `domain` so in the script we can access it with YNH_APP_ARG_DOMAIN. The usage is to create a shorter name in the script like this: diff --git a/pages/04.contribute/04.packaging_apps/07.arguments/01.arguments_format/packaging_apps_arguments_format.md b/pages/04.contribute/04.packaging_apps/07.arguments/01.arguments_format/packaging_apps_arguments_format.md new file mode 100644 index 00000000..010748c8 --- /dev/null +++ b/pages/04.contribute/04.packaging_apps/07.arguments/01.arguments_format/packaging_apps_arguments_format.md @@ -0,0 +1,338 @@ +--- +title: YunoHost Arguments Format +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_arguments_format' +--- + +In YunoHost application developpement there are several places where you end up +writting questions for your user like in the `manifest.json/toml`, the +`config_panel.json/toml` or `actions.json/toml`. + +This page documents this format and all available kind of questions you can ask +your user. Unless it's stated otherwise, this format applies to everyplace it's +usable (for now: installation arguments in `manifest.json/toml`, +`config_panel.json/toml` and `actions.json/toml`) + +## YunoHost arguments general format + +The general format for an argument looks like this in toml: + +```toml +[maybe.some.stuff.before.the_name] +type = "one_of_the_available_type" +ask.en = "the question in english" +ask.fr = "the question in french" +help.en = "some help text in english" # optional +help.fr = "some help text in french" # optional +example = "an example value" # optional +default = "some stuff" # optional, not available for all types +optional = true # optional, will skip if not answered +``` + +And in json: + +```javascript +{ + "name": "the_name", + "type": "one_of_the_available_type", // "sting" is not specified + "ask": { + "en": "the question in english", + "fr": "the question in french" + }, + "help": { + "en": "some help text in english", + "fr": "some help text in french" + }, + "example": "an example value", // optional + "default", "some stuff", // optional, not available for all types + "optional": true // optional, will skip if not answered +}, +``` + +## All avaiable types + +### string + +This one is the simpliest one and is the default type if you don't specify one. + +Example in toml: + +```toml +[maybe.some.stuff.before.the_name] +type = "string" # optional +ask.en = "the question in english" +ask.fr = "the question in french" +example = "an example value" # optional +default = "some stuff" # optional +``` + +And in json: + +```javascript +{ + "name": "the_name", + "type": "string", // optional + "ask": { + "en": "the question in english", + "fr": "the question in french" + }, + "default": "some stuff", // optional + "example": "an example value" +}, +``` + +### string with choices + +Like string except the user needs to chose in a list of specifics strings. + +Example in toml: + +```toml +[maybe.some.stuff.before.the_name] +type = "string" +ask.en = "the question in english" +ask.fr = "la question en français" +example = "an example value" # optional +choices = ["fr", "en"] +default = "en" # optional +``` + +And in json: + +```javascript +{ + "name": "the_name", + "type": "string", + "ask": { + "en": "the question in english", + "fr": "the question in french" + }, + "example": "an example value", + "choices": ["fr", "en"], + "default": "en" // optional +}, +``` + +### domain + +This type will ask the user to chose one of the domains of their YunoHost instance. + +Example in toml: + +```toml +[maybe.some.stuff.before.the_name] +type = "domain" +ask.en = "the question in english" +ask.fr = "the question in french" +``` + +And in json: + +```javascript +{ + "name": "the_name", + "type": "domain", + "ask": { + "en": "the question in english", + "fr": "the question in french" + } +}, +``` + +### Path + +This type will ask the user to chose an URL path (generally to happen it to a +domain) like "/path/to/my/app" + +Example in toml: + +```toml +[maybe.some.stuff.before.the_name] +type = "path" +ask.en = "the question in english" +ask.fr = "the question in french" +default = "/my_app" +``` + +And in json: + +```javascript +{ + "name": "the_name", + "type": "path", + "ask": { + "en": "the question in english", + "fr": "the question in french" + }, + "default": "/my_app" +}, +``` + +### User + +This type will ask the user to select a user in the list of users in their +YunoHost installation. Generally this is used to select who is going to be the +admin or who is going to have access to this application. + +Example in toml: + +```toml +[maybe.some.stuff.before.the_name] +type = "user" +ask.en = "the question in english" +ask.fr = "the question in french" +``` + +And in json: + +```javascript +{ + "name": "the_name", + "type": "user", + "ask": { + "en": "the question in english", + "fr": "the question in french" + } +}, +``` + +### Password + +This type will ask the user to input a password. This is generally used to +input the password for creating an account on the application. + +In CLI it will behave like any password query and won't print any character on +type (not "\*\*\*...") for security reasons. + +Example in toml: + +```toml +[maybe.some.stuff.before.the_name] +type = "password" +ask.en = "the question in english" +ask.fr = "the question in french" +``` + +And in json: + +```javascript +{ + "name": "the_name", + "type": "password", + "ask": { + "en": "the question in english", + "fr": "the question in french" + } +}, +``` + +### Boolean + +This type will ask the user to answer true or false to a question. + +Example in toml: + +```toml +[maybe.some.stuff.before.the_name] +type = "boolean" +ask.en = "the question in english" +ask.fr = "the question in french" +default = true +``` + +And in json: + +```javascript +{ + "name": "the_name", + "type": "boolean", + "ask": { + "en": "the question in english", + "fr": "the question in french" + }, + "default": true +}, +``` + +### Number + +Like string except the user needs to enter a number + +Example in toml: + +```toml +[maybe.some.stuff.before.the_name] +type = "number" +ask.en = "the question in english" +ask.fr = "the question in french" +default = 0 +``` + +And in json: + +```javascript +{ + "name": "the_name", + "type": "number", + "ask": { + "en": "the question in english", + "fr": "the question in french" + }, + "default": 0 +}, +``` + +### App + +This type will ask the user to select an application in the list of installed +application on their YunoHost. + +Example in toml: + +```toml +[maybe.some.stuff.before.the_name] +type = "app" +ask.en = "the question in english" +ask.fr = "the question in french" +``` + +And in json: + +```javascript +{ + "name": "the_name", + "type": "app", + "ask": { + "en": "the question in english", + "fr": "the question in french" + } +}, +``` + +### display_text + +This is a special type that allows the application packager to write some text +that will be simply displayed. This is useful to provide more context. + +```toml +[maybe.some.stuff.before.the_name] +type = "display_text" +ask.en = "the text in english" +ask.fr = "the text in french" +``` + +And in json: + +```javascript +{ + "name": "the_name", + "type": "display_text", + "ask": { + "en": "the text in english", + "fr": "the text in french" + } +}, +``` diff --git a/packaging_apps_arguments_management_fr.md b/pages/04.contribute/04.packaging_apps/07.arguments/packaging_apps_arguments_management.fr.md similarity index 78% rename from packaging_apps_arguments_management_fr.md rename to pages/04.contribute/04.packaging_apps/07.arguments/packaging_apps_arguments_management.fr.md index 5d66e707..729ea1b8 100644 --- a/packaging_apps_arguments_management_fr.md +++ b/pages/04.contribute/04.packaging_apps/07.arguments/packaging_apps_arguments_management.fr.md @@ -1,6 +1,12 @@ -<a class="btn btn-lg btn-default" href="/packaging_apps">Packaging d’application</a> +--- +title: Gestion des arguments +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_arguments_management' +--- -## Gestion des arguments #### Récupérer les arguments du manifeste dans le script d’installation Les arguments sont passés au script d’installation dans l’ordre du manifeste. Par exemple pour Roundcube, les arguments `domain` et `path` seront respectivement récupérés via les variables d’environnement ou les paramètres `$1` et `$2` dans le script d’installation. @@ -16,13 +22,13 @@ Les scripts remove, upgrade, backup et restore peuvent avoir besoin de ces argum Pour cela, YunoHost peut sauvegarder les arguments avec cette commande : ```bash # Store config on YunoHost instance -ynh_app_setting_set "$app" domain "$domain" +ynh_app_setting_set --app="$app" --key="domain" --value="$domain" ``` Elle est généralement utilisée dans le script d’installation. Ensuite, le script peut récupérer les arguments sauvegardés avec cette commande : ```bash -domain=$(ynh_app_setting_get $app domain) +domain=$(ynh_app_setting_get --app "$app" --key=domain) ``` Ces données sont sauvegardées dans `/etc/yunohost/apps/<app_name>/settings.yml`. diff --git a/packaging_apps_arguments_management.md b/pages/04.contribute/04.packaging_apps/07.arguments/packaging_apps_arguments_management.md similarity index 86% rename from packaging_apps_arguments_management.md rename to pages/04.contribute/04.packaging_apps/07.arguments/packaging_apps_arguments_management.md index 130e3de4..03300782 100644 --- a/packaging_apps_arguments_management.md +++ b/pages/04.contribute/04.packaging_apps/07.arguments/packaging_apps_arguments_management.md @@ -1,6 +1,12 @@ -<a class="btn btn-lg btn-default" href="/packaging_apps">Application packaging</a> +--- +title: Arguments management +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_arguments_management' +--- -## Arguments management #### Retrieve arguments in the install script from manifest Arguments are given to the install script from the manifest in it's order. For instance, for Roundcube, `domain` and `path` arguments will respectively be retreived from environment variables or from `$1` and `$2` parameters in the install script. diff --git a/pages/04.contribute/04.packaging_apps/08.groups_permissions/packaging_apps_permissions.md b/pages/04.contribute/04.packaging_apps/08.groups_permissions/packaging_apps_permissions.md new file mode 100644 index 00000000..637932a7 --- /dev/null +++ b/pages/04.contribute/04.packaging_apps/08.groups_permissions/packaging_apps_permissions.md @@ -0,0 +1,82 @@ +--- +title: User groups and permissions +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_permissions' +--- + +Installing an app creates the permission `app.main` with `all_users` allowed by default. + +If you wish to make the application publicly available, instead of the old `unprotected_urls` mechanism, you should give access to the special group `visitors`: + +```shell +ynh_permission_update --permission "main" --add visitors +``` + +If you wish to create a custom permission for your app (e.g. to restrict access to an admin interface) you may use the following helpers: + +```shell +ynh_permission_create --permission "admin" --url "/admin" --allowed "$admin_user" --label "Label for your permission" +``` + +You don't need to take care of removing permissions or backing up/restoring them as it is handled by the core of YunoHost. + +### Migrating away from the legacy permission management + +When migrating/fixing an app still using the legacy permission system, it should be understood that the accesses are now to be managed by features from the core, outside of the application scripts! + +Application scripts are only expected to: +- if relevant, during the install script, initialize the main permission of the app as public (`visitors`) or private (`all_users`) or only accessible to specific groups/users ; +- if relevant, create and initialize any other specific permission (e.g. to some admin interface) in the install script (and *maybe* in some migration happening in the upgrade script). + +Applications scripts should absolutely **NOT** mess up with any already-existing app accesses (including `unprotected`/`skipped_uris` settings) during any other case, as *it would reset any admin-defined access rule*! + +When migrating away from the legacy permission, you should: +- remove any management of `$is_public`-like or `$admin_user`-like setting, except for any manifest question meant to either *initialize* the app as public/private or specific permissions ; +- remove the old legacy permissions. Check out the recommended way to proceed in the example_ynh app (in particular [this code snippet](https://github.com/YunoHost/example_ynh/pull/111/files#diff-57aeb84da86cb7420dfedd8e49bc644fb799d5413d01927a0417bde753e8922f)) + +It should boil down to : +```bash +if ynh_legacy_permissions_exists; then + ynh_legacy_permissions_delete_all + + ynh_app_setting_delete --app=$app --key=is_public + + # Create the permission using the new framework (if your app has relevant additional permissions) + ynh_permission_create --permission="admin" --url="/admin" --allowed=$admin +fi +``` + +- remove any call to `yunohost app addaccess` and similar actions that are now obsolete and deprecated. +- if your app use LDAP and support filter, use the filter `'(&(objectClass=posixAccount)(permission=cn=YOUR_APP.main,ou=permission,dc=yunohost,dc=org))'` to allow users who have this permission. (A complete documentation of LDAP [here](https://moulinette.readthedocs.io/en/latest/ldap.html) if you want to undestand how it works with YunoHost) + +#### Additional features from 4.1 + +- Label customization : this is the name displayed to end users in the user portal. You can provide a default label (for example app.admin maybe be labelled 'Admin interface'). The label may be changed later by the admin after installation. +- Enabling/disabling tile : this toggles wether or not an app is shown in the user portal (if the user has the corresponding permission). The corresponding option is called `show_tile` which may be `True` or `False`. A single app may have multiple tiles in the SSO. The url of each tile corresponds to the `url` parameter of the permission. +- Multiple url support: a permission may have additional urls associated to it. This give the possiblity to protect many url with the same permission - in particular for tricky use case (for example several pieces of admin interfaces spread over different subpaths). +- Protecting permission: As a packager, you may choose to "protect" a permission if you believe that it's not relevant for the admin to add/remove this permission to/from the visitors group. For example, this is the case for the API permission of Nextcloud, which in the vast majority of cases should be kept publicly because mobile client won't go through the SSO. Note that when using the helper `ynh_permission_update`, it's still possible to add/remove the `visitor` group of this permission. +- Disabling auth header: some app authentification mecanism do not appreciate that SSOwat injects the Authorization header (which is an essential mecanism for single sign-on). You can now choose to disable the auth header injection from SSOwat to fix this (instead of the previous hack of using `skipped_uris`) + +##### Correspondance between the old and new permission mecanism + +| | with auth header | no auth header | +| :---------- | :--------------- | :------------- | +| **public** | unprotected_uris | skipped_uris | +| **private** | protected_uris | N/A | + + +| | with auth header | no auth header | +| :---------- | :------------------------------------------ | :------------------------------------------- | +| **public** | auth_header=True, visitor group allowed | auth_header=False, visitor group allowed | +| **private** | auth_header=True, visitor group not allowed | auth_header=False, visitor group not allowed | + + +All of theses feature are managable by theses following helper: +- `ynh_permission_create` +- `ynh_permission_url` +- `ynh_permission_update` + +If you have any question, please contact the app team diff --git a/packaging_apps_nginx_conf_fr.md b/pages/04.contribute/04.packaging_apps/09.nginx/packaging_apps_nginx_conf.fr.md similarity index 55% rename from packaging_apps_nginx_conf_fr.md rename to pages/04.contribute/04.packaging_apps/09.nginx/packaging_apps_nginx_conf.fr.md index 6e4b2702..14dc2e5f 100644 --- a/packaging_apps_nginx_conf_fr.md +++ b/pages/04.contribute/04.packaging_apps/09.nginx/packaging_apps_nginx_conf.fr.md @@ -1,34 +1,42 @@ -# Configuration Nginx -Ce tutoriel a pour but d’aider à la mise en place d’une configuration Nginx pour le packaging d’application. +--- +title: Configuration NGINX +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_nginx_conf' +--- -#### Configuration Nginx +Ce tutoriel a pour but d’aider à la mise en place d’une configuration NGINX pour le packaging d’application. + +#### Configuration NGINX La configuration doit être mise dans `conf/nginx.conf`. Il s’agira d’utiliser **FastCGI** ou un **proxy_pass** suivant l’application : * **FastCGI** est utilisé dans les applications PHP : -```bash +```nginx location YNH_EXAMPLE_PATH { - alias YNH_WWW_PATH ; - if ($scheme = http) { - rewrite ^ https://$server_name$request_uri? permanent; - } - index index.php; - try_files $uri $uri/ index.php; - location ~ [^/]\.php(/|$) { - fastcgi_split_path_info ^(.+?\.php)(/.*)$; - fastcgi_pass unix:/var/run/php5-fpm.sock; - fastcgi_index index.php; - include fastcgi_params; - fastcgi_param REMOTE_USER $remote_user; - fastcgi_param PATH_INFO $fastcgi_path_info; - fastcgi_param SCRIPT_FILENAME $request_filename; - } + alias YNH_WWW_PATH ; + if ($scheme = http) { + rewrite ^ https://$server_name$request_uri? permanent; + } + index index.php; + try_files $uri $uri/ index.php; + location ~ [^/]\.php(/|$) { + fastcgi_split_path_info ^(.+?\.php)(/.*)$; + fastcgi_pass unix:/var/run/php5-fpm.sock; + fastcgi_index index.php; + include fastcgi_params; + fastcgi_param REMOTE_USER $remote_user; + fastcgi_param PATH_INFO $fastcgi_path_info; + fastcgi_param SCRIPT_FILENAME $request_filename; + } - # Include SSOWAT user panel. - include conf.d/yunohost_panel.conf.inc; + # Include SSOWAT user panel. + include conf.d/yunohost_panel.conf.inc; } ``` * **`proxy_pass`** dans le cas d’applications Python, Node.js, Go et Java : -```bash +```nginx location YNH_EXAMPLE_PATH/ { rewrite ^YNH_EXAMPLE_PATH$ YNH_EXAMPLE_PATH/ permanent; proxy_pass http://YNH_EXEMPLE_DOMAIN:YNH_EXAMPLE_PORT/; @@ -44,15 +52,15 @@ sed -i "s@YNH_EXAMPLE_PATH@$path@g" ../conf/nginx.conf sed -i "s@YNH_EXAMPLE_PORT@$port@g" ../conf/nginx.conf sed -i "s@YNH_EXEMPLE_DOMAIN@$domain@g" ../conf/nginx.conf ``` -Il faut ensuite déplacer ce fichier de configuration dans la configuration de Nginx, puis recharger la configuration de Nginx : +Il faut ensuite déplacer ce fichier de configuration dans la configuration de NGINX, puis recharger la configuration de NGINX : ```bash cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/$app.conf sudo service nginx reload ``` -Si Nginx ne redémarre pas, il se peut que le fichier de configuration ne soit pas correct. +Si NGINX ne redémarre pas, il se peut que le fichier de configuration ne soit pas correct. #### Script de suppression -Il s’agit de supprimer la configuration Nginx pour cette application, puis de recharger la configuration de Nginx : +Il s’agit de supprimer la configuration NGINX pour cette application, puis de recharger la configuration de NGINX : ```bash rm -f /etc/nginx/conf.d/$domain.d/$app.conf sudo service nginx reload diff --git a/packaging_apps_nginx_conf.md b/pages/04.contribute/04.packaging_apps/09.nginx/packaging_apps_nginx_conf.md similarity index 50% rename from packaging_apps_nginx_conf.md rename to pages/04.contribute/04.packaging_apps/09.nginx/packaging_apps_nginx_conf.md index 80b8ce5d..f6999fb6 100644 --- a/packaging_apps_nginx_conf.md +++ b/pages/04.contribute/04.packaging_apps/09.nginx/packaging_apps_nginx_conf.md @@ -1,34 +1,42 @@ -# Nginx configuration -This tutorial aim to help setup Nginx configuration for application packaging. +--- +title: NGINX configuration +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_nginx_conf' +--- -#### Nginx configuration +This tutorial aim to help setup NGINX configuration for application packaging. + +#### NGINX configuration Configuration must be in `conf/nginx.conf`. We must use **FastCGI** or a **proxy_pass** following the application: * **FastCGI** is used with PHP applications: -```bash +```nginx location YNH_EXAMPLE_PATH { - alias YNH_WWW_PATH ; - if ($scheme = http) { - rewrite ^ https://$server_name$request_uri? permanent; - } - index index.php; - try_files $uri $uri/ index.php; - location ~ [^/]\.php(/|$) { - fastcgi_split_path_info ^(.+?\.php)(/.*)$; - fastcgi_pass unix:/var/run/php5-fpm.sock; - fastcgi_index index.php; - include fastcgi_params; - fastcgi_param REMOTE_USER $remote_user; - fastcgi_param PATH_INFO $fastcgi_path_info; - fastcgi_param SCRIPT_FILENAME $request_filename; - } + alias YNH_WWW_PATH ; + if ($scheme = http) { + rewrite ^ https://$server_name$request_uri? permanent; + } + index index.php; + try_files $uri $uri/ index.php; + location ~ [^/]\.php(/|$) { + fastcgi_split_path_info ^(.+?\.php)(/.*)$; + fastcgi_pass unix:/var/run/php5-fpm.sock; + fastcgi_index index.php; + include fastcgi_params; + fastcgi_param REMOTE_USER $remote_user; + fastcgi_param PATH_INFO $fastcgi_path_info; + fastcgi_param SCRIPT_FILENAME $request_filename; + } - # Include SSOWAT user panel. - include conf.d/yunohost_panel.conf.inc; + # Include SSOWAT user panel. + include conf.d/yunohost_panel.conf.inc; } ``` * **`proxy_pass`** in Python, Node.js, Go and Java applications: -```bash +```nginx location YNH_EXAMPLE_PATH/ { rewrite ^YNH_EXAMPLE_PATH$ YNH_EXAMPLE_PATH/ permanent; proxy_pass http://YNH_EXEMPLE_DOMAIN:YNH_EXAMPLE_PORT/; @@ -44,16 +52,16 @@ sed -i "s@YNH_EXAMPLE_PATH@$path@g" ../conf/nginx.conf sed -i "s@YNH_EXAMPLE_PORT@$port@g" ../conf/nginx.conf sed -i "s@YNH_EXEMPLE_DOMAIN@$domain@g" ../conf/nginx.conf ``` -We must move that configuration file in Nginx configuration, then reload Nginx configuration: +We must move that configuration file in NGINX configuration, then reload NGINX configuration: ```bash cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/$app.conf sudo service nginx reload ``` -If Nginx won't restart, it's possible that this configuration file isn't right. +If NGINX won't restart, it's possible that this configuration file isn't right. #### Remove script -We must remove Nginx configuration of this application, then reload Nginx configuration: +We must remove NGINX configuration of this application, then reload NGINX configuration: ```bash rm -f /etc/nginx/conf.d/$domain.d/$app.conf sudo service nginx reload -``` \ No newline at end of file +``` diff --git a/packaging_apps_multiinstance_fr.md b/pages/04.contribute/04.packaging_apps/10.multi_instance/packaging_apps_multiinstance.fr.md similarity index 68% rename from packaging_apps_multiinstance_fr.md rename to pages/04.contribute/04.packaging_apps/10.multi_instance/packaging_apps_multiinstance.fr.md index 58a6809b..df26be28 100644 --- a/packaging_apps_multiinstance_fr.md +++ b/pages/04.contribute/04.packaging_apps/10.multi_instance/packaging_apps_multiinstance.fr.md @@ -1,12 +1,18 @@ -<a class="btn btn-lg btn-default" href="/packaging_apps">Packaging d’application</a> +--- +title: Multi-instances +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_multiinstance' +--- -### Multi-instances Le multi-instance est la capacité d’une application à être installée plusieurs fois. #### Scripts Lorsque YunoHost installe l’application, il passe au script dans la variable `$YNH_APP_INSTANCE_NAME` la valeur `id__n` avec l’identifiant de l’application `id` provenant du manifeste et `n` un nombre incrémentée à chaque nouvelle instance de l’application. -**Par exemple** : dans le script roundcube, il faut nommer la base de données `roundcube`, le dossier d’installation `roundcube` et la [configuration Nginx](/packaging_apps_nginx_conf) `roundcube`. De cette manière, la seconde installation de roundcube ne rentrera pas en conflit avec la première, et sera installée dans la base de données `roundcube__2`, dans le répertoire `roundcube__2`, et avec la configuration Nginx `roundcube__2`. +**Par exemple** : dans le script Roundcube, il faut nommer la base de données `roundcube`, le dossier d’installation `roundcube` et la [configuration NGINX](/packaging_apps_nginx_conf) `roundcube`. De cette manière, la seconde installation de Roundcube ne rentrera pas en conflit avec la première, et sera installée dans la base de données `roundcube__2`, dans le répertoire `roundcube__2`, et avec la configuration NGINX `roundcube__2`. Récupération de l'identifiant de l'app (incluant l'id multi-instance) : diff --git a/packaging_apps_multiinstance.md b/pages/04.contribute/04.packaging_apps/10.multi_instance/packaging_apps_multiinstance.md similarity index 53% rename from packaging_apps_multiinstance.md rename to pages/04.contribute/04.packaging_apps/10.multi_instance/packaging_apps_multiinstance.md index 03bc6680..a9318a6a 100644 --- a/packaging_apps_multiinstance.md +++ b/pages/04.contribute/04.packaging_apps/10.multi_instance/packaging_apps_multiinstance.md @@ -1,12 +1,18 @@ -<a class="btn btn-lg btn-default" href="/packaging_apps">Application packaging</a> +--- +title: Multi-instances +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_multiinstance' +--- -### Multi-instance Multi-instance is application capacity to be installed several times. #### Scripts -When YunoHost installs the application, it passes `$YNH_APP_INSTANCE_NAME` var to the script, set to value `id__n` with the application `id` coming from the manifest and `n` being an integer incremented each time a new instance of the application is installed. +When YunoHost installs the application, it passes `$YNH_APP_INSTANCE_NAME` var to the script, set to value `id__n` with the application `id` coming from the manifest and `n` being an integer incremented each time a new instance of the application is installed. -**E.g.** in the roundcube script, database is called `roundcube`, the install directory `roundcube` and the [Nginx configuration](/packaging_apps_nginx_conf) `roundcube`. This way, the second instance of roundcube will not conflict with the first one, and will be installed in the `roundcube__2` database, in the `roundcube__2`directory, and with the `roundcube__2` Nginx configuration. +**E.g.** in the Roundcube script, database is called `roundcube`, the install directory `roundcube` and the [NGINX configuration](/packaging_apps_nginx_conf) `roundcube`. This way, the second instance of Roundcube will not conflict with the first one, and will be installed in the `roundcube__2` database, in the `roundcube__2`directory, and with the `roundcube__2` NGINX configuration. Retrieve app identifier (including the multi-instance id): ```bash diff --git a/pages/04.contribute/04.packaging_apps/11.helpers/packaging_apps_helpers.md b/pages/04.contribute/04.packaging_apps/11.helpers/packaging_apps_helpers.md new file mode 100644 index 00000000..9ab374f1 --- /dev/null +++ b/pages/04.contribute/04.packaging_apps/11.helpers/packaging_apps_helpers.md @@ -0,0 +1,3364 @@ +--- +title: App helpers +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_helpers' +--- + +Doc auto-generated by [this script](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/doc/generate_helper_doc.py) on 02/07/2021 (Yunohost version 4.1.7) + + +### APT + +**ynh_package_is_installed** +[details summary="<i>Check either a package is installed or not</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_package_is_installed --package=name` + + +**Arguments**: + + +- `-p`, `--package=`: the package name to check + + + + + +**Example**: `ynh_package_is_installed --package=yunohost && echo "ok"` + + + + +**Details**: +Requires YunoHost version 2.2.4 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/apt#L56) +[/details] +---------------- + +**ynh_package_version** +[details summary="<i>Get the version of an installed package</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_package_version --package=name` + + +**Arguments**: + + +- `-p`, `--package=`: the package name to get version + + + + + +**Returns**: the version or an empty string + + +**Example**: `version=$(ynh_package_version --package=yunohost)` + + + + +**Details**: +Requires YunoHost version 2.2.4 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/apt#L78) +[/details] +---------------- + +**ynh_package_update** +[details summary="<i>Update package index files</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_package_update` + + + + + + +**Details**: +Requires YunoHost version 2.2.4 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/apt#L111) +[/details] +---------------- + +**ynh_package_install** +[details summary="<i>Install package(s)</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_package_install name [name [...]]` + + +**Arguments**: + + +- `name`: the package name to install + + + + + + + + +**Details**: +Requires YunoHost version 2.2.4 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/apt#L121) +[/details] +---------------- + +**ynh_package_remove** +[details summary="<i>Remove package(s)</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_package_remove name [name [...]]` + + +**Arguments**: + + +- `name`: the package name to remove + + + + + + + + +**Details**: +Requires YunoHost version 2.2.4 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/apt#L132) +[/details] +---------------- + +**ynh_package_autoremove** +[details summary="<i>Remove package(s) and their uneeded dependencies</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_package_autoremove name [name [...]]` + + +**Arguments**: + + +- `name`: the package name to remove + + + + + + + + +**Details**: +Requires YunoHost version 2.2.4 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/apt#L142) +[/details] +---------------- + +**ynh_package_autopurge** +[details summary="<i>Purge package(s) and their uneeded dependencies</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_package_autopurge name [name [...]]` + + +**Arguments**: + + +- `name`: the package name to autoremove and purge + + + + + + + + +**Details**: +Requires YunoHost version 2.7.2 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/apt#L152) +[/details] +---------------- + +**ynh_install_app_dependencies** +[details summary="<i>Define and install dependencies with a equivs control file</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_install_app_dependencies dep [dep [...]]` + + +**Arguments**: + + +- `dep`: the package name to install in dependence. Writing "dep3|dep4|dep5" can be used to specify alternatives. For example : dep1 dep2 "dep3|dep4|dep5" will require to install dep1 and dep 2 and (dep3 or dep4 or dep5). + + + + + + + + +**Details**: +This helper can/should only be called once per app</br></br>example : ynh\_install\_app\_dependencies dep1 dep2 "dep3|dep4|dep5"</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/apt#L222) +[/details] +---------------- + +**ynh_add_app_dependencies** +[details summary="<i>Add dependencies to install with ynh_install_app_dependencies</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_add_app_dependencies --package=phpversion [--replace]` + + +**Arguments**: + + +- `-p`, `--package=`: Packages to add as dependencies for the app. + + + +- `-r`, `--replace`: Replace dependencies instead of adding to existing ones. + + + + + + + + +**Details**: +Requires YunoHost version 3.8.1 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/apt#L295) +[/details] +---------------- + +**ynh_remove_app_dependencies** +[details summary="<i>Remove fake package and its dependencies</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_remove_app_dependencies` + + + + + + +**Details**: +Dependencies will removed only if no other package need them.</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/apt#L327) +[/details] +---------------- + +**ynh_install_extra_app_dependencies** +[details summary="<i>Install packages from an extra repository properly.</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_install_extra_app_dependencies --repo="repo" --package="dep1 dep2" [--key=key_url] [--name=name]` + + +**Arguments**: + + +- `-r`, `--repo=`: Complete url of the extra repository. + + + +- `-p`, `--package=`: The packages to install from this extra repository + + + +- `-k`, `--key=`: url to get the public key. + + + +- `-n`, `--name=`: Name for the files for this repo, $app as default value. + + + + + + + + +**Details**: +Requires YunoHost version 3.8.1 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/apt#L341) +[/details] +---------------- + + +### BACKUP + +**ynh_backup** +[details summary="<i>Add a file or a directory to the list of paths to backup</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_backup --src_path=src_path [--dest_path=dest_path] [--is_big] [--not_mandatory]` + + +**Arguments**: + + +- `-s`, `--src_path=`: file or directory to bind or symlink or copy. it shouldn't be in the backup dir. + + + +- `-d`, `--dest_path=`: destination file or directory inside the backup dir + + + +- `-b`, `--is_big`: Indicate data are big (mail, video, image ...) + + + +- `-m`, `--not_mandatory`: Indicate that if the file is missing, the backup can ignore it. + + + +- `arg`: Deprecated arg + + + + + + + + +**Details**: +This helper can be used both in a system backup hook, and in an app backup script</br></br>Details: ynh\_backup writes SRC and the relative DEST into a CSV file. And it</br>creates the parent destination directory</br></br>If DEST is ended by a slash it complete this path with the basename of SRC.</br></br>Example in the context of a wordpress app</br></br>ynh\_backup "/etc/nginx/conf.d/$domain.d/$app.conf"</br># => This line will be added into CSV file</br># "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/etc/nginx/conf.d/$domain.d/$app.conf"</br></br>ynh\_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "conf/nginx.conf"</br># => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf/nginx.conf"</br></br>ynh\_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "conf/"</br># => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf/$app.conf"</br></br>ynh\_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "conf"</br># => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf"</br></br>#Deprecated usages (maintained for retro-compatibility)</br>ynh\_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "${backup\_dir}/conf/nginx.conf"</br># => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf/nginx.conf"</br></br>ynh\_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "/conf/"</br># => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf/$app.conf"</br></br>How to use --is\_big:</br>--is\_big is used to specify that this part of the backup can be quite huge.</br>So, you don't want that your package does backup that part during ynh\_backup\_before\_upgrade.</br>In the same way, an user may doesn't want to backup this big part of the app for</br> each of his backup. And so handle that part differently.</br></br>As this part of your backup may not be done, your restore script has to handle it.</br>In your restore script, use --not\_mandatory with ynh\_restore\_file</br>As well in your remove script, you should not remove those data ! Or an user may end up with</br> a failed upgrade restoring an app without data anymore !</br></br>To have the benefit of --is\_big while doing a backup, you can whether set the environement</br> variable BACKUP\_CORE\_ONLY to 1 (BACKUP\_CORE\_ONLY=1) before the backup command. It will affect</br> only that backup command.</br>Or set the config do\_not\_backup\_data to 1 into the settings.yml of the app. This will affect</br> all backups for this app until the setting is removed.</br></br>Requires YunoHost version 2.4.0 or higher.</br>Requires YunoHost version 3.5.0 or higher for the argument --not\_mandatory</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/backup#L63) +[/details] +---------------- + +**ynh_restore** +[details summary="<i>Restore all files that were previously backuped in a core backup script or app backup script</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_restore` + + + + + + +**Details**: +Requires YunoHost version 2.6.4 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/backup#L186) +[/details] +---------------- + +**ynh_restore_file** +[details summary="<i>Restore a file or a directory</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_restore_file --origin_path=origin_path [--dest_path=dest_path] [--not_mandatory]` + + +**Arguments**: + + +- `-o`, `--origin_path=`: Path where was located the file or the directory before to be backuped or relative path to $YNH_CWD where it is located in the backup archive + + + +- `-d`, `--dest_path=`: Path where restore the file or the dir, if unspecified, the destination will be ORIGIN_PATH or if the ORIGIN_PATH doesn't exist in the archive, the destination will be searched into backup.csv + + + +- `-m`, `--not_mandatory`: Indicate that if the file is missing, the restore process can ignore it. + + + + + + + +**Examples**: + + +- ` ynh_restore_file "/etc/nginx/conf.d/$domain.d/$app.conf"` + + + +- `You can also use relative paths:` + + + +- ` ynh_restore_file "conf/nginx.conf"` + + + + + +**Details**: +Use the registered path in backup\_list by ynh\_backup to restore the file at</br>the right place.</br></br>If DEST\_PATH already exists and is lighter than 500 Mo, a backup will be made in</br>/home/yunohost.conf/backup/. Otherwise, the existing file is removed.</br></br>if apps/wordpress/etc/nginx/conf.d/$domain.d/$app.conf exists, restore it into</br>/etc/nginx/conf.d/$domain.d/$app.conf</br>if no, search for a match in the csv (eg: conf/nginx.conf) and restore it into</br>/etc/nginx/conf.d/$domain.d/$app.conf</br></br>Requires YunoHost version 2.6.4 or higher.</br>Requires YunoHost version 3.5.0 or higher for the argument --not\_mandatory</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/backup#L247) +[/details] +---------------- + +**ynh_store_file_checksum** +[details summary="<i>Calculate and store a file checksum into the app settings</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_store_file_checksum --file=file` + + +**Arguments**: + + +- `-f`, `--file=`: The file on which the checksum will performed, then stored. + + + + + + + + +**Details**: +$app should be defined when calling this helper</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/backup#L325) +[/details] +---------------- + +**ynh_backup_if_checksum_is_different** +[details summary="<i>Verify the checksum and backup the file if it's different</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_backup_if_checksum_is_different --file=file` + + +**Arguments**: + + +- `-f`, `--file=`: The file on which the checksum test will be perfomed. + + + + + +**Returns**: the name of a backup file, or nothing + + + + + +**Details**: +This helper is primarily meant to allow to easily backup personalised/manually</br>modified config files.</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/backup#L357) +[/details] +---------------- + +**ynh_delete_file_checksum** +[details summary="<i>Delete a file checksum from the app settings</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_delete_file_checksum --file=file` + + +**Arguments**: + + +- `-f`, `--file=`: The file for which the checksum will be deleted + + + + + + + + +**Details**: +$app should be defined when calling this helper</br></br>Requires YunoHost version 3.3.1 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/backup#L390) +[/details] +---------------- + +**ynh_backup_before_upgrade** +[details summary="<i>Make a backup in case of failed upgrade</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_backup_before_upgrade + ynh_clean_setup () { + ynh_restore_upgradebackup + } + ynh_abort_if_errors` + + + + + + +**Details**: +Requires YunoHost version 2.7.2 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/backup#L412) +[/details] +---------------- + +**ynh_restore_upgradebackup** +[details summary="<i>Restore a previous backup if the upgrade process failed</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_backup_before_upgrade + ynh_clean_setup () { + ynh_restore_upgradebackup + } + ynh_abort_if_errors` + + + + + + +**Details**: +Requires YunoHost version 2.7.2 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/backup#L461) +[/details] +---------------- + + +### FAIL2BAN + +**ynh_add_fail2ban_config** +[details summary="<i>Create a dedicated fail2ban config (jail and filter conf files)</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `1: ynh_add_fail2ban_config --logpath=log_file --failregex=filter [--max_retry=max_retry] [--ports=ports] +2: ynh_add_fail2ban_config --use_template [--others_var="list of others variables to replace"] +| for example : 'var_1 var_2 ...'` + + +**Arguments**: + + +- `-l`, `--logpath=`: Log file to be checked by fail2ban + + + +- `-r`, `--failregex=`: Failregex to be looked for by fail2ban + + + +- `-m`, `--max_retry=`: Maximum number of retries allowed before banning IP address - default: 3 + + + +- `-p`, `--ports=`: Ports blocked for a banned IP address - default: http,https + + + +- `-t`, `--use_template`: Use this helper in template mode + + + +- `-v`, `--others_var=`: List of others variables to replace separeted by a space + + + + + + + + +**Details**: +-----------------------------------------------------------------------------</br></br>This will use a template in ../conf/f2b\_jail.conf and ../conf/f2b\_filter.conf</br> \_\_APP\_\_ by $app</br></br>You can dynamically replace others variables by example :</br> \_\_VAR\_1\_\_ by $var\_1</br> \_\_VAR\_2\_\_ by $var\_2</br></br>Generally your template will look like that by example (for synapse):</br></br>f2b\_jail.conf:</br> [\_\_APP\_\_]</br> enabled = true</br> port = http,https</br> filter = \_\_APP\_\_</br> logpath = /var/log/\_\_APP\_\_/logfile.log</br> maxretry = 3</br></br>f2b\_filter.conf:</br> [INCLUDES]</br> before = common.conf</br> [Definition]</br></br># Part of regex definition (just used to make more easy to make the global regex)</br> \_\_synapse\_start\_line = .? \- synapse\..+ \-</br></br># Regex definition.</br> failregex = ^%(\_\_synapse\_start\_line)s INFO \- POST\-(\d+)\- <HOST> \- \d+ \- Received request\: POST /\_matrix/client/r0/login\??<SKIPLINES>%(\_\_synapse\_start\_line)s INFO \- POST\-\1\- Got login request with identifier: \{u'type': u'm.id.user', u'user'\: u'(.+?)'\}, medium\: None, address: None, user\: u'\5'<SKIPLINES>%(\_\_synapse\_start\_line)s WARNING \- \- (Attempted to login as @\5\:.+ but they do not exist|Failed password login for user @\5\:.+)$</br></br>ignoreregex =</br></br>-----------------------------------------------------------------------------</br></br>Note about the "failregex" option:</br> regex to match the password failure messages in the logfile. The</br> host must be matched by a group named "host". The tag "<HOST>" can</br> be used for standard IP/hostname matching and is only an alias for</br> (?:::f{4,6}:)?(?P<host>[\w\-.^\_]+)</br></br>You can find some more explainations about how to make a regex here :</br> https://www.fail2ban.org/wiki/index.php/MANUAL\_0\_8#Filters</br></br>Note that the logfile need to exist before to call this helper !!</br></br>To validate your regex you can test with this command:</br>fail2ban-regex /var/log/YOUR\_LOG\_FILE\_PATH /etc/fail2ban/filter.d/YOUR\_APP.conf</br></br>Requires YunoHost version 3.5.0 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/fail2ban#L65) +[/details] +---------------- + +**ynh_remove_fail2ban_config** +[details summary="<i>Remove the dedicated fail2ban config (jail and filter conf files)</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_remove_fail2ban_config` + + + + + + +**Details**: +Requires YunoHost version 3.5.0 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/fail2ban#L150) +[/details] +---------------- + + +### GETOPTS + + +### HARDWARE + +**ynh_get_ram** +[details summary="<i>Get the total or free amount of RAM+swap on the system</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_get_ram [--free|--total] [--ignore_swap|--only_swap]` + + +**Arguments**: + + +- `-f`, `--free`: Count free RAM+swap + + + +- `-t`, `--total`: Count total RAM+swap + + + +- `-s`, `--ignore_swap`: Ignore swap, consider only real RAM + + + +- `-o`, `--only_swap`: Ignore real RAM, consider only swap + + + + + +**Returns**: the amount of free ram + + + + + +**Details**: +Requires YunoHost version 3.8.1 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/hardware#L13) +[/details] +---------------- + +**ynh_require_ram** +[details summary="<i>Return 0 or 1 depending if the system has a given amount of RAM+swap free or total</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_require_ram --required=RAM required in Mb [--free|--total] [--ignore_swap|--only_swap] +| exit: Return 1 if the ram is under the requirement, 0 otherwise.` + + +**Arguments**: + + +- `-r`, `--required=`: The amount to require, in Mb + + + +- `-f`, `--free`: Count free RAM+swap + + + +- `-t`, `--total`: Count total RAM+swap + + + +- `-s`, `--ignore_swap`: Ignore swap, consider only real RAM + + + +- `-o`, `--only_swap`: Ignore real RAM, consider only swap + + + + + + + + +**Details**: +Requires YunoHost version 3.8.1 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/hardware#L82) +[/details] +---------------- + + +### LOGGING + +**ynh_die** +[details summary="<i>Print a message to stderr and exit</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_die --message=MSG [--ret_code=RETCODE]` + + +**Arguments**: + + +- `-m`, `--message=`: Message to display + + + +- `-c`, `--ret_code=`: Exit code to exit with + + + + + + + + +**Details**: +Requires YunoHost version 2.4.0 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/logging#L10) +[/details] +---------------- + +**ynh_print_info** +[details summary="<i>Display a message in the 'INFO' logging category</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_print_info --message="Some message"` + + +**Arguments**: + + +- `-m`, `--message=`: Message to display + + + + + + + + +**Details**: +Requires YunoHost version 3.2.0 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/logging#L30) +[/details] +---------------- + +**ynh_print_warn** +[details summary="<i>Print a warning on stderr</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_print_warn --message="Text to print"` + + +**Arguments**: + + +- `-m`, `--message=`: The text to print + + + + + + + + +**Details**: +Requires YunoHost version 3.2.0 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/logging#L75) +[/details] +---------------- + +**ynh_print_err** +[details summary="<i>Print an error on stderr</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_print_err --message="Text to print"` + + +**Arguments**: + + +- `-m`, `--message=`: The text to print + + + + + + + + +**Details**: +Requires YunoHost version 3.2.0 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/logging#L92) +[/details] +---------------- + +**ynh_exec_err** +[details summary="<i>Execute a command and print the result as an error</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_exec_err your_command +ynh_exec_err "your_command | other_command"` + + +**Arguments**: + + +- `command`: command to execute + + + + + + + + +**Details**: +When using pipes, double quotes are required - otherwise, this helper will run the first command, and the whole output will be sent through the next pipe.</br></br>If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.</br></br>Requires YunoHost version 3.2.0 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/logging#L114) +[/details] +---------------- + +**ynh_exec_warn** +[details summary="<i>Execute a command and print the result as a warning</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_exec_warn your_command +ynh_exec_warn "your_command | other_command"` + + +**Arguments**: + + +- `command`: command to execute + + + + + + + + +**Details**: +When using pipes, double quotes are required - otherwise, this helper will run the first command, and the whole output will be sent through the next pipe.</br></br>If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.</br></br>Requires YunoHost version 3.2.0 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/logging#L129) +[/details] +---------------- + +**ynh_exec_warn_less** +[details summary="<i>Execute a command and force the result to be printed on stdout</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_exec_warn_less your_command +ynh_exec_warn_less "your_command | other_command"` + + +**Arguments**: + + +- `command`: command to execute + + + + + + + + +**Details**: +When using pipes, double quotes are required - otherwise, this helper will run the first command, and the whole output will be sent through the next pipe.</br></br>If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.</br></br>Requires YunoHost version 3.2.0 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/logging#L144) +[/details] +---------------- + +**ynh_exec_quiet** +[details summary="<i>Execute a command and redirect stdout in /dev/null</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_exec_quiet your_command +ynh_exec_quiet "your_command | other_command"` + + +**Arguments**: + + +- `command`: command to execute + + + + + + + + +**Details**: +When using pipes, double quotes are required - otherwise, this helper will run the first command, and the whole output will be sent through the next pipe.</br></br>If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.</br></br>Requires YunoHost version 3.2.0 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/logging#L159) +[/details] +---------------- + +**ynh_exec_fully_quiet** +[details summary="<i>Execute a command and redirect stdout and stderr in /dev/null</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_exec_fully_quiet your_command +ynh_exec_fully_quiet "your_command | other_command"` + + +**Arguments**: + + +- `command`: command to execute + + + + + + + + +**Details**: +When using pipes, double quotes are required - otherwise, this helper will run the first command, and the whole output will be sent through the next pipe.</br></br>If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.</br></br>Requires YunoHost version 3.2.0 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/logging#L174) +[/details] +---------------- + +**ynh_print_OFF** +[details summary="<i>Remove any logs for all the following commands.</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_print_OFF` + + + + + + +**Details**: +WARNING: You should be careful with this helper, and never forget to use ynh\_print\_ON as soon as possible to restore the logging.</br></br>Requires YunoHost version 3.2.0 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/logging#L185) +[/details] +---------------- + +**ynh_print_ON** +[details summary="<i>Restore the logging after ynh_print_OFF</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_print_ON` + + + + + + +**Details**: +Requires YunoHost version 3.2.0 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/logging#L194) +[/details] +---------------- + +**ynh_script_progression** +[details summary="<i>Print a progress bar showing the progression of an app script</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_script_progression --message=message [--weight=weight] [--time]` + + +**Arguments**: + + +- `-m`, `--message=`: The text to print + + + +- `-w`, `--weight=`: The weight for this progression. This value is 1 by default. Use a bigger value for a longer part of the script. + + + +- `-t`, `--time`: Print the execution time since the last call to this helper. Especially usefull to define weights. The execution time is given for the duration since the previous call. So the weight should be applied to this previous call. + + + +- `-l`, `--last`: Use for the last call of the helper, to fill the progression bar. + + + + + + + + +**Details**: +Requires YunoHost version 3.5.0 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/logging#L222) +[/details] +---------------- + +**ynh_return** +[details summary="<i>Return data to the Yunohost core for later processing +(to be used by special hooks like app config panel and core diagnosis)</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_return somedata` + + + + + + +**Details**: +Requires YunoHost version 3.6.0 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/logging#L307) +[/details] +---------------- + +**ynh_debug** +[details summary="<i>Debugger for app packagers</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_debug [--message=message] [--trace=1/0]` + + +**Arguments**: + + +- `-m`, `--message=`: The text to print + + + +- `-t`, `--trace=`: Turn on or off the trace of the script. Usefull to trace nonly a small part of a script. + + + + + + + + +**Details**: +Requires YunoHost version 3.5.0 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/logging#L318) +[/details] +---------------- + +**ynh_debug_exec** +[details summary="<i>Execute a command and print the result as debug</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_debug_exec your_command +ynh_debug_exec "your_command | other_command"` + + +**Arguments**: + + +- `command`: command to execute + + + + + + + + +**Details**: +When using pipes, double quotes are required - otherwise, this helper will run the first command, and the whole output will be sent through the next pipe.</br></br>If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.</br></br>Requires YunoHost version 3.5.0 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/logging#L375) +[/details] +---------------- + + +### LOGROTATE + +**ynh_use_logrotate** +[details summary="<i>Use logrotate to manage the logfile</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_use_logrotate [--logfile=/log/file] [--nonappend] [--specific_user=user/group]` + + +**Arguments**: + + +- `-l`, `--logfile=`: absolute path of logfile + + + +- `-n`, `--nonappend`: (optional) Replace the config file instead of appending this new config. + + + +- `-u`, `--specific_user=`: run logrotate as the specified user and group. If not specified logrotate is runned as root. + + + + + + + + +**Details**: +If no --logfile is provided, /var/log/${app} will be used as default.</br>logfile can be just a directory, or a full path to a logfile :</br>/parentdir/logdir</br>/parentdir/logdir/logfile.log</br></br>It's possible to use this helper multiple times, each config will be added to</br>the same logrotate config file. Unless you use the option --non-append</br></br>Requires YunoHost version 2.6.4 or higher.</br>Requires YunoHost version 3.2.0 or higher for the argument --specific\_user</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/logrotate#L20) +[/details] +---------------- + +**ynh_remove_logrotate** +[details summary="<i>Remove the app's logrotate config.</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_remove_logrotate` + + + + + + +**Details**: +Requires YunoHost version 2.6.4 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/logrotate#L108) +[/details] +---------------- + + +### MYSQL + +**ynh_mysql_connect_as** +[details summary="<i>Open a connection as a user</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_mysql_connect_as --user=user --password=password [--database=database]` + + +**Arguments**: + + +- `-u`, `--user=`: the user name to connect as + + + +- `-p`, `--password=`: the user password + + + +- `-d`, `--database=`: the database to connect to + + + + + +**Example**: `ynh_mysql_connect_as --user="user" --password="pass" <<< "UPDATE ...;" example: ynh_mysql_connect_as --user="user" --password="pass" < /path/to/file.sql` + + + + +**Details**: +Requires YunoHost version 2.2.4 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/mysql#L16) +[/details] +---------------- + +**ynh_mysql_execute_as_root** +[details summary="<i>Execute a command as root user</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_mysql_execute_as_root --sql=sql [--database=database]` + + +**Arguments**: + + +- `-s`, `--sql=`: the SQL command to execute + + + +- `-d`, `--database=`: the database to connect to + + + + + + + + +**Details**: +Requires YunoHost version 2.2.4 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/mysql#L37) +[/details] +---------------- + +**ynh_mysql_execute_file_as_root** +[details summary="<i>Execute a command from a file as root user</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_mysql_execute_file_as_root --file=file [--database=database]` + + +**Arguments**: + + +- `-f`, `--file=`: the file containing SQL commands + + + +- `-d`, `--database=`: the database to connect to + + + + + + + + +**Details**: +Requires YunoHost version 2.2.4 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/mysql#L63) +[/details] +---------------- + +**ynh_mysql_dump_db** +[details summary="<i>Dump a database</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_mysql_dump_db --database=database` + + +**Arguments**: + + +- `-d`, `--database=`: the database name to dump + + + + + +**Returns**: the mysqldump output + + +**Example**: `ynh_mysql_dump_db --database=roundcube > ./dump.sql` + + + + +**Details**: +Requires YunoHost version 2.2.4 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/mysql#L135) +[/details] +---------------- + +**ynh_mysql_user_exists** +[details summary="<i>Check if a mysql user exists</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_mysql_user_exists --user=user +| exit: Return 1 if the user doesn't exist, 0 otherwise.` + + +**Arguments**: + + +- `-u`, `--user=`: the user for which to check existence + + + + + + + + +**Details**: +Requires YunoHost version 2.2.4 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/mysql#L167) +[/details] +---------------- + +**ynh_mysql_setup_db** +[details summary="<i>Create a database, an user and its password. Then store the password in the app's config</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_mysql_setup_db --db_user=user --db_name=name [--db_pwd=pwd]` + + +**Arguments**: + + +- `-u`, `--db_user=`: Owner of the database + + + +- `-n`, `--db_name=`: Name of the database + + + +- `-p`, `--db_pwd=`: Password of the database. If not provided, a password will be generated + + + + + + + + +**Details**: +After executing this helper, the password of the created database will be available in $db\_pwd</br>It will also be stored as "mysqlpwd" into the app settings.</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/mysql#L207) +[/details] +---------------- + +**ynh_mysql_remove_db** +[details summary="<i>Remove a database if it exists, and the associated user</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_mysql_remove_db --db_user=user --db_name=name` + + +**Arguments**: + + +- `-u`, `--db_user=`: Owner of the database + + + +- `-n`, `--db_name=`: Name of the database + + + + + + + + +**Details**: +Requires YunoHost version 2.6.4 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/mysql#L232) +[/details] +---------------- + + +### NETWORK + +**ynh_find_port** +[details summary="<i>Find a free port and return it</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_find_port --port=begin_port` + + +**Arguments**: + + +- `-p`, `--port=`: port to start to search + + + + + +**Returns**: the port number + + +**Example**: `port=$(ynh_find_port --port=8080)` + + + + +**Details**: +Requires YunoHost version 2.6.4 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/network#L12) +[/details] +---------------- + +**ynh_port_available** +[details summary="<i>Test if a port is available</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_find_port --port=XYZ +| exit: Return 1 if the port is already used by another process.` + + +**Arguments**: + + +- `-p`, `--port=`: port to check + + + + + +**Example**: `ynh_port_available --port=1234 || ynh_die "Port 1234 is needs to be available for this app"` + + + + +**Details**: +Requires YunoHost version 3.8.0 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/network#L37) +[/details] +---------------- + +**ynh_validate_ip4** +[details summary="<i>Validate an IPv4 address</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_validate_ip4 --ip_address=ip_address` + + +**Arguments**: + + +- `-i`, `--ip_address=`: the ipv4 address to check + + + + + +**Returns**: 0 for valid ipv4 addresses, 1 otherwise + + +**Example**: `ynh_validate_ip4 111.222.333.444` + + + + +**Details**: +Requires YunoHost version 2.2.4 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/network#L99) +[/details] +---------------- + +**ynh_validate_ip6** +[details summary="<i>Validate an IPv6 address</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_validate_ip6 --ip_address=ip_address` + + +**Arguments**: + + +- `-i`, `--ip_address=`: the ipv6 address to check + + + + + +**Returns**: 0 for valid ipv6 addresses, 1 otherwise + + +**Example**: `ynh_validate_ip6 2000:dead:beef::1` + + + + +**Details**: +Requires YunoHost version 2.2.4 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/network#L121) +[/details] +---------------- + + +### NGINX + +**ynh_add_nginx_config** +[details summary="<i>Create a dedicated nginx config</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_add_nginx_config "list of others variables to replace"` + + +**Arguments**: + + +- `list`: (Optional) list of others variables to replace separated by spaces. For example : 'path_2 port_2 ...' + + + + + + + + +**Details**: +This will use a template in ../conf/nginx.conf</br> \_\_PATH\_\_ by $path\_url</br> \_\_DOMAIN\_\_ by $domain</br> \_\_PORT\_\_ by $port</br> \_\_NAME\_\_ by $app</br> \_\_FINALPATH\_\_ by $final\_path</br> \_\_PHPVERSION\_\_ by $YNH\_PHP\_VERSION ($YNH\_PHP\_VERSION is either the default php version or the version defined for the app)</br></br>And dynamic variables (from the last example) :</br> \_\_PATH\_2\_\_ by $path\_2</br> \_\_PORT\_2\_\_ by $port\_2</br></br>Requires YunoHost version 2.7.2 or higher.</br>Requires YunoHost version 2.7.13 or higher for dynamic variables</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/nginx#L23) +[/details] +---------------- + +**ynh_remove_nginx_config** +[details summary="<i>Remove the dedicated nginx config</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_remove_nginx_config` + + + + + + +**Details**: +Requires YunoHost version 2.7.2 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/nginx#L77) +[/details] +---------------- + + +### NODEJS + +**ynh_use_nodejs** +[details summary="<i>Load the version of node for an app, and set variables.</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_use_nodejs` + + + + + + +**Details**: +ynh\_use\_nodejs has to be used in any app scripts before using node for the first time.</br>This helper will provide alias and variables to use in your scripts.</br></br>To use npm or node, use the alias `ynh\_npm` and `ynh\_node`</br>Those alias will use the correct version installed for the app</br>For example: use `ynh\_npm install` instead of `npm install`</br></br>With `sudo` or `ynh\_exec\_as`, use instead the fallback variables `$ynh\_npm` and `$ynh\_node`</br>And propagate $PATH to sudo with $ynh\_node\_load\_PATH</br>Exemple: `ynh\_exec\_as $app $ynh\_node\_load\_PATH $ynh\_npm install`</br></br>$PATH contains the path of the requested version of node.</br>However, $PATH is duplicated into $node\_PATH to outlast any manipulation of $PATH</br>You can use the variable `$ynh\_node\_load\_PATH` to quickly load your node version</br> in $PATH for an usage into a separate script.</br>Exemple: $ynh\_node\_load\_PATH $final\_path/script\_that\_use\_npm.sh`</br></br>Finally, to start a nodejs service with the correct version, 2 solutions</br> Either the app is dependent of node or npm, but does not called it directly.</br> In such situation, you need to load PATH</br> `Environment="\_\_NODE\_ENV\_PATH\_\_"`</br> `ExecStart=\_\_FINALPATH\_\_/my\_app`</br> You will replace \_\_NODE\_ENV\_PATH\_\_ with $ynh\_node\_load\_PATH</br></br>Or node start the app directly, then you don't need to load the PATH variable</br> `ExecStart=\_\_YNH\_NODE\_\_ my\_app run`</br> You will replace \_\_YNH\_NODE\_\_ with $ynh\_node</br></br>2 other variables are also available</br> - $nodejs\_path: The absolute path to node binaries for the chosen version.</br> - $nodejs\_version: Just the version number of node for this app. Stored as 'nodejs\_version' in settings.yml.</br></br>Requires YunoHost version 2.7.12 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/nodejs#L68) +[/details] +---------------- + +**ynh_install_nodejs** +[details summary="<i>Install a specific version of nodejs</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_install_nodejs --nodejs_version=nodejs_version` + + +**Arguments**: + + +- `-n`, `--nodejs_version=`: Version of node to install. When possible, your should prefer to use major version number (e.g. 8 instead of 8.10.0). The crontab will then handle the update of minor versions when needed. + + + + + + + + +**Details**: +ynh\_install\_nodejs will install the version of node provided as argument by using n.</br></br>n (Node version management) uses the PATH variable to store the path of the version of node it is going to use.</br>That's how it changes the version</br></br>Refer to ynh\_use\_nodejs for more information about available commands and variables</br></br>Requires YunoHost version 2.7.12 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/nodejs#L106) +[/details] +---------------- + +**ynh_remove_nodejs** +[details summary="<i>Remove the version of node used by the app.</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_remove_nodejs` + + + + + + +**Details**: +This helper will check if another app uses the same version of node,</br>if not, this version of node will be removed.</br>If no other app uses node, n will be also removed.</br></br>Requires YunoHost version 2.7.12 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/nodejs#L187) +[/details] +---------------- + + +### PERMISSION + +**ynh_permission_create** +[details summary="<i>Create a new permission for the app</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_permission_create --permission="permission" [--url="url"] [--additional_urls="second-url" [ "third-url" ]] [--auth_header=true|false] + [--allowed=group1 [ group2 ]] [--label="label"] [--show_tile=true|false] + [--protected=true|false] +| Not that if 'show_tile' is enabled, this URL will be the URL of the tile. +| Default is "APP_LABEL (permission name)". +| Default is false (for the permission different than 'main'). +| won't be able to add or remove the visitors group of this permission. +| By default it's 'false'` + + +**Arguments**: + + +- `-p,`: - the name for the permission (by default a permission named "main" already exist) + + + +- `-u,`: - (optional) URL for which access will be allowed/forbidden. + + + +- `-A,`: - (optional) List of additional URL for which access will be allowed/forbidden + + + +- `-h,`: - (optional) Define for the URL of this permission, if SSOwat pass the authentication header to the application. Default is true + + + +- `-a,`: - (optional) A list of group/user to allow for the permission + + + +- `-l,`: - (optional) Define a name for the permission. This label will be shown on the SSO and in the admin. + + + +- `-t,`: - (optional) Define if a tile will be shown in the SSO. If yes the name of the tile will be the 'label' parameter. + + + +- `-P,`: - (optional) Define if this permission is protected. If it is protected the administrator + + + + + + + + +**Details**: +example 1: ynh\_permission\_create --permission=admin --url=/admin --additional\_urls=domain.tld/admin /superadmin --allowed=alice bob \</br> --label="My app admin" --show\_tile=true</br></br>This example will create a new permission permission with this following effect:</br>- A tile named "My app admin" in the SSO will be available for the users alice and bob. This tile will point to the relative url '/admin'.</br>- Only the user alice and bob will have the access to theses following url: /admin, domain.tld/admin, /superadmin</br></br>example 2: ynh\_permission\_create --permission=api --url=domain.tld/api --auth\_header=false --allowed=visitors \</br> --label="MyApp API" --protected=true</br></br>This example will create a new protected permission. So the admin won't be able to add/remove the visitors group of this permission.</br>In case of an API with need to be always public it avoid that the admin break anything.</br>With this permission all client will be allowed to access to the url 'domain.tld/api'.</br>Note that in this case no tile will be show on the SSO.</br>Note that the auth\_header parameter is to 'false'. So no authentication header will be passed to the application.</br>Generally the API is requested by an application and enabling the auth\_header has no advantage and could bring some issues in some case.</br>So in this case it's better to disable this option for all API.</br></br>If provided, 'url' or 'additional\_urls' is assumed to be relative to the app domain/path if they</br>start with '/'. For example:</br> / -> domain.tld/app</br> /admin -> domain.tld/app/admin</br> domain.tld/app/api -> domain.tld/app/api</br></br>'url' or 'additional\_urls' can be treated as a PCRE (not lua) regex if it starts with "re:".</br>For example:</br> re:/api/[A-Z]*$ -> domain.tld/app/api/[A-Z]*$</br> re:domain.tld/app/api/[A-Z]*$ -> domain.tld/app/api/[A-Z]*$</br></br>Note that globally the parameter 'url' and 'additional\_urls' are same. The only difference is:</br>- 'url' is only one url, 'additional\_urls' can be a list of urls. There are no limitation of 'additional\_urls'</br>- 'url' is used for the url of tile in the SSO (if enabled with the 'show\_tile' parameter)</br></br>About the authentication header (auth\_header parameter).</br>The SSO pass (by default) to the application theses following HTTP header (linked to the authenticated user) to the application:</br> - "Auth-User": username</br> - "Remote-User": username</br> - "Email": user email</br></br>Generally this feature is usefull to authenticate automatically the user in the application but in some case the application don't work with theses header and theses header need to be disabled to have the application to work correctly.</br>See https://github.com/YunoHost/issues/issues/1420 for more informations</br></br>Requires YunoHost version 3.7.0 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/permission#L69) +[/details] +---------------- + +**ynh_permission_delete** +[details summary="<i>Remove a permission for the app (note that when the app is removed all permission is automatically removed)</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_permission_delete --permission="permission"` + + +**Arguments**: + + +- `-p`, `--permission=`: the name for the permission (by default a permission named "main" is removed automatically when the app is removed) + + + + + +**Example**: `ynh_permission_delete --permission=editors` + + + + +**Details**: +Requires YunoHost version 3.7.0 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/permission#L164) +[/details] +---------------- + +**ynh_permission_exists** +[details summary="<i>Check if a permission exists</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_permission_exists --permission=permission +| exit: Return 1 if the permission doesn't exist, 0 otherwise` + + +**Arguments**: + + +- `-p`, `--permission=`: the permission to check + + + + + + + + +**Details**: +Requires YunoHost version 3.7.0 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/permission#L181) +[/details] +---------------- + +**ynh_permission_url** +[details summary="<i>Redefine the url associated to a permission</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_permission_url --permission "permission" [--url="url"] [--add_url="new-url" [ "other-new-url" ]] [--remove_url="old-url" [ "other-old-url" ]] + [--auth_header=true|false] [--clear_urls] +| Note that if you want to remove url you can pass an empty sting as arguments ("").` + + +**Arguments**: + + +- `-p,`: - the name for the permission (by default a permission named "main" is removed automatically when the app is removed) + + + +- `-u,`: - (optional) URL for which access will be allowed/forbidden. + + + +- `-a,`: - (optional) List of additional url to add for which access will be allowed/forbidden. + + + +- `-r,`: - (optional) List of additional url to remove for which access will be allowed/forbidden + + + +- `-h,`: - (optional) Define for the URL of this permission, if SSOwat pass the authentication header to the application + + + +- `-c,`: - (optional) Clean all urls (url and additional_urls) + + + + + + + + +**Details**: +Requires YunoHost version 3.7.0 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/permission#L204) +[/details] +---------------- + +**ynh_permission_update** +[details summary="<i>Update a permission for the app</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_permission_update --permission "permission" [--add="group" ["group" ...]] [--remove="group" ["group" ...]] + [--label="label"] [--show_tile=true|false] [--protected=true|false] +| won't be able to add or remove the visitors group of this permission.` + + +**Arguments**: + + +- `-p,`: - the name for the permission (by default a permission named "main" already exist) + + + +- `-a,`: - the list of group or users to enable add to the permission + + + +- `-r,`: - the list of group or users to remove from the permission + + + +- `-l,`: - (optional) Define a name for the permission. This label will be shown on the SSO and in the admin. + + + +- `-t,`: - (optional) Define if a tile will be shown in the SSO + + + +- `-P,`: - (optional) Define if this permission is protected. If it is protected the administrator + + + + + + + + +**Details**: +Requires YunoHost version 3.7.0 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/permission#L280) +[/details] +---------------- + +**ynh_permission_has_user** +[details summary="<i>Check if a permission has an user</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_permission_has_user --permission=permission --user=user +| exit: Return 1 if the permission doesn't have that user or doesn't exist, 0 otherwise` + + +**Arguments**: + + +- `-p`, `--permission=`: the permission to check + + + +- `-u`, `--user=`: the user seek in the permission + + + + + +**Example**: `ynh_permission_has_user --permission=main --user=visitors` + + + + +**Details**: +Requires YunoHost version 3.7.1 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/permission#L355) +[/details] +---------------- + +**ynh_legacy_permissions_exists** +[details summary="<i>Check if a legacy permissions exist</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_legacy_permissions_exists +| exit: Return 1 if the permission doesn't exist, 0 otherwise` + + + + + + +**Details**: +Requires YunoHost version 4.1.2 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/permission#L378) +[/details] +---------------- + +**ynh_legacy_permissions_delete_all** +[details summary="<i>Remove all legacy permissions</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_legacy_permissions_delete_all` + + + +**Example**: `if ynh_legacy_permissions_exists then ynh_legacy_permissions_delete_all # You can recreate the required permissions here with ynh_permission_create fi Requires YunoHost version 4.1.2 or higher.` + + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/permission#L399) +[/details] +---------------- + + +### PHP + +**ynh_add_fpm_config** +[details summary="<i>Create a dedicated PHP-FPM config</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `1: ynh_add_fpm_config [--phpversion=7.X] [--use_template] [--package=packages] [--dedicated_service] +2: ynh_add_fpm_config [--phpversion=7.X] --usage=usage --footprint=footprint [--package=packages] [--dedicated_service] +low - Less than 20 MB of RAM by pool. +medium - Between 20 MB and 40 MB of RAM by pool. +high - More than 40 MB of RAM by pool. +Or specify exactly the footprint, the load of the service as MB by pool instead of having a standard value. +To have this value, use the following command and stress the service. +watch -n0.5 ps -o user,cmd,%cpu,rss -u APP` + + +**Arguments**: + + +- `-v`, `--phpversion=`: Version of PHP to use. + + + +- `-t`, `--use_template`: Use this helper in template mode. + + + +- `-p`, `--package=`: Additionnal PHP packages to install + + + +- `-d`, `--dedicated_service`: Use a dedicated PHP-FPM service instead of the common one. + + + +- `-v`, `--phpversion=`: Version of PHP to use. + + + +- `-f`, `--footprint=`: Memory footprint of the service (low/medium/high). + + + +- `-u`, `--usage=`: Expected usage of the service (low/medium/high). + + + +- `-p`, `--package=`: Additionnal PHP packages to install for a specific version of PHP + + + +- `-d`, `--dedicated_service`: Use a dedicated PHP-FPM service instead of the common one. + + + + + + + + +**Details**: +-----------------------------------------------------------------------------</br></br>The footprint of the service will be used to defined the maximum footprint we can allow, which is half the maximum RAM.</br>So it will be used to defined 'pm.max\_children'</br>A lower value for the footprint will allow more children for 'pm.max\_children'. And so for</br> 'pm.start\_servers', 'pm.min\_spare\_servers' and 'pm.max\_spare\_servers' which are defined from the</br> value of 'pm.max\_children'</br>NOTE: 'pm.max\_children' can't exceed 4 times the number of processor's cores.</br></br>The usage value will defined the way php will handle the children for the pool.</br>A value set as 'low' will set the process manager to 'ondemand'. Children will start only if the</br> service is used, otherwise no child will stay alive. This config gives the lower footprint when the</br> service is idle. But will use more proc since it has to start a child as soon it's used.</br>Set as 'medium', the process manager will be at dynamic. If the service is idle, a number of children</br> equal to pm.min\_spare\_servers will stay alive. So the service can be quick to answer to any request.</br> The number of children can grow if needed. The footprint can stay low if the service is idle, but</br> not null. The impact on the proc is a little bit less than 'ondemand' as there's always a few</br> children already available.</br>Set as 'high', the process manager will be set at 'static'. There will be always as many children as</br> 'pm.max\_children', the footprint is important (but will be set as maximum a quarter of the maximum</br> RAM) but the impact on the proc is lower. The service will be quick to answer as there's always many</br> children ready to answer.</br></br>Requires YunoHost version 2.7.2 or higher.</br>Requires YunoHost version 3.5.1 or higher for the argument --phpversion</br>Requires YunoHost version 3.8.1 or higher for the arguments --use\_template, --usage, --footprint, --package and --dedicated\_service</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/php#L61) +[/details] +---------------- + +**ynh_remove_fpm_config** +[details summary="<i>Remove the dedicated PHP-FPM config</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_remove_fpm_config` + + + + + + +**Details**: +Requires YunoHost version 2.7.2 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/php#L288) +[/details] +---------------- + + +### POSTGRESQL + +**ynh_psql_connect_as** +[details summary="<i>Open a connection as a user</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_psql_connect_as --user=user --password=password [--database=database]` + + +**Arguments**: + + +- `-u`, `--user=`: the user name to connect as + + + +- `-p`, `--password=`: the user password + + + +- `-d`, `--database=`: the database to connect to + + + + + + + +**Examples**: + + +- ` ynh_psql_connect_as 'user' 'pass' <<< "UPDATE ...;"` + + + +- ` ynh_psql_connect_as 'user' 'pass' < /path/to/file.sql` + + + + + +**Details**: +Requires YunoHost version 3.5.0 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/postgresql#L18) +[/details] +---------------- + +**ynh_psql_execute_as_root** +[details summary="<i>Execute a command as root user</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_psql_execute_as_root --sql=sql [--database=database]` + + +**Arguments**: + + +- `-s`, `--sql=`: the SQL command to execute + + + +- `-d`, `--database=`: the database to connect to + + + + + + + + +**Details**: +Requires YunoHost version 3.5.0 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/postgresql#L39) +[/details] +---------------- + +**ynh_psql_execute_file_as_root** +[details summary="<i>Execute a command from a file as root user</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_psql_execute_file_as_root --file=file [--database=database]` + + +**Arguments**: + + +- `-f`, `--file=`: the file containing SQL commands + + + +- `-d`, `--database=`: the database to connect to + + + + + + + + +**Details**: +Requires YunoHost version 3.5.0 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/postgresql#L65) +[/details] +---------------- + +**ynh_psql_dump_db** +[details summary="<i>Dump a database</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_psql_dump_db --database=database` + + +**Arguments**: + + +- `-d`, `--database=`: the database name to dump + + + + + +**Returns**: the psqldump output + + +**Example**: `ynh_psql_dump_db 'roundcube' > ./dump.sql` + + + + +**Details**: +Requires YunoHost version 3.5.0 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/postgresql#L137) +[/details] +---------------- + +**ynh_psql_user_exists** +[details summary="<i>Check if a psql user exists</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_psql_user_exists --user=user +| exit: Return 1 if the user doesn't exist, 0 otherwise` + + +**Arguments**: + + +- `-u`, `--user=`: the user for which to check existence + + + + + + + + +**Details**: +Requires YunoHost version 3.5.0 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/postgresql#L170) +[/details] +---------------- + +**ynh_psql_database_exists** +[details summary="<i>Check if a psql database exists</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_psql_database_exists --database=database +| exit: Return 1 if the database doesn't exist, 0 otherwise` + + +**Arguments**: + + +- `-d`, `--database=`: the database for which to check existence + + + + + + + + +**Details**: +Requires YunoHost version 3.5.0 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/postgresql#L193) +[/details] +---------------- + +**ynh_psql_setup_db** +[details summary="<i>Create a database, an user and its password. Then store the password in the app's config</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_psql_setup_db --db_user=user --db_name=name [--db_pwd=pwd]` + + +**Arguments**: + + +- `-u`, `--db_user=`: Owner of the database + + + +- `-n`, `--db_name=`: Name of the database + + + +- `-p`, `--db_pwd=`: Password of the database. If not provided, a password will be generated + + + + + + + + +**Details**: +After executing this helper, the password of the created database will be available in $db\_pwd</br>It will also be stored as "psqlpwd" into the app settings.</br></br>Requires YunoHost version 2.7.13 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/postgresql#L232) +[/details] +---------------- + +**ynh_psql_remove_db** +[details summary="<i>Remove a database if it exists, and the associated user</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_psql_remove_db --db_user=user --db_name=name` + + +**Arguments**: + + +- `-u`, `--db_user=`: Owner of the database + + + +- `-n`, `--db_name=`: Name of the database + + + + + + + + +**Details**: +Requires YunoHost version 2.7.13 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/postgresql#L263) +[/details] +---------------- + +**ynh_psql_test_if_first_run** +[details summary="<i>Create a master password and set up global settings +It also make sure that postgresql is installed and running +Please always call this script in install and restore scripts</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_psql_test_if_first_run` + + + + + + +**Details**: +Requires YunoHost version 2.7.13 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/postgresql#L295) +[/details] +---------------- + + +### SETTING + +**ynh_app_setting_get** +[details summary="<i>Get an application setting</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_app_setting_get --app=app --key=key` + + +**Arguments**: + + +- `-a`, `--app=`: the application id + + + +- `-k`, `--key=`: the setting to get + + + + + + + + +**Details**: +Requires YunoHost version 2.2.4 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/setting#L10) +[/details] +---------------- + +**ynh_app_setting_set** +[details summary="<i>Set an application setting</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_app_setting_set --app=app --key=key --value=value` + + +**Arguments**: + + +- `-a`, `--app=`: the application id + + + +- `-k`, `--key=`: the setting name to set + + + +- `-v`, `--value=`: the setting value to set + + + + + + + + +**Details**: +Requires YunoHost version 2.2.4 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/setting#L34) +[/details] +---------------- + +**ynh_app_setting_delete** +[details summary="<i>Delete an application setting</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_app_setting_delete --app=app --key=key` + + +**Arguments**: + + +- `-a`, `--app=`: the application id + + + +- `-k`, `--key=`: the setting to delete + + + + + + + + +**Details**: +Requires YunoHost version 2.2.4 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/setting#L58) +[/details] +---------------- + +**ynh_webpath_available** +[details summary="<i>Check availability of a web path</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_webpath_available --domain=domain --path_url=path` + + +**Arguments**: + + +- `-d`, `--domain=`: the domain/host of the url + + + +- `-p`, `--path_url=`: the web path to check the availability of + + + + + +**Example**: `ynh_webpath_available --domain=some.domain.tld --path_url=/coffee` + + + + +**Details**: +Requires YunoHost version 2.6.4 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/setting#L118) +[/details] +---------------- + +**ynh_webpath_register** +[details summary="<i>Register/book a web path for an app</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_webpath_register --app=app --domain=domain --path_url=path` + + +**Arguments**: + + +- `-a`, `--app=`: the app for which the domain should be registered + + + +- `-d`, `--domain=`: the domain/host of the web path + + + +- `-p`, `--path_url=`: the web path to be registered + + + + + +**Example**: `ynh_webpath_register --app=wordpress --domain=some.domain.tld --path_url=/coffee` + + + + +**Details**: +Requires YunoHost version 2.6.4 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/setting#L140) +[/details] +---------------- + + +### STRING + +**ynh_string_random** +[details summary="<i>Generate a random string</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_string_random [--length=string_length]` + + +**Arguments**: + + +- `-l`, `--length=`: the string length to generate (default: 24) + + + + + +**Returns**: the generated string + + +**Example**: `pwd=$(ynh_string_random --length=8)` + + + + +**Details**: +Requires YunoHost version 2.2.4 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/string#L12) +[/details] +---------------- + +**ynh_replace_string** +[details summary="<i>Substitute/replace a string (or expression) by another in a file</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_replace_string --match_string=match_string --replace_string=replace_string --target_file=target_file` + + +**Arguments**: + + +- `-m`, `--match_string=`: String to be searched and replaced in the file + + + +- `-r`, `--replace_string=`: String that will replace matches + + + +- `-f`, `--target_file=`: File in which the string will be replaced. + + + + + + + + +**Details**: +As this helper is based on sed command, regular expressions and</br>references to sub-expressions can be used</br>(see sed manual page for more information)</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/string#L38) +[/details] +---------------- + +**ynh_replace_special_string** +[details summary="<i>Substitute/replace a special string by another in a file</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_replace_special_string --match_string=match_string --replace_string=replace_string --target_file=target_file` + + +**Arguments**: + + +- `-m`, `--match_string=`: String to be searched and replaced in the file + + + +- `-r`, `--replace_string=`: String that will replace matches + + + +- `-t`, `--target_file=`: File in which the string will be replaced. + + + + + + + + +**Details**: +This helper will use ynh\_replace\_string, but as you can use special</br>characters, you can't use some regular expressions and sub-expressions.</br></br>Requires YunoHost version 2.7.7 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/string#L67) +[/details] +---------------- + +**ynh_sanitize_dbid** +[details summary="<i>Sanitize a string intended to be the name of a database +(More specifically : replace - and . by _)</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_sanitize_dbid --db_name=name` + + +**Arguments**: + + +- `-n`, `--db_name=`: name to correct/sanitize + + + + + +**Returns**: the corrected name + + +**Example**: `dbname=$(ynh_sanitize_dbid $app)` + + + + +**Details**: +Requires YunoHost version 2.2.4 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/string#L98) +[/details] +---------------- + + +### SYSTEMD + +**ynh_add_systemd_config** +[details summary="<i>Create a dedicated systemd config</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_add_systemd_config [--service=service] [--template=template] +ynh_add_systemd_config [--service=service] [--template=template] [--others_var="list of others variables to replace"]` + + +**Arguments**: + + +- `-s`, `--service=`: Service name (optionnal, $app by default) + + + +- `-t`, `--template=`: Name of template file (optionnal, this is 'systemd' by default, meaning ./conf/systemd.service will be used as template) + + + +- `-v`, `--others_var=`: List of others variables to replace separated by a space. For example: 'var_1 var_2 ...' + + + + + + + + +**Details**: +This will use the template ../conf/<templatename>.service</br>to generate a systemd config, by replacing the following keywords</br>with global variables that should be defined before calling</br>this helper :</br></br>\_\_APP\_\_ by $app</br> \_\_FINALPATH\_\_ by $final\_path</br></br>And dynamic variables (from the last example) :</br> \_\_VAR\_1\_\_ by $var\_1</br> \_\_VAR\_2\_\_ by $var\_2</br></br>Requires YunoHost version 2.7.11 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/systemd#L24) +[/details] +---------------- + +**ynh_remove_systemd_config** +[details summary="<i>Remove the dedicated systemd config</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_remove_systemd_config [--service=service]` + + +**Arguments**: + + +- `-s`, `--service=`: Service name (optionnal, $app by default) + + + + + + + + +**Details**: +Requires YunoHost version 2.7.2 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/systemd#L71) +[/details] +---------------- + +**ynh_systemd_action** +[details summary="<i>Start (or other actions) a service, print a log in case of failure and optionnaly wait until the service is completely started</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_systemd_action [--service_name=service_name] [--action=action] [ [--line_match="line to match"] [--log_path=log_path] [--timeout=300] [--length=20] ]` + + +**Arguments**: + + +- `-n`, `--service_name=`: Name of the service to start. Default : $app + + + +- `-a`, `--action=`: Action to perform with systemctl. Default: start + + + +- `-l`, `--line_match=`: Line to match - The line to find in the log to attest the service have finished to boot. If not defined it don't wait until the service is completely started. WARNING: When using --line_match, you should always add `ynh_clean_check_starting` into your `ynh_clean_setup` at the beginning of the script. Otherwise, tail will not stop in case of failure of the script. The script will then hang forever. + + + +- `-p`, `--log_path=`: Log file - Path to the log file. Default : /var/log/$app/$app.log + + + +- `-t`, `--timeout=`: Timeout - The maximum time to wait before ending the watching. Default : 300 seconds. + + + +- `-e`, `--length=`: Length of the error log : Default : 20 + + + + + + + + +**Details**: +Requires YunoHost version 3.5.0 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/systemd#L101) +[/details] +---------------- + +**ynh_clean_check_starting** +[details summary="<i>Clean temporary process and file used by ynh_check_starting +(usually used in ynh_clean_setup scripts)</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_clean_check_starting` + + + + + + +**Details**: +Requires YunoHost version 3.5.0 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/systemd#L203) +[/details] +---------------- + + +### USER + +**ynh_user_exists** +[details summary="<i>Check if a YunoHost user exists</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_user_exists --username=username +| exit: Return 1 if the user doesn't exist, 0 otherwise` + + +**Arguments**: + + +- `-u`, `--username=`: the username to check + + + + + +**Example**: `ynh_user_exists 'toto' || exit 1` + + + + +**Details**: +Requires YunoHost version 2.2.4 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/user#L12) +[/details] +---------------- + +**ynh_user_get_info** +[details summary="<i>Retrieve a YunoHost user information</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_user_get_info --username=username --key=key` + + +**Arguments**: + + +- `-u`, `--username=`: the username to retrieve info from + + + +- `-k`, `--key=`: the key to retrieve + + + + + +**Returns**: string - the key's value + + +**Example**: `mail=$(ynh_user_get_info 'toto' 'mail')` + + + + +**Details**: +Requires YunoHost version 2.2.4 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/user#L33) +[/details] +---------------- + +**ynh_user_list** +[details summary="<i>Get the list of YunoHost users</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_user_list` + + + +**Returns**: string - one username per line + + +**Example**: `for u in $(ynh_user_list); do ...` + + + + +**Details**: +Requires YunoHost version 2.4.0 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/user#L53) +[/details] +---------------- + +**ynh_system_user_exists** +[details summary="<i>Check if a user exists on the system</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_system_user_exists --username=username +| exit: Return 1 if the user doesn't exist, 0 otherwise` + + +**Arguments**: + + +- `-u`, `--username=`: the username to check + + + + + + + + +**Details**: +Requires YunoHost version 2.2.4 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/user#L65) +[/details] +---------------- + +**ynh_system_group_exists** +[details summary="<i>Check if a group exists on the system</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_system_group_exists --group=group +| exit: Return 1 if the group doesn't exist, 0 otherwise` + + +**Arguments**: + + +- `-g`, `--group=`: the group to check + + + + + + + + +**Details**: +Requires YunoHost version 3.5.0.2 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/user#L83) +[/details] +---------------- + +**ynh_system_user_create** +[details summary="<i>Create a system user</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_system_user_create --username=user_name [--home_dir=home_dir] [--use_shell]` + + +**Arguments**: + + +- `-u`, `--username=`: Name of the system user that will be create + + + +- `-h`, `--home_dir=`: Path of the home dir for the user. Usually the final path of the app. If this argument is omitted, the user will be created without home + + + +- `-s`, `--use_shell`: Create a user using the default login shell if present. If this argument is omitted, the user will be created with /usr/sbin/nologin shell + + + + + + + +**Examples**: + + +- `Create a nextcloud user with no home directory and /usr/sbin/nologin login shell (hence no login capability)` + + + +- ` ynh_system_user_create --username=nextcloud` + + + +- `Create a discourse user using /var/www/discourse as home directory and the default login shell` + + + +- ` ynh_system_user_create --username=discourse --home_dir=/var/www/discourse --use_shell` + + + + + +**Details**: +Requires YunoHost version 2.6.4 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/user#L108) +[/details] +---------------- + +**ynh_system_user_delete** +[details summary="<i>Delete a system user</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_system_user_delete --username=user_name` + + +**Arguments**: + + +- `-u`, `--username=`: Name of the system user that will be create + + + + + + + + +**Details**: +Requires YunoHost version 2.6.4 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/user#L144) +[/details] +---------------- + +**ynh_exec_as** +[details summary="<i>Execute a command as another user</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_exec_as $USER COMMAND [ARG ...]` + + + + + + +**Details**: +Requires YunoHost version 4.1.7 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/user#L172) +[/details] +---------------- + + +### UTILS + +**ynh_abort_if_errors** +[details summary="<i>Exits if an error occurs during the execution of the script.</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_abort_if_errors` + + + + + + +**Details**: +This configure the rest of the script execution such that, if an error occurs</br>or if an empty variable is used, the execution of the script stops</br>immediately and a call to `ynh\_clean\_setup` is triggered if it has been</br>defined by your script.</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/utils#L54) +[/details] +---------------- + +**ynh_setup_source** +[details summary="<i>Download, check integrity, uncompress and patch the source from app.src</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_setup_source --dest_dir=dest_dir [--source_id=source_id]` + + +**Arguments**: + + +- `-d`, `--dest_dir=`: Directory where to setup sources + + + +- `-s`, `--source_id=`: Name of the app, if the package contains more than one app + + + + + + + + +**Details**: +The file conf/app.src need to contains:</br></br>SOURCE\_URL=Address to download the app archive</br>SOURCE\_SUM=Control sum</br># (Optional) Program to check the integrity (sha256sum, md5sum...)</br># default: sha256</br>SOURCE\_SUM\_PRG=sha256</br># (Optional) Archive format</br># default: tar.gz</br>SOURCE\_FORMAT=tar.gz</br># (Optional) Put false if sources are directly in the archive root</br># default: true</br># Instead of true, SOURCE\_IN\_SUBDIR could be the number of sub directories</br># to remove.</br>SOURCE\_IN\_SUBDIR=false</br># (Optionnal) Name of the local archive (offline setup support)</br># default: ${src\_id}.${src\_format}</br>SOURCE\_FILENAME=example.tar.gz</br># (Optional) If it set as false don't extract the source.</br># (Useful to get a debian package or a python wheel.)</br># default: true</br>SOURCE\_EXTRACT=(true|false)</br></br>Details:</br>This helper downloads sources from SOURCE\_URL if there is no local source</br>archive in /opt/yunohost-apps-src/APP\_ID/SOURCE\_FILENAME</br></br>Next, it checks the integrity with "SOURCE\_SUM\_PRG -c --status" command.</br></br>If it's ok, the source archive will be uncompressed in $dest\_dir. If the</br>SOURCE\_IN\_SUBDIR is true, the first level directory of the archive will be</br>removed.</br>If SOURCE\_IN\_SUBDIR is a numeric value, 2 for example, the 2 first level</br>directories will be removed</br></br>Finally, patches named sources/patches/${src\_id}-*.patch and extra files in</br>sources/extra\_files/$src\_id will be applied to dest\_dir</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/utils#L105) +[/details] +---------------- + +**ynh_local_curl** +[details summary="<i>Curl abstraction to help with POST requests to local pages (such as installation forms)</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_local_curl "page_uri" "key1=value1" "key2=value2" ...` + + +**Arguments**: + + +- `page_uri`: Path (relative to $path_url) of the page where POST data will be sent + + + +- `key1=value1`: (Optionnal) POST key and corresponding value + + + +- `key2=value2`: (Optionnal) Another POST key and corresponding value + + + +- `...`: (Optionnal) More POST keys and values + + + + + +**Example**: `ynh_local_curl "/install.php?installButton" "foo=$var1" "bar=$var2"` + + + + +**Details**: +For multiple calls, cookies are persisted between each call for the same app</br></br>$domain and $path\_url should be defined externally (and correspond to the domain.tld and the /path (of the app?))</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/utils#L230) +[/details] +---------------- + +**ynh_add_config** +[details summary="<i>Create a dedicated config file from a template</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_add_config --template="template" --destination="destination"` + + +**Arguments**: + + +- `-t`, `--template=`: Template config file to use + + + +- `-d`, `--destination=`: Destination of the config file + + + + + + + +**Examples**: + + +- ` ynh_add_config --template=".env" --destination="$final_path/.env"` + + + +- ` ynh_add_config --template="../conf/.env" --destination="$final_path/.env"` + + + +- ` ynh_add_config --template="/etc/nginx/sites-available/default" --destination="etc/nginx/sites-available/mydomain.conf"` + + + + + +**Details**: +The template can be by default the name of a file in the conf directory</br>of a YunoHost Package, a relative path or an absolute path</br>The helper will use the template $template to generate a config file</br>$destination by replacing the following keywords with global variables</br>that should be defined before calling this helper :</br> \_\_PATH\_\_ by $path\_url</br> \_\_NAME\_\_ by $app</br> \_\_NAMETOCHANGE\_\_ by $app</br> \_\_USER\_\_ by $app</br> \_\_FINALPATH\_\_ by $final\_path</br> \_\_PHPVERSION\_\_ by $YNH\_PHP\_VERSION</br> \_\_YNH\_NODE\_LOAD\_PATH\_\_ by $ynh\_node\_load\_PATH</br></br>And any dynamic variables that should be defined before calling this helper like:</br> \_\_DOMAIN\_\_ by $domain</br> \_\_APP\_\_ by $app</br> \_\_VAR\_1\_\_ by $var\_1</br> \_\_VAR\_2\_\_ by $var\_2</br></br>The helper will verify the checksum and backup the destination file</br>if it's different before applying the new template.</br>And it will calculate and store the destination file checksum</br>into the app settings when configuration is done.</br></br>Requires YunoHost version 4.1.0 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/utils#L302) +[/details] +---------------- + +**ynh_get_debian_release** +[details summary="<i>Fetch the Debian release codename</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_get_debian_release` + + + +**Returns**: The Debian release codename (i.e. jessie, stretch, ...) + + + + + +**Details**: +Requires YunoHost version 2.7.12 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/utils#L436) +[/details] +---------------- + +**ynh_secure_remove** +[details summary="<i>Remove a file or a directory securely</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_secure_remove --file=path_to_remove` + + +**Arguments**: + + +- `-f`, `--file=`: File or directory to remove + + + + + + + + +**Details**: +Requires YunoHost version 2.6.4 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/utils#L466) +[/details] +---------------- + +**ynh_read_manifest** +[details summary="<i>Read the value of a key in a ynh manifest file</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_read_manifest --manifest="manifest.json" --key="key"` + + +**Arguments**: + + +- `-m`, `--manifest=`: Path of the manifest to read + + + +- `-k`, `--key=`: Name of the key to find + + + + + +**Returns**: the value associate to that key + + + + + +**Details**: +Requires YunoHost version 3.5.0 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/utils#L547) +[/details] +---------------- + +**ynh_app_upstream_version** +[details summary="<i>Read the upstream version from the manifest, or from the env variable $YNH_APP_MANIFEST_VERSION if not given</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_app_upstream_version [--manifest="manifest.json"]` + + +**Arguments**: + + +- `-m`, `--manifest=`: Path of the manifest to read + + + + + +**Returns**: the version number of the upstream app + + + + + +**Details**: +The version number in the manifest is defined by <upstreamversion>~ynh<packageversion></br>For example : 4.3-2~ynh3</br>This include the number before ~ynh</br>In the last example it return 4.3-2</br></br>Requires YunoHost version 3.5.0 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/utils#L576) +[/details] +---------------- + +**ynh_app_package_version** +[details summary="<i>Read package version from the manifest</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_app_package_version [--manifest="manifest.json"]` + + +**Arguments**: + + +- `-m`, `--manifest=`: Path of the manifest to read + + + + + +**Returns**: the version number of the package + + + + + +**Details**: +The version number in the manifest is defined by <upstreamversion>~ynh<packageversion></br>For example : 4.3-2~ynh3</br>This include the number after ~ynh</br>In the last example it return 3</br></br>Requires YunoHost version 3.5.0 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/utils#L607) +[/details] +---------------- + +**ynh_check_app_version_changed** +[details summary="<i>Checks the app version to upgrade with the existing app version and returns:</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_check_app_version_changed` + + + + + + +**Details**: +- UPGRADE\_PACKAGE if only the YunoHost package has changed</br>- UPGRADE\_APP otherwise</br></br>This helper should be used to avoid an upgrade of an app, or the upstream part</br>of it, when it's not needed</br></br>To force an upgrade, even if the package is up to date,</br>you have to use the parameter --force (or -F).</br>example: sudo yunohost app upgrade MyApp --force</br></br>Requires YunoHost version 3.5.0 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/utils#L634) +[/details] +---------------- + +**ynh_compare_current_package_version** +[details summary="<i>Compare the current package version against another version given as an argument. +This is really useful when we need to do some actions only for some old package versions.</i>" class="helper-card-subtitle text-muted"] +<p></p> + +**Usage**: `ynh_compare_current_package_version --comparison lt|le|eq|ne|ge|gt +| eq (equal), ne (not equal), ge (greater or equal), gt (greater than)` + + +**Arguments**: + + +- `--comparison`: Comparison type. Could be : lt (lower than), le (lower or equal), + + + +- `--version`: The version to compare. Need to be a version in the yunohost package version type (like 2.3.1~ynh4) + + + + + +**Example**: `ynh_compare_current_package_version --comparison lt --version 2.3.2~ynh1 This example will check if the installed version is lower than (lt) the version 2.3.2~ynh1` + + + + +**Details**: +Generally you might probably use it as follow in the upgrade script</br></br>if ynh\_compare\_current\_package\_version --comparison lt --version 2.3.2~ynh1</br>then</br> # Do something that is needed for the package version older than 2.3.2~ynh1</br>fi</br></br>Return 0 if the evaluation is true. 1 if false.</br></br>Requires YunoHost version 3.8.0 or higher.</br></br> + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/adc83b4c9c2c30e9ef75f3609c538b646f91f1db/data/helpers.d/utils#L666) +[/details] +---------------- + diff --git a/packaging_apps_hooks_fr.md b/pages/04.contribute/04.packaging_apps/12.hooks/packaging_apps_hooks.fr.md similarity index 73% rename from packaging_apps_hooks_fr.md rename to pages/04.contribute/04.packaging_apps/12.hooks/packaging_apps_hooks.fr.md index c81dc654..892091b6 100644 --- a/packaging_apps_hooks_fr.md +++ b/pages/04.contribute/04.packaging_apps/12.hooks/packaging_apps_hooks.fr.md @@ -1,4 +1,11 @@ -# Usage des hooks YunoHost +--- +title: Hooks +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_hooks' +--- Les hooks permettent de déclencher un script lorsqu'une action est effectuée par le système. Le cas le plus évident, est l'ajout d'un utilisateur. Si l'app dispose d'un hook `post_user_create`, ce hook sera déclenché dés qu'un utilisateur sera ajouté. @@ -27,18 +34,18 @@ Après la suppression de l'autorisation d'un utilisateur sur une application. - `post_app_clearaccess` Après l'effacement de toute les règles d'accès sur une application. - `post_app_install` -Après l'installation d'une application +Après l'installation d'une application. - `post_app_upgrade` -Après l'upgrade d'une applications +Après l'upgrade d'une application. - `post_app_remove` -Après la supression d'une applications +Après la supression d'une application. - `post_app_change_url` -Après avoir modifié le chemin et ou le nom de domaine d'une application +Après avoir modifié le chemin et/ou le nom de domaine d'une application. - `post_cert_update` -Après la mise à jour d'un certificat +Après la mise à jour d'un certificat. - `conf_regen` Avant et après la régénération de la configuration d'un service. -Services pris en charge par regen-conf: +Services pris en charge par `regen-conf` : - avahi-daemon - dnsmasq - dovecot @@ -57,15 +64,15 @@ Services pris en charge par regen-conf: ### Mise en place des hooks -A l'exception du hook conf_regen, tout les hooks s'utilisent de la même manière. +À l'exception du hook `conf_regen`, tout les hooks s'utilisent de la même manière. Tout d'abord, il faut comprendre qu'un hook est un simple script bash qui sera exécuté par YunoHost lorsque l'évènement indiqué se présentera. -Pour ajouter un hook à YunoHost, il faut utiliser un dossier "hooks" à la racine du package de l'application. Puis dans celui-ci mettre votre script sous le nom du hooks correspondant. +Pour ajouter un hook à YunoHost, il faut utiliser un dossier "hooks" à la racine du package de l'application. Puis dans celui-ci mettre votre script sous le nom du hook correspondant. -> Par exemple: -Pour un hook `post_user_create`, le script qui devra être exécuté pour ce hook doit simplement être placé dans "hooks/post_user_create" dans le package. +> Par exemple : +Pour un hook `post_user_create`, le script qui devra être exécuté pour ce hook doit simplement être placé dans `hooks/post_user_create` dans le package. -Lors de l'installation et de l'upgrade, les scripts dans le dossier hooks seront dupliqués dans le dossier "/etc/yunohost/hooks.d/" dans le dossier correspondant au hook, puis sous le nom "50-$app". -Lors de la suppression de l'application, tout les hooks lui appartenant seront supprimés. +Lors de l'installation et de l'upgrade, les scripts dans le dossier hooks seront dupliqués dans le dossier `/etc/yunohost/hooks.d/` dans le dossier correspondant au hook, puis sous le nom `50-$app`. +Lors de la suppression de l'application, tous les hooks lui appartenant seront supprimés. ### Construire un script de hook @@ -103,7 +110,7 @@ purge=$2 # True/False Indique si le dossier utilisateur a été supprimé ou pa ##### `post_iptable_rules` ```bash -upnp=$1 # True/False Indique si l'upnp est activé ou non. +upnp=$1 # True/False Indique si l'UPnP est activé ou non. ipv6=$2 # True/False Indique si l'IPV6 est activé ou non. ``` @@ -118,7 +125,7 @@ backup_name=$1 Les variables utilisables dans ces scripts sont les mêmes que celles disponibles dans [les scripts d'actions associés](/packaging_apps_scripts). -Example: pour `post_app_install` les variables sont les mêmes que pour le script `install` +Exemple : pour `post_app_install` les variables sont les mêmes que pour le script `install` ##### `post_app_addaccess` et `post_app_removeaccess` @@ -141,11 +148,11 @@ domain=$1 La suite du script dépend de ce que vous voulez effectuer dans celui-ci. ### Cas particulier de `conf_regen` -Le hook conf_regen est un hook plus délicat, que ce soit pour sa mise en place ou pour son contenu. +Le hook `conf_regen` est un hook plus délicat, que ce soit pour sa mise en place ou pour son contenu. ##### Mise en place d'un hook `conf_regen` -Un hook conf_regen ne doit pas être placé dans le dossier hooks de l'application. Il doit être mis en place manuellement. +Un hook `conf_regen` ne doit pas être placé dans le dossier hooks de l'application. Il doit être mis en place manuellement. Le hook doit être copié en indiquant à quel service il est lié. ```bash cp hook_regen_conf /usr/share/yunohost/hooks/conf_regen/50-SERVICE_$app @@ -155,9 +162,9 @@ cp hook_regen_conf /usr/share/yunohost/hooks/conf_regen/50-SERVICE_$app ##### Construire un script de hook conf_regen -Un hook conf_regen est appelé 2 fois, une première fois après analyse de la configuration et avant une éventuelle modification des fichiers, puis une seconde fois après application des modifications, si il y a eu des modifications. +Un hook `conf_regen` est appelé 2 fois, une première fois après analyse de la configuration et avant une éventuelle modification des fichiers, puis une seconde fois après application des modifications, s' il y a eu des modifications. -Un script de hook conf_regen devrait donc ressembler à ça: +Un script de hook `conf_regen` devrait donc ressembler à ça : ```bash #!/bin/bash diff --git a/pages/04.contribute/04.packaging_apps/12.hooks/packaging_apps_hooks.md b/pages/04.contribute/04.packaging_apps/12.hooks/packaging_apps_hooks.md new file mode 100644 index 00000000..16056b85 --- /dev/null +++ b/pages/04.contribute/04.packaging_apps/12.hooks/packaging_apps_hooks.md @@ -0,0 +1,198 @@ +--- +title: Hooks +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_hooks' +--- + +Hooks allow you to trigger a script when an action is performed by the system. +The most obvious case is adding a user. If the app has a `post_user_create` hook, this hook will be triggered as soon as a user is added. +Therefore, this allows an application to execute actions based on events occurring on the system. + +### List of available hooks + +- `post_domain_add` +After adding a domain. +- `post_domain_remove` +After deleting a domain. +- `post_user_create` +After adding a user. +- `post_user_delete` +After deleting a user. +- `post_iptable_rules` +After reloading the firewall. +- `pre_backup_delete` +Before deleting a backup. +- `post_backup_delete` +After deleting a backup. +- `post_app_addaccess` +After adding an authorized user to an application. +- `post_app_removeaccess` +After the removal of a user's authorization on an application. +- `post_app_clearaccess` +After erasing all the access rules on an application. +- `post_app_install` +After installing an application. +- `post_app_upgrade` +After upgrading an application. +- `post_app_remove` +After removing an application. +- `post_app_change_url` +After modifying the path and/or the domain name of an application. +- `post_cert_update` +After updating a certificate +- `conf_regen` +Before and after the regeneration of a service configuration. +Services supported by `regen-conf`: + - avahi-daemon + - dnsmasq + - dovecot + - fail2ban + - glances + - metronome + - mysql + - nginx + - nslcd + - nsswitch + - postfix + - rspamd + - slapd + - ssh + - ssl + +### Hooks setup + +With the exception of the `conf_regen` hook, all hooks are used in the same way. +First of all, you have to understand that a hook is a simple bash script that will be executed by YunoHost when the indicated event occurs. +To add a hook to YunoHost, you must use a "hooks" folder at the root of the application package. Then, put your script in this folder under the name of the corresponding hook. + +> For example: +For the hook `post_user_create`, the script which will have to be executed for this hook should be placed in `hooks/post_user_create` in the app package. + +During the installation and the upgrade of the application, the scripts in the hooks folder will be duplicated in the folder `/etc/yunohost/hooks.d/` in the folder corresponding to the hook, then under the name `50-$app`. +All hooks belonging to an application will be removed when the apllication is deleted. + +### Building a hook script + +As a bash script, a hook script must start with the bash shebang. + +```bash +#!/bin/bash +``` + +Then you have to take the arguments given by YunoHost when calling the script. +Each hook offers different arguments. + +##### `post_domain_add` and `post_domain_remove` + +```bash +domain=$1 +``` + +##### `post_user_create` + +```bash +username=$1 +mail=$2 +password=$3 # Clear password +firstname=$4 +lastname=$5 +``` +##### `post_user_delete` + +```bash +username=$1 +purge=$2 # True/False Indicates whether the user folder has been deleted or not. +``` + +##### `post_iptable_rules` + +```bash +upnp=$1 # True/False Indicates if UPnP is activated or not. +ipv6=$2 # True/False Indicates whether IPV6 is enabled or not. +``` + +##### `pre_backup_delete` and `post_backup_delete` + +```bash +backup_name=$1 +``` + +##### `post_app_install`, `post_app_upgrade`, `post_app_remove` and `post_app_change_url` + +Usable variables in these scripts are the same as those available in [associated actions scripts](/packaging_apps_scripts). + +Example: for `post_app_install` the variables are the same as for the script `install` + +##### `post_app_addaccess` and `post_app_removeaccess` + +```bash +app_id=$1 +users=$2 # All authorized users on the app. Separated by commas. +``` + +##### `post_app_clearaccess` + +```bash +app_id=$1 +``` + +##### `post_cert_update` +```bash +domain=$1 +``` + +The rest of the script depends on what you want to do in it. + +### `conf_regen` special case +The `conf_regen` hook is a more delicate hook, either for its implementation or for its content. + +##### `conf_regen` hook setup + +A `conf_regen` hook should not be placed in the application's hooks folder. It must be set up manually. +The hook should be copied, indicating to which service it is linked. +```bash +cp hook_regen_conf /usr/share/yunohost/hooks/conf_regen/50-SERVICE_$app +``` + +> When removing the application, this hook must be removed manually. + +##### Building `conf_regen` hook script + +`conf_regen` hook is called two times, a first time after analysis of the configuration and before any modification of the files, then a second time after applying the modifications, if there has been modifications. + +`conf_regen` hook script should look like this: + +```bash +#!/bin/bash + +force=${2:-0} # 0/1 --force argument +dryrun=${3:-0} # 0/1 --dry-run argument +pending_conf=$4 # Path of the pending conf file + +do_pre_regen() { + # Put your code here for pre regen conf. +} + +do_post_regen() { + # Put your code here for post regen conf. + # Be careful, this part will be executed only if the configuration has been modified. +} + +case "$1" in + pre) + do_pre_regen + ;; + post) + do_post_regen + ;; + *) + echo "Hook called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +exit 0 +``` diff --git a/pages/04.contribute/04.packaging_apps/14.advanced/01.actions/packaging_apps_actions.md b/pages/04.contribute/04.packaging_apps/14.advanced/01.actions/packaging_apps_actions.md new file mode 100644 index 00000000..f3f338d4 --- /dev/null +++ b/pages/04.contribute/04.packaging_apps/14.advanced/01.actions/packaging_apps_actions.md @@ -0,0 +1,156 @@ +--- +title: Actions +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_actions' +--- + +<div class="alert alert-warning">For now, all those features are <b>EXPERIMENTAL</b> +and aren't ready for production and are probably going to change again, if you +still decide to use them don't expect them to be stable and follow to core +development of YunoHost otherwise <b>they might randomly breaks on your apps</b> +</div> + +Applications "actions" is a packaging feature that allow you to ship with your +application a list of "actions" executable from both the cli and the admin +interfaces. + +"actions" are a list of custom commands that, optionally, has arguments (like +the installation script of an application has arguments) and once called will +called a specific selected command with those arguments. Like an "actions" +restart service with a argument "service name" could called the command +`systemctl restart $some_service` (but don't that specific action in your app, +it's just for example purpose). + +Like the installation page generated from the manifest those actions can accept +a list of arguments. + +Their main purpose is to expose procedures that a sysadmin would normally do on +CLI but that your application user would want to do but don't have the +knowledge to do by themselves via ssh (or are just too lazy for that). + +For example those could be: + +* importing data in a application +* generate a custom backup +* start a procedure like synchronising file with the file system (nextcloud for example) +* purge a local cache +* restart some services +* modify a theme + +Actions looks like this in the admin interface: + + + +## How to add actions to your application + +Adding actions to your application is pretty simple as it is very similar to +writing your manifest for the application installation. + +You need to write an `actions.toml` file in your application at the root level +like the `manifest.toml`/`manifest.json`. + +<div class="alert alert-info"> +The arguments are written in **[YunoHost Arguments +Format](/packaging_apps_arguments_format)** like in `manifest.toml/json` +</div> + +The general pattern looks like this: + +```toml +[first_action] +name = "some name" +description = "some description that will be displayed" + +# can be a bash command like so: +command = "echo pouet $YNH_ACTION_FIRST_ARGUMENT" +# or a path to a script like +command = "/path/to/some/stuff --some-flag $YNH_ACTION_FIRST_ARGUMENT" + +user = "root" # optional +cwd = "/" # optional, "current working directory", by default it's "/etc/yunohost/apps/the_app_id" + # also the variable "$app" is available in this variable and will be replace with the app id + # for example you can write "/var/www/$app" +accepted_return_codes = [0, 1, 2, 3] # optional otherwise only "0" will be a non enorous return code + + [first_action.arguments] + # here, you put a list of arguments exactly like in manifest.toml/json + [first_action.arguments.first_argument] + type = "string" + ask.en = "service to restart" + example = "nginx" + + ... # add more arguments here if needed + # you can also have actions without arguments + +[another_action] +name = "another name" +command = "systemctl restart some_service" + + [another_action.arguments] + [another_action.arguments.argument_one] + type = "string" + ask.en = "some stuff" + example = "stuff" + + ... # add more arguments here if needed + # you can also have actions without arguments +``` + +You can have as much actions as you want and from zero to as many arguments you want. + +If you prefer, you can also write your actions in JSON like manifest.json: + +```json +[{ + "id": "restart_service", + "name": "Restart service", + "command": "echo pouet $YNH_ACTION_SERVICE", + "user": "root", # optional + "cwd": "/", # optional + "accepted_return_codes": [0, 1, 2, 3], # optional + "description": { + "en": "a dummy stupid exemple or restarting a service" + }, + "arguments": [ + { + "name": "service", + "type": "string", + "ask": { + "en": "service to restart" + }, + "example": "nginx" + } + ] +}, +{ + ... # other action +}] +``` + +## How to use actions + +### In the admin + +<div class="alert alert-warning">For now since those features are still +experimental you won't find any direct links to the app actions on the app +page</div> + +The actions are located on https://some_domain.tld/yunohost/admin/#/apps/$app_id/actions + +## With the CLI + +The CLI API is very similar to application installation. You have 2 commands: + +* `yunohost app list $app` +* `yunohost app run $app $action_id` ("$action_id" is the this between "[]" + like "[another_action]" in the example) + +`list` will obviously give you all actions for an application. + +`run` will run an existing action for an application and will ask, if needed, +values for arguments. Like with `yunohost app install` you can use the `-a` and +pass arguments in the HTTP POST arguments format (like +`&path=/app&domain=domain.tld&other_value=stuff`) diff --git a/pages/04.contribute/04.packaging_apps/14.advanced/02.config_panel/packaging_apps_config_panel.md b/pages/04.contribute/04.packaging_apps/14.advanced/02.config_panel/packaging_apps_config_panel.md new file mode 100644 index 00000000..b39c03a8 --- /dev/null +++ b/pages/04.contribute/04.packaging_apps/14.advanced/02.config_panel/packaging_apps_config_panel.md @@ -0,0 +1,310 @@ +--- +title: Configuration panel +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_config_panel' +--- + +<div class="alert alert-warning">For now, all those features are <b>EXPERIMENTAL</b> +and aren't ready for production and are probably going to change again, if you +still decide to use them don't expect them to be stable and follow to core +development of YunoHost otherwise <b>they might randomly breaks on your apps</b> +</div> + +Configuration panel, or "config_panel", is a way for an application to ship a +custom configuration panel available in the YunoHost's admin interface for the +application. This is generally used to replace the "you need to manually edit +this configuration file (or files) in whatever format/language for this +application in cli and do all those complex commands" to "just use to +configuration panel to change the options of the application". + +Yes, this is one place to add this so asked "how can I make my application from +public to private and vice versa" user request. + +config_panel is probably the most complex YunoHost apps feature as you'll need +to write both a description of the panel in toml and a script that will need to +both work in a "display mode" and "handle inputs" mode. But this is still very +doable and very worth it if you need it. + +Here how it looks like in the admin interface: + + + +## Usage + +### Admin interface + +The configuration panel for an application can be accessed with this URL: + + https://my_domain.tld/yunohost/admin/#/apps/$app_id/config-panel + +<div class="alert alert-warning">For now since those features are still +experimental you won't find any direct links to the app actions on the app +page</div> + +### CLI + +For now the CLI API for the config panel is not very good at all, you can still +use it but it's really impracticable. + +* `yunohost app config show-panel $app_id` will show the panel. **But for now +it's very broken and will ask question for unfilled value of the panel**. + +* `yunohost app config apply` will call the script with apply and... no values + since you aren't passing them, except if you are ready to play with the `-a` + flag and pass every global value in the HTTP POST format (protip: you don't) + +In conclusion: don't use the CLI for now, we need to design something better. + +## How to add a config_ panel to your application + +### config_panel.toml + +First, you need to write a `config_panel.toml` (or `config_panel.json` if you +REALLY want to but we really don't recommend it as it is very error prone and +frustrating to write by hand) that will be located at the root of you +application, next to the manifest.json/toml. It looks like this: + +<div class="alert alert-info"> +The options are written in **[YunoHost Arguments +Format](/packaging_apps_arguments_format)** like in `manifest.toml/json` +</div> + +```toml +version = "0.1" # version number, not used yet but important +name = "name that will be displayed on the admin" + +[section_id] +name = "name of the section that will be displayed" + + [section_id.sub_section_id] + name = "sub section" + + # those arguments are in yunohost argument format like manifest.json + [section_id.sub_section_id.option_id] + ask.en = "the text displayed for the option" + type = "argument_option" + default = true + help = "A public Leed will be accessible for third party apps.<br>By turning on 'anonymous readers' in Leed configuration, you can made your feeds public." + + [section_id.sub_section_id.another_option_id] + ... + + [section_id.another_sub_section_id] + name = "stuff" + +[another_section_id] +name = "stuff" + +... +``` + + +And a real world example with the rendered admin: + + + +As a text format: + +```toml +version = "0.1" +name = "Leed configuration panel" + +[main] +name = "Leed configuration" + + [main.is_public] + name = "Public access" + + # those arguments are in yunohost argument format + [main.is_public.is_public] + ask.en = "Is it a public website ?" + type = "boolean" + default = true + help = "A public Leed will be accessible for third party apps.<br>By turning on 'anonymous readers' in Leed configuration, you can made your feeds public." + + + [main.overwrite_files] + name = "Overwriting config files" + + [main.overwrite_files.overwrite_nginx] + ask.en = "Overwrite the nginx config file ?" + type = "boolean" + default = true + help = "If the file is overwritten, a backup will be created." + + [main.overwrite_files.overwrite_phpfpm] + ask.en = "Overwrite the php-fpm config file ?" + type = "boolean" + default = true + help = "If the file is overwritten, a backup will be created." + +... +``` + +### the scripts/config script + +To make your configuration panel functional you need write a "config" script +that will be located in the "script" folder (like the "install" script). This +script will be called in two different occasions: + +* when the configuration panel is displayed and yunohost needs to fill the values +* when the configuration is modified by the user + +Every option of the configuration panel will be sent to the script +following this naming convention: + +```bash +YNH_{section_id}_{sub_section_id}_{option_id} (everything in upper case) +``` + +For example, this option value: + +```toml +[main] +name = "Leed configuration" + + [main.is_public] + name = "Public access" + + # those arguments are in yunohost argument format + [main.is_public.is_public] + ... +``` + +Will be available under this name in the config script: + +```bash +YNH_CONFIG_MAIN_IS_PUBLIC_IS_PUBLIC +``` + +Also, the same "scripts/config" script is called in both situation. To differentiate +those situation the first argument passed to the config script is either "show" +or "apply". + +A common pattern to handle that is to write your script following this pattern: + +```bash +show_config() { + # do stuff +} + +apply_config() { + # do stuff +} + +case $1 in + show) show_config;; + apply) apply_config;; +esac +``` + +#### The "show" part + +The show part is when the user ask to see the current state of the +configuration panel (like opening to configuration panel page on the admin +interface). The role of the scripts/config script here is to gather all the +relevant information, by for example parsing a configuration file or querying a +database, and communicate it to YunoHost. To do so, you need to use the helper +`ynh_return` like so: + +```bash +ynh_return "YNH_CONFIG_SOME_VARIABLE_NAME=some_value" +``` + +For example, for this config_panel: + +```toml +[main] +name = "Leed configuration" + + [main.is_public] + name = "Public access" + + # those arguments are in yunohost argument format + [main.is_public.is_public] + ... +``` + +You would do: + +```bash +ynh_return "YNH_CONFIG_MAIN_IS_PUBLIC_IS_PUBLIC=1" +``` + +If you don't provide any value for a configuration **the default value will be used**. + +Expanding our previous example you would have this scripts/config script: + +```bash +show_config() { + ynh_return "YNH_CONFIG_MAIN_IS_PUBLIC_IS_PUBLIC=1" +} + +apply_config() { + # do stuff +} + +case $1 in + show) show_config;; + apply) apply_config;; +esac +``` + +#### The "apply" part + +The "apply" part is called when the user click on "submit" on the configuration +page on the admin interface. This part is simpler to write: + +- the scripts/config will be called with "apply" +- all the values in the config panel (modified or not) are available as global + variables in the script following the format `YNH_{section_id}_{sub_section_id}_{option_id}` + (exactly the same than for show) +- the script is responsible for doing whatever it wants with those information +- once the script has succeeded, the admin interface displays the config panel + again and triggers the same script in "show" mode + +Expanding the previous script that could look like that: + +```bash +show_config() { + ynh_return "YNH_CONFIG_MAIN_IS_PUBLIC_IS_PUBLIC=1" +} + +apply_config() { + value=$YNH_CONFIG_MAIN_IS_PUBLIC_IS_PUBLIC + # do some stuff with value +} + +case $1 in + show) show_config;; + apply) apply_config;; +esac +``` + +Or if you want a full useless simple script that store the value in a file, +this can look like this: + +```bash +dummy_config_file="dummy_config_file.ini" + +show_config() { + if [ -e $dummy_config_file ] + then + ynh_return "YNH_CONFIG_MAIN_IS_PUBLIC_IS_PUBLIC=$(cat $dummy_config_file)" + fi + + # the default value will be used +} + +apply_config() { + echo $YNH_CONFIG_MAIN_IS_PUBLIC_IS_PUBLIC > $dummy_config_file +} + +case $1 in + show) show_config;; + apply) apply_config;; +esac +``` diff --git a/pages/04.contribute/04.packaging_apps/14.advanced/packaging_apps_advanced.md b/pages/04.contribute/04.packaging_apps/14.advanced/packaging_apps_advanced.md new file mode 100644 index 00000000..2ae41820 --- /dev/null +++ b/pages/04.contribute/04.packaging_apps/14.advanced/packaging_apps_advanced.md @@ -0,0 +1,47 @@ +--- +title: Advanced features of apps packaging +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_advanced' +--- + +<div class="alert alert-warning">For now, all those features are <b>EXPERIMENTALS</b> +and aren't ready for production and are probably going to change again, if you +still decide to use them don't expect them to be stable and follow to core +development of YunoHost otherwise <b>they might randomly breaks on your apps</b> +</div> + +## Actions + +Actions allow you to ship a list of executables "actions" related to your +application, for example that could be: + +* import data +* generate a custom backup +* start a procedure +* regenerate a local cache + +[Full documentation](/packaging_apps_actions) + +Example in the admin: + + + +## Configuration Panel + +Configuration or "config_panel" allow you to offer a custom configuration panel +for your application integrated into YunoHost administration panel. This allow +you to expose whatever configuration you want for your application and this is +generally used to handle an application configuration file when this is not +possible inside the application itself. + +This is generally also the place where you want to add the option to make an +application public or not. + +[Full documentation](/packaging_apps_config_panel) + +Example in the admin: + + diff --git a/packaging_apps_levels_fr.md b/pages/04.contribute/04.packaging_apps/15.quality_tests/01.apps_levels/packaging_apps_levels.fr.md similarity index 94% rename from packaging_apps_levels_fr.md rename to pages/04.contribute/04.packaging_apps/15.quality_tests/01.apps_levels/packaging_apps_levels.fr.md index b2bfe53e..8c12625e 100644 --- a/packaging_apps_levels_fr.md +++ b/pages/04.contribute/04.packaging_apps/15.quality_tests/01.apps_levels/packaging_apps_levels.fr.md @@ -1,9 +1,16 @@ -# Niveaux de qualité des packages d'applications YunoHost +--- +title: Niveaux de qualité des packages d'applications YunoHost +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_levels' +--- Afin de faciliter le packaging d'applications par des étapes successives à atteindre, chaque package est affublé d'un niveau de qualité, de 0 à 10. Un package doit satisfaire un certain nombre de critères pour atteindre chaque niveau. De plus pour atteindre un niveau, le package doit avoir préalablement atteint le niveau précédent. -Ce classement des applications par niveaux présente 3 avantages: +Ce classement des applications par niveaux présente 3 avantages : - Le packaging d'application est d'autant plus ludique, avec des objectifs clairs à atteindre et des étapes successives. - Une application correctement packagée est davantage mise en avant qu'une application ne respectant pas les règles de packaging. - Les utilisateurs peuvent rapidement voir le niveau d'une application et ainsi savoir si le package est de bonne qualité. @@ -43,13 +50,13 @@ Le package d'application respecte des recommandations de packaging supérieures. **Niveau 10** Le package d'application est jugé parfait ! -## Les niveaux de qualité en détails: +## Les niveaux de qualité en détails : ### Niveau 0 **L'application ne s'installe pas ou ne fonctionne pas après installation.** C'est le niveau le plus bas, une application de niveau 0 est considérée comme non fonctionnelle. -YEP à respecter pour atteindre le niveau 0: +YEP à respecter pour atteindre le niveau 0 : - [YEP 1.1](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-11---nommer-son-app-et-son-d%C3%A9pot---valid%C3%A9--manuel--notworking-) : Nommer son app et son dépôt - [YEP 1.2](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-12---inscrire-lapp-sur-un-r%C3%A9pertoire-connu---valid%C3%A9--manuel--notworking-) : Inscrire l'app sur un "répertoire" connu @@ -57,7 +64,7 @@ YEP à respecter pour atteindre le niveau 0: **L'application s'installe et se désinstalle correctement.** Mais des exceptions sont possibles, si au moins une méthode d'installation est fonctionnelle ainsi que sa suppression alors l'application est considérée comme fonctionnelle. -YEP à respecter pour atteindre le niveau 1: +YEP à respecter pour atteindre le niveau 1 : - [YEP 2.2](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-22---utiliser-bash-pour-les-scripts-principaux---valid%C3%A9--auto--working-) : Utiliser bash pour les scripts principaux - [YEP 2.5](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-25---copier-correctement-des-fichiers----brouillon--manuel--working-) : Copier correctement des fichiers - [YEP 2.7](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-27---donner-des-permissions-suffisantes-aux-instructions-bash----valid%C3%A9--auto--working-) : Donner des permissions suffisantes aux instructions bash @@ -76,7 +83,7 @@ YEP à respecter pour atteindre le niveau 1: *Si une application ne permet pas certaines configurations d'installation, celles-ci doivent être indiquées clairement dans le readme du package. Toutefois, le niveau 2 ne peut pas être atteint si une configuration d'installation est volontairement écartée sans raison valable.* *Cela n'empêche pas de restreindre volontairement les installations publiques, privées ou multi-instance si l'application le justifie.* -YEP à respecter pour atteindre le niveau 2: +YEP à respecter pour atteindre le niveau 2 : - [YEP 1.5](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-15---mettre-%C3%A0-jour-r%C3%A9guli%C3%A8rement-le-statut-de-lapp---brouillon--manuel--working-) : Mettre à jour régulièrement le statut de l'app - *[YEP 2.18.2](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-2182---supporter-linstallation-sur-un-domaine----valid%C3%A9--auto--working-) : Supporter l'installation sur un domaine* - *[YEP 2.18.3](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-2183---supporter-linstallation-sur-un-sous-domaine----valid%C3%A9--auto--working-) : Supporter l'installation sur un sous-domaine* @@ -87,13 +94,13 @@ YEP à respecter pour atteindre le niveau 2: **L'application supporte l'upgrade depuis une ancienne version du package.** L'application doit pouvoir être mise à jour depuis une version précédente du package sans provoquer d'erreur. -YEP à respecter pour atteindre le niveau 3: +YEP à respecter pour atteindre le niveau 3 : - [YEP 2.3](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-23---sauvegarder-les-r%C3%A9ponses-lors-de-linstallation---valid%C3%A9--manuel--working-) : Sauvegarder les réponses lors de l'installation ### Niveau 4 **L'application peut-être sauvegardée et restaurée sans erreur sur la même machine ou une autre.** -YEP à respecter pour atteindre le niveau 4: +YEP à respecter pour atteindre le niveau 4 : - *[YEP 4.3](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-43---fournir-un-script-de-sauvegarde-yunohost-fonctionnel----valid%C3%A9--auto--official-) : Fournir un script de sauvegarde YunoHost fonctionnel* - *[YEP 4.4](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-44---fournir-un-script-de-restauration-yunohost-fonctionnel----valid%C3%A9--auto--official-) : Fournir un script de restauration YunoHost fonctionnel* @@ -101,7 +108,7 @@ YEP à respecter pour atteindre le niveau 4: **L'application ne présente aucune erreur dans [Package linter](https://github.com/YunoHost/package_linter).** *Il peut y avoir des faux positifs dans Package linter. Ces situations seront gérées au cas par cas.* -YEP à respecter pour atteindre le niveau 5: +YEP à respecter pour atteindre le niveau 5 : - *[YEP 1.3](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-13---indiquer-la-licence-associ%C3%A9e-au-paquet---valid%C3%A9--auto--working-) : Indiquer la licence associée au paquet* - *[YEP 2.1](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-21---respecter-le-format-du-manifeste---valid%C3%A9--auto--inprogress-) : Respecter le format du manifeste* - [YEP 2.12](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-212---utiliser-les-commandes-pratiques-helpers---valid%C3%A9--auto--official-) : Utiliser les commandes pratiques (helpers) @@ -110,7 +117,7 @@ YEP à respecter pour atteindre le niveau 5: ### Niveau 6 **Le package d'application est dans l'organisation YunoHost-Apps.** -YEP à respecter pour atteindre le niveau 6: +YEP à respecter pour atteindre le niveau 6 : - [YEP 1.4](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-14---informer-sur-lintention-de-maintenir-un-paquet----brouillon--manuel--working-) : Informer sur l'intention de maintenir un paquet - [YEP 1.6](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-16---se-tenir-inform%C3%A9-sur-l%C3%A9volution-du-packaging-dapps---valid%C3%A9--manuel--official-) : Se tenir informé sur l'évolution du packaging d'apps - *[YEP 1.7](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-17---ajouter-lapp-%C3%A0-lorganisation-yunohost-apps---valid%C3%A9--manuel--official-) : Ajouter l'app à l'[organisation YunoHost-Apps](https://github.com/YunoHost-Apps)* @@ -126,7 +133,7 @@ YEP à respecter pour atteindre le niveau 6: **L'application ne présente aucune erreur dans [Package check](https://github.com/YunoHost/package_check).** En considérant le maximum de tests possibles pour l'application. -YEP à respecter pour atteindre le niveau 7: +YEP à respecter pour atteindre le niveau 7 : - [YEP 2.4](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-24---d%C3%A9tecter-et-g%C3%A9rer-les-erreurs---brouillon--manuel--working-) : Détecter et gérer les erreurs - [YEP 2.6](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-26---annuler-laction-si-les-valeurs-dentr%C3%A9es-sont-incorrectes----valid%C3%A9--manuel--working-) : Annuler l'action si les valeurs d'entrées sont incorrectes - [YEP 2.8](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-28---modifier-correctement-une-configuration-syst%C3%A8me----brouillon--manuel--working-) : Modifier correctement une configuration système @@ -138,13 +145,13 @@ YEP à respecter pour atteindre le niveau 7: ### Niveau 8 **Le package d'application respecte toute les recommandations de packaging d'apps. C'est une app de très bonne qualité.** -YEP à respecter pour atteindre le niveau 8: +YEP à respecter pour atteindre le niveau 8 : - [YEP 1.12](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-112) : Respect le modèle de l'application d'exemple - Prise en charge du changement d'URL - *[YEP 2.16](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-216---v%C3%A9rifier-la-disponibilit%C3%A9-des-d%C3%A9pendances-sur-arm-x86-et-x64----valid%C3%A9--manuel--official-) : Vérifier la disponibilité des dépendances sur ARM, x86 et x64* - [YEP 2.18.5](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-2185---ajouter-la-tuile-yunohost-pour-naviguer-facilement-entre-les-applications----valid%C3%A9--manuel--official-) : Ajouter la tuile YunoHost pour naviguer facilement entre les applications -- [YEP 4.1](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-41---lier-au-ldap----valid%C3%A9--manuel--official-) : Lier au ldap -- [YEP 4.2](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-42---lier-lauthentification-au-sso----valid%C3%A9--manuel--official-) : Lier l'authentification au sso +- [YEP 4.1](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-41---lier-au-ldap----valid%C3%A9--manuel--official-) : Lier au LDAP +- [YEP 4.2](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-42---lier-lauthentification-au-sso----valid%C3%A9--manuel--official-) : Lier l'authentification au SSO - [YEP 4.5](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-45---utiliser-les-hooks----valid%C3%A9--manuel--optional-) : Utiliser les hooks *Si une application n'est pas disponible sur une architecture, et qu'il est impossible de contourner cette limitation raisonnablement, cette limitation doit être indiquée dans le readme et prise en compte dans le script d'installation. L'installation de l'application sur une architecture non supportée doit être stoppée avant de modifier les fichiers.* @@ -152,7 +159,7 @@ YEP à respecter pour atteindre le niveau 8: ### Niveau 9 **L'application respecte toutes les YEP optionnelles.** -YEP à respecter pour atteindre le niveau 9: +YEP à respecter pour atteindre le niveau 9 : - [YEP 2.14](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-214---remplir-correctement-un-fichier-de-conf----brouillon--manuel--official-) : Remplir correctement un fichier de conf - [YEP 2.17](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-217---prendre-en-compte-la-version-dorigine-lors-des-mises-%C3%A0-jour----valid%C3%A9--manuel--official-) : Prendre en compte la version d'origine lors des mises à jour - [YEP 3.4](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-34---isoler-lapp----brouillon--manuel--official-) : Isoler l'app diff --git a/pages/04.contribute/04.packaging_apps/15.quality_tests/01.apps_levels/packaging_apps_levels.md b/pages/04.contribute/04.packaging_apps/15.quality_tests/01.apps_levels/packaging_apps_levels.md new file mode 100644 index 00000000..05a31018 --- /dev/null +++ b/pages/04.contribute/04.packaging_apps/15.quality_tests/01.apps_levels/packaging_apps_levels.md @@ -0,0 +1,79 @@ +--- +title: Quality levels of YunoHost application packages +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_levels' +--- + +In order to facilitate the packaging of applications by providing successive steps to achieve, each package is assigned a quality level, from 0 to 10. +A package must meet a number of criteria to reach each level. In addition, to reach a level, the package must have previously reached the previous level. + +This classification of applications by levels has 3 advantages: +- The application packaging is more fun, with clear objectives to achieve and successive steps. +- A properly packaged application is put forward more than an application that does not comply with packaging rules. +- Users can quickly see the level of an application and thus know if the package is of good quality. + +The level is automatically computed by the automatic test suite ("the CI") which runs tests [here](https://ci-apps.yunohost.org/ci/) and results are summarized [here](https://dash.yunohost.org/appci/branch/stable). + +<div class="alert alert-info"> +<b> +In the application catalog of the webadmin, an application is only shown to the user if its level is at least 5. Otherwiser, users may have to enable the display of "low-quality" applications to be able to install it. +</b> +</div> + +## Summary of the level definitions + +The following summarizes the current definition of the levels. + +The exact definitions are likely to shift over time and are heavily dependent on: +- the [package linter](https://github.com/YunoHost/package_linter) which performs a static analysis of the app scripts and files to detect issues or deprecated practices +- the [package check system](https://github.com/YunoHost/package_check) which actually tests the various operations (installs, upgrades, backup...) + +#### Level 0 + +The application does not work at all. + +#### Level 1 + +The application can be installed/removed in at least one configuration. + +#### Level 2 + +The application can be installed/removed in all common configurations. + +(Typically this corresponds to full domain vs. sub path installs, private/public +installs, multi-instance installs) + +#### Level 3 + +The application supports upgrading. + +#### Level 4 + +The application supports backup/restore. + +#### Level 5 + +The application triggers no errors on the package linter + +#### Level 6 + +The application repository is part of the YunoHost-Apps organization, which allows the community to contribute to its maintainance. + +#### Level 7 + +The application triggers no warnings on the package linter. + +#### Level 8 + +The application is long-term good quality, meaning it's been at least level 5 in the application catalog for a certain amount of time (when writing this: level 5+ 90% of the time during the last year) + +#### Level 9 + +The application is considered ["high-quality"](https://github.com/YunoHost/apps/blob/master/hq_validation_template.md): it is well-integrated with YunoHost (in particular SSO/LDAP) and follows the recommended development workflow. + +#### Level 10 + +(No definition yet) diff --git a/packaging_apps_guidelines_fr.md b/pages/04.contribute/04.packaging_apps/15.quality_tests/02.yep/packaging_apps_guidelines.fr.md similarity index 91% rename from packaging_apps_guidelines_fr.md rename to pages/04.contribute/04.packaging_apps/15.quality_tests/02.yep/packaging_apps_guidelines.fr.md index 80925dc5..cfbcf9ea 100644 --- a/packaging_apps_guidelines_fr.md +++ b/pages/04.contribute/04.packaging_apps/15.quality_tests/02.yep/packaging_apps_guidelines.fr.md @@ -1,15 +1,17 @@ -# Packaging d’applications : les bonnes pratiques - -<div class="alert alert-danger"> -<b> -Cette page est en cours d'élaboration. Tant que cet avertissement n'est pas enlevé. Considérez ces informations comme potentiellement fausse. -Le nom YEP n'est à priori pas définitif, ni les niveaux, ni les bonnes pratiques en elle-même. -</b> -</div> +--- +title: Packaging d'applications : les bonnes pratiques +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_guidelines' +--- ### Introduction Ce document a pour but de lister les différentes bonnes pratiques concernant la création de paquet d'application YunoHost. +!!! This page is outdated and should be reworked + Chaque bonne pratique est numérotée avec un numéro suffixé par les lettres YEP (YunoHost Enhancement Proposals), ceci afin de pouvoir y faire référence facilement dans les outils d'analyse automatique de paquet ([package checker](https://github.com/YunoHost/package_check), [package linter](https://github.com/YunoHost/package_linter)), mais également lors des revues de code. Chaque YEP est associée à : @@ -70,8 +72,8 @@ Chaque YEP est associée à : | YEP 3.7 | Modifier correctement les dépots sources | draft | manuel | NOTWORKING (0) | | | | | | | | **YEP 4** | **Intégrer une app** | **Statut** | **Test** | **Niveau** | -| 4.1 | Lier au ldap | validé | manuel | OFFICIAL (4) | -| YEP 4.2 | Lier l'authentification au sso | validé | manuel | OFFICIAL (4) | +| 4.1 | Lier au LDAP | validé | manuel | OFFICIAL (4) | +| YEP 4.2 | Lier l'authentification au SSO | validé | manuel | OFFICIAL (4) | | YEP 4.2.1 | Déconnexion | validé | manuel | OFFICIAL (9) | | YEP 4.3 | Fournir un script de sauvegarde YunoHost fonctionnel | validé | auto | OFFICIAL (6) | | YEP 4.4 | Fournir un script de restauration YunoHost fonctionnel | validé | auto | OFFICIAL (6) | @@ -89,9 +91,9 @@ La YEP 1 est une meta YEP, elle explique ce qu'il faut faire pour échanger avec ##### Nommer son app et son dépôt | validé | manuel | NOTWORKING | Chaque application YunoHost possède un id inscrit dans le manifeste de l'application. Cet identifiant doit être unique entre chaque paquet d'application. -Il est donc recommandé de vérifier sa disponibilité en consultant la liste des applications référencées dans les dépôts d'applications connus (official, community, internetcube). +Il est donc recommandé de vérifier sa disponibilité en consultant la liste des applications référencées dans les dépôts d'applications connus (apps, internetcube). -De plus l'identifiant doit respecter l'expression régulière suivante `^[a-z1-9]((_|-)?[a-z1-9])+$`. Autrement dit, il doit respecter les règles suivantes : +De plus l'identifiant doit respecter l'expression régulière suivante `^[a-z0-9]((_|-)?[a-z0-9])+$`. Autrement dit, il doit respecter les règles suivantes : * être en minuscule * commencer par une lettre ou un chiffre * être alphanumérique (le underscore est autorisé) @@ -100,7 +102,7 @@ De plus l'identifiant doit respecter l'expression régulière suivante `^[a-z1-9 Pour les noms d'applications contenant des espaces la quasi-totalité des paquets actuels les retirent simplement sans les remplacer par des tirets ou underscores. -Par convention, les dépôts d'applications YunoHost sont toujours nommés de leur ID suivis de la chaîne de caractère "\_ynh". Ainsi on peut distinguer le dépôt upstream de l'application, du dépôt du paquet yunohost. Cette notation permet également de trouver des applications non répertoriées à travers les moteurs de recherche des plateformes proposant des gestionnaires de version (GitHub par exemple). +Par convention, les dépôts d'applications YunoHost sont toujours nommés de leur ID suivis de la chaîne de caractère "\_ynh". Ainsi on peut distinguer le dépôt upstream de l'application, du dépôt du paquet YunoHost. Cette notation permet également de trouver des applications non répertoriées à travers les moteurs de recherche des plateformes proposant des gestionnaires de version (GitHub par exemple). Exemple : ID : exemple Nom de dépôt : exemple_ynh @@ -114,31 +116,31 @@ Ces dépôts ont plusieurs fonctions : * indiquer l'état de fonctionnement du paquet ; * indiquer des informations sur le support d'un paquet. -Pour les listes `official.json` et `community.json` maintenues par l'équipe du projet Yunohost, l'inscription se fait sur [le dépôt git "apps"](https://github.com/YunoHost/apps). D'autres listes non-officielles (notamment celles incluant des applications non-libres) peuvent exister, se réferer au [Forum](https://forum.yunohost.org) de la communauté. +Pour la liste `apps.json` maintenue par l'équipe du projet YunoHost, l'inscription se fait sur [le dépôt Git "apps"](https://github.com/YunoHost/apps). D'autres listes non-officielles (notamment celles incluant des applications non-libres) peuvent exister, se réferer au [Forum](https://forum.yunohost.org) de la communauté. #### YEP 1.3 ##### Indiquer la licence associée au paquet | brouillon | AUTO | WORKING | La licence du paquet est à indiquer dans un fichier `LICENSE` à la racine du paquet. Attention à ne pas confondre avec la licence de l'application qui va être installée dont l'acronyme est à renseigner dans le champ `license` du manifeste. -Les listes d'applications official.json et community.json n'acceptent que les paquets dont la licence est libre, de même pour la licence de l'application contenue. Certaines applications libres nécessitent des dépendances non-libres (exemple: mp3, drivers, etc.). Dans ce cas, il faut ajouter `&dep-non-free` à l'acronyme et si possible donner des précisions dans le README.md du paquet, l'intégration sera dans ce cas acceptée au cas par cas. +La liste d'application apps.json n'accepte que les paquets dont la licence est libre, de même pour la licence de l'application contenue. Certaines applications libres nécessitent des dépendances non-libres (exemple: MP3, drivers, etc.). Dans ce cas, il faut ajouter `&dep-non-free` à l'acronyme et si possible donner des précisions dans le README.md du paquet, l'intégration sera dans ce cas acceptée au cas par cas. -**NB :** Les applications non-présentes dans les listes maintenues par le projet peuvent tout de même être installées : soit manuellement via le lien de l'application, soit de manière plus intégrée via des listes non-officielles (qui peuvent être créées et maintenues par la communauté). +**NB :** Les applications non-présentes dans la liste maintenue par le projet peuvent tout de même être installées : soit manuellement via le lien de l'application, soit de manière plus intégrée via des listes non-officielles (qui peuvent être créées et maintenues par la communauté). Dans le futur, YunoHost affichera sans doute des détails sur la licence de l'application. Pour y parvenir, l'acronyme doit être celui issu de cette [liste de licences répertoriées du SPDX](https://spdx.org/licenses/) (si il y a 2 acronymes, il faut prendre celui contenant le numéro de version). Pour plus de cohérence, la casse doit être respectée. -Si la licence n'est pas présente dans la liste, dans ce cas il faut indiquer `free` ou `non-free` selon qu'elle est libre ou non et donner l'occasion à l'utilisateur de se renseigner dans le README.md (lien, explications, ...). +Si la licence n'est pas présente dans la liste, dans ce cas il faut indiquer `free` ou `non-free` selon qu'elle est libre ou non et donner l'occasion à l'utilisateur de se renseigner dans le README.md (lien, explications...). -Exemple: pour une licence `GNU Lesser General Public License (LGPL), version 3` l'acronyme est `LGPL-3.0` si toutefois des dépendances non libres sont utilisées dans ce cas il faudra mettre `LGPL-3.0&dep-non-free` dans le manifeste. +Exemple : pour une licence `GNU Lesser General Public License (LGPL), version 3` l'acronyme est `LGPL-3.0` si toutefois des dépendances non libres sont utilisées dans ce cas il faudra mettre `LGPL-3.0&dep-non-free` dans le manifeste. -Si une application a des modules liés avec une autre licence (Exemple: Odoo 9 LGPL-3.0 + un module sous licence AGPL-3.0 ), dans ce cas on indiquera les deux licences séparées par un `&`. +Si une application a des modules liés avec une autre licence (Exemple : Odoo 9 LGPL-3.0 + un module sous licence AGPL-3.0 ), dans ce cas on indiquera les deux licences séparées par un `&`. Si deux applications distinctes sont dans le même paquet d'installation et ont des licences distinctes, dans ce cas on peut utiliser le `,` pour séparer les licences. Dans les deux cas, le mainteneur est encouragé à réfléchir à la possibilité de créer deux paquets distincts. Le manifeste de chaque application permet de poser des questions de type `app` de façon à faire référence à une autre application déjà installée. -Rappel: une question de type `app` prend pour réponse l'identifiant d'une des apps déjà installée. +Rappel : une question de type `app` prend pour réponse l'identifiant d'une des apps déjà installée. -Quelques liens intéressants pour aider au choix de licence: +Quelques liens intéressants pour aider au choix de licence : * [Des fiches explicatives sur les licences libres](https://www.inria.fr/content/download/5896/48452/version/2/file/INRIA_recueil_fiches_licences_libres_vf.pdf) * [La documentation sur les licences du projet GNU](https://www.gnu.org/licenses/licenses.fr.html) * [Un guide du projet GNU pour aider au choix d'une licence](https://www.gnu.org/licenses/license-recommendations.fr.html) @@ -204,7 +206,7 @@ Il y a également le README.md, ce dernier doit et peut contenir : * des instructions pour l'utiliser (par exemple pour relier son smartphone ou son ordinateur) * l'endroit pour signaler un dysfonctionnement / une demande * la roadmap/TODO -* éventuellement les pré-requis en termes de mémoires ram, processeur etc. (certains équipements ont moins de 512Mo de ram) +* éventuellement les pré-requis en termes de mémoires RAM, processeur etc. (certains équipements ont moins de 512 Mo de RAM) #### YEP 1.10 ##### Garder un historique de version propre | brouillon | manuel | OFFICIAL | @@ -226,11 +228,11 @@ Le manifeste permet de décrire une app afin que YunoHost puisse lui appliquer l #### YEP 2.2 ##### Utiliser bash pour les scripts principaux | validé | auto | WORKING | -Les scripts d'action (install, upgrade, remove, backup et restore) doivent être en bash afin que la cli/api yunohost puisse correctement les appeler. +Les scripts d'action (install, upgrade, remove, backup et restore) doivent être en bash afin que la CLI/API YunoHost puisse correctement les appeler. Ceci étant, rien n'empêche à l'intérieur de ces scripts de faire appel à d'autres scripts ou bibliothèques de fonction. Ceux-ci ne sont pas obligés d'être en bash. -Cependant, il faudra porter une attention particulière à l'affichage correct des logs d'information, de warning, ou d'erreurs. Afin qu'un utilisateur de la cli/api yunohost puisse comprendre le fonctionnement du script venant d'être exécuté et au besoin réparer son instance YunoHost. +Cependant, il faudra porter une attention particulière à l'affichage correct des logs d'information, de warning, ou d'erreurs. Afin qu'un utilisateur de la CLI/API YunoHost puisse comprendre le fonctionnement du script venant d'être exécuté et au besoin réparer son instance YunoHost. #### YEP 2.3 ##### Sauvegarder les réponses lors de l'installation | validé | manuel | WORKING | @@ -239,12 +241,12 @@ Lors de l'installation, il est nécessaire de sauvegarder chaque réponse aux qu #### YEP 2.4 ##### Détecter et gérer les erreurs | brouillon | manuel | WORKING | Les scripts install, upgrade, backup et restore doivent détecter les erreurs pour éviter la poursuite des scripts en cas d'erreur bloquante ou d'usage de variable vide. -L'usage de trap et de set -eu est recommandé pour détecter et traiter les erreurs ([Discussion en cours à ce sujet](https://forum.yunohost.org/t/gestion-des-erreurs-set-e-et-ou-trap/2249/5)) +L'usage de trap et de `set -eu` est recommandé pour détecter et traiter les erreurs ([Discussion en cours à ce sujet](https://forum.yunohost.org/t/gestion-des-erreurs-set-e-et-ou-trap/2249/5)) Il est nécessaire également de vérifier le contenu des variables avant les suppressions du script remove. Par exemple un `rm -Rf /var/www/$app` avec `$app` vide aurait un résultat désastreux. Au début des scripts, avant toutes modifications, il faut vérifier l'existence des utilisateurs mentionné à l'installation, ainsi que la disponibilité du path demandé, la disponibilité du dossier final de l'application et la taille des mots de passe le cas échéant. - N'oubliez pas qu'en cas d'erreur d'installation le script de suppression sera lancé automatiquement par la cli yunohost. + N'oubliez pas qu'en cas d'erreur d'installation le script de suppression sera lancé automatiquement par la CLI YunoHost. #### YEP 2.5 ##### Copier correctement des fichiers | brouillon | manuel | WORKING | @@ -262,7 +264,7 @@ Dans le cas où l'une des valeurs est incorrecte, il est alors nécessaire d'ann #### YEP 2.7 ##### Donner des permissions suffisantes aux instructions bash | validé | auto | WORKING | -Certaines instructions nécessitent les droits sudo. Il faut dans ce cas ne pas oublier de préfixer ces instructions par `sudo `. +Certaines instructions nécessitent les droits sudo. Il faut dans ce cas ne pas oublier de préfixer ces instructions par `sudo`. Dans d'autres cas il est nécessaire de donner des droits à l'aide de chmod et de chown. @@ -343,7 +345,7 @@ Une web app devraient pouvoir s'installer sur un chemin `/path`. #### YEP 2.18.5 ##### Gérer la tuile YunoHost pour naviguer facilement entre les applications | validé | manuel | OFFICIAL | -Sauf dans de rare cas il est conseillé d'intégrer la tuile YunoHost qui permet de retourner sur le menu du SSO. Cette intégration se fait dans la configuration nginx. +Sauf dans de rare cas il est conseillé d'intégrer la tuile YunoHost qui permet de retourner sur le menu du SSO. Cette intégration se fait dans la configuration NGINX. Certains utilisateurs ont remplacé ce carré par un script ajoutant un menu en haut de chaque webapp. @@ -358,13 +360,13 @@ Il convient également de vérifier si le port doit être ouvert sur le routeur, #### YEP 3.3 ##### Faciliter le contrôle de l'intégrité des sources | brouillon | manuel | OFFICIAL | -L'application upstream ne doit pas être intégrée en tarball dans le dossier source du package, car cela alourdit le package et le dépôt git et ne permet pas la vérification de l'intégrité de la source. +L'application upstream ne doit pas être intégrée en tarball dans le dossier source du package, car cela alourdit le package et le dépôt Git et ne permet pas la vérification de l'intégrité de la source. La source doit donc être téléchargée depuis le site officiel, puis son intégritée doit être vérifiée avant de l'installer. #### YEP 3.4 ##### Isoler l'app | brouillon | manuel | OFFICIAL | Afin d'éviter des effets de bords en cas de compromission éventuelle de l'application, celle-ci doit être isolée pour ne pas risquer d'impacter les autres applications. -Pour cela, il convient d'isoler l'application dans son dossier d'exécution en restreignant son environnement par un chroot, soit par un mécanisme interne à l'application lorsque c'est possible (par exemple pour un serveur ftp), soit par l'usage de phpfpm. +Pour cela, il convient d'isoler l'application dans son dossier d'exécution en restreignant son environnement par un chroot, soit par un mécanisme interne à l'application lorsque c'est possible (par exemple pour un serveur FTP), soit par l'usage de PHP-FPM. De même, pour restreindre la portée de l'utilisateur exécutant l'application, il est préférable d'utiliser un utilisateur dédiée à l'application. Dont les droits sont restreint à l'usage de l'application uniquement. Toutefois, cela ne doit pas exempter d'une restriction maximale des droits sur les fichiers de l'application. Autant que possible, les fichiers doivent appartenir à root, et l'utilisateur dédié ne doit avoir de droits d'écriture que sur les fichiers le réclamant expressément. @@ -400,7 +402,7 @@ Dans tous les cas, une app ne devrait pas modifier les dépôts sources pour les Cette meta YEP traite de l'intégration d'une app avec l'environnement YunoHost. Une bonne intégration est en général un gage de qualité et de confort pour les utilisateurs. #### YEP 4.2 -##### Lier l'authentification au sso | validé | manuel | OFFICIAL | +##### Lier l'authentification au SSO | validé | manuel | OFFICIAL | Le Single Sign On permet d'éviter d'avoir à créer les mêmes utilisateurs pour chaque app. Ainsi, un utilisateur YunoHost pourra se connecter via le Single Sign On à l'ensemble des apps. Pour se faire, il convient de lier son app au LDAP et/ou d'utiliser des hooks pour dupliquer les identifiants du compte dans la base de données de l'app. diff --git a/packaging_apps_guidelines.md b/pages/04.contribute/04.packaging_apps/15.quality_tests/02.yep/packaging_apps_guidelines.md similarity index 92% rename from packaging_apps_guidelines.md rename to pages/04.contribute/04.packaging_apps/15.quality_tests/02.yep/packaging_apps_guidelines.md index 41fe5afb..a70075b1 100644 --- a/packaging_apps_guidelines.md +++ b/pages/04.contribute/04.packaging_apps/15.quality_tests/02.yep/packaging_apps_guidelines.md @@ -1,15 +1,17 @@ -# Packing Applications : Good Practise Guidelines - -<div class="alert alert-danger"> -<b> -This page is under development. As long as this warning is not removed. Consider this information as potentially false. -The name YEP is not a priori definitive, neither the levels nor the good practices in itself. -</b> -</div> +--- +title: Packing Applications: Good Practise Guidelines +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_guidelines' +--- ### Introduction The purpose of this document is to list the various best practices concerning the creation of YunoHost application packages. +!!! This page is outdated and should be reworked + Each good practice is numbered with a number suffixed by the letters YEP (YunoHost Enhancement Proposals), so that it can be easily referenced in the ([package checker](https://github.com/YunoHost/package_check) and [package linter](https://github.com/YunoHost/package_linter)) tools, but also during the reviews of code. Each YEP is associated with: @@ -69,8 +71,8 @@ Each YEP is associated with: | YEP 3.6 | Update versions containing CVE | draft | manual | OFFICIAL (6) | | | | | | | | ** YEP 4 ** | ** Integrate an app ** | ** Status ** | ** Test ** | ** Level ** | -| 4.1 | Link to ldap | validated | manual | OFFICIAL (4) | -| YEP 4.2 | Link authentication to sso | validated | manual | OFFICIAL (4) | +| 4.1 | Link to LDAP | validated | manual | OFFICIAL (4) | +| YEP 4.2 | Link authentication to SSO | validated | manual | OFFICIAL (4) | | YEP 4.2.1 | Sign Out | validated | manual | OFFICIAL (9) | | YEP 4.3 | Provide YunoHost Backup Script Functional | validated | Home | OFFICIAL (6) | | YEP 4.4 | Provide a YunoHost Restore Functional script | validated | Home | OFFICIAL (6) | @@ -89,7 +91,7 @@ Each YunoHost application has an id registered in the application manifest. This identifier must be unique between each application packet. It is therefore recommended to verify its availability by consulting the list of applications referenced in the known applications repositories (official, community, internetcube). -In addition, the identifier must respect the regular expression `^[a-z1-9]((_|-)?[A-z1-9])+$`. +In addition, the identifier must respect the regular expression `^[a-z0-9]((_|-)?[A-z0-9])+$`. In other words, it must respect the following rules: * be in lowercase * start with a letter or number @@ -99,7 +101,7 @@ In other words, it must respect the following rules: For application names containing spaces, virtually all current packages simply remove them without replacing them with dashes or underscores. -By convention, the YunoHost application repositories are always named their ID followed by the string "\ _ynh". Thus one can distinguish the upstream repository of the application, the deposit of the yunohost package. This notation also makes it possible to find applications not listed by the search engines of platforms offering version managers (GitHub for example). +By convention, the YunoHost application repositories are always named their ID followed by the string "\_ynh". Thus one can distinguish the upstream repository of the application, the deposit of the YunoHost package. This notation also makes it possible to find applications not listed by the search engines of platforms offering version managers (GitHub for example). Example: ID: Example Filing Name: example_ynh @@ -119,13 +121,13 @@ For the `apps.json` list maintained by the project team, registration is on [the ##### Indicate the license associated with the package | draft | AUTO | WORKING | The license of the packet must be specified in a `LICENSE` file at the root of the packet. Be careful not to confuse with the license of the application that will be installed whose acronym is to be entered in the `license` field of the manifest. -The application lists official.json and community.json only accept packages with a free license, as well as the license for the contained application. Some free applications require non-free dependencies (example: mp3, drivers, etc.). In this case, you should add `&dep-non-free` to the acronym and if possible give details in the README.md of the package, in this case the integration will be accepted on a case-by-case basis. +The application list apps.json only accept packages with a free license, as well as the license for the contained application. Some free applications require non-free dependencies (example: MP3, drivers, etc.). In this case, you should add `&dep-non-free` to the acronym and if possible give details in the README.md of the package, in this case the integration will be accepted on a case-by-case basis. -**NB:** Apps not included in offical lists may still be installed: either manually with the URL to the app, or in a more practical way using non-official lists (which can be created and maintained by the community). +**NB:** Apps not included in apps.json lists may still be installed: either manually with the URL to the app, or in a more practical way using non-official lists (which can be created and maintained by the community). In the future, YunoHost will probably display details about the license of the application. To achieve this, the acronym must be the one from this [list of licenses listed in the SPDX](https://spdx.org/licenses/) (if there are 2 acronyms, the one containing the version number). For consistency, the case must be respected. -If the license is not present in the list, in this case it is necessary to indicate `free` or `non-free` depending on whether it is free or not and give the user the opportunity to inquire in the README .md (link, explanations, ...). +If the license is not present in the list, in this case it is necessary to indicate `free` or `non-free` depending on whether it is free or not and give the user the opportunity to inquire in the README.md (link, explanations...). Example: for a GNU Lesser General Public License (LGPL), version 3 the acronym is `LGPL-3.0` if non-free dependencies are used in this case it will be necessary to put LGPL-3.0 & dep-non-free `in the manifesto. @@ -160,7 +162,7 @@ To follow the evolution of YunoHost more generally: #### YEP 1.7 ##### Add the app to the [YunoHost-Apps Organization](https://github.com/YunoHost-Apps) | validated | manual | OFFICIAL | -Adding an app to the [YunoHost-Apps organization](https://github.com/YunoHost-Apps) lets you share apps with other contributors who might be tempted to package the targeted application . +Adding an app to the [YunoHost-Apps organization](https://github.com/YunoHost-Apps) lets you share apps with other contributors who might be tempted to package the targeted application. It is also a way to quickly deploy a security patch if necessary in the event that the maintainer is unavailable. @@ -203,7 +205,7 @@ There is also README.md, which must and can contain: * instructions to use it (for example to connect your smartphone or computer) * the location to report a malfunction / request * the roadmap / TODO -* possibly prerequisites in terms of ram memories, processor etc. (some equipment has less than 512MB of ram) +* possibly prerequisites in terms of RAM memories, processor etc. (some equipment has less than 512 MB of RAM) #### YEP 1.10 ##### Keep a clean version history | draft | manual | OFFICIAL | @@ -225,11 +227,11 @@ The manifest allows to describe an app so that YunoHost can apply the good treat #### YEP 2.2 ##### Using bash for main scripts | validated | Home | WORKING | -Action scripts (install, upgrade, remove, backup and restore) must be in the bash so that the cli / api yunohost can call them correctly. +Action scripts (install, upgrade, remove, backup and restore) must be in the bash so that the CLI/API YunoHost can call them correctly. That being said, there is nothing to prevent other scripts or function libraries from using these scripts. These are not obliged to be in bash. -However, careful attention must be paid to the correct display of logs of information, warning, or errors. So that a user of the cli / api yunohost can understand the operation of the script just executed and if necessary repair its YunoHost instance. +However, careful attention must be paid to the correct display of logs of information, warning, or errors. So that a user of the CLI/API YunoHost can understand the operation of the script just executed and if necessary repair its YunoHost instance. #### YEP 2.3 ##### Save the answers during the installation | validated | manual | WORKING | @@ -238,12 +240,12 @@ During installation, it is necessary to save each answer to the questions in the #### YEP 2.4 ##### Detecting and Managing Errors | draft | manual | WORKING | The install, upgrade, backup, and restore scripts must detect errors to avoid further scripting in case of blocking error or empty variable usage. -The use of trap and set -eu is recommended to detect and treat errors ([Discussion in progress](https://forum.yunohost.org/t/gestion-des-erreurs-set-e-and-or-trap/2249/5)) +The use of trap and `set -eu` is recommended to detect and treat errors ([Discussion in progress](https://forum.yunohost.org/t/gestion-des-erreurs-set-e-and-or-trap/2249/5)) It is also necessary to check the contents of the variables before removing the remove script. For example, an `rm -Rf /var/www/$app` with `$app` empty would have a disastrous result. -At the beginning of the scripts, before any modifications, it is necessary to check the existence of the users mentioned at the installation, as well as the availability of the requested path, the availability of the final file of the application and the size of the passwords if necessary . +At the beginning of the scripts, before any modifications, it is necessary to check the existence of the users mentioned at the installation, as well as the availability of the requested path, the availability of the final file of the application and the size of the passwords if necessary. - Do not forget that in case of installation error the removal script will be launched automatically by the yunohost cli. + Do not forget that in case of installation error the removal script will be launched automatically by the YunoHost CLI. #### YEP 2.5 ##### Copy files correctly | draft | manual | WORKING | @@ -251,7 +253,7 @@ At the beginning of the scripts, before any modifications, it is necessary to ch ##### Cancel action if input values are incorrect | validated | manual | WORKING | Each script should verify that the input values are correct. -Here are some examples : +Here are some examples: * Check that the domain name exists * Check that the user exists * Check that the chosen path is available @@ -304,7 +306,7 @@ The goal is to find a more reliable method than sed to modify the configuration ##### Check availability of dependencies on ARM, x86, and x64 | validated | manual | OFFICIAL | YunoHost installs on ARM, x86 and x64. A package should therefore be tested on these three processor architectures. -Some packages are not available on ARM, in this case it is advisable to study other solutions or to indicate in the README.md that the application does not work on ARM and to block the installation by detection of type d 'architecture. +Some packages are not available on ARM, in this case it is advisable to study other solutions or to indicate in the README.md that the application does not work on ARM and to block the installation by detection of type d'architecture. #### YEP 2.17 ##### Take the original version into account when updating | validated | manual | OFFICIAL | @@ -341,7 +343,7 @@ A web app should be able to install on a path `/path`. #### YEP 2.18.5 ##### Manage the YunoHost tile to easily navigate between applications | validated | manual | OFFICIAL | -Except in rare cases it is advisable to integrate the tile YunoHost which allows to return to the menu of the SSO. This integration is done in the nginx configuration. +Except in rare cases it is advisable to integrate the tile YunoHost which allows to return to the menu of the SSO. This integration is done in the NGINX configuration. Some users have replaced this square with a script adding a menu at the top of each webapp. @@ -356,7 +358,7 @@ It should also be checked whether the port should be open on the router, beyond #### YEP 3.3 ##### Facilitating Source Integrity Control | draft | manual | OFFICIAL | -The upstream application should not be integrated into tarball in the source folder of the package, as this adds to the package and the git repository and does not allow verification of the integrity of the source. +The upstream application should not be integrated into tarball in the source folder of the package, as this adds to the package and the Git repository and does not allow verification of the integrity of the source. The source must be downloaded from the official website, then its integrity must be checked before installing it. #### YEP 3.4 diff --git a/packaging_apps_ci_fr.md b/pages/04.contribute/04.packaging_apps/15.quality_tests/03.ci_packagers/packaging_apps_ci.fr.md similarity index 92% rename from packaging_apps_ci_fr.md rename to pages/04.contribute/04.packaging_apps/15.quality_tests/03.ci_packagers/packaging_apps_ci.fr.md index 65105e3f..bfefe5be 100644 --- a/packaging_apps_ci_fr.md +++ b/pages/04.contribute/04.packaging_apps/15.quality_tests/03.ci_packagers/packaging_apps_ci.fr.md @@ -1,8 +1,17 @@ -# Intégration continue +--- +title: Intégration continue +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_ci' +--- + +! This page is outdated and should be reworked Un serveur d'intégration continue est disponible pour tout packager souhaitant tester une application avec [Package_check](https://github.com/YunoHost/package_check). -<a class="btn btn-lg btn-default" href="https://ci-apps-dev.yunohost.org">ci-apps-dev</a> +[ci-apps-dev](https://ci-apps-dev.yunohost.org?classes=btn,btn-lg,btn-primary) Ce serveur est libre d'accès pour chacun d'entre vous, vous avez juste besoin d'un compte. Pour ce faire, demandez à un membre du groupe Apps sur notre [chatroom Applications](/chat_rooms) diff --git a/packaging_apps_ci.md b/pages/04.contribute/04.packaging_apps/15.quality_tests/03.ci_packagers/packaging_apps_ci.md similarity index 92% rename from packaging_apps_ci.md rename to pages/04.contribute/04.packaging_apps/15.quality_tests/03.ci_packagers/packaging_apps_ci.md index 543da54d..f5294e19 100644 --- a/packaging_apps_ci.md +++ b/pages/04.contribute/04.packaging_apps/15.quality_tests/03.ci_packagers/packaging_apps_ci.md @@ -1,8 +1,17 @@ -# Continuous integration +--- +title: Continuous integration +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_ci' +--- + +! This page is outdated and should be reworked A continuous integration server is available for any packager willing to test an app with [Package_check](https://github.com/YunoHost/package_check). -<a class="btn btn-lg btn-default" href="https://ci-apps-dev.yunohost.org">ci-apps-dev</a> +[ci-apps-dev](https://ci-apps-dev.yunohost.org?classes=btn,btn-lg,btn-primary) This server is free to use for any of you, you just need an account. To do so, ask to a member of the Apps group on our [Applications chatroom](/chat_rooms) diff --git a/shell_variables_scope_fr.md b/pages/04.contribute/04.packaging_apps/20.bash_tips/07.shell_variables_scope/shell_variables_scope.fr.md similarity index 97% rename from shell_variables_scope_fr.md rename to pages/04.contribute/04.packaging_apps/20.bash_tips/07.shell_variables_scope/shell_variables_scope.fr.md index 179f3252..7226dd7b 100644 --- a/shell_variables_scope_fr.md +++ b/pages/04.contribute/04.packaging_apps/20.bash_tips/07.shell_variables_scope/shell_variables_scope.fr.md @@ -1,4 +1,11 @@ -### Portée générales des variables +--- +title: Portée générales des variables +template: docs +taxonomy: + category: docs +routes: + default: '/shell_variables_scope' +--- Les variables existent pour le shell courant et ses enfants uniquement. Un script exécuté depuis le script n'est pas un enfant, c'est un autre shell qui n'héritera que des variables d'environnement du script appelant, pas des variables globales ou locales. diff --git a/shell_variables_scope.md b/pages/04.contribute/04.packaging_apps/20.bash_tips/07.shell_variables_scope/shell_variables_scope.md similarity index 97% rename from shell_variables_scope.md rename to pages/04.contribute/04.packaging_apps/20.bash_tips/07.shell_variables_scope/shell_variables_scope.md index aba9d163..c32b5515 100644 --- a/shell_variables_scope.md +++ b/pages/04.contribute/04.packaging_apps/20.bash_tips/07.shell_variables_scope/shell_variables_scope.md @@ -1,4 +1,11 @@ -### General scope of variables +--- +title: General scope of variables +template: docs +taxonomy: + category: docs +routes: + default: '/shell_variables_scope' +--- Variables exists for the current shell and its children only. Another script executed from the script is not a child, it's another shell which herited only the environment variables from its caller script, not its globals or locals variables. diff --git a/packaging_apps_trap_fr.md b/pages/04.contribute/04.packaging_apps/20.bash_tips/13.trap/packaging_apps_trap.fr.md similarity index 96% rename from packaging_apps_trap_fr.md rename to pages/04.contribute/04.packaging_apps/20.bash_tips/13.trap/packaging_apps_trap.fr.md index 0ad71544..03d1b13b 100644 --- a/packaging_apps_trap_fr.md +++ b/pages/04.contribute/04.packaging_apps/20.bash_tips/13.trap/packaging_apps_trap.fr.md @@ -1,4 +1,11 @@ -# Usage de trap +--- +title: Trap +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_trap' +--- Trap est une commande interne du shell permettant de capturer les signaux de sorties des commandes exécutées dans le shell courant et ses sous-shell. @@ -61,7 +68,7 @@ EXIT_PROPERLY () { } ``` -La fonction EXIT_PROPERLY doit indiquer à l'utilisateur l'échec de l'installation et nettoyer les résidus qui ne seront pas pris en charge par le script remove. Ce dernier sera automatiquement appelé à la suite de l'exit 1 avec Yunohost 2.4 +La fonction EXIT_PROPERLY doit indiquer à l'utilisateur l'échec de l'installation et nettoyer les résidus qui ne seront pas pris en charge par le script remove. Ce dernier sera automatiquement appelé à la suite de l'exit 1 avec YunoHost 2.4 Après cette fonction, on peut mettre en place la capture des signaux par trap. diff --git a/pages/04.contribute/04.packaging_apps/20.bash_tips/13.trap/packaging_apps_trap.md b/pages/04.contribute/04.packaging_apps/20.bash_tips/13.trap/packaging_apps_trap.md new file mode 100644 index 00000000..29783395 --- /dev/null +++ b/pages/04.contribute/04.packaging_apps/20.bash_tips/13.trap/packaging_apps_trap.md @@ -0,0 +1,120 @@ +--- +title: Trap +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_trap' +--- + +Trap is an internal shell command used to capture the output signals of commands executed in the current shell and its subshells. + +Any command executed in the shell returns an exit signal at the end of its execution. Either 0 to indicate the end of the execution of the command, or a non-zero value indicating an interruption thereof. + +In the case of installation scripts, trap will allow us to detect a command interrupted in the middle of its execution due to an error. +Detection of this error will allow the installation to be terminated and returned to the remove script for cleaning up residues. + +Trap is used as follows: + +```bash +trap 'commande' liste_de_signaux +``` + +To simplify, we will use the pseudo signal `ERR` to gather all the error signals. + +We could simply add this line at the beginning of the script: + +```bash +trap "echo Erreur d'installation" ERR +``` + +After this line, any command causing an error will trigger the display of the message indicated by trap. +All of the current shell and the subshell will be supported by trap. + +To stop capturing signals with trap, you can simply deactivate trap. + +```bash +trap ERR +``` + +Or completely ignore the affected output signals. + +```bash +trap "" ERR +``` + +In the latter case, the interrupt signal will have no effect on the shell. This can be useful for a command whose error output should not impact the progress of the installation script. + +### Stop the installation script and clean up before exiting. +In the event of an error in the installation script, trap must allow to stop the installation, then clean up the partially installed residual files before leaving the script. +For this, we will provide a function dedicated to the installation failure. + +```bash +# Delete files and db if exit with an error +EXIT_PROPERLY () { + trap ERR # Disable trap + echo -e "\e[91m \e[1m" # Shell in light red bold + echo -e "!!\n $app install's script has encountered an error. Installation was cancelled.\n!!" + + echo -e "\e[22m" # Remove bold + + # Clean hosts + sudo sed -i '/#leed/d' /etc/hosts + + if [ $ynh_version = "2.2" ]; then + /bin/bash ./remove # Call the script remove. In 2.2, this behavior is not automatic. + fi + exit 1 +} +``` + +The `EXIT_PROPERLY` function must indicate to the user that the installation has failed and clean up any residue that will not be taken care of by the remove script. The latter will be automatically called after exit `1` with YunoHost 2.4 + +After this function, we can set up signal capture by trap. + +```bash +trap EXIT_PROPERLY ERR +``` + +If a command fails during installation, the `EXIT_PROPERLY` function will be called, ending the installation. + +To simplify the capture of signals and ignore them for specific commands. It is possible to place trap calls in functions. + +```bash +TRAP_ON () { # Activate signal capture + trap EXIT_PROPERLY ERR # Capturing exit signals on error +} +TRAP_OFF () { # Ignoring signal capture until TRAP_ON + trap '' ERR # Ignoring exit signals +} +``` + +> The `TRAP_OFF` function does not work. For some reason. Using `trap '' ERR` directly works fine however. + +To manage possible installation errors, we can therefore simply add this code after retrieving the arguments: + +```bash +# Delete files and db if exit with an error +EXIT_PROPERLY () { + trap ERR # Disable trap + echo -e "\e[91m \e[1m" # Shell in light red bold + echo -e "!!\n $app install's script has encountered an error. Installation was cancelled.\n!!" + + echo -e "\e[22m" # Remove bold + + # Clean hosts + sudo sed -i '/#leed/d' /etc/hosts + + if [ $ynh_version = "2.2" ]; then + /bin/bash ./remove # Call the script remove. In 2.2, this behavior is not automatic. + fi + exit 1 +} +TRAP_ON () { # Activate signal capture + trap EXIT_PROPERLY ERR # Capturing exit signals on error +} +TRAP_OFF () { # Ignoring signal capture until TRAP_ON + trap '' ERR # Ignoring exit signals +} +TRAP_ON +``` diff --git a/packaging_apps_start_fr.md b/pages/04.contribute/04.packaging_apps/packaging_apps_start.fr.md similarity index 93% rename from packaging_apps_start_fr.md rename to pages/04.contribute/04.packaging_apps/packaging_apps_start.fr.md index 0d8c3ce8..e492ff23 100644 --- a/packaging_apps_start_fr.md +++ b/pages/04.contribute/04.packaging_apps/packaging_apps_start.fr.md @@ -1,4 +1,11 @@ -# Introduction au packaging +--- +title: Introduction au packaging +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_start' +--- Petite introduction au packaging d'application, pour comprendre de quoi nous parlons et comment ça marche. Cette documentation s'adresse avant tout aux packageurs débutants qui ne sont pas à l'aise avec les concepts de shell, parsing et administration système de manière générale. @@ -19,7 +26,7 @@ C'est là que le package d'application entre en jeu, c'est un ensemble de script Du point de vue de l'utilisateur, c'est très simple, on choisit une application, on répond à quelques questions, ça mouline et c'est prêt. Mais il se passe bien plus de choses derrière. -Tout d'abord, lorsque l'application est sélectionnée, YunoHost va aller chercher son package sur Github, par exemple l'application [Custom Webapp](https://github.com/YunoHost-Apps/my_webapp_ynh). +Tout d'abord, lorsque l'application est sélectionnée, YunoHost va aller chercher son package sur GitHub, par exemple l'application [Custom Webapp](https://github.com/YunoHost-Apps/my_webapp_ynh). Ensuite, YunoHost lit le fichier manifest.json pour connaître les questions à poser à l'utilisateur. Mais ces questions anodines sont très importantes, on retrouvera souvent le domaine sur lequel installer l'application, l'adresse à laquelle elle sera accessible, l'utilisateur qui en sera l'administrateur et la langue par défaut de l'application. @@ -43,11 +50,11 @@ Les scripts d'un package ne sont donc qu'une succession de commandes bash, comme Pour savoir quoi écrire dans un script bash, je vous conseille de commencer par la lecture d'un [tuto simple](https://debian-facile.org/doc:programmation:shells:debuter-avec-les-scripts-shell-bash). Et si vous avez vraiment envie de lire, il y a aussi un [tuto plus complet](http://aral.iut-rodez.fr/fr/sanchis/enseignement/bash/index.html) -### Ok, je crois que j'ai compris ! Par où on commence? +### Ok, je crois que j'ai compris ! Par où on commence ? Avant d'envisager de faire un package d'application, il faut réussir à installer correctement la dites application. Car le script ne fera que ce que vous lui direz de faire. -Ensuite, il faut aller lire (et oui encore) la documentation sur le packaging, mais la vrai cette fois, [celle qui emploie des mots bizarres](/packaging_apps). +Ensuite, il faut aller lire (et oui encore) la documentation sur le packaging, mais la vraie cette fois, [celle qui emploie des mots bizarres](/packaging_apps). Mais maintenant vous devriez les comprendre tout ces mots étranges. Mais heureusement, vous n'êtes pas seul pour affronter cette épreuve titanesque, il y a d'autres packageurs que vous pouvez venir rencontrer sur le [forum](https://forum.yunohost.org/c/apps-packaging) et sur le [salon de discussion](xmpp:apps@conference.yunohost.org?join). diff --git a/packaging_apps_start.md b/pages/04.contribute/04.packaging_apps/packaging_apps_start.md similarity index 85% rename from packaging_apps_start.md rename to pages/04.contribute/04.packaging_apps/packaging_apps_start.md index 7f4e99de..cbdad804 100644 --- a/packaging_apps_start.md +++ b/pages/04.contribute/04.packaging_apps/packaging_apps_start.md @@ -1,14 +1,21 @@ -# Introduction to packaging +--- +title: Introduction to packaging +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_start' +--- This documentation is here is to provide all the basic concepts and vocabulary needed to understand app packaging. eg: shell, parsing, system administration... -We will detail what is a Yunohost application package, how it works, how to make your own package and how to find help if you need it. +We will detail what is a YunoHost application package, how it works, how to make your own package and how to find help if you need it. -## What is a Yunohost application package +## What is a YunoHost application package Before we continue, we need to define what is exactly an application package. -To be able to do that, we need to remember that Yunohost at its core is a server operating system whose mission is to simplify selfhosting of internet services. To accomplish that, Yunohost provides, among other things, an administration panel allowing application installation in a few clicks. +To be able to do that, we need to remember that YunoHost at its core is a server operating system whose mission is to simplify selfhosting of internet services. To accomplish that, YunoHost provides, among other things, an administration panel allowing application installation in a few clicks. If you have ever installed a web application manually, you already know that the process is in reality far more complex, usually involving a lot of steps and discipline. @@ -24,16 +31,16 @@ From the final user perspective, it is as simple as it can be: 4. Application is ready to use There is more to see backstage: -First, when the application is selected, Yunohost will retrieve the corresponding package from github. eg: [Custom Webapp](https://github.com/YunoHost-Apps/my_webapp_ynh). -Then, Yunohost will read the manifest.json file to know what questions to ask the user through the form. +First, when the application is selected, YunoHost will retrieve the corresponding package from github. eg: [Custom Webapp](https://github.com/YunoHost-Apps/my_webapp_ynh). +Then, YunoHost will read the manifest.json file to know what questions to ask the user through the form. These seamingly trivial questions are very important. Usually you would need to ask for the domain on which to install, the path to access, the user that will be designated administrator and the default language for the application. -These are critical to configure appropriately the web application during the installation process. To do so, Yunohost will retrieve the answers given by the user and send them to the installation script located in the package "*scripts*" folder. +These are critical to configure appropriately the web application during the installation process. To do so, YunoHost will retrieve the answers given by the user and send them to the installation script located in the package "*scripts*" folder. The install script will handle the user answers to complete the process as you would have done manually. -If the user wants to delete the application, Yunohost will use the remove script from the "*scripts*" folder. It will handle the cleaning process for the user and delete all folders and configuration files that was previsouly installed by the application. +If the user wants to delete the application, YunoHost will use the remove script from the "*scripts*" folder. It will handle the cleaning process for the user and delete all folders and configuration files that was previsouly installed by the application. ### What is a script? diff --git a/pages/04.contribute/05.dev/dev.fr.md b/pages/04.contribute/05.dev/dev.fr.md new file mode 100644 index 00000000..72aee113 --- /dev/null +++ b/pages/04.contribute/05.dev/dev.fr.md @@ -0,0 +1,113 @@ +--- +title: Contribuer au cœur de YunoHost +template: docs +taxonomy: + category: docs +routes: + default: '/dev' +--- + +Vous souhaitez ajouter une nouvelle fonctionnalité au cœur de YunoHost, mais ne savez pas comment procéder ? Ce guide parcourt les étapes du développement et du processus de contribution. + +Si vous cherchez quelque chose à implémenter ou un bug à réparer, le bug tracker est [ici](https://github.com/yunohost/issues/issues) ! + +**Venez dire coucou sur le [salon de dev](/chat_rooms)** ! + +### Mettre en place un environnement de développement + +- **Utilisez [ynh-dev](https://github.com/YunoHost/ynh-dev)** (voir le README) pour mettre en place un environnement de développement - en local sur une machine virtuelle, ou bien sur un VPS. Ceci installera une instance fonctionelle de YunoHost, en utilisant directement les dépôts Git à l'aide de liens symboliques. De cette façon, il vous sera possible de modifier les fichiers, de tester les changements en temps réel, et de commiter et push/pull directement depuis cet environnement. + +- **Implémentez et testez votre fonctionnalité**. Suivant ce sur quoi vous + voulez travailler : + - **Cœur Python/ligne de commande** : allez dans `/ynh-dev/yunohost/` + - **Interface d'administration web** : allez dans `/ynh-dev/yunohost-admin/` + - Vous pouvez aussi travailler sur les autres projets liés sur lesquels s'appuie YunoHost (SSOwat, Moulinette) de façon similaire. + +### Vue d'ensemble des 4 morceaux principaux de YunoHost + +##### Moulinette + +C'est un petit framework "fait maison". [Son rôle principal](https://moulinette.readthedocs.io/en/latest/actionsmap.html) est de permettre de construire une API Web et une API en ligne de commande à partir d'un même code Python et d'un schéma YAML que nous appelons [l'actionmap](https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/actionsmap/yunohost.yml). + +Il prend en charge d'autres mécanismes tels que l'authentification, l'internationalisation et des petites fonctions utilitaires techniques (par ex. lecture/écriture de fichiers JSON). + +Moulinette dispose de sa propre documentation [ici](https://moulinette.readthedocs.io/en/latest/). + +##### YunoHost + +C'est le cœur même de YunoHost. Il contient : +- [le code Python](https://github.com/YunoHost/yunohost/tree/stretch-unstable/src/yunohost) qui gère les utilisateurs, domaines, applications, services et autres +- des [helpers bash](https://github.com/YunoHost/yunohost/tree/stretch-unstable/data/helpers.d) principalement utilisés par les packageurs d'applications dans les scripts de ces applications +- des [hooks](https://github.com/YunoHost/yunohost/tree/stretch-unstable/data/hooks) et [templates](https://github.com/YunoHost/yunohost/tree/stretch-unstable/data/templates) qui sont utilisés pour configurer les différents éléments de l'écosystème tels que NGINX, Postfix... +- des [chaînes internationalisées](https://github.com/YunoHost/yunohost/tree/stretch-unstable/locales) +- des [tests](https://github.com/YunoHost/yunohost/tree/stretch-unstable/src/yunohost/tests) + +##### SSOwat + +C'est le système de connexion unique (single sign-on) de YunoHost. Il contient principalement : +- [du code LUA](https://github.com/YunoHost/ssowat) interfacé directement avec NGINX et qui gère tous les aspects "techniques" de l'authentification et de la gestion des accès aux ressources. +- le [portail web utilisateur](https://github.com/YunoHost/SSOwat/tree/stretch-unstable/portal) qui est l'interface finale visible par les utilisateurs de YunoHost. + +SSOwat est configuré via `/etc/ssowat/conf.json` qui est généré par YunoHost. + +##### YunoHost-admin + +C'est une dépendance *optionnelle* de YunoHost et correspond à une interface pour l'API web créée par YunoHost et Moulinette (service `yunohost-api`). + +Il contient essentiellement : +- [des templates pour les vues](https://github.com/YunoHost/yunohost-admin/tree/stretch-unstable/src/views) +- les [contrôleurs JavaScript](https://github.com/YunoHost/yunohost-admin/tree/stretch-unstable/src/js/yunohost/controllers) correspondants, qui interagissent avec l'API YunoHost +- et ses [chaînes internationalisées](https://github.com/YunoHost/yunohost-admin/tree/stretch-unstable/src/locales) + +### Travailler sur le cœur Python / ligne de commande + +- Allez dans `/ynh-dev/yunohost/`. + +- Exécutez `cd /ynh-dev && ./ynh-dev use-git yunohost`. + +- Le fichier actionsmap (`data/actionsmap/yunohost.yml`) définit les différentes catégories, actions et arguments de la ligne de commande YunoHost. Choisissez comment vous voulez que les utilisateurs utilisent votre fonctionnalité, et ajoutez/éditez les catégories, actions et arguments correspondants. Par exemple, dans `yunohost domain add some.domain.tld`, la catégorie est `domain`, l'action est `add` et `some.domain.tld` est un argument. + +- Moulinette va automatiquement faire le lien entre les commandes de l'actionsmap et les fonctions Python (ainsi que leurs arguments) dans `src/yunohost/`. Par exemple, `yunohost domain add some.domain.tld` déclenchera un appel de `domain_add(domainName)` dans `domain.py`, avec l'argument `domainName` qui vaudra `"some.domain.tld"`. + +##### Helpers / style de code + +- Pour gérer les exceptions, il existe un type `YunohostError()` + +- Pour aider avec l'internationalisation des messages, utilisez `m18n.n('some-message-id')` et mettez le message correspondant dans `locales/en.json`. Vous pouvez aussi utiliser des arguments pour construire les messages, avec `{{some-argument:s}}`. Ne modifiez pas de fichiers de locales autres que `en.json`, la traduction sera faite avec [Weblate](https://translate.yunohost.org/) ! + +- YunoHost essaye de suivre le style de code [PEP8](http://pep8.org/). Des outils existent pour vérifier automatiquement la conformité du code. + +- Mettre un `_` devant les noms des fonctions "privées". + +### Travailler sur l'interface d'administration web + +- Allez dans `/ynh-dev/yunohost-admin/src/`. + +- Exécutez `cd /ynh-dev && ./ynh-dev use-git yunohost-admin`. Ceci lance gulp, de sorte qu'à chaque fois que vous modifiez les sources, il recompilera le code (JS) et vous pourrez voir les changements dans le navigateur web (Ctrl+F5). Pour stopper la commande, faites simplement Ctrl+C. + +- L'interface web utilise une API pour communiquer avec YunoHost. Les commandes/requêtes de l'API sont également définies dans l'actionsmap. Par exemple, accéder à la page `https://domain.tld/yunohost/api/users` correspond à une requête `GET /users` vers l'API YunoHost. Cette requête est mappée sur `user_list()`. Accéder à cette URL devrait afficher le JSON retourné par cette fonction. Les requêtes 'GET' sont typiquement destinées à demander de l'information au serveur, tandis que les requêtes 'POST' sont destinées à demander au serveur de modifier/changer des informations ou de réaliser des actions. + +- `js/yunohost/controllers` contient les parties JavaScript, et définit quelles requêtes faire à l'API pendant le chargement d'une page donnée de l'interface, et comment traiter les données récupérées pour générer la page, en utilisant des templates. + +- `views` contient les templates des pages de l'interface. Dans le template, les données venant du JavaScript peuvent être utilisées avec la syntaxe `{{some-variable}}`, qui sera remplacée pendant la construction de la page. Il est également possible d'avoir des conditions avec la syntaxe d'[handlebars.js](http://handlebarsjs.com) : `{{#if + some-variable}}<p>du HTML conditionnel ici !</p>{{/if}}` + +- Pour l'internationalisation des messages, utilisez `y18n.t('some-string-code')` dans le JavaScript, ou `{{t 'some-string-code'}}` dans le template HTML, et mettez votre message dans `locales/en.json`. Ne modifiez pas de fichiers de locales autres que `en.json`, la traduction sera faite avec [Weblate](https://translate.yunohost.org/) ! + +##### N'oubliez pas + +- À chaque modification de l'actionsmap, il faut redémarrer l'API YunoHost : `service yunohost-api restart` (Il faudra retaper le mot de passe administrateur dans l'interface web) + +- Il faudra peut-être régulièrement forcer le rafraîchissement du cache navigateur pour propager correctement le JavaScript et/ou HTML (à chaque fois que l'on change quelque chose dans `js` ou `views`, donc). + + +### Votre fonctionnalité est prête et vous souhaitez qu'elle soit intégrée dans YunoHost + +- Forkez le dépôt correspondant sur GitHub, et commitez vos changements dans une nouvelle branche. Il est recommandé de nommer la branche avec la convention suivante : + - Pour une nouvelle fonctionnalité ou amélioration : `enh-ISSUENUMBER-description-fonctionnalité` + - Pour une correction de bug : `fix-REDMINETICKET-description-correctif` + - `ISSUENUMBER` est optionnel et correspond au numéro du ticket sur le bug tracker + +- Une fois prêt, ouvrez une Pull Request (PR) sur Github. De préférence, inclure `[fix]` ou `[enh]` au début du titre de la PR. + +- Après relecture, test et validation par les autres contributeurs, votre branche sera mergée dans `unstable` ! diff --git a/dev.md b/pages/04.contribute/05.dev/dev.md similarity index 76% rename from dev.md rename to pages/04.contribute/05.dev/dev.md index 45015d78..8158ac28 100644 --- a/dev.md +++ b/pages/04.contribute/05.dev/dev.md @@ -1,28 +1,35 @@ -## Contributing to the YunoHost core +--- +title: Contributing to the YunoHost core +template: docs +taxonomy: + category: docs +routes: + default: '/dev' +--- You wish to add a new feature in the YunoHost core, but don't know how to proceed? This guide takes you through the various steps of the development and contribution process. If you're looking for stuff to implement or fix, the bug-tracker is -[here](https://github.com/YunoHost/issues/issues) ! +[here](https://github.com/YunoHost/issues/issues)! -**Come say hi to us in the [dev chatroom](/chat_rooms)** ! +**Come say hi to us in the [dev chat room](/chat_rooms)**! ### Setting up a development environment - **Use [ynh-dev](https://github.com/YunoHost/ynh-dev)** (see the README) to setup a development environment - locally in a virtual machine, or on a VPS. - This will setup a working YunoHost instance, using directly the git repositories + This will setup a working YunoHost instance, using directly the Git repositories (with symlinks). That way, you will be able to edit files, test your changes in real time, commit stuff and push/pull directly from your development environment. - **Implement and test your feature**. Depending on what you want to develop, you - will want to : - - **Python/CLI core** : work in `/ynh-dev/yunohost/` - - **Web administration interface** : work in `/ynh-dev/yunohost-admin/` + will want to: + - **Python/CLI core**: work in `/ynh-dev/yunohost/` + - **Web administration interface**: work in `/ynh-dev/yunohost-admin/` - You can also work on the other projects on which YunoHost is built - (SSOwat, moulinette) in similar ways + (SSOwat, Moulinette) in similar ways ### Overview of the 4 main pieces of YunoHost @@ -30,38 +37,38 @@ If you're looking for stuff to implement or fix, the bug-tracker is It is a small "homemade" framework. [Its major role](https://moulinette.readthedocs.io/en/latest/actionsmap.html) is to allow us to build both a web API and a command-line API from the same -Python code thanks to a YAML schema which we call +Python code thanks to a YAML schema which we call [the actionmap](https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/actionsmap/yunohost.yml). It handles other mechanisms like authentication, internationalization and -small technical utilitary functions (e.g. reading/writing json). +small technical utilitary functions (e.g. reading/writing JSON). Moulinette has its own documentation available [here](https://moulinette.readthedocs.io/en/latest/). -#### Yunohost +#### YunoHost This piece is the very core of YunoHost. It contains: -- [the python code](https://github.com/YunoHost/yunohost/tree/stretch-unstable/src/yunohost) that manages users, domains, apps, services and other things +- [the Python code](https://github.com/YunoHost/yunohost/tree/stretch-unstable/src/yunohost) that manages users, domains, apps, services and other things - [bash helpers](https://github.com/YunoHost/yunohost/tree/stretch-unstable/data/helpers.d) mainly used by application packagers to package applications -- [hooks](https://github.com/YunoHost/yunohost/tree/stretch-unstable/data/hooks) and [templates](https://github.com/YunoHost/yunohost/tree/stretch-unstable/data/templates) that are used to configure the various pieces of the ecosystem such as nginx, postfix, ... +- [hooks](https://github.com/YunoHost/yunohost/tree/stretch-unstable/data/hooks) and [templates](https://github.com/YunoHost/yunohost/tree/stretch-unstable/data/templates) that are used to configure the various pieces of the ecosystem such as NGINX, Postfix... - [internationalized strings](https://github.com/YunoHost/yunohost/tree/stretch-unstable/locales) - [tests](https://github.com/YunoHost/yunohost/tree/stretch-unstable/src/yunohost/tests) #### SSOwat This is the single sign-on system of YunoHost. It both contains: -- [Lua scripts](https://github.com/YunoHost/ssowat) that are directly interfaced with nginx and handle all the "technical" aspects of authentication and route accesses +- [Lua scripts](https://github.com/YunoHost/ssowat) that are directly interfaced with NGINX and handle all the "technical" aspects of authentication and route accesses - the web [user portal](https://github.com/YunoHost/SSOwat/tree/stretch-unstable/portal) which is the interface used by YunoHost's end users to log in and browse installed apps SSOwat is configured through `/etc/ssowat/conf.json` which is generated by YunoHost. -#### Yunohost-admin +#### YunoHost-admin It is an *optional* dependency of YunoHost and corresponds to an interface for the web API created by YunoHost and Moulinette (c.f. the `yunohost-api` service). It essentially contains: - [view templates](https://github.com/YunoHost/yunohost-admin/tree/stretch-unstable/src/views) -- corresponding [javascript controllers](https://github.com/YunoHost/yunohost-admin/tree/stretch-unstable/src/js/yunohost/controllers) that interact with the Yunohost API +- corresponding [JavaScript controllers](https://github.com/YunoHost/yunohost-admin/tree/stretch-unstable/src/js/yunohost/controllers) that interact with the YunoHost API - and [internationalized strings](https://github.com/YunoHost/yunohost-admin/tree/stretch-unstable/src/locales) ### Working on the YunoHost Python/CLI core @@ -77,7 +84,7 @@ It essentially contains: category is `domain`, the action is `add`, and `some.domain.tld` is an argument. -- Moulinette will automatically map commands in the actionsmap to python +- Moulinette will automatically map commands in the actionsmap to Python functions (and their arguments) located in `src/yunohost/`. For example, typing `yunohost domain add some.domain.tld` will call the function `domain_add(domainName)` in `domain.py`, with the argument `domainName` equal @@ -107,50 +114,50 @@ It essentially contains: - The web interface uses the API to interact with YunoHost. The API commands/requests are also defined via the actionsmap. For instance, accessing - the page ```https://domain.tld/yunohost/api/users``` corresponds to a `GET + the page `https://domain.tld/yunohost/api/users` corresponds to a `GET /users` requests on the YunoHost API. It is mapped to the function - `user_list()`. Accessing the URL should display the json returned by this + `user_list()`. Accessing the URL should display the JSON returned by this function. 'GET' requests are typically meant to ask information to the server. 'POST' requests are meant to ask the server to edit/change some information, or to execute some actions. -- `js/yunohost/controllers` contains the javascript parts, +- `js/yunohost/controllers` contains the JavaScript parts, and define which requests to make to the API when loading a specific page of the interface, and how to process the data to generate the page, using templates. - `views` contains the various templates for the pages of the interface. In the - template, data coming from the javascript part can be used with the syntax + template, data coming from the JavaScript part can be used with the syntax `{{some-variable}}`, which will be replaced when building/accessing the page. It is also possible to have conditions using the - [handlebars.js](http://handlebarsjs.com) syntax : ```{{#if - some-variable}}<p>Some conditional HTML code here !</p>{{/if}}``` + [handlebars.js](http://handlebarsjs.com) syntax: `{{#if + some-variable}}<p>Some conditional HTML code here !</p>{{/if}}` - For internationalized strings, use `y18n.t('some-string-code')` in the - javascript, or `{{t 'some-string-code'}}` in the HTML template, and put your + JavaScript, or `{{t 'some-string-code'}}` in the HTML template, and put your string in `locales/en.json`. Don't edit other locales files, - this will be done using [weblate](https://translate.yunohost.org/) ! + this will be done using [Weblate](https://translate.yunohost.org/)! ##### Don't forget -- Each time you edit the actionsmap or the python code, you should restart the yunohost-api : - ```systemctl restart yunohost-api``` - (You'll need to retype your admin password in the web interface) +- Each time you edit the actionsmap or the Python code, you should restart the YunoHost api: + `systemctl restart yunohost-api` + (You'll need to retype your admin and password in the web interface) - You might need to force-clear the cache of your browser sometimes to refresh - the javascript and/or html (so each time you edit something in `js` or `views`). + the JavaScript and/or HTML (so each time you edit something in `js` or `views`). ### Your feature is ready and you want it to be integrated in YunoHost -- Fork the relevant repo on Github, and commit stuff to a new branch. We recommend - to name the branch with the following convention : - - For an enhancement or new feature : `enh-ISSUENUMBER-name-of-feature` +- Fork the relevant repo on GitHub, and commit stuff to a new branch. We recommend + to name the branch with the following convention: + - For an enhancement or new feature: `enh-ISSUENUMBER-name-of-feature` - For a bugfix `fix-ISSUENUMBER-description-of-fix` - `ISSUENUMBER` is optional and is the id of a corresponding ticket on the bug tracker. -- Once you're ready, open a Pull Request (PR) on Github. Please include `[fix]` or +- Once you're ready, open a Pull Request (PR) on GitHub. Please include `[fix]` or `[enh]` at the beginning of the title of your PR. - After reviewing, testing and validation by other contributors, your branch -should be merged in `unstable` ! +should be merged in `unstable`! diff --git a/pages/04.contribute/contributordoc.de.md b/pages/04.contribute/contributordoc.de.md new file mode 100644 index 00000000..d26d9ee1 --- /dev/null +++ b/pages/04.contribute/contributordoc.de.md @@ -0,0 +1,126 @@ +--- +title: Beteilige dich! +template: docs +taxonomy: + category: docs +routes: + default: '/contributordoc' + aliases: + - '/contribute' +--- + +<p class="lead"> +YunoHost hängt ausschließlich von der Beteiligung von Leuten wie dir ab. +</p> + +<hr style="margin-bottom: 30px;"> + +[columns] +[center] +[size=30] +[fa=heart /] Weitererzählen +[/size] +[/center] + +[center] +Sprich mit Freunden, Verwandten und bei der Arbeit über Softwarefreiheit, [Selbsthosting](/selfhosting) und YunoHost. Wir verlassen uns auf Evangelisten der Datenfreiheit wie dich. <3 +[/center] +[/columns] + +<hr style="margin-bottom: 30px;"> + +[columns] +[center] +[size=30] +[fa=user /] Benutzern helfen +[/size] +[/center] + +[center] +Unsere Unterstützung basiert auf Mitwirkenden wie dir. Besuche einfach [den Support-Chatroom](/help) und hilf neuen Benutzern beim Einstieg oder suche dir eine Frage im <a href="https://forum.yunohost.org/" target="_blank">Forum, bei der du helfen kannst.</a>. +[/center] +[/columns] + +<hr style="margin-bottom: 30px;"> + +[columns] +[center] +[size=30] +[fa=edit /] Schreiben +[/size] +[/center] + +[center] +Verbessere die Dokumentation, indem du [neue Seiten schreibst](/write_documentation) oder vorhandene in deine Sprache übersetzt. +[/center] +[/columns] + +<hr style="margin-bottom: 30px;"> + +[columns] +[center] +[size=30] +[fa=globe /] Lokalisation +[/size] +[/center] + +[center] +Mach mit, indem du YunoHost-Schnittstellen in deiner Sprache verfügbar machst. +<a href="https://translate.yunohost.org/" target="_blank">Leg los!</a>! +[/center] +[/columns] + +<hr style="margin-bottom: 30px;"> + +[columns] +[center] +[size=30] +[fa=flask /] Testen +[/size] +[/center] + +[center] + +Wir brauchen Leute, die YunoHost gründlich testen. Wenn du einen Fehler findest, versuche ihn zu identifizieren und melde ihn in unserem <a href="https://github.com/YunoHost/issues/issues" target="_blank">bug tracker</a>. +[/center] +[/columns] + +<hr style="margin-bottom: 30px;"> + +[columns] +[center] +[size=30] +[fa=gift /] Pakete erstellen +[/size] +[/center] + +[center] +Erweitere den Funktionsumfang von YunoHost, indem du neue [Dienste und Webanwendungen in neue Pakete packst](/packaging_apps). +Schaue dir an, [was schon getan wurde](/apps)! +[/center] +[/columns] + +<hr style="margin-bottom: 30px;"> + +[columns] +[center] +[size=30] +[fa=cog /] Programmieren +[/size] +[/center] + +[center] + +Du kannst dich, unabhängig von deinen Fähigkeiten, an der Entwicklung des YunoHost beteiligen. +Sysadmins, Webentwickler, Designer und Pythonisten <a href="https://github.com/YunoHost" target="_blank">sind herzlich willkommen</a>! +<br> +Erfahre im [Entwickler-Chatroom](xmpp:dev@conference.yunohost.org?join), wie du zum, Projekt [beitragen](/dev) kannst. +[/center] +[/columns] + + +--- + +[center] +### Bitte komm auf jeden Fall mit uns in den [Entwickler-Chatroom](/chat_rooms) :-) +[/center] diff --git a/pages/04.contribute/contributordoc.fr.md b/pages/04.contribute/contributordoc.fr.md new file mode 100644 index 00000000..c34cb505 --- /dev/null +++ b/pages/04.contribute/contributordoc.fr.md @@ -0,0 +1,120 @@ +--- +title: Contribuer +template: docs +taxonomy: + category: docs +routes: + default: '/contributordoc' + aliases: + - '/contribute' +--- + + +<p class="lead"> +YunoHost dépend entièrement de la participation de gens comme vous. +</p> + + +<hr style="margin-bottom: 30px;"> + +[columns] +[center] +[size=30] +[fa=heart /] Passez le mot +[/size] +[/center] + +[center] +Parlez de logiciel libre, d’[auto-hébergement](/selfhosting), de YunoHost à vos proches et à votre travail. Nous comptons sur des évangélistes du Datalove comme vous <3 +[/center] +[/columns] + +<hr style="margin-bottom: 30px;"> + +[columns] +[center] +[size=30] +[fa=user /] Aidez les utilisateurices +[/size] +[/center] + +[center] +Notre support est communautaire et s’appuie sur des contributeurices comme vous. Venez simplement sur le [salon d'aide](/help), ou tentez de répondre aux questions du <a href="https://forum.yunohost.org/" target="_blank">Forum</a>. +[/center] +[/columns] + +<hr style="margin-bottom: 30px;"> + +[columns] +[center] +[size=30] +[fa=edit /] Écrivez +[/size] +[/center] + +[center] +Améliorez cette documentation en [proposant de nouvelles pages](/write_documentation) ou en traduisant les existantes dans votre langue. +[/center] +[/columns] + +<hr style="margin-bottom: 30px;"> + +[columns] +[center] +[size=30] +[fa=globe /] Traduisez +[/size] +[/center] + +[center] +Participez en rendant les interfaces de YunoHost disponibles dans votre langue. <a href="https://translate.yunohost.org/" target="_blank">Lancez-vous</a> ! +[/center] +[/columns] + +<hr style="margin-bottom: 30px;"> + +[columns] +[center] +[size=30] +[fa=flask /] Testez +[/size] +[/center] + +[center] +Nous avons besoin de tester YunoHost profondément. Si vous trouvez un bug, essayez de l’identifier, puis reportez-le sur notre <a href="https://github.com/YunoHost/issues/issues/new" target="_blank">bug tracker</a>. +[/center] +[/columns] + +<hr style="margin-bottom: 30px;"> + +[columns] +[center] +[size=30] +[fa=gift /] Packagez +[/size] +[/center] + +[center] +Étendez les capacités de YunoHost en [packageant de nouveaux services et applications web](/packaging_apps). Jetez un œil à [ce qui a déjà été fait](/apps) ! +[/center] +[/columns] + +<hr style="margin-bottom: 30px;"> + +[columns] +[center] +[size=30] +[fa=cog /] Codez +[/size] +[/center] + +[center] +Vous pouvez vous impliquer dans le développement de YunoHost peu importe votre niveau. Administrateurs système, développeurs web, designers et pythonistes <a href="https://github.com/YunoHost" target="_blank">sont les bienvenus</a>. Découvrez [comment contribuer](/dev), et rejoignez-nous sur le [salon de discussion](xmpp:dev@conference.yunohost.org?join) ! +[/center] +[/columns] + +--- + +[center] +### Dans tous les cas, venez discuter avec nous sur [le salon de développement](/chat_rooms) :-) +[/center] diff --git a/pages/04.contribute/contributordoc.md b/pages/04.contribute/contributordoc.md new file mode 100644 index 00000000..00a70704 --- /dev/null +++ b/pages/04.contribute/contributordoc.md @@ -0,0 +1,123 @@ +--- +title: Get involved +template: docs +taxonomy: + category: docs +routes: + default: '/contributordoc' + aliases: + - '/contribute' +--- + +<p class="lead"> +YunoHost depends exclusively on the participation of people like you. +</p> + +<hr style="margin-bottom: 30px;"> + +[columns] +[center] +[size=30] +[fa=heart /] Spread the word +[/size] +[/center] + +[center] +Talk about software freedom, [self-hosting](/selfhosting) and YunoHost to your relatives and at your work. We rely on Datalove evangelists like you <3 +[/center] +[/columns] + +<hr style="margin-bottom: 30px;"> + +[columns] +[center] +[size=30] +[fa=user /] Helping users +[/size] +[/center] + +[center] +Our support relies on contributors like you. Just come to [the support chatroom](/help) and help new users getting started, or pick a question on the <a href="https://forum.yunohost.org/" target="_blank">Forum</a>. +[/center] +[/columns] + +<hr style="margin-bottom: 30px;"> + +[columns] +[center] +[size=30] +[fa=edit /] Write +[/size] +[/center] + +[center] +Improve this documentation by [writing new pages](/write_documentation) or translating existing ones to your language. +[/center] +[/columns] + +<hr style="margin-bottom: 30px;"> + +[columns] +[center] +[size=30] +[fa=globe /] Localization +[/size] +[/center] + +[center] +Get involved by making YunoHost interfaces available in your language +<a href="https://translate.yunohost.org/" target="_blank">Get started</a>! +[/center] +[/columns] + +<hr style="margin-bottom: 30px;"> + +[columns] +[center] +[size=30] +[fa=flask /] Testing +[/size] +[/center] + +[center] +We need people able to test YunoHost deeply. If you find a bug, try to identify it, and report it on our <a href="https://github.com/YunoHost/issues/issues" target="_blank">bug tracker</a>. +[/center] +[/columns] + +<hr style="margin-bottom: 30px;"> + +[columns] +[center] +[size=30] +[fa=gift /] Packaging +[/size] +[/center] + +[center] +Extend YunoHost capabilities by [packaging new services and web applications](/packaging_apps). +Have a look of [what has been done yet](/apps)! +[/center] +[/columns] + +<hr style="margin-bottom: 30px;"> + +[columns] +[center] +[size=30] +[fa=cog /] Coding +[/size] +[/center] + +[center] +You can involve in the YunoHost's development regardless of your skill. +Sysadmins, web developers, designers and pythonists <a href="https://github.com/YunoHost" target="_blank">are welcome</a>! +Learn [how to contribute](/dev), and join us on the [development chat room](xmpp:dev@conference.yunohost.org?join). +[/center] +[/columns] + + +--- + +[center] +### In any case, please come chat with us on [the dev chatroom](/chat_rooms) :-) +[/center] diff --git a/plug_and_boot.md b/plug_and_boot.md deleted file mode 100644 index 2a085383..00000000 --- a/plug_and_boot.md +++ /dev/null @@ -1,16 +0,0 @@ -# Plug and boot your server up - -* Plug your server in wired Ethernet, or configure the wifi connection as explained [here](https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md). You can also mount the second partition of the SD card and edit the wpa-supplicant.conf file prior to boot the card for the first time - on Windows you can use [Paragon ExtFS](https://www.paragon-software.com/home/extfs-windows/), don't forget to unmount everytime for changes to take effect. - -* Optional : You can **connect a screen** if you want to see how boot is going, and a keyboard if you want to have a **command-line access** to your server. - -* Power up the server, wait for the first reboot to happen, and then wait until you see a big squared `Y` : - -<br> - -<div class="text-center"><img src="/images/boot_screen.png"> - -*Write down the `IP address` field visible on the screen: It is your server's **local IP address**.* - -</div> -Don't worry if you don't have a screen ! You can still find you IP address in the next step. diff --git a/plug_and_boot_es.md b/plug_and_boot_es.md deleted file mode 100644 index d73cdd0d..00000000 --- a/plug_and_boot_es.md +++ /dev/null @@ -1,17 +0,0 @@ -# Conectar e iniciar el servidor - -* Conecta tu servidor con un cable Ethernet (RJ-45) **directamente sobre tu router principal**. También puedes configurar la conexión wifi como explicado [aquí (fr)](http://raspbian-france.fr/connecter-wifi-raspberry-pi-3/). El wifi también puede configurarse sin haber iniciado la tarjeta, "montando" la segunda partición de la tarjeta y finalmente editando el archivo wpa-supplicant.conf. En Windows, puedes utilizar [Paragon ExtFS](https://www.paragon-software.com/home/extfs-windows/), no olvides de "unmount" para que los cambios estén integrados. - -* No te olvides de **conectar una pantalla** si quieres observar cómo ocurre el inicio, y un teclado si quieres un acceso con **línea de comandos** a tu servidor. - -* Inicia el servidor, el Raspberry Pi va a reiniciarse si-mismo una primera vez, pues espera hasta que veas un gran `Y` cuadrado : - -<br> - -<div class="text-center"><img src="/images/boot_screen.png"> - -<p markdown="1"> -*Nota el valor `IP` visible en la pantalla : esto es **la dirección IP local** de tu servidor.* -</p> - -</div> diff --git a/plug_and_boot_fr.md b/plug_and_boot_fr.md deleted file mode 100644 index a237c19d..00000000 --- a/plug_and_boot_fr.md +++ /dev/null @@ -1,18 +0,0 @@ -# Brancher et démarrer votre serveur - -* Branchez votre serveur avec un câble Ethernet (RJ-45) **directement sur votre routeur principal**. Vous pouvez aussi configurer la connexion wifi comme expliqué [ici](http://raspbian-france.fr/connecter-wifi-raspberry-pi-3/). La configuration wifi peut aussi se faire sans avoir booté sur la carte, en "montant" la deuxième partition de la carte et enfin éditer le fichier wpa-supplicant.conf. Sur Windows vous pouvez utiliser [Paragon ExtFS](https://www.paragon-software.com/home/extfs-windows/), ne pas oublier de "unmount" pour que les changements soient pris en compte. - -* Facultatif : vous pouvez **brancher un écran** si vous voulez observer comment se déroule le démarrage, et un clavier si vous souhaitez un accès en **ligne de commande** à votre serveur. - -* Démarrez le serveur, le Raspberry Pi va redémarrer tout seul une première fois, puis attendez jusqu’à voir un gros `Y` carré : - -<br> - -<div class="text-center"><img src="/images/boot_screen.png"> - - -*Notez la valeur `IP` affichée à l’écran : c’est **l’adresse IP locale** de votre serveur.* - - -</div> -<br>Si vous n'avez pas d'écran pour votre Raspberry, ce n'est pas grave ! Vous pourrez trouver son adresse IP autrement à l'étape suivante. diff --git a/port_forwarding.md b/port_forwarding.md deleted file mode 100644 index c24f5542..00000000 --- a/port_forwarding.md +++ /dev/null @@ -1,6 +0,0 @@ -# Port forwarding - -The sketch below tries to briefly summarize the role and necessity of port -forwarding when setting up a server at home. - -<img src="./images/portForwarding_en.png" width="100%"> diff --git a/port_forwarding_es.md b/port_forwarding_es.md deleted file mode 100644 index 3ff93dc3..00000000 --- a/port_forwarding_es.md +++ /dev/null @@ -1,5 +0,0 @@ -# Redirección de puertos - -El esquema aquí abajo intenta explicar brevemente el rol de la redirección de los puertos durante la instalación de un servidor en tu casa. - -<img src="./images/portForwarding_fr.png" width="100%"> diff --git a/port_forwarding_fr.md b/port_forwarding_fr.md deleted file mode 100644 index 1793b27b..00000000 --- a/port_forwarding_fr.md +++ /dev/null @@ -1,6 +0,0 @@ -# Redirection de ports - -Le schéma ci-dessous tente d'expliquer brièvement le rôle de la redirection des -ports lors de la mise en place d'un serveur à la maison. - -<img src="./images/portForwarding_fr.png" width="100%"> diff --git a/postinstall.md b/postinstall.md deleted file mode 100644 index bc4078da..00000000 --- a/postinstall.md +++ /dev/null @@ -1,67 +0,0 @@ -# Post-Installation - -The step called "**post-installation**" is actually the initial configuration of YunoHost. It has to be done just after the installation of the system itself. - -### From the web interface - -You can perform the post-installation with the web interface by entering in your browser : -* **the local IP address of your server** if it is on your local network (e.g. at home !). The address typically looks like `192.168.x.y` (see 'Find your IP' on [the page about SSH](/ssh)) -* **the public IP address of your server** if your server is not on your local network. Typically, if you own a VPS, your VPS provider should have given you the IP of the server. - -During the first visit, you will very likely encounter a security warning related to the certificate used by the server. For now, your server uses a self-signed certificate. You will later be able to add a certificate automatically recognized by web browsers as described in the [certificate documentation](/certificate). For now, you should add a security exception to accept the current certificate. - -You should then land on this page : - -<img style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);" src="/images/postinstall_web.png"> - -<em><p class="text-muted">Preview of the Web post-installation</p></em> - -### From the command line - -You can also perform the postinstallation with the command `yunohost tools postinstall` directly on the server, or [via SSH](/ssh). - -<img style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);" src="/images/postinstall_cli.png"> - -<em><p class="text-muted">Preview of the command-line post-installation</p></em> - -<br> - -## Informations asked - -### Main domain - -This is the first domain name linked to your YunoHost server, but also the one which will be used by your server's users to access the **authentication portal**. It will thus be **visible by everyone**, choose it wisely. - -* If you do not have a domain name, or if you want to use the YunoHost's DynDNS service, choose a sub-domain of **.nohost.me**, **.noho.st** or **.ynh.fr** (e.g. `homersimpson.nohost.me`). Provided that it's not already taken, the domain will be configured automatically and you won't need any further configuration step. - -* If you do know what **DNS** is, you probably want to configure your own domain name here. In this case, please refer to the [DNS page](/dns) page for more informations. - -* If you don't own a domain name and don't want a **.nohost.me**, **.noho.st** or **.ynh.fr**, you can use a local domain. The idea is to configure your router to redirect a local domain name to your server. For example you could create the yunohost.local domain redirecting to your server in your router, and now every device on the network will be redirected to your server when accessing yunohost.local. More information on how to setup a local domain can be found [here](dns_local_network). - -### Administration password - -This password will be used to access to your server's [administration interface](/admin). You would also use it to connect via **SSH** or **SFTP**. In general terms, this is your **system's key**, [choose it carefully](http://www.wikihow.com/Choose-a-Secure-Password). - -<br> - ---- - -## Congratz! - -If you got so far and saw 'YunoHost has been successfully installed' (web -postinstall) or 'YunoHost has been correctly configured', then congratulations! - -### What now ? - -- If you're self-hosting at home and without a VPN, you need to [make sure to - correctly forward ports on your router/Internet box](isp_box_config) ; -- If you're using your own domain name (i.e. not a .nohost.me / .noho.st), you - need to [configure it according to the recommended DNS - configuration](dns_config) ; -- If you cannot configure your domain name yet (because you didn't register it - yet, or because this is a test domain), see last paragraph - [here](dns_local_network) for a workaround ; -- Don't be too afraid of the [certificate warning](certificate), you'll probably - be able to install a Let's Encrypt certificate :). -- Have a look at [the available apps](apps) ! - diff --git a/postinstall_es.md b/postinstall_es.md deleted file mode 100644 index 7cb92da2..00000000 --- a/postinstall_es.md +++ /dev/null @@ -1,63 +0,0 @@ -# Post-instalación - -La etapa que llamamos « **post-instalación** » de hecho es la etapa de configuración inicial de Yunohost. Se ejecuta después de la **instalación** del sistema mismo. - -### Vía la interfaz web - -Puedes acceder a la post-instalación gráfica entrando en un navegador web : -* la dirección **IP local de tu servidor** si éste está conectado a tu red local (en general `192.168.x.x`, ver ['Encontrar mi IP' en la página sobre SSH](/ssh)) -* la dirección **IP pública de tu servidor** si éste no está conectado a tu red local (por ejemplo, si es un VPS, tu proveedor debería haberte transmitido la dirección IP). - -Durante la primera visita, encontrarás muy probablemente una advertencia de seguridad relacionada al certificado utilizado. De momento, tu servidor utiliza un certificado autofirmado. Después, podrás utilizar un certificado automáticamente reconocido por los navegadores como descrito en la página sobre los [Certificados](/certificate). Mientras tanto, añade una excepción de seguridad para aceptar el certificado vigente. - -Luego, llegas en esta página : - -<img style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);" src="/images/postinstall_web.png"> - -*<p class="text-muted">Vistazo de la post-instalación Web</p>* - -### Vía la interfaz de línea de comando - -También puedes acceder a la post-instalación entrando el comando `yunohost tools postinstall` directamente en el servidor o [en SSH](/ssh). - -<img style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);" src="/images/postinstall_cli.png"> - -*<p class="text-muted">Vistazo de la post-instalación con línea de comando</p>* - -## Informaciones solicitadas - -### Dominio principal - -Es el nombre de dominio que permitirá el acceso a tu servidor así como al portal de autenticación de los usuarios. Entonces estará **visible por todo el mundo** : elígelo en consecuencia. - -* YunoHost te propone un DNS dinámico, proveando nombres de dominio del tipo *midominio.nohost.me*, *midominio.noho.st* o *midominio.ynh.fr*. Si no posees un nombre de dominio y/o que quieres aprovechar de este servicio, elige un dominio terminando con `.nohost.me`, `.noho.st` o `.ynh.fr`. Si no está utlizado ya, el dominio automáticamente estará vinculado a tu servidor Yunohost, y no tendrás más etapas de configuración. - -* Si, en cambio, dominas la noción de **DNS**, puedes utilizar tu propio nombre de dominio. En este caso, refiérete a la página [yunohost.org/dns](/dns) por más información. - -* Si no tienes nombre de dominio y que no quieres uno que acabe con *.nohost.me*, *.noho.st* ou *.ynh.fr*, puedes utilizar un dominio local. Más información sobre cómo [acceder a tu servidor desde la red local](/dns_local_network). - - -### Contraseña de administración - -Es la contraseña que permitirá acceder a la [interfaz de administración](/admin) de tu servidor. También podrás utilizarla para conectarte remotamente vía **SSH**, o vía **SFTP** para transferir archivos. - -De manera general, ésta es la **llave de entrada en tu sistema**, pues piensa en **[elegirla atentamente](https://es.wikihow.com/escoger-una-contrase%C3%B1a-segura)**. - -<br> - ---- - -## Enhorabuena ! - -Si llegas aquí después de haber visto “Yunohost fue instalado con éxito" desde tu navegador ou tu interfaz de línea de comando, pues felicitaciones ! - - -### ¿ Y ahora ? - -- Si te auto-alojas en casa y sin VPN, tienes que asegurarte que [los puertos de tu caja internet estén redirigidos](/isp_box_config) ; -- Si utilizas tu propio nombre de dominio (i.e. que no sea un nohost.me / - noho.st), tienes que [configurar el nombre de dominio según la configuración recomendada](/dns_config) ; -- Si no puedes configurar el nombre de dominio de momento (porque todavía no lo has comprado, ou porque es un dominio test), puedes solucionar temporalmente el problema con las instrucciones del último párrafo [aquí](/dns_local_network) ; -- No te asustes demasiado por [la advertencia a propósito del certificado](/certificate), tendrás la posibilidad de obtener un certificado Let's Encrypt :). -- Echa un vistazo a las [aplicaciones disponibles](/apps) ! - diff --git a/postinstall_fr.md b/postinstall_fr.md deleted file mode 100644 index 7b912a8e..00000000 --- a/postinstall_fr.md +++ /dev/null @@ -1,71 +0,0 @@ - -# Post-Installation - -L’étape appelée « **post-installation** » est en fait l’étape de configuration initiale de YunoHost. Il faut l’exécuter après l’**installation** du système en lui-même. - -### Via l'interface web - -Vous pouvez accéder à la post-installation graphique en entrant dans un navigateur web : -* l’adresse **IP locale de votre serveur** si celui-ci est connecté à votre réseau local (généralement `192.168.x.x`, voir ['Trouver son IP' sur la page sur SSH](/ssh)) -* l’adresse **IP publique de votre serveur** si celui-ci n’est pas connecté à votre réseau local (par exemple dans le cas d'un VPS, votre fournisseur devrait vous avoir transmis l'adresse IP). - -Lors de la première visite, vous rencontrerez très probablement un avertissement de sécurité lié au certificat utilisé. Pour le moment, votre serveur utilise un certificat auto-signé. Vous pourrez plus tard ajouter un certificat automatiquement reconnus par les navigateurs comme décrit dans la page sur les [Certificats](/certificate). En attendant, ajoutez une exception de sécurité pour accepter le certificat actuel. - -Vous arrivez ensuite sur cette page : - -<img style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);" src="/images/postinstall_web.png"> - -*<p class="text-muted">Aperçu de la post-installation Web</p>* - -### Via la ligne de commande - -Vous pouvez aussi y accéder en entrant la commande `yunohost tools postinstall` directement sur le serveur ou [en SSH](/ssh). - -<img style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);" src="/images/postinstall_cli.png"> - -*<p class="text-muted">Aperçu de la post-installation en ligne de commande</p>* - -## Informations demandées - -### Domaine principal - -C’est le nom de domaine qui permettra l’accès à votre serveur ainsi qu’au portail d’authentification des utilisateurs. Il sera donc **visible par tout le monde**, choisissez-le en conséquence. - -* YunoHost propose un service de DNS dynamique fournissant des noms de domaine de type *mondomaine.nohost.me*, *mondomaine.noho.st* ou *mondomaine.ynh.fr*. Si vous ne possédez pas de nom de domaine et/ou que vous souhaitez profiter de ce service, choisissez un domaine se terminant en `.nohost.me`, `.noho.st` ou `.ynh.fr`. S'il n'est pas déjà utilisé, le domaine sera automatiquement rattaché à votre serveur YunoHost, et vous n’aurez pas d’étape de configuration supplémentaire. - -* Si en revanche vous maîtrisez la notion de **DNS**, vous pouvez utiliser votre propre nom de domaine. Dans ce cas, référez-vous à la page [yunohost.org/dns](/dns) pour plus d’informations. - -* Si vous n'avez pas de nom de domaine et que vous n'en voulez pas en *mondomaine.nohost.me*, *mondomaine.noho.st* ou *mondomaine.ynh.fr*, vous pouvez utilisez un domaine local. Plus d'infos sur comment [accéder à son serveur depuis le réseau local](/dns_local_network). - - -### Mot de passe d’administration - -C’est le mot de passe qui vous permettra d’accéder à l’[interface d’administration](/admin) de votre serveur. Vous pourrez également l’utiliser pour vous connecter à distance via **SSH**, ou en **SFTP** pour transférer des fichiers. - -De manière générale, c’est la **clé d’entrée à votre système**, pensez donc à la **[choisir attentivement](http://www.commentcamarche.net/faq/8275-choisir-un-bon-mot-de-passe)**. - -<br> - ---- - -## Félicitations ! - -Si vous arrivez ici après avoir vu "YunoHost a été installé avec succès" depuis -votre navigateur ou la ligne de commande, alors félicitations ! - -### Et maintenant ? - -- Si vous vous auto-hébergez à la maison et sans VPN, il faut vous assurer - de bien [rediriger les ports de votre box internet](/isp_box_config) ; -- Si vous utilisez votre propre nom de domaine (c.-à-d. pas un nohost.me / - noho.st), il vous faut [configurer le nom de domaine d'après la configuration - recommandée](/dns_config) ; -- Si vous ne pouvez pas configurer le nom de domaine pour le moment (parce qu'il - n'est pas encore acheté, ou parce que c'est un domaine de test), vous pouvez - contourner temporairement le problème avec les instructions du dernier - paragraphe [ici](/dns_local_network) ; -- Ne soyez pas trop effrayé par [l'avertissement à propos du - certificat](/certificate), vous aurez probablement la possibilité - d'installer un certificat Let's Encrypt :). -- Jetez un oeil aux [applications disponibles](/apps) ! - diff --git a/project_budget.md b/project_budget.md deleted file mode 100644 index ae733961..00000000 --- a/project_budget.md +++ /dev/null @@ -1,28 +0,0 @@ -# Project budget - -# Estimated budget for 2019/2020 - -## Expected revenues - -* Donations via Liberapay: current is about 45€/week, so about 2340€/year -* Grant from NLNet: 20K€, to be used for R&D (TODO: publish the project plan once validated with NLnet) - -## Expected expenses - -* Server renting: ~1000€ - * Forum: 14.4€/month: 172.80€/year - * CI: 20€/month (to be confirmed): 240€/year - * Bearnaise server migration to a new machine: 587.2€ -* Domain names: ~150€ - * nohost.me: 11.99€HT/year - * ynh.fr: 6.99€HT/year (to be confirmed with frju?) - * noho.st: ~35€ TTC/year - * YunoHost.org: 13.99€HT/year - * YunoHost.com: 9.99€HT/year - * labriqueinter.net: 12.49€HT/year - * internetcu.be: 17.99€HT/year -* Communication: ~200€ -* Travel (e.g. to go to conferences): ~500€ -* Bank account fees: 7x12€ => ~100€ - -**Total**: about 2000€ diff --git a/project_budget_fr.md b/project_budget_fr.md deleted file mode 100644 index d73a948b..00000000 --- a/project_budget_fr.md +++ /dev/null @@ -1,28 +0,0 @@ -# Budget du projet - -# Budget prévisionnel pour 2019/2020 - -## Revenus attendus - -* Dons via Liberapay: environ 45 € / semaine, soit environ 2340 € / an -* Subvention de NLNet: 20K €, à utiliser pour la R&D (TODO: publier le plan de projet une fois validé avec NLnet) - -## Dépenses prévues - -* Location Server: ~1000€ - * Forum: 14.4€/mois: 172.80€/ans - * CI: 20€/mois (à confirmer): 240€/mois - * Migration du serveur "Bearnaise" sur une nouvelle machine: 587.2€ -* Noms de domaine: ~150€ - * nohost.me: 11.99€HT/ans - * ynh.fr: 6.99€HT/ans (doit être confirmer avec frju?) - * noho.st: ~35€ TTC/ans - * YunoHost.org: 13.99€HT/ans - * YunoHost.com: 9.99€HT/ans - * labriqueinter.net: 12.49€Ht/ans - * internetcu.be: 17.99€HT/ans -* Communication: ~200€ -* Déplacements (ex: aller aux conférences): ~500€ -* Compte banquaire fees: 7x12€ => ~100€ - -**Total**: environ 2000€ diff --git a/project_organization.md b/project_organization.md deleted file mode 120000 index c69cb700..00000000 --- a/project_organization.md +++ /dev/null @@ -1 +0,0 @@ -orga/yunohost_project_organization.md \ No newline at end of file diff --git a/project_organization_fr.md b/project_organization_fr.md deleted file mode 120000 index 87648596..00000000 --- a/project_organization_fr.md +++ /dev/null @@ -1 +0,0 @@ -orga/yunohost_project_organization_fr.md \ No newline at end of file diff --git a/ssh.md b/ssh.md deleted file mode 100644 index 68084a69..00000000 --- a/ssh.md +++ /dev/null @@ -1,98 +0,0 @@ -# SSH - -## What's SSH? - -**SSH** stands for Secure Shell, and refers to a protocol that allows to remotly control a machine using the command line interface (CLI). It is available by default in any terminal on Linux and Mac OS / OSX. On Windows, you may want to use [MobaXterm](https://mobaxterm.mobatek.net/download-home-edition.html) (after launching it, click on Session then SSH). - -## During YunoHost installation - -#### Find your IP - -If you are installing on a VPS, then your VPS provider should have gave you your IP address. - -If you are installing at home (e.g. on a Raspberry Pi or OLinuXino), then you need to find out which IP has been attributed to your board after you plugged it to your internet box / router. Several ways exists to find your server's IP : - -- open a terminal and use `sudo arp-scan --local` to list the IP on your local network ; -- if the arp-scan command displays a confusing number of devices, you can check which ones are open to ssh with `nmap -p 22 192.168.1.0/24` to sort them out (adapt the IP range to your local network) -- use your internet box / router interface to list the machines connected, or check the logs ; -- plug a screen on your server, log in and type `hostname --all-ip-address`. - -#### Connect - -Assuming your IP address is `111.222.333.444`, open a terminal and enter : - -```bash -ssh root@111.222.333.444 -``` - -A password will be asked. If this is a VPS, your VPS provided should have communicated you the password. If you used a pre-installed image (for x86 computer or ARM board), the password should be `yunohost`. - -<div class="alert alert-warning"> -Since YunoHost 3.4, after running the postinstallation, you won't be able to login as `root` anymore. Instead, **you should login using the `admin` user !** In the event that the LDAP server is broken and the `admin` user is unusable, you may still however still be able to login using `root` from the local network. -</div> - -#### Change the password! - -After logging in for the first time, you should change the root password. The server might automatically ask you to do so. If not, use the command `passwd`. It is important to choose a reasonably strong password. Note that the root password will be overriden by the admin password when you perform the postinstallation. - -#### Let's configure ! - -We're now ready to begin the [post-installation](postinstall). - -## After installing YunoHost - -If you installed your server at home and are attempting to connect from outside your local network, make sure port 22 is correctly forwarded to your server. (Reminder : since YunoHost 3.4 you should connect using the `admin` user !) - -If you only know the IP address of your server : - -```bash -ssh admin@111.222.333.444 -``` - -Then, you need to enter your administrator password created at [post-installation step](postinstall). - -If you configured your DNS (or tweaked your `/etc/hosts`), you can simply use your domain name : - -```bash -ssh admin@your.domain.tld -``` - -If you changed the SSH port, you need to add `-p <portnumber>` to the command, e.g. : - -```bash -ssh -p 2244 admin@your.domain.tld -``` - -<div class="alert alert-info"> -If you are connected as `admin` and would like to become `root` for more comfort (e.g. to avoid typing `sudo` in front of every command), you can become `root` using the command `sudo su`. -</div> - -## Which users? - -By default, only the `admin` user can log in to YunoHost ssh server. - -YunoHost's users created via the administration interface are managed by the LDAP directory. By default, they can't connect via SSH for security reasons. If you want some users to have SSH access enabled, use the command: - -```bash -yunohost user ssh allow <username> -``` - -It is also possible to remove ssh access using the following: - -```bash -yunohost user ssh disallow <username> -``` - -Finally, it is possible to add, delete and list ssh keys, to improve ssh access security, using the commands: - -```bash -yunohost user ssh add-key <username> <key> -yunohost user ssh remove-key <username> <key> -yunohost user ssh list-keys <username> -``` - -## Security and SSH - -N.B. : `fail2ban` will ban your IP for 10 mimutes if you perform 5 failed login attempts. If you need to unban the IP, have a look at the page about [fail2ban](/fail2ban) - -A more extensive discussion about security & SSH can be found on the [dedicated page](/security). diff --git a/ssh_fr.md b/ssh_fr.md deleted file mode 100644 index dbc8243f..00000000 --- a/ssh_fr.md +++ /dev/null @@ -1,95 +0,0 @@ -# SSH - -## Qu’est-ce que SSH ? - -**SSH** est un acronyme pour Secure Shell, et désigne un protocole qui permet de contrôler à distance une machine via la ligne de commande (CLI). C'est aussi une commande disponible de base dans les terminaux de Linux et Mac OS / OSX. Sous Windows, il vous faudra utiliser le logiciel [MobaXterm](https://mobaxterm.mobatek.net/download-home-edition.html) (après l'avoir lancé, cliquer sur Session puis SSH). - -## Pendant l’installation de YunoHost - -#### Trouver son IP - -Si vous installez YunoHost sur un VPS, votre fournisseur devrait vous avoir communiqué l'adresse IP de votre serveur. - -Si vous installez un serveur à la maison (par ex. sur Raspberry Pi ou OLinuXino), il vous faut trouver l'IP qui a été attribuée à votre carte après que vous l'ayez connectée à votre box internet / routeur. Il y a plusieurs façons de faire cela : - -- ouvrez un terminal et tapez `sudo arp-scan --local` pour lister les IP des machines sur le réseau local ; -- si la commande arp-scan vous affiche beaucoup de machines, vous pouvez vérifier lesquelles sont ouvertes au ssh avec `nmap -p 22 192.168.1.0/24` pour faire du tri (adaptez la plage IP selon votre réseau local) -- utilisez l'interface de votre box internet pour lister les machines connectées, ou regarder les logs ; -- branchez un écran sur votre serveur, loggez-vous et tapez `hostname --all-ip-address`. - -#### Se connecter - -En supposant que votre adresse IP est `111.222.333.444`, ouvrez un terminal et tapez : - -```bash -ssh root@111.222.333.444 -``` - -Un mot de passe sera demandé. Si c'est un VPS, votre fournisseur devrait également vous avoir communiqué un mot de passe. Si vous avez utilisé une image pré-installée (pour x86 ou cartes ARM), le password devrait être `yunohost`. - -<div class="alert alert-warning"> -Depuis YunoHost 3.4, après avoir effectué la postinstallation, il ne sera plus possible de se logguer avec l'utilisateur `root`. À la place, il vous faut **vous logguer avec l'utilisateur `admin` !** Dans l'éventualité où le serveur LDAP serait cassé, rendant l'utilisateur `admin` inutilisable, vous devriez cependant pouvoir vous logguer avec l'utilisateur `root` depuis le réseau local. -</div> - -#### Changer le mot de passe root ! - -Après vous être connecté pour la première fois, il vous faut changer le mot de passe `root`. Le serveur vous demandera peut-être automatiquement de le faire. Si ce n'est pas le cas, il faut utiliser la commande `passwd`. Il est important de choisir un mot de passe raisonnablement compliqué. Notez que ce mot de passe sera écrasé ensuite par le mot de passe admin choisi lors de la postinstallation. - -#### En avant pour la configuration ! - -Tout est prêt pour passer à la [post-installation](postinstall). - -## Sur une instance déjà installée - -Si vous avez installé votre serveur à la maison et que vous cherchez à vous connecter depuis l'extérieur du réseau local, assurez-vous d'avoir bien redirigé le port 22 vers votre serveur. (Rappel : depuis la version 3.4, il vous faut vous logguer avec l'utilisateur `admin` !) - -Si vous connaissez seulement l'IP de votre serveur : - -```bash -ssh admin@111.222.333.444 -``` - -Ensuite, entrez le mot de passe administrateur défini pendant la [post-installation](postinstall). - -Si vous avez configuré vos DNS (ou modifié votre `/etc/hosts`), vous pouvez utiliser votre nom de domaine : - -```bash -ssh admin@votre.domaine.tld -``` - -Si vous avez changé le port SSH, il faut rajouter `-p <numerodeport>` à la commande, par ex. : - -```bash -ssh -p 2244 admin@votre.domaine.tld -``` - -<div class="alert alert-info"> -Si vous êtes connecté en tant qu'`admin` et souhaitez devenir `root` pour plus de confort (par exemple, ne pas avoir à taper `sudo` à chaque commande), vous pouvez devenir `root` en tapant `sudo su`. -</div> - -## Quels utilisateurs ? - -Par défaut, seulement l'utilisateur `admin` peut se logger en SSH sur une instance Yunohost. - -Les utilisateurs YunoHost créés via l'interface d'administration sont gérés par la base de donnée LDAP. Par défaut, ils ne peuvent pas se connecter en SSH pour des raisons de sécurité. Si vous avez absolument besoin qu'un utilisateur dispose d'un accès SSH, vous pouvez utiliser la commande : -```bash -yunohost user ssh allow <username> -``` - -De même, il est possible de supprimer l'accès ssh à un utilisateur avec la commande : -```bash -yunohost user ssh disallow <username> -``` - -Enfin, il est possible d'ajouter, de supprimer et de lister des clés ssh, pour améliorer la sécurité de l'accès ssh, avec les commandes : -```bash -yunohost user ssh add-key <username> <key> -yunohost user ssh remove-key <username> <key> -yunohost user ssh list-keys <username> -``` - -## SSH et sécurité - -N.B. : `fail2ban` bannira votre IP pour 10 minutes si vous échouez plus de 5 fois à vous identifier. Pour débannir une IP, vous pouvez regarder la page sur [fail2ban](/fail2ban) - -Une discussion plus complète de la sécurité et de SSH peut être trouvée sur [la page dédiée](/security). diff --git a/tests/check_code_block_syntax.sh b/tests/check_code_block_syntax.sh deleted file mode 100644 index 62e83a0f..00000000 --- a/tests/check_code_block_syntax.sh +++ /dev/null @@ -1,17 +0,0 @@ -returncode=0 -for FILE in $(ls *.md) -do - NB_OPENING=$(grep -E "^ *\`\`\` *\w+ *$" $FILE | wc -l) - NB_CLOSE=$(grep -E "^ *\`\`\` *$" $FILE | wc -l) - if [[ "$NB_OPENING" != "$NB_CLOSE" ]] - then - echo "There are some mistakes in code block syntax in $FILE ..." - returncode=1 - fi -done - -if [[ $returncode == 1 ]] -then - echo "Make sure that all the code block in the problematic files do specific the language in the opening backticks (for example, \`\`\`bash). Otherwise, rendering in the actual website will be broken because of a bug in markdown parsing lib..." - exit 1 -fi diff --git a/tests/dead_links.sh b/tests/dead_links.sh old mode 100644 new mode 100755 index f51cec96..3624f13f --- a/tests/dead_links.sh +++ b/tests/dead_links.sh @@ -1,19 +1,19 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + returncode=0 -# Find all markdown links and generate a list of filename.md:N:linktarget (with N the line number) -for LINK in $(grep -nr -o -E "\]\(\/?(\w|-)+\)" ./*.md | tr -d ']()/') -do - PAGE=$(echo $LINK | awk -F: '{print $3}') - [ -e "$PAGE.md" ] || echo "This link looks dead (page doesn't exist in english?) $LINK" - [ -e "$PAGE.md" ] || returncode=1 -done +# Parse default routes +grep -roh "^ *default: .*" ./pages | awk '{print $2}' | tr -d "'" | sort | uniq > .known_pages -# Find all HTML/href links and generate a list of filename.md:N:linktarget (with N the line number) -for LINK in $(grep -nr -o -E 'href="\/?(\w|-)+\"' ./*.md | sed -E 's@href="/?@@g' | tr -d '"') -do - PAGE=$(echo $LINK | awk -F: '{print $3}') - [ -e "$PAGE.md" ] || echo "This link looks dead (page doesn't exist in english?) $LINK" - [ -e "$PAGE.md" ] || returncode=1 -done +# Parse aliases +grep -rh "^---$" ./pages -B 50 | grep "^ *\- '/" | awk '{print $2}' | tr -d "'" | sort | uniq >> .known_pages + +# Find all markdown links and generate a list of filename.md:N:linktarget (with N the line number) + +while IFS= read -r LINK; do + PAGE=$(echo "$LINK" | awk -F: '{print $3}' | tr -d ']()/') + grep -qw "$PAGE" ./.known_pages || { echo "$LINK"; returncode=1; } +done < <(grep -nr -o -E "\]\(\/?(\w|-)+\)" ./pages) exit $returncode diff --git a/tests/uniformize_links.sh b/tests/uniformize_links.sh deleted file mode 100644 index 9a5ab061..00000000 --- a/tests/uniformize_links.sh +++ /dev/null @@ -1,15 +0,0 @@ -for FILE in $(ls *.md); -do - grep -q "Unfortunately, this page only exists" $FILE && continue - - # Replace markdown links with full url ... we only need the relative url - sed -i -E 's@\(https://yunohost.org/#/(\w+)\)@(/\1)@g' $FILE - - # Replace (/foo_fr) to (foo) - sed -i -E 's@\(\/?((\w|-)+)_(en|fr|es|it|ar|de|oc)\)@(/\1)@g' $FILE - - # Replace href="/foo_fr" to href="foo" - sed -i -E 's@href="/?((\w|-)+)_(en|fr|es|it|ar|de|oc)"@href="/\1"@g' $FILE; -done - -git checkout project_organization.md project_organization_fr.md diff --git a/tests/unreferenced_pages.sh b/tests/unreferenced_pages.sh deleted file mode 100644 index 92fa14e1..00000000 --- a/tests/unreferenced_pages.sh +++ /dev/null @@ -1,25 +0,0 @@ - - -MARKDOWN_TARGETS=$(grep -nr -o -E "\]\(\/?(\w|-)+\)" ./*.md | tr -d ']()/' | awk -F: '{print $3}' | sort | uniq) -HTML_TARGETS=$(grep -nr -o -E 'href="\/?(\w|-)+\"' ./*.md | sed -E 's@href="/?@@g' | tr -d '"' | awk -F: '{print $3}' | sort | uniq) - -ALL_TARGETS=$(echo $MARKDOWN_TARGETS $HTML_TARGETS) - -PAGES=$(ls *.md | sed -E 's/(_(fr|it|de|ar|oc|es|ru))?.md//g' | sort | uniq) - -returncode=0 - -for PAGE in $PAGES -do - if [[ $PAGE == "index" ]] || [[ $PAGE == "README" ]] || [[ $PAGE == "default" ]] - then - continue - fi - if ! echo $ALL_TARGETS | grep -q -w $PAGE - then - returncode=1 - echo "The following page is not referenced by any other page :( -> $PAGE" - fi -done - -exit $returncode diff --git a/themes/.gitkeep b/themes/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/themes/learn4/.eslintrc b/themes/learn4/.eslintrc new file mode 100644 index 00000000..35d3a0a3 --- /dev/null +++ b/themes/learn4/.eslintrc @@ -0,0 +1,168 @@ +{ + "env": { + "browser": true, + "node": true, + "es6": true + }, + + "parser": "babel-eslint", + + "parserOptions": { + "ecmaVersion": 7, + "sourceType": "module" + }, + + "rules": { + "accessor-pairs": 2, + "array-bracket-spacing": 0, + "block-scoped-var": 0, + "brace-style": [2, "1tbs", { "allowSingleLine": true }], + "camelcase": 0, + "comma-dangle": [2, "never"], + "comma-spacing": [2, { "before": false, "after": true }], + "comma-style": [2, "last"], + "complexity": 0, + "computed-property-spacing": 0, + "consistent-return": 0, + "consistent-this": 0, + "constructor-super": 2, + "curly": [2, "multi-line"], + "default-case": 0, + "dot-location": [2, "property"], + "dot-notation": 0, + "eol-last": 2, + "eqeqeq": [2, "allow-null"], + "func-names": 0, + "func-style": 0, + "generator-star-spacing": [2, { "before": true, "after": true }], + "guard-for-in": 0, + "handle-callback-err": [2, "^(err|error)$" ], + "indent": [2, 4, { "SwitchCase": 1 }], + "key-spacing": [2, { "beforeColon": false, "afterColon": true }], + "linebreak-style": 0, + "lines-around-comment": 0, + "max-nested-callbacks": 0, + "new-cap": [2, { "newIsCap": true, "capIsNew": false }], + "new-parens": 2, + "newline-after-var": 0, + "no-alert": 0, + "no-array-constructor": 2, + "no-caller": 2, + "no-catch-shadow": 0, + "no-cond-assign": 2, + "no-console": 0, + "no-constant-condition": 0, + "no-continue": 0, + "no-control-regex": 2, + "no-debugger": 2, + "no-delete-var": 2, + "no-div-regex": 0, + "no-dupe-args": 2, + "no-dupe-keys": 2, + "no-duplicate-case": 2, + "no-else-return": 0, + "no-empty": 0, + "no-empty-character-class": 2, + "no-eq-null": 0, + "no-eval": 2, + "no-ex-assign": 2, + "no-extend-native": 2, + "no-extra-bind": 2, + "no-extra-boolean-cast": 2, + "no-extra-parens": 0, + "no-extra-semi": 0, + "no-fallthrough": 2, + "no-floating-decimal": 2, + "no-func-assign": 2, + "no-implied-eval": 2, + "no-inline-comments": 0, + "no-inner-declarations": [2, "functions"], + "no-invalid-regexp": 2, + "no-irregular-whitespace": 2, + "no-iterator": 2, + "no-label-var": 2, + "no-labels": 2, + "no-lone-blocks": 2, + "no-lonely-if": 0, + "no-loop-func": 0, + "no-mixed-requires": 0, + "no-mixed-spaces-and-tabs": 2, + "no-multi-spaces": 2, + "no-multi-str": 2, + "no-multiple-empty-lines": [2, { "max": 1 }], + "no-native-reassign": 2, + "no-negated-in-lhs": 2, + "no-nested-ternary": 0, + "no-new": 2, + "no-new-func": 0, + "no-new-object": 2, + "no-new-require": 2, + "no-new-wrappers": 2, + "no-obj-calls": 2, + "no-octal": 2, + "no-octal-escape": 2, + "no-param-reassign": 0, + "no-path-concat": 0, + "no-process-env": 0, + "no-process-exit": 0, + "no-proto": 0, + "no-redeclare": 2, + "no-regex-spaces": 2, + "no-restricted-modules": 0, + "no-return-assign": 2, + "no-script-url": 0, + "no-self-compare": 2, + "no-sequences": 2, + "no-shadow": 0, + "no-shadow-restricted-names": 2, + "no-spaced-func": 2, + "no-sparse-arrays": 2, + "no-sync": 0, + "no-ternary": 0, + "no-this-before-super": 2, + "no-throw-literal": 2, + "no-trailing-spaces": 2, + "no-undef": 2, + "no-undef-init": 2, + "no-undefined": 0, + "no-underscore-dangle": 0, + "no-unexpected-multiline": 2, + "no-unneeded-ternary": 2, + "no-unreachable": 2, + "no-unused-expressions": 0, + "no-unused-vars": [2, { "vars": "all", "args": "none" }], + "no-use-before-define": 0, + "no-var": 0, + "no-void": 0, + "no-warning-comments": 0, + "no-with": 2, + "object-curly-spacing": 0, + "object-shorthand": 0, + "one-var": [2, { "initialized": "never" }], + "operator-assignment": 0, + "operator-linebreak": [2, "after", { "overrides": { "?": "before", ":": "before" } }], + "padded-blocks": 0, + "prefer-const": 0, + "quote-props": 0, + "quotes": [2, "single", "avoid-escape"], + "radix": 2, + "semi": [2, "always"], + "semi-spacing": 0, + "sort-vars": 0, + "keyword-spacing": [2, {"after": true, "overrides": {"throw": { "after": true}, "return": { "before": true }}}], + "space-before-blocks": [2, "always"], + "space-before-function-paren": [2, "never"], + "space-in-parens": [2, "never"], + "space-infix-ops": 2, + "space-unary-ops": [2, { "words": true, "nonwords": false }], + "spaced-comment": [2, "always", { "markers": ["global", "globals", "eslint", "eslint-disable", "*package", "!"] }], + "strict": 0, + "use-isnan": 2, + "valid-jsdoc": 0, + "valid-typeof": 2, + "vars-on-top": 0, + "wrap-iife": [2, "any"], + "wrap-regex": 0, + "yoda": [2, "never"] + } +} diff --git a/themes/learn4/.gitignore b/themes/learn4/.gitignore new file mode 100644 index 00000000..07e6e472 --- /dev/null +++ b/themes/learn4/.gitignore @@ -0,0 +1 @@ +/node_modules diff --git a/themes/learn4/CHANGELOG.md b/themes/learn4/CHANGELOG.md new file mode 100644 index 00000000..11d1af97 --- /dev/null +++ b/themes/learn4/CHANGELOG.md @@ -0,0 +1,167 @@ +# v2.0.0-rc.2 +## mm/dd/2019 + +1. [](#improved) + * Updated [Spectre.css](https://picturepan2.github.io/spectre/) to latest `0.5.8` version + +# v2.0.0-rc.1 +## 02/07/2019 + +1. [](#improved) + * Support for 2FA panel styling + * Updated to Yarn 4.0 syntax +1. [](#bugfix) + * Some checkboxes fixes for Forms 3.0 + +# v2.0.0-beta.4 +## 12/07/2018 + +1. [](#improved) + * Updated to include latest `v1.2.5` improvements + +# v2.0.0-beta.3 +## 11/12/2018 + +1. [](#improved) + * Updated to include latest `v1.2.4` improvements +1. [](#bugfix) + * More Twig 2.0 compatibility fixes + +# v2.0.0-beta.2 +## 11/05/2018 + +1. [](#improved) + * Updated to include latest `v1.2.3` improvements +1. [](#bugfix) + * Fixed a Twig 2.0 issue with assets rendering + +# v2.0.0-beta.1 +## 10/24/2018 + +1. [](#new) + * Use new `deferred` Twig blocks (requires Grav 1.6+) +1. [](#improved) + * Updated to use new `GRAV` core language prefix + +# v1.2.5 +## 12/07/2018 + +1. [](#improved) + * Updated [Spectre.css](https://picturepan2.github.io/spectre/) to latest `0.5.7` version +1. [](#bugfix) + * Fixed missing `</html>` close tag in bae template [#76](https://github.com/getgrav/grav-theme-quark/pull/) + +# v1.2.4 +## 11/12/2018 + +1. [](#improved) + * Updated [Spectre.css](https://picturepan2.github.io/spectre/) to latest `0.5.5` version + * Added link support to modular `features` [#39](https://github.com/getgrav/grav-theme-quark/pull/39/) + * Remove desktop menu when in mobile mode [#59](https://github.com/getgrav/grav-theme-quark/pull/59/) + * Support modular `text` full-width if no image [#70](https://github.com/getgrav/grav-theme-quark/issues/70) + * Shim for IE support of BrickLayer.js [#64](https://github.com/getgrav/grav-theme-quark/issues/64) +1. [](#bugfix) + * Fixed `continue_link:` showing up as toggled [#65](https://github.com/getgrav/grav-theme-quark/issues/65) + * Fixed issue with modular pages not hidden in on-page menu with `visible: false` [#71](https://github.com/getgrav/grav-theme-quark/issues/71) + + +# v1.2.3 +## 11/05/2018 + +1. [](#improved) + * Moved footer into standalone twig to allow for easier extensibility [#63](https://github.com/getgrav/grav-theme-quark/pull/63) +1. [](#bugfix) + * Fix variable name for prouction mode [#61](https://github.com/getgrav/grav-theme-quark/pull/61) + * Fix layout size in features blueprint [#67](https://github.com/getgrav/grav-theme-quark/pull/67) + * Fix active page logic in `nav` so there's no empty class attributes [#68](https://github.com/getgrav/grav-theme-quark/pull/68) + * Fix for features blueprint because `class` didn't work [#69](https://github.com/getgrav/grav-theme-quark/pull/69) + +# v1.2.2 +## 10/24/2018 + +1. [](#improved) + * Changed nav macro to format supported by Twig 2.0 + * Updated `partials/form-messages.html.twig` to be more inline with latest Forms plugin +1. [](#bugfix) + * Make the theme to work with Twig auto-escaping turned on + * Moved language strings under `THEME_QUARK` + +# v1.2.1 +## 08/23/2018 + +1. [](#improved) + * Added additional "mobile custom logo" support +1. [](#bugfix) + * Addressed some CSS issues by forcing logo height + +# v1.2.0 +## 08/23/2018 + +1. [](#new) + * Added new "custom logo" support [#3](https://github.com/getgrav/grav-theme-quark/issues/3) + * Added option JSON feed syndication support in sidebar [#47](https://github.com/getgrav/grav-theme-quark/pull/47) + * Added basic form field `array` styling + +# v1.1.0 +## 07/25/2018 + +1. [](#new) + * Responsive font sizing [#28](https://github.com/getgrav/grav-theme-quark/issues/28) +1. [](#improved) + * Updated [Spectre.css](https://picturepan2.github.io/spectre/) to latest `0.5.3` version + * Make blog settings toggleable [#38](https://github.com/getgrav/grav-theme-quark/pull/38) +1. [](#bugfix) + * Proper fix for sticky footer in IE10 and IE11 [#21](https://github.com/getgrav/grav-theme-quark/issues/21) + * Fix for lists wrapping weirdly due to `outside` attribute + * Updated checkbox + radio to take into account `client_side_validation` form option + * Fixes for fallback values [#37](https://github.com/getgrav/grav-theme-quark/pull/37) + * Fix inheritance for images folder [#30](https://github.com/getgrav/grav-theme-quark/pull/30) + * Added blueprint option for `continue_link` [#45](https://github.com/getgrav/grav-theme-quark/issues/45) + * Added blueprint option for Feature `class` [#14](https://github.com/getgrav/grav-theme-quark/issues/14) + * Fixed `Duplicate ID` issues with modular sections. Might break CSS on first load, need to refresh to pick up new CSS [#24](https://github.com/getgrav/grav-theme-quark/issues/24) + * Fixed Text feature alignment issue [#4](https://github.com/getgrav/grav-theme-quark/issues/4) + * Overlapping menu and mobile button [#7](https://github.com/getgrav/grav-theme-quark/issues/7) + +# v1.0.3 +## 05/11/2018 + +1. [](#new) + * Added new primary button mixin +1. [](#improved) + * Updated [Spectre.css](https://picturepan2.github.io/spectre/) to latest `0.5.1` version + * Improved default login styling + * Removed core Spectre.css override to make upgrading Spectre easier + * Added screenshot to README.md + * Override focus to prevent overzealous blue blurs +1. [](#bugfix) + * Fix for `highlight` plugin not changing background of code blocks + * Removed extraneous `dump()` in Twig output + +# v1.0.2 +## 02/19/2018 + +1. [](#new) + * Added toggle options to enable Spectre.css _experimentals_ and _icons_ CSS files + * Switched to a fork of LineAwesome icons compatible with FontAwesome 4.7.0 +1. [](#improved) + * Font tweaks +1. [](#bugfix) + * Pagination fixes + +# v1.0.1 +## 01/22/2018 + +1. [](#new) + * Added blueprints for admin editing +1. [](#improved) + * Use default lang from `site.yaml` +1. [](#bugfix) + * Fixed Current path to address issues with extending Quark + * Fixed parallax to start in same position as standard + * Fixed modular image size + +# v1.0.0 +## 12/28/2017 + +1. [](#new) + * ChangeLog started... diff --git a/themes/learn4/LICENSE b/themes/learn4/LICENSE new file mode 100644 index 00000000..b5e7990a --- /dev/null +++ b/themes/learn4/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2018 Trilby Media + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/themes/learn4/README.md b/themes/learn4/README.md new file mode 100644 index 00000000..7dd3b166 --- /dev/null +++ b/themes/learn4/README.md @@ -0,0 +1,152 @@ +# Learn4 Theme + + + +**Learn4** is the new default theme for [Grav CMS](http://github.com/getgrav/grav). This theme is built with the [Spectre.css](https://picturepan2.github.io/spectre/) framework and provides a powerful base for developing your own themes. Learn4 uses functionality that is only available in Grav 1.4+, as such you cannot run Learn4 on earlier versions of Grav. + +## Features + +* Lightweight and minimal for optimal performance +* Spectre CSS Framework +* Fully responsive with full-page mobile navigation +* SCSS based CSS source files for easy customization +* Built-in support for on-page navigation +* Multiple page template types +* Fontawesome icon support + +### Supported Page Templates + +* Default view template `default.md` +* Error view template `error.md` +* Blog view template `blog.md` +* Blog item view template `item.md` +* Modular view templates: `modular.md` + * Features Modular view template `features.md` + * Hero Modular view template `hero.md` + * Text Modular view template `text.md` + +# Installation + +Installing the Learn4 theme can be done in one of two ways. Our GPM (Grav Package Manager) installation method enables you to quickly and easily install the theme with a simple terminal command, while the manual method enables you to do so via a zip file. + +The theme by itself is useful, but you may have an easier time getting up and running by installing a skeleton. The Learn4 theme can be found in both the [One-page](https://github.com/getgrav/grav-skeleton-onepage-site) and [Blog Site](https://github.com/getgrav/grav-skeleton-blog-site) which are self-contained repositories for a complete sites which include: sample content, configuration, theme, and plugins. + +## GPM Installation (Preferred) + +The simplest way to install this theme is via the [Grav Package Manager (GPM)](http://learn.getgrav.org/advanced/grav-gpm) through your system's Terminal (also called the command line). From the root of your Grav install type: + + bin/gpm install learn4 + +This will install the Learn4 theme into your `/user/themes` directory within Grav. Its files can be found under `/your/site/grav/user/themes/learn4`. + +## Manual Installation + +To install this theme, just download the zip version of this repository and unzip it under `/your/site/grav/user/themes`. Then, rename the folder to `learn4`. You can find these files either on [GitHub](https://github.com/getgrav/grav-theme-learn4) or via [GetGrav.org](http://getgrav.org/downloads/themes). + +You should now have all the theme files under + + /your/site/grav/user/themes/learn4 + +## Default Options + +Learn4 comes with a few default options that can be set site-wide. These options are: + +```yaml +enabled: true # Enable the theme +production-mode: true # In production mode, only minified CSS is used. When disabled, nested CSS with sourcemaps are enabled +grid-size: grid-lg # The max-width of the theme, options include: `grid-xl`, `grid-lg`, and `grid-md` +header-fixed: true # Cause the header to be fixed at the top of the browser +header-animated: true # Allows the fixed header to resize to a smaller header when scrolled +header-dark: false # Inverts the text/logo to work better on dark backgrounds +header-transparent: false # Allows the fixed header to be transparent over the page +sticky-footer: true # Causes the footer to be sticky at the bottom of the page +blog-page: '/blog' # The route to the blog listing page, useful for a blog style layout with sidebar +custom_logo: # A custom logo rather than the default (see below) +custom_logo_mobile: # A custom logo to use for mobile navigation +``` + +To make modifications, you can copy the `user/themes/learn4/learn4.yaml` file to `user/config/themes/` folder and modify, or you can use the admin plugin. + +> NOTE: Do not modify the `user/themes/learn4/learn4.yaml` file directly or your changes will be lost with any updates + +## Custom Logos + +To add a custom logo, you should put the log into the `user/themes/learn4/images/logo` folder. Standard image formats are support (`.png`,`.jpg`, `.gif`, `.svg`, etc.). Then reference the logo via the YAML like so: + +```yaml +custom_logo: + - name: 'my-logo.png' +custom_logo_mobile: + - name: 'my-mobile-logo.png' +``` + +Alternatively, you can you use the drag-n-drop "Custom Logo" field in the Learn4 theme options. + +## Page Overrides + +Learn4 has the ability to allow pages to override some of the default options by letting the user set `body_classes` for any page. The theme will merge the combination of the defaults with any `body_classes` set. For example: + +```yaml +body_classes: "header-dark header-transparent" +``` + +On a particular page will ensure that page has those options enabled (assuming they are false by default). + +## Hero Options + +The hero template allows some options to be set in the page frontmatter. This is used by the modular `hero` as well as the blog and item templates to provide a more dynamic header. + +```yaml +hero_classes: text-light title-h1h2 parallax overlay-dark-gradient hero-large +hero_image: road.jpg +hero_align: center +``` + +The `hero_classes` option allows a variety of hero classes to be set dynamically these include: + +* `text-light` | `text-dark` - Controls if the text should be light or dark depending on the content +* `title-h1h2` - Enforced a close matched h1/h2 title pairing +* `parallax` - Enables a CSS-powered parallax effect +* `overlay-dark-gradient` - Displays a transparent gradient which further darkens the underlying image +* `overlay-light-gradient` - Displays a transparent gradient which further lightens the underlying image +* `overlay-dark` - Displays a solid transparent overlay which further darkens the underlying image +* `overlay-light` - Displays a solid transparent overlay which further darkens the underlying image +* `hero-fullscreen` | `hero-large` | `hero-medium` | `hero-small` | `hero-tiny` - Size of the hero block + +The `hero_image` should point to an image file in the current page folder. + +## Features Modular Options + +The features modular template provides the ability to set a class on the features, as well as an array of feature items. For example: + +```yaml +class: offset-box +features: + - header: Crazy Fast + text: "Performance is not just an afterthought, we baked it in from the start!" + icon: fighter-jet + - header: Easy to build + text: "Simple text files means Grav is trivial to install, and easy to maintain" + icon: database + - header: Awesome Technology + text: "Grav employs best-in-class technologies such as Twig, Markdown & Yaml" + icon: cubes + - header: Super Flexible + text: "From the ground up, with many plugin hooks, Grav is extremely extensible" + icon: object-ungroup + - header: Abundant Plugins + text: "A vibrant developer community means over 200 themes available to download" + icon: puzzle-piece + - header: Free / Open Source + text: "Grav is an open source project, so you can spend your money on other stuff" + icon: money +``` + +## Text Modular Options + +The text box provides a single option to control if any image found in the page folder should be left or right aligned: + +```yaml +image_align: right +``` + diff --git a/themes/learn4/app/history.js b/themes/learn4/app/history.js new file mode 100644 index 00000000..52d4706f --- /dev/null +++ b/themes/learn4/app/history.js @@ -0,0 +1,9 @@ +import $ from 'jquery'; + +// History +$(document).on('click', '[data-clear-history-toggle]', (event) => { + event.preventDefault(); + + window.sessionStorage.clear(); + window.location.reload(); +}); diff --git a/themes/learn4/app/main.js b/themes/learn4/app/main.js new file mode 100644 index 00000000..cf0d1c27 --- /dev/null +++ b/themes/learn4/app/main.js @@ -0,0 +1,20 @@ +import $ from 'jquery'; +import './utils'; +import './toc'; +import './history'; +import './search'; +import './nav'; + +$(window).on('load', function() { + // store this page in session + window.sessionStorage.setItem($('body').data('url'), '1'); + + // loop through the sessionStorage and see if something should be marked as visited + for (let url in window.sessionStorage) { + if (window.sessionStorage.getItem(url) === '1') { + $(`[data-nav-id="${url}"]`).addClass('visited'); + } + } + + $('.highlightable').highlight(window.sessionStorage.getItem('search-value'), { element: 'mark' }); +}); diff --git a/themes/learn4/app/nav.js b/themes/learn4/app/nav.js new file mode 100644 index 00000000..be3e3c1e --- /dev/null +++ b/themes/learn4/app/nav.js @@ -0,0 +1,19 @@ +import $ from 'jquery'; + +if (window.sessionStorage.getItem('search-value')) { + $(document.body).removeClass('searchbox-hidden'); + $('[data-search-input]').val(sessionStorage.getItem('search-value')).trigger('input'); +} + +// allow keyboard control for prev/next links +$(document).on('click', '.nav-prev, .nav-next', (event) => { + const target = $(event.currentTarget); + window.location.href = target.attr('href'); +}); + +$(document).on('keydown', (event) => { + const item = event.which === 37 ? $('a.nav-prev') : (event.which === 39 ? $('a.nav-next') : null); + if (item) { + item.click(); + } +}); diff --git a/themes/learn4/app/search.js b/themes/learn4/app/search.js new file mode 100644 index 00000000..f4913a47 --- /dev/null +++ b/themes/learn4/app/search.js @@ -0,0 +1,49 @@ +import $ from 'jquery'; + +let ajax; +$(document).on('input', '[data-search-input]', (event) => { + const target = $(event.currentTarget); + const value = target.val(); + const items = $('[data-nav-id]'); + + items.removeClass('search-match'); + + const topics = $('ul.topics'); + const highlightable = $('.highlightable'); + if (!value.length) { + topics.removeClass('searched'); + items.css('display', 'block'); + window.sessionStorage.removeItem('search-value'); + + highlightable.unhighlight({ element: 'mark' }); + + return; + } + + window.sessionStorage.setItem('search-value', value); + highlightable.unhighlight({ element: 'mark' }).highlight(value, { element: 'mark' }); + + if (ajax && ajax.abort) { + ajax.abort(); + } + + ajax = $.ajax({ + url: `${target.data('search-input')}:${value}` + }).done((data) => { + if (data && data.results && data.results.length) { + items.css('display', 'none'); + topics.addClass('searched'); + data.results.forEach((item) => { + const navItem = $(`[data-nav-id="${item}"]`); + navItem.css('display', 'block').addClass('search-match'); + navItem.parents('li').css('display', 'block'); + }); + } + }); +}); + +$(document).on('click', '[data-search-clear]', () => { + $('[data-search-input]').val('').trigger('input'); + window.sessionStorage.removeItem('search-input'); + $('.highlightable').unhighlight({ element: 'mark' }); +}); diff --git a/themes/learn4/app/toc.js b/themes/learn4/app/toc.js new file mode 100644 index 00000000..d1e66a7e --- /dev/null +++ b/themes/learn4/app/toc.js @@ -0,0 +1,6 @@ +import $ from 'jquery'; + +// TOC +$(document).on('click', '.toc-toggle', () => { + $('.page-toc').toggleClass('toc-closed'); +}); diff --git a/themes/learn4/app/utils/highlight.js b/themes/learn4/app/utils/highlight.js new file mode 100644 index 00000000..d1ee90a9 --- /dev/null +++ b/themes/learn4/app/utils/highlight.js @@ -0,0 +1,81 @@ +import $ from 'jquery'; + +$.extend({ + highlight: function(node, re, nodeName, className) { + if (node.nodeType === 3) { + const match = node.data.match(re); + if (match) { + const highlight = document.createElement(nodeName || 'span'); + highlight.className = className || 'highlight'; + const wordNode = node.splitText(match.index); + wordNode.splitText(match[0].length); + const wordClone = wordNode.cloneNode(true); + highlight.appendChild(wordClone); + wordNode.parentNode.replaceChild(highlight, wordNode); + return 1; // skip added node in parent + } + } else if ((node.nodeType === 1 && node.childNodes) && // only element nodes that have children + !/(script|style)/i.test(node.tagName) && // ignore script and style nodes + !(node.tagName === nodeName.toUpperCase() && node.className === className)) { // skip if already highlighted + for (let i = 0; i < node.childNodes.length; i++) { + i += $.highlight(node.childNodes[i], re, nodeName, className); + } + } + return 0; + } +}); + +$.fn.unhighlight = function(options) { + const settings = { + className: 'highlight', + element: 'span' + }; + + $.extend(settings, options); + + return this.find(`${settings.element}.${settings.className}`).each(function() { + const parent = this.parentNode; + parent.replaceChild(this.firstChild, this); + parent.normalize(); + }).end(); +}; + +$.fn.highlight = function(words, options) { + const settings = { + className: 'highlight', + element: 'span', + caseSensitive: false, + wordsOnly: false + }; + + $.extend(settings, options); + + if (!words) { + return; + } + + if (words.constructor === String) { + words = [words]; + } + words = $.grep(words, function(word) { + return word !== ''; + }); + words = $.map(words, function(word) { + return word.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); + }); + if (words.length === 0) { + return this; + } + + const flag = settings.caseSensitive ? '' : 'i'; + let pattern = `(${words.join('|')})`; + if (settings.wordsOnly) { + pattern = '\\b' + pattern + '\\b'; + } + + const re = new RegExp(pattern, flag); + + return this.each(function() { + $.highlight(this, re, settings.element, settings.className); + }); +}; diff --git a/themes/learn4/app/utils/index.js b/themes/learn4/app/utils/index.js new file mode 100644 index 00000000..bee7ebd4 --- /dev/null +++ b/themes/learn4/app/utils/index.js @@ -0,0 +1,2 @@ +import './highlight'; +import './progress'; diff --git a/themes/learn4/app/utils/progress.js b/themes/learn4/app/utils/progress.js new file mode 100644 index 00000000..30caf90e --- /dev/null +++ b/themes/learn4/app/utils/progress.js @@ -0,0 +1,11 @@ +const h = document.documentElement; +const b = document.body; +const st = 'scrollTop'; +const sh = 'scrollHeight'; +const progress = document.querySelector('.progress'); +let scroll; + +document.addEventListener('scroll', function() { + scroll = (h[st] || b[st]) / ((h[sh] || b[sh]) - h.clientHeight) * 100; + progress.style.setProperty('--scroll', scroll + '%'); +}); diff --git a/themes/learn4/assets/quark-screenshots.jpg b/themes/learn4/assets/quark-screenshots.jpg new file mode 100644 index 00000000..b4b0c916 Binary files /dev/null and b/themes/learn4/assets/quark-screenshots.jpg differ diff --git a/themes/learn4/blueprints.yaml b/themes/learn4/blueprints.yaml new file mode 100644 index 00000000..32513aa1 --- /dev/null +++ b/themes/learn4/blueprints.yaml @@ -0,0 +1,73 @@ +name: Learn4 +version: 2.0.0-rc.1 +testing: true +description: New Grav Default Theme +icon: microchip +author: + name: Team Grav + email: devs@getgrav.org + url: http://getgrav.org +homepage: https://github.com/getgrav/grav-theme-learn4 +demo: https://demo.getgrav.org/onepage-skeleton +keywords: learn4, spectre, theme, core, modern, fast, responsive, html5, css3 +bugs: https://github.com/getgrav/grav-theme-learn4/issues +license: MIT + +dependencies: + - { name: grav, version: '>=1.6.0-rc.2' } + +form: + validation: loose + + fields: + production-mode: + type: toggle + label: Production mode + help: When enabled, Learn4 will render with minified CSS + highlight: 1 + default: 1 + options: + 1: PLUGIN_ADMIN.ENABLED + 0: PLUGIN_ADMIN.DISABLED + validate: + type: bool + + grid-size: + type: select + label: Grid size + help: The maximum width of the theme + size: small + options: + '': None (full width) + grid-xl: Extra Large + grid-lg: Large + grid-md: Medium + + spectre_section: + type: section + title: Spectre.css Options + underline: true + + spectre.exp: + type: toggle + label: Experimentals CSS + help: When enabled, the `spectre-exp.css` file will be included + highlight: 0 + default: 0 + options: + 1: PLUGIN_ADMIN.ENABLED + 0: PLUGIN_ADMIN.DISABLED + validate: + type: bool + + spectre.icons: + type: toggle + label: Icons CSS + help: When enabled, the `spectre-icons.css` file will be included + highlight: 0 + default: 0 + options: + 1: PLUGIN_ADMIN.ENABLED + 0: PLUGIN_ADMIN.DISABLED + validate: + type: bool \ No newline at end of file diff --git a/themes/learn4/blueprints/blog.yaml b/themes/learn4/blueprints/blog.yaml new file mode 100644 index 00000000..72e2f7b1 --- /dev/null +++ b/themes/learn4/blueprints/blog.yaml @@ -0,0 +1,94 @@ +extends@: default +child_type: item + +rules: + slug: + pattern: "[a-z][a-z0-9_\-]+" + min: 2 + max: 80 + +form: + fields: + tabs: + type: tabs + active: 1 + + fields: + advanced: + fields: + overrides: + fields: + header.child_type: + default: item + blog: + type: tab + title: Blog Config + + fields: + + content_title: + type: spacer + title: Content Definition + + header.content.items: + type: textarea + yaml: true + label: Items + default: '@self.children' + validate: + type: yaml + + header.content.limit: + type: text + label: Max Item Count + default: 5 + validate: + required: true + type: int + min: 1 + + header.content.order.by: + type: select + label: Order By + default: date + options: + folder: Folder + title: Title + date: Date + default: Default + + header.content.order.dir: + type: select + label: Order + default: desc + options: + asc: Ascending + desc: Descending + + header.content.pagination: + type: toggle + label: Pagination + highlight: 1 + default: 1 + options: + 1: PLUGIN_ADMIN.ENABLED + 0: PLUGIN_ADMIN.DISABLED + validate: + type: bool + + header.content.url_taxonomy_filters: + type: toggle + label: URL Taxonomy Filters + highlight: 1 + default: 1 + options: + 1: PLUGIN_ADMIN.ENABLED + 0: PLUGIN_ADMIN.DISABLED + validate: + type: bool + + import@: + type: partials/blog-bits + context: blueprints://pages + + diff --git a/themes/learn4/blueprints/default.yaml b/themes/learn4/blueprints/default.yaml new file mode 100644 index 00000000..3219221a --- /dev/null +++ b/themes/learn4/blueprints/default.yaml @@ -0,0 +1,15 @@ +extends@: default + +form: + fields: + tabs: + fields: + advanced: + fields: + columns: + fields: + column1: + fields: + header.body_classes: + markdown: true + description: 'Available classes in Quark Theme (space separated):<br />`header-fixed`, `header-animated`, `header-dark`, `header-transparent`, `sticky-footer`' \ No newline at end of file diff --git a/themes/learn4/blueprints/item.yaml b/themes/learn4/blueprints/item.yaml new file mode 100644 index 00000000..8ad87549 --- /dev/null +++ b/themes/learn4/blueprints/item.yaml @@ -0,0 +1,113 @@ +extends@: default + +form: + fields: + tabs: + + fields: + blog: + type: tab + title: Blog Item + + fields: + + header_options: + type: section + title: Header Options + underline: true + + header.continue_link: + type: toggle + toggleable: true + label: DF Style Link + help: Daring Fireball style title link + highlight: 1 + options: + 1: PLUGIN_ADMIN.ENABLED + 0: PLUGIN_ADMIN.DISABLED + validate: + type: bool + + header.header_image: + type: toggle + toggleable: true + label: Display Header Image + help: Enabled displaying of a header image + highlight: 1 + options: + 1: PLUGIN_ADMIN.ENABLED + 0: PLUGIN_ADMIN.DISABLED + + header.header_image_file: + type: text + toggleable: true + label: Image File + help: image filename that exists in the page folder. If not provided, will use the first image found. + placeholder: For example: myimage.jpg + + header.header_image_width: + type: text + toggleable: true + label: Image Width + size: small + help: Header width in px + placeholder: Default is 900 + validate: + type: int + min: 0 + max: 5000 + + header.header_image_height: + type: text + toggleable: true + label: Image Height + size: small + help: Header height in px + placeholder: Default is 300 + validate: + type: int + min: 0 + max: 5000 + + summary: + type: section + title: Summary + underline: true + + header.summary.enabled: + type: toggle + toggleable: true + label: Summary + highlight: 1 + options: + 1: PLUGIN_ADMIN.ENABLED + 0: PLUGIN_ADMIN.DISABLED + + header.summary.format: + type: select + toggleable: true + label: Format + classes: fancy + options: + 'short': 'Use the first occurence of delimter or size' + 'long': 'Summary delimiter will be ignored' + + header.summary.size: + type: text + toggleable: true + label: Size + classes: large + placeholder: 300 + validate: + type: int + min: 1 + + header.summary.delimiter: + type: text + toggleable: true + label: Summary delimiter + classes: large + placeholder: === + + import@: + type: partials/blog-bits diff --git a/themes/learn4/blueprints/modular/features.yaml b/themes/learn4/blueprints/modular/features.yaml new file mode 100644 index 00000000..187696f6 --- /dev/null +++ b/themes/learn4/blueprints/modular/features.yaml @@ -0,0 +1,38 @@ +title: Features +'@extends': default + +form: + fields: + tabs: + fields: + features: + type: tab + title: Features + fields: + header.class: + type: select + label: Layout + default: small + size: medium + options: + small: Small = 4 / 3 / 2 columns + standard: Standard = 3 / 2 / 1 columns + + header.features: + name: features + type: list + label: Features + + fields: + .icon: + type: iconpicker + label: Icon + .header: + type: text + label: Header + .text: + type: text + label: Text + .url: + type: text + label: Link diff --git a/themes/learn4/blueprints/modular/hero.yaml b/themes/learn4/blueprints/modular/hero.yaml new file mode 100644 index 00000000..5e8abf5e --- /dev/null +++ b/themes/learn4/blueprints/modular/hero.yaml @@ -0,0 +1,23 @@ +title: Hero +'@extends': default + +form: + fields: + tabs: + fields: + buttons: + type: tab + title: Hero + fields: + header.hero_classes: + type: text + label: Hero Classes + markdown: true + description: 'There are several Hero class options that can be listed here (space separated):<br />`text-light`, `text-dark`, `title-h1h2`, `parallax`, `overlay-dark-gradient`, `overlay-light-gradient`, `overlay-dark`, `overlay-light`, `hero-fullscreen`, `hero-large`, `hero-medium`, `hero-small`, `hero-tiny`<br />Please consult the [Quark documentation](https://github.com/getgrav/grav-theme-quark#hero-options) for more details.' + header.hero_image: + type: filepicker + label: Hero Image + preview_images: true + description: 'If not specified, this defaults to the first image found in the page''s folder' + + diff --git a/themes/learn4/blueprints/modular/text.yaml b/themes/learn4/blueprints/modular/text.yaml new file mode 100644 index 00000000..023c272a --- /dev/null +++ b/themes/learn4/blueprints/modular/text.yaml @@ -0,0 +1,19 @@ +title: Text +'@extends': default + +form: + fields: + tabs: + fields: + content: + fields: + header.media_order: + label: Page Media (first one will be displayed next to your content) + header.image_align: + type: select + label: Image position + classes: fancy + default: left + options: + 'left': 'Left' + 'right': 'Right' diff --git a/themes/learn4/blueprints/partials/blog-bits.yaml b/themes/learn4/blueprints/partials/blog-bits.yaml new file mode 100644 index 00000000..6ab41485 --- /dev/null +++ b/themes/learn4/blueprints/partials/blog-bits.yaml @@ -0,0 +1,64 @@ +form: + fields: + + hero_title: + type: spacer + title: Hero Section + + header.hero_classes: + type: text + label: Hero Classes + markdown: true + description: 'There are several Hero class options that can be listed here (space separated):<br />`text-light`, `text-dark`, `title-h1h2`, `parallax`, `overlay-dark-gradient`, `overlay-light-gradient`, `overlay-dark`, `overlay-light`, `hero-fullscreen`, `hero-large`, `hero-medium`, `hero-small`, `hero-tiny`<br />Please consult the [Quark documentation](https://github.com/getgrav/grav-theme-quark#hero-options) for more details.' + + header.hero_image: + type: filepicker + label: Hero Image + preview_images: true + description: 'If not specified, this defaults to the first image found in the page''s folder' + + toggles_title: + type: spacer + title: Configuration + + header.blog_url: + type: text + toggleable: true + label: Blog Route + help: The route to the main blog page that contains the "Show ..." configuration + default: '/blog' + placeholder: '/blog' + size: medium + + header.show_sidebar: + type: toggle + toggleable: true + label: Show Sidebar + highlight: 1 + options: + 1: PLUGIN_ADMIN.ENABLED + 0: PLUGIN_ADMIN.DISABLED + validate: + type: bool + + header.show_breadcrumbs: + type: toggle + toggleable: true + label: Show Breadcrumbs + highlight: 1 + options: + 1: PLUGIN_ADMIN.ENABLED + 0: PLUGIN_ADMIN.DISABLED + validate: + type: bool + + header.show_pagination: + type: toggle + toggleable: true + label: Show Pagination + highlight: 1 + options: + 1: PLUGIN_ADMIN.ENABLED + 0: PLUGIN_ADMIN.DISABLED + validate: + type: bool \ No newline at end of file diff --git a/themes/learn4/classes/Shortcodes/VersionShortcode.php b/themes/learn4/classes/Shortcodes/VersionShortcode.php new file mode 100644 index 00000000..1c597a08 --- /dev/null +++ b/themes/learn4/classes/Shortcodes/VersionShortcode.php @@ -0,0 +1,31 @@ +<?php +namespace Grav\Plugin\Shortcodes; + +use Grav\Common\Language\Language; +use Thunder\Shortcode\Shortcode\ShortcodeInterface; + +class VersionShortcode extends Shortcode +{ + + public function init() + { + $this->shortcode->getHandlers()->add('version', function(ShortcodeInterface $sc) { + $lang = $this->getBbCode($sc); + + if ($lang) { + $list = explode(',', $lang); + array_walk($list, 'trim'); + + /** @var Language $language */ + $language = $this->grav['language']; + $current = $language->getLanguage(); + + if (in_array($current, $list, true)) { + return $sc->getContent(); + } + } + + return ''; + }); + } +} \ No newline at end of file diff --git a/themes/learn4/css-compiled/spectre-exp.css b/themes/learn4/css-compiled/spectre-exp.css new file mode 100644 index 00000000..b722bb7d --- /dev/null +++ b/themes/learn4/css-compiled/spectre-exp.css @@ -0,0 +1,369 @@ +/*! Spectre.css Experimentals v0.5.8 | MIT License | github.com/picturepan2/spectre */ +.form-autocomplete { position: relative; } + +.form-autocomplete .form-autocomplete-input { -ms-flex-line-pack: start; align-content: flex-start; display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; height: auto; min-height: 1.6rem; padding: 0.1rem; } + +.form-autocomplete .form-autocomplete-input.is-focused { box-shadow: 0 0 0 0.1rem rgba(26, 163, 237, 0.2); border-color: #1AA3ED; } + +.form-autocomplete .form-autocomplete-input .form-input { border-color: transparent; box-shadow: none; display: inline-block; -ms-flex: 1 0 auto; flex: 1 0 auto; height: 1.2rem; line-height: 0.8rem; margin: 0.1rem; width: auto; } + +.form-autocomplete .menu { left: 0; position: absolute; top: 100%; width: 100%; } + +.form-autocomplete.autocomplete-oneline .form-autocomplete-input { -ms-flex-wrap: nowrap; flex-wrap: nowrap; overflow-x: auto; } + +.form-autocomplete.autocomplete-oneline .chip { -ms-flex: 1 0 auto; flex: 1 0 auto; } + +.calendar { border: 0.05rem solid #e7e9ed; border-radius: 0.1rem; display: block; min-width: 280px; } + +.calendar .calendar-nav { -ms-flex-align: center; align-items: center; background: #f8f9fa; border-top-left-radius: 0.1rem; border-top-right-radius: 0.1rem; display: -ms-flexbox; display: flex; font-size: 0.9rem; padding: 0.4rem; } + +.calendar .calendar-header, .calendar .calendar-body { display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; -ms-flex-pack: center; justify-content: center; padding: 0.4rem 0; } + +.calendar .calendar-header .calendar-date, .calendar .calendar-body .calendar-date { -ms-flex: 0 0 14.28%; flex: 0 0 14.28%; max-width: 14.28%; } + +.calendar .calendar-header { background: #f8f9fa; border-bottom: 0.05rem solid #e7e9ed; color: #acb3c2; font-size: 0.7rem; text-align: center; } + +.calendar .calendar-body { color: #667189; } + +.calendar .calendar-date { border: 0; padding: 0.2rem; } + +.calendar .calendar-date .date-item { -webkit-appearance: none; -moz-appearance: none; appearance: none; background: transparent; border: 0.05rem solid transparent; border-radius: 50%; color: #667189; cursor: pointer; font-size: 0.7rem; height: 1.4rem; line-height: 1rem; outline: none; padding: 0.1rem; position: relative; text-align: center; text-decoration: none; transition: background .2s, border .2s, box-shadow .2s, color .2s; vertical-align: middle; white-space: nowrap; width: 1.4rem; } + +.calendar .calendar-date .date-item.date-today { border-color: #35b9bb; color: #1AA3ED; } + +.calendar .calendar-date .date-item:focus { box-shadow: 0 0 0 0.1rem rgba(26, 163, 237, 0.2); } + +.calendar .calendar-date .date-item:focus, .calendar .calendar-date .date-item:hover { background: #44c8ca; border-color: #35b9bb; color: #1AA3ED; text-decoration: none; } + +.calendar .calendar-date .date-item:active, .calendar .calendar-date .date-item.active { background: #129be6; border-color: #108bce; color: #fff; } + +.calendar .calendar-date .date-item.badge::after { position: absolute; top: 3px; right: 3px; transform: translate(50%, -50%); } + +.calendar .calendar-date .date-item:disabled, .calendar .calendar-date .date-item.disabled, .calendar .calendar-date .calendar-event:disabled, .calendar .calendar-date .calendar-event.disabled { cursor: default; opacity: .25; pointer-events: none; } + +.calendar .calendar-date.prev-month .date-item, .calendar .calendar-date.prev-month .calendar-event, .calendar .calendar-date.next-month .date-item, .calendar .calendar-date.next-month .calendar-event { opacity: .25; } + +.calendar .calendar-range { position: relative; } + +.calendar .calendar-range::before { background: #38C5C7; content: ""; height: 1.4rem; left: 0; position: absolute; right: 0; top: 50%; transform: translateY(-50%); } + +.calendar .calendar-range.range-start::before { left: 50%; } + +.calendar .calendar-range.range-end::before { right: 50%; } + +.calendar .calendar-range.range-start .date-item, .calendar .calendar-range.range-end .date-item { background: #129be6; border-color: #108bce; color: #fff; } + +.calendar .calendar-range .date-item { color: #1AA3ED; } + +.calendar.calendar-lg .calendar-body { padding: 0; } + +.calendar.calendar-lg .calendar-body .calendar-date { border-bottom: 0.05rem solid #e7e9ed; border-right: 0.05rem solid #e7e9ed; display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; height: 5.5rem; padding: 0; } + +.calendar.calendar-lg .calendar-body .calendar-date:nth-child(7n) { border-right: 0; } + +.calendar.calendar-lg .calendar-body .calendar-date:nth-last-child(-n+7) { border-bottom: 0; } + +.calendar.calendar-lg .date-item { -ms-flex-item-align: end; align-self: flex-end; height: 1.4rem; margin-right: 0.2rem; margin-top: 0.2rem; } + +.calendar.calendar-lg .calendar-range::before { top: 19px; } + +.calendar.calendar-lg .calendar-range.range-start::before { left: auto; width: 19px; } + +.calendar.calendar-lg .calendar-range.range-end::before { right: 19px; } + +.calendar.calendar-lg .calendar-events { -ms-flex-positive: 1; flex-grow: 1; line-height: 1; overflow-y: auto; padding: 0.2rem; } + +.calendar.calendar-lg .calendar-event { border-radius: 0.1rem; font-size: 0.7rem; display: block; margin: 0.1rem auto; overflow: hidden; padding: 3px 4px; text-overflow: ellipsis; white-space: nowrap; } + +.carousel .carousel-locator:nth-of-type(1):checked ~ .carousel-container .carousel-item:nth-of-type(1), .carousel .carousel-locator:nth-of-type(2):checked ~ .carousel-container .carousel-item:nth-of-type(2), .carousel .carousel-locator:nth-of-type(3):checked ~ .carousel-container .carousel-item:nth-of-type(3), .carousel .carousel-locator:nth-of-type(4):checked ~ .carousel-container .carousel-item:nth-of-type(4), .carousel .carousel-locator:nth-of-type(5):checked ~ .carousel-container .carousel-item:nth-of-type(5), .carousel .carousel-locator:nth-of-type(6):checked ~ .carousel-container .carousel-item:nth-of-type(6), .carousel .carousel-locator:nth-of-type(7):checked ~ .carousel-container .carousel-item:nth-of-type(7), .carousel .carousel-locator:nth-of-type(8):checked ~ .carousel-container .carousel-item:nth-of-type(8) { animation: carousel-slidein .75s ease-in-out 1; opacity: 1; z-index: 100; } + +.carousel .carousel-locator:nth-of-type(1):checked ~ .carousel-nav .nav-item:nth-of-type(1), .carousel .carousel-locator:nth-of-type(2):checked ~ .carousel-nav .nav-item:nth-of-type(2), .carousel .carousel-locator:nth-of-type(3):checked ~ .carousel-nav .nav-item:nth-of-type(3), .carousel .carousel-locator:nth-of-type(4):checked ~ .carousel-nav .nav-item:nth-of-type(4), .carousel .carousel-locator:nth-of-type(5):checked ~ .carousel-nav .nav-item:nth-of-type(5), .carousel .carousel-locator:nth-of-type(6):checked ~ .carousel-nav .nav-item:nth-of-type(6), .carousel .carousel-locator:nth-of-type(7):checked ~ .carousel-nav .nav-item:nth-of-type(7), .carousel .carousel-locator:nth-of-type(8):checked ~ .carousel-nav .nav-item:nth-of-type(8) { color: #e7e9ed; } + +.carousel { background: #f8f9fa; display: block; overflow: hidden; position: relative; width: 100%; -webkit-overflow-scrolling: touch; z-index: 1; } + +.carousel .carousel-container { height: 100%; left: 0; position: relative; } + +.carousel .carousel-container::before { content: ""; display: block; padding-bottom: 56.25%; } + +.carousel .carousel-container .carousel-item { animation: carousel-slideout 1s ease-in-out 1; height: 100%; left: 0; margin: 0; opacity: 0; position: absolute; top: 0; width: 100%; } + +.carousel .carousel-container .carousel-item:hover .item-prev, .carousel .carousel-container .carousel-item:hover .item-next { opacity: 1; } + +.carousel .carousel-container .item-prev, .carousel .carousel-container .item-next { background: rgba(231, 233, 237, 0.25); border-color: rgba(231, 233, 237, 0.5); color: #e7e9ed; opacity: 0; position: absolute; top: 50%; transition: all .4s; transform: translateY(-50%); z-index: 100; } + +.carousel .carousel-container .item-prev { left: 1rem; } + +.carousel .carousel-container .item-next { right: 1rem; } + +.carousel .carousel-nav { bottom: 0.4rem; display: -ms-flexbox; display: flex; -ms-flex-pack: center; justify-content: center; left: 50%; position: absolute; transform: translateX(-50%); width: 10rem; z-index: 100; } + +.carousel .carousel-nav .nav-item { color: rgba(231, 233, 237, 0.5); display: block; -ms-flex: 1 0 auto; flex: 1 0 auto; height: 1.6rem; margin: 0.2rem; max-width: 2.5rem; position: relative; } + +.carousel .carousel-nav .nav-item::before { background: currentColor; content: ""; display: block; height: 0.1rem; position: absolute; top: .5rem; width: 100%; } + +@keyframes carousel-slidein { 0% { transform: translateX(100%); } + 100% { transform: translateX(0); } } + +@keyframes carousel-slideout { 0% { opacity: 1; + transform: translateX(0); } + 100% { opacity: 1; + transform: translateX(-50%); } } + +.comparison-slider { height: 50vh; overflow: hidden; position: relative; width: 100%; -webkit-overflow-scrolling: touch; } + +.comparison-slider .comparison-before, .comparison-slider .comparison-after { height: 100%; left: 0; margin: 0; overflow: hidden; position: absolute; top: 0; } + +.comparison-slider .comparison-before img, .comparison-slider .comparison-after img { height: 100%; object-fit: cover; object-position: left center; position: absolute; width: 100%; } + +.comparison-slider .comparison-before { width: 100%; z-index: 1; } + +.comparison-slider .comparison-before .comparison-label { right: 0.8rem; } + +.comparison-slider .comparison-after { max-width: 100%; min-width: 0; z-index: 2; } + +.comparison-slider .comparison-after::before { background: transparent; content: ""; cursor: default; height: 100%; left: 0; position: absolute; right: 0.8rem; top: 0; z-index: 1; } + +.comparison-slider .comparison-after::after { background: currentColor; border-radius: 50%; box-shadow: 0 -5px, 0 5px; color: #fff; content: ""; height: 3px; position: absolute; right: 0.4rem; top: 50%; transform: translate(50%, -50%); width: 3px; } + +.comparison-slider .comparison-after .comparison-label { left: 0.8rem; } + +.comparison-slider .comparison-resizer { animation: first-run 1.5s 1 ease-in-out; cursor: ew-resize; height: 0.8rem; left: 0; max-width: 100%; min-width: 0.8rem; opacity: 0; outline: none; position: relative; resize: horizontal; top: 50%; transform: translateY(-50%) scaleY(30); width: 0; } + +.comparison-slider .comparison-label { background: rgba(69, 77, 93, 0.5); bottom: 0.8rem; color: #fff; padding: 0.2rem 0.4rem; position: absolute; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } + +@keyframes first-run { 0% { width: 0; } + 25% { width: 2.4rem; } + 50% { width: 0.8rem; } + 75% { width: 1.2rem; } + 100% { width: 0; } } + +.filter .filter-tag#tag-0:checked ~ .filter-nav .chip[for="tag-0"], .filter .filter-tag#tag-1:checked ~ .filter-nav .chip[for="tag-1"], .filter .filter-tag#tag-2:checked ~ .filter-nav .chip[for="tag-2"], .filter .filter-tag#tag-3:checked ~ .filter-nav .chip[for="tag-3"], .filter .filter-tag#tag-4:checked ~ .filter-nav .chip[for="tag-4"], .filter .filter-tag#tag-5:checked ~ .filter-nav .chip[for="tag-5"], .filter .filter-tag#tag-6:checked ~ .filter-nav .chip[for="tag-6"], .filter .filter-tag#tag-7:checked ~ .filter-nav .chip[for="tag-7"], .filter .filter-tag#tag-8:checked ~ .filter-nav .chip[for="tag-8"] { background: #1AA3ED; color: #fff; } + +.filter .filter-tag#tag-1:checked ~ .filter-body .filter-item:not([data-tag~="tag-1"]), .filter .filter-tag#tag-2:checked ~ .filter-body .filter-item:not([data-tag~="tag-2"]), .filter .filter-tag#tag-3:checked ~ .filter-body .filter-item:not([data-tag~="tag-3"]), .filter .filter-tag#tag-4:checked ~ .filter-body .filter-item:not([data-tag~="tag-4"]), .filter .filter-tag#tag-5:checked ~ .filter-body .filter-item:not([data-tag~="tag-5"]), .filter .filter-tag#tag-6:checked ~ .filter-body .filter-item:not([data-tag~="tag-6"]), .filter .filter-tag#tag-7:checked ~ .filter-body .filter-item:not([data-tag~="tag-7"]), .filter .filter-tag#tag-8:checked ~ .filter-body .filter-item:not([data-tag~="tag-8"]) { display: none; } + +.filter .filter-nav { margin: 0.4rem 0; } + +.filter .filter-body { display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; } + +.meter { -webkit-appearance: none; -moz-appearance: none; appearance: none; background: #f8f9fa; border: 0; border-radius: 0.1rem; display: block; width: 100%; height: 0.8rem; } + +.meter::-webkit-meter-inner-element { display: block; } + +.meter::-webkit-meter-bar, .meter::-webkit-meter-optimum-value, .meter::-webkit-meter-suboptimum-value, .meter::-webkit-meter-even-less-good-value { border-radius: 0.1rem; } + +.meter::-webkit-meter-bar { background: #f8f9fa; } + +.meter::-webkit-meter-optimum-value { background: #32b643; } + +.meter::-webkit-meter-suboptimum-value { background: #ffb700; } + +.meter::-webkit-meter-even-less-good-value { background: #e85600; } + +.meter::-moz-meter-bar, .meter:-moz-meter-optimum, .meter:-moz-meter-sub-optimum, .meter:-moz-meter-sub-sub-optimum { border-radius: 0.1rem; } + +.meter:-moz-meter-optimum::-moz-meter-bar { background: #32b643; } + +.meter:-moz-meter-sub-optimum::-moz-meter-bar { background: #ffb700; } + +.meter:-moz-meter-sub-sub-optimum::-moz-meter-bar { background: #e85600; } + +.off-canvas { display: -ms-flexbox; display: flex; -ms-flex-flow: nowrap; flex-flow: nowrap; height: 100%; position: relative; width: 100%; } + +.off-canvas .off-canvas-toggle { display: block; position: absolute; top: 0.4rem; transition: none; z-index: 1; left: 0.4rem; } + +.off-canvas .off-canvas-sidebar { background: #f8f9fa; bottom: 0; min-width: 10rem; overflow-y: auto; position: fixed; top: 0; transition: transform .25s; z-index: 200; left: 0; transform: translateX(-100%); } + +.off-canvas .off-canvas-content { -ms-flex: 1 1 auto; flex: 1 1 auto; height: 100%; padding: 0.4rem 0.4rem 0.4rem 4rem; } + +.off-canvas .off-canvas-overlay { background: rgba(69, 77, 93, 0.1); border-color: transparent; border-radius: 0; bottom: 0; display: none; height: 100%; left: 0; position: fixed; right: 0; top: 0; width: 100%; } + +.off-canvas .off-canvas-sidebar:target, .off-canvas .off-canvas-sidebar.active { transform: translateX(0); } + +.off-canvas .off-canvas-sidebar:target ~ .off-canvas-overlay, .off-canvas .off-canvas-sidebar.active ~ .off-canvas-overlay { display: block; z-index: 100; } + +@media (min-width: 960px) { .off-canvas.off-canvas-sidebar-show .off-canvas-toggle { display: none; } + .off-canvas.off-canvas-sidebar-show .off-canvas-sidebar { -ms-flex: 0 0 auto; flex: 0 0 auto; position: relative; transform: none; } + .off-canvas.off-canvas-sidebar-show .off-canvas-overlay { display: none !important; } } + +.parallax { display: block; height: auto; position: relative; width: auto; } + +.parallax .parallax-content { box-shadow: 0 1rem 2.1rem rgba(69, 77, 93, 0.3); height: auto; transform: perspective(1000px); transform-style: preserve-3d; transition: all .4s ease; width: 100%; } + +.parallax .parallax-content::before { content: ""; display: block; height: 100%; left: 0; position: absolute; top: 0; width: 100%; } + +.parallax .parallax-front { -ms-flex-align: center; align-items: center; color: #fff; display: -ms-flexbox; display: flex; height: 100%; -ms-flex-pack: center; justify-content: center; left: 0; position: absolute; text-align: center; text-shadow: 0 0 20px rgba(69, 77, 93, 0.75); top: 0; transform: translateZ(50px) scale(0.95); transition: transform .4s; width: 100%; z-index: 1; } + +.parallax .parallax-top-left { height: 50%; outline: none; position: absolute; width: 50%; z-index: 100; left: 0; top: 0; } + +.parallax .parallax-top-left:focus ~ .parallax-content, .parallax .parallax-top-left:hover ~ .parallax-content { transform: perspective(1000px) rotateX(3deg) rotateY(-3deg); } + +.parallax .parallax-top-left:focus ~ .parallax-content::before, .parallax .parallax-top-left:hover ~ .parallax-content::before { background: linear-gradient(135deg, rgba(255, 255, 255, 0.35) 0%, transparent 50%); } + +.parallax .parallax-top-left:focus ~ .parallax-content .parallax-front, .parallax .parallax-top-left:hover ~ .parallax-content .parallax-front { transform: translate3d(4.5px, 4.5px, 50px) scale(0.95); } + +.parallax .parallax-top-right { height: 50%; outline: none; position: absolute; width: 50%; z-index: 100; right: 0; top: 0; } + +.parallax .parallax-top-right:focus ~ .parallax-content, .parallax .parallax-top-right:hover ~ .parallax-content { transform: perspective(1000px) rotateX(3deg) rotateY(3deg); } + +.parallax .parallax-top-right:focus ~ .parallax-content::before, .parallax .parallax-top-right:hover ~ .parallax-content::before { background: linear-gradient(-135deg, rgba(255, 255, 255, 0.35) 0%, transparent 50%); } + +.parallax .parallax-top-right:focus ~ .parallax-content .parallax-front, .parallax .parallax-top-right:hover ~ .parallax-content .parallax-front { transform: translate3d(-4.5px, 4.5px, 50px) scale(0.95); } + +.parallax .parallax-bottom-left { height: 50%; outline: none; position: absolute; width: 50%; z-index: 100; bottom: 0; left: 0; } + +.parallax .parallax-bottom-left:focus ~ .parallax-content, .parallax .parallax-bottom-left:hover ~ .parallax-content { transform: perspective(1000px) rotateX(-3deg) rotateY(-3deg); } + +.parallax .parallax-bottom-left:focus ~ .parallax-content::before, .parallax .parallax-bottom-left:hover ~ .parallax-content::before { background: linear-gradient(45deg, rgba(255, 255, 255, 0.35) 0%, transparent 50%); } + +.parallax .parallax-bottom-left:focus ~ .parallax-content .parallax-front, .parallax .parallax-bottom-left:hover ~ .parallax-content .parallax-front { transform: translate3d(4.5px, -4.5px, 50px) scale(0.95); } + +.parallax .parallax-bottom-right { height: 50%; outline: none; position: absolute; width: 50%; z-index: 100; bottom: 0; right: 0; } + +.parallax .parallax-bottom-right:focus ~ .parallax-content, .parallax .parallax-bottom-right:hover ~ .parallax-content { transform: perspective(1000px) rotateX(-3deg) rotateY(3deg); } + +.parallax .parallax-bottom-right:focus ~ .parallax-content::before, .parallax .parallax-bottom-right:hover ~ .parallax-content::before { background: linear-gradient(-45deg, rgba(255, 255, 255, 0.35) 0%, transparent 50%); } + +.parallax .parallax-bottom-right:focus ~ .parallax-content .parallax-front, .parallax .parallax-bottom-right:hover ~ .parallax-content .parallax-front { transform: translate3d(-4.5px, -4.5px, 50px) scale(0.95); } + +.progress { -webkit-appearance: none; -moz-appearance: none; appearance: none; background: #f0f1f4; border: 0; border-radius: 0.1rem; color: #1AA3ED; height: 0.2rem; position: relative; width: 100%; } + +.progress::-webkit-progress-bar { background: transparent; border-radius: 0.1rem; } + +.progress::-webkit-progress-value { background: #1AA3ED; border-radius: 0.1rem; } + +.progress::-moz-progress-bar { background: #1AA3ED; border-radius: 0.1rem; } + +.progress:indeterminate { animation: progress-indeterminate 1.5s linear infinite; background: #f0f1f4 linear-gradient(to right, #1AA3ED 30%, #f0f1f4 30%) top left/150% 150% no-repeat; } + +.progress:indeterminate::-moz-progress-bar { background: transparent; } + +@keyframes progress-indeterminate { 0% { background-position: 200% 0; } + 100% { background-position: -200% 0; } } + +.slider { -webkit-appearance: none; -moz-appearance: none; appearance: none; background: transparent; display: block; width: 100%; height: 1.2rem; } + +.slider:focus { box-shadow: 0 0 0 0.1rem rgba(26, 163, 237, 0.2); outline: none; } + +.slider.tooltip:not([data-tooltip])::after { content: attr(value); } + +.slider::-webkit-slider-thumb { -webkit-appearance: none; background: #1AA3ED; border: 0; border-radius: 50%; height: 0.6rem; margin-top: -0.25rem; transition: transform .2s; width: 0.6rem; } + +.slider::-moz-range-thumb { background: #1AA3ED; border: 0; border-radius: 50%; height: 0.6rem; transition: transform .2s; width: 0.6rem; } + +.slider::-ms-thumb { background: #1AA3ED; border: 0; border-radius: 50%; height: 0.6rem; transition: transform .2s; width: 0.6rem; } + +.slider:active::-webkit-slider-thumb { transform: scale(1.25); } + +.slider:active::-moz-range-thumb { transform: scale(1.25); } + +.slider:active::-ms-thumb { transform: scale(1.25); } + +.slider:disabled::-webkit-slider-thumb, .slider.disabled::-webkit-slider-thumb { background: #e7e9ed; transform: scale(1); } + +.slider:disabled::-moz-range-thumb, .slider.disabled::-moz-range-thumb { background: #e7e9ed; transform: scale(1); } + +.slider:disabled::-ms-thumb, .slider.disabled::-ms-thumb { background: #e7e9ed; transform: scale(1); } + +.slider::-webkit-slider-runnable-track { background: #f0f1f4; border-radius: 0.1rem; height: 0.1rem; width: 100%; } + +.slider::-moz-range-track { background: #f0f1f4; border-radius: 0.1rem; height: 0.1rem; width: 100%; } + +.slider::-ms-track { background: #f0f1f4; border-radius: 0.1rem; height: 0.1rem; width: 100%; } + +.slider::-ms-fill-lower { background: #1AA3ED; } + +.timeline .timeline-item { display: -ms-flexbox; display: flex; margin-bottom: 1.2rem; position: relative; } + +.timeline .timeline-item::before { background: #e7e9ed; content: ""; height: 100%; left: 11px; position: absolute; top: 1.2rem; width: 2px; } + +.timeline .timeline-item .timeline-left { -ms-flex: 0 0 auto; flex: 0 0 auto; } + +.timeline .timeline-item .timeline-content { -ms-flex: 1 1 auto; flex: 1 1 auto; padding: 2px 0 2px 0.8rem; } + +.timeline .timeline-item .timeline-icon { -ms-flex-align: center; align-items: center; border-radius: 50%; color: #fff; display: -ms-flexbox; display: flex; height: 1.2rem; -ms-flex-pack: center; justify-content: center; text-align: center; width: 1.2rem; } + +.timeline .timeline-item .timeline-icon::before { border: 0.1rem solid #1AA3ED; border-radius: 50%; content: ""; display: block; height: 0.4rem; left: 0.4rem; position: absolute; top: 0.4rem; width: 0.4rem; } + +.timeline .timeline-item .timeline-icon.icon-lg { background: #1AA3ED; line-height: 1.2rem; } + +.timeline .timeline-item .timeline-icon.icon-lg::before { content: none; } + +.viewer-360 { -ms-flex-align: center; align-items: center; display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; } + +.viewer-360 .viewer-slider[max='36'][value='1'] + .viewer-image { background-position-y: 0%; } + +.viewer-360 .viewer-slider[max='36'][value='2'] + .viewer-image { background-position-y: 2.8571428571%; } + +.viewer-360 .viewer-slider[max='36'][value='3'] + .viewer-image { background-position-y: 5.7142857143%; } + +.viewer-360 .viewer-slider[max='36'][value='4'] + .viewer-image { background-position-y: 8.5714285714%; } + +.viewer-360 .viewer-slider[max='36'][value='5'] + .viewer-image { background-position-y: 11.4285714286%; } + +.viewer-360 .viewer-slider[max='36'][value='6'] + .viewer-image { background-position-y: 14.2857142857%; } + +.viewer-360 .viewer-slider[max='36'][value='7'] + .viewer-image { background-position-y: 17.1428571429%; } + +.viewer-360 .viewer-slider[max='36'][value='8'] + .viewer-image { background-position-y: 20%; } + +.viewer-360 .viewer-slider[max='36'][value='9'] + .viewer-image { background-position-y: 22.8571428571%; } + +.viewer-360 .viewer-slider[max='36'][value='10'] + .viewer-image { background-position-y: 25.7142857143%; } + +.viewer-360 .viewer-slider[max='36'][value='11'] + .viewer-image { background-position-y: 28.5714285714%; } + +.viewer-360 .viewer-slider[max='36'][value='12'] + .viewer-image { background-position-y: 31.4285714286%; } + +.viewer-360 .viewer-slider[max='36'][value='13'] + .viewer-image { background-position-y: 34.2857142857%; } + +.viewer-360 .viewer-slider[max='36'][value='14'] + .viewer-image { background-position-y: 37.1428571429%; } + +.viewer-360 .viewer-slider[max='36'][value='15'] + .viewer-image { background-position-y: 40%; } + +.viewer-360 .viewer-slider[max='36'][value='16'] + .viewer-image { background-position-y: 42.8571428571%; } + +.viewer-360 .viewer-slider[max='36'][value='17'] + .viewer-image { background-position-y: 45.7142857143%; } + +.viewer-360 .viewer-slider[max='36'][value='18'] + .viewer-image { background-position-y: 48.5714285714%; } + +.viewer-360 .viewer-slider[max='36'][value='19'] + .viewer-image { background-position-y: 51.4285714286%; } + +.viewer-360 .viewer-slider[max='36'][value='20'] + .viewer-image { background-position-y: 54.2857142857%; } + +.viewer-360 .viewer-slider[max='36'][value='21'] + .viewer-image { background-position-y: 57.1428571429%; } + +.viewer-360 .viewer-slider[max='36'][value='22'] + .viewer-image { background-position-y: 60%; } + +.viewer-360 .viewer-slider[max='36'][value='23'] + .viewer-image { background-position-y: 62.8571428571%; } + +.viewer-360 .viewer-slider[max='36'][value='24'] + .viewer-image { background-position-y: 65.7142857143%; } + +.viewer-360 .viewer-slider[max='36'][value='25'] + .viewer-image { background-position-y: 68.5714285714%; } + +.viewer-360 .viewer-slider[max='36'][value='26'] + .viewer-image { background-position-y: 71.4285714286%; } + +.viewer-360 .viewer-slider[max='36'][value='27'] + .viewer-image { background-position-y: 74.2857142857%; } + +.viewer-360 .viewer-slider[max='36'][value='28'] + .viewer-image { background-position-y: 77.1428571429%; } + +.viewer-360 .viewer-slider[max='36'][value='29'] + .viewer-image { background-position-y: 80%; } + +.viewer-360 .viewer-slider[max='36'][value='30'] + .viewer-image { background-position-y: 82.8571428571%; } + +.viewer-360 .viewer-slider[max='36'][value='31'] + .viewer-image { background-position-y: 85.7142857143%; } + +.viewer-360 .viewer-slider[max='36'][value='32'] + .viewer-image { background-position-y: 88.5714285714%; } + +.viewer-360 .viewer-slider[max='36'][value='33'] + .viewer-image { background-position-y: 91.4285714286%; } + +.viewer-360 .viewer-slider[max='36'][value='34'] + .viewer-image { background-position-y: 94.2857142857%; } + +.viewer-360 .viewer-slider[max='36'][value='35'] + .viewer-image { background-position-y: 97.1428571429%; } + +.viewer-360 .viewer-slider[max='36'][value='36'] + .viewer-image { background-position-y: 100%; } + +.viewer-360 .viewer-slider { cursor: ew-resize; margin: 1rem; -ms-flex-order: 2; order: 2; width: 60%; } + +.viewer-360 .viewer-image { background-position-y: 0; background-repeat: no-repeat; background-size: 100%; max-width: 100%; -ms-flex-order: 1; order: 1; } + +/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlY3RyZS1leHAuY3NzIiwic291cmNlcyI6WyJzcGVjdHJlLWV4cC5zY3NzIiwidGhlbWUvX3ZhcmlhYmxlcy5zY3NzIiwic3BlY3RyZS9fdmFyaWFibGVzLnNjc3MiLCJzcGVjdHJlL19taXhpbnMuc2NzcyIsInNwZWN0cmUvbWl4aW5zL19hdmF0YXIuc2NzcyIsInNwZWN0cmUvbWl4aW5zL19idXR0b24uc2NzcyIsInNwZWN0cmUvbWl4aW5zL19jbGVhcmZpeC5zY3NzIiwic3BlY3RyZS9taXhpbnMvX2NvbG9yLnNjc3MiLCJzcGVjdHJlL21peGlucy9fbGFiZWwuc2NzcyIsInNwZWN0cmUvbWl4aW5zL19wb3NpdGlvbi5zY3NzIiwic3BlY3RyZS9taXhpbnMvX3NoYWRvdy5zY3NzIiwic3BlY3RyZS9taXhpbnMvX3RleHQuc2NzcyIsInNwZWN0cmUvbWl4aW5zL190b2FzdC5zY3NzIiwic3BlY3RyZS9fYXV0b2NvbXBsZXRlLnNjc3MiLCJzcGVjdHJlL19jYWxlbmRhcnMuc2NzcyIsInNwZWN0cmUvX2Nhcm91c2Vscy5zY3NzIiwic3BlY3RyZS9fY29tcGFyaXNvbi1zbGlkZXJzLnNjc3MiLCJzcGVjdHJlL19maWx0ZXJzLnNjc3MiLCJzcGVjdHJlL19tZXRlcnMuc2NzcyIsInNwZWN0cmUvX29mZi1jYW52YXMuc2NzcyIsInNwZWN0cmUvX3BhcmFsbGF4LnNjc3MiLCJzcGVjdHJlL19wcm9ncmVzcy5zY3NzIiwic3BlY3RyZS9fc2xpZGVycy5zY3NzIiwic3BlY3RyZS9fdGltZWxpbmVzLnNjc3MiLCJzcGVjdHJlL192aWV3ZXItMzYwLnNjc3MiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVmFyaWFibGVzIGFuZCBtaXhpbnNcbkBpbXBvcnQgXCJ0aGVtZS92YXJpYWJsZXNcIjtcbkBpbXBvcnQgXCJzcGVjdHJlL3ZhcmlhYmxlc1wiO1xuQGltcG9ydCBcInNwZWN0cmUvbWl4aW5zXCI7XG5cbi8qISBTcGVjdHJlLmNzcyBFeHBlcmltZW50YWxzIHYjeyR2ZXJzaW9ufSB8IE1JVCBMaWNlbnNlIHwgZ2l0aHViLmNvbS9waWN0dXJlcGFuMi9zcGVjdHJlICovXG4vLyBFeHBlcmltZW50YWxzXG5AaW1wb3J0IFwic3BlY3RyZS9hdXRvY29tcGxldGVcIjtcbkBpbXBvcnQgXCJzcGVjdHJlL2NhbGVuZGFyc1wiO1xuQGltcG9ydCBcInNwZWN0cmUvY2Fyb3VzZWxzXCI7XG5AaW1wb3J0IFwic3BlY3RyZS9jb21wYXJpc29uLXNsaWRlcnNcIjtcbkBpbXBvcnQgXCJzcGVjdHJlL2ZpbHRlcnNcIjtcbkBpbXBvcnQgXCJzcGVjdHJlL21ldGVyc1wiO1xuQGltcG9ydCBcInNwZWN0cmUvb2ZmLWNhbnZhc1wiO1xuQGltcG9ydCBcInNwZWN0cmUvcGFyYWxsYXhcIjtcbkBpbXBvcnQgXCJzcGVjdHJlL3Byb2dyZXNzXCI7XG5AaW1wb3J0IFwic3BlY3RyZS9zbGlkZXJzXCI7XG5AaW1wb3J0IFwic3BlY3RyZS90aW1lbGluZXNcIjtcbkBpbXBvcnQgXCJzcGVjdHJlL3ZpZXdlci0zNjBcIjtcbiIsIi8vIENvbG9yc1xuJHR1cnF1b2lzZTogIzFBQkM5QztcbiRncmVlbi1zZWE6ICMxNkEwODU7XG4kZW1lcmFsZDogIzJFQ0M3MTtcbiRuZXBocml0aXM6ICMyN0FFNjA7XG4kcGV0ZXItcml2ZXI6ICMzNDk4REI7XG4kYmVsaXplX2hvbGU6ICMyOTgwQjk7XG4kZGVlcC13ZWxsOiAjMjgzQTYzO1xuJGxhdmVuZGVyOiAjNzY3NmY0O1xuJGFtZXRoeXN0OiAjQTY2QkJFO1xuJHdpc3RlcmlhOiAjOEU0NEFEO1xuJHdldC1hc3BoYWx0OiAjMzQ0OTVFO1xuJG1pZG5pZ2h0LWJsdWU6ICMyQzNFNTA7XG4kc3VuZmxvd2VyOiAjRjJDQTI3O1xuJG9yYW5nZTogI0YzOUMxMjtcbiRjYXJyb3Q6ICNFNjdFMjI7XG4kcHVtcGtpbjogI0QzNTQwMDtcbiRhbGl6YXJpbjogI0U3NEMzQztcbiRwb21lZ3JhbmF0ZTogI0MwMzkyQjtcbiRjbG91ZHM6ICNFQ0YwRjE7XG4kc2lsdmVyOiAjQkRDM0M3O1xuJGNvbmNyZXRlOiAjOTVBNUE2O1xuJGFzYmVzdG9zOiAjN0Y4QzhEO1xuXG4kcHJpbWFyeS1jb2xvcjogIzFBQTNFRCAhZGVmYXVsdDtcbiRzZWNvbmRhcnktY29sb3I6ICMzOEM1QzcgIWRlZmF1bHQ7XG4kZGFyay1jb2xvcjogIzQ1NGQ1ZCAhZGVmYXVsdDtcbiRib2R5LWZvbnQtY29sb3I6IGRhcmtlbigkZGFyay1jb2xvciwgNSUpICFkZWZhdWx0O1xuJGxpbmstY29sb3I6IGRhcmtlbigkcHJpbWFyeS1jb2xvciwgNSUpICFkZWZhdWx0O1xuJGdyYXktY29sb3I6IGxpZ2h0ZW4oJGRhcmstY29sb3IsIDQwJSkgIWRlZmF1bHQ7XG4kZ3JheS1jb2xvci1kYXJrOiBkYXJrZW4oJGdyYXktY29sb3IsIDI1JSkgIWRlZmF1bHQ7XG4kYm9yZGVyLWNvbG9yOiBsaWdodGVuKCRkYXJrLWNvbG9yLCA2MCUpICFkZWZhdWx0O1xuJGJnLWNvbG9yOiBsaWdodGVuKCRkYXJrLWNvbG9yLCA2NiUpICFkZWZhdWx0O1xuJGNvZGUtY29sb3I6ICRsYXZlbmRlciAhZGVmYXVsdDtcbiRzZWxlY3Rpb24tY29sb3I6ICNFQ0VDRkU7XG5cbi8vIFNpZGViYXJcbiRzaWRlYmFyLXdpZHRoOiAxNHJlbTtcbiRzaWRlYmFyLWJyYW5kLWhlaWdodDogN3JlbTtcblxuLy8gRm9udHNcbiRiYXNlLWZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBzeXN0ZW0tdWksIEJsaW5rTWFjU3lzdGVtRm9udCwgXCJTZWdvZSBVSVwiLCBSb2JvdG8gIWRlZmF1bHQ7XG4kZmFsbGJhY2stZm9udC1mYW1pbHk6IFwiSGVsdmV0aWNhIE5ldWVcIiwgc2Fucy1zZXJpZiAhZGVmYXVsdDtcbiRib2R5LWZvbnQtZmFtaWx5OiBcIlB1YmxpYyBTYW5zXCIsICAkZmFsbGJhY2stZm9udC1mYW1pbHkgIWRlZmF1bHQ7XG4kdGl0bGUtZm9udC1mYW1pbHk6IFwiTWV0cm9wb2xpc1wiLCAkZmFsbGJhY2stZm9udC1mYW1pbHkgIWRlZmF1bHQ7XG4kbW9uby1mb250LWZhbWlseTogXCJIYWNrXCIsIG1vbm9zcGFjZSAhZGVmYXVsdDtcbiRmb250LXNpemU6IC44NXJlbSAhZGVmYXVsdDtcbiRtaW4tcmVzcG9uc2l2ZS1mb250LXNpemU6IDE4cHg7XG4iLCIvLyBDb3JlIHZhcmlhYmxlc1xuJHZlcnNpb246IFwiMC41LjhcIjtcblxuLy8gQ29yZSBmZWF0dXJlc1xuJHJ0bDogZmFsc2UgIWRlZmF1bHQ7XG5cbi8vIENvcmUgY29sb3JzXG4kcHJpbWFyeS1jb2xvcjogIzU3NTVkOSAhZGVmYXVsdDtcbiRwcmltYXJ5LWNvbG9yLWRhcms6IGRhcmtlbigkcHJpbWFyeS1jb2xvciwgMyUpICFkZWZhdWx0O1xuJHByaW1hcnktY29sb3ItbGlnaHQ6IGxpZ2h0ZW4oJHByaW1hcnktY29sb3IsIDMlKSAhZGVmYXVsdDtcbiRzZWNvbmRhcnktY29sb3I6IGxpZ2h0ZW4oJHByaW1hcnktY29sb3IsIDM3LjUlKSAhZGVmYXVsdDtcbiRzZWNvbmRhcnktY29sb3ItZGFyazogZGFya2VuKCRzZWNvbmRhcnktY29sb3IsIDMlKSAhZGVmYXVsdDtcbiRzZWNvbmRhcnktY29sb3ItbGlnaHQ6IGxpZ2h0ZW4oJHNlY29uZGFyeS1jb2xvciwgMyUpICFkZWZhdWx0O1xuXG4vLyBHcmF5IGNvbG9yc1xuJGRhcmstY29sb3I6ICMzMDM3NDIgIWRlZmF1bHQ7XG4kbGlnaHQtY29sb3I6ICNmZmYgIWRlZmF1bHQ7XG4kZ3JheS1jb2xvcjogbGlnaHRlbigkZGFyay1jb2xvciwgNTUlKSAhZGVmYXVsdDtcbiRncmF5LWNvbG9yLWRhcms6IGRhcmtlbigkZ3JheS1jb2xvciwgMzAlKSAhZGVmYXVsdDtcbiRncmF5LWNvbG9yLWxpZ2h0OiBsaWdodGVuKCRncmF5LWNvbG9yLCAyMCUpICFkZWZhdWx0O1xuXG4kYm9yZGVyLWNvbG9yOiBsaWdodGVuKCRkYXJrLWNvbG9yLCA2NSUpICFkZWZhdWx0O1xuJGJvcmRlci1jb2xvci1kYXJrOiBkYXJrZW4oJGJvcmRlci1jb2xvciwgMTAlKSAhZGVmYXVsdDtcbiRib3JkZXItY29sb3ItbGlnaHQ6IGxpZ2h0ZW4oJGJvcmRlci1jb2xvciwgOCUpICFkZWZhdWx0O1xuJGJnLWNvbG9yOiBsaWdodGVuKCRkYXJrLWNvbG9yLCA3NSUpICFkZWZhdWx0O1xuJGJnLWNvbG9yLWRhcms6IGRhcmtlbigkYmctY29sb3IsIDMlKSAhZGVmYXVsdDtcbiRiZy1jb2xvci1saWdodDogJGxpZ2h0LWNvbG9yICFkZWZhdWx0O1xuXG4vLyBDb250cm9sIGNvbG9yc1xuJHN1Y2Nlc3MtY29sb3I6ICMzMmI2NDMgIWRlZmF1bHQ7XG4kd2FybmluZy1jb2xvcjogI2ZmYjcwMCAhZGVmYXVsdDtcbiRlcnJvci1jb2xvcjogI2U4NTYwMCAhZGVmYXVsdDtcblxuLy8gT3RoZXIgY29sb3JzXG4kY29kZS1jb2xvcjogI2Q3M2U0OCAhZGVmYXVsdDtcbiRoaWdobGlnaHQtY29sb3I6ICNmZmU5YjMgIWRlZmF1bHQ7XG4kYm9keS1iZzogJGJnLWNvbG9yLWxpZ2h0ICFkZWZhdWx0O1xuJGJvZHktZm9udC1jb2xvcjogbGlnaHRlbigkZGFyay1jb2xvciwgNSUpICFkZWZhdWx0O1xuJGxpbmstY29sb3I6ICRwcmltYXJ5LWNvbG9yICFkZWZhdWx0O1xuJGxpbmstY29sb3ItZGFyazogZGFya2VuKCRsaW5rLWNvbG9yLCAxMCUpICFkZWZhdWx0O1xuJGxpbmstY29sb3ItbGlnaHQ6IGxpZ2h0ZW4oJGxpbmstY29sb3IsIDEwJSkgIWRlZmF1bHQ7XG5cbi8vIEZvbnRzXG4vLyBDcmVkaXQ6IGh0dHBzOi8vd3d3LnNtYXNoaW5nbWFnYXppbmUuY29tLzIwMTUvMTEvdXNpbmctc3lzdGVtLXVpLWZvbnRzLXByYWN0aWNhbC1ndWlkZS9cbiRiYXNlLWZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBzeXN0ZW0tdWksIEJsaW5rTWFjU3lzdGVtRm9udCwgXCJTZWdvZSBVSVwiLCBSb2JvdG8gIWRlZmF1bHQ7XG4kbW9uby1mb250LWZhbWlseTogXCJTRiBNb25vXCIsIFwiU2Vnb2UgVUkgTW9ub1wiLCBcIlJvYm90byBNb25vXCIsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2UgIWRlZmF1bHQ7XG4kZmFsbGJhY2stZm9udC1mYW1pbHk6IFwiSGVsdmV0aWNhIE5ldWVcIiwgc2Fucy1zZXJpZiAhZGVmYXVsdDtcbiRjamstemgtaGFucy1mb250LWZhbWlseTogJGJhc2UtZm9udC1mYW1pbHksIFwiUGluZ0ZhbmcgU0NcIiwgXCJIaXJhZ2lubyBTYW5zIEdCXCIsIFwiTWljcm9zb2Z0IFlhSGVpXCIsICRmYWxsYmFjay1mb250LWZhbWlseSAhZGVmYXVsdDtcbiRjamstemgtaGFudC1mb250LWZhbWlseTogJGJhc2UtZm9udC1mYW1pbHksIFwiUGluZ0ZhbmcgVENcIiwgXCJIaXJhZ2lubyBTYW5zIENOU1wiLCBcIk1pY3Jvc29mdCBKaGVuZ0hlaVwiLCAkZmFsbGJhY2stZm9udC1mYW1pbHkgIWRlZmF1bHQ7XG4kY2prLWpwLWZvbnQtZmFtaWx5OiAkYmFzZS1mb250LWZhbWlseSwgXCJIaXJhZ2lubyBTYW5zXCIsIFwiSGlyYWdpbm8gS2FrdSBHb3RoaWMgUHJvXCIsIFwiWXUgR290aGljXCIsIFl1R290aGljLCBNZWlyeW8sICRmYWxsYmFjay1mb250LWZhbWlseSAhZGVmYXVsdDtcbiRjamsta28tZm9udC1mYW1pbHk6ICRiYXNlLWZvbnQtZmFtaWx5LCBcIk1hbGd1biBHb3RoaWNcIiwgJGZhbGxiYWNrLWZvbnQtZmFtaWx5ICFkZWZhdWx0O1xuJGJvZHktZm9udC1mYW1pbHk6ICRiYXNlLWZvbnQtZmFtaWx5LCAkZmFsbGJhY2stZm9udC1mYW1pbHkgIWRlZmF1bHQ7XG5cbi8vIFVuaXQgc2l6ZXNcbiR1bml0LW86IC4wNXJlbSAhZGVmYXVsdDtcbiR1bml0LWg6IC4xcmVtICFkZWZhdWx0O1xuJHVuaXQtMTogLjJyZW0gIWRlZmF1bHQ7XG4kdW5pdC0yOiAuNHJlbSAhZGVmYXVsdDtcbiR1bml0LTM6IC42cmVtICFkZWZhdWx0O1xuJHVuaXQtNDogLjhyZW0gIWRlZmF1bHQ7XG4kdW5pdC01OiAxcmVtICFkZWZhdWx0O1xuJHVuaXQtNjogMS4ycmVtICFkZWZhdWx0O1xuJHVuaXQtNzogMS40cmVtICFkZWZhdWx0O1xuJHVuaXQtODogMS42cmVtICFkZWZhdWx0O1xuJHVuaXQtOTogMS44cmVtICFkZWZhdWx0O1xuJHVuaXQtMTA6IDJyZW0gIWRlZmF1bHQ7XG4kdW5pdC0xMjogMi40cmVtICFkZWZhdWx0O1xuJHVuaXQtMTY6IDMuMnJlbSAhZGVmYXVsdDtcblxuLy8gRm9udCBzaXplc1xuJGh0bWwtZm9udC1zaXplOiAyMHB4ICFkZWZhdWx0O1xuJGh0bWwtbGluZS1oZWlnaHQ6IDEuNSAhZGVmYXVsdDtcbiRmb250LXNpemU6IC44cmVtICFkZWZhdWx0O1xuJGZvbnQtc2l6ZS1zbTogLjdyZW0gIWRlZmF1bHQ7XG4kZm9udC1zaXplLWxnOiAuOXJlbSAhZGVmYXVsdDtcbiRsaW5lLWhlaWdodDogMS4ycmVtICFkZWZhdWx0O1xuXG4vLyBTaXplc1xuJGxheW91dC1zcGFjaW5nOiAkdW5pdC0yICFkZWZhdWx0O1xuJGxheW91dC1zcGFjaW5nLXNtOiAkdW5pdC0xICFkZWZhdWx0O1xuJGxheW91dC1zcGFjaW5nLWxnOiAkdW5pdC00ICFkZWZhdWx0O1xuJGJvcmRlci1yYWRpdXM6ICR1bml0LWggIWRlZmF1bHQ7XG4kYm9yZGVyLXdpZHRoOiAkdW5pdC1vICFkZWZhdWx0O1xuJGJvcmRlci13aWR0aC1sZzogJHVuaXQtaCAhZGVmYXVsdDtcbiRjb250cm9sLXNpemU6ICR1bml0LTkgIWRlZmF1bHQ7XG4kY29udHJvbC1zaXplLXNtOiAkdW5pdC03ICFkZWZhdWx0O1xuJGNvbnRyb2wtc2l6ZS1sZzogJHVuaXQtMTAgIWRlZmF1bHQ7XG4kY29udHJvbC1wYWRkaW5nLXg6ICR1bml0LTIgIWRlZmF1bHQ7XG4kY29udHJvbC1wYWRkaW5nLXgtc206ICR1bml0LTIgKiAuNzUgIWRlZmF1bHQ7XG4kY29udHJvbC1wYWRkaW5nLXgtbGc6ICR1bml0LTIgKiAxLjUgIWRlZmF1bHQ7XG4kY29udHJvbC1wYWRkaW5nLXk6ICgkY29udHJvbC1zaXplIC0gJGxpbmUtaGVpZ2h0KSAvIDIgLSAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xuJGNvbnRyb2wtcGFkZGluZy15LXNtOiAoJGNvbnRyb2wtc2l6ZS1zbSAtICRsaW5lLWhlaWdodCkgLyAyIC0gJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcbiRjb250cm9sLXBhZGRpbmcteS1sZzogKCRjb250cm9sLXNpemUtbGcgLSAkbGluZS1oZWlnaHQpIC8gMiAtICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XG4kY29udHJvbC1pY29uLXNpemU6IC44cmVtICFkZWZhdWx0O1xuXG4kY29udHJvbC13aWR0aC14czogMTgwcHggIWRlZmF1bHQ7XG4kY29udHJvbC13aWR0aC1zbTogMzIwcHggIWRlZmF1bHQ7XG4kY29udHJvbC13aWR0aC1tZDogNjQwcHggIWRlZmF1bHQ7XG4kY29udHJvbC13aWR0aC1sZzogOTYwcHggIWRlZmF1bHQ7XG4kY29udHJvbC13aWR0aC14bDogMTI4MHB4ICFkZWZhdWx0O1xuXG4vLyBSZXNwb25zaXZlIGJyZWFrcG9pbnRzXG4kc2l6ZS14czogNDgwcHggIWRlZmF1bHQ7XG4kc2l6ZS1zbTogNjAwcHggIWRlZmF1bHQ7XG4kc2l6ZS1tZDogODQwcHggIWRlZmF1bHQ7XG4kc2l6ZS1sZzogOTYwcHggIWRlZmF1bHQ7XG4kc2l6ZS14bDogMTI4MHB4ICFkZWZhdWx0O1xuJHNpemUtMng6IDE0NDBweCAhZGVmYXVsdDtcblxuJHJlc3BvbnNpdmUtYnJlYWtwb2ludDogJHNpemUteHMgIWRlZmF1bHQ7XG5cbi8vIFotaW5kZXhcbiR6aW5kZXgtMDogMSAhZGVmYXVsdDtcbiR6aW5kZXgtMTogMTAwICFkZWZhdWx0O1xuJHppbmRleC0yOiAyMDAgIWRlZmF1bHQ7XG4kemluZGV4LTM6IDMwMCAhZGVmYXVsdDtcbiR6aW5kZXgtNDogNDAwICFkZWZhdWx0O1xuIiwiLy8gTWl4aW5zXG5AaW1wb3J0IFwibWl4aW5zL2F2YXRhclwiO1xuQGltcG9ydCBcIm1peGlucy9idXR0b25cIjtcbkBpbXBvcnQgXCJtaXhpbnMvY2xlYXJmaXhcIjtcbkBpbXBvcnQgXCJtaXhpbnMvY29sb3JcIjtcbkBpbXBvcnQgXCJtaXhpbnMvbGFiZWxcIjtcbkBpbXBvcnQgXCJtaXhpbnMvcG9zaXRpb25cIjtcbkBpbXBvcnQgXCJtaXhpbnMvc2hhZG93XCI7XG5AaW1wb3J0IFwibWl4aW5zL3RleHRcIjtcbkBpbXBvcnQgXCJtaXhpbnMvdG9hc3RcIjsiLCIvLyBBdmF0YXIgbWl4aW5cbkBtaXhpbiBhdmF0YXItYmFzZSgkc2l6ZTogJHVuaXQtOCkge1xuICBmb250LXNpemU6ICRzaXplIC8gMjtcbiAgaGVpZ2h0OiAkc2l6ZTtcbiAgd2lkdGg6ICRzaXplO1xufVxuIiwiLy8gQnV0dG9uIHZhcmlhbnQgbWl4aW5cbkBtaXhpbiBidXR0b24tdmFyaWFudCgkY29sb3I6ICRwcmltYXJ5LWNvbG9yKSB7XG4gIGJhY2tncm91bmQ6ICRjb2xvcjtcbiAgYm9yZGVyLWNvbG9yOiBkYXJrZW4oJGNvbG9yLCAzJSk7XG4gIGNvbG9yOiAkbGlnaHQtY29sb3I7XG4gICY6Zm9jdXMge1xuICAgIEBpbmNsdWRlIGNvbnRyb2wtc2hhZG93KCRjb2xvcik7XG4gIH1cbiAgJjpmb2N1cyxcbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogZGFya2VuKCRjb2xvciwgMiUpO1xuICAgIGJvcmRlci1jb2xvcjogZGFya2VuKCRjb2xvciwgNSUpO1xuICAgIGNvbG9yOiAkbGlnaHQtY29sb3I7XG4gIH1cbiAgJjphY3RpdmUsXG4gICYuYWN0aXZlIHtcbiAgICBiYWNrZ3JvdW5kOiBkYXJrZW4oJGNvbG9yLCA3JSk7XG4gICAgYm9yZGVyLWNvbG9yOiBkYXJrZW4oJGNvbG9yLCAxMCUpO1xuICAgIGNvbG9yOiAkbGlnaHQtY29sb3I7XG4gIH1cbiAgJi5sb2FkaW5nIHtcbiAgICAmOjphZnRlciB7XG4gICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAkbGlnaHQtY29sb3I7XG4gICAgICBib3JkZXItbGVmdC1jb2xvcjogJGxpZ2h0LWNvbG9yO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gYnV0dG9uLW91dGxpbmUtdmFyaWFudCgkY29sb3I6ICRwcmltYXJ5LWNvbG9yKSB7XG4gIGJhY2tncm91bmQ6ICRsaWdodC1jb2xvcjtcbiAgYm9yZGVyLWNvbG9yOiAkY29sb3I7XG4gIGNvbG9yOiAkY29sb3I7XG4gICY6Zm9jdXMge1xuICAgIEBpbmNsdWRlIGNvbnRyb2wtc2hhZG93KCRjb2xvcik7XG4gIH1cbiAgJjpmb2N1cyxcbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogbGlnaHRlbigkY29sb3IsIDUwJSk7XG4gICAgYm9yZGVyLWNvbG9yOiBkYXJrZW4oJGNvbG9yLCAyJSk7XG4gICAgY29sb3I6ICRjb2xvcjtcbiAgfVxuICAmOmFjdGl2ZSxcbiAgJi5hY3RpdmUge1xuICAgIGJhY2tncm91bmQ6ICRjb2xvcjtcbiAgICBib3JkZXItY29sb3I6IGRhcmtlbigkY29sb3IsIDUlKTtcbiAgICBjb2xvcjogJGxpZ2h0LWNvbG9yO1xuICB9XG4gICYubG9hZGluZyB7XG4gICAgJjo6YWZ0ZXIge1xuICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJGNvbG9yO1xuICAgICAgYm9yZGVyLWxlZnQtY29sb3I6ICRjb2xvcjtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENsZWFyZml4IG1peGluXG5AbWl4aW4gY2xlYXJmaXgoKSB7XG4gICY6OmFmdGVyIHtcbiAgICBjbGVhcjogYm90aDtcbiAgICBjb250ZW50OiBcIlwiO1xuICAgIGRpc3BsYXk6IHRhYmxlO1xuICB9XG59XG4iLCIvLyBCYWNrZ3JvdW5kIGNvbG9yIHV0aWxpdHkgbWl4aW5cbkBtaXhpbiBiZy1jb2xvci12YXJpYW50KCRuYW1lOiBcIi5iZy1wcmltYXJ5XCIsICRjb2xvcjogJHByaW1hcnktY29sb3IpIHtcbiAgI3skbmFtZX0ge1xuICAgIGJhY2tncm91bmQ6ICRjb2xvciAhaW1wb3J0YW50O1xuXG4gICAgQGlmIChsaWdodG5lc3MoJGNvbG9yKSA8IDYwKSB7XG4gICAgICBjb2xvcjogJGxpZ2h0LWNvbG9yO1xuICAgIH1cbiAgfVxufVxuXG4vLyBUZXh0IGNvbG9yIHV0aWxpdHkgbWl4aW5cbkBtaXhpbiB0ZXh0LWNvbG9yLXZhcmlhbnQoJG5hbWU6IFwiLnRleHQtcHJpbWFyeVwiLCAkY29sb3I6ICRwcmltYXJ5LWNvbG9yKSB7XG4gICN7JG5hbWV9IHtcbiAgICBjb2xvcjogJGNvbG9yICFpbXBvcnRhbnQ7XG4gIH1cblxuICBhI3skbmFtZX0ge1xuICAgICY6Zm9jdXMsXG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogZGFya2VuKCRjb2xvciwgNSUpO1xuICAgIH1cbiAgICAmOnZpc2l0ZWQge1xuICAgICAgY29sb3I6IGxpZ2h0ZW4oJGNvbG9yLCA1JSk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBMYWJlbCBiYXNlIHN0eWxlXG5AbWl4aW4gbGFiZWwtYmFzZSgpIHtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIGxpbmUtaGVpZ2h0OiAxLjI1O1xuICBwYWRkaW5nOiAuMXJlbSAuMnJlbTtcbn1cblxuQG1peGluIGxhYmVsLXZhcmlhbnQoJGNvbG9yOiAkbGlnaHQtY29sb3IsICRiZy1jb2xvcjogJHByaW1hcnktY29sb3IpIHtcbiAgYmFja2dyb3VuZDogJGJnLWNvbG9yO1xuICBjb2xvcjogJGNvbG9yO1xufVxuIiwiLy8gTWFyZ2luIHV0aWxpdHkgbWl4aW5cbkBtaXhpbiBtYXJnaW4tdmFyaWFudCgkaWQ6IDEsICRzaXplOiAkdW5pdC0xKSB7XG4gIC5tLSN7JGlkfSB7XG4gICAgbWFyZ2luOiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG5cbiAgLm1iLSN7JGlkfSB7XG4gICAgbWFyZ2luLWJvdHRvbTogJHNpemUgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5tbC0jeyRpZH0ge1xuICAgIG1hcmdpbi1sZWZ0OiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG5cbiAgLm1yLSN7JGlkfSB7XG4gICAgbWFyZ2luLXJpZ2h0OiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG5cbiAgLm10LSN7JGlkfSB7XG4gICAgbWFyZ2luLXRvcDogJHNpemUgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5teC0jeyRpZH0ge1xuICAgIG1hcmdpbi1sZWZ0OiAkc2l6ZSAhaW1wb3J0YW50O1xuICAgIG1hcmdpbi1yaWdodDogJHNpemUgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5teS0jeyRpZH0ge1xuICAgIG1hcmdpbi1ib3R0b206ICRzaXplICFpbXBvcnRhbnQ7XG4gICAgbWFyZ2luLXRvcDogJHNpemUgIWltcG9ydGFudDtcbiAgfVxufVxuXG4vLyBQYWRkaW5nIHV0aWxpdHkgbWl4aW5cbkBtaXhpbiBwYWRkaW5nLXZhcmlhbnQoJGlkOiAxLCAkc2l6ZTogJHVuaXQtMSkge1xuICAucC0jeyRpZH0ge1xuICAgIHBhZGRpbmc6ICRzaXplICFpbXBvcnRhbnQ7XG4gIH1cblxuICAucGItI3skaWR9IHtcbiAgICBwYWRkaW5nLWJvdHRvbTogJHNpemUgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5wbC0jeyRpZH0ge1xuICAgIHBhZGRpbmctbGVmdDogJHNpemUgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5wci0jeyRpZH0ge1xuICAgIHBhZGRpbmctcmlnaHQ6ICRzaXplICFpbXBvcnRhbnQ7XG4gIH1cblxuICAucHQtI3skaWR9IHtcbiAgICBwYWRkaW5nLXRvcDogJHNpemUgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5weC0jeyRpZH0ge1xuICAgIHBhZGRpbmctbGVmdDogJHNpemUgIWltcG9ydGFudDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG4gIFxuICAucHktI3skaWR9IHtcbiAgICBwYWRkaW5nLWJvdHRvbTogJHNpemUgIWltcG9ydGFudDtcbiAgICBwYWRkaW5nLXRvcDogJHNpemUgIWltcG9ydGFudDtcbiAgfVxufVxuIiwiLy8gQ29tcG9uZW50IGZvY3VzIHNoYWRvd1xuQG1peGluIGNvbnRyb2wtc2hhZG93KCRjb2xvcjogJHByaW1hcnktY29sb3IpIHtcbiAgYm94LXNoYWRvdzogMCAwIDAgLjFyZW0gcmdiYSgkY29sb3IsIC4yKTtcbn1cblxuLy8gU2hhZG93IG1peGluXG5AbWl4aW4gc2hhZG93LXZhcmlhbnQoJG9mZnNldCkge1xuICBib3gtc2hhZG93OiAwICRvZmZzZXQgKCRvZmZzZXQgKyAuMDVyZW0pICogMiByZ2JhKCRkYXJrLWNvbG9yLCAuMyk7XG59XG4iLCIvLyBUZXh0IEVsbGlwc2lzXG5AbWl4aW4gdGV4dC1lbGxpcHNpcygpIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG4iLCIvLyBUb2FzdCB2YXJpYW50IG1peGluXG5AbWl4aW4gdG9hc3QtdmFyaWFudCgkY29sb3I6ICRkYXJrLWNvbG9yKSB7XG4gIGJhY2tncm91bmQ6IHJnYmEoJGNvbG9yLCAuOTUpO1xuICBib3JkZXItY29sb3I6ICRjb2xvcjtcbn1cbiIsIi8vIEF1dG9jb21wbGV0ZVxuLmZvcm0tYXV0b2NvbXBsZXRlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gIC5mb3JtLWF1dG9jb21wbGV0ZS1pbnB1dCB7XG4gICAgYWxpZ24tY29udGVudDogZmxleC1zdGFydDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgbWluLWhlaWdodDogJHVuaXQtODtcbiAgICBwYWRkaW5nOiAkdW5pdC1oO1xuXG4gICAgJi5pcy1mb2N1c2VkIHtcbiAgICAgIEBpbmNsdWRlIGNvbnRyb2wtc2hhZG93KCk7XG4gICAgICBib3JkZXItY29sb3I6ICRwcmltYXJ5LWNvbG9yO1xuICAgIH1cblxuICAgIC5mb3JtLWlucHV0IHtcbiAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgZmxleDogMSAwIGF1dG87XG4gICAgICBoZWlnaHQ6ICR1bml0LTY7XG4gICAgICBsaW5lLWhlaWdodDogJHVuaXQtNDtcbiAgICAgIG1hcmdpbjogJHVuaXQtaDtcbiAgICAgIHdpZHRoOiBhdXRvO1xuICAgIH1cbiAgfVxuXG4gIC5tZW51IHtcbiAgICBsZWZ0OiAwO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDEwMCU7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cblxuICAmLmF1dG9jb21wbGV0ZS1vbmVsaW5lIHtcbiAgICAuZm9ybS1hdXRvY29tcGxldGUtaW5wdXQge1xuICAgICAgZmxleC13cmFwOiBub3dyYXA7XG4gICAgICBvdmVyZmxvdy14OiBhdXRvO1xuICAgIH1cblxuICAgIC5jaGlwIHtcbiAgICAgIGZsZXg6IDEgMCBhdXRvO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ2FsZW5kYXJzXG4uY2FsZW5kYXIge1xuICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgJGJvcmRlci1jb2xvcjtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtaW4td2lkdGg6IDI4MHB4O1xuXG4gIC5jYWxlbmRhci1uYXYge1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgYmFja2dyb3VuZDogJGJnLWNvbG9yO1xuICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1sZztcbiAgICBwYWRkaW5nOiAkbGF5b3V0LXNwYWNpbmc7XG4gIH1cblxuICAuY2FsZW5kYXItaGVhZGVyLFxuICAuY2FsZW5kYXItYm9keSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgcGFkZGluZzogJGxheW91dC1zcGFjaW5nIDA7XG5cbiAgICAuY2FsZW5kYXItZGF0ZSB7XG4gICAgICBmbGV4OiAwIDAgMTQuMjglOyAvLyA3IGNhbGVuZGFyLWl0ZW1zIGVhY2ggcm93XG4gICAgICBtYXgtd2lkdGg6IDE0LjI4JTtcbiAgICB9XG4gIH1cblxuICAuY2FsZW5kYXItaGVhZGVyIHtcbiAgICBiYWNrZ3JvdW5kOiAkYmctY29sb3I7XG4gICAgYm9yZGVyLWJvdHRvbTogJGJvcmRlci13aWR0aCBzb2xpZCAkYm9yZGVyLWNvbG9yO1xuICAgIGNvbG9yOiAkZ3JheS1jb2xvcjtcbiAgICBmb250LXNpemU6ICRmb250LXNpemUtc207XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG5cbiAgLmNhbGVuZGFyLWJvZHkge1xuICAgIGNvbG9yOiAkZ3JheS1jb2xvci1kYXJrO1xuICB9XG5cbiAgLmNhbGVuZGFyLWRhdGUge1xuICAgIGJvcmRlcjogMDtcbiAgICBwYWRkaW5nOiAkdW5pdC0xO1xuXG4gICAgLmRhdGUtaXRlbSB7XG4gICAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICBjb2xvcjogJGdyYXktY29sb3ItZGFyaztcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbTtcbiAgICAgIGhlaWdodDogJHVuaXQtNztcbiAgICAgIGxpbmUtaGVpZ2h0OiAkdW5pdC01O1xuICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgIHBhZGRpbmc6ICR1bml0LWg7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIC4ycywgYm9yZGVyIC4ycywgYm94LXNoYWRvdyAuMnMsIGNvbG9yIC4ycztcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgd2lkdGg6ICR1bml0LTc7XG5cbiAgICAgICYuZGF0ZS10b2RheSB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJHNlY29uZGFyeS1jb2xvci1kYXJrO1xuICAgICAgICBjb2xvcjogJHByaW1hcnktY29sb3I7XG4gICAgICB9XG5cbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBAaW5jbHVkZSBjb250cm9sLXNoYWRvdygpO1xuICAgICAgfVxuXG4gICAgICAmOmZvY3VzLFxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRzZWNvbmRhcnktY29sb3ItbGlnaHQ7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJHNlY29uZGFyeS1jb2xvci1kYXJrO1xuICAgICAgICBjb2xvcjogJHByaW1hcnktY29sb3I7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgIH1cbiAgICAgICY6YWN0aXZlLFxuICAgICAgJi5hY3RpdmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkcHJpbWFyeS1jb2xvci1kYXJrO1xuICAgICAgICBib3JkZXItY29sb3I6IGRhcmtlbigkcHJpbWFyeS1jb2xvci1kYXJrLCA1JSk7XG4gICAgICAgIGNvbG9yOiAkbGlnaHQtY29sb3I7XG4gICAgICB9XG5cbiAgICAgIC8vIENhbGVuZGFyIGJhZGdlIHN1cHBvcnRcbiAgICAgICYuYmFkZ2Uge1xuICAgICAgICAmOjphZnRlciB7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIHRvcDogM3B4O1xuICAgICAgICAgIHJpZ2h0OiAzcHg7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoNTAlLCAtNTAlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC5kYXRlLWl0ZW0sXG4gICAgLmNhbGVuZGFyLWV2ZW50IHtcbiAgICAgICY6ZGlzYWJsZWQsXG4gICAgICAmLmRpc2FibGVkIHtcbiAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICBvcGFjaXR5OiAuMjU7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgfVxuICAgIH1cblxuICAgICYucHJldi1tb250aCxcbiAgICAmLm5leHQtbW9udGgge1xuICAgICAgLmRhdGUtaXRlbSxcbiAgICAgIC5jYWxlbmRhci1ldmVudCB7XG4gICAgICAgIG9wYWNpdHk6IC4yNTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuY2FsZW5kYXItcmFuZ2Uge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgICY6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kOiAkc2Vjb25kYXJ5LWNvbG9yO1xuICAgICAgY29udGVudDogXCJcIjtcbiAgICAgIGhlaWdodDogJHVuaXQtNztcbiAgICAgIGxlZnQ6IDA7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICByaWdodDogMDtcbiAgICAgIHRvcDogNTAlO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgIH1cbiAgICAmLnJhbmdlLXN0YXJ0IHtcbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgIH1cbiAgICB9XG4gICAgJi5yYW5nZS1lbmQge1xuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgcmlnaHQ6IDUwJTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLnJhbmdlLXN0YXJ0LFxuICAgICYucmFuZ2UtZW5kIHtcbiAgICAgIC5kYXRlLWl0ZW0ge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkcHJpbWFyeS1jb2xvci1kYXJrO1xuICAgICAgICBib3JkZXItY29sb3I6IGRhcmtlbigkcHJpbWFyeS1jb2xvci1kYXJrLCA1JSk7XG4gICAgICAgIGNvbG9yOiAkbGlnaHQtY29sb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLmRhdGUtaXRlbSB7XG4gICAgICBjb2xvcjogJHByaW1hcnktY29sb3I7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2FsZW5kYXJzIHNpemVcbiAgJi5jYWxlbmRhci1sZyB7XG4gICAgLmNhbGVuZGFyLWJvZHkge1xuICAgICAgcGFkZGluZzogMDtcblxuICAgICAgLmNhbGVuZGFyLWRhdGUge1xuICAgICAgICBib3JkZXItYm90dG9tOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRib3JkZXItY29sb3I7XG4gICAgICAgIGJvcmRlci1yaWdodDogJGJvcmRlci13aWR0aCBzb2xpZCAkYm9yZGVyLWNvbG9yO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBoZWlnaHQ6IDUuNXJlbTtcbiAgICAgICAgcGFkZGluZzogMDtcblxuICAgICAgICAmOm50aC1jaGlsZCg3bikge1xuICAgICAgICAgIGJvcmRlci1yaWdodDogMDtcbiAgICAgICAgfVxuICAgICAgICAmOm50aC1sYXN0LWNoaWxkKC1uKzcpIHtcbiAgICAgICAgICBib3JkZXItYm90dG9tOiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLmRhdGUtaXRlbSB7XG4gICAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZDtcbiAgICAgIGhlaWdodDogJHVuaXQtNztcbiAgICAgIG1hcmdpbi1yaWdodDogJGxheW91dC1zcGFjaW5nLXNtO1xuICAgICAgbWFyZ2luLXRvcDogJGxheW91dC1zcGFjaW5nLXNtO1xuICAgIH1cblxuICAgIC5jYWxlbmRhci1yYW5nZSB7XG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICB0b3A6IDE5cHg7XG4gICAgICB9XG4gICAgICAmLnJhbmdlLXN0YXJ0IHtcbiAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICBsZWZ0OiBhdXRvO1xuICAgICAgICAgIHdpZHRoOiAxOXB4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAmLnJhbmdlLWVuZCB7XG4gICAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgICAgcmlnaHQ6IDE5cHg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAuY2FsZW5kYXItZXZlbnRzIHtcbiAgICAgIGZsZXgtZ3JvdzogMTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICAgIHBhZGRpbmc6ICRsYXlvdXQtc3BhY2luZy1zbTtcbiAgICB9XG5cbiAgICAuY2FsZW5kYXItZXZlbnQge1xuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgICBmb250LXNpemU6ICRmb250LXNpemUtc207XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIG1hcmdpbjogJHVuaXQtaCBhdXRvO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIHBhZGRpbmc6IDNweCA0cHg7XG4gICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDYXJvdXNlbHNcbi8vIFRoZSBudW1iZXIgb2YgY2Fyb3VzZWwgaW1hZ2VzXG4kY2Fyb3VzZWwtbnVtYmVyOiA4O1xuXG4lY2Fyb3VzZWwtaW1hZ2UtY2hlY2tlZCB7IFxuICBhbmltYXRpb246IGNhcm91c2VsLXNsaWRlaW4gLjc1cyBlYXNlLWluLW91dCAxO1xuICBvcGFjaXR5OiAxO1xuICB6LWluZGV4OiAkemluZGV4LTE7XG59XG5cbiVjYXJvdXNlbC1uYXYtY2hlY2tlZCB7IFxuICBjb2xvcjogJGdyYXktY29sb3ItbGlnaHQ7XG59XG5cbi5jYXJvdXNlbCB7XG4gIGJhY2tncm91bmQ6ICRiZy1jb2xvcjtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2lkdGg6IDEwMCU7XG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcbiAgei1pbmRleDogJHppbmRleC0wO1xuXG4gIC5jYXJvdXNlbC1jb250YWluZXIge1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBsZWZ0OiAwO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAmOjpiZWZvcmUge1xuICAgICAgY29udGVudDogXCJcIjtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgcGFkZGluZy1ib3R0b206IDU2LjI1JTtcbiAgICB9XG5cbiAgICAuY2Fyb3VzZWwtaXRlbSB7XG4gICAgICBhbmltYXRpb246IGNhcm91c2VsLXNsaWRlb3V0IDFzIGVhc2UtaW4tb3V0IDE7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgb3BhY2l0eTogMDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgLml0ZW0tcHJldixcbiAgICAgICAgLml0ZW0tbmV4dCB7XG4gICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC5pdGVtLXByZXYsXG4gICAgLml0ZW0tbmV4dCB7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKCRncmF5LWNvbG9yLWxpZ2h0LCAuMjUpO1xuICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKCRncmF5LWNvbG9yLWxpZ2h0LCAuNSk7XG4gICAgICBjb2xvcjogJGdyYXktY29sb3ItbGlnaHQ7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiA1MCU7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgLjRzO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgICAgei1pbmRleDogJHppbmRleC0xO1xuICAgIH1cbiAgICAuaXRlbS1wcmV2IHtcbiAgICAgIGxlZnQ6IDFyZW07XG4gICAgfVxuICAgIC5pdGVtLW5leHQge1xuICAgICAgcmlnaHQ6IDFyZW07XG4gICAgfVxuICB9XG5cbiAgLmNhcm91c2VsLWxvY2F0b3Ige1xuICAgIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggKCRjYXJvdXNlbC1udW1iZXIpIHtcbiAgICAgICY6bnRoLW9mLXR5cGUoI3skaX0pOmNoZWNrZWQgfiAuY2Fyb3VzZWwtY29udGFpbmVyIC5jYXJvdXNlbC1pdGVtOm50aC1vZi10eXBlKCN7JGl9KSB7XG4gICAgICAgIEBleHRlbmQgJWNhcm91c2VsLWltYWdlLWNoZWNrZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCAoJGNhcm91c2VsLW51bWJlcikge1xuICAgICAgJjpudGgtb2YtdHlwZSgjeyRpfSk6Y2hlY2tlZCB+IC5jYXJvdXNlbC1uYXYgLm5hdi1pdGVtOm50aC1vZi10eXBlKCN7JGl9KSB7XG4gICAgICAgIEBleHRlbmQgJWNhcm91c2VsLW5hdi1jaGVja2VkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5jYXJvdXNlbC1uYXYge1xuICAgIGJvdHRvbTogJGxheW91dC1zcGFjaW5nO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgbGVmdDogNTAlO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gICAgd2lkdGg6IDEwcmVtO1xuICAgIHotaW5kZXg6ICR6aW5kZXgtMTtcblxuICAgIC5uYXYtaXRlbSB7XG4gICAgICBjb2xvcjogcmdiYSgkZ3JheS1jb2xvci1saWdodCwgLjUpO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBmbGV4OiAxIDAgYXV0bztcbiAgICAgIGhlaWdodDogJHVuaXQtODtcbiAgICAgIG1hcmdpbjogJHVuaXQtMTtcbiAgICAgIG1heC13aWR0aDogMi41cmVtO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XG4gICAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBoZWlnaHQ6ICR1bml0LWg7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAuNXJlbTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbkBrZXlmcmFtZXMgY2Fyb3VzZWwtc2xpZGVpbiB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XG4gIH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgY2Fyb3VzZWwtc2xpZGVvdXQge1xuICAwJSB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gIH1cbiAgMTAwJSB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gIH1cbn1cbiIsIi8vIEltYWdlIGNvbXBhcmlzb24gc2xpZGVyXG4vLyBDcmVkaXQ6IGh0dHA6Ly9jb2RlcGVuLmlvL3NvbGlwc2lzdGFjcC9wZW4vR3BtYXFcbi5jb21wYXJpc29uLXNsaWRlciB7XG4gIGhlaWdodDogNTB2aDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogMTAwJTtcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xuXG4gIC5jb21wYXJpc29uLWJlZm9yZSxcbiAgLmNvbXBhcmlzb24tYWZ0ZXIge1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBsZWZ0OiAwO1xuICAgIG1hcmdpbjogMDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG5cbiAgICBpbWcge1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgb2JqZWN0LWZpdDogY292ZXI7XG4gICAgICBvYmplY3QtcG9zaXRpb246IGxlZnQgY2VudGVyO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuICB9XG5cbiAgLmNvbXBhcmlzb24tYmVmb3JlIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICB6LWluZGV4OiAxO1xuXG4gICAgLmNvbXBhcmlzb24tbGFiZWwge1xuICAgICAgcmlnaHQ6ICR1bml0LTQ7XG4gICAgfVxuICB9XG5cbiAgLmNvbXBhcmlzb24tYWZ0ZXIge1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICBtaW4td2lkdGg6IDA7XG4gICAgei1pbmRleDogMjtcblxuICAgICY6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgcmlnaHQ6ICR1bml0LTQ7XG4gICAgICB0b3A6IDA7XG4gICAgICB6LWluZGV4OiAkemluZGV4LTA7XG4gICAgfVxuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xuICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgYm94LXNoYWRvdzogMCAtNXB4LCAwIDVweDtcbiAgICAgIGNvbG9yOiAkbGlnaHQtY29sb3I7XG4gICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgaGVpZ2h0OiAzcHg7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICByaWdodDogJHVuaXQtMjtcbiAgICAgIHRvcDogNTAlO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoNTAlLCAtNTAlKTtcbiAgICAgIHdpZHRoOiAzcHg7XG4gICAgfVxuXG4gICAgLmNvbXBhcmlzb24tbGFiZWwge1xuICAgICAgbGVmdDogJHVuaXQtNDtcbiAgICB9XG4gIH1cblxuICAuY29tcGFyaXNvbi1yZXNpemVyIHtcbiAgICBhbmltYXRpb246IGZpcnN0LXJ1biAxLjVzIDEgZWFzZS1pbi1vdXQ7XG4gICAgY3Vyc29yOiBldy1yZXNpemU7XG4gICAgaGVpZ2h0OiAkdW5pdC00O1xuICAgIGxlZnQ6IDA7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIG1pbi13aWR0aDogJHVuaXQtNDtcbiAgICBvcGFjaXR5OiAwO1xuICAgIG91dGxpbmU6IG5vbmU7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHJlc2l6ZTogaG9yaXpvbnRhbDtcbiAgICB0b3A6IDUwJTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSkgc2NhbGVZKDMwKTtcbiAgICB3aWR0aDogMDtcbiAgfVxuXG4gIC5jb21wYXJpc29uLWxhYmVsIHtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKCRkYXJrLWNvbG9yLCAuNSk7XG4gICAgYm90dG9tOiAkdW5pdC00O1xuICAgIGNvbG9yOiAkbGlnaHQtY29sb3I7XG4gICAgcGFkZGluZzogJHVuaXQtMSAkdW5pdC0yO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIGZpcnN0LXJ1biB7XG4gIDAlIHtcbiAgICB3aWR0aDogMDtcbiAgfVxuICAyNSUge1xuICAgIHdpZHRoOiAkdW5pdC0xMjtcbiAgfVxuICA1MCUge1xuICAgIHdpZHRoOiAkdW5pdC00O1xuICB9XG4gIDc1JSB7XG4gICAgd2lkdGg6ICR1bml0LTY7XG4gIH1cbiAgMTAwJSB7XG4gICAgd2lkdGg6IDA7XG4gIH1cbn1cbiIsIi8vIEZpbHRlcnMgXG4vLyBUaGUgbnVtYmVyIG9mIGZpbHRlciBvcHRpb25zIFxuJGZpbHRlci1udW1iZXI6IDggIWRlZmF1bHQ7XG5cbiVmaWx0ZXItY2hlY2tlZC1uYXYgeyBcbiAgYmFja2dyb3VuZDogJHByaW1hcnktY29sb3I7XG4gIGNvbG9yOiAkbGlnaHQtY29sb3I7XG59XG5cbiVmaWx0ZXItY2hlY2tlZC1ib2R5IHsgXG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5maWx0ZXIge1xuICAuZmlsdGVyLW5hdiB7XG4gICAgbWFyZ2luOiAkbGF5b3V0LXNwYWNpbmcgMDtcbiAgfVxuXG4gIC5maWx0ZXItYm9keSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gIH1cblxuICAuZmlsdGVyLXRhZyB7XG4gICAgQGZvciAkaSBmcm9tIDAgdGhyb3VnaCAoJGZpbHRlci1udW1iZXIpIHtcbiAgICAgICYjdGFnLSN7JGl9OmNoZWNrZWQgfiAuZmlsdGVyLW5hdiAuY2hpcFtmb3I9XCJ0YWctI3skaX1cIl0ge1xuICAgICAgICBAZXh0ZW5kICVmaWx0ZXItY2hlY2tlZC1uYXY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCAoJGZpbHRlci1udW1iZXIpIHtcbiAgICAgICYjdGFnLSN7JGl9OmNoZWNrZWQgfiAuZmlsdGVyLWJvZHkgLmZpbHRlci1pdGVtOm5vdChbZGF0YS10YWd+PVwidGFnLSN7JGl9XCJdKSB7XG4gICAgICAgIEBleHRlbmQgJWZpbHRlci1jaGVja2VkLWJvZHk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLyBNZXRlcnNcbi8vIENyZWRpdDogaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9odG1sNS1tZXRlci1lbGVtZW50L1xuLm1ldGVyIHtcbiAgYXBwZWFyYW5jZTogbm9uZTtcbiAgYmFja2dyb3VuZDogJGJnLWNvbG9yO1xuICBib3JkZXI6IDA7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogJHVuaXQtNDtcblxuICAmOjotd2Via2l0LW1ldGVyLWlubmVyLWVsZW1lbnQge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG5cbiAgJjo6LXdlYmtpdC1tZXRlci1iYXIsXG4gICY6Oi13ZWJraXQtbWV0ZXItb3B0aW11bS12YWx1ZSxcbiAgJjo6LXdlYmtpdC1tZXRlci1zdWJvcHRpbXVtLXZhbHVlLFxuICAmOjotd2Via2l0LW1ldGVyLWV2ZW4tbGVzcy1nb29kLXZhbHVlIHtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgfVxuXG4gICY6Oi13ZWJraXQtbWV0ZXItYmFyIHtcbiAgICBiYWNrZ3JvdW5kOiAkYmctY29sb3I7XG4gIH1cblxuICAmOjotd2Via2l0LW1ldGVyLW9wdGltdW0tdmFsdWUge1xuICAgIGJhY2tncm91bmQ6ICRzdWNjZXNzLWNvbG9yO1xuICB9XG5cbiAgJjo6LXdlYmtpdC1tZXRlci1zdWJvcHRpbXVtLXZhbHVlIHtcbiAgICBiYWNrZ3JvdW5kOiAkd2FybmluZy1jb2xvcjtcbiAgfVxuXG4gICY6Oi13ZWJraXQtbWV0ZXItZXZlbi1sZXNzLWdvb2QtdmFsdWUge1xuICAgIGJhY2tncm91bmQ6ICRlcnJvci1jb2xvcjtcbiAgfVxuXG4gICY6Oi1tb3otbWV0ZXItYmFyLFxuICAmOi1tb3otbWV0ZXItb3B0aW11bSxcbiAgJjotbW96LW1ldGVyLXN1Yi1vcHRpbXVtLFxuICAmOi1tb3otbWV0ZXItc3ViLXN1Yi1vcHRpbXVtIHtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgfVxuXG4gICY6LW1vei1tZXRlci1vcHRpbXVtOjotbW96LW1ldGVyLWJhciB7XG4gICAgYmFja2dyb3VuZDogJHN1Y2Nlc3MtY29sb3I7XG4gIH1cblxuICAmOi1tb3otbWV0ZXItc3ViLW9wdGltdW06Oi1tb3otbWV0ZXItYmFyIHtcbiAgICBiYWNrZ3JvdW5kOiAkd2FybmluZy1jb2xvcjtcbiAgfVxuXG4gICY6LW1vei1tZXRlci1zdWItc3ViLW9wdGltdW06Oi1tb3otbWV0ZXItYmFyIHtcbiAgICBiYWNrZ3JvdW5kOiAkZXJyb3ItY29sb3I7XG4gIH1cbn1cbiIsIi8vIE9mZiBjYW52YXMgbWVudXNcbiRvZmYtY2FudmFzLWJyZWFrcG9pbnQ6ICRzaXplLWxnICFkZWZhdWx0O1xuXG4ub2ZmLWNhbnZhcyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZmxvdzogbm93cmFwO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2lkdGg6IDEwMCU7XG5cbiAgLm9mZi1jYW52YXMtdG9nZ2xlIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAkbGF5b3V0LXNwYWNpbmc7XG4gICAgdHJhbnNpdGlvbjogbm9uZTtcbiAgICB6LWluZGV4OiAkemluZGV4LTA7XG4gICAgQGlmICRydGwgPT0gdHJ1ZSB7XG4gICAgICByaWdodDogJGxheW91dC1zcGFjaW5nO1xuICAgIH0gQGVsc2Uge1xuICAgICAgbGVmdDogJGxheW91dC1zcGFjaW5nO1xuICAgIH1cbiAgfVxuXG4gIC5vZmYtY2FudmFzLXNpZGViYXIge1xuICAgIGJhY2tncm91bmQ6ICRiZy1jb2xvcjtcbiAgICBib3R0b206IDA7XG4gICAgbWluLXdpZHRoOiAxMHJlbTtcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB0b3A6IDA7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIC4yNXM7XG4gICAgei1pbmRleDogJHppbmRleC0yO1xuICAgIEBpZiAkcnRsID09IHRydWUge1xuICAgICAgcmlnaHQ6IDA7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XG4gICAgfSBAZWxzZSB7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDAlKTtcbiAgICB9XG4gIH1cblxuICAub2ZmLWNhbnZhcy1jb250ZW50IHtcbiAgICBmbGV4OiAxIDEgYXV0bztcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgcGFkZGluZzogJGxheW91dC1zcGFjaW5nICRsYXlvdXQtc3BhY2luZyAkbGF5b3V0LXNwYWNpbmcgNHJlbTtcbiAgfVxuXG4gIC5vZmYtY2FudmFzLW92ZXJsYXkge1xuICAgIGJhY2tncm91bmQ6IHJnYmEoJGRhcmstY29sb3IsIC4xKTtcbiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGxlZnQ6IDA7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHJpZ2h0OiAwO1xuICAgIHRvcDogMDtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuXG4gIC5vZmYtY2FudmFzLXNpZGViYXIge1xuICAgICY6dGFyZ2V0LFxuICAgICYuYWN0aXZlIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgICB9XG5cbiAgICAmOnRhcmdldCB+IC5vZmYtY2FudmFzLW92ZXJsYXksXG4gICAgJi5hY3RpdmUgfiAub2ZmLWNhbnZhcy1vdmVybGF5IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgei1pbmRleDogJHppbmRleC0xO1xuICAgIH1cbiAgfVxufVxuXG4vLyBSZXNwb25zaXZlIGxheW91dFxuQG1lZGlhIChtaW4td2lkdGg6ICRvZmYtY2FudmFzLWJyZWFrcG9pbnQpIHtcbiAgLm9mZi1jYW52YXMge1xuICAgICYub2ZmLWNhbnZhcy1zaWRlYmFyLXNob3cge1xuICAgICAgLm9mZi1jYW52YXMtdG9nZ2xlIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgXG4gICAgICAub2ZmLWNhbnZhcy1zaWRlYmFyIHtcbiAgICAgICAgZmxleDogMCAwIGF1dG87XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgdHJhbnNmb3JtOiBub25lO1xuICAgICAgfVxuXG4gICAgICAub2ZmLWNhbnZhcy1vdmVybGF5IHtcbiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gUGFyYWxsYXhcbiRwYXJhbGxheC1kZWc6IDNkZWcgIWRlZmF1bHQ7XG4kcGFyYWxsYXgtb2Zmc2V0OiA0LjVweCAhZGVmYXVsdDtcbiRwYXJhbGxheC1vZmZzZXQtejogNTBweCAhZGVmYXVsdDtcbiRwYXJhbGxheC1wZXJzcGVjdGl2ZTogMTAwMHB4ICFkZWZhdWx0O1xuJHBhcmFsbGF4LXNjYWxlOiAuOTUgIWRlZmF1bHQ7XG4kcGFyYWxsYXgtZmFkZS1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAuMzUpICFkZWZhdWx0O1xuXG4vLyBNaXhpbjogUGFyYWxsYXggZGlyZWN0aW9uXG5AbWl4aW4gcGFyYWxsYXgtZGlyKCkge1xuICBoZWlnaHQ6IDUwJTtcbiAgb3V0bGluZTogbm9uZTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogNTAlO1xuICB6LWluZGV4OiAkemluZGV4LTE7XG59XG5cbi5wYXJhbGxheCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBoZWlnaHQ6IGF1dG87XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2lkdGg6IGF1dG87XG5cbiAgLnBhcmFsbGF4LWNvbnRlbnQge1xuICAgIEBpbmNsdWRlIHNoYWRvdy12YXJpYW50KDFyZW0pO1xuICAgIGhlaWdodDogYXV0bztcbiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKCRwYXJhbGxheC1wZXJzcGVjdGl2ZSk7XG4gICAgdHJhbnNmb3JtLXN0eWxlOiBwcmVzZXJ2ZS0zZDtcbiAgICB0cmFuc2l0aW9uOiBhbGwgLjRzIGVhc2U7XG4gICAgd2lkdGg6IDEwMCU7XG5cbiAgICAmOjpiZWZvcmUge1xuICAgICAgY29udGVudDogXCJcIjtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgbGVmdDogMDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cbiAgfVxuXG4gIC5wYXJhbGxheC1mcm9udCB7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBjb2xvcjogJGxpZ2h0LWNvbG9yO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGxlZnQ6IDA7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB0ZXh0LXNoYWRvdzogMCAwIDIwcHggcmdiYSgkZGFyay1jb2xvciwgLjc1KTtcbiAgICB0b3A6IDA7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKCRwYXJhbGxheC1vZmZzZXQteikgc2NhbGUoJHBhcmFsbGF4LXNjYWxlKTtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjRzO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHotaW5kZXg6ICR6aW5kZXgtMDtcbiAgfVxuXG4gIC5wYXJhbGxheC10b3AtbGVmdCB7XG4gICAgQGluY2x1ZGUgcGFyYWxsYXgtZGlyKCk7XG4gICAgbGVmdDogMDtcbiAgICB0b3A6IDA7XG5cbiAgICAmOmZvY3VzIH4gLnBhcmFsbGF4LWNvbnRlbnQsXG4gICAgJjpob3ZlciB+IC5wYXJhbGxheC1jb250ZW50IHtcbiAgICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoJHBhcmFsbGF4LXBlcnNwZWN0aXZlKSByb3RhdGVYKCRwYXJhbGxheC1kZWcpIHJvdGF0ZVkoLSRwYXJhbGxheC1kZWcpO1xuXG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAkcGFyYWxsYXgtZmFkZS1jb2xvciAwJSwgdHJhbnNwYXJlbnQgNTAlKTtcbiAgICAgIH1cblxuICAgICAgLnBhcmFsbGF4LWZyb250IHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgkcGFyYWxsYXgtb2Zmc2V0LCAkcGFyYWxsYXgtb2Zmc2V0LCAkcGFyYWxsYXgtb2Zmc2V0LXopIHNjYWxlKCRwYXJhbGxheC1zY2FsZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLnBhcmFsbGF4LXRvcC1yaWdodCB7XG4gICAgQGluY2x1ZGUgcGFyYWxsYXgtZGlyKCk7XG4gICAgcmlnaHQ6IDA7XG4gICAgdG9wOiAwO1xuXG4gICAgJjpmb2N1cyB+IC5wYXJhbGxheC1jb250ZW50LFxuICAgICY6aG92ZXIgfiAucGFyYWxsYXgtY29udGVudCB7XG4gICAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKCRwYXJhbGxheC1wZXJzcGVjdGl2ZSkgcm90YXRlWCgkcGFyYWxsYXgtZGVnKSByb3RhdGVZKCRwYXJhbGxheC1kZWcpO1xuXG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoLTEzNWRlZywgJHBhcmFsbGF4LWZhZGUtY29sb3IgMCUsIHRyYW5zcGFyZW50IDUwJSk7XG4gICAgICB9XG5cbiAgICAgIC5wYXJhbGxheC1mcm9udCB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLSRwYXJhbGxheC1vZmZzZXQsICRwYXJhbGxheC1vZmZzZXQsICRwYXJhbGxheC1vZmZzZXQteikgc2NhbGUoJHBhcmFsbGF4LXNjYWxlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAucGFyYWxsYXgtYm90dG9tLWxlZnQge1xuICAgIEBpbmNsdWRlIHBhcmFsbGF4LWRpcigpO1xuICAgIGJvdHRvbTogMDtcbiAgICBsZWZ0OiAwO1xuXG4gICAgJjpmb2N1cyB+IC5wYXJhbGxheC1jb250ZW50LFxuICAgICY6aG92ZXIgfiAucGFyYWxsYXgtY29udGVudCB7XG4gICAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKCRwYXJhbGxheC1wZXJzcGVjdGl2ZSkgcm90YXRlWCgtJHBhcmFsbGF4LWRlZykgcm90YXRlWSgtJHBhcmFsbGF4LWRlZyk7XG5cbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg0NWRlZywgJHBhcmFsbGF4LWZhZGUtY29sb3IgMCUsIHRyYW5zcGFyZW50IDUwJSk7XG4gICAgICB9XG5cbiAgICAgIC5wYXJhbGxheC1mcm9udCB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoJHBhcmFsbGF4LW9mZnNldCwgLSRwYXJhbGxheC1vZmZzZXQsICRwYXJhbGxheC1vZmZzZXQteikgc2NhbGUoJHBhcmFsbGF4LXNjYWxlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAucGFyYWxsYXgtYm90dG9tLXJpZ2h0IHtcbiAgICBAaW5jbHVkZSBwYXJhbGxheC1kaXIoKTtcbiAgICBib3R0b206IDA7XG4gICAgcmlnaHQ6IDA7XG5cbiAgICAmOmZvY3VzIH4gLnBhcmFsbGF4LWNvbnRlbnQsXG4gICAgJjpob3ZlciB+IC5wYXJhbGxheC1jb250ZW50IHtcbiAgICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoJHBhcmFsbGF4LXBlcnNwZWN0aXZlKSByb3RhdGVYKC0kcGFyYWxsYXgtZGVnKSByb3RhdGVZKCRwYXJhbGxheC1kZWcpO1xuXG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoLTQ1ZGVnLCAkcGFyYWxsYXgtZmFkZS1jb2xvciAwJSwgdHJhbnNwYXJlbnQgNTAlKTtcbiAgICAgIH1cblxuICAgICAgLnBhcmFsbGF4LWZyb250IHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtJHBhcmFsbGF4LW9mZnNldCwgLSRwYXJhbGxheC1vZmZzZXQsICRwYXJhbGxheC1vZmZzZXQteikgc2NhbGUoJHBhcmFsbGF4LXNjYWxlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIFByb2dyZXNzXG4vLyBDcmVkaXQ6IGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vaHRtbDUtcHJvZ3Jlc3MtZWxlbWVudC9cbi5wcm9ncmVzcyB7XG4gIGFwcGVhcmFuY2U6IG5vbmU7XG4gIGJhY2tncm91bmQ6ICRiZy1jb2xvci1kYXJrO1xuICBib3JkZXI6IDA7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICBjb2xvcjogJHByaW1hcnktY29sb3I7XG4gIGhlaWdodDogJHVuaXQtMTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogMTAwJTtcblxuICAmOjotd2Via2l0LXByb2dyZXNzLWJhciB7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIH1cblxuICAmOjotd2Via2l0LXByb2dyZXNzLXZhbHVlIHtcbiAgICBiYWNrZ3JvdW5kOiAkcHJpbWFyeS1jb2xvcjtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgfVxuXG4gICY6Oi1tb3otcHJvZ3Jlc3MtYmFyIHtcbiAgICBiYWNrZ3JvdW5kOiAkcHJpbWFyeS1jb2xvcjtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgfVxuXG4gICY6aW5kZXRlcm1pbmF0ZSB7XG4gICAgYW5pbWF0aW9uOiBwcm9ncmVzcy1pbmRldGVybWluYXRlIDEuNXMgbGluZWFyIGluZmluaXRlO1xuICAgIGJhY2tncm91bmQ6ICRiZy1jb2xvci1kYXJrIGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgJHByaW1hcnktY29sb3IgMzAlLCAkYmctY29sb3ItZGFyayAzMCUpIHRvcCBsZWZ0IC8gMTUwJSAxNTAlIG5vLXJlcGVhdDtcblxuICAgICY6Oi1tb3otcHJvZ3Jlc3MtYmFyIHtcbiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIH1cbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIHByb2dyZXNzLWluZGV0ZXJtaW5hdGUge1xuICAwJSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMjAwJSAwO1xuICB9XG4gIDEwMCUge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0yMDAlIDA7XG4gIH1cbn1cbiIsIi8vIFNsaWRlcnNcbi8vIENyZWRpdDogaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9zdHlsaW5nLWNyb3NzLWJyb3dzZXItY29tcGF0aWJsZS1yYW5nZS1pbnB1dHMtY3NzL1xuLnNsaWRlciB7XG4gIGFwcGVhcmFuY2U6IG5vbmU7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogJHVuaXQtNjtcblxuICAmOmZvY3VzIHtcbiAgICBAaW5jbHVkZSBjb250cm9sLXNoYWRvdygpO1xuICAgIG91dGxpbmU6IG5vbmU7XG4gIH1cblxuICAmLnRvb2x0aXA6bm90KFtkYXRhLXRvb2x0aXBdKSB7XG4gICAgJjo6YWZ0ZXIge1xuICAgICAgY29udGVudDogYXR0cih2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2xpZGVyIFRodW1iXG4gICY6Oi13ZWJraXQtc2xpZGVyLXRodW1iIHtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgYmFja2dyb3VuZDogJHByaW1hcnktY29sb3I7XG4gICAgYm9yZGVyOiAwO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBoZWlnaHQ6ICR1bml0LTM7XG4gICAgbWFyZ2luLXRvcDogLSgkdW5pdC0zIC0gJHVuaXQtaCkgLyAyO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAuMnM7XG4gICAgd2lkdGg6ICR1bml0LTM7XG4gIH1cbiAgJjo6LW1vei1yYW5nZS10aHVtYiB7XG4gICAgYmFja2dyb3VuZDogJHByaW1hcnktY29sb3I7XG4gICAgYm9yZGVyOiAwO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBoZWlnaHQ6ICR1bml0LTM7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIC4ycztcbiAgICB3aWR0aDogJHVuaXQtMztcbiAgfVxuICAmOjotbXMtdGh1bWIge1xuICAgIGJhY2tncm91bmQ6ICRwcmltYXJ5LWNvbG9yO1xuICAgIGJvcmRlcjogMDtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgaGVpZ2h0OiAkdW5pdC0zO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAuMnM7XG4gICAgd2lkdGg6ICR1bml0LTM7XG4gIH1cblxuICAmOmFjdGl2ZSB7XG4gICAgJjo6LXdlYmtpdC1zbGlkZXItdGh1bWIge1xuICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjI1KTtcbiAgICB9XG4gICAgJjo6LW1vei1yYW5nZS10aHVtYiB7XG4gICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMjUpO1xuICAgIH1cbiAgICAmOjotbXMtdGh1bWIge1xuICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjI1KTtcbiAgICB9XG4gIH1cblxuICAmOmRpc2FibGVkLFxuICAmLmRpc2FibGVkIHtcbiAgICAmOjotd2Via2l0LXNsaWRlci10aHVtYiB7XG4gICAgICBiYWNrZ3JvdW5kOiAkZ3JheS1jb2xvci1saWdodDtcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgfVxuICAgICY6Oi1tb3otcmFuZ2UtdGh1bWIge1xuICAgICAgYmFja2dyb3VuZDogJGdyYXktY29sb3ItbGlnaHQ7XG4gICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgIH1cbiAgICAmOjotbXMtdGh1bWIge1xuICAgICAgYmFja2dyb3VuZDogJGdyYXktY29sb3ItbGlnaHQ7XG4gICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNsaWRlciBUcmFja1xuICAmOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFjayB7XG4gICAgYmFja2dyb3VuZDogJGJnLWNvbG9yLWRhcms7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgaGVpZ2h0OiAkdW5pdC1oO1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gICY6Oi1tb3otcmFuZ2UtdHJhY2sge1xuICAgIGJhY2tncm91bmQ6ICRiZy1jb2xvci1kYXJrO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGhlaWdodDogJHVuaXQtaDtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuICAmOjotbXMtdHJhY2sge1xuICAgIGJhY2tncm91bmQ6ICRiZy1jb2xvci1kYXJrO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGhlaWdodDogJHVuaXQtaDtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuICAmOjotbXMtZmlsbC1sb3dlciB7XG4gICAgYmFja2dyb3VuZDogJHByaW1hcnktY29sb3I7XG4gIH1cbn1cbiIsIi8vIFRpbWVsaW5lc1xuLnRpbWVsaW5lIHtcbiAgLnRpbWVsaW5lLWl0ZW0ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgbWFyZ2luLWJvdHRvbTogJHVuaXQtNjtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQ6ICRib3JkZXItY29sb3I7XG4gICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgbGVmdDogMTFweDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogJHVuaXQtNjtcbiAgICAgIHdpZHRoOiAycHg7XG4gICAgfVxuXG4gICAgLnRpbWVsaW5lLWxlZnQge1xuICAgICAgZmxleDogMCAwIGF1dG87XG4gICAgfVxuXG4gICAgLnRpbWVsaW5lLWNvbnRlbnQge1xuICAgICAgZmxleDogMSAxIGF1dG87XG4gICAgICBwYWRkaW5nOiAycHggMCAycHggJGxheW91dC1zcGFjaW5nLWxnO1xuICAgIH1cblxuICAgIC50aW1lbGluZS1pY29uIHtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICBjb2xvcjogJGxpZ2h0LWNvbG9yO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGhlaWdodDogJHVuaXQtNjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgd2lkdGg6ICR1bml0LTY7XG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBib3JkZXI6ICRib3JkZXItd2lkdGgtbGcgc29saWQgJHByaW1hcnktY29sb3I7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgY29udGVudDogXCJcIjtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGhlaWdodDogJHVuaXQtMjtcbiAgICAgICAgbGVmdDogJHVuaXQtMjtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6ICR1bml0LTI7XG4gICAgICAgIHdpZHRoOiAkdW5pdC0yO1xuICAgICAgfVxuXG4gICAgICAmLmljb24tbGcge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkcHJpbWFyeS1jb2xvcjtcbiAgICAgICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodDtcbiAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICBjb250ZW50OiBub25lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLyAzNjAgRGVncmVlIFZpZXdlclxuXG4vLyBNaXhpbjogVmlld2VyIHNsaWRlciBzaXplc1xuQG1peGluIHZpZXdlci1zbGlkZXItc2l6ZSgkaW1hZ2UtbnVtYmVyOiAzNikge1xuICBAZm9yICRzIGZyb20gMSB0aHJvdWdoICgkaW1hZ2UtbnVtYmVyKSB7XG4gICAgLnZpZXdlci1zbGlkZXJbbWF4PScjeyRpbWFnZS1udW1iZXJ9J11bdmFsdWU9JyN7JHN9J10gKyAudmlld2VyLWltYWdlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb24teTogcGVyY2VudGFnZSgoKCRzKS0xKSAqIDEvKCgkaW1hZ2UtbnVtYmVyKS0xKSk7XG4gICAgfVxuICB9XG59XG5cbi52aWV3ZXItMzYwIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblxuICAvLyBDb3B5IGFuZCBhZGQgbW9yZSBudW1iZXJzIGlmIHlvdSBuZWVkXG4gIEBpbmNsdWRlIHZpZXdlci1zbGlkZXItc2l6ZSgzNik7XG5cbiAgLnZpZXdlci1zbGlkZXIge1xuICAgIGN1cnNvcjogZXctcmVzaXplO1xuICAgIG1hcmdpbjogMXJlbTtcbiAgICBvcmRlcjogMjtcbiAgICB3aWR0aDogNjAlO1xuICB9XG5cbiAgLnZpZXdlci1pbWFnZSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAwO1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICBvcmRlcjogMTtcbiAgfVxufSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxzRkFBNEY7QWFKNUYsQUFBQSxrQkFBa0IsQ0FBQyxFQUNqQixRQUFRLEVBQUUsUUFBUSxHQTRDbkI7O0FBN0NELEFBR0Usa0JBSGdCLENBR2hCLHdCQUF3QixDQUFDLEVBQ3ZCLGFBQWEsRUFBRSxVQUFVLEVBQ3pCLE9BQU8sRUFBRSxJQUFJLEVBQ2IsU0FBUyxFQUFFLElBQUksRUFDZixNQUFNLEVBQUUsSUFBSSxFQUNaLFVBQVUsRVhzREwsTUFBTSxFV3JEWCxPQUFPLEVYNkNGLE1BQUssR1c1Qlg7O0FBMUJILEFBV0ksa0JBWGMsQ0FHaEIsd0JBQXdCLEFBUXJCLFdBQVcsQ0FBQyxFSFZmLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMs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RUFBRSxhQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sR0FBRyxBQUFULElBQWEsYUFBYSxDQUFtQixFQUNwRSxxQkFBcUIsRUFBRSxhQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sR0FBRyxBQUFULElBQWEsYUFBYSxDQUFtQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sR0FBRyxBQUFULElBQWEsYUFBYSxDQUFtQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sR0FBRyxBQUFULElBQWEsYUFBYSxDQUFtQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sR0FBRyxBQUFULElBQWEsYUFBYSxDQUFtQixFQUNwRSxxQkFBcUIsRUFBRSxHQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sR0FBRyxBQUFULElBQWEsYUFBYSxDQUFtQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxHQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxHQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxHQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxJQUE0QyxHQUNwRTs7QUFJTCxBQVFFLFdBUlMsQ0FRVCxjQUFjLENBQUMsRUFDYixNQUFNLEVBQUUsU0FBUyxFQUNqQixNQUFNLEVBQUUsSUFBSSxFQUNaLEtBQUssRUFBRSxDQUFDLEVBQ1IsS0FBSyxFQUFFLEdBQUcsR0FDWDs7QUFiSCxBQWVFLFdBZlMsQ0FlVCxhQUFhLENBQUMsRUFDWixxQkFBcUIsRUFBRSxDQUFDLEVBQ3hCLGlCQUFpQixFQUFFLFNBQVMsRUFDNUIsZUFBZSxFQUFFLElBQUksRUFDckIsU0FBUyxFQUFFLElBQUksRUFDZixLQUFLLEVBQUUsQ0FBQyxHQUNUIn0= */ diff --git a/themes/learn4/css-compiled/spectre-exp.min.css b/themes/learn4/css-compiled/spectre-exp.min.css new file mode 100644 index 00000000..5501548d --- /dev/null +++ b/themes/learn4/css-compiled/spectre-exp.min.css @@ -0,0 +1 @@ +/*! Spectre.css Experimentals v0.5.8 | MIT License | github.com/picturepan2/spectre */.form-autocomplete{position:relative}.form-autocomplete .form-autocomplete-input{display:-ms-flexbox;display:flex;height:auto;min-height:1.6rem;padding:.1rem;-ms-flex-line-pack:start;align-content:flex-start;-ms-flex-wrap:wrap;flex-wrap:wrap}.form-autocomplete .form-autocomplete-input.is-focused{border-color:#1aa3ed;box-shadow:0 0 0 .1rem rgba(26,163,237,.2)}.form-autocomplete .form-autocomplete-input .form-input{line-height:.8rem;display:inline-block;width:auto;height:1.2rem;margin:.1rem;border-color:transparent;box-shadow:none;-ms-flex:1 0 auto;flex:1 0 auto}.form-autocomplete .menu{position:absolute;top:100%;left:0;width:100%}.form-autocomplete.autocomplete-oneline .form-autocomplete-input{overflow-x:auto;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.form-autocomplete.autocomplete-oneline .chip{-ms-flex:1 0 auto;flex:1 0 auto}.calendar{display:block;min-width:280px;border:.05rem solid #e7e9ed;border-radius:.1rem}.calendar .calendar-nav{font-size:.9rem;display:-ms-flexbox;display:flex;padding:.4rem;border-top-left-radius:.1rem;border-top-right-radius:.1rem;background:#f8f9fa;-ms-flex-align:center;align-items:center}.calendar .calendar-body,.calendar .calendar-header{display:-ms-flexbox;display:flex;padding:.4rem 0;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center}.calendar .calendar-body .calendar-date,.calendar .calendar-header .calendar-date{max-width:14.28%;-ms-flex:0 0 14.28%;flex:0 0 14.28%}.calendar .calendar-header{font-size:.7rem;text-align:center;color:#acb3c2;border-bottom:.05rem solid #e7e9ed;background:#f8f9fa}.calendar .calendar-body{color:#667189}.calendar .calendar-date{padding:.2rem;border:0}.calendar .calendar-date .date-item{font-size:.7rem;line-height:1rem;position:relative;width:1.4rem;height:1.4rem;padding:.1rem;cursor:pointer;transition:background .2s,border .2s,box-shadow .2s,color .2s;text-align:center;vertical-align:middle;white-space:nowrap;text-decoration:none;color:#667189;border:.05rem solid transparent;border-radius:50%;outline:0;background:0 0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.calendar .calendar-date .date-item.date-today{color:#1aa3ed;border-color:#35b9bb}.calendar .calendar-date .date-item:focus{box-shadow:0 0 0 .1rem rgba(26,163,237,.2)}.calendar .calendar-date .date-item:focus,.calendar .calendar-date .date-item:hover{text-decoration:none;color:#1aa3ed;border-color:#35b9bb;background:#44c8ca}.calendar .calendar-date .date-item.active,.calendar .calendar-date .date-item:active{color:#fff;border-color:#108bce;background:#129be6}.calendar .calendar-date .date-item.badge::after{position:absolute;top:3px;right:3px;transform:translate(50%,-50%)}.calendar .calendar-date .calendar-event.disabled,.calendar .calendar-date .calendar-event:disabled,.calendar .calendar-date .date-item.disabled,.calendar .calendar-date .date-item:disabled{cursor:default;pointer-events:none;opacity:.25}.calendar .calendar-date.next-month .calendar-event,.calendar .calendar-date.next-month .date-item,.calendar .calendar-date.prev-month .calendar-event,.calendar .calendar-date.prev-month .date-item{opacity:.25}.calendar .calendar-range{position:relative}.calendar .calendar-range::before{position:absolute;top:50%;right:0;left:0;height:1.4rem;content:'';transform:translateY(-50%);background:#38c5c7}.calendar .calendar-range.range-start::before{left:50%}.calendar .calendar-range.range-end::before{right:50%}.calendar .calendar-range.range-end .date-item,.calendar .calendar-range.range-start .date-item{color:#fff;border-color:#108bce;background:#129be6}.calendar .calendar-range .date-item{color:#1aa3ed}.calendar.calendar-lg .calendar-body{padding:0}.calendar.calendar-lg .calendar-body .calendar-date{display:-ms-flexbox;display:flex;flex-direction:column;height:5.5rem;padding:0;border-right:.05rem solid #e7e9ed;border-bottom:.05rem solid #e7e9ed;-ms-flex-direction:column}.calendar.calendar-lg .calendar-body .calendar-date:nth-child(7n){border-right:0}.calendar.calendar-lg .calendar-body .calendar-date:nth-last-child(-n+7){border-bottom:0}.calendar.calendar-lg .date-item{height:1.4rem;margin-top:.2rem;margin-right:.2rem;-ms-flex-item-align:end;align-self:flex-end}.calendar.calendar-lg .calendar-range::before{top:19px}.calendar.calendar-lg .calendar-range.range-start::before{left:auto;width:19px}.calendar.calendar-lg .calendar-range.range-end::before{right:19px}.calendar.calendar-lg .calendar-events{line-height:1;overflow-y:auto;padding:.2rem;-ms-flex-positive:1;flex-grow:1}.calendar.calendar-lg .calendar-event{font-size:.7rem;display:block;overflow:hidden;margin:.1rem auto;padding:3px 4px;white-space:nowrap;text-overflow:ellipsis;border-radius:.1rem}.carousel .carousel-locator:nth-of-type(1):checked~.carousel-container .carousel-item:nth-of-type(1),.carousel .carousel-locator:nth-of-type(2):checked~.carousel-container .carousel-item:nth-of-type(2),.carousel .carousel-locator:nth-of-type(3):checked~.carousel-container .carousel-item:nth-of-type(3),.carousel .carousel-locator:nth-of-type(4):checked~.carousel-container .carousel-item:nth-of-type(4),.carousel .carousel-locator:nth-of-type(5):checked~.carousel-container .carousel-item:nth-of-type(5),.carousel .carousel-locator:nth-of-type(6):checked~.carousel-container .carousel-item:nth-of-type(6),.carousel .carousel-locator:nth-of-type(7):checked~.carousel-container .carousel-item:nth-of-type(7),.carousel .carousel-locator:nth-of-type(8):checked~.carousel-container .carousel-item:nth-of-type(8){z-index:100;animation:carousel-slidein .75s ease-in-out 1;opacity:1}.carousel .carousel-locator:nth-of-type(1):checked~.carousel-nav .nav-item:nth-of-type(1),.carousel .carousel-locator:nth-of-type(2):checked~.carousel-nav .nav-item:nth-of-type(2),.carousel .carousel-locator:nth-of-type(3):checked~.carousel-nav .nav-item:nth-of-type(3),.carousel .carousel-locator:nth-of-type(4):checked~.carousel-nav .nav-item:nth-of-type(4),.carousel .carousel-locator:nth-of-type(5):checked~.carousel-nav .nav-item:nth-of-type(5),.carousel .carousel-locator:nth-of-type(6):checked~.carousel-nav .nav-item:nth-of-type(6),.carousel .carousel-locator:nth-of-type(7):checked~.carousel-nav .nav-item:nth-of-type(7),.carousel .carousel-locator:nth-of-type(8):checked~.carousel-nav .nav-item:nth-of-type(8){color:#e7e9ed}.carousel{position:relative;z-index:1;display:block;overflow:hidden;width:100%;background:#f8f9fa;-webkit-overflow-scrolling:touch}.carousel .carousel-container{position:relative;left:0;height:100%}.carousel .carousel-container::before{display:block;padding-bottom:56.25%;content:''}.carousel .carousel-container .carousel-item{position:absolute;top:0;left:0;width:100%;height:100%;margin:0;animation:carousel-slideout 1s ease-in-out 1;opacity:0}.carousel .carousel-container .carousel-item:hover .item-next,.carousel .carousel-container .carousel-item:hover .item-prev{opacity:1}.carousel .carousel-container .item-next,.carousel .carousel-container .item-prev{position:absolute;z-index:100;top:50%;transition:all .4s;transform:translateY(-50%);opacity:0;color:#e7e9ed;border-color:rgba(231,233,237,.5);background:rgba(231,233,237,.25)}.carousel .carousel-container .item-prev{left:1rem}.carousel .carousel-container .item-next{right:1rem}.carousel .carousel-nav{position:absolute;z-index:100;bottom:.4rem;left:50%;display:-ms-flexbox;display:flex;width:10rem;transform:translateX(-50%);-ms-flex-pack:center;justify-content:center}.carousel .carousel-nav .nav-item{position:relative;display:block;max-width:2.5rem;height:1.6rem;margin:.2rem;color:rgba(231,233,237,.5);-ms-flex:1 0 auto;flex:1 0 auto}.carousel .carousel-nav .nav-item::before{position:absolute;top:.5rem;display:block;width:100%;height:.1rem;content:'';background:currentColor}@keyframes carousel-slidein{0%{transform:translateX(100%)}100%{transform:translateX(0)}}@keyframes carousel-slideout{0%{transform:translateX(0);opacity:1}100%{transform:translateX(-50%);opacity:1}}.comparison-slider{position:relative;overflow:hidden;width:100%;height:50vh;-webkit-overflow-scrolling:touch}.comparison-slider .comparison-after,.comparison-slider .comparison-before{position:absolute;top:0;left:0;overflow:hidden;height:100%;margin:0}.comparison-slider .comparison-after img,.comparison-slider .comparison-before img{position:absolute;width:100%;height:100%;object-fit:cover;object-position:left center}.comparison-slider .comparison-before{z-index:1;width:100%}.comparison-slider .comparison-before .comparison-label{right:.8rem}.comparison-slider .comparison-after{z-index:2;min-width:0;max-width:100%}.comparison-slider .comparison-after::before{position:absolute;z-index:1;top:0;right:.8rem;left:0;height:100%;content:'';cursor:default;background:0 0}.comparison-slider .comparison-after::after{position:absolute;top:50%;right:.4rem;width:3px;height:3px;content:'';transform:translate(50%,-50%);color:#fff;border-radius:50%;background:currentColor;box-shadow:0 -5px,0 5px}.comparison-slider .comparison-after .comparison-label{left:.8rem}.comparison-slider .comparison-resizer{position:relative;top:50%;left:0;width:0;min-width:.8rem;max-width:100%;height:.8rem;resize:horizontal;cursor:ew-resize;transform:translateY(-50%) scaleY(30);animation:first-run 1.5s 1 ease-in-out;opacity:0;outline:0}.comparison-slider .comparison-label{position:absolute;bottom:.8rem;padding:.2rem .4rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:#fff;background:rgba(69,77,93,.5)}@keyframes first-run{0%{width:0}25%{width:2.4rem}50%{width:.8rem}75%{width:1.2rem}100%{width:0}}.filter .filter-tag#tag-0:checked~.filter-nav .chip[for=tag-0],.filter .filter-tag#tag-1:checked~.filter-nav .chip[for=tag-1],.filter .filter-tag#tag-2:checked~.filter-nav .chip[for=tag-2],.filter .filter-tag#tag-3:checked~.filter-nav .chip[for=tag-3],.filter .filter-tag#tag-4:checked~.filter-nav .chip[for=tag-4],.filter .filter-tag#tag-5:checked~.filter-nav .chip[for=tag-5],.filter .filter-tag#tag-6:checked~.filter-nav .chip[for=tag-6],.filter .filter-tag#tag-7:checked~.filter-nav .chip[for=tag-7],.filter .filter-tag#tag-8:checked~.filter-nav .chip[for=tag-8]{color:#fff;background:#1aa3ed}.filter .filter-tag#tag-1:checked~.filter-body .filter-item:not([data-tag~=tag-1]),.filter .filter-tag#tag-2:checked~.filter-body .filter-item:not([data-tag~=tag-2]),.filter .filter-tag#tag-3:checked~.filter-body .filter-item:not([data-tag~=tag-3]),.filter .filter-tag#tag-4:checked~.filter-body .filter-item:not([data-tag~=tag-4]),.filter .filter-tag#tag-5:checked~.filter-body .filter-item:not([data-tag~=tag-5]),.filter .filter-tag#tag-6:checked~.filter-body .filter-item:not([data-tag~=tag-6]),.filter .filter-tag#tag-7:checked~.filter-body .filter-item:not([data-tag~=tag-7]),.filter .filter-tag#tag-8:checked~.filter-body .filter-item:not([data-tag~=tag-8]){display:none}.filter .filter-nav{margin:.4rem 0}.filter .filter-body{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.meter{display:block;width:100%;height:.8rem;border:0;border-radius:.1rem;background:#f8f9fa;-webkit-appearance:none;-moz-appearance:none;appearance:none}.meter::-webkit-meter-inner-element{display:block}.meter::-webkit-meter-bar,.meter::-webkit-meter-even-less-good-value,.meter::-webkit-meter-optimum-value,.meter::-webkit-meter-suboptimum-value{border-radius:.1rem}.meter::-webkit-meter-bar{background:#f8f9fa}.meter::-webkit-meter-optimum-value{background:#32b643}.meter::-webkit-meter-suboptimum-value{background:#ffb700}.meter::-webkit-meter-even-less-good-value{background:#e85600}.meter:-moz-meter-optimum,.meter:-moz-meter-sub-optimum,.meter:-moz-meter-sub-sub-optimum,.meter::-moz-meter-bar{border-radius:.1rem}.meter:-moz-meter-optimum::-moz-meter-bar{background:#32b643}.meter:-moz-meter-sub-optimum::-moz-meter-bar{background:#ffb700}.meter:-moz-meter-sub-sub-optimum::-moz-meter-bar{background:#e85600}.off-canvas{position:relative;display:-ms-flexbox;display:flex;width:100%;height:100%;-ms-flex-flow:nowrap;flex-flow:nowrap}.off-canvas .off-canvas-toggle{position:absolute;z-index:1;top:.4rem;left:.4rem;display:block;transition:none}.off-canvas .off-canvas-sidebar{position:fixed;z-index:200;top:0;bottom:0;left:0;overflow-y:auto;min-width:10rem;transition:transform .25s;transform:translateX(-100%);background:#f8f9fa}.off-canvas .off-canvas-content{height:100%;padding:.4rem .4rem .4rem 4rem;-ms-flex:1 1 auto;flex:1 1 auto}.off-canvas .off-canvas-overlay{position:fixed;top:0;right:0;bottom:0;left:0;display:none;width:100%;height:100%;border-color:transparent;border-radius:0;background:rgba(69,77,93,.1)}.off-canvas .off-canvas-sidebar.active,.off-canvas .off-canvas-sidebar:target{transform:translateX(0)}.off-canvas .off-canvas-sidebar.active~.off-canvas-overlay,.off-canvas .off-canvas-sidebar:target~.off-canvas-overlay{z-index:100;display:block}@media (min-width:960px){.off-canvas.off-canvas-sidebar-show .off-canvas-toggle{display:none}.off-canvas.off-canvas-sidebar-show .off-canvas-sidebar{position:relative;transform:none;-ms-flex:0 0 auto;flex:0 0 auto}.off-canvas.off-canvas-sidebar-show .off-canvas-overlay{display:none!important}}.parallax{position:relative;display:block;width:auto;height:auto}.parallax .parallax-content{width:100%;height:auto;transition:all .4s ease;transform:perspective(1000px);box-shadow:0 1rem 2.1rem rgba(69,77,93,.3);transform-style:preserve-3d}.parallax .parallax-content::before{position:absolute;top:0;left:0;display:block;width:100%;height:100%;content:''}.parallax .parallax-front{position:absolute;z-index:1;top:0;left:0;display:-ms-flexbox;display:flex;width:100%;height:100%;transition:transform .4s;transform:translateZ(50px) scale(.95);text-align:center;color:#fff;text-shadow:0 0 20px rgba(69,77,93,.75);-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.parallax .parallax-top-left{position:absolute;z-index:100;top:0;left:0;width:50%;height:50%;outline:0}.parallax .parallax-top-left:focus~.parallax-content,.parallax .parallax-top-left:hover~.parallax-content{transform:perspective(1000px) rotateX(3deg) rotateY(-3deg)}.parallax .parallax-top-left:focus~.parallax-content::before,.parallax .parallax-top-left:hover~.parallax-content::before{background:linear-gradient(135deg,rgba(255,255,255,.35) 0,transparent 50%)}.parallax .parallax-top-left:focus~.parallax-content .parallax-front,.parallax .parallax-top-left:hover~.parallax-content .parallax-front{transform:translate3d(4.5px,4.5px,50px) scale(.95)}.parallax .parallax-top-right{position:absolute;z-index:100;top:0;right:0;width:50%;height:50%;outline:0}.parallax .parallax-top-right:focus~.parallax-content,.parallax .parallax-top-right:hover~.parallax-content{transform:perspective(1000px) rotateX(3deg) rotateY(3deg)}.parallax .parallax-top-right:focus~.parallax-content::before,.parallax .parallax-top-right:hover~.parallax-content::before{background:linear-gradient(-135deg,rgba(255,255,255,.35) 0,transparent 50%)}.parallax .parallax-top-right:focus~.parallax-content .parallax-front,.parallax .parallax-top-right:hover~.parallax-content .parallax-front{transform:translate3d(-4.5px,4.5px,50px) scale(.95)}.parallax .parallax-bottom-left{position:absolute;z-index:100;bottom:0;left:0;width:50%;height:50%;outline:0}.parallax .parallax-bottom-left:focus~.parallax-content,.parallax .parallax-bottom-left:hover~.parallax-content{transform:perspective(1000px) rotateX(-3deg) rotateY(-3deg)}.parallax .parallax-bottom-left:focus~.parallax-content::before,.parallax .parallax-bottom-left:hover~.parallax-content::before{background:linear-gradient(45deg,rgba(255,255,255,.35) 0,transparent 50%)}.parallax .parallax-bottom-left:focus~.parallax-content .parallax-front,.parallax .parallax-bottom-left:hover~.parallax-content .parallax-front{transform:translate3d(4.5px,-4.5px,50px) scale(.95)}.parallax .parallax-bottom-right{position:absolute;z-index:100;right:0;bottom:0;width:50%;height:50%;outline:0}.parallax .parallax-bottom-right:focus~.parallax-content,.parallax .parallax-bottom-right:hover~.parallax-content{transform:perspective(1000px) rotateX(-3deg) rotateY(3deg)}.parallax .parallax-bottom-right:focus~.parallax-content::before,.parallax .parallax-bottom-right:hover~.parallax-content::before{background:linear-gradient(-45deg,rgba(255,255,255,.35) 0,transparent 50%)}.parallax .parallax-bottom-right:focus~.parallax-content .parallax-front,.parallax .parallax-bottom-right:hover~.parallax-content .parallax-front{transform:translate3d(-4.5px,-4.5px,50px) scale(.95)}.progress{position:relative;width:100%;height:.2rem;color:#1aa3ed;border:0;border-radius:.1rem;background:#f0f1f4;-webkit-appearance:none;-moz-appearance:none;appearance:none}.progress::-webkit-progress-bar{border-radius:.1rem;background:0 0}.progress::-webkit-progress-value{border-radius:.1rem;background:#1aa3ed}.progress::-moz-progress-bar{border-radius:.1rem;background:#1aa3ed}.progress:indeterminate{animation:progress-indeterminate 1.5s linear infinite;background:#f0f1f4 linear-gradient(to right,#1aa3ed 30%,#f0f1f4 30%) top left/150% 150% no-repeat}.progress:indeterminate::-moz-progress-bar{background:0 0}@keyframes progress-indeterminate{0%{background-position:200% 0}100%{background-position:-200% 0}}.slider{display:block;width:100%;height:1.2rem;background:0 0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.slider:focus{outline:0;box-shadow:0 0 0 .1rem rgba(26,163,237,.2)}.slider.tooltip:not([data-tooltip])::after{content:attr(value)}.slider::-webkit-slider-thumb{width:.6rem;height:.6rem;margin-top:-.25rem;transition:transform .2s;border:0;border-radius:50%;background:#1aa3ed;-webkit-appearance:none}.slider::-moz-range-thumb{width:.6rem;height:.6rem;transition:transform .2s;border:0;border-radius:50%;background:#1aa3ed}.slider::-ms-thumb{width:.6rem;height:.6rem;transition:transform .2s;border:0;border-radius:50%;background:#1aa3ed}.slider:active::-webkit-slider-thumb{transform:scale(1.25)}.slider:active::-moz-range-thumb{transform:scale(1.25)}.slider:active::-ms-thumb{transform:scale(1.25)}.slider.disabled::-webkit-slider-thumb,.slider:disabled::-webkit-slider-thumb{transform:scale(1);background:#e7e9ed}.slider.disabled::-moz-range-thumb,.slider:disabled::-moz-range-thumb{transform:scale(1);background:#e7e9ed}.slider.disabled::-ms-thumb,.slider:disabled::-ms-thumb{transform:scale(1);background:#e7e9ed}.slider::-webkit-slider-runnable-track{width:100%;height:.1rem;border-radius:.1rem;background:#f0f1f4}.slider::-moz-range-track{width:100%;height:.1rem;border-radius:.1rem;background:#f0f1f4}.slider::-ms-track{width:100%;height:.1rem;border-radius:.1rem;background:#f0f1f4}.slider::-ms-fill-lower{background:#1aa3ed}.timeline .timeline-item{position:relative;display:-ms-flexbox;display:flex;margin-bottom:1.2rem}.timeline .timeline-item::before{position:absolute;top:1.2rem;left:11px;width:2px;height:100%;content:'';background:#e7e9ed}.timeline .timeline-item .timeline-left{-ms-flex:0 0 auto;flex:0 0 auto}.timeline .timeline-item .timeline-content{padding:2px 0 2px .8rem;-ms-flex:1 1 auto;flex:1 1 auto}.timeline .timeline-item .timeline-icon{display:-ms-flexbox;display:flex;width:1.2rem;height:1.2rem;text-align:center;color:#fff;border-radius:50%;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.timeline .timeline-item .timeline-icon::before{position:absolute;top:.4rem;left:.4rem;display:block;width:.4rem;height:.4rem;content:'';border:.1rem solid #1aa3ed;border-radius:50%}.timeline .timeline-item .timeline-icon.icon-lg{line-height:1.2rem;background:#1aa3ed}.timeline .timeline-item .timeline-icon.icon-lg::before{content:none}.viewer-360{display:-ms-flexbox;display:flex;flex-direction:column;-ms-flex-align:center;align-items:center;-ms-flex-direction:column}.viewer-360 .viewer-slider[max='36'][value='1']+.viewer-image{background-position-y:0}.viewer-360 .viewer-slider[max='36'][value='2']+.viewer-image{background-position-y:2.8571428571%}.viewer-360 .viewer-slider[max='36'][value='3']+.viewer-image{background-position-y:5.7142857143%}.viewer-360 .viewer-slider[max='36'][value='4']+.viewer-image{background-position-y:8.5714285714%}.viewer-360 .viewer-slider[max='36'][value='5']+.viewer-image{background-position-y:11.4285714286%}.viewer-360 .viewer-slider[max='36'][value='6']+.viewer-image{background-position-y:14.2857142857%}.viewer-360 .viewer-slider[max='36'][value='7']+.viewer-image{background-position-y:17.1428571429%}.viewer-360 .viewer-slider[max='36'][value='8']+.viewer-image{background-position-y:20%}.viewer-360 .viewer-slider[max='36'][value='9']+.viewer-image{background-position-y:22.8571428571%}.viewer-360 .viewer-slider[max='36'][value='10']+.viewer-image{background-position-y:25.7142857143%}.viewer-360 .viewer-slider[max='36'][value='11']+.viewer-image{background-position-y:28.5714285714%}.viewer-360 .viewer-slider[max='36'][value='12']+.viewer-image{background-position-y:31.4285714286%}.viewer-360 .viewer-slider[max='36'][value='13']+.viewer-image{background-position-y:34.2857142857%}.viewer-360 .viewer-slider[max='36'][value='14']+.viewer-image{background-position-y:37.1428571429%}.viewer-360 .viewer-slider[max='36'][value='15']+.viewer-image{background-position-y:40%}.viewer-360 .viewer-slider[max='36'][value='16']+.viewer-image{background-position-y:42.8571428571%}.viewer-360 .viewer-slider[max='36'][value='17']+.viewer-image{background-position-y:45.7142857143%}.viewer-360 .viewer-slider[max='36'][value='18']+.viewer-image{background-position-y:48.5714285714%}.viewer-360 .viewer-slider[max='36'][value='19']+.viewer-image{background-position-y:51.4285714286%}.viewer-360 .viewer-slider[max='36'][value='20']+.viewer-image{background-position-y:54.2857142857%}.viewer-360 .viewer-slider[max='36'][value='21']+.viewer-image{background-position-y:57.1428571429%}.viewer-360 .viewer-slider[max='36'][value='22']+.viewer-image{background-position-y:60%}.viewer-360 .viewer-slider[max='36'][value='23']+.viewer-image{background-position-y:62.8571428571%}.viewer-360 .viewer-slider[max='36'][value='24']+.viewer-image{background-position-y:65.7142857143%}.viewer-360 .viewer-slider[max='36'][value='25']+.viewer-image{background-position-y:68.5714285714%}.viewer-360 .viewer-slider[max='36'][value='26']+.viewer-image{background-position-y:71.4285714286%}.viewer-360 .viewer-slider[max='36'][value='27']+.viewer-image{background-position-y:74.2857142857%}.viewer-360 .viewer-slider[max='36'][value='28']+.viewer-image{background-position-y:77.1428571429%}.viewer-360 .viewer-slider[max='36'][value='29']+.viewer-image{background-position-y:80%}.viewer-360 .viewer-slider[max='36'][value='30']+.viewer-image{background-position-y:82.8571428571%}.viewer-360 .viewer-slider[max='36'][value='31']+.viewer-image{background-position-y:85.7142857143%}.viewer-360 .viewer-slider[max='36'][value='32']+.viewer-image{background-position-y:88.5714285714%}.viewer-360 .viewer-slider[max='36'][value='33']+.viewer-image{background-position-y:91.4285714286%}.viewer-360 .viewer-slider[max='36'][value='34']+.viewer-image{background-position-y:94.2857142857%}.viewer-360 .viewer-slider[max='36'][value='35']+.viewer-image{background-position-y:97.1428571429%}.viewer-360 .viewer-slider[max='36'][value='36']+.viewer-image{background-position-y:100%}.viewer-360 .viewer-slider{width:60%;margin:1rem;cursor:ew-resize;-ms-flex-order:2;order:2}.viewer-360 .viewer-image{max-width:100%;background-repeat:no-repeat;background-position-y:0;background-size:100%;-ms-flex-order:1;order:1} \ No newline at end of file diff --git a/themes/learn4/css-compiled/spectre-icons.css b/themes/learn4/css-compiled/spectre-icons.css new file mode 100644 index 00000000..86ef5156 --- /dev/null +++ b/themes/learn4/css-compiled/spectre-icons.css @@ -0,0 +1,172 @@ +/*! Spectre.css Icons v0.5.8 | MIT License | github.com/picturepan2/spectre */ +.icon { box-sizing: border-box; display: inline-block; font-size: inherit; font-style: normal; height: 1em; position: relative; text-indent: -9999px; vertical-align: middle; width: 1em; } + +.icon::before, .icon::after { content: ""; display: block; left: 50%; position: absolute; top: 50%; transform: translate(-50%, -50%); } + +.icon.icon-2x { font-size: 1.6rem; } + +.icon.icon-3x { font-size: 2.4rem; } + +.icon.icon-4x { font-size: 3.2rem; } + +.accordion .icon, .btn .icon, .toast .icon, .menu .icon { vertical-align: -10%; } + +.btn-lg .icon { vertical-align: -15%; } + +.icon-arrow-down::before, .icon-arrow-left::before, .icon-arrow-right::before, .icon-arrow-up::before, .icon-downward::before, .icon-back::before, .icon-forward::before, .icon-upward::before { border: 0.1rem solid currentColor; border-bottom: 0; border-right: 0; height: .65em; width: .65em; } + +.icon-arrow-down::before { transform: translate(-50%, -75%) rotate(225deg); } + +.icon-arrow-left::before { transform: translate(-25%, -50%) rotate(-45deg); } + +.icon-arrow-right::before { transform: translate(-75%, -50%) rotate(135deg); } + +.icon-arrow-up::before { transform: translate(-50%, -25%) rotate(45deg); } + +.icon-back::after, .icon-forward::after { background: currentColor; height: 0.1rem; width: .8em; } + +.icon-downward::after, .icon-upward::after { background: currentColor; height: .8em; width: 0.1rem; } + +.icon-back::after { left: 55%; } + +.icon-back::before { transform: translate(-50%, -50%) rotate(-45deg); } + +.icon-downward::after { top: 45%; } + +.icon-downward::before { transform: translate(-50%, -50%) rotate(-135deg); } + +.icon-forward::after { left: 45%; } + +.icon-forward::before { transform: translate(-50%, -50%) rotate(135deg); } + +.icon-upward::after { top: 55%; } + +.icon-upward::before { transform: translate(-50%, -50%) rotate(45deg); } + +.icon-caret::before { border-top: .3em solid currentColor; border-right: .3em solid transparent; border-left: .3em solid transparent; height: 0; transform: translate(-50%, -25%); width: 0; } + +.icon-menu::before { background: currentColor; box-shadow: 0 -.35em, 0 .35em; height: 0.1rem; width: 100%; } + +.icon-apps::before { background: currentColor; box-shadow: -.35em -.35em, -.35em 0, -.35em .35em, 0 -.35em, 0 .35em, .35em -.35em, .35em 0, .35em .35em; height: 3px; width: 3px; } + +.icon-resize-horiz::before, .icon-resize-horiz::after, .icon-resize-vert::before, .icon-resize-vert::after { border: 0.1rem solid currentColor; border-bottom: 0; border-right: 0; height: .45em; width: .45em; } + +.icon-resize-horiz::before, .icon-resize-vert::before { transform: translate(-50%, -90%) rotate(45deg); } + +.icon-resize-horiz::after, .icon-resize-vert::after { transform: translate(-50%, -10%) rotate(225deg); } + +.icon-resize-horiz::before { transform: translate(-90%, -50%) rotate(-45deg); } + +.icon-resize-horiz::after { transform: translate(-10%, -50%) rotate(135deg); } + +.icon-more-horiz::before, .icon-more-vert::before { background: currentColor; box-shadow: -.4em 0, .4em 0; border-radius: 50%; height: 3px; width: 3px; } + +.icon-more-vert::before { box-shadow: 0 -.4em, 0 .4em; } + +.icon-plus::before, .icon-minus::before, .icon-cross::before { background: currentColor; height: 0.1rem; width: 100%; } + +.icon-plus::after, .icon-cross::after { background: currentColor; height: 100%; width: 0.1rem; } + +.icon-cross::before { width: 100%; } + +.icon-cross::after { height: 100%; } + +.icon-cross::before, .icon-cross::after { transform: translate(-50%, -50%) rotate(45deg); } + +.icon-check::before { border: 0.1rem solid currentColor; border-right: 0; border-top: 0; height: .5em; width: .9em; transform: translate(-50%, -75%) rotate(-45deg); } + +.icon-stop { border: 0.1rem solid currentColor; border-radius: 50%; } + +.icon-stop::before { background: currentColor; height: 0.1rem; transform: translate(-50%, -50%) rotate(45deg); width: 1em; } + +.icon-shutdown { border: 0.1rem solid currentColor; border-radius: 50%; border-top-color: transparent; } + +.icon-shutdown::before { background: currentColor; content: ""; height: .5em; top: .1em; width: 0.1rem; } + +.icon-refresh::before { border: 0.1rem solid currentColor; border-radius: 50%; border-right-color: transparent; height: 1em; width: 1em; } + +.icon-refresh::after { border: .2em solid currentColor; border-top-color: transparent; border-left-color: transparent; height: 0; left: 80%; top: 20%; width: 0; } + +.icon-search::before { border: 0.1rem solid currentColor; border-radius: 50%; height: .75em; left: 5%; top: 5%; transform: translate(0, 0) rotate(45deg); width: .75em; } + +.icon-search::after { background: currentColor; height: 0.1rem; left: 80%; top: 80%; transform: translate(-50%, -50%) rotate(45deg); width: .4em; } + +.icon-edit::before { border: 0.1rem solid currentColor; height: .4em; transform: translate(-40%, -60%) rotate(-45deg); width: .85em; } + +.icon-edit::after { border: .15em solid currentColor; border-top-color: transparent; border-right-color: transparent; height: 0; left: 5%; top: 95%; transform: translate(0, -100%); width: 0; } + +.icon-delete::before { border: 0.1rem solid currentColor; border-bottom-left-radius: 0.1rem; border-bottom-right-radius: 0.1rem; border-top: 0; height: .75em; top: 60%; width: .75em; } + +.icon-delete::after { background: currentColor; box-shadow: -.25em .2em, .25em .2em; height: 0.1rem; top: 0.05rem; width: .5em; } + +.icon-share { border: 0.1rem solid currentColor; border-radius: 0.1rem; border-right: 0; border-top: 0; } + +.icon-share::before { border: 0.1rem solid currentColor; border-left: 0; border-top: 0; height: .4em; left: 100%; top: .25em; transform: translate(-125%, -50%) rotate(-45deg); width: .4em; } + +.icon-share::after { border: 0.1rem solid currentColor; border-bottom: 0; border-right: 0; border-radius: 75% 0; height: .5em; width: .6em; } + +.icon-flag::before { background: currentColor; height: 1em; left: 15%; width: 0.1rem; } + +.icon-flag::after { border: 0.1rem solid currentColor; border-bottom-right-radius: 0.1rem; border-left: 0; border-top-right-radius: 0.1rem; height: .65em; top: 35%; left: 60%; width: .8em; } + +.icon-bookmark::before { border: 0.1rem solid currentColor; border-bottom: 0; border-top-left-radius: 0.1rem; border-top-right-radius: 0.1rem; height: .9em; width: .8em; } + +.icon-bookmark::after { border: 0.1rem solid currentColor; border-bottom: 0; border-left: 0; border-radius: 0.1rem; height: .5em; transform: translate(-50%, 35%) rotate(-45deg) skew(15deg, 15deg); width: .5em; } + +.icon-download, .icon-upload { border-bottom: 0.1rem solid currentColor; } + +.icon-download::before, .icon-upload::before { border: 0.1rem solid currentColor; border-bottom: 0; border-right: 0; height: .5em; width: .5em; transform: translate(-50%, -60%) rotate(-135deg); } + +.icon-download::after, .icon-upload::after { background: currentColor; height: .6em; top: 40%; width: 0.1rem; } + +.icon-upload::before { transform: translate(-50%, -60%) rotate(45deg); } + +.icon-upload::after { top: 50%; } + +.icon-copy::before { border: 0.1rem solid currentColor; border-radius: 0.1rem; border-right: 0; border-bottom: 0; height: .8em; left: 40%; top: 35%; width: .8em; } + +.icon-copy::after { border: 0.1rem solid currentColor; border-radius: 0.1rem; height: .8em; left: 60%; top: 60%; width: .8em; } + +.icon-time { border: 0.1rem solid currentColor; border-radius: 50%; } + +.icon-time::before { background: currentColor; height: .4em; transform: translate(-50%, -75%); width: 0.1rem; } + +.icon-time::after { background: currentColor; height: .3em; transform: translate(-50%, -75%) rotate(90deg); transform-origin: 50% 90%; width: 0.1rem; } + +.icon-mail::before { border: 0.1rem solid currentColor; border-radius: 0.1rem; height: .8em; width: 1em; } + +.icon-mail::after { border: 0.1rem solid currentColor; border-right: 0; border-top: 0; height: .5em; transform: translate(-50%, -90%) rotate(-45deg) skew(10deg, 10deg); width: .5em; } + +.icon-people::before { border: 0.1rem solid currentColor; border-radius: 50%; height: .45em; top: 25%; width: .45em; } + +.icon-people::after { border: 0.1rem solid currentColor; border-radius: 50% 50% 0 0; height: .4em; top: 75%; width: .9em; } + +.icon-message { border: 0.1rem solid currentColor; border-bottom: 0; border-radius: 0.1rem; border-right: 0; } + +.icon-message::before { border: 0.1rem solid currentColor; border-bottom-right-radius: 0.1rem; border-left: 0; border-top: 0; height: .8em; left: 65%; top: 40%; width: .7em; } + +.icon-message::after { background: currentColor; border-radius: 0.1rem; height: .3em; left: 10%; top: 100%; transform: translate(0, -90%) rotate(45deg); width: 0.1rem; } + +.icon-photo { border: 0.1rem solid currentColor; border-radius: 0.1rem; } + +.icon-photo::before { border: 0.1rem solid currentColor; border-radius: 50%; height: .25em; left: 35%; top: 35%; width: .25em; } + +.icon-photo::after { border: 0.1rem solid currentColor; border-bottom: 0; border-left: 0; height: .5em; left: 60%; transform: translate(-50%, 25%) rotate(-45deg); width: .5em; } + +.icon-link::before, .icon-link::after { border: 0.1rem solid currentColor; border-radius: 5em 0 0 5em; border-right: 0; height: .5em; width: .75em; } + +.icon-link::before { transform: translate(-70%, -45%) rotate(-45deg); } + +.icon-link::after { transform: translate(-30%, -55%) rotate(135deg); } + +.icon-location::before { border: 0.1rem solid currentColor; border-radius: 50% 50% 50% 0; height: .8em; transform: translate(-50%, -60%) rotate(-45deg); width: .8em; } + +.icon-location::after { border: 0.1rem solid currentColor; border-radius: 50%; height: .2em; transform: translate(-50%, -80%); width: .2em; } + +.icon-emoji { border: 0.1rem solid currentColor; border-radius: 50%; } + +.icon-emoji::before { border-radius: 50%; box-shadow: -.17em -.1em, .17em -.1em; height: .15em; width: .15em; } + +.icon-emoji::after { border: 0.1rem solid currentColor; border-bottom-color: transparent; border-radius: 50%; border-right-color: transparent; height: .5em; transform: translate(-50%, -40%) rotate(-135deg); width: .5em; } + +/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlY3RyZS1pY29ucy5jc3MiLCJzb3VyY2VzIjpbInNwZWN0cmUtaWNvbnMuc2NzcyIsInRoZW1lL192YXJpYWJsZXMuc2NzcyIsInNwZWN0cmUvX3ZhcmlhYmxlcy5zY3NzIiwic3BlY3RyZS9fbWl4aW5zLnNjc3MiLCJzcGVjdHJlL21peGlucy9fYXZhdGFyLnNjc3MiLCJzcGVjdHJlL21peGlucy9fYnV0dG9uLnNjc3MiLCJzcGVjdHJlL21peGlucy9fY2xlYXJmaXguc2NzcyIsInNwZWN0cmUvbWl4aW5zL19jb2xvci5zY3NzIiwic3BlY3RyZS9taXhpbnMvX2xhYmVsLnNjc3MiLCJzcGVjdHJlL21peGlucy9fcG9zaXRpb24uc2NzcyIsInNwZWN0cmUvbWl4aW5zL19zaGFkb3cuc2NzcyIsInNwZWN0cmUvbWl4aW5zL190ZXh0LnNjc3MiLCJzcGVjdHJlL21peGlucy9fdG9hc3Quc2NzcyIsInNwZWN0cmUvaWNvbnMvX2ljb25zLWNvcmUuc2NzcyIsInNwZWN0cmUvaWNvbnMvX2ljb25zLW5hdmlnYXRpb24uc2NzcyIsInNwZWN0cmUvaWNvbnMvX2ljb25zLWFjdGlvbi5zY3NzIiwic3BlY3RyZS9pY29ucy9faWNvbnMtb2JqZWN0LnNjc3MiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVmFyaWFibGVzIGFuZCBtaXhpbnNcbkBpbXBvcnQgXCJ0aGVtZS92YXJpYWJsZXNcIjtcbkBpbXBvcnQgXCJzcGVjdHJlL3ZhcmlhYmxlc1wiO1xuQGltcG9ydCBcInNwZWN0cmUvbWl4aW5zXCI7XG5cbi8qISBTcGVjdHJlLmNzcyBJY29ucyB2I3skdmVyc2lvbn0gfCBNSVQgTGljZW5zZSB8IGdpdGh1Yi5jb20vcGljdHVyZXBhbjIvc3BlY3RyZSAqL1xuLy8gSWNvbnNcbkBpbXBvcnQgXCJzcGVjdHJlL2ljb25zL2ljb25zLWNvcmVcIjtcbkBpbXBvcnQgXCJzcGVjdHJlL2ljb25zL2ljb25zLW5hdmlnYXRpb25cIjtcbkBpbXBvcnQgXCJzcGVjdHJlL2ljb25zL2ljb25zLWFjdGlvblwiO1xuQGltcG9ydCBcInNwZWN0cmUvaWNvbnMvaWNvbnMtb2JqZWN0XCI7XG4iLCIvLyBDb2xvcnNcbiR0dXJxdW9pc2U6ICMxQUJDOUM7XG4kZ3JlZW4tc2VhOiAjMTZBMDg1O1xuJGVtZXJhbGQ6ICMyRUNDNzE7XG4kbmVwaHJpdGlzOiAjMjdBRTYwO1xuJHBldGVyLXJpdmVyOiAjMzQ5OERCO1xuJGJlbGl6ZV9ob2xlOiAjMjk4MEI5O1xuJGRlZXAtd2VsbDogIzI4M0E2MztcbiRsYXZlbmRlcjogIzc2NzZmNDtcbiRhbWV0aHlzdDogI0E2NkJCRTtcbiR3aXN0ZXJpYTogIzhFNDRBRDtcbiR3ZXQtYXNwaGFsdDogIzM0NDk1RTtcbiRtaWRuaWdodC1ibHVlOiAjMkMzRTUwO1xuJHN1bmZsb3dlcjogI0YyQ0EyNztcbiRvcmFuZ2U6ICNGMzlDMTI7XG4kY2Fycm90OiAjRTY3RTIyO1xuJHB1bXBraW46ICNEMzU0MDA7XG4kYWxpemFyaW46ICNFNzRDM0M7XG4kcG9tZWdyYW5hdGU6ICNDMDM5MkI7XG4kY2xvdWRzOiAjRUNGMEYxO1xuJHNpbHZlcjogI0JEQzNDNztcbiRjb25jcmV0ZTogIzk1QTVBNjtcbiRhc2Jlc3RvczogIzdGOEM4RDtcblxuJHByaW1hcnktY29sb3I6ICMxQUEzRUQgIWRlZmF1bHQ7XG4kc2Vjb25kYXJ5LWNvbG9yOiAjMzhDNUM3ICFkZWZhdWx0O1xuJGRhcmstY29sb3I6ICM0NTRkNWQgIWRlZmF1bHQ7XG4kYm9keS1mb250LWNvbG9yOiBkYXJrZW4oJGRhcmstY29sb3IsIDUlKSAhZGVmYXVsdDtcbiRsaW5rLWNvbG9yOiBkYXJrZW4oJHByaW1hcnktY29sb3IsIDUlKSAhZGVmYXVsdDtcbiRncmF5LWNvbG9yOiBsaWdodGVuKCRkYXJrLWNvbG9yLCA0MCUpICFkZWZhdWx0O1xuJGdyYXktY29sb3ItZGFyazogZGFya2VuKCRncmF5LWNvbG9yLCAyNSUpICFkZWZhdWx0O1xuJGJvcmRlci1jb2xvcjogbGlnaHRlbigkZGFyay1jb2xvciwgNjAlKSAhZGVmYXVsdDtcbiRiZy1jb2xvcjogbGlnaHRlbigkZGFyay1jb2xvciwgNjYlKSAhZGVmYXVsdDtcbiRjb2RlLWNvbG9yOiAkbGF2ZW5kZXIgIWRlZmF1bHQ7XG4kc2VsZWN0aW9uLWNvbG9yOiAjRUNFQ0ZFO1xuXG4vLyBTaWRlYmFyXG4kc2lkZWJhci13aWR0aDogMTRyZW07XG4kc2lkZWJhci1icmFuZC1oZWlnaHQ6IDdyZW07XG5cbi8vIEZvbnRzXG4kYmFzZS1mb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgc3lzdGVtLXVpLCBCbGlua01hY1N5c3RlbUZvbnQsIFwiU2Vnb2UgVUlcIiwgUm9ib3RvICFkZWZhdWx0O1xuJGZhbGxiYWNrLWZvbnQtZmFtaWx5OiBcIkhlbHZldGljYSBOZXVlXCIsIHNhbnMtc2VyaWYgIWRlZmF1bHQ7XG4kYm9keS1mb250LWZhbWlseTogXCJQdWJsaWMgU2Fuc1wiLCAgJGZhbGxiYWNrLWZvbnQtZmFtaWx5ICFkZWZhdWx0O1xuJHRpdGxlLWZvbnQtZmFtaWx5OiBcIk1ldHJvcG9saXNcIiwgJGZhbGxiYWNrLWZvbnQtZmFtaWx5ICFkZWZhdWx0O1xuJG1vbm8tZm9udC1mYW1pbHk6IFwiSGFja1wiLCBtb25vc3BhY2UgIWRlZmF1bHQ7XG4kZm9udC1zaXplOiAuODVyZW0gIWRlZmF1bHQ7XG4kbWluLXJlc3BvbnNpdmUtZm9udC1zaXplOiAxOHB4O1xuIiwiLy8gQ29yZSB2YXJpYWJsZXNcbiR2ZXJzaW9uOiBcIjAuNS44XCI7XG5cbi8vIENvcmUgZmVhdHVyZXNcbiRydGw6IGZhbHNlICFkZWZhdWx0O1xuXG4vLyBDb3JlIGNvbG9yc1xuJHByaW1hcnktY29sb3I6ICM1NzU1ZDkgIWRlZmF1bHQ7XG4kcHJpbWFyeS1jb2xvci1kYXJrOiBkYXJrZW4oJHByaW1hcnktY29sb3IsIDMlKSAhZGVmYXVsdDtcbiRwcmltYXJ5LWNvbG9yLWxpZ2h0OiBsaWdodGVuKCRwcmltYXJ5LWNvbG9yLCAzJSkgIWRlZmF1bHQ7XG4kc2Vjb25kYXJ5LWNvbG9yOiBsaWdodGVuKCRwcmltYXJ5LWNvbG9yLCAzNy41JSkgIWRlZmF1bHQ7XG4kc2Vjb25kYXJ5LWNvbG9yLWRhcms6IGRhcmtlbigkc2Vjb25kYXJ5LWNvbG9yLCAzJSkgIWRlZmF1bHQ7XG4kc2Vjb25kYXJ5LWNvbG9yLWxpZ2h0OiBsaWdodGVuKCRzZWNvbmRhcnktY29sb3IsIDMlKSAhZGVmYXVsdDtcblxuLy8gR3JheSBjb2xvcnNcbiRkYXJrLWNvbG9yOiAjMzAzNzQyICFkZWZhdWx0O1xuJGxpZ2h0LWNvbG9yOiAjZmZmICFkZWZhdWx0O1xuJGdyYXktY29sb3I6IGxpZ2h0ZW4oJGRhcmstY29sb3IsIDU1JSkgIWRlZmF1bHQ7XG4kZ3JheS1jb2xvci1kYXJrOiBkYXJrZW4oJGdyYXktY29sb3IsIDMwJSkgIWRlZmF1bHQ7XG4kZ3JheS1jb2xvci1saWdodDogbGlnaHRlbigkZ3JheS1jb2xvciwgMjAlKSAhZGVmYXVsdDtcblxuJGJvcmRlci1jb2xvcjogbGlnaHRlbigkZGFyay1jb2xvciwgNjUlKSAhZGVmYXVsdDtcbiRib3JkZXItY29sb3ItZGFyazogZGFya2VuKCRib3JkZXItY29sb3IsIDEwJSkgIWRlZmF1bHQ7XG4kYm9yZGVyLWNvbG9yLWxpZ2h0OiBsaWdodGVuKCRib3JkZXItY29sb3IsIDglKSAhZGVmYXVsdDtcbiRiZy1jb2xvcjogbGlnaHRlbigkZGFyay1jb2xvciwgNzUlKSAhZGVmYXVsdDtcbiRiZy1jb2xvci1kYXJrOiBkYXJrZW4oJGJnLWNvbG9yLCAzJSkgIWRlZmF1bHQ7XG4kYmctY29sb3ItbGlnaHQ6ICRsaWdodC1jb2xvciAhZGVmYXVsdDtcblxuLy8gQ29udHJvbCBjb2xvcnNcbiRzdWNjZXNzLWNvbG9yOiAjMzJiNjQzICFkZWZhdWx0O1xuJHdhcm5pbmctY29sb3I6ICNmZmI3MDAgIWRlZmF1bHQ7XG4kZXJyb3ItY29sb3I6ICNlODU2MDAgIWRlZmF1bHQ7XG5cbi8vIE90aGVyIGNvbG9yc1xuJGNvZGUtY29sb3I6ICNkNzNlNDggIWRlZmF1bHQ7XG4kaGlnaGxpZ2h0LWNvbG9yOiAjZmZlOWIzICFkZWZhdWx0O1xuJGJvZHktYmc6ICRiZy1jb2xvci1saWdodCAhZGVmYXVsdDtcbiRib2R5LWZvbnQtY29sb3I6IGxpZ2h0ZW4oJGRhcmstY29sb3IsIDUlKSAhZGVmYXVsdDtcbiRsaW5rLWNvbG9yOiAkcHJpbWFyeS1jb2xvciAhZGVmYXVsdDtcbiRsaW5rLWNvbG9yLWRhcms6IGRhcmtlbigkbGluay1jb2xvciwgMTAlKSAhZGVmYXVsdDtcbiRsaW5rLWNvbG9yLWxpZ2h0OiBsaWdodGVuKCRsaW5rLWNvbG9yLCAxMCUpICFkZWZhdWx0O1xuXG4vLyBGb250c1xuLy8gQ3JlZGl0OiBodHRwczovL3d3dy5zbWFzaGluZ21hZ2F6aW5lLmNvbS8yMDE1LzExL3VzaW5nLXN5c3RlbS11aS1mb250cy1wcmFjdGljYWwtZ3VpZGUvXG4kYmFzZS1mb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgc3lzdGVtLXVpLCBCbGlua01hY1N5c3RlbUZvbnQsIFwiU2Vnb2UgVUlcIiwgUm9ib3RvICFkZWZhdWx0O1xuJG1vbm8tZm9udC1mYW1pbHk6IFwiU0YgTW9ub1wiLCBcIlNlZ29lIFVJIE1vbm9cIiwgXCJSb2JvdG8gTW9ub1wiLCBNZW5sbywgQ291cmllciwgbW9ub3NwYWNlICFkZWZhdWx0O1xuJGZhbGxiYWNrLWZvbnQtZmFtaWx5OiBcIkhlbHZldGljYSBOZXVlXCIsIHNhbnMtc2VyaWYgIWRlZmF1bHQ7XG4kY2prLXpoLWhhbnMtZm9udC1mYW1pbHk6ICRiYXNlLWZvbnQtZmFtaWx5LCBcIlBpbmdGYW5nIFNDXCIsIFwiSGlyYWdpbm8gU2FucyBHQlwiLCBcIk1pY3Jvc29mdCBZYUhlaVwiLCAkZmFsbGJhY2stZm9udC1mYW1pbHkgIWRlZmF1bHQ7XG4kY2prLXpoLWhhbnQtZm9udC1mYW1pbHk6ICRiYXNlLWZvbnQtZmFtaWx5LCBcIlBpbmdGYW5nIFRDXCIsIFwiSGlyYWdpbm8gU2FucyBDTlNcIiwgXCJNaWNyb3NvZnQgSmhlbmdIZWlcIiwgJGZhbGxiYWNrLWZvbnQtZmFtaWx5ICFkZWZhdWx0O1xuJGNqay1qcC1mb250LWZhbWlseTogJGJhc2UtZm9udC1mYW1pbHksIFwiSGlyYWdpbm8gU2Fuc1wiLCBcIkhpcmFnaW5vIEtha3UgR290aGljIFByb1wiLCBcIll1IEdvdGhpY1wiLCBZdUdvdGhpYywgTWVpcnlvLCAkZmFsbGJhY2stZm9udC1mYW1pbHkgIWRlZmF1bHQ7XG4kY2prLWtvLWZvbnQtZmFtaWx5OiAkYmFzZS1mb250LWZhbWlseSwgXCJNYWxndW4gR290aGljXCIsICRmYWxsYmFjay1mb250LWZhbWlseSAhZGVmYXVsdDtcbiRib2R5LWZvbnQtZmFtaWx5OiAkYmFzZS1mb250LWZhbWlseSwgJGZhbGxiYWNrLWZvbnQtZmFtaWx5ICFkZWZhdWx0O1xuXG4vLyBVbml0IHNpemVzXG4kdW5pdC1vOiAuMDVyZW0gIWRlZmF1bHQ7XG4kdW5pdC1oOiAuMXJlbSAhZGVmYXVsdDtcbiR1bml0LTE6IC4ycmVtICFkZWZhdWx0O1xuJHVuaXQtMjogLjRyZW0gIWRlZmF1bHQ7XG4kdW5pdC0zOiAuNnJlbSAhZGVmYXVsdDtcbiR1bml0LTQ6IC44cmVtICFkZWZhdWx0O1xuJHVuaXQtNTogMXJlbSAhZGVmYXVsdDtcbiR1bml0LTY6IDEuMnJlbSAhZGVmYXVsdDtcbiR1bml0LTc6IDEuNHJlbSAhZGVmYXVsdDtcbiR1bml0LTg6IDEuNnJlbSAhZGVmYXVsdDtcbiR1bml0LTk6IDEuOHJlbSAhZGVmYXVsdDtcbiR1bml0LTEwOiAycmVtICFkZWZhdWx0O1xuJHVuaXQtMTI6IDIuNHJlbSAhZGVmYXVsdDtcbiR1bml0LTE2OiAzLjJyZW0gIWRlZmF1bHQ7XG5cbi8vIEZvbnQgc2l6ZXNcbiRodG1sLWZvbnQtc2l6ZTogMjBweCAhZGVmYXVsdDtcbiRodG1sLWxpbmUtaGVpZ2h0OiAxLjUgIWRlZmF1bHQ7XG4kZm9udC1zaXplOiAuOHJlbSAhZGVmYXVsdDtcbiRmb250LXNpemUtc206IC43cmVtICFkZWZhdWx0O1xuJGZvbnQtc2l6ZS1sZzogLjlyZW0gIWRlZmF1bHQ7XG4kbGluZS1oZWlnaHQ6IDEuMnJlbSAhZGVmYXVsdDtcblxuLy8gU2l6ZXNcbiRsYXlvdXQtc3BhY2luZzogJHVuaXQtMiAhZGVmYXVsdDtcbiRsYXlvdXQtc3BhY2luZy1zbTogJHVuaXQtMSAhZGVmYXVsdDtcbiRsYXlvdXQtc3BhY2luZy1sZzogJHVuaXQtNCAhZGVmYXVsdDtcbiRib3JkZXItcmFkaXVzOiAkdW5pdC1oICFkZWZhdWx0O1xuJGJvcmRlci13aWR0aDogJHVuaXQtbyAhZGVmYXVsdDtcbiRib3JkZXItd2lkdGgtbGc6ICR1bml0LWggIWRlZmF1bHQ7XG4kY29udHJvbC1zaXplOiAkdW5pdC05ICFkZWZhdWx0O1xuJGNvbnRyb2wtc2l6ZS1zbTogJHVuaXQtNyAhZGVmYXVsdDtcbiRjb250cm9sLXNpemUtbGc6ICR1bml0LTEwICFkZWZhdWx0O1xuJGNvbnRyb2wtcGFkZGluZy14OiAkdW5pdC0yICFkZWZhdWx0O1xuJGNvbnRyb2wtcGFkZGluZy14LXNtOiAkdW5pdC0yICogLjc1ICFkZWZhdWx0O1xuJGNvbnRyb2wtcGFkZGluZy14LWxnOiAkdW5pdC0yICogMS41ICFkZWZhdWx0O1xuJGNvbnRyb2wtcGFkZGluZy15OiAoJGNvbnRyb2wtc2l6ZSAtICRsaW5lLWhlaWdodCkgLyAyIC0gJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcbiRjb250cm9sLXBhZGRpbmcteS1zbTogKCRjb250cm9sLXNpemUtc20gLSAkbGluZS1oZWlnaHQpIC8gMiAtICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XG4kY29udHJvbC1wYWRkaW5nLXktbGc6ICgkY29udHJvbC1zaXplLWxnIC0gJGxpbmUtaGVpZ2h0KSAvIDIgLSAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xuJGNvbnRyb2wtaWNvbi1zaXplOiAuOHJlbSAhZGVmYXVsdDtcblxuJGNvbnRyb2wtd2lkdGgteHM6IDE4MHB4ICFkZWZhdWx0O1xuJGNvbnRyb2wtd2lkdGgtc206IDMyMHB4ICFkZWZhdWx0O1xuJGNvbnRyb2wtd2lkdGgtbWQ6IDY0MHB4ICFkZWZhdWx0O1xuJGNvbnRyb2wtd2lkdGgtbGc6IDk2MHB4ICFkZWZhdWx0O1xuJGNvbnRyb2wtd2lkdGgteGw6IDEyODBweCAhZGVmYXVsdDtcblxuLy8gUmVzcG9uc2l2ZSBicmVha3BvaW50c1xuJHNpemUteHM6IDQ4MHB4ICFkZWZhdWx0O1xuJHNpemUtc206IDYwMHB4ICFkZWZhdWx0O1xuJHNpemUtbWQ6IDg0MHB4ICFkZWZhdWx0O1xuJHNpemUtbGc6IDk2MHB4ICFkZWZhdWx0O1xuJHNpemUteGw6IDEyODBweCAhZGVmYXVsdDtcbiRzaXplLTJ4OiAxNDQwcHggIWRlZmF1bHQ7XG5cbiRyZXNwb25zaXZlLWJyZWFrcG9pbnQ6ICRzaXplLXhzICFkZWZhdWx0O1xuXG4vLyBaLWluZGV4XG4kemluZGV4LTA6IDEgIWRlZmF1bHQ7XG4kemluZGV4LTE6IDEwMCAhZGVmYXVsdDtcbiR6aW5kZXgtMjogMjAwICFkZWZhdWx0O1xuJHppbmRleC0zOiAzMDAgIWRlZmF1bHQ7XG4kemluZGV4LTQ6IDQwMCAhZGVmYXVsdDtcbiIsIi8vIE1peGluc1xuQGltcG9ydCBcIm1peGlucy9hdmF0YXJcIjtcbkBpbXBvcnQgXCJtaXhpbnMvYnV0dG9uXCI7XG5AaW1wb3J0IFwibWl4aW5zL2NsZWFyZml4XCI7XG5AaW1wb3J0IFwibWl4aW5zL2NvbG9yXCI7XG5AaW1wb3J0IFwibWl4aW5zL2xhYmVsXCI7XG5AaW1wb3J0IFwibWl4aW5zL3Bvc2l0aW9uXCI7XG5AaW1wb3J0IFwibWl4aW5zL3NoYWRvd1wiO1xuQGltcG9ydCBcIm1peGlucy90ZXh0XCI7XG5AaW1wb3J0IFwibWl4aW5zL3RvYXN0XCI7IiwiLy8gQXZhdGFyIG1peGluXG5AbWl4aW4gYXZhdGFyLWJhc2UoJHNpemU6ICR1bml0LTgpIHtcbiAgZm9udC1zaXplOiAkc2l6ZSAvIDI7XG4gIGhlaWdodDogJHNpemU7XG4gIHdpZHRoOiAkc2l6ZTtcbn1cbiIsIi8vIEJ1dHRvbiB2YXJpYW50IG1peGluXG5AbWl4aW4gYnV0dG9uLXZhcmlhbnQoJGNvbG9yOiAkcHJpbWFyeS1jb2xvcikge1xuICBiYWNrZ3JvdW5kOiAkY29sb3I7XG4gIGJvcmRlci1jb2xvcjogZGFya2VuKCRjb2xvciwgMyUpO1xuICBjb2xvcjogJGxpZ2h0LWNvbG9yO1xuICAmOmZvY3VzIHtcbiAgICBAaW5jbHVkZSBjb250cm9sLXNoYWRvdygkY29sb3IpO1xuICB9XG4gICY6Zm9jdXMsXG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IGRhcmtlbigkY29sb3IsIDIlKTtcbiAgICBib3JkZXItY29sb3I6IGRhcmtlbigkY29sb3IsIDUlKTtcbiAgICBjb2xvcjogJGxpZ2h0LWNvbG9yO1xuICB9XG4gICY6YWN0aXZlLFxuICAmLmFjdGl2ZSB7XG4gICAgYmFja2dyb3VuZDogZGFya2VuKCRjb2xvciwgNyUpO1xuICAgIGJvcmRlci1jb2xvcjogZGFya2VuKCRjb2xvciwgMTAlKTtcbiAgICBjb2xvcjogJGxpZ2h0LWNvbG9yO1xuICB9XG4gICYubG9hZGluZyB7XG4gICAgJjo6YWZ0ZXIge1xuICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJGxpZ2h0LWNvbG9yO1xuICAgICAgYm9yZGVyLWxlZnQtY29sb3I6ICRsaWdodC1jb2xvcjtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIGJ1dHRvbi1vdXRsaW5lLXZhcmlhbnQoJGNvbG9yOiAkcHJpbWFyeS1jb2xvcikge1xuICBiYWNrZ3JvdW5kOiAkbGlnaHQtY29sb3I7XG4gIGJvcmRlci1jb2xvcjogJGNvbG9yO1xuICBjb2xvcjogJGNvbG9yO1xuICAmOmZvY3VzIHtcbiAgICBAaW5jbHVkZSBjb250cm9sLXNoYWRvdygkY29sb3IpO1xuICB9XG4gICY6Zm9jdXMsXG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IGxpZ2h0ZW4oJGNvbG9yLCA1MCUpO1xuICAgIGJvcmRlci1jb2xvcjogZGFya2VuKCRjb2xvciwgMiUpO1xuICAgIGNvbG9yOiAkY29sb3I7XG4gIH1cbiAgJjphY3RpdmUsXG4gICYuYWN0aXZlIHtcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3I7XG4gICAgYm9yZGVyLWNvbG9yOiBkYXJrZW4oJGNvbG9yLCA1JSk7XG4gICAgY29sb3I6ICRsaWdodC1jb2xvcjtcbiAgfVxuICAmLmxvYWRpbmcge1xuICAgICY6OmFmdGVyIHtcbiAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICRjb2xvcjtcbiAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAkY29sb3I7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDbGVhcmZpeCBtaXhpblxuQG1peGluIGNsZWFyZml4KCkge1xuICAmOjphZnRlciB7XG4gICAgY2xlYXI6IGJvdGg7XG4gICAgY29udGVudDogXCJcIjtcbiAgICBkaXNwbGF5OiB0YWJsZTtcbiAgfVxufVxuIiwiLy8gQmFja2dyb3VuZCBjb2xvciB1dGlsaXR5IG1peGluXG5AbWl4aW4gYmctY29sb3ItdmFyaWFudCgkbmFtZTogXCIuYmctcHJpbWFyeVwiLCAkY29sb3I6ICRwcmltYXJ5LWNvbG9yKSB7XG4gICN7JG5hbWV9IHtcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3IgIWltcG9ydGFudDtcblxuICAgIEBpZiAobGlnaHRuZXNzKCRjb2xvcikgPCA2MCkge1xuICAgICAgY29sb3I6ICRsaWdodC1jb2xvcjtcbiAgICB9XG4gIH1cbn1cblxuLy8gVGV4dCBjb2xvciB1dGlsaXR5IG1peGluXG5AbWl4aW4gdGV4dC1jb2xvci12YXJpYW50KCRuYW1lOiBcIi50ZXh0LXByaW1hcnlcIiwgJGNvbG9yOiAkcHJpbWFyeS1jb2xvcikge1xuICAjeyRuYW1lfSB7XG4gICAgY29sb3I6ICRjb2xvciAhaW1wb3J0YW50O1xuICB9XG5cbiAgYSN7JG5hbWV9IHtcbiAgICAmOmZvY3VzLFxuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6IGRhcmtlbigkY29sb3IsIDUlKTtcbiAgICB9XG4gICAgJjp2aXNpdGVkIHtcbiAgICAgIGNvbG9yOiBsaWdodGVuKCRjb2xvciwgNSUpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gTGFiZWwgYmFzZSBzdHlsZVxuQG1peGluIGxhYmVsLWJhc2UoKSB7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICBsaW5lLWhlaWdodDogMS4yNTtcbiAgcGFkZGluZzogLjFyZW0gLjJyZW07XG59XG5cbkBtaXhpbiBsYWJlbC12YXJpYW50KCRjb2xvcjogJGxpZ2h0LWNvbG9yLCAkYmctY29sb3I6ICRwcmltYXJ5LWNvbG9yKSB7XG4gIGJhY2tncm91bmQ6ICRiZy1jb2xvcjtcbiAgY29sb3I6ICRjb2xvcjtcbn1cbiIsIi8vIE1hcmdpbiB1dGlsaXR5IG1peGluXG5AbWl4aW4gbWFyZ2luLXZhcmlhbnQoJGlkOiAxLCAkc2l6ZTogJHVuaXQtMSkge1xuICAubS0jeyRpZH0ge1xuICAgIG1hcmdpbjogJHNpemUgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5tYi0jeyRpZH0ge1xuICAgIG1hcmdpbi1ib3R0b206ICRzaXplICFpbXBvcnRhbnQ7XG4gIH1cblxuICAubWwtI3skaWR9IHtcbiAgICBtYXJnaW4tbGVmdDogJHNpemUgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5tci0jeyRpZH0ge1xuICAgIG1hcmdpbi1yaWdodDogJHNpemUgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5tdC0jeyRpZH0ge1xuICAgIG1hcmdpbi10b3A6ICRzaXplICFpbXBvcnRhbnQ7XG4gIH1cblxuICAubXgtI3skaWR9IHtcbiAgICBtYXJnaW4tbGVmdDogJHNpemUgIWltcG9ydGFudDtcbiAgICBtYXJnaW4tcmlnaHQ6ICRzaXplICFpbXBvcnRhbnQ7XG4gIH1cblxuICAubXktI3skaWR9IHtcbiAgICBtYXJnaW4tYm90dG9tOiAkc2l6ZSAhaW1wb3J0YW50O1xuICAgIG1hcmdpbi10b3A6ICRzaXplICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuLy8gUGFkZGluZyB1dGlsaXR5IG1peGluXG5AbWl4aW4gcGFkZGluZy12YXJpYW50KCRpZDogMSwgJHNpemU6ICR1bml0LTEpIHtcbiAgLnAtI3skaWR9IHtcbiAgICBwYWRkaW5nOiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG5cbiAgLnBiLSN7JGlkfSB7XG4gICAgcGFkZGluZy1ib3R0b206ICRzaXplICFpbXBvcnRhbnQ7XG4gIH1cblxuICAucGwtI3skaWR9IHtcbiAgICBwYWRkaW5nLWxlZnQ6ICRzaXplICFpbXBvcnRhbnQ7XG4gIH1cblxuICAucHItI3skaWR9IHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG5cbiAgLnB0LSN7JGlkfSB7XG4gICAgcGFkZGluZy10b3A6ICRzaXplICFpbXBvcnRhbnQ7XG4gIH1cblxuICAucHgtI3skaWR9IHtcbiAgICBwYWRkaW5nLWxlZnQ6ICRzaXplICFpbXBvcnRhbnQ7XG4gICAgcGFkZGluZy1yaWdodDogJHNpemUgIWltcG9ydGFudDtcbiAgfVxuICBcbiAgLnB5LSN7JGlkfSB7XG4gICAgcGFkZGluZy1ib3R0b206ICRzaXplICFpbXBvcnRhbnQ7XG4gICAgcGFkZGluZy10b3A6ICRzaXplICFpbXBvcnRhbnQ7XG4gIH1cbn1cbiIsIi8vIENvbXBvbmVudCBmb2N1cyBzaGFkb3dcbkBtaXhpbiBjb250cm9sLXNoYWRvdygkY29sb3I6ICRwcmltYXJ5LWNvbG9yKSB7XG4gIGJveC1zaGFkb3c6IDAgMCAwIC4xcmVtIHJnYmEoJGNvbG9yLCAuMik7XG59XG5cbi8vIFNoYWRvdyBtaXhpblxuQG1peGluIHNoYWRvdy12YXJpYW50KCRvZmZzZXQpIHtcbiAgYm94LXNoYWRvdzogMCAkb2Zmc2V0ICgkb2Zmc2V0ICsgLjA1cmVtKSAqIDIgcmdiYSgkZGFyay1jb2xvciwgLjMpO1xufVxuIiwiLy8gVGV4dCBFbGxpcHNpc1xuQG1peGluIHRleHQtZWxsaXBzaXMoKSB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuIiwiLy8gVG9hc3QgdmFyaWFudCBtaXhpblxuQG1peGluIHRvYXN0LXZhcmlhbnQoJGNvbG9yOiAkZGFyay1jb2xvcikge1xuICBiYWNrZ3JvdW5kOiByZ2JhKCRjb2xvciwgLjk1KTtcbiAgYm9yZGVyLWNvbG9yOiAkY29sb3I7XG59XG4iLCIvLyBJY29uIHZhcmlhYmxlc1xuJGljb24tYm9yZGVyLXdpZHRoOiAkYm9yZGVyLXdpZHRoLWxnO1xuJGljb24tcHJlZml4OiBcImljb25cIjtcblxuLy8gSWNvbiBiYXNlIHN0eWxlXG4uI3skaWNvbi1wcmVmaXh9IHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBmb250LXNpemU6IGluaGVyaXQ7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgaGVpZ2h0OiAxZW07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdGV4dC1pbmRlbnQ6IC05OTk5cHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHdpZHRoOiAxZW07XG4gICY6OmJlZm9yZSxcbiAgJjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbGVmdDogNTAlO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDUwJTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgfVxuXG4gIC8vIEljb24gc2l6ZXNcbiAgJi5pY29uLTJ4IHtcbiAgICBmb250LXNpemU6IDEuNnJlbTtcbiAgfVxuXG4gICYuaWNvbi0zeCB7XG4gICAgZm9udC1zaXplOiAyLjRyZW07XG4gIH1cblxuICAmLmljb24tNHgge1xuICAgIGZvbnQtc2l6ZTogMy4ycmVtO1xuICB9XG59XG5cbi8vIENvbXBvbmVudCBpY29uIHN1cHBvcnRcbi5hY2NvcmRpb24sXG4uYnRuLFxuLnRvYXN0LFxuLm1lbnUge1xuICAuI3skaWNvbi1wcmVmaXh9IHtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogLTEwJTtcbiAgfVxufVxuXG4uYnRuLWxnIHtcbiAgLiN7JGljb24tcHJlZml4fSB7XG4gICAgdmVydGljYWwtYWxpZ246IC0xNSU7XG4gIH1cbn1cbiIsIi8vIEljb24gYXJyb3dzXG4uaWNvbi1hcnJvdy1kb3duLFxuLmljb24tYXJyb3ctbGVmdCxcbi5pY29uLWFycm93LXJpZ2h0LFxuLmljb24tYXJyb3ctdXAsXG4uaWNvbi1kb3dud2FyZCxcbi5pY29uLWJhY2ssXG4uaWNvbi1mb3J3YXJkLFxuLmljb24tdXB3YXJkIHtcbiAgJjo6YmVmb3JlIHtcbiAgICBib3JkZXI6ICRpY29uLWJvcmRlci13aWR0aCBzb2xpZCBjdXJyZW50Q29sb3I7XG4gICAgYm9yZGVyLWJvdHRvbTogMDtcbiAgICBib3JkZXItcmlnaHQ6IDA7XG4gICAgaGVpZ2h0OiAuNjVlbTtcbiAgICB3aWR0aDogLjY1ZW07XG4gIH1cbn1cblxuLmljb24tYXJyb3ctZG93biB7XG4gICY6OmJlZm9yZSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTc1JSkgcm90YXRlKDIyNWRlZyk7XG4gIH1cbn1cblxuLmljb24tYXJyb3ctbGVmdCB7XG4gICY6OmJlZm9yZSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTI1JSwgLTUwJSkgcm90YXRlKC00NWRlZyk7XG4gIH1cbn1cblxuLmljb24tYXJyb3ctcmlnaHQge1xuICAmOjpiZWZvcmUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC03NSUsIC01MCUpIHJvdGF0ZSgxMzVkZWcpO1xuICB9XG59XG5cbi5pY29uLWFycm93LXVwIHtcbiAgJjo6YmVmb3JlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtMjUlKSByb3RhdGUoNDVkZWcpO1xuICB9XG59XG5cbi5pY29uLWJhY2ssXG4uaWNvbi1mb3J3YXJkIHtcbiAgJjo6YWZ0ZXIge1xuICAgIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcbiAgICBoZWlnaHQ6ICRpY29uLWJvcmRlci13aWR0aDtcbiAgICB3aWR0aDogLjhlbTtcbiAgfVxufVxuXG4uaWNvbi1kb3dud2FyZCxcbi5pY29uLXVwd2FyZCB7XG4gICY6OmFmdGVyIHtcbiAgICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XG4gICAgaGVpZ2h0OiAuOGVtO1xuICAgIHdpZHRoOiAkaWNvbi1ib3JkZXItd2lkdGg7XG4gIH1cbn1cblxuLmljb24tYmFjayB7XG4gICY6OmFmdGVyIHtcbiAgICBsZWZ0OiA1NSU7XG4gIH1cbiAgJjo6YmVmb3JlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSByb3RhdGUoLTQ1ZGVnKTtcbiAgfVxufVxuXG4uaWNvbi1kb3dud2FyZCB7XG4gICY6OmFmdGVyIHtcbiAgICB0b3A6IDQ1JTtcbiAgfVxuICAmOjpiZWZvcmUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHJvdGF0ZSgtMTM1ZGVnKTtcbiAgfVxufVxuXG4uaWNvbi1mb3J3YXJkIHtcbiAgJjo6YWZ0ZXIge1xuICAgIGxlZnQ6IDQ1JTtcbiAgfVxuICAmOjpiZWZvcmUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHJvdGF0ZSgxMzVkZWcpO1xuICB9XG59XG5cbi5pY29uLXVwd2FyZCB7XG4gICY6OmFmdGVyIHtcbiAgICB0b3A6IDU1JTtcbiAgfVxuICAmOjpiZWZvcmUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHJvdGF0ZSg0NWRlZyk7XG4gIH1cbn1cblxuLy8gSWNvbiBjYXJldFxuLmljb24tY2FyZXQge1xuICAmOjpiZWZvcmUge1xuICAgIGJvcmRlci10b3A6IC4zZW0gc29saWQgY3VycmVudENvbG9yO1xuICAgIGJvcmRlci1yaWdodDogLjNlbSBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICBib3JkZXItbGVmdDogLjNlbSBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICBoZWlnaHQ6IDA7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTI1JSk7XG4gICAgd2lkdGg6IDA7XG4gIH1cbn1cblxuLy8gSWNvbiBtZW51XG4uaWNvbi1tZW51IHtcbiAgJjo6YmVmb3JlIHtcbiAgICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XG4gICAgYm94LXNoYWRvdzogMCAtLjM1ZW0sIDAgLjM1ZW07XG4gICAgaGVpZ2h0OiAkaWNvbi1ib3JkZXItd2lkdGg7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cblxuLy8gSWNvbiBhcHBzXG4uaWNvbi1hcHBzIHtcbiAgJjo6YmVmb3JlIHtcbiAgICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XG4gICAgYm94LXNoYWRvdzogLS4zNWVtIC0uMzVlbSwgLS4zNWVtIDAsIC0uMzVlbSAuMzVlbSwgMCAtLjM1ZW0sIDAgLjM1ZW0sIC4zNWVtIC0uMzVlbSwgLjM1ZW0gMCwgLjM1ZW0gLjM1ZW07XG4gICAgaGVpZ2h0OiAzcHg7XG4gICAgd2lkdGg6IDNweDtcbiAgfVxufVxuIiwiLy8gSWNvbiByZXNpemVcbi5pY29uLXJlc2l6ZS1ob3Jpeixcbi5pY29uLXJlc2l6ZS12ZXJ0IHtcbiAgJjo6YmVmb3JlLFxuICAmOjphZnRlciB7XG4gICAgYm9yZGVyOiAkaWNvbi1ib3JkZXItd2lkdGggc29saWQgY3VycmVudENvbG9yO1xuICAgIGJvcmRlci1ib3R0b206IDA7XG4gICAgYm9yZGVyLXJpZ2h0OiAwO1xuICAgIGhlaWdodDogLjQ1ZW07XG4gICAgd2lkdGg6IC40NWVtO1xuICB9XG4gICY6OmJlZm9yZSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTkwJSkgcm90YXRlKDQ1ZGVnKTtcbiAgfVxuICAmOjphZnRlciB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTEwJSkgcm90YXRlKDIyNWRlZyk7XG4gIH1cbn1cblxuLmljb24tcmVzaXplLWhvcml6IHtcbiAgJjo6YmVmb3JlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtOTAlLCAtNTAlKSByb3RhdGUoLTQ1ZGVnKTtcbiAgfVxuICAmOjphZnRlciB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTEwJSwgLTUwJSkgcm90YXRlKDEzNWRlZyk7XG4gIH1cbn1cblxuLy8gSWNvbiBtb3JlXG4uaWNvbi1tb3JlLWhvcml6LFxuLmljb24tbW9yZS12ZXJ0IHtcbiAgJjo6YmVmb3JlIHtcbiAgICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XG4gICAgYm94LXNoYWRvdzogLS40ZW0gMCwgLjRlbSAwO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBoZWlnaHQ6IDNweDtcbiAgICB3aWR0aDogM3B4O1xuICB9XG59XG5cbi5pY29uLW1vcmUtdmVydCB7XG4gICY6OmJlZm9yZSB7XG4gICAgYm94LXNoYWRvdzogMCAtLjRlbSwgMCAuNGVtO1xuICB9XG59XG5cbi8vIEljb24gcGx1cywgbWludXMsIGNyb3NzXG4uaWNvbi1wbHVzLFxuLmljb24tbWludXMsXG4uaWNvbi1jcm9zcyB7XG4gICY6OmJlZm9yZSB7XG4gICAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xuICAgIGhlaWdodDogJGljb24tYm9yZGVyLXdpZHRoO1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG5cbi5pY29uLXBsdXMsXG4uaWNvbi1jcm9zcyB7XG4gICY6OmFmdGVyIHtcbiAgICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHdpZHRoOiAkaWNvbi1ib3JkZXItd2lkdGg7XG4gIH1cbn1cblxuLmljb24tY3Jvc3Mge1xuICAmOjpiZWZvcmUge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gICY6OmFmdGVyIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gIH1cbiAgJjo6YmVmb3JlLFxuICAmOjphZnRlciB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSkgcm90YXRlKDQ1ZGVnKTtcbiAgfVxufVxuXG4vLyBJY29uIGNoZWNrXG4uaWNvbi1jaGVjayB7XG4gICY6OmJlZm9yZSB7XG4gICAgYm9yZGVyOiAkaWNvbi1ib3JkZXItd2lkdGggc29saWQgY3VycmVudENvbG9yO1xuICAgIGJvcmRlci1yaWdodDogMDtcbiAgICBib3JkZXItdG9wOiAwO1xuICAgIGhlaWdodDogLjVlbTtcbiAgICB3aWR0aDogLjllbTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNzUlKSByb3RhdGUoLTQ1ZGVnKTtcbiAgfVxufVxuXG4vLyBJY29uIHN0b3Bcbi5pY29uLXN0b3Age1xuICBib3JkZXI6ICRpY29uLWJvcmRlci13aWR0aCBzb2xpZCBjdXJyZW50Q29sb3I7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgJjo6YmVmb3JlIHtcbiAgICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XG4gICAgaGVpZ2h0OiAkaWNvbi1ib3JkZXItd2lkdGg7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSkgcm90YXRlKDQ1ZGVnKTtcbiAgICB3aWR0aDogMWVtO1xuICB9XG59XG5cbi8vIEljb24gc2h1dGRvd25cbi5pY29uLXNodXRkb3duIHtcbiAgYm9yZGVyOiAkaWNvbi1ib3JkZXItd2lkdGggc29saWQgY3VycmVudENvbG9yO1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGJvcmRlci10b3AtY29sb3I6IHRyYW5zcGFyZW50O1xuICAmOjpiZWZvcmUge1xuICAgIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcbiAgICBjb250ZW50OiBcIlwiO1xuICAgIGhlaWdodDogLjVlbTtcbiAgICB0b3A6IC4xZW07XG4gICAgd2lkdGg6ICRpY29uLWJvcmRlci13aWR0aDtcbiAgfVxufVxuXG4vLyBJY29uIHJlZnJlc2hcbi5pY29uLXJlZnJlc2gge1xuICAmOjpiZWZvcmUge1xuICAgIGJvcmRlcjogJGljb24tYm9yZGVyLXdpZHRoIHNvbGlkIGN1cnJlbnRDb2xvcjtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBoZWlnaHQ6IDFlbTtcbiAgICB3aWR0aDogMWVtO1xuICB9XG4gICY6OmFmdGVyIHtcbiAgICBib3JkZXI6IC4yZW0gc29saWQgY3VycmVudENvbG9yO1xuICAgIGJvcmRlci10b3AtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIGJvcmRlci1sZWZ0LWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBoZWlnaHQ6IDA7XG4gICAgbGVmdDogODAlO1xuICAgIHRvcDogMjAlO1xuICAgIHdpZHRoOiAwO1xuICB9XG59XG5cbi8vIEljb24gc2VhcmNoXG4uaWNvbi1zZWFyY2gge1xuICAmOjpiZWZvcmUge1xuICAgIGJvcmRlcjogJGljb24tYm9yZGVyLXdpZHRoIHNvbGlkIGN1cnJlbnRDb2xvcjtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgaGVpZ2h0OiAuNzVlbTtcbiAgICBsZWZ0OiA1JTtcbiAgICB0b3A6IDUlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApIHJvdGF0ZSg0NWRlZyk7XG4gICAgd2lkdGg6IC43NWVtO1xuICB9XG4gICY6OmFmdGVyIHtcbiAgICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XG4gICAgaGVpZ2h0OiAkaWNvbi1ib3JkZXItd2lkdGg7XG4gICAgbGVmdDogODAlO1xuICAgIHRvcDogODAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHJvdGF0ZSg0NWRlZyk7XG4gICAgd2lkdGg6IC40ZW07XG4gIH1cbn1cblxuLy8gSWNvbiBlZGl0XG4uaWNvbi1lZGl0IHtcbiAgJjo6YmVmb3JlIHtcbiAgICBib3JkZXI6ICRpY29uLWJvcmRlci13aWR0aCBzb2xpZCBjdXJyZW50Q29sb3I7XG4gICAgaGVpZ2h0OiAuNGVtO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC00MCUsIC02MCUpIHJvdGF0ZSgtNDVkZWcpO1xuICAgIHdpZHRoOiAuODVlbTtcbiAgfVxuICAmOjphZnRlciB7XG4gICAgYm9yZGVyOiAuMTVlbSBzb2xpZCBjdXJyZW50Q29sb3I7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBoZWlnaHQ6IDA7XG4gICAgbGVmdDogNSU7XG4gICAgdG9wOiA5NSU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTEwMCUpO1xuICAgIHdpZHRoOiAwO1xuICB9XG59XG5cbi8vIEljb24gZGVsZXRlXG4uaWNvbi1kZWxldGUge1xuICAmOjpiZWZvcmUge1xuICAgIGJvcmRlcjogJGljb24tYm9yZGVyLXdpZHRoIHNvbGlkIGN1cnJlbnRDb2xvcjtcbiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYm9yZGVyLXRvcDogMDtcbiAgICBoZWlnaHQ6IC43NWVtO1xuICAgIHRvcDogNjAlO1xuICAgIHdpZHRoOiAuNzVlbTtcbiAgfVxuICAmOjphZnRlciB7XG4gICAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xuICAgIGJveC1zaGFkb3c6IC0uMjVlbSAuMmVtLCAuMjVlbSAuMmVtO1xuICAgIGhlaWdodDogJGljb24tYm9yZGVyLXdpZHRoO1xuICAgIHRvcDogJGljb24tYm9yZGVyLXdpZHRoLzI7XG4gICAgd2lkdGg6IC41ZW07XG4gIH1cbn1cblxuLy8gSWNvbiBzaGFyZVxuLmljb24tc2hhcmUge1xuICBib3JkZXI6ICRpY29uLWJvcmRlci13aWR0aCBzb2xpZCBjdXJyZW50Q29sb3I7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICBib3JkZXItcmlnaHQ6IDA7XG4gIGJvcmRlci10b3A6IDA7XG4gICY6OmJlZm9yZSB7XG4gICAgYm9yZGVyOiAkaWNvbi1ib3JkZXItd2lkdGggc29saWQgY3VycmVudENvbG9yO1xuICAgIGJvcmRlci1sZWZ0OiAwO1xuICAgIGJvcmRlci10b3A6IDA7XG4gICAgaGVpZ2h0OiAuNGVtO1xuICAgIGxlZnQ6IDEwMCU7XG4gICAgdG9wOiAuMjVlbTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMTI1JSwgLTUwJSkgcm90YXRlKC00NWRlZyk7XG4gICAgd2lkdGg6IC40ZW07XG4gIH1cbiAgJjo6YWZ0ZXIge1xuICAgIGJvcmRlcjogJGljb24tYm9yZGVyLXdpZHRoIHNvbGlkIGN1cnJlbnRDb2xvcjtcbiAgICBib3JkZXItYm90dG9tOiAwO1xuICAgIGJvcmRlci1yaWdodDogMDtcbiAgICBib3JkZXItcmFkaXVzOiA3NSUgMDtcbiAgICBoZWlnaHQ6IC41ZW07XG4gICAgd2lkdGg6IC42ZW07XG4gIH1cbn1cblxuLy8gSWNvbiBmbGFnXG4uaWNvbi1mbGFnIHtcbiAgJjo6YmVmb3JlIHtcbiAgICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XG4gICAgaGVpZ2h0OiAxZW07XG4gICAgbGVmdDogMTUlO1xuICAgIHdpZHRoOiAkaWNvbi1ib3JkZXItd2lkdGg7XG4gIH1cbiAgJjo6YWZ0ZXIge1xuICAgIGJvcmRlcjogJGljb24tYm9yZGVyLXdpZHRoIHNvbGlkIGN1cnJlbnRDb2xvcjtcbiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYm9yZGVyLWxlZnQ6IDA7XG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGhlaWdodDogLjY1ZW07XG4gICAgdG9wOiAzNSU7XG4gICAgbGVmdDogNjAlO1xuICAgIHdpZHRoOiAuOGVtO1xuICB9XG59XG5cbi8vIEljb24gYm9va21hcmtcbi5pY29uLWJvb2ttYXJrIHtcbiAgJjo6YmVmb3JlIHtcbiAgICBib3JkZXI6ICRpY29uLWJvcmRlci13aWR0aCBzb2xpZCBjdXJyZW50Q29sb3I7XG4gICAgYm9yZGVyLWJvdHRvbTogMDtcbiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgaGVpZ2h0OiAuOWVtO1xuICAgIHdpZHRoOiAuOGVtO1xuICB9XG4gICY6OmFmdGVyIHtcbiAgICBib3JkZXI6ICRpY29uLWJvcmRlci13aWR0aCBzb2xpZCBjdXJyZW50Q29sb3I7XG4gICAgYm9yZGVyLWJvdHRvbTogMDtcbiAgICBib3JkZXItbGVmdDogMDtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBoZWlnaHQ6IC41ZW07XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgMzUlKSByb3RhdGUoLTQ1ZGVnKSBza2V3KDE1ZGVnLCAxNWRlZyk7XG4gICAgd2lkdGg6IC41ZW07XG4gIH1cbn1cblxuLy8gSWNvbiBkb3dubG9hZCAmIHVwbG9hZFxuLmljb24tZG93bmxvYWQsXG4uaWNvbi11cGxvYWQge1xuICBib3JkZXItYm90dG9tOiAkaWNvbi1ib3JkZXItd2lkdGggc29saWQgY3VycmVudENvbG9yO1xuICAmOjpiZWZvcmUge1xuICAgIGJvcmRlcjogJGljb24tYm9yZGVyLXdpZHRoIHNvbGlkIGN1cnJlbnRDb2xvcjtcbiAgICBib3JkZXItYm90dG9tOiAwO1xuICAgIGJvcmRlci1yaWdodDogMDtcbiAgICBoZWlnaHQ6IC41ZW07XG4gICAgd2lkdGg6IC41ZW07XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTYwJSkgcm90YXRlKC0xMzVkZWcpO1xuICB9XG4gICY6OmFmdGVyIHtcbiAgICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XG4gICAgaGVpZ2h0OiAuNmVtO1xuICAgIHRvcDogNDAlO1xuICAgIHdpZHRoOiAkaWNvbi1ib3JkZXItd2lkdGg7XG4gIH1cbn1cblxuLmljb24tdXBsb2FkIHtcbiAgJjo6YmVmb3JlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNjAlKSByb3RhdGUoNDVkZWcpO1xuICB9XG4gICY6OmFmdGVyIHtcbiAgICB0b3A6IDUwJTtcbiAgfVxufVxuXG4vLyBJY29uIGNvcHlcbi5pY29uLWNvcHkge1xuICAmOjpiZWZvcmUge1xuICAgIGJvcmRlcjogJGljb24tYm9yZGVyLXdpZHRoIHNvbGlkIGN1cnJlbnRDb2xvcjtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBib3JkZXItcmlnaHQ6IDA7XG4gICAgYm9yZGVyLWJvdHRvbTogMDtcbiAgICBoZWlnaHQ6IC44ZW07XG4gICAgbGVmdDogNDAlO1xuICAgIHRvcDogMzUlO1xuICAgIHdpZHRoOiAuOGVtO1xuICB9XG4gICY6OmFmdGVyIHtcbiAgICBib3JkZXI6ICRpY29uLWJvcmRlci13aWR0aCBzb2xpZCBjdXJyZW50Q29sb3I7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgaGVpZ2h0OiAuOGVtO1xuICAgIGxlZnQ6IDYwJTtcbiAgICB0b3A6IDYwJTtcbiAgICB3aWR0aDogLjhlbTtcbiAgfVxufSIsIi8vIEljb24gdGltZVxuLmljb24tdGltZSB7XG4gIGJvcmRlcjogJGljb24tYm9yZGVyLXdpZHRoIHNvbGlkIGN1cnJlbnRDb2xvcjtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAmOjpiZWZvcmUge1xuICAgIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcbiAgICBoZWlnaHQ6IC40ZW07XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTc1JSk7XG4gICAgd2lkdGg6ICRpY29uLWJvcmRlci13aWR0aDtcbiAgfVxuICAmOjphZnRlciB7XG4gICAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xuICAgIGhlaWdodDogLjNlbTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNzUlKSByb3RhdGUoOTBkZWcpO1xuICAgIHRyYW5zZm9ybS1vcmlnaW46IDUwJSA5MCU7XG4gICAgd2lkdGg6ICRpY29uLWJvcmRlci13aWR0aDtcbiAgfVxufVxuXG4vLyBJY29uIG1haWxcbi5pY29uLW1haWwge1xuICAmOjpiZWZvcmUge1xuICAgIGJvcmRlcjogJGljb24tYm9yZGVyLXdpZHRoIHNvbGlkIGN1cnJlbnRDb2xvcjtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBoZWlnaHQ6IC44ZW07XG4gICAgd2lkdGg6IDFlbTtcbiAgfVxuICAmOjphZnRlciB7XG4gICAgYm9yZGVyOiAkaWNvbi1ib3JkZXItd2lkdGggc29saWQgY3VycmVudENvbG9yO1xuICAgIGJvcmRlci1yaWdodDogMDtcbiAgICBib3JkZXItdG9wOiAwO1xuICAgIGhlaWdodDogLjVlbTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtOTAlKSByb3RhdGUoLTQ1ZGVnKSBza2V3KDEwZGVnLCAxMGRlZyk7XG4gICAgd2lkdGg6IC41ZW07XG4gIH1cbn1cblxuLy8gSWNvbiBwZW9wbGVcbi5pY29uLXBlb3BsZSB7XG4gICY6OmJlZm9yZSB7XG4gICAgYm9yZGVyOiAkaWNvbi1ib3JkZXItd2lkdGggc29saWQgY3VycmVudENvbG9yO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBoZWlnaHQ6IC40NWVtO1xuICAgIHRvcDogMjUlO1xuICAgIHdpZHRoOiAuNDVlbTtcbiAgfVxuICAmOjphZnRlciB7XG4gICAgYm9yZGVyOiAkaWNvbi1ib3JkZXItd2lkdGggc29saWQgY3VycmVudENvbG9yO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJSA1MCUgMCAwO1xuICAgIGhlaWdodDogLjRlbTtcbiAgICB0b3A6IDc1JTtcbiAgICB3aWR0aDogLjllbTtcbiAgfVxufVxuXG4vLyBJY29uIG1lc3NhZ2Vcbi5pY29uLW1lc3NhZ2Uge1xuICBib3JkZXI6ICRpY29uLWJvcmRlci13aWR0aCBzb2xpZCBjdXJyZW50Q29sb3I7XG4gIGJvcmRlci1ib3R0b206IDA7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICBib3JkZXItcmlnaHQ6IDA7XG4gICY6OmJlZm9yZSB7XG4gICAgYm9yZGVyOiAkaWNvbi1ib3JkZXItd2lkdGggc29saWQgY3VycmVudENvbG9yO1xuICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBib3JkZXItbGVmdDogMDtcbiAgICBib3JkZXItdG9wOiAwO1xuICAgIGhlaWdodDogLjhlbTtcbiAgICBsZWZ0OiA2NSU7XG4gICAgdG9wOiA0MCU7XG4gICAgd2lkdGg6IC43ZW07XG4gIH1cbiAgJjo6YWZ0ZXIge1xuICAgIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBoZWlnaHQ6IC4zZW07XG4gICAgbGVmdDogMTAlO1xuICAgIHRvcDogMTAwJTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtOTAlKSByb3RhdGUoNDVkZWcpO1xuICAgIHdpZHRoOiAkaWNvbi1ib3JkZXItd2lkdGg7XG4gIH1cbn1cblxuLy8gSWNvbiBwaG90b1xuLmljb24tcGhvdG8ge1xuICBib3JkZXI6ICRpY29uLWJvcmRlci13aWR0aCBzb2xpZCBjdXJyZW50Q29sb3I7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAmOjpiZWZvcmUge1xuICAgIGJvcmRlcjogJGljb24tYm9yZGVyLXdpZHRoIHNvbGlkIGN1cnJlbnRDb2xvcjtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgaGVpZ2h0OiAuMjVlbTtcbiAgICBsZWZ0OiAzNSU7XG4gICAgdG9wOiAzNSU7XG4gICAgd2lkdGg6IC4yNWVtO1xuICB9XG4gICY6OmFmdGVyIHtcbiAgICBib3JkZXI6ICRpY29uLWJvcmRlci13aWR0aCBzb2xpZCBjdXJyZW50Q29sb3I7XG4gICAgYm9yZGVyLWJvdHRvbTogMDtcbiAgICBib3JkZXItbGVmdDogMDtcbiAgICBoZWlnaHQ6IC41ZW07XG4gICAgbGVmdDogNjAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIDI1JSkgcm90YXRlKC00NWRlZyk7XG4gICAgd2lkdGg6IC41ZW07XG4gIH1cbn1cblxuLy8gSWNvbiBsaW5rXG4uaWNvbi1saW5rIHtcbiAgJjo6YmVmb3JlLFxuICAmOjphZnRlciB7XG4gICAgYm9yZGVyOiAkaWNvbi1ib3JkZXItd2lkdGggc29saWQgY3VycmVudENvbG9yO1xuICAgIGJvcmRlci1yYWRpdXM6IDVlbSAwIDAgNWVtO1xuICAgIGJvcmRlci1yaWdodDogMDtcbiAgICBoZWlnaHQ6IC41ZW07XG4gICAgd2lkdGg6IC43NWVtO1xuICB9XG4gICY6OmJlZm9yZSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTcwJSwgLTQ1JSkgcm90YXRlKC00NWRlZyk7XG4gIH1cbiAgJjo6YWZ0ZXIge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC0zMCUsIC01NSUpIHJvdGF0ZSgxMzVkZWcpO1xuICB9XG59XG5cbi8vIEljb24gbG9jYXRpb25cbi5pY29uLWxvY2F0aW9uIHtcbiAgJjo6YmVmb3JlIHtcbiAgICBib3JkZXI6ICRpY29uLWJvcmRlci13aWR0aCBzb2xpZCBjdXJyZW50Q29sb3I7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlIDUwJSA1MCUgMDtcbiAgICBoZWlnaHQ6IC44ZW07XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTYwJSkgcm90YXRlKC00NWRlZyk7XG4gICAgd2lkdGg6IC44ZW07XG4gIH1cbiAgJjo6YWZ0ZXIge1xuICAgIGJvcmRlcjogJGljb24tYm9yZGVyLXdpZHRoIHNvbGlkIGN1cnJlbnRDb2xvcjtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgaGVpZ2h0OiAuMmVtO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC04MCUpO1xuICAgIHdpZHRoOiAuMmVtO1xuICB9XG59XG5cbi8vIEljb24gZW1vamlcbi5pY29uLWVtb2ppIHtcbiAgYm9yZGVyOiAkaWNvbi1ib3JkZXItd2lkdGggc29saWQgY3VycmVudENvbG9yO1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICY6OmJlZm9yZSB7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGJveC1zaGFkb3c6IC0uMTdlbSAtLjFlbSwgLjE3ZW0gLS4xZW07XG4gICAgaGVpZ2h0OiAuMTVlbTtcbiAgICB3aWR0aDogLjE1ZW07XG4gIH1cbiAgJjo6YWZ0ZXIge1xuICAgIGJvcmRlcjogJGljb24tYm9yZGVyLXdpZHRoIHNvbGlkIGN1cnJlbnRDb2xvcjtcbiAgICBib3JkZXItYm90dG9tLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBoZWlnaHQ6IC41ZW07XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTQwJSkgcm90YXRlKC0xMzVkZWcpO1xuICAgIHdpZHRoOiAuNWVtO1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsOEVBQW9GO0FhQXBGLEFBQUEsS0FBSyxDQUFZLEVBQ2YsVUFBVSxFQUFFLFVBQVUsRUFDdEIsT0FBTyxFQUFFLFlBQVksRUFDckIsU0FBUyxFQUFFLE9BQU8sRUFDbEIsVUFBVSxFQUFFLE1BQU0sRUFDbEIsTUFBTSxFQUFFLEdBQUcsRUFDWCxRQUFRLEVBQUUsUUFBUSxFQUNsQixXQUFXLEVBQUUsT0FBTyxFQUNwQixjQUFjLEVBQUUsTUFBTSxFQUN0QixLQUFLLEVBQUUsR0FBRyxHQXVCWDs7QUFoQ0QsQUFVRSxLQVZHLEFBVUYsUUFBUSxFQVZYLEtBQUssQUFXRixPQUFPLENBQUMsRUFDUCxPQUFPLEVBQUUsRUFBRSxFQUNYLE9BQU8sRUFBRSxLQUFLLEVBQ2QsSUFBSSxFQUFFLEdBQUcsRUFDVCxRQUFRLEVBQUUsUUFBUSxFQUNsQixHQUFHLEVBQUUsR0FBRyxFQUNSLFNBQVMsRUFBRSxxQkFBcUIsR0FDakM7O0FBbEJILEFBcUJFLEtBckJHLEFBcUJGLFFBQVEsQ0FBQyxFQUNSLFNBQVMsRUFBRSxNQUFNLEdBQ2xCOztBQXZCSCxBQXlCRSxLQXpCRyxBQXlCRixRQUFRLENBQUMsRUFDUixTQUFTLEVBQUUsTUFBTSxHQUNsQjs7QUEzQkgsQUE2QkUsS0E3QkcsQUE2QkYsUUFBUSxDQUFDLEVBQ1IsU0FBUyxFQUFFLE1BQU0sR0FDbEI7O0FBSUgsQUFJRSxVQUpRLENBSVIsS0FBSyxFQUhQLElBQUksQ0FHRixLQUFLLEVBRlAsTUFBTSxDQUVKLEtBQUssRUFEUCxLQUFLLENBQ0gsS0FBSyxDQUFZLEVBQ2YsY0FBYyxFQUFFLElBQUksR0FDckI7O0FBR0gsQUFDRSxPQURLLENBQ0wsS0FBSyxDQUFZLEVBQ2YsY0FBYyxFQUFFLElBQUksR0FDckI7O0FDbkRILEFBUUUsZ0JBUmMsQUFRYixRQUFRLEVBUFgsZ0JBQWdCLEFBT2IsUUFBUSxFQU5YLGlCQUFpQixBQU1kLFFBQVEsRUFMWCxjQUFjLEFBS1gsUUFBUSxFQUpYLGNBQWMsQUFJWCxRQUFRLEVBSFgsVUFBVSxBQUdQLFFBQVEsRUFGWCxhQUFhLEFBRVYsUUFBUSxFQURYLFlBQVksQUFDVCxRQUFRLENBQUMsRUFDUixNQUFNLEVaNkNELE1BQUssQ1k3Q2lCLEtBQUssQ0FBQyxZQUFZLEVBQzdDLGFBQWEsRUFBRSxDQUFDLEVBQ2hCLFlBQVksRUFBRSxDQUFDLEVBQ2YsTUFBTSxFQUFFLEtBQUssRUFDYixLQUFLLEVBQUUsS0FBSyxHQUNiOztBQUdILEFBQ0UsZ0JBRGMsQUFDYixRQUFRLENBQUMsRUFDUixTQUFTLEVBQUUscUJBQXFCLENBQUMsY0FBYyxHQUNoRDs7QUFHSCxBQUNFLGdCQURjLEFBQ2IsUUFBUSxDQUFDLEVBQ1IsU0FBUyxFQUFFLHFCQUFxQixDQUFDLGNBQWMsR0FDaEQ7O0FBR0gsQUFDRSxpQkFEZSxBQUNkLFFBQVEsQ0FBQyxFQUNSLFNBQVMsRUFBRSxxQkFBcUIsQ0FBQyxjQUFjLEdBQ2hEOztBQUdILEFBQ0UsY0FEWSxBQUNYLFFBQVEsQ0FBQyxFQUNSLFNBQVMsRUFBRSxxQkFBcUIsQ0FBQyxhQUFhLEdBQy9DOztBQUdILEFBRUUsVUFGUSxBQUVQLE9BQU8sRUFEVixhQUFhLEFBQ1YsT0FBTyxDQUFDLEVBQ1AsVUFBVSxFQUFFLFlBQVksRUFDeEIsTUFBTSxFWlNELE1BQUssRVlSVixLQUFLLEVBQUUsSUFBSSxHQUNaOztBQUdILEFBRUUsY0FGWSxBQUVYLE9BQU8sRUFEVixZQUFZLEFBQ1QsT0FBTyxDQUFDLEVBQ1AsVUFBVSxFQUFFLFlBQVksRUFDeEIsTUFBTSxFQUFFLElBQUksRUFDWixLQUFLLEVaREEsTUFBSyxHWUVYOztBQUdILEFBQ0UsVUFEUSxBQUNQLE9BQU8sQ0FBQyxFQUNQLElBQUksRUFBRSxHQUFHLEdBQ1Y7O0FBSEgsQUFJRSxVQUpRLEFBSVAsUUFBUSxDQUFDLEVBQ1IsU0FBUyxFQUFFLHFCQUFxQixDQUFDLGNBQWMsR0FDaEQ7O0FBR0gsQUFDRSxjQURZLEFBQ1gsT0FBTyxDQUFDLEVBQ1AsR0FBRyxFQUFFLEdBQUcsR0FDVDs7QUFISCxBQUlFLGNBSlksQUFJWCxRQUFRLENBQUMsRUFDUixTQUFTLEVBQUUscUJBQXFCLENBQUMsZUFBZSxHQUNqRDs7QUFHSCxBQUNFLGFBRFcsQUFDVixPQUFPLENBQUMsRUFDUCxJQUFJLEVBQUUsR0FBRyxHQUNWOztBQUhILEFBSUUsYUFKVyxBQUlWLFFBQVEsQ0FBQyxFQUNSLFNBQVMsRUFBRSxxQkFBcUIsQ0FBQyxjQUFjLEdBQ2hEOztBQUdILEFBQ0UsWUFEVSxBQUNULE9BQU8sQ0FBQyxFQUNQLEdBQUcsRUFBRSxHQUFHLEdBQ1Q7O0FBSEgsQUFJRSxZQUpVLEFBSVQsUUFBUSxDQUFDLEVBQ1IsU0FBUyxFQUFFLHFCQUFxQixDQUFDLGFBQWEsR0FDL0M7O0FBSUgsQUFDRSxXQURTLEFBQ1IsUUFBUSxDQUFDLEVBQ1IsVUFBVSxFQUFFLHVCQUF1QixFQUNuQyxZQUFZLEVBQUUsc0JBQXNCLEVBQ3BDLFdBQVcsRUFBRSxzQkFBc0IsRUFDbkMsTUFBTSxFQUFFLENBQUMsRUFDVCxTQUFTLEVBQUUscUJBQXFCLEVBQ2hDLEtBQUssRUFBRSxDQUFDLEdBQ1Q7O0FBSUgsQUFDRSxVQURRLEFBQ1AsUUFBUSxDQUFDLEVBQ1IsVUFBVSxFQUFFLFlBQVksRUFDeEIsVUFBVSxFQUFFLGlCQUFpQixFQUM3QixNQUFNLEVaMURELE1BQUssRVkyRFYsS0FBSyxFQUFFLElBQUksR0FDWjs7QUFJSCxBQUNFLFVBRFEsQUFDUCxRQUFRLENBQUMsRUFDUixVQUFVLEVBQUUsWUFBWSxFQUN4QixVQUFVLEVBQUUsNEZBQTRGLEVBQ3hHLE1BQU0sRUFBRSxHQUFHLEVBQ1gsS0FBSyxFQUFFLEdBQUcsR0FDWDs7QUM1SEgsQUFFRSxrQkFGZ0IsQUFFZixRQUFRLEVBRlgsa0JBQWtCLEFBR2YsT0FBTyxFQUZWLGlCQUFpQixBQUNkLFFBQVEsRUFEWCxpQkFBaUIsQUFFZCxPQUFPLENBQUMsRUFDUCxNQUFNLEVia0RELE1BQUssQ2FsRGlCLEtBQUssQ0FBQyxZQUFZLEVBQzdDLGFBQWEsRUFBRSxDQUFDLEVBQ2hCLFlBQVksRUFBRSxDQUFDLEVBQ2YsTUFBTSxFQUFFLEtBQUssRUFDYixLQUFLLEVBQUUsS0FBSyxHQUNiOztBQVRILEFBVUUsa0JBVmdCLEFBVWYsUUFBUSxFQVRYLGlCQUFpQixBQVNkLFFBQVEsQ0FBQyxFQUNSLFNBQVMsRUFBRSxxQkFBcUIsQ0FBQyxhQUFhLEdBQy9DOztBQVpILEFBYUUsa0JBYmdCLEFBYWYsT0FBTyxFQVpWLGlCQUFpQixBQVlkLE9BQU8sQ0FBQyxFQUNQLFNBQVMsRUFBRSxxQkFBcUIsQ0FBQyxjQUFjLEdBQ2hEOztBQUdILEFBQ0Usa0JBRGdCLEFBQ2YsUUFBUSxDQUFDLEVBQ1IsU0FBUyxFQUFFLHFCQUFxQixDQUFDLGNBQWMsR0FDaEQ7O0FBSEgsQUFJRSxrQkFKZ0IsQUFJZixPQUFPLENBQUMsRUFDUCxTQUFTLEVBQUUscUJBQXFCLENBQUMsY0FBYyxHQUNoRDs7QUFJSCxBQUVFLGdCQUZjLEFBRWIsUUFBUSxFQURYLGVBQWUsQUFDWixRQUFRLENBQUMsRUFDUixVQUFVLEVBQUUsWUFBWSxFQUN4QixVQUFVLEVBQUUsZUFBZSxFQUMzQixhQUFhLEVBQUUsR0FBRyxFQUNsQixNQUFNLEVBQUUsR0FBRyxFQUNYLEtBQUssRUFBRSxHQUFHLEdBQ1g7O0FBR0gsQUFDRSxlQURhLEFBQ1osUUFBUSxDQUFDLEVBQ1IsVUFBVSxFQUFFLGVBQWUsR0FDNUI7O0FBSUgsQUFHRSxVQUhRLEFBR1AsUUFBUSxFQUZYLFdBQVcsQUFFUixRQUFRLEVBRFgsV0FBVyxBQUNSLFFBQVEsQ0FBQyxFQUNSLFVBQVUsRUFBRSxZQUFZLEVBQ3hCLE1BQU0sRWJHRCxNQUFLLEVhRlYsS0FBSyxFQUFFLElBQUksR0FDWjs7QUFHSCxBQUVFLFVBRlEsQUFFUCxPQUFPLEVBRFYsV0FBVyxBQUNSLE9BQU8sQ0FBQyxFQUNQLFVBQVUsRUFBRSxZQUFZLEVBQ3hCLE1BQU0sRUFBRSxJQUFJLEVBQ1osS0FBSyxFYlBBLE1BQUssR2FRWDs7QUFHSCxBQUNFLFdBRFMsQUFDUixRQUFRLENBQUMsRUFDUixLQUFLLEVBQUUsSUFBSSxHQUNaOztBQUhILEFBSUUsV0FKUyxBQUlSLE9BQU8sQ0FBQyxFQUNQLE1BQU0sRUFBRSxJQUFJLEdBQ2I7O0FBTkgsQUFPRSxXQVBTLEFBT1IsUUFBUSxFQVBYLFdBQVcsQUFRUixPQUFPLENBQUMsRUFDUCxTQUFTLEVBQUUscUJBQXFCLENBQUMsYUFBYSxHQUMvQzs7QUFJSCxBQUNFLFdBRFMsQUFDUixRQUFRLENBQUMsRUFDUixNQUFNLEViM0JELE1BQUssQ2EyQmlCLEtBQUssQ0FBQyxZQUFZLEVBQzdDLFlBQVksRUFBRSxDQUFDLEVBQ2YsVUFBVSxFQUFFLENBQUMsRUFDYixNQUFNLEVBQUUsSUFBSSxFQUNaLEtBQUssRUFBRSxJQUFJLEVBQ1gsU0FBUyxFQUFFLHFCQUFxQixDQUFDLGNBQWMsR0FDaEQ7O0FBSUgsQUFBQSxVQUFVLENBQUMsRUFDVCxNQUFNLEVidENDLE1BQUssQ2FzQ2UsS0FBSyxDQUFDLFlBQVksRUFDN0MsYUFBYSxFQUFFLEdBQUcsR0FPbkI7O0FBVEQsQUFHRSxVQUhRLEFBR1AsUUFBUSxDQUFDLEVBQ1IsVUFBVSxFQUFFLFlBQVksRUFDeEIsTUFBTSxFYjFDRCxNQUFLLEVhMkNWLFNBQVMsRUFBRSxxQkFBcUIsQ0FBQyxhQUFhLEVBQzlDLEtBQUssRUFBRSxHQUFHLEdBQ1g7O0FBSUgsQUFBQSxjQUFjLENBQUMsRUFDYixNQUFNLEVibERDLE1BQUssQ2FrRGUsS0FBSyxDQUFDLFlBQVksRUFDN0MsYUFBYSxFQUFFLEdBQUcsRUFDbEIsZ0JBQWdCLEVBQUUsV0FBVyxHQVE5Qjs7QUFYRCxBQUlFLGNBSlksQUFJWCxRQUFRLENBQUMsRUFDUixVQUFVLEVBQUUsWUFBWSxFQUN4QixPQUFPLEVBQUUsRUFBRSxFQUNYLE1BQU0sRUFBRSxJQUFJLEVBQ1osR0FBRyxFQUFFLElBQUksRUFDVCxLQUFLLEViMURBLE1BQUssR2EyRFg7O0FBSUgsQUFDRSxhQURXLEFBQ1YsUUFBUSxDQUFDLEVBQ1IsTUFBTSxFYmpFRCxNQUFLLENhaUVpQixLQUFLLENBQUMsWUFBWSxFQUM3QyxhQUFhLEVBQUUsR0FBRyxFQUNsQixrQkFBa0IsRUFBRSxXQUFXLEVBQy9CLE1BQU0sRUFBRSxHQUFHLEVBQ1gsS0FBSyxFQUFFLEdBQUcsR0FDWDs7QUFQSCxBQVFFLGFBUlcsQUFRVixPQUFPLENBQUMsRUFDUCxNQUFNLEVBQUUsdUJBQXVCLEVBQy9CLGdCQUFnQixFQUFFLFdBQVcsRUFDN0IsaUJBQWlCLEVBQUUsV0FBVyxFQUM5QixNQUFNLEVBQUUsQ0FBQyxFQUNULElBQUksRUFBRSxHQUFHLEVBQ1QsR0FBRyxFQUFFLEdBQUcsRUFDUixLQUFLLEVBQUUsQ0FBQyxHQUNUOztBQUlILEFBQ0UsWUFEVSxBQUNULFFBQVEsQ0FBQyxFQUNSLE1BQU0sRWJyRkQsTUFBSyxDYXFGaUIsS0FBSyxDQUFDLFlBQVksRUFDN0MsYUFBYSxFQUFFLEdBQUcsRUFDbEIsTUFBTSxFQUFFLEtBQUssRUFDYixJQUFJLEVBQUUsRUFBRSxFQUNSLEdBQUcsRUFBRSxFQUFFLEVBQ1AsU0FBUyxFQUFFLGVBQWUsQ0FBQyxhQUFhLEVBQ3hDLEtBQUssRUFBRSxLQUFLLEdBQ2I7O0FBVEgsQUFVRSxZQVZVLEFBVVQsT0FBTyxDQUFDLEVBQ1AsVUFBVSxFQUFFLFlBQVksRUFDeEIsTUFBTSxFYi9GRCxNQUFLLEVhZ0dWLElBQUksRUFBRSxHQUFHLEVBQ1QsR0FBRyxFQUFFLEdBQUcsRUFDUixTQUFTLEVBQUUscUJBQXFCLENBQUMsYUFBYSxFQUM5QyxLQUFLLEVBQUUsSUFBSSxHQUNaOztBQUlILEFBQ0UsVUFEUSxBQUNQLFFBQVEsQ0FBQyxFQUNSLE1BQU0sRWIxR0QsTUFBSyxDYTBHaUIsS0FBSyxDQUFDLFlBQVksRUFDN0MsTUFBTSxFQUFFLElBQUksRUFDWixTQUFTLEVBQUUscUJBQXFCLENBQUMsY0FBYyxFQUMvQyxLQUFLLEVBQUUsS0FBSyxHQUNiOztBQU5ILEFBT0UsVUFQUSxBQU9QLE9BQU8sQ0FBQyxFQUNQLE1BQU0sRUFBRSx3QkFBd0IsRUFDaEMsZ0JBQWdCLEVBQUUsV0FBVyxFQUM3QixrQkFBa0IsRUFBRSxXQUFXLEVBQy9CLE1BQU0sRUFBRSxDQUFDLEVBQ1QsSUFBSSxFQUFFLEVBQUUsRUFDUixHQUFHLEVBQUUsR0FBRyxFQUNSLFNBQVMsRUFBRSxtQkFBbUIsRUFDOUIsS0FBSyxFQUFFLENBQUMsR0FDVDs7QUFJSCxBQUNFLFlBRFUsQUFDVCxRQUFRLENBQUMsRUFDUixNQUFNLEViOUhELE1BQUssQ2E4SGlCLEtBQUssQ0FBQyxZQUFZLEVBQzdDLHlCQUF5QixFYi9IcEIsTUFBSyxFYWdJViwwQkFBMEIsRWJoSXJCLE1BQUssRWFpSVYsVUFBVSxFQUFFLENBQUMsRUFDYixNQUFNLEVBQUUsS0FBSyxFQUNiLEdBQUcsRUFBRSxHQUFHLEVBQ1IsS0FBSyxFQUFFLEtBQUssR0FDYjs7QUFUSCxBQVVFLFlBVlUsQUFVVCxPQUFPLENBQUMsRUFDUCxVQUFVLEVBQUUsWUFBWSxFQUN4QixVQUFVLEVBQUUsdUJBQXVCLEVBQ25DLE1BQU0sRWJ6SUQsTUFBSyxFYTBJVixHQUFHLEVBQUUsT0FBb0IsRUFDekIsS0FBSyxFQUFFLElBQUksR0FDWjs7QUFJSCxBQUFBLFdBQVcsQ0FBQyxFQUNWLE1BQU0sRWJqSkMsTUFBSyxDYWlKZSxLQUFLLENBQUMsWUFBWSxFQUM3QyxhQUFhLEVibEpOLE1BQUssRWFtSlosWUFBWSxFQUFFLENBQUMsRUFDZixVQUFVLEVBQUUsQ0FBQyxHQW1CZDs7QUF2QkQsQUFLRSxXQUxTLEFBS1IsUUFBUSxDQUFDLEVBQ1IsTUFBTSxFYnRKRCxNQUFLLENhc0ppQixLQUFLLENBQUMsWUFBWSxFQUM3QyxXQUFXLEVBQUUsQ0FBQyxFQUNkLFVBQVUsRUFBRSxDQUFDLEVBQ2IsTUFBTSxFQUFFLElBQUksRUFDWixJQUFJLEVBQUUsSUFBSSxFQUNWLEdBQUcsRUFBRSxLQUFLLEVBQ1YsU0FBUyxFQUFFLHNCQUFzQixDQUFDLGNBQWMsRUFDaEQsS0FBSyxFQUFFLElBQUksR0FDWjs7QUFkSCxBQWVFLFdBZlMsQUFlUixPQUFPLENBQUMsRUFDUCxNQUFNLEViaEtELE1BQUssQ2FnS2lCLEtBQUssQ0FBQyxZQUFZLEVBQzdDLGFBQWEsRUFBRSxDQUFDLEVBQ2hCLFlBQVksRUFBRSxDQUFDLEVBQ2YsYUFBYSxFQUFFLEtBQUssRUFDcEIsTUFBTSxFQUFFLElBQUksRUFDWixLQUFLLEVBQUUsSUFBSSxHQUNaOztBQUlILEFBQ0UsVUFEUSxBQUNQLFFBQVEsQ0FBQyxFQUNSLFVBQVUsRUFBRSxZQUFZLEVBQ3hCLE1BQU0sRUFBRSxHQUFHLEVBQ1gsSUFBSSxFQUFFLEdBQUcsRUFDVCxLQUFLLEViL0tBLE1BQUssR2FnTFg7O0FBTkgsQUFPRSxVQVBRLEFBT1AsT0FBTyxDQUFDLEVBQ1AsTUFBTSxFYmxMRCxNQUFLLENha0xpQixLQUFLLENBQUMsWUFBWSxFQUM3QywwQkFBMEIsRWJuTHJCLE1BQUssRWFvTFYsV0FBVyxFQUFFLENBQUMsRUFDZCx1QkFBdUIsRWJyTGxCLE1BQUssRWFzTFYsTUFBTSxFQUFFLEtBQUssRUFDYixHQUFHLEVBQUUsR0FBRyxFQUNSLElBQUksRUFBRSxHQUFHLEVBQ1QsS0FBSyxFQUFFLElBQUksR0FDWjs7QUFJSCxBQUNFLGNBRFksQUFDWCxRQUFRLENBQUMsRUFDUixNQUFNLEViaE1ELE1BQUssQ2FnTWlCLEtBQUssQ0FBQyxZQUFZLEVBQzdDLGFBQWEsRUFBRSxDQUFDLEVBQ2hCLHNCQUFzQixFYmxNakIsTUFBSyxFYW1NVix1QkFBdUIsRWJuTWxCLE1BQUssRWFvTVYsTUFBTSxFQUFFLElBQUksRUFDWixLQUFLLEVBQUUsSUFBSSxHQUNaOztBQVJILEFBU0UsY0FUWSxBQVNYLE9BQU8sQ0FBQyxFQUNQLE1BQU0sRWJ4TUQsTUFBSyxDYXdNaUIsS0FBSyxDQUFDLFlBQVksRUFDN0MsYUFBYSxFQUFFLENBQUMsRUFDaEIsV0FBVyxFQUFFLENBQUMsRUFDZCxhQUFhLEViM01SLE1BQUssRWE0TVYsTUFBTSxFQUFFLElBQUksRUFDWixTQUFTLEVBQUUsb0JBQW9CLENBQUMsY0FBYyxDQUFDLGtCQUFrQixFQUNqRSxLQUFLLEVBQUUsSUFBSSxHQUNaOztBQUlILEFBQUEsY0FBYyxFQUNkLFlBQVksQ0FBQyxFQUNYLGFBQWEsRWJyTk4sTUFBSyxDYXFOc0IsS0FBSyxDQUFDLFlBQVksR0FlckQ7O0FBakJELEFBR0UsY0FIWSxBQUdYLFFBQVEsRUFGWCxZQUFZLEFBRVQsUUFBUSxDQUFDLEVBQ1IsTUFBTSxFYnZORCxNQUFLLENhdU5pQixLQUFLLENBQUMsWUFBWSxFQUM3QyxhQUFhLEVBQUUsQ0FBQyxFQUNoQixZQUFZLEVBQUUsQ0FBQyxFQUNmLE1BQU0sRUFBRSxJQUFJLEVBQ1osS0FBSyxFQUFFLElBQUksRUFDWCxTQUFTLEVBQUUscUJBQXFCLENBQUMsZUFBZSxHQUNqRDs7QUFWSCxBQVdFLGNBWFksQUFXWCxPQUFPLEVBVlYsWUFBWSxBQVVULE9BQU8sQ0FBQyxFQUNQLFVBQVUsRUFBRSxZQUFZLEVBQ3hCLE1BQU0sRUFBRSxJQUFJLEVBQ1osR0FBRyxFQUFFLEdBQUcsRUFDUixLQUFLLEVibE9BLE1BQUssR2FtT1g7O0FBR0gsQUFDRSxZQURVLEFBQ1QsUUFBUSxDQUFDLEVBQ1IsU0FBUyxFQUFFLHFCQUFxQixDQUFDLGFBQWEsR0FDL0M7O0FBSEgsQUFJRSxZQUpVLEFBSVQsT0FBTyxDQUFDLEVBQ1AsR0FBRyxFQUFFLEdBQUcsR0FDVDs7QUFJSCxBQUNFLFVBRFEsQUFDUCxRQUFRLENBQUMsRUFDUixNQUFNLEVibFBELE1BQUssQ2FrUGlCLEtBQUssQ0FBQyxZQUFZLEVBQzdDLGFBQWEsRWJuUFIsTUFBSyxFYW9QVixZQUFZLEVBQUUsQ0FBQyxFQUNmLGFBQWEsRUFBRSxDQUFDLEVBQ2hCLE1BQU0sRUFBRSxJQUFJLEVBQ1osSUFBSSxFQUFFLEdBQUcsRUFDVCxHQUFHLEVBQUUsR0FBRyxFQUNSLEtBQUssRUFBRSxJQUFJLEdBQ1o7O0FBVkgsQUFXRSxVQVhRLEFBV1AsT0FBTyxDQUFDLEVBQ1AsTUFBTSxFYjVQRCxNQUFLLENhNFBpQixLQUFLLENBQUMsWUFBWSxFQUM3QyxhQUFhLEViN1BSLE1BQUssRWE4UFYsTUFBTSxFQUFFLElBQUksRUFDWixJQUFJLEVBQUUsR0FBRyxFQUNULEdBQUcsRUFBRSxHQUFHLEVBQ1IsS0FBSyxFQUFFLElBQUksR0FDWjs7QUN4VEgsQUFBQSxVQUFVLENBQUMsRUFDVCxNQUFNLEVkcURDLE1BQUssQ2NyRGUsS0FBSyxDQUFDLFlBQVksRUFDN0MsYUFBYSxFQUFFLEdBQUcsR0FjbkI7O0FBaEJELEFBR0UsVUFIUSxBQUdQLFFBQVEsQ0FBQyxFQUNSLFVBQVUsRUFBRSxZQUFZLEVBQ3hCLE1BQU0sRUFBRSxJQUFJLEVBQ1osU0FBUyxFQUFFLHFCQUFxQixFQUNoQyxLQUFLLEVkK0NBLE1BQUssR2M5Q1g7O0FBUkgsQUFTRSxVQVRRLEFBU1AsT0FBTyxDQUFDLEVBQ1AsVUFBVSxFQUFFLFlBQVksRUFDeEIsTUFBTSxFQUFFLElBQUksRUFDWixTQUFTLEVBQUUscUJBQXFCLENBQUMsYUFBYSxFQUM5QyxnQkFBZ0IsRUFBRSxPQUFPLEVBQ3pCLEtBQUssRWR3Q0EsTUFBSyxHY3ZDWDs7QUFJSCxBQUNFLFVBRFEsQUFDUCxRQUFRLENBQUMsRUFDUixNQUFNLEVkaUNELE1BQUssQ2NqQ2lCLEtBQUssQ0FBQyxZQUFZLEVBQzdDLGFBQWEsRWRnQ1IsTUFBSyxFYy9CVixNQUFNLEVBQUUsSUFBSSxFQUNaLEtBQUssRUFBRSxHQUFHLEdBQ1g7O0FBTkgsQUFPRSxVQVBRLEFBT1AsT0FBTyxDQUFDLEVBQ1AsTUFBTSxFZDJCRCxNQUFLLENjM0JpQixLQUFLLENBQUMsWUFBWSxFQUM3QyxZQUFZLEVBQUUsQ0FBQyxFQUNmLFVBQVUsRUFBRSxDQUFDLEVBQ2IsTUFBTSxFQUFFLElBQUksRUFDWixTQUFTLEVBQUUscUJBQXFCLENBQUMsY0FBYyxDQUFDLGtCQUFrQixFQUNsRSxLQUFLLEVBQUUsSUFBSSxHQUNaOztBQUlILEFBQ0UsWUFEVSxBQUNULFFBQVEsQ0FBQyxFQUNSLE1BQU0sRWRlRCxNQUFLLENjZmlCLEtBQUssQ0FBQyxZQUFZLEVBQzdDLGFBQWEsRUFBRSxHQUFHLEVBQ2xCLE1BQU0sRUFBRSxLQUFLLEVBQ2IsR0FBRyxFQUFFLEdBQUcsRUFDUixLQUFLLEVBQUUsS0FBSyxHQUNiOztBQVBILEFBUUUsWUFSVSxBQVFULE9BQU8sQ0FBQyxFQUNQLE1BQU0sRWRRRCxNQUFLLENjUmlCLEtBQUssQ0FBQyxZQUFZLEVBQzdDLGFBQWEsRUFBRSxXQUFXLEVBQzFCLE1BQU0sRUFBRSxJQUFJLEVBQ1osR0FBRyxFQUFFLEdBQUcsRUFDUixLQUFLLEVBQUUsSUFBSSxHQUNaOztBQUlILEFBQUEsYUFBYSxDQUFDLEVBQ1osTUFBTSxFZEZDLE1BQUssQ2NFZSxLQUFLLENBQUMsWUFBWSxFQUM3QyxhQUFhLEVBQUUsQ0FBQyxFQUNoQixhQUFhLEVkSk4sTUFBSyxFY0taLFlBQVksRUFBRSxDQUFDLEdBb0JoQjs7QUF4QkQsQUFLRSxhQUxXLEFBS1YsUUFBUSxDQUFDLEVBQ1IsTUFBTSxFZFBELE1BQUssQ2NPaUIsS0FBSyxDQUFDLFlBQVksRUFDN0MsMEJBQTBCLEVkUnJCLE1BQUssRWNTVixXQUFXLEVBQUUsQ0FBQyxFQUNkLFVBQVUsRUFBRSxDQUFDLEVBQ2IsTUFBTSxFQUFFLElBQUksRUFDWixJQUFJLEVBQUUsR0FBRyxFQUNULEdBQUcsRUFBRSxHQUFHLEVBQ1IsS0FBSyxFQUFFLElBQUksR0FDWjs7QUFkSCxBQWVFLGFBZlcsQUFlVixPQUFPLENBQUMsRUFDUCxVQUFVLEVBQUUsWUFBWSxFQUN4QixhQUFhLEVkbEJSLE1BQUssRWNtQlYsTUFBTSxFQUFFLElBQUksRUFDWixJQUFJLEVBQUUsR0FBRyxFQUNULEdBQUcsRUFBRSxJQUFJLEVBQ1QsU0FBUyxFQUFFLGtCQUFrQixDQUFDLGFBQWEsRUFDM0MsS0FBSyxFZHZCQSxNQUFLLEdjd0JYOztBQUlILEFBQUEsV0FBVyxDQUFDLEVBQ1YsTUFBTSxFZDdCQyxNQUFLLENjNkJlLEtBQUssQ0FBQyxZQUFZLEVBQzdDLGFBQWEsRWQ5Qk4sTUFBSyxHY2dEYjs7QUFwQkQsQUFHRSxXQUhTLEFBR1IsUUFBUSxDQUFDLEVBQ1IsTUFBTSxFZGhDRCxNQUFLLENjZ0NpQixLQUFLLENBQUMsWUFBWSxFQUM3QyxhQUFhLEVBQUUsR0FBRyxFQUNsQixNQUFNLEVBQUUsS0FBSyxFQUNiLElBQUksRUFBRSxHQUFHLEVBQ1QsR0FBRyxFQUFFLEdBQUcsRUFDUixLQUFLLEVBQUUsS0FBSyxHQUNiOztBQVZILEFBV0UsV0FYUyxBQVdSLE9BQU8sQ0FBQyxFQUNQLE1BQU0sRWR4Q0QsTUFBSyxDY3dDaUIsS0FBSyxDQUFDLFlBQVksRUFDN0MsYUFBYSxFQUFFLENBQUMsRUFDaEIsV0FBVyxFQUFFLENBQUMsRUFDZCxNQUFNLEVBQUUsSUFBSSxFQUNaLElBQUksRUFBRSxHQUFHLEVBQ1QsU0FBUyxFQUFFLG9CQUFvQixDQUFDLGNBQWMsRUFDOUMsS0FBSyxFQUFFLElBQUksR0FDWjs7QUFJSCxBQUNFLFVBRFEsQUFDUCxRQUFRLEVBRFgsVUFBVSxBQUVQLE9BQU8sQ0FBQyxFQUNQLE1BQU0sRWR0REQsTUFBSyxDY3NEaUIsS0FBSyxDQUFDLFlBQVksRUFDN0MsYUFBYSxFQUFFLFdBQVcsRUFDMUIsWUFBWSxFQUFFLENBQUMsRUFDZixNQUFNLEVBQUUsSUFBSSxFQUNaLEtBQUssRUFBRSxLQUFLLEdBQ2I7O0FBUkgsQUFTRSxVQVRRLEFBU1AsUUFBUSxDQUFDLEVBQ1IsU0FBUyxFQUFFLHFCQUFxQixDQUFDLGNBQWMsR0FDaEQ7O0FBWEgsQUFZRSxVQVpRLEFBWVAsT0FBTyxDQUFDLEVBQ1AsU0FBUyxFQUFFLHFCQUFxQixDQUFDLGNBQWMsR0FDaEQ7O0FBSUgsQUFDRSxjQURZLEFBQ1gsUUFBUSxDQUFDLEVBQ1IsTUFBTSxFZHZFRCxNQUFLLENjdUVpQixLQUFLLENBQUMsWUFBWSxFQUM3QyxhQUFhLEVBQUUsYUFBYSxFQUM1QixNQUFNLEVBQUUsSUFBSSxFQUNaLFNBQVMsRUFBRSxxQkFBcUIsQ0FBQyxjQUFjLEVBQy9DLEtBQUssRUFBRSxJQUFJLEdBQ1o7O0FBUEgsQUFRRSxjQVJZLEFBUVgsT0FBTyxDQUFDLEVBQ1AsTUFBTSxFZDlFRCxNQUFLLENjOEVpQixLQUFLLENBQUMsWUFBWSxFQUM3QyxhQUFhLEVBQUUsR0FBRyxFQUNsQixNQUFNLEVBQUUsSUFBSSxFQUNaLFNBQVMsRUFBRSxxQkFBcUIsRUFDaEMsS0FBSyxFQUFFLElBQUksR0FDWjs7QUFJSCxBQUFBLFdBQVcsQ0FBQyxFQUNWLE1BQU0sRWR4RkMsTUFBSyxDY3dGZSxLQUFLLENBQUMsWUFBWSxFQUM3QyxhQUFhLEVBQUUsR0FBRyxHQWdCbkI7O0FBbEJELEFBR0UsV0FIUyxBQUdSLFFBQVEsQ0FBQyxFQUNSLGFBQWEsRUFBRSxHQUFHLEVBQ2xCLFVBQVUsRUFBRSx5QkFBeUIsRUFDckMsTUFBTSxFQUFFLEtBQUssRUFDYixLQUFLLEVBQUUsS0FBSyxHQUNiOztBQVJILEFBU0UsV0FUUyxBQVNSLE9BQU8sQ0FBQyxFQUNQLE1BQU0sRWRqR0QsTUFBSyxDY2lHaUIsS0FBSyxDQUFDLFlBQVksRUFDN0MsbUJBQW1CLEVBQUUsV0FBVyxFQUNoQyxhQUFhLEVBQUUsR0FBRyxFQUNsQixrQkFBa0IsRUFBRSxXQUFXLEVBQy9CLE1BQU0sRUFBRSxJQUFJLEVBQ1osU0FBUyxFQUFFLHFCQUFxQixDQUFDLGVBQWUsRUFDaEQsS0FBSyxFQUFFLElBQUksR0FDWiJ9 */ diff --git a/themes/learn4/css-compiled/spectre-icons.min.css b/themes/learn4/css-compiled/spectre-icons.min.css new file mode 100644 index 00000000..8f00a92e --- /dev/null +++ b/themes/learn4/css-compiled/spectre-icons.min.css @@ -0,0 +1 @@ +/*! Spectre.css Icons v0.5.8 | MIT License | github.com/picturepan2/spectre */.icon{font-size:inherit;font-style:normal;position:relative;display:inline-block;box-sizing:border-box;width:1em;height:1em;vertical-align:middle;text-indent:-9999px}.icon::after,.icon::before{position:absolute;top:50%;left:50%;display:block;content:'';transform:translate(-50%,-50%)}.icon.icon-2x{font-size:1.6rem}.icon.icon-3x{font-size:2.4rem}.icon.icon-4x{font-size:3.2rem}.accordion .icon,.btn .icon,.menu .icon,.toast .icon{vertical-align:-10%}.btn-lg .icon{vertical-align:-15%}.icon-arrow-down::before,.icon-arrow-left::before,.icon-arrow-right::before,.icon-arrow-up::before,.icon-back::before,.icon-downward::before,.icon-forward::before,.icon-upward::before{width:.65em;height:.65em;border:.1rem solid currentColor;border-right:0;border-bottom:0}.icon-arrow-down::before{transform:translate(-50%,-75%) rotate(225deg)}.icon-arrow-left::before{transform:translate(-25%,-50%) rotate(-45deg)}.icon-arrow-right::before{transform:translate(-75%,-50%) rotate(135deg)}.icon-arrow-up::before{transform:translate(-50%,-25%) rotate(45deg)}.icon-back::after,.icon-forward::after{width:.8em;height:.1rem;background:currentColor}.icon-downward::after,.icon-upward::after{width:.1rem;height:.8em;background:currentColor}.icon-back::after{left:55%}.icon-back::before{transform:translate(-50%,-50%) rotate(-45deg)}.icon-downward::after{top:45%}.icon-downward::before{transform:translate(-50%,-50%) rotate(-135deg)}.icon-forward::after{left:45%}.icon-forward::before{transform:translate(-50%,-50%) rotate(135deg)}.icon-upward::after{top:55%}.icon-upward::before{transform:translate(-50%,-50%) rotate(45deg)}.icon-caret::before{width:0;height:0;transform:translate(-50%,-25%);border-top:.3em solid currentColor;border-right:.3em solid transparent;border-left:.3em solid transparent}.icon-menu::before{width:100%;height:.1rem;background:currentColor;box-shadow:0 -.35em,0 .35em}.icon-apps::before{width:3px;height:3px;background:currentColor;box-shadow:-.35em -.35em,-.35em 0,-.35em .35em,0 -.35em,0 .35em,.35em -.35em,.35em 0,.35em .35em}.icon-resize-horiz::after,.icon-resize-horiz::before,.icon-resize-vert::after,.icon-resize-vert::before{width:.45em;height:.45em;border:.1rem solid currentColor;border-right:0;border-bottom:0}.icon-resize-horiz::before,.icon-resize-vert::before{transform:translate(-50%,-90%) rotate(45deg)}.icon-resize-horiz::after,.icon-resize-vert::after{transform:translate(-50%,-10%) rotate(225deg)}.icon-resize-horiz::before{transform:translate(-90%,-50%) rotate(-45deg)}.icon-resize-horiz::after{transform:translate(-10%,-50%) rotate(135deg)}.icon-more-horiz::before,.icon-more-vert::before{width:3px;height:3px;border-radius:50%;background:currentColor;box-shadow:-.4em 0,.4em 0}.icon-more-vert::before{box-shadow:0 -.4em,0 .4em}.icon-cross::before,.icon-minus::before,.icon-plus::before{width:100%;height:.1rem;background:currentColor}.icon-cross::after,.icon-plus::after{width:.1rem;height:100%;background:currentColor}.icon-cross::before{width:100%}.icon-cross::after{height:100%}.icon-cross::after,.icon-cross::before{transform:translate(-50%,-50%) rotate(45deg)}.icon-check::before{width:.9em;height:.5em;transform:translate(-50%,-75%) rotate(-45deg);border:.1rem solid currentColor;border-top:0;border-right:0}.icon-stop{border:.1rem solid currentColor;border-radius:50%}.icon-stop::before{width:1em;height:.1rem;transform:translate(-50%,-50%) rotate(45deg);background:currentColor}.icon-shutdown{border:.1rem solid currentColor;border-top-color:transparent;border-radius:50%}.icon-shutdown::before{top:.1em;width:.1rem;height:.5em;content:'';background:currentColor}.icon-refresh::before{width:1em;height:1em;border:.1rem solid currentColor;border-right-color:transparent;border-radius:50%}.icon-refresh::after{top:20%;left:80%;width:0;height:0;border:.2em solid currentColor;border-top-color:transparent;border-left-color:transparent}.icon-search::before{top:5%;left:5%;width:.75em;height:.75em;transform:translate(0,0) rotate(45deg);border:.1rem solid currentColor;border-radius:50%}.icon-search::after{top:80%;left:80%;width:.4em;height:.1rem;transform:translate(-50%,-50%) rotate(45deg);background:currentColor}.icon-edit::before{width:.85em;height:.4em;transform:translate(-40%,-60%) rotate(-45deg);border:.1rem solid currentColor}.icon-edit::after{top:95%;left:5%;width:0;height:0;transform:translate(0,-100%);border:.15em solid currentColor;border-top-color:transparent;border-right-color:transparent}.icon-delete::before{top:60%;width:.75em;height:.75em;border:.1rem solid currentColor;border-top:0;border-bottom-right-radius:.1rem;border-bottom-left-radius:.1rem}.icon-delete::after{top:.05rem;width:.5em;height:.1rem;background:currentColor;box-shadow:-.25em .2em,.25em .2em}.icon-share{border:.1rem solid currentColor;border-top:0;border-right:0;border-radius:.1rem}.icon-share::before{top:.25em;left:100%;width:.4em;height:.4em;transform:translate(-125%,-50%) rotate(-45deg);border:.1rem solid currentColor;border-top:0;border-left:0}.icon-share::after{width:.6em;height:.5em;border:.1rem solid currentColor;border-right:0;border-bottom:0;border-radius:75% 0}.icon-flag::before{left:15%;width:.1rem;height:1em;background:currentColor}.icon-flag::after{top:35%;left:60%;width:.8em;height:.65em;border:.1rem solid currentColor;border-left:0;border-top-right-radius:.1rem;border-bottom-right-radius:.1rem}.icon-bookmark::before{width:.8em;height:.9em;border:.1rem solid currentColor;border-bottom:0;border-top-left-radius:.1rem;border-top-right-radius:.1rem}.icon-bookmark::after{width:.5em;height:.5em;transform:translate(-50%,35%) rotate(-45deg) skew(15deg,15deg);border:.1rem solid currentColor;border-bottom:0;border-left:0;border-radius:.1rem}.icon-download,.icon-upload{border-bottom:.1rem solid currentColor}.icon-download::before,.icon-upload::before{width:.5em;height:.5em;transform:translate(-50%,-60%) rotate(-135deg);border:.1rem solid currentColor;border-right:0;border-bottom:0}.icon-download::after,.icon-upload::after{top:40%;width:.1rem;height:.6em;background:currentColor}.icon-upload::before{transform:translate(-50%,-60%) rotate(45deg)}.icon-upload::after{top:50%}.icon-copy::before{top:35%;left:40%;width:.8em;height:.8em;border:.1rem solid currentColor;border-right:0;border-bottom:0;border-radius:.1rem}.icon-copy::after{top:60%;left:60%;width:.8em;height:.8em;border:.1rem solid currentColor;border-radius:.1rem}.icon-time{border:.1rem solid currentColor;border-radius:50%}.icon-time::before{width:.1rem;height:.4em;transform:translate(-50%,-75%);background:currentColor}.icon-time::after{width:.1rem;height:.3em;transform:translate(-50%,-75%) rotate(90deg);transform-origin:50% 90%;background:currentColor}.icon-mail::before{width:1em;height:.8em;border:.1rem solid currentColor;border-radius:.1rem}.icon-mail::after{width:.5em;height:.5em;transform:translate(-50%,-90%) rotate(-45deg) skew(10deg,10deg);border:.1rem solid currentColor;border-top:0;border-right:0}.icon-people::before{top:25%;width:.45em;height:.45em;border:.1rem solid currentColor;border-radius:50%}.icon-people::after{top:75%;width:.9em;height:.4em;border:.1rem solid currentColor;border-radius:50% 50% 0 0}.icon-message{border:.1rem solid currentColor;border-right:0;border-bottom:0;border-radius:.1rem}.icon-message::before{top:40%;left:65%;width:.7em;height:.8em;border:.1rem solid currentColor;border-top:0;border-left:0;border-bottom-right-radius:.1rem}.icon-message::after{top:100%;left:10%;width:.1rem;height:.3em;transform:translate(0,-90%) rotate(45deg);border-radius:.1rem;background:currentColor}.icon-photo{border:.1rem solid currentColor;border-radius:.1rem}.icon-photo::before{top:35%;left:35%;width:.25em;height:.25em;border:.1rem solid currentColor;border-radius:50%}.icon-photo::after{left:60%;width:.5em;height:.5em;transform:translate(-50%,25%) rotate(-45deg);border:.1rem solid currentColor;border-bottom:0;border-left:0}.icon-link::after,.icon-link::before{width:.75em;height:.5em;border:.1rem solid currentColor;border-right:0;border-radius:5em 0 0 5em}.icon-link::before{transform:translate(-70%,-45%) rotate(-45deg)}.icon-link::after{transform:translate(-30%,-55%) rotate(135deg)}.icon-location::before{width:.8em;height:.8em;transform:translate(-50%,-60%) rotate(-45deg);border:.1rem solid currentColor;border-radius:50% 50% 50% 0}.icon-location::after{width:.2em;height:.2em;transform:translate(-50%,-80%);border:.1rem solid currentColor;border-radius:50%}.icon-emoji{border:.1rem solid currentColor;border-radius:50%}.icon-emoji::before{width:.15em;height:.15em;border-radius:50%;box-shadow:-.17em -.1em,.17em -.1em}.icon-emoji::after{width:.5em;height:.5em;transform:translate(-50%,-40%) rotate(-135deg);border:.1rem solid currentColor;border-right-color:transparent;border-bottom-color:transparent;border-radius:50%} \ No newline at end of file diff --git a/themes/learn4/css-compiled/spectre.css b/themes/learn4/css-compiled/spectre.css new file mode 100644 index 00000000..7d475529 --- /dev/null +++ b/themes/learn4/css-compiled/spectre.css @@ -0,0 +1,1251 @@ +/*! Spectre.css v0.5.8 | MIT License | github.com/picturepan2/spectre */ +/* Manually forked from Normalize.css */ +/* normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */ +/** 1. Change the default font family in all browsers (opinionated). 2. Correct the line height in all browsers. 3. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS. */ +/* Document ========================================================================== */ +html { font-family: sans-serif; /* 1 */ -ms-text-size-adjust: 100%; /* 3 */ -webkit-text-size-adjust: 100%; /* 3 */ } + +/* Sections ========================================================================== */ +/** Remove the margin in all browsers (opinionated). */ +body { margin: 0; } + +/** Add the correct display in IE 9-. */ +article, aside, footer, header, nav, section { display: block; } + +/** Correct the font size and margin on `h1` elements within `section` and `article` contexts in Chrome, Firefox, and Safari. */ +h1 { font-size: 2em; margin: 0.67em 0; } + +/* Grouping content ========================================================================== */ +/** Add the correct display in IE 9-. 1. Add the correct display in IE. */ +figcaption, figure, main { /* 1 */ display: block; } + +/** Add the correct margin in IE 8 (removed). */ +/** 1. Add the correct box sizing in Firefox. 2. Show the overflow in Edge and IE. */ +hr { box-sizing: content-box; /* 1 */ height: 0; /* 1 */ overflow: visible; /* 2 */ } + +/** 1. Correct the inheritance and scaling of font size in all browsers. (removed) 2. Correct the odd `em` font sizing in all browsers. */ +/* Text-level semantics ========================================================================== */ +/** 1. Remove the gray background on active links in IE 10. 2. Remove gaps in links underline in iOS 8+ and Safari 8+. */ +a { background-color: transparent; /* 1 */ -webkit-text-decoration-skip: objects; /* 2 */ } + +/** Remove the outline on focused links when they are also active or hovered in all browsers (opinionated). */ +a:active, a:hover { outline-width: 0; } + +/** Modify default styling of address. */ +address { font-style: normal; } + +/** 1. Remove the bottom border in Firefox 39-. 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. (removed) */ +/** Prevent the duplicate application of `bolder` by the next rule in Safari 6. */ +b, strong { font-weight: inherit; } + +/** Add the correct font weight in Chrome, Edge, and Safari. */ +b, strong { font-weight: bolder; } + +/** 1. Correct the inheritance and scaling of font size in all browsers. 2. Correct the odd `em` font sizing in all browsers. */ +code, kbd, pre, samp { font-family: "Hack", monospace; /* 1 (changed) */ font-size: 1em; /* 2 */ } + +/** Add the correct font style in Android 4.3-. */ +dfn { font-style: italic; } + +/** Add the correct background and color in IE 9-. (Removed) */ +/** Add the correct font size in all browsers. */ +small { font-size: 80%; font-weight: 400; /* (added) */ } + +/** Prevent `sub` and `sup` elements from affecting the line height in all browsers. */ +sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } + +sub { bottom: -0.25em; } + +sup { top: -0.5em; } + +/* Embedded content ========================================================================== */ +/** Add the correct display in IE 9-. */ +audio, video { display: inline-block; } + +/** Add the correct display in iOS 4-7. */ +audio:not([controls]) { display: none; height: 0; } + +/** Remove the border on images inside links in IE 10-. */ +img { border-style: none; } + +/** Hide the overflow in IE. */ +svg:not(:root) { overflow: hidden; } + +/* Forms ========================================================================== */ +/** 1. Change the font styles in all browsers (opinionated). 2. Remove the margin in Firefox and Safari. */ +button, input, optgroup, select, textarea { font-family: inherit; /* 1 (changed) */ font-size: inherit; /* 1 (changed) */ line-height: inherit; /* 1 (changed) */ margin: 0; /* 2 */ } + +/** Show the overflow in IE. 1. Show the overflow in Edge. */ +button, input { /* 1 */ overflow: visible; } + +/** Remove the inheritance of text transform in Edge, Firefox, and IE. 1. Remove the inheritance of text transform in Firefox. */ +button, select { /* 1 */ text-transform: none; } + +/** 1. Prevent a WebKit bug where (2) destroys native `audio` and `video` controls in Android 4. 2. Correct the inability to style clickable types in iOS and Safari. */ +button, html [type="button"], [type="reset"], [type="submit"] { -webkit-appearance: button; /* 2 */ } + +/** Remove the inner border and padding in Firefox. */ +button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { border-style: none; padding: 0; } + +/** Restore the focus styles unset by the previous rule (removed). */ +/** Change the border, margin, and padding in all browsers (opinionated) (changed). */ +fieldset { border: 0; margin: 0; padding: 0; } + +/** 1. Correct the text wrapping in Edge and IE. 2. Correct the color inheritance from `fieldset` elements in IE. 3. Remove the padding so developers are not caught out when they zero out `fieldset` elements in all browsers. */ +legend { box-sizing: border-box; /* 1 */ color: inherit; /* 2 */ display: table; /* 1 */ max-width: 100%; /* 1 */ padding: 0; /* 3 */ white-space: normal; /* 1 */ } + +/** 1. Add the correct display in IE 9-. 2. Add the correct vertical alignment in Chrome, Firefox, and Opera. */ +progress { display: inline-block; /* 1 */ vertical-align: baseline; /* 2 */ } + +/** Remove the default vertical scrollbar in IE. */ +textarea { overflow: auto; } + +/** 1. Add the correct box sizing in IE 10-. 2. Remove the padding in IE 10-. */ +[type="checkbox"], [type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ } + +/** Correct the cursor style of increment and decrement buttons in Chrome. */ +[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { height: auto; } + +/** 1. Correct the odd appearance in Chrome and Safari. 2. Correct the outline style in Safari. */ +[type="search"] { -webkit-appearance: textfield; /* 1 */ outline-offset: -2px; /* 2 */ } + +/** Remove the inner padding and cancel buttons in Chrome and Safari on macOS. */ +[type="search"]::-webkit-search-cancel-button, [type="search"]::-webkit-search-decoration { -webkit-appearance: none; } + +/** 1. Correct the inability to style clickable types in iOS and Safari. 2. Change font properties to `inherit` in Safari. */ +::-webkit-file-upload-button { -webkit-appearance: button; /* 1 */ font: inherit; /* 2 */ } + +/* Interactive ========================================================================== */ +/* Add the correct display in IE 9-. 1. Add the correct display in Edge, IE, and Firefox. */ +details, menu { display: block; } + +/* Add the correct display in all browsers. */ +summary { display: list-item; outline: none; } + +/* Scripting ========================================================================== */ +/** Add the correct display in IE 9-. */ +canvas { display: inline-block; } + +/** Add the correct display in IE. */ +template { display: none; } + +/* Hidden ========================================================================== */ +/** Add the correct display in IE 10-. */ +[hidden] { display: none; } + +*, *::before, *::after { box-sizing: inherit; } + +html { box-sizing: border-box; font-size: 20px; line-height: 1.5; -webkit-tap-highlight-color: transparent; } + +body { background: #fff; color: #3a414e; font-family: "Public Sans", "Helvetica Neue", sans-serif; font-size: 0.85rem; overflow-x: hidden; text-rendering: optimizeLegibility; } + +a { color: #1195dc; outline: none; text-decoration: none; } + +a:focus { box-shadow: 0 0 0 0.1rem rgba(26, 163, 237, 0.2); } + +a:focus, a:hover, a:active, a.active { color: #0e75ad; text-decoration: underline; } + +a:visited { color: #32acef; } + +h1, h2, h3, h4, h5, h6 { color: inherit; font-weight: 500; line-height: 1.2; margin-bottom: .5em; margin-top: 0; } + +.h1, .h2, .h3, .h4, .h5, .h6 { font-weight: 500; } + +h1, .h1 { font-size: 2rem; } + +h2, .h2 { font-size: 1.6rem; } + +h3, .h3 { font-size: 1.4rem; } + +h4, .h4 { font-size: 1.2rem; } + +h5, .h5 { font-size: 1rem; } + +h6, .h6 { font-size: .8rem; } + +p { margin: 0 0 1.2rem; } + +a, ins, u { -webkit-text-decoration-skip: ink edges; text-decoration-skip: ink edges; } + +abbr[title] { border-bottom: 0.05rem dotted; cursor: help; text-decoration: none; } + +kbd { border-radius: 0.1rem; line-height: 1.25; padding: .1rem .2rem; background: #454d5d; color: #fff; font-size: 0.7rem; } + +mark { background: #ffe9b3; color: #3a414e; border-bottom: 0.05rem solid #ffd367; border-radius: 0.1rem; padding: 0.05rem 0.1rem 0; } + +blockquote { border-left: 0.1rem solid #e7e9ed; margin-left: 0; padding: 0.4rem 0.8rem; } + +blockquote p:last-child { margin-bottom: 0; } + +ul, ol { margin: 0.8rem 0 0.8rem 0.8rem; padding: 0; } + +ul ul, ul ol, ol ul, ol ol { margin: 0.8rem 0 0.8rem 0.8rem; } + +ul li, ol li { margin-top: 0.4rem; } + +ul { list-style: disc inside; } + +ul ul { list-style-type: circle; } + +ol { list-style: decimal inside; } + +ol ol { list-style-type: lower-alpha; } + +dl dt { font-weight: bold; } + +dl dd { margin: 0.4rem 0 0.8rem 0; } + +html:lang(zh), html:lang(zh-Hans), .lang-zh, .lang-zh-hans { font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", sans-serif; } + +html:lang(zh-Hant), .lang-zh-hant { font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang TC", "Hiragino Sans CNS", "Microsoft JhengHei", "Helvetica Neue", sans-serif; } + +html:lang(ja), .lang-ja { font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Hiragino Sans", "Hiragino Kaku Gothic Pro", "Yu Gothic", YuGothic, Meiryo, "Helvetica Neue", sans-serif; } + +html:lang(ko), .lang-ko { font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Malgun Gothic", "Helvetica Neue", sans-serif; } + +:lang(zh) ins, :lang(zh) u, :lang(ja) ins, :lang(ja) u, .lang-cjk ins, .lang-cjk u { border-bottom: 0.05rem solid; text-decoration: none; } + +:lang(zh) del + del, :lang(zh) del + s, :lang(zh) ins + ins, :lang(zh) ins + u, :lang(zh) s + del, :lang(zh) s + s, :lang(zh) u + ins, :lang(zh) u + u, :lang(ja) del + del, :lang(ja) del + s, :lang(ja) ins + ins, :lang(ja) ins + u, :lang(ja) s + del, :lang(ja) s + s, :lang(ja) u + ins, :lang(ja) u + u, .lang-cjk del + del, .lang-cjk del + s, .lang-cjk ins + ins, .lang-cjk ins + u, .lang-cjk s + del, .lang-cjk s + s, .lang-cjk u + ins, .lang-cjk u + u { margin-left: .125em; } + +.table { border-collapse: collapse; border-spacing: 0; width: 100%; text-align: left; } + +.table.table-striped tbody tr:nth-of-type(odd) { background: #f8f9fa; } + +.table tbody tr.active, .table.table-striped tbody tr.active { background: #f0f1f4; } + +.table.table-hover tbody tr:hover { background: #f0f1f4; } + +.table.table-scroll { display: block; overflow-x: auto; padding-bottom: .75rem; white-space: nowrap; } + +.table td, .table th { border-bottom: 0.05rem solid #e7e9ed; padding: 0.6rem 0.4rem; } + +.table th { border-bottom-width: 0.1rem; } + +.btn, .button { -webkit-appearance: none; -moz-appearance: none; appearance: none; background: #fff; border: 0.05rem solid #1AA3ED; border-radius: 0.1rem; color: #1AA3ED; cursor: pointer; display: inline-block; font-size: 0.85rem; height: 1.8rem; line-height: 1.2rem; outline: none; padding: 0.25rem 0.4rem; text-align: center; text-decoration: none; transition: background .2s, border .2s, box-shadow .2s, color .2s; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; white-space: nowrap; } + +.btn:focus, .button:focus { box-shadow: 0 0 0 0.1rem rgba(26, 163, 237, 0.2); } + +.btn:focus, .button:focus, .btn:hover, .button:hover { background: #38C5C7; border-color: #129be6; text-decoration: none; } + +.btn:active, .button:active, .btn.active, .active.button { background: #129be6; border-color: #108bce; color: #fff; text-decoration: none; } + +.btn:active.loading::after, .button:active.loading::after, .btn.active.loading::after, .active.loading.button::after { border-bottom-color: #fff; border-left-color: #fff; } + +.btn[disabled], .button[disabled], .btn:disabled, .button:disabled, .btn.disabled, .disabled.button { cursor: default; opacity: .5; pointer-events: none; } + +.btn.btn-primary, .btn-primary.button { background: #1AA3ED; border-color: #129be6; color: #fff; } + +.btn.btn-primary:focus, .btn-primary.button:focus, .btn.btn-primary:hover, .btn-primary.button:hover { background: #1195dc; border-color: #108bce; color: #fff; } + +.btn.btn-primary:active, .btn-primary.button:active, .btn.btn-primary.active, .btn-primary.active.button { background: #118fd3; border-color: #0f85c5; color: #fff; } + +.btn.btn-primary.loading::after, .btn-primary.loading.button::after { border-bottom-color: #fff; border-left-color: #fff; } + +.btn.btn-success, .btn-success.button { background: #32b643; border-color: #2faa3f; color: #fff; } + +.btn.btn-success:focus, .btn-success.button:focus { box-shadow: 0 0 0 0.1rem rgba(50, 182, 67, 0.2); } + +.btn.btn-success:focus, .btn-success.button:focus, .btn.btn-success:hover, .btn-success.button:hover { background: #30ae40; border-color: #2da23c; color: #fff; } + +.btn.btn-success:active, .btn-success.button:active, .btn.btn-success.active, .btn-success.active.button { background: #2a9a39; border-color: #278e34; color: #fff; } + +.btn.btn-success.loading::after, .btn-success.loading.button::after { border-bottom-color: #fff; border-left-color: #fff; } + +.btn.btn-error, .btn-error.button { background: #e85600; border-color: #d95000; color: #fff; } + +.btn.btn-error:focus, .btn-error.button:focus { box-shadow: 0 0 0 0.1rem rgba(232, 86, 0, 0.2); } + +.btn.btn-error:focus, .btn-error.button:focus, .btn.btn-error:hover, .btn-error.button:hover { background: #de5200; border-color: #cf4d00; color: #fff; } + +.btn.btn-error:active, .btn-error.button:active, .btn.btn-error.active, .btn-error.active.button { background: #c44900; border-color: #b54300; color: #fff; } + +.btn.btn-error.loading::after, .btn-error.loading.button::after { border-bottom-color: #fff; border-left-color: #fff; } + +.btn.btn-link, .btn-link.button { background: transparent; border-color: transparent; color: #1195dc; } + +.btn.btn-link:focus, .btn-link.button:focus, .btn.btn-link:hover, .btn-link.button:hover, .btn.btn-link:active, .btn-link.button:active, .btn.btn-link.active, .btn-link.active.button { color: #0e75ad; } + +.btn.btn-sm, .btn-sm.button { font-size: 0.7rem; height: 1.4rem; padding: 0.05rem 0.3rem; } + +.btn.btn-lg, .btn-lg.button { font-size: 0.9rem; height: 2rem; padding: 0.35rem 0.6rem; } + +.btn.btn-block, .btn-block.button { display: block; width: 100%; } + +.btn.btn-action, .btn-action.button { width: 1.8rem; padding-left: 0; padding-right: 0; } + +.btn.btn-action.btn-sm, .btn-action.btn-sm.button { width: 1.4rem; } + +.btn.btn-action.btn-lg, .btn-action.btn-lg.button { width: 2rem; } + +.btn.btn-clear, .btn-clear.button { background: transparent; border: 0; color: currentColor; height: 1rem; line-height: 0.8rem; margin-left: 0.2rem; margin-right: -2px; opacity: 1; padding: 0.1rem; text-decoration: none; width: 1rem; } + +.btn.btn-clear:focus, .btn-clear.button:focus, .btn.btn-clear:hover, .btn-clear.button:hover { background: rgba(248, 249, 250, 0.5); opacity: .95; } + +.btn.btn-clear::before, .btn-clear.button::before { content: "\2715"; } + +.btn-group { display: -ms-inline-flexbox; display: inline-flex; -ms-flex-wrap: wrap; flex-wrap: wrap; } + +.btn-group .btn, .btn-group .button { -ms-flex: 1 0 auto; flex: 1 0 auto; } + +.btn-group .btn:first-child:not(:last-child), .btn-group .button:first-child:not(:last-child) { border-bottom-right-radius: 0; border-top-right-radius: 0; } + +.btn-group .btn:not(:first-child):not(:last-child), .btn-group .button:not(:first-child):not(:last-child) { border-radius: 0; margin-left: -0.05rem; } + +.btn-group .btn:last-child:not(:first-child), .btn-group .button:last-child:not(:first-child) { border-bottom-left-radius: 0; border-top-left-radius: 0; margin-left: -0.05rem; } + +.btn-group .btn:focus, .btn-group .button:focus, .btn-group .btn:hover, .btn-group .button:hover, .btn-group .btn:active, .btn-group .button:active, .btn-group .btn.active, .btn-group .active.button { z-index: 1; } + +.btn-group.btn-group-block { display: -ms-flexbox; display: flex; } + +.btn-group.btn-group-block .btn, .btn-group.btn-group-block .button { -ms-flex: 1 0 0px; flex: 1 0 0; } + +.form-group:not(:last-child) { margin-bottom: 0.4rem; } + +fieldset { margin-bottom: 0.8rem; } + +legend { font-size: 0.9rem; font-weight: 500; margin-bottom: 0.8rem; } + +.form-label { display: block; line-height: 1.2rem; padding: 0.3rem 0; } + +.form-label.label-sm { font-size: 0.7rem; padding: 0.1rem 0; } + +.form-label.label-lg { font-size: 0.9rem; padding: 0.4rem 0; } + +.form-input, .search-input, [data-grav-field="array"] input, [data-grav-field="array"] textarea { -webkit-appearance: none; -moz-appearance: none; appearance: none; background: #fff; background-image: none; border: 0.05rem solid #caced7; border-radius: 0.1rem; color: #3a414e; display: block; font-size: 0.85rem; height: 1.8rem; line-height: 1.2rem; max-width: 100%; outline: none; padding: 0.25rem 0.4rem; position: relative; transition: background .2s, border .2s, box-shadow .2s, color .2s; width: 100%; } + +.form-input:focus, .search-input:focus, [data-grav-field="array"] input:focus, [data-grav-field="array"] textarea:focus { box-shadow: 0 0 0 0.1rem rgba(26, 163, 237, 0.2); border-color: #1AA3ED; } + +.form-input:-ms-input-placeholder, .search-input:-ms-input-placeholder, [data-grav-field="array"] input:-ms-input-placeholder, [data-grav-field="array"] textarea:-ms-input-placeholder { color: #acb3c2; } + +.form-input::-ms-input-placeholder, .search-input::-ms-input-placeholder, [data-grav-field="array"] input::-ms-input-placeholder, [data-grav-field="array"] textarea::-ms-input-placeholder { color: #acb3c2; } + +.form-input::placeholder, .search-input::placeholder, [data-grav-field="array"] input::placeholder, [data-grav-field="array"] textarea::placeholder { color: #acb3c2; } + +.form-input.input-sm, .input-sm.search-input, [data-grav-field="array"] input.input-sm, [data-grav-field="array"] textarea.input-sm { font-size: 0.7rem; height: 1.4rem; padding: 0.05rem 0.3rem; } + +.form-input.input-lg, .input-lg.search-input, [data-grav-field="array"] input.input-lg, [data-grav-field="array"] textarea.input-lg { font-size: 0.9rem; height: 2rem; padding: 0.35rem 0.6rem; } + +.form-input.input-inline, .input-inline.search-input, [data-grav-field="array"] input.input-inline, [data-grav-field="array"] textarea.input-inline { display: inline-block; vertical-align: middle; width: auto; } + +.form-input[type="file"], .search-input[type="file"], [data-grav-field="array"] input[type="file"], [data-grav-field="array"] textarea[type="file"] { height: auto; } + +textarea.form-input, textarea.search-input, [data-grav-field="array"] textarea, textarea.form-input.input-lg, textarea.input-lg.search-input, [data-grav-field="array"] textarea.input-lg, textarea.form-input.input-sm, textarea.input-sm.search-input, [data-grav-field="array"] textarea.input-sm { height: auto; } + +.form-input-hint { color: #acb3c2; font-size: 0.7rem; margin-top: 0.2rem; } + +.has-success .form-input-hint, .is-success + .form-input-hint { color: #32b643; } + +.has-error .form-input-hint, .is-error + .form-input-hint { color: #e85600; } + +.form-select { -webkit-appearance: none; -moz-appearance: none; appearance: none; border: 0.05rem solid #caced7; border-radius: 0.1rem; color: inherit; font-size: 0.85rem; height: 1.8rem; line-height: 1.2rem; outline: none; padding: 0.25rem 0.4rem; vertical-align: middle; width: 100%; background: #fff; } + +.form-select:focus { box-shadow: 0 0 0 0.1rem rgba(26, 163, 237, 0.2); border-color: #1AA3ED; } + +.form-select::-ms-expand { display: none; } + +.form-select.select-sm { font-size: 0.7rem; height: 1.4rem; padding: 0.05rem 1.1rem 0.05rem 0.3rem; } + +.form-select.select-lg { font-size: 0.9rem; height: 2rem; padding: 0.35rem 1.4rem 0.35rem 0.6rem; } + +.form-select[size], .form-select[multiple] { height: auto; padding: 0.25rem 0.4rem; } + +.form-select[size] option, .form-select[multiple] option { padding: 0.1rem 0.2rem; } + +.form-select:not([multiple]):not([size]) { background: #fff url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%204%205'%3E%3Cpath%20fill='%23667189'%20d='M2%200L0%202h4zm0%205L0%203h4z'/%3E%3C/svg%3E") no-repeat right 0.35rem center/0.4rem 0.5rem; padding-right: 1.2rem; } + +.has-icon-left, .has-icon-right { position: relative; } + +.has-icon-left .form-icon, .has-icon-right .form-icon { height: 0.8rem; margin: 0 0.25rem; position: absolute; top: 50%; transform: translateY(-50%); width: 0.8rem; z-index: 2; } + +.has-icon-left .form-icon { left: 0.05rem; } + +.has-icon-left .form-input, .has-icon-left .search-input, .has-icon-left [data-grav-field="array"] input, [data-grav-field="array"] .has-icon-left input, .has-icon-left [data-grav-field="array"] textarea, [data-grav-field="array"] .has-icon-left textarea { padding-left: 1.3rem; } + +.has-icon-right .form-icon { right: 0.05rem; } + +.has-icon-right .form-input, .has-icon-right .search-input, .has-icon-right [data-grav-field="array"] input, [data-grav-field="array"] .has-icon-right input, .has-icon-right [data-grav-field="array"] textarea, [data-grav-field="array"] .has-icon-right textarea { padding-right: 1.3rem; } + +.form-checkbox, .form-radio, .form-switch { display: block; line-height: 1.2rem; margin: 0.2rem 0; min-height: 1.4rem; padding: 0.1rem 0.4rem 0.1rem 1.2rem; position: relative; } + +.form-checkbox input, .form-radio input, .form-switch input { clip: rect(0, 0, 0, 0); height: 1px; margin: -1px; overflow: hidden; position: absolute; width: 1px; } + +.form-checkbox input:focus + .form-icon, .form-radio input:focus + .form-icon, .form-switch input:focus + .form-icon { box-shadow: 0 0 0 0.1rem rgba(26, 163, 237, 0.2); border-color: #1AA3ED; } + +.form-checkbox input:checked + .form-icon, .form-radio input:checked + .form-icon, .form-switch input:checked + .form-icon { background: #1AA3ED; border-color: #1AA3ED; } + +.form-checkbox .form-icon, .form-radio .form-icon, .form-switch .form-icon { border: 0.05rem solid #caced7; cursor: pointer; display: inline-block; position: absolute; transition: background .2s, border .2s, box-shadow .2s, color .2s; } + +.form-checkbox.input-sm, .form-radio.input-sm, .form-switch.input-sm { font-size: 0.7rem; margin: 0; } + +.form-checkbox.input-lg, .form-radio.input-lg, .form-switch.input-lg { font-size: 0.9rem; margin: 0.3rem 0; } + +.form-checkbox .form-icon, .form-radio .form-icon { background: #fff; height: 0.8rem; left: 0; top: 0.3rem; width: 0.8rem; } + +.form-checkbox input:active + .form-icon, .form-radio input:active + .form-icon { background: #f0f1f4; } + +.form-checkbox .form-icon { border-radius: 0.1rem; } + +.form-checkbox input:checked + .form-icon::before { background-clip: padding-box; border: 0.1rem solid #fff; border-left-width: 0; border-top-width: 0; content: ""; height: 9px; left: 50%; margin-left: -3px; margin-top: -6px; position: absolute; top: 50%; transform: rotate(45deg); width: 6px; } + +.form-checkbox input:indeterminate + .form-icon { background: #1AA3ED; border-color: #1AA3ED; } + +.form-checkbox input:indeterminate + .form-icon::before { background: #fff; content: ""; height: 2px; left: 50%; margin-left: -5px; margin-top: -1px; position: absolute; top: 50%; width: 10px; } + +.form-radio .form-icon { border-radius: 50%; } + +.form-radio input:checked + .form-icon::before { background: #fff; border-radius: 50%; content: ""; height: 6px; left: 50%; position: absolute; top: 50%; transform: translate(-50%, -50%); width: 6px; } + +.form-switch { padding-left: 2rem; } + +.form-switch .form-icon { background: #acb3c2; background-clip: padding-box; border-radius: 0.45rem; height: 0.9rem; left: 0; top: 0.25rem; width: 1.6rem; } + +.form-switch .form-icon::before { background: #fff; border-radius: 50%; content: ""; display: block; height: 0.8rem; left: 0; position: absolute; top: 0; transition: background .2s, border .2s, box-shadow .2s, color .2s, left .2s; width: 0.8rem; } + +.form-switch input:checked + .form-icon::before { left: 14px; } + +.form-switch input:active + .form-icon::before { background: #f8f9fa; } + +.input-group { display: -ms-flexbox; display: flex; } + +.input-group .input-group-addon { background: #f8f9fa; border: 0.05rem solid #caced7; border-radius: 0.1rem; line-height: 1.2rem; padding: 0.25rem 0.4rem; white-space: nowrap; } + +.input-group .input-group-addon.addon-sm { font-size: 0.7rem; padding: 0.05rem 0.3rem; } + +.input-group .input-group-addon.addon-lg { font-size: 0.9rem; padding: 0.35rem 0.6rem; } + +.input-group .form-input, .input-group .search-input, .input-group [data-grav-field="array"] input, [data-grav-field="array"] .input-group input, .input-group [data-grav-field="array"] textarea, [data-grav-field="array"] .input-group textarea, .input-group .form-select { -ms-flex: 1 1 auto; flex: 1 1 auto; width: 1%; } + +.input-group .input-group-btn { z-index: 1; } + +.input-group .form-input:first-child:not(:last-child), .input-group .search-input:first-child:not(:last-child), .input-group [data-grav-field="array"] input:first-child:not(:last-child), [data-grav-field="array"] .input-group input:first-child:not(:last-child), .input-group [data-grav-field="array"] textarea:first-child:not(:last-child), [data-grav-field="array"] .input-group textarea:first-child:not(:last-child), .input-group .form-select:first-child:not(:last-child), .input-group .input-group-addon:first-child:not(:last-child), .input-group .input-group-btn:first-child:not(:last-child) { border-bottom-right-radius: 0; border-top-right-radius: 0; } + +.input-group .form-input:not(:first-child):not(:last-child), .input-group .search-input:not(:first-child):not(:last-child), .input-group [data-grav-field="array"] input:not(:first-child):not(:last-child), [data-grav-field="array"] .input-group input:not(:first-child):not(:last-child), .input-group [data-grav-field="array"] textarea:not(:first-child):not(:last-child), [data-grav-field="array"] .input-group textarea:not(:first-child):not(:last-child), .input-group .form-select:not(:first-child):not(:last-child), .input-group .input-group-addon:not(:first-child):not(:last-child), .input-group .input-group-btn:not(:first-child):not(:last-child) { border-radius: 0; margin-left: -0.05rem; } + +.input-group .form-input:last-child:not(:first-child), .input-group .search-input:last-child:not(:first-child), .input-group [data-grav-field="array"] input:last-child:not(:first-child), [data-grav-field="array"] .input-group input:last-child:not(:first-child), .input-group [data-grav-field="array"] textarea:last-child:not(:first-child), [data-grav-field="array"] .input-group textarea:last-child:not(:first-child), .input-group .form-select:last-child:not(:first-child), .input-group .input-group-addon:last-child:not(:first-child), .input-group .input-group-btn:last-child:not(:first-child) { border-bottom-left-radius: 0; border-top-left-radius: 0; margin-left: -0.05rem; } + +.input-group .form-input:focus, .input-group .search-input:focus, .input-group [data-grav-field="array"] input:focus, [data-grav-field="array"] .input-group input:focus, .input-group [data-grav-field="array"] textarea:focus, [data-grav-field="array"] .input-group textarea:focus, .input-group .form-select:focus, .input-group .input-group-addon:focus, .input-group .input-group-btn:focus { z-index: 2; } + +.input-group .form-select { width: auto; } + +.input-group.input-inline { display: -ms-inline-flexbox; display: inline-flex; } + +.has-success .form-input, .has-success .search-input, .has-success [data-grav-field="array"] input, [data-grav-field="array"] .has-success input, .has-success [data-grav-field="array"] textarea, [data-grav-field="array"] .has-success textarea, .form-input.is-success, .is-success.search-input, [data-grav-field="array"] input.is-success, [data-grav-field="array"] textarea.is-success, .has-success .form-select, .form-select.is-success { background: #f9fdfa; border-color: #32b643; } + +.has-success .form-input:focus, .has-success .search-input:focus, .has-success [data-grav-field="array"] input:focus, [data-grav-field="array"] .has-success input:focus, .has-success [data-grav-field="array"] textarea:focus, [data-grav-field="array"] .has-success textarea:focus, .form-input.is-success:focus, .is-success.search-input:focus, [data-grav-field="array"] input.is-success:focus, [data-grav-field="array"] textarea.is-success:focus, .has-success .form-select:focus, .form-select.is-success:focus { box-shadow: 0 0 0 0.1rem rgba(50, 182, 67, 0.2); } + +.has-error .form-input, .has-error .search-input, .has-error [data-grav-field="array"] input, [data-grav-field="array"] .has-error input, .has-error [data-grav-field="array"] textarea, [data-grav-field="array"] .has-error textarea, .form-input.is-error, .is-error.search-input, [data-grav-field="array"] input.is-error, [data-grav-field="array"] textarea.is-error, .has-error .form-select, .form-select.is-error { background: #fffaf7; border-color: #e85600; } + +.has-error .form-input:focus, .has-error .search-input:focus, .has-error [data-grav-field="array"] input:focus, [data-grav-field="array"] .has-error input:focus, .has-error [data-grav-field="array"] textarea:focus, [data-grav-field="array"] .has-error textarea:focus, .form-input.is-error:focus, .is-error.search-input:focus, [data-grav-field="array"] input.is-error:focus, [data-grav-field="array"] textarea.is-error:focus, .has-error .form-select:focus, .form-select.is-error:focus { box-shadow: 0 0 0 0.1rem rgba(232, 86, 0, 0.2); } + +.has-error .form-checkbox .form-icon, .form-checkbox.is-error .form-icon, .has-error .form-radio .form-icon, .form-radio.is-error .form-icon, .has-error .form-switch .form-icon, .form-switch.is-error .form-icon { border-color: #e85600; } + +.has-error .form-checkbox input:checked + .form-icon, .form-checkbox.is-error input:checked + .form-icon, .has-error .form-radio input:checked + .form-icon, .form-radio.is-error input:checked + .form-icon, .has-error .form-switch input:checked + .form-icon, .form-switch.is-error input:checked + .form-icon { background: #e85600; border-color: #e85600; } + +.has-error .form-checkbox input:focus + .form-icon, .form-checkbox.is-error input:focus + .form-icon, .has-error .form-radio input:focus + .form-icon, .form-radio.is-error input:focus + .form-icon, .has-error .form-switch input:focus + .form-icon, .form-switch.is-error input:focus + .form-icon { box-shadow: 0 0 0 0.1rem rgba(232, 86, 0, 0.2); border-color: #e85600; } + +.has-error .form-checkbox input:indeterminate + .form-icon, .form-checkbox.is-error input:indeterminate + .form-icon { background: #e85600; border-color: #e85600; } + +.form-input:not(:placeholder-shown):invalid, .search-input:not(:placeholder-shown):invalid, [data-grav-field="array"] input:not(:placeholder-shown):invalid, [data-grav-field="array"] textarea:not(:placeholder-shown):invalid { border-color: #e85600; } + +.form-input:not(:placeholder-shown):invalid:focus, .search-input:not(:placeholder-shown):invalid:focus, [data-grav-field="array"] input:not(:placeholder-shown):invalid:focus, [data-grav-field="array"] textarea:not(:placeholder-shown):invalid:focus { box-shadow: 0 0 0 0.1rem rgba(232, 86, 0, 0.2); background: #fffaf7; } + +.form-input:not(:placeholder-shown):invalid + .form-input-hint, .search-input:not(:placeholder-shown):invalid + .form-input-hint, [data-grav-field="array"] input:not(:placeholder-shown):invalid + .form-input-hint, [data-grav-field="array"] textarea:not(:placeholder-shown):invalid + .form-input-hint { color: #e85600; } + +.form-input:disabled, .search-input:disabled, [data-grav-field="array"] input:disabled, [data-grav-field="array"] textarea:disabled, .form-input.disabled, .disabled.search-input, [data-grav-field="array"] input.disabled, [data-grav-field="array"] textarea.disabled, .form-select:disabled, .form-select.disabled { background-color: #f0f1f4; cursor: not-allowed; opacity: .5; } + +.form-input[readonly], .search-input[readonly], [data-grav-field="array"] input[readonly], [data-grav-field="array"] textarea[readonly] { background-color: #f8f9fa; } + +input:disabled + .form-icon, input.disabled + .form-icon { background: #f0f1f4; cursor: not-allowed; opacity: .5; } + +.form-switch input:disabled + .form-icon::before, .form-switch input.disabled + .form-icon::before { background: #fff; } + +.form-horizontal { padding: 0.4rem 0; } + +.form-horizontal .form-group { display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; } + +.form-inline { display: inline-block; } + +.label { border-radius: 0.1rem; line-height: 1.25; padding: .1rem .2rem; background: #f0f1f4; color: #454d5d; display: inline-block; } + +.label.label-rounded { border-radius: 5rem; padding-left: .4rem; padding-right: .4rem; } + +.label.label-primary { background: #1AA3ED; color: #fff; } + +.label.label-secondary { background: #38C5C7; color: #1AA3ED; } + +.label.label-success { background: #32b643; color: #fff; } + +.label.label-warning { background: #ffb700; color: #fff; } + +.label.label-error { background: #e85600; color: #fff; } + +code { border-radius: 0.1rem; line-height: 1.25; padding: .1rem .2rem; background: #f1f1fe; color: #7676f4; font-size: 85%; } + +.code { border-radius: 0.1rem; color: #3a414e; position: relative; } + +.code::before { color: #acb3c2; content: attr(data-lang); font-size: 0.7rem; position: absolute; right: 0.4rem; top: 0.1rem; } + +.code code { background: #f8f9fa; color: inherit; display: block; line-height: 1.5; overflow-x: auto; padding: 1rem; width: 100%; } + +.img-responsive { display: block; height: auto; max-width: 100%; } + +.img-fit-cover { object-fit: cover; } + +.img-fit-contain { object-fit: contain; } + +.video-responsive { display: block; overflow: hidden; padding: 0; position: relative; width: 100%; } + +.video-responsive::before { content: ""; display: block; padding-bottom: 56.25%; } + +.video-responsive iframe, .video-responsive object, .video-responsive embed { border: 0; bottom: 0; height: 100%; left: 0; position: absolute; right: 0; top: 0; width: 100%; } + +video.video-responsive { height: auto; max-width: 100%; } + +video.video-responsive::before { content: none; } + +.video-responsive-4-3::before { padding-bottom: 75%; } + +.video-responsive-1-1::before { padding-bottom: 100%; } + +.figure { margin: 0 0 0.4rem 0; } + +.figure .figure-caption { color: #667189; margin-top: 0.4rem; } + +.container { margin-left: auto; margin-right: auto; padding-left: 0.4rem; padding-right: 0.4rem; width: 100%; } + +.container.grid-xl { max-width: 1296px; } + +.container.grid-lg { max-width: 976px; } + +.container.grid-md { max-width: 856px; } + +.container.grid-sm { max-width: 616px; } + +.container.grid-xs { max-width: 496px; } + +.show-xs, .show-sm, .show-md, .show-lg, .show-xl { display: none !important; } + +.columns { display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; margin-left: -0.4rem; margin-right: -0.4rem; } + +.columns.col-gapless { margin-left: 0; margin-right: 0; } + +.columns.col-gapless > .column { padding-left: 0; padding-right: 0; } + +.columns.col-oneline { -ms-flex-wrap: nowrap; flex-wrap: nowrap; overflow-x: auto; } + +.column { -ms-flex: 1; flex: 1; max-width: 100%; padding-left: 0.4rem; padding-right: 0.4rem; } + +.column.col-12, .column.col-11, .column.col-10, .column.col-9, .column.col-8, .column.col-7, .column.col-6, .column.col-5, .column.col-4, .column.col-3, .column.col-2, .column.col-1, .column.col-auto { -ms-flex: none; flex: none; } + +.col-12 { width: 100%; } + +.col-11 { width: 91.66666667%; } + +.col-10 { width: 83.33333333%; } + +.col-9 { width: 75%; } + +.col-8 { width: 66.66666667%; } + +.col-7 { width: 58.33333333%; } + +.col-6 { width: 50%; } + +.col-5 { width: 41.66666667%; } + +.col-4 { width: 33.33333333%; } + +.col-3 { width: 25%; } + +.col-2 { width: 16.66666667%; } + +.col-1 { width: 8.33333333%; } + +.col-auto { -ms-flex: 0 0 auto; flex: 0 0 auto; max-width: none; width: auto; } + +.col-mx-auto { margin-left: auto; margin-right: auto; } + +.col-ml-auto { margin-left: auto; } + +.col-mr-auto { margin-right: auto; } + +@media (max-width: 1280px) { .col-xl-12, .col-xl-11, .col-xl-10, .col-xl-9, .col-xl-8, .col-xl-7, .col-xl-6, .col-xl-5, .col-xl-4, .col-xl-3, .col-xl-2, .col-xl-1, .col-xl-auto { -ms-flex: none; flex: none; } + .col-xl-12 { width: 100%; } + .col-xl-11 { width: 91.66666667%; } + .col-xl-10 { width: 83.33333333%; } + .col-xl-9 { width: 75%; } + .col-xl-8 { width: 66.66666667%; } + .col-xl-7 { width: 58.33333333%; } + .col-xl-6 { width: 50%; } + .col-xl-5 { width: 41.66666667%; } + .col-xl-4 { width: 33.33333333%; } + .col-xl-3 { width: 25%; } + .col-xl-2 { width: 16.66666667%; } + .col-xl-1 { width: 8.33333333%; } + .col-xl-auto { width: auto; } + .hide-xl { display: none !important; } + .show-xl { display: block !important; } } + +@media (max-width: 960px) { .col-lg-12, .col-lg-11, .col-lg-10, .col-lg-9, .col-lg-8, .col-lg-7, .col-lg-6, .col-lg-5, .col-lg-4, .col-lg-3, .col-lg-2, .col-lg-1, .col-lg-auto { -ms-flex: none; flex: none; } + .col-lg-12 { width: 100%; } + .col-lg-11 { width: 91.66666667%; } + .col-lg-10 { width: 83.33333333%; } + .col-lg-9 { width: 75%; } + .col-lg-8 { width: 66.66666667%; } + .col-lg-7 { width: 58.33333333%; } + .col-lg-6 { width: 50%; } + .col-lg-5 { width: 41.66666667%; } + .col-lg-4 { width: 33.33333333%; } + .col-lg-3 { width: 25%; } + .col-lg-2 { width: 16.66666667%; } + .col-lg-1 { width: 8.33333333%; } + .col-lg-auto { width: auto; } + .hide-lg { display: none !important; } + .show-lg { display: block !important; } } + +@media (max-width: 840px) { .col-md-12, .col-md-11, .col-md-10, .col-md-9, .col-md-8, .col-md-7, .col-md-6, .col-md-5, .col-md-4, .col-md-3, .col-md-2, .col-md-1, .col-md-auto { -ms-flex: none; flex: none; } + .col-md-12 { width: 100%; } + .col-md-11 { width: 91.66666667%; } + .col-md-10 { width: 83.33333333%; } + .col-md-9 { width: 75%; } + .col-md-8 { width: 66.66666667%; } + .col-md-7 { width: 58.33333333%; } + .col-md-6 { width: 50%; } + .col-md-5 { width: 41.66666667%; } + .col-md-4 { width: 33.33333333%; } + .col-md-3 { width: 25%; } + .col-md-2 { width: 16.66666667%; } + .col-md-1 { width: 8.33333333%; } + .col-md-auto { width: auto; } + .hide-md { display: none !important; } + .show-md { display: block !important; } } + +@media (max-width: 600px) { .col-sm-12, .col-sm-11, .col-sm-10, .col-sm-9, .col-sm-8, .col-sm-7, .col-sm-6, .col-sm-5, .col-sm-4, .col-sm-3, .col-sm-2, .col-sm-1, .col-sm-auto { -ms-flex: none; flex: none; } + .col-sm-12 { width: 100%; } + .col-sm-11 { width: 91.66666667%; } + .col-sm-10 { width: 83.33333333%; } + .col-sm-9 { width: 75%; } + .col-sm-8 { width: 66.66666667%; } + .col-sm-7 { width: 58.33333333%; } + .col-sm-6 { width: 50%; } + .col-sm-5 { width: 41.66666667%; } + .col-sm-4 { width: 33.33333333%; } + .col-sm-3 { width: 25%; } + .col-sm-2 { width: 16.66666667%; } + .col-sm-1 { width: 8.33333333%; } + .col-sm-auto { width: auto; } + .hide-sm { display: none !important; } + .show-sm { display: block !important; } } + +@media (max-width: 480px) { .col-xs-12, .col-xs-11, .col-xs-10, .col-xs-9, .col-xs-8, .col-xs-7, .col-xs-6, .col-xs-5, .col-xs-4, .col-xs-3, .col-xs-2, .col-xs-1, .col-xs-auto { -ms-flex: none; flex: none; } + .col-xs-12 { width: 100%; } + .col-xs-11 { width: 91.66666667%; } + .col-xs-10 { width: 83.33333333%; } + .col-xs-9 { width: 75%; } + .col-xs-8 { width: 66.66666667%; } + .col-xs-7 { width: 58.33333333%; } + .col-xs-6 { width: 50%; } + .col-xs-5 { width: 41.66666667%; } + .col-xs-4 { width: 33.33333333%; } + .col-xs-3 { width: 25%; } + .col-xs-2 { width: 16.66666667%; } + .col-xs-1 { width: 8.33333333%; } + .col-xs-auto { width: auto; } + .hide-xs { display: none !important; } + .show-xs { display: block !important; } } + +.hero { display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; -ms-flex-pack: justify; justify-content: space-between; padding-bottom: 4rem; padding-top: 4rem; } + +.hero.hero-sm { padding-bottom: 2rem; padding-top: 2rem; } + +.hero.hero-lg { padding-bottom: 8rem; padding-top: 8rem; } + +.hero .hero-body { padding: 0.4rem; } + +.navbar { -ms-flex-align: stretch; align-items: stretch; display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; -ms-flex-pack: justify; justify-content: space-between; } + +.navbar .navbar-section { -ms-flex-align: center; align-items: center; display: -ms-flexbox; display: flex; -ms-flex: 1 0 0px; flex: 1 0 0; } + +.navbar .navbar-section:not(:first-child):last-child { -ms-flex-pack: end; justify-content: flex-end; } + +.navbar .navbar-center { -ms-flex-align: center; align-items: center; display: -ms-flexbox; display: flex; -ms-flex: 0 0 auto; flex: 0 0 auto; } + +.navbar .navbar-brand { font-size: 0.9rem; text-decoration: none; } + +.accordion input:checked ~ .accordion-header .icon, .accordion[open] .accordion-header .icon { transform: rotate(90deg); } + +.accordion input:checked ~ .accordion-body, .accordion[open] .accordion-body { max-height: 50rem; } + +.accordion .accordion-header { display: block; padding: 0.2rem 0.4rem; } + +.accordion .accordion-header .icon { transition: transform .25s; } + +.accordion .accordion-body { margin-bottom: 0.4rem; max-height: 0; overflow: hidden; transition: max-height .25s; } + +summary.accordion-header::-webkit-details-marker { display: none; } + +.avatar { font-size: 0.8rem; height: 1.6rem; width: 1.6rem; background: #1AA3ED; border-radius: 50%; color: rgba(255, 255, 255, 0.85); display: inline-block; font-weight: 300; line-height: 1.25; margin: 0; position: relative; vertical-align: middle; } + +.avatar.avatar-xs { font-size: 0.4rem; height: 0.8rem; width: 0.8rem; } + +.avatar.avatar-sm { font-size: 0.6rem; height: 1.2rem; width: 1.2rem; } + +.avatar.avatar-lg { font-size: 1.2rem; height: 2.4rem; width: 2.4rem; } + +.avatar.avatar-xl { font-size: 1.6rem; height: 3.2rem; width: 3.2rem; } + +.avatar img { border-radius: 50%; height: 100%; position: relative; width: 100%; z-index: 1; } + +.avatar .avatar-icon, .avatar .avatar-presence { background: #fff; bottom: 14.64%; height: 50%; padding: 0.1rem; position: absolute; right: 14.64%; transform: translate(50%, 50%); width: 50%; z-index: 2; } + +.avatar .avatar-presence { background: #acb3c2; box-shadow: 0 0 0 0.1rem #fff; border-radius: 50%; height: .5em; width: .5em; } + +.avatar .avatar-presence.online { background: #32b643; } + +.avatar .avatar-presence.busy { background: #e85600; } + +.avatar .avatar-presence.away { background: #ffb700; } + +.avatar[data-initial]::before { color: currentColor; content: attr(data-initial); left: 50%; position: absolute; top: 50%; transform: translate(-50%, -50%); z-index: 1; } + +.badge { position: relative; white-space: nowrap; } + +.badge[data-badge]::after, .badge:not([data-badge])::after { background: #1AA3ED; background-clip: padding-box; border-radius: .5rem; box-shadow: 0 0 0 0.1rem #fff; color: #fff; content: attr(data-badge); display: inline-block; transform: translate(-0.05rem, -0.5rem); } + +.badge[data-badge]::after { font-size: 0.7rem; height: .9rem; line-height: 1; min-width: .9rem; padding: .1rem .2rem; text-align: center; white-space: nowrap; } + +.badge:not([data-badge])::after, .badge[data-badge=""]::after { height: 6px; min-width: 6px; padding: 0; width: 6px; } + +.badge.btn::after, .badge.button::after { position: absolute; top: 0; right: 0; transform: translate(50%, -50%); } + +.badge.avatar::after { position: absolute; top: 14.64%; right: 14.64%; transform: translate(50%, -50%); z-index: 100; } + +.breadcrumb { list-style: none; margin: 0.2rem 0; padding: 0.2rem 0; } + +.breadcrumb .breadcrumb-item { color: #667189; display: inline-block; margin: 0; padding: 0.2rem 0; } + +.breadcrumb .breadcrumb-item:not(:last-child) { margin-right: 0.2rem; } + +.breadcrumb .breadcrumb-item:not(:last-child) a { color: #667189; } + +.breadcrumb .breadcrumb-item:not(:first-child)::before { color: #667189; content: "/"; padding-right: 0.4rem; } + +.bar { background: #f0f1f4; border-radius: 0.1rem; display: -ms-flexbox; display: flex; -ms-flex-wrap: nowrap; flex-wrap: nowrap; height: 0.8rem; width: 100%; } + +.bar.bar-sm { height: 0.2rem; } + +.bar .bar-item { background: #1AA3ED; color: #fff; display: block; font-size: 0.7rem; -ms-flex-negative: 0; flex-shrink: 0; line-height: 0.8rem; height: 100%; position: relative; text-align: center; width: 0; } + +.bar .bar-item:first-child { border-bottom-left-radius: 0.1rem; border-top-left-radius: 0.1rem; } + +.bar .bar-item:last-child { border-bottom-right-radius: 0.1rem; border-top-right-radius: 0.1rem; -ms-flex-negative: 1; flex-shrink: 1; } + +.bar-slider { height: 0.1rem; margin: 0.4rem 0; position: relative; } + +.bar-slider .bar-item { left: 0; padding: 0; position: absolute; } + +.bar-slider .bar-item:not(:last-child):first-child { background: #f0f1f4; z-index: 1; } + +.bar-slider .bar-slider-btn { background: #1AA3ED; border: 0; border-radius: 50%; height: 0.6rem; padding: 0; position: absolute; right: 0; top: 50%; transform: translate(50%, -50%); width: 0.6rem; } + +.bar-slider .bar-slider-btn:active { box-shadow: 0 0 0 0.1rem #1AA3ED; } + +.card { background: #fff; border: 0.05rem solid #e7e9ed; border-radius: 0.1rem; display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; } + +.card .card-header, .card .card-body, .card .card-footer { padding: 0.8rem; padding-bottom: 0; } + +.card .card-header:last-child, .card .card-body:last-child, .card .card-footer:last-child { padding-bottom: 0.8rem; } + +.card .card-body { -ms-flex: 1 1 auto; flex: 1 1 auto; } + +.card .card-image { padding-top: 0.8rem; } + +.card .card-image:first-child { padding-top: 0; } + +.card .card-image:first-child img { border-top-left-radius: 0.1rem; border-top-right-radius: 0.1rem; } + +.card .card-image:last-child img { border-bottom-left-radius: 0.1rem; border-bottom-right-radius: 0.1rem; } + +.chip { -ms-flex-align: center; align-items: center; background: #f0f1f4; border-radius: 5rem; display: -ms-inline-flexbox; display: inline-flex; font-size: 90%; height: 1.2rem; line-height: 0.8rem; margin: 0.1rem; max-width: 320px; overflow: hidden; padding: 0.2rem 0.4rem; text-decoration: none; text-overflow: ellipsis; vertical-align: middle; white-space: nowrap; } + +.chip.active { background: #1AA3ED; color: #fff; } + +.chip .avatar { margin-left: -0.4rem; margin-right: 0.2rem; } + +.chip .btn-clear { border-radius: 50%; transform: scale(0.75); } + +.dropdown { display: inline-block; position: relative; } + +.dropdown .menu { animation: slide-down .15s ease 1; display: none; left: 0; max-height: 50vh; overflow-y: auto; position: absolute; top: 100%; } + +.dropdown.dropdown-right .menu { left: auto; right: 0; } + +.dropdown.active .menu, .dropdown .dropdown-toggle:focus + .menu, .dropdown .menu:hover { display: block; } + +.dropdown .btn-group .dropdown-toggle:nth-last-child(2) { border-bottom-right-radius: 0.1rem; border-top-right-radius: 0.1rem; } + +.empty { background: #f8f9fa; border-radius: 0.1rem; color: #667189; text-align: center; padding: 3.2rem 1.6rem; } + +.empty .empty-icon { margin-bottom: 0.8rem; } + +.empty .empty-title, .empty .empty-subtitle { margin: 0.4rem auto; } + +.empty .empty-action { margin-top: 0.8rem; } + +.menu { box-shadow: 0 0.05rem 0.2rem rgba(69, 77, 93, 0.3); background: #fff; border-radius: 0.1rem; list-style: none; margin: 0; min-width: 180px; padding: 0.4rem; transform: translateY(0.2rem); z-index: 300; } + +.menu.menu-nav { background: transparent; box-shadow: none; } + +.menu .menu-item { margin-top: 0; padding: 0 0.4rem; position: relative; text-decoration: none; } + +.menu .menu-item > a { border-radius: 0.1rem; color: inherit; display: block; margin: 0 -0.4rem; padding: 0.2rem 0.4rem; text-decoration: none; } + +.menu .menu-item > a:focus, .menu .menu-item > a:hover { background: #38C5C7; color: #1AA3ED; } + +.menu .menu-item > a:active, .menu .menu-item > a.active { background: #38C5C7; color: #1AA3ED; } + +.menu .menu-item .form-checkbox, .menu .menu-item .form-radio, .menu .menu-item .form-switch { margin: 0.1rem 0; } + +.menu .menu-item + .menu-item { margin-top: 0.2rem; } + +.menu .menu-badge { -ms-flex-align: center; align-items: center; display: -ms-flexbox; display: flex; height: 100%; position: absolute; right: 0; top: 0; } + +.menu .menu-badge .label { margin-right: 0.4rem; } + +.modal { -ms-flex-align: center; align-items: center; bottom: 0; display: none; -ms-flex-pack: center; justify-content: center; left: 0; opacity: 0; overflow: hidden; padding: 0.4rem; position: fixed; right: 0; top: 0; } + +.modal:target, .modal.active { display: -ms-flexbox; display: flex; opacity: 1; z-index: 400; } + +.modal:target .modal-overlay, .modal.active .modal-overlay { background: rgba(248, 249, 250, 0.75); bottom: 0; cursor: default; display: block; left: 0; position: absolute; right: 0; top: 0; } + +.modal:target .modal-container, .modal.active .modal-container { animation: slide-down .2s ease 1; z-index: 1; } + +.modal.modal-sm .modal-container { max-width: 320px; padding: 0 0.4rem; } + +.modal.modal-lg .modal-overlay { background: #fff; } + +.modal.modal-lg .modal-container { box-shadow: none; max-width: 960px; } + +.modal-container { box-shadow: 0 0.2rem 0.5rem rgba(69, 77, 93, 0.3); background: #fff; border-radius: 0.1rem; display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; max-height: 75vh; max-width: 640px; padding: 0 0.8rem; width: 100%; } + +.modal-container.modal-fullheight { max-height: 100vh; } + +.modal-container .modal-header { color: #454d5d; padding: 0.8rem; } + +.modal-container .modal-body { overflow-y: auto; padding: 0.8rem; position: relative; } + +.modal-container .modal-footer { padding: 0.8rem; text-align: right; } + +.nav { display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; list-style: none; margin: 0.2rem 0; } + +.nav .nav-item a { color: #667189; padding: 0.2rem 0.4rem; text-decoration: none; } + +.nav .nav-item a:focus, .nav .nav-item a:hover { color: #1AA3ED; } + +.nav .nav-item.active > a { color: #50596c; font-weight: bold; } + +.nav .nav-item.active > a:focus, .nav .nav-item.active > a:hover { color: #1AA3ED; } + +.nav .nav { margin-bottom: 0.4rem; margin-left: 0.8rem; } + +.pagination { display: -ms-flexbox; display: flex; list-style: none; margin: 0.2rem 0; padding: 0.2rem 0; } + +.pagination .page-item { margin: 0.2rem 0.05rem; } + +.pagination .page-item span { display: inline-block; padding: 0.2rem 0.2rem; } + +.pagination .page-item a { border-radius: 0.1rem; display: inline-block; padding: 0.2rem 0.4rem; text-decoration: none; } + +.pagination .page-item a:focus, .pagination .page-item a:hover { color: #1AA3ED; } + +.pagination .page-item.disabled a { cursor: default; opacity: .5; pointer-events: none; } + +.pagination .page-item.active a { background: #1AA3ED; color: #fff; } + +.pagination .page-item.page-prev, .pagination .page-item.page-next { -ms-flex: 1 0 50%; flex: 1 0 50%; } + +.pagination .page-item.page-next { text-align: right; } + +.pagination .page-item .page-item-title { margin: 0; } + +.pagination .page-item .page-item-subtitle { margin: 0; opacity: .5; } + +.panel { border: 0.05rem solid #e7e9ed; border-radius: 0.1rem; display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; } + +.panel .panel-header, .panel .panel-footer { -ms-flex: 0 0 auto; flex: 0 0 auto; padding: 0.8rem; } + +.panel .panel-nav { -ms-flex: 0 0 auto; flex: 0 0 auto; } + +.panel .panel-body { -ms-flex: 1 1 auto; flex: 1 1 auto; overflow-y: auto; padding: 0 0.8rem; } + +.popover { display: inline-block; position: relative; } + +.popover .popover-container { left: 50%; opacity: 0; padding: 0.4rem; position: absolute; top: 0; transform: translate(-50%, -50%) scale(0); transition: transform .2s; width: 320px; z-index: 300; } + +.popover *:focus + .popover-container, .popover:hover .popover-container { display: block; opacity: 1; transform: translate(-50%, -100%) scale(1); } + +.popover.popover-right .popover-container { left: 100%; top: 50%; } + +.popover.popover-right *:focus + .popover-container, .popover.popover-right:hover .popover-container { transform: translate(0, -50%) scale(1); } + +.popover.popover-bottom .popover-container { left: 50%; top: 100%; } + +.popover.popover-bottom *:focus + .popover-container, .popover.popover-bottom:hover .popover-container { transform: translate(-50%, 0) scale(1); } + +.popover.popover-left .popover-container { left: 0; top: 50%; } + +.popover.popover-left *:focus + .popover-container, .popover.popover-left:hover .popover-container { transform: translate(-100%, -50%) scale(1); } + +.popover .card { box-shadow: 0 0.2rem 0.5rem rgba(69, 77, 93, 0.3); border: 0; } + +.step { display: -ms-flexbox; display: flex; -ms-flex-wrap: nowrap; flex-wrap: nowrap; list-style: none; margin: 0.2rem 0; width: 100%; } + +.step .step-item { -ms-flex: 1 1 0px; flex: 1 1 0; margin-top: 0; min-height: 1rem; text-align: center; position: relative; } + +.step .step-item:not(:first-child)::before { background: #1AA3ED; content: ""; height: 2px; left: -50%; position: absolute; top: 9px; width: 100%; } + +.step .step-item a { color: #1AA3ED; display: inline-block; padding: 20px 10px 0; text-decoration: none; } + +.step .step-item a::before { background: #1AA3ED; border: 0.1rem solid #fff; border-radius: 50%; content: ""; display: block; height: 0.6rem; left: 50%; position: absolute; top: 0.2rem; transform: translateX(-50%); width: 0.6rem; z-index: 1; } + +.step .step-item.active a::before { background: #fff; border: 0.1rem solid #1AA3ED; } + +.step .step-item.active ~ .step-item::before { background: #e7e9ed; } + +.step .step-item.active ~ .step-item a { color: #acb3c2; } + +.step .step-item.active ~ .step-item a::before { background: #e7e9ed; } + +.tile { -ms-flex-line-pack: justify; align-content: space-between; -ms-flex-align: start; align-items: flex-start; display: -ms-flexbox; display: flex; } + +.tile .tile-icon, .tile .tile-action { -ms-flex: 0 0 auto; flex: 0 0 auto; } + +.tile .tile-content { -ms-flex: 1 1 auto; flex: 1 1 auto; } + +.tile .tile-content:not(:first-child) { padding-left: 0.4rem; } + +.tile .tile-content:not(:last-child) { padding-right: 0.4rem; } + +.tile .tile-title, .tile .tile-subtitle { line-height: 1.2rem; } + +.tile.tile-centered { -ms-flex-align: center; align-items: center; } + +.tile.tile-centered .tile-content { overflow: hidden; } + +.tile.tile-centered .tile-title, .tile.tile-centered .tile-subtitle { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; margin-bottom: 0; } + +.toast { background: rgba(69, 77, 93, 0.95); border-color: #454d5d; border: 0.05rem solid #454d5d; border-radius: 0.1rem; color: #fff; display: block; padding: 0.4rem; width: 100%; } + +.toast.toast-primary { background: rgba(26, 163, 237, 0.95); border-color: #1AA3ED; } + +.toast.toast-success { background: rgba(50, 182, 67, 0.95); border-color: #32b643; } + +.toast.toast-warning { background: rgba(255, 183, 0, 0.95); border-color: #ffb700; } + +.toast.toast-error { background: rgba(232, 86, 0, 0.95); border-color: #e85600; } + +.toast a { color: #fff; text-decoration: underline; } + +.toast a:focus, .toast a:hover, .toast a:active, .toast a.active { opacity: .75; } + +.toast .btn-clear { margin: 0.1rem; } + +.toast p:last-child { margin-bottom: 0; } + +.tooltip { position: relative; } + +.tooltip::after { background: rgba(69, 77, 93, 0.95); border-radius: 0.1rem; bottom: 100%; color: #fff; content: attr(data-tooltip); display: block; font-size: 0.7rem; left: 50%; max-width: 320px; opacity: 0; overflow: hidden; padding: 0.2rem 0.4rem; pointer-events: none; position: absolute; text-overflow: ellipsis; transform: translate(-50%, 0.4rem); transition: opacity .2s, transform .2s; white-space: pre; z-index: 300; } + +.tooltip:focus::after, .tooltip:hover::after { opacity: 1; transform: translate(-50%, -0.2rem); } + +.tooltip[disabled], .tooltip.disabled { pointer-events: auto; } + +.tooltip.tooltip-right::after { bottom: 50%; left: 100%; transform: translate(-0.2rem, 50%); } + +.tooltip.tooltip-right:focus::after, .tooltip.tooltip-right:hover::after { transform: translate(0.2rem, 50%); } + +.tooltip.tooltip-bottom::after { bottom: auto; top: 100%; transform: translate(-50%, -0.4rem); } + +.tooltip.tooltip-bottom:focus::after, .tooltip.tooltip-bottom:hover::after { transform: translate(-50%, 0.2rem); } + +.tooltip.tooltip-left::after { bottom: 50%; left: auto; right: 100%; transform: translate(0.4rem, 50%); } + +.tooltip.tooltip-left:focus::after, .tooltip.tooltip-left:hover::after { transform: translate(-0.2rem, 50%); } + +@keyframes loading { 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } } + +@keyframes slide-down { 0% { opacity: 0; + transform: translateY(-1.6rem); } + 100% { opacity: 1; + transform: translateY(0); } } + +.text-primary { color: #1AA3ED !important; } + +a.text-primary:focus, a.text-primary:hover { color: #1195dc; } + +a.text-primary:visited { color: #32acef; } + +.text-secondary { color: #35b9bb !important; } + +a.text-secondary:focus, a.text-secondary:hover { color: #2fa5a7; } + +a.text-secondary:visited { color: #40c7c9; } + +.text-gray { color: #acb3c2 !important; } + +a.text-gray:focus, a.text-gray:hover { color: #9ea6b7; } + +a.text-gray:visited { color: #bbc1cd; } + +.text-light { color: #fff !important; } + +a.text-light:focus, a.text-light:hover { color: #f2f2f2; } + +a.text-light:visited { color: white; } + +.text-dark { color: #3a414e !important; } + +a.text-dark:focus, a.text-dark:hover { color: #2f3540; } + +a.text-dark:visited { color: #454d5d; } + +.text-success { color: #32b643 !important; } + +a.text-success:focus, a.text-success:hover { color: #2da23c; } + +a.text-success:visited { color: #39c94b; } + +.text-warning { color: #ffb700 !important; } + +a.text-warning:focus, a.text-warning:hover { color: #e6a500; } + +a.text-warning:visited { color: #ffbe1a; } + +.text-error { color: #e85600 !important; } + +a.text-error:focus, a.text-error:hover { color: #cf4d00; } + +a.text-error:visited { color: #ff6003; } + +.bg-primary { background: #1AA3ED !important; color: #fff; } + +.bg-secondary { background: #38C5C7 !important; color: #fff; } + +.bg-dark { background: #454d5d !important; color: #fff; } + +.bg-gray { background: #f8f9fa !important; } + +.bg-success { background: #32b643 !important; color: #fff; } + +.bg-warning { background: #ffb700 !important; color: #fff; } + +.bg-error { background: #e85600 !important; color: #fff; } + +.c-hand { cursor: pointer; } + +.c-move { cursor: move; } + +.c-zoom-in { cursor: zoom-in; } + +.c-zoom-out { cursor: zoom-out; } + +.c-not-allowed { cursor: not-allowed; } + +.c-auto { cursor: auto; } + +.d-block { display: block; } + +.d-inline { display: inline; } + +.d-inline-block { display: inline-block; } + +.d-flex { display: -ms-flexbox; display: flex; } + +.d-inline-flex { display: -ms-inline-flexbox; display: inline-flex; } + +.d-none, .d-hide { display: none !important; } + +.d-visible { visibility: visible; } + +.d-invisible { visibility: hidden; } + +.text-hide { background: transparent; border: 0; color: transparent; font-size: 0; line-height: 0; text-shadow: none; } + +.text-assistive { border: 0; clip: rect(0, 0, 0, 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; } + +.divider, .divider-vert { display: block; position: relative; } + +.divider[data-content]::after, .divider-vert[data-content]::after { background: #fff; color: #acb3c2; content: attr(data-content); display: inline-block; font-size: 0.7rem; padding: 0 0.4rem; transform: translateY(-0.65rem); } + +.divider { border-top: 0.05rem solid #fefefe; height: 0.05rem; margin: 0.4rem 0; } + +.divider[data-content] { margin: 0.8rem 0; } + +.divider-vert { display: block; padding: 0.8rem; } + +.divider-vert::before { border-left: 0.05rem solid #e7e9ed; bottom: 0.4rem; content: ""; display: block; left: 50%; position: absolute; top: 0.4rem; transform: translateX(-50%); } + +.divider-vert[data-content]::after { left: 50%; padding: 0.2rem 0; position: absolute; top: 50%; transform: translate(-50%, -50%); } + +.loading { color: transparent !important; min-height: 0.8rem; pointer-events: none; position: relative; } + +.loading::after { animation: loading 500ms infinite linear; border: 0.1rem solid #1AA3ED; border-radius: 50%; border-right-color: transparent; border-top-color: transparent; content: ""; display: block; height: 0.8rem; left: 50%; margin-left: -0.4rem; margin-top: -0.4rem; position: absolute; top: 50%; width: 0.8rem; z-index: 1; } + +.loading.loading-lg { min-height: 2rem; } + +.loading.loading-lg::after { height: 1.6rem; margin-left: -0.8rem; margin-top: -0.8rem; width: 1.6rem; } + +.clearfix::after { clear: both; content: ""; display: table; } + +.float-left { float: left !important; } + +.float-right { float: right !important; } + +.p-relative { position: relative !important; } + +.p-absolute { position: absolute !important; } + +.p-fixed { position: fixed !important; } + +.p-sticky { position: -webkit-sticky !important; position: sticky !important; } + +.p-centered { display: block; float: none; margin-left: auto; margin-right: auto; } + +.flex-centered { -ms-flex-align: center; align-items: center; display: -ms-flexbox; display: flex; -ms-flex-pack: center; justify-content: center; } + +.m-0 { margin: 0 !important; } + +.mb-0 { margin-bottom: 0 !important; } + +.ml-0 { margin-left: 0 !important; } + +.mr-0 { margin-right: 0 !important; } + +.mt-0 { margin-top: 0 !important; } + +.mx-0 { margin-left: 0 !important; margin-right: 0 !important; } + +.my-0 { margin-bottom: 0 !important; margin-top: 0 !important; } + +.m-1 { margin: 0.2rem !important; } + +.mb-1 { margin-bottom: 0.2rem !important; } + +.ml-1 { margin-left: 0.2rem !important; } + +.mr-1 { margin-right: 0.2rem !important; } + +.mt-1 { margin-top: 0.2rem !important; } + +.mx-1 { margin-left: 0.2rem !important; margin-right: 0.2rem !important; } + +.my-1 { margin-bottom: 0.2rem !important; margin-top: 0.2rem !important; } + +.m-2 { margin: 0.4rem !important; } + +.mb-2 { margin-bottom: 0.4rem !important; } + +.ml-2 { margin-left: 0.4rem !important; } + +.mr-2 { margin-right: 0.4rem !important; } + +.mt-2 { margin-top: 0.4rem !important; } + +.mx-2 { margin-left: 0.4rem !important; margin-right: 0.4rem !important; } + +.my-2 { margin-bottom: 0.4rem !important; margin-top: 0.4rem !important; } + +.p-0 { padding: 0 !important; } + +.pb-0 { padding-bottom: 0 !important; } + +.pl-0 { padding-left: 0 !important; } + +.pr-0 { padding-right: 0 !important; } + +.pt-0 { padding-top: 0 !important; } + +.px-0 { padding-left: 0 !important; padding-right: 0 !important; } + +.py-0 { padding-bottom: 0 !important; padding-top: 0 !important; } + +.p-1 { padding: 0.2rem !important; } + +.pb-1 { padding-bottom: 0.2rem !important; } + +.pl-1 { padding-left: 0.2rem !important; } + +.pr-1 { padding-right: 0.2rem !important; } + +.pt-1 { padding-top: 0.2rem !important; } + +.px-1 { padding-left: 0.2rem !important; padding-right: 0.2rem !important; } + +.py-1 { padding-bottom: 0.2rem !important; padding-top: 0.2rem !important; } + +.p-2 { padding: 0.4rem !important; } + +.pb-2 { padding-bottom: 0.4rem !important; } + +.pl-2 { padding-left: 0.4rem !important; } + +.pr-2 { padding-right: 0.4rem !important; } + +.pt-2 { padding-top: 0.4rem !important; } + +.px-2 { padding-left: 0.4rem !important; padding-right: 0.4rem !important; } + +.py-2 { padding-bottom: 0.4rem !important; padding-top: 0.4rem !important; } + +.s-rounded { border-radius: 0.1rem; } + +.s-circle { border-radius: 50%; } + +.text-left { text-align: left; } + +.text-right { text-align: right; } + +.text-center { text-align: center; } + +.text-justify { text-align: justify; } + +.text-lowercase { text-transform: lowercase; } + +.text-uppercase { text-transform: uppercase; } + +.text-capitalize { text-transform: capitalize; } + +.text-normal { font-weight: normal; } + +.text-bold { font-weight: bold; } + +.text-italic { font-style: italic; } + +.text-large { font-size: 1.2em; } + +.text-ellipsis { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } + +.text-clip { overflow: hidden; text-overflow: clip; white-space: nowrap; } + +.text-break { -webkit-hyphens: auto; -ms-hyphens: auto; hyphens: auto; word-break: break-word; word-wrap: break-word; } + +.off-canvas { display: -ms-flexbox; display: flex; -ms-flex-flow: nowrap; flex-flow: nowrap; height: 100%; position: relative; width: 100%; } + +.off-canvas .off-canvas-toggle { display: block; position: absolute; top: 0.4rem; transition: none; z-index: 1; left: 0.4rem; } + +.off-canvas .off-canvas-sidebar { background: #f8f9fa; bottom: 0; min-width: 10rem; overflow-y: auto; position: fixed; top: 0; transition: transform .25s; z-index: 200; left: 0; transform: translateX(-100%); } + +.off-canvas .off-canvas-content { -ms-flex: 1 1 auto; flex: 1 1 auto; height: 100%; padding: 0.4rem 0.4rem 0.4rem 4rem; } + +.off-canvas .off-canvas-overlay { background: rgba(69, 77, 93, 0.1); border-color: transparent; border-radius: 0; bottom: 0; display: none; height: 100%; left: 0; position: fixed; right: 0; top: 0; width: 100%; } + +.off-canvas .off-canvas-sidebar:target, .off-canvas .off-canvas-sidebar.active { transform: translateX(0); } + +.off-canvas .off-canvas-sidebar:target ~ .off-canvas-overlay, .off-canvas .off-canvas-sidebar.active ~ .off-canvas-overlay { display: block; z-index: 100; } + +@media (min-width: 960px) { .off-canvas.off-canvas-sidebar-show .off-canvas-toggle { display: none; } + .off-canvas.off-canvas-sidebar-show .off-canvas-sidebar { -ms-flex: 0 0 auto; flex: 0 0 auto; position: relative; transform: none; } + .off-canvas.off-canvas-sidebar-show .off-canvas-overlay { display: none !important; } } + +/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlY3RyZS5jc3MiLCJzb3VyY2VzIjpbInNwZWN0cmUuc2NzcyIsInRoZW1lL192YXJpYWJsZXMuc2NzcyIsInNwZWN0cmUvX3ZhcmlhYmxlcy5zY3NzIiwic3BlY3RyZS9fbWl4aW5zLnNjc3MiLCJzcGVjdHJlL21peGlucy9fYXZhdGFyLnNjc3MiLCJzcGVjdHJlL21peGlucy9fYnV0dG9uLnNjc3MiLCJzcGVjdHJlL21peGlucy9fY2xlYXJmaXguc2NzcyIsInNwZWN0cmUvbWl4aW5zL19jb2xvci5zY3NzIiwic3BlY3RyZS9taXhpbnMvX2xhYmVsLnNjc3MiLCJzcGVjdHJlL21peGlucy9fcG9zaXRpb24uc2NzcyIsInNwZWN0cmUvbWl4aW5zL19zaGFkb3cuc2NzcyIsInNwZWN0cmUvbWl4aW5zL190ZXh0LnNjc3MiLCJzcGVjdHJlL21peGlucy9fdG9hc3Quc2NzcyIsInNwZWN0cmUvX25vcm1hbGl6ZS5zY3NzIiwic3BlY3RyZS9fYmFzZS5zY3NzIiwic3BlY3RyZS9fdHlwb2dyYXBoeS5zY3NzIiwic3BlY3RyZS9fYXNpYW4uc2NzcyIsInNwZWN0cmUvX3RhYmxlcy5zY3NzIiwic3BlY3RyZS9fYnV0dG9ucy5zY3NzIiwic3BlY3RyZS9fZm9ybXMuc2NzcyIsInNwZWN0cmUvX2xhYmVscy5zY3NzIiwic3BlY3RyZS9fY29kZXMuc2NzcyIsInNwZWN0cmUvX21lZGlhLnNjc3MiLCJzcGVjdHJlL19sYXlvdXQuc2NzcyIsInNwZWN0cmUvX2hlcm8uc2NzcyIsInNwZWN0cmUvX25hdmJhci5zY3NzIiwic3BlY3RyZS9fYWNjb3JkaW9ucy5zY3NzIiwic3BlY3RyZS9fYXZhdGFycy5zY3NzIiwic3BlY3RyZS9fYmFkZ2VzLnNjc3MiLCJzcGVjdHJlL19icmVhZGNydW1icy5zY3NzIiwic3BlY3RyZS9fYmFycy5zY3NzIiwic3BlY3RyZS9fY2FyZHMuc2NzcyIsInNwZWN0cmUvX2NoaXBzLnNjc3MiLCJzcGVjdHJlL19kcm9wZG93bnMuc2NzcyIsInNwZWN0cmUvX2VtcHR5LnNjc3MiLCJzcGVjdHJlL19tZW51cy5zY3NzIiwic3BlY3RyZS9fbW9kYWxzLnNjc3MiLCJzcGVjdHJlL19uYXZzLnNjc3MiLCJzcGVjdHJlL19wYWdpbmF0aW9uLnNjc3MiLCJzcGVjdHJlL19wYW5lbHMuc2NzcyIsInNwZWN0cmUvX3BvcG92ZXJzLnNjc3MiLCJzcGVjdHJlL19zdGVwcy5zY3NzIiwic3BlY3RyZS9fdGlsZXMuc2NzcyIsInNwZWN0cmUvX3RvYXN0cy5zY3NzIiwic3BlY3RyZS9fdG9vbHRpcHMuc2NzcyIsInNwZWN0cmUvX2FuaW1hdGlvbnMuc2NzcyIsInNwZWN0cmUvX3V0aWxpdGllcy5zY3NzIiwic3BlY3RyZS91dGlsaXRpZXMvX2NvbG9ycy5zY3NzIiwic3BlY3RyZS91dGlsaXRpZXMvX2N1cnNvcnMuc2NzcyIsInNwZWN0cmUvdXRpbGl0aWVzL19kaXNwbGF5LnNjc3MiLCJzcGVjdHJlL3V0aWxpdGllcy9fZGl2aWRlci5zY3NzIiwic3BlY3RyZS91dGlsaXRpZXMvX2xvYWRpbmcuc2NzcyIsInNwZWN0cmUvdXRpbGl0aWVzL19wb3NpdGlvbi5zY3NzIiwic3BlY3RyZS91dGlsaXRpZXMvX3NoYXBlcy5zY3NzIiwic3BlY3RyZS91dGlsaXRpZXMvX3RleHQuc2NzcyIsInNwZWN0cmUvX29mZi1jYW52YXMuc2NzcyIsInRoZW1lL19leHRlbnNpb25zLnNjc3MiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVmFyaWFibGVzIGFuZCBtaXhpbnNcbkBpbXBvcnQgXCJ0aGVtZS92YXJpYWJsZXNcIjtcbkBpbXBvcnQgXCJzcGVjdHJlL3ZhcmlhYmxlc1wiO1xuQGltcG9ydCBcInNwZWN0cmUvbWl4aW5zXCI7XG5cbi8qISBTcGVjdHJlLmNzcyB2I3skdmVyc2lvbn0gfCBNSVQgTGljZW5zZSB8IGdpdGh1Yi5jb20vcGljdHVyZXBhbjIvc3BlY3RyZSAqL1xuLy8gUmVzZXQgYW5kIGRlcGVuZGVuY2llc1xuQGltcG9ydCBcInNwZWN0cmUvbm9ybWFsaXplXCI7XG5AaW1wb3J0IFwic3BlY3RyZS9iYXNlXCI7XG5cbi8vIEVsZW1lbnRzXG5AaW1wb3J0IFwic3BlY3RyZS90eXBvZ3JhcGh5XCI7XG5AaW1wb3J0IFwic3BlY3RyZS9hc2lhblwiO1xuQGltcG9ydCBcInNwZWN0cmUvdGFibGVzXCI7XG5AaW1wb3J0IFwic3BlY3RyZS9idXR0b25zXCI7XG5AaW1wb3J0IFwic3BlY3RyZS9mb3Jtc1wiO1xuQGltcG9ydCBcInNwZWN0cmUvbGFiZWxzXCI7XG5AaW1wb3J0IFwic3BlY3RyZS9jb2Rlc1wiO1xuQGltcG9ydCBcInNwZWN0cmUvbWVkaWFcIjtcblxuLy8gTGF5b3V0XG5AaW1wb3J0IFwic3BlY3RyZS9sYXlvdXRcIjtcbkBpbXBvcnQgXCJzcGVjdHJlL2hlcm9cIjtcbkBpbXBvcnQgXCJzcGVjdHJlL25hdmJhclwiO1xuXG4vLyBDb21wb25lbnRzXG5AaW1wb3J0IFwic3BlY3RyZS9hY2NvcmRpb25zXCI7XG5AaW1wb3J0IFwic3BlY3RyZS9hdmF0YXJzXCI7XG5AaW1wb3J0IFwic3BlY3RyZS9iYWRnZXNcIjtcbkBpbXBvcnQgXCJzcGVjdHJlL2JyZWFkY3J1bWJzXCI7XG5AaW1wb3J0IFwic3BlY3RyZS9iYXJzXCI7XG5AaW1wb3J0IFwic3BlY3RyZS9jYXJkc1wiO1xuQGltcG9ydCBcInNwZWN0cmUvY2hpcHNcIjtcbkBpbXBvcnQgXCJzcGVjdHJlL2Ryb3Bkb3duc1wiO1xuQGltcG9ydCBcInNwZWN0cmUvZW1wdHlcIjtcbkBpbXBvcnQgXCJzcGVjdHJlL21lbnVzXCI7XG5AaW1wb3J0IFwic3BlY3RyZS9tb2RhbHNcIjtcbkBpbXBvcnQgXCJzcGVjdHJlL25hdnNcIjtcbkBpbXBvcnQgXCJzcGVjdHJlL3BhZ2luYXRpb25cIjtcbkBpbXBvcnQgXCJzcGVjdHJlL3BhbmVsc1wiO1xuQGltcG9ydCBcInNwZWN0cmUvcG9wb3ZlcnNcIjtcbkBpbXBvcnQgXCJzcGVjdHJlL3N0ZXBzXCI7XG4vL0BpbXBvcnQgXCJzcGVjdHJlL3RhYnNcIjtcbkBpbXBvcnQgXCJzcGVjdHJlL3RpbGVzXCI7XG5AaW1wb3J0IFwic3BlY3RyZS90b2FzdHNcIjtcbkBpbXBvcnQgXCJzcGVjdHJlL3Rvb2x0aXBzXCI7XG5cblxuLy8gVXRpbGl0eSBjbGFzc2VzXG5AaW1wb3J0IFwic3BlY3RyZS9hbmltYXRpb25zXCI7XG5AaW1wb3J0IFwic3BlY3RyZS91dGlsaXRpZXNcIjtcblxuLy8gRXh0cmFzXG5AaW1wb3J0IFwic3BlY3RyZS9vZmYtY2FudmFzXCI7XG5AaW1wb3J0IFwidGhlbWUvZXh0ZW5zaW9uc1wiO1xuIiwiLy8gQ29sb3JzXG4kdHVycXVvaXNlOiAjMUFCQzlDO1xuJGdyZWVuLXNlYTogIzE2QTA4NTtcbiRlbWVyYWxkOiAjMkVDQzcxO1xuJG5lcGhyaXRpczogIzI3QUU2MDtcbiRwZXRlci1yaXZlcjogIzM0OThEQjtcbiRiZWxpemVfaG9sZTogIzI5ODBCOTtcbiRkZWVwLXdlbGw6ICMyODNBNjM7XG4kbGF2ZW5kZXI6ICM3Njc2ZjQ7XG4kYW1ldGh5c3Q6ICNBNjZCQkU7XG4kd2lzdGVyaWE6ICM4RTQ0QUQ7XG4kd2V0LWFzcGhhbHQ6ICMzNDQ5NUU7XG4kbWlkbmlnaHQtYmx1ZTogIzJDM0U1MDtcbiRzdW5mbG93ZXI6ICNGMkNBMjc7XG4kb3JhbmdlOiAjRjM5QzEyO1xuJGNhcnJvdDogI0U2N0UyMjtcbiRwdW1wa2luOiAjRDM1NDAwO1xuJGFsaXphcmluOiAjRTc0QzNDO1xuJHBvbWVncmFuYXRlOiAjQzAzOTJCO1xuJGNsb3VkczogI0VDRjBGMTtcbiRzaWx2ZXI6ICNCREMzQzc7XG4kY29uY3JldGU6ICM5NUE1QTY7XG4kYXNiZXN0b3M6ICM3RjhDOEQ7XG5cbiRwcmltYXJ5LWNvbG9yOiAjMUFBM0VEICFkZWZhdWx0O1xuJHNlY29uZGFyeS1jb2xvcjogIzM4QzVDNyAhZGVmYXVsdDtcbiRkYXJrLWNvbG9yOiAjNDU0ZDVkICFkZWZhdWx0O1xuJGJvZHktZm9udC1jb2xvcjogZGFya2VuKCRkYXJrLWNvbG9yLCA1JSkgIWRlZmF1bHQ7XG4kbGluay1jb2xvcjogZGFya2VuKCRwcmltYXJ5LWNvbG9yLCA1JSkgIWRlZmF1bHQ7XG4kZ3JheS1jb2xvcjogbGlnaHRlbigkZGFyay1jb2xvciwgNDAlKSAhZGVmYXVsdDtcbiRncmF5LWNvbG9yLWRhcms6IGRhcmtlbigkZ3JheS1jb2xvciwgMjUlKSAhZGVmYXVsdDtcbiRib3JkZXItY29sb3I6IGxpZ2h0ZW4oJGRhcmstY29sb3IsIDYwJSkgIWRlZmF1bHQ7XG4kYmctY29sb3I6IGxpZ2h0ZW4oJGRhcmstY29sb3IsIDY2JSkgIWRlZmF1bHQ7XG4kY29kZS1jb2xvcjogJGxhdmVuZGVyICFkZWZhdWx0O1xuJHNlbGVjdGlvbi1jb2xvcjogI0VDRUNGRTtcblxuLy8gU2lkZWJhclxuJHNpZGViYXItd2lkdGg6IDE0cmVtO1xuJHNpZGViYXItYnJhbmQtaGVpZ2h0OiA3cmVtO1xuXG4vLyBGb250c1xuJGJhc2UtZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIHN5c3RlbS11aSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcIlNlZ29lIFVJXCIsIFJvYm90byAhZGVmYXVsdDtcbiRmYWxsYmFjay1mb250LWZhbWlseTogXCJIZWx2ZXRpY2EgTmV1ZVwiLCBzYW5zLXNlcmlmICFkZWZhdWx0O1xuJGJvZHktZm9udC1mYW1pbHk6IFwiUHVibGljIFNhbnNcIiwgICRmYWxsYmFjay1mb250LWZhbWlseSAhZGVmYXVsdDtcbiR0aXRsZS1mb250LWZhbWlseTogXCJNZXRyb3BvbGlzXCIsICRmYWxsYmFjay1mb250LWZhbWlseSAhZGVmYXVsdDtcbiRtb25vLWZvbnQtZmFtaWx5OiBcIkhhY2tcIiwgbW9ub3NwYWNlICFkZWZhdWx0O1xuJGZvbnQtc2l6ZTogLjg1cmVtICFkZWZhdWx0O1xuJG1pbi1yZXNwb25zaXZlLWZvbnQtc2l6ZTogMThweDtcbiIsIi8vIENvcmUgdmFyaWFibGVzXG4kdmVyc2lvbjogXCIwLjUuOFwiO1xuXG4vLyBDb3JlIGZlYXR1cmVzXG4kcnRsOiBmYWxzZSAhZGVmYXVsdDtcblxuLy8gQ29yZSBjb2xvcnNcbiRwcmltYXJ5LWNvbG9yOiAjNTc1NWQ5ICFkZWZhdWx0O1xuJHByaW1hcnktY29sb3ItZGFyazogZGFya2VuKCRwcmltYXJ5LWNvbG9yLCAzJSkgIWRlZmF1bHQ7XG4kcHJpbWFyeS1jb2xvci1saWdodDogbGlnaHRlbigkcHJpbWFyeS1jb2xvciwgMyUpICFkZWZhdWx0O1xuJHNlY29uZGFyeS1jb2xvcjogbGlnaHRlbigkcHJpbWFyeS1jb2xvciwgMzcuNSUpICFkZWZhdWx0O1xuJHNlY29uZGFyeS1jb2xvci1kYXJrOiBkYXJrZW4oJHNlY29uZGFyeS1jb2xvciwgMyUpICFkZWZhdWx0O1xuJHNlY29uZGFyeS1jb2xvci1saWdodDogbGlnaHRlbigkc2Vjb25kYXJ5LWNvbG9yLCAzJSkgIWRlZmF1bHQ7XG5cbi8vIEdyYXkgY29sb3JzXG4kZGFyay1jb2xvcjogIzMwMzc0MiAhZGVmYXVsdDtcbiRsaWdodC1jb2xvcjogI2ZmZiAhZGVmYXVsdDtcbiRncmF5LWNvbG9yOiBsaWdodGVuKCRkYXJrLWNvbG9yLCA1NSUpICFkZWZhdWx0O1xuJGdyYXktY29sb3ItZGFyazogZGFya2VuKCRncmF5LWNvbG9yLCAzMCUpICFkZWZhdWx0O1xuJGdyYXktY29sb3ItbGlnaHQ6IGxpZ2h0ZW4oJGdyYXktY29sb3IsIDIwJSkgIWRlZmF1bHQ7XG5cbiRib3JkZXItY29sb3I6IGxpZ2h0ZW4oJGRhcmstY29sb3IsIDY1JSkgIWRlZmF1bHQ7XG4kYm9yZGVyLWNvbG9yLWRhcms6IGRhcmtlbigkYm9yZGVyLWNvbG9yLCAxMCUpICFkZWZhdWx0O1xuJGJvcmRlci1jb2xvci1saWdodDogbGlnaHRlbigkYm9yZGVyLWNvbG9yLCA4JSkgIWRlZmF1bHQ7XG4kYmctY29sb3I6IGxpZ2h0ZW4oJGRhcmstY29sb3IsIDc1JSkgIWRlZmF1bHQ7XG4kYmctY29sb3ItZGFyazogZGFya2VuKCRiZy1jb2xvciwgMyUpICFkZWZhdWx0O1xuJGJnLWNvbG9yLWxpZ2h0OiAkbGlnaHQtY29sb3IgIWRlZmF1bHQ7XG5cbi8vIENvbnRyb2wgY29sb3JzXG4kc3VjY2Vzcy1jb2xvcjogIzMyYjY0MyAhZGVmYXVsdDtcbiR3YXJuaW5nLWNvbG9yOiAjZmZiNzAwICFkZWZhdWx0O1xuJGVycm9yLWNvbG9yOiAjZTg1NjAwICFkZWZhdWx0O1xuXG4vLyBPdGhlciBjb2xvcnNcbiRjb2RlLWNvbG9yOiAjZDczZTQ4ICFkZWZhdWx0O1xuJGhpZ2hsaWdodC1jb2xvcjogI2ZmZTliMyAhZGVmYXVsdDtcbiRib2R5LWJnOiAkYmctY29sb3ItbGlnaHQgIWRlZmF1bHQ7XG4kYm9keS1mb250LWNvbG9yOiBsaWdodGVuKCRkYXJrLWNvbG9yLCA1JSkgIWRlZmF1bHQ7XG4kbGluay1jb2xvcjogJHByaW1hcnktY29sb3IgIWRlZmF1bHQ7XG4kbGluay1jb2xvci1kYXJrOiBkYXJrZW4oJGxpbmstY29sb3IsIDEwJSkgIWRlZmF1bHQ7XG4kbGluay1jb2xvci1saWdodDogbGlnaHRlbigkbGluay1jb2xvciwgMTAlKSAhZGVmYXVsdDtcblxuLy8gRm9udHNcbi8vIENyZWRpdDogaHR0cHM6Ly93d3cuc21hc2hpbmdtYWdhemluZS5jb20vMjAxNS8xMS91c2luZy1zeXN0ZW0tdWktZm9udHMtcHJhY3RpY2FsLWd1aWRlL1xuJGJhc2UtZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIHN5c3RlbS11aSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcIlNlZ29lIFVJXCIsIFJvYm90byAhZGVmYXVsdDtcbiRtb25vLWZvbnQtZmFtaWx5OiBcIlNGIE1vbm9cIiwgXCJTZWdvZSBVSSBNb25vXCIsIFwiUm9ib3RvIE1vbm9cIiwgTWVubG8sIENvdXJpZXIsIG1vbm9zcGFjZSAhZGVmYXVsdDtcbiRmYWxsYmFjay1mb250LWZhbWlseTogXCJIZWx2ZXRpY2EgTmV1ZVwiLCBzYW5zLXNlcmlmICFkZWZhdWx0O1xuJGNqay16aC1oYW5zLWZvbnQtZmFtaWx5OiAkYmFzZS1mb250LWZhbWlseSwgXCJQaW5nRmFuZyBTQ1wiLCBcIkhpcmFnaW5vIFNhbnMgR0JcIiwgXCJNaWNyb3NvZnQgWWFIZWlcIiwgJGZhbGxiYWNrLWZvbnQtZmFtaWx5ICFkZWZhdWx0O1xuJGNqay16aC1oYW50LWZvbnQtZmFtaWx5OiAkYmFzZS1mb250LWZhbWlseSwgXCJQaW5nRmFuZyBUQ1wiLCBcIkhpcmFnaW5vIFNhbnMgQ05TXCIsIFwiTWljcm9zb2Z0IEpoZW5nSGVpXCIsICRmYWxsYmFjay1mb250LWZhbWlseSAhZGVmYXVsdDtcbiRjamstanAtZm9udC1mYW1pbHk6ICRiYXNlLWZvbnQtZmFtaWx5LCBcIkhpcmFnaW5vIFNhbnNcIiwgXCJIaXJhZ2lubyBLYWt1IEdvdGhpYyBQcm9cIiwgXCJZdSBHb3RoaWNcIiwgWXVHb3RoaWMsIE1laXJ5bywgJGZhbGxiYWNrLWZvbnQtZmFtaWx5ICFkZWZhdWx0O1xuJGNqay1rby1mb250LWZhbWlseTogJGJhc2UtZm9udC1mYW1pbHksIFwiTWFsZ3VuIEdvdGhpY1wiLCAkZmFsbGJhY2stZm9udC1mYW1pbHkgIWRlZmF1bHQ7XG4kYm9keS1mb250LWZhbWlseTogJGJhc2UtZm9udC1mYW1pbHksICRmYWxsYmFjay1mb250LWZhbWlseSAhZGVmYXVsdDtcblxuLy8gVW5pdCBzaXplc1xuJHVuaXQtbzogLjA1cmVtICFkZWZhdWx0O1xuJHVuaXQtaDogLjFyZW0gIWRlZmF1bHQ7XG4kdW5pdC0xOiAuMnJlbSAhZGVmYXVsdDtcbiR1bml0LTI6IC40cmVtICFkZWZhdWx0O1xuJHVuaXQtMzogLjZyZW0gIWRlZmF1bHQ7XG4kdW5pdC00OiAuOHJlbSAhZGVmYXVsdDtcbiR1bml0LTU6IDFyZW0gIWRlZmF1bHQ7XG4kdW5pdC02OiAxLjJyZW0gIWRlZmF1bHQ7XG4kdW5pdC03OiAxLjRyZW0gIWRlZmF1bHQ7XG4kdW5pdC04OiAxLjZyZW0gIWRlZmF1bHQ7XG4kdW5pdC05OiAxLjhyZW0gIWRlZmF1bHQ7XG4kdW5pdC0xMDogMnJlbSAhZGVmYXVsdDtcbiR1bml0LTEyOiAyLjRyZW0gIWRlZmF1bHQ7XG4kdW5pdC0xNjogMy4ycmVtICFkZWZhdWx0O1xuXG4vLyBGb250IHNpemVzXG4kaHRtbC1mb250LXNpemU6IDIwcHggIWRlZmF1bHQ7XG4kaHRtbC1saW5lLWhlaWdodDogMS41ICFkZWZhdWx0O1xuJGZvbnQtc2l6ZTogLjhyZW0gIWRlZmF1bHQ7XG4kZm9udC1zaXplLXNtOiAuN3JlbSAhZGVmYXVsdDtcbiRmb250LXNpemUtbGc6IC45cmVtICFkZWZhdWx0O1xuJGxpbmUtaGVpZ2h0OiAxLjJyZW0gIWRlZmF1bHQ7XG5cbi8vIFNpemVzXG4kbGF5b3V0LXNwYWNpbmc6ICR1bml0LTIgIWRlZmF1bHQ7XG4kbGF5b3V0LXNwYWNpbmctc206ICR1bml0LTEgIWRlZmF1bHQ7XG4kbGF5b3V0LXNwYWNpbmctbGc6ICR1bml0LTQgIWRlZmF1bHQ7XG4kYm9yZGVyLXJhZGl1czogJHVuaXQtaCAhZGVmYXVsdDtcbiRib3JkZXItd2lkdGg6ICR1bml0LW8gIWRlZmF1bHQ7XG4kYm9yZGVyLXdpZHRoLWxnOiAkdW5pdC1oICFkZWZhdWx0O1xuJGNvbnRyb2wtc2l6ZTogJHVuaXQtOSAhZGVmYXVsdDtcbiRjb250cm9sLXNpemUtc206ICR1bml0LTcgIWRlZmF1bHQ7XG4kY29udHJvbC1zaXplLWxnOiAkdW5pdC0xMCAhZGVmYXVsdDtcbiRjb250cm9sLXBhZGRpbmcteDogJHVuaXQtMiAhZGVmYXVsdDtcbiRjb250cm9sLXBhZGRpbmcteC1zbTogJHVuaXQtMiAqIC43NSAhZGVmYXVsdDtcbiRjb250cm9sLXBhZGRpbmcteC1sZzogJHVuaXQtMiAqIDEuNSAhZGVmYXVsdDtcbiRjb250cm9sLXBhZGRpbmcteTogKCRjb250cm9sLXNpemUgLSAkbGluZS1oZWlnaHQpIC8gMiAtICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XG4kY29udHJvbC1wYWRkaW5nLXktc206ICgkY29udHJvbC1zaXplLXNtIC0gJGxpbmUtaGVpZ2h0KSAvIDIgLSAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xuJGNvbnRyb2wtcGFkZGluZy15LWxnOiAoJGNvbnRyb2wtc2l6ZS1sZyAtICRsaW5lLWhlaWdodCkgLyAyIC0gJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcbiRjb250cm9sLWljb24tc2l6ZTogLjhyZW0gIWRlZmF1bHQ7XG5cbiRjb250cm9sLXdpZHRoLXhzOiAxODBweCAhZGVmYXVsdDtcbiRjb250cm9sLXdpZHRoLXNtOiAzMjBweCAhZGVmYXVsdDtcbiRjb250cm9sLXdpZHRoLW1kOiA2NDBweCAhZGVmYXVsdDtcbiRjb250cm9sLXdpZHRoLWxnOiA5NjBweCAhZGVmYXVsdDtcbiRjb250cm9sLXdpZHRoLXhsOiAxMjgwcHggIWRlZmF1bHQ7XG5cbi8vIFJlc3BvbnNpdmUgYnJlYWtwb2ludHNcbiRzaXplLXhzOiA0ODBweCAhZGVmYXVsdDtcbiRzaXplLXNtOiA2MDBweCAhZGVmYXVsdDtcbiRzaXplLW1kOiA4NDBweCAhZGVmYXVsdDtcbiRzaXplLWxnOiA5NjBweCAhZGVmYXVsdDtcbiRzaXplLXhsOiAxMjgwcHggIWRlZmF1bHQ7XG4kc2l6ZS0yeDogMTQ0MHB4ICFkZWZhdWx0O1xuXG4kcmVzcG9uc2l2ZS1icmVha3BvaW50OiAkc2l6ZS14cyAhZGVmYXVsdDtcblxuLy8gWi1pbmRleFxuJHppbmRleC0wOiAxICFkZWZhdWx0O1xuJHppbmRleC0xOiAxMDAgIWRlZmF1bHQ7XG4kemluZGV4LTI6IDIwMCAhZGVmYXVsdDtcbiR6aW5kZXgtMzogMzAwICFkZWZhdWx0O1xuJHppbmRleC00OiA0MDAgIWRlZmF1bHQ7XG4iLCIvLyBNaXhpbnNcbkBpbXBvcnQgXCJtaXhpbnMvYXZhdGFyXCI7XG5AaW1wb3J0IFwibWl4aW5zL2J1dHRvblwiO1xuQGltcG9ydCBcIm1peGlucy9jbGVhcmZpeFwiO1xuQGltcG9ydCBcIm1peGlucy9jb2xvclwiO1xuQGltcG9ydCBcIm1peGlucy9sYWJlbFwiO1xuQGltcG9ydCBcIm1peGlucy9wb3NpdGlvblwiO1xuQGltcG9ydCBcIm1peGlucy9zaGFkb3dcIjtcbkBpbXBvcnQgXCJtaXhpbnMvdGV4dFwiO1xuQGltcG9ydCBcIm1peGlucy90b2FzdFwiOyIsIi8vIEF2YXRhciBtaXhpblxuQG1peGluIGF2YXRhci1iYXNlKCRzaXplOiAkdW5pdC04KSB7XG4gIGZvbnQtc2l6ZTogJHNpemUgLyAyO1xuICBoZWlnaHQ6ICRzaXplO1xuICB3aWR0aDogJHNpemU7XG59XG4iLCIvLyBCdXR0b24gdmFyaWFudCBtaXhpblxuQG1peGluIGJ1dHRvbi12YXJpYW50KCRjb2xvcjogJHByaW1hcnktY29sb3IpIHtcbiAgYmFja2dyb3VuZDogJGNvbG9yO1xuICBib3JkZXItY29sb3I6IGRhcmtlbigkY29sb3IsIDMlKTtcbiAgY29sb3I6ICRsaWdodC1jb2xvcjtcbiAgJjpmb2N1cyB7XG4gICAgQGluY2x1ZGUgY29udHJvbC1zaGFkb3coJGNvbG9yKTtcbiAgfVxuICAmOmZvY3VzLFxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiBkYXJrZW4oJGNvbG9yLCAyJSk7XG4gICAgYm9yZGVyLWNvbG9yOiBkYXJrZW4oJGNvbG9yLCA1JSk7XG4gICAgY29sb3I6ICRsaWdodC1jb2xvcjtcbiAgfVxuICAmOmFjdGl2ZSxcbiAgJi5hY3RpdmUge1xuICAgIGJhY2tncm91bmQ6IGRhcmtlbigkY29sb3IsIDclKTtcbiAgICBib3JkZXItY29sb3I6IGRhcmtlbigkY29sb3IsIDEwJSk7XG4gICAgY29sb3I6ICRsaWdodC1jb2xvcjtcbiAgfVxuICAmLmxvYWRpbmcge1xuICAgICY6OmFmdGVyIHtcbiAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICRsaWdodC1jb2xvcjtcbiAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAkbGlnaHQtY29sb3I7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBidXR0b24tb3V0bGluZS12YXJpYW50KCRjb2xvcjogJHByaW1hcnktY29sb3IpIHtcbiAgYmFja2dyb3VuZDogJGxpZ2h0LWNvbG9yO1xuICBib3JkZXItY29sb3I6ICRjb2xvcjtcbiAgY29sb3I6ICRjb2xvcjtcbiAgJjpmb2N1cyB7XG4gICAgQGluY2x1ZGUgY29udHJvbC1zaGFkb3coJGNvbG9yKTtcbiAgfVxuICAmOmZvY3VzLFxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiBsaWdodGVuKCRjb2xvciwgNTAlKTtcbiAgICBib3JkZXItY29sb3I6IGRhcmtlbigkY29sb3IsIDIlKTtcbiAgICBjb2xvcjogJGNvbG9yO1xuICB9XG4gICY6YWN0aXZlLFxuICAmLmFjdGl2ZSB7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yO1xuICAgIGJvcmRlci1jb2xvcjogZGFya2VuKCRjb2xvciwgNSUpO1xuICAgIGNvbG9yOiAkbGlnaHQtY29sb3I7XG4gIH1cbiAgJi5sb2FkaW5nIHtcbiAgICAmOjphZnRlciB7XG4gICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAkY29sb3I7XG4gICAgICBib3JkZXItbGVmdC1jb2xvcjogJGNvbG9yO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ2xlYXJmaXggbWl4aW5cbkBtaXhpbiBjbGVhcmZpeCgpIHtcbiAgJjo6YWZ0ZXIge1xuICAgIGNsZWFyOiBib3RoO1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgZGlzcGxheTogdGFibGU7XG4gIH1cbn1cbiIsIi8vIEJhY2tncm91bmQgY29sb3IgdXRpbGl0eSBtaXhpblxuQG1peGluIGJnLWNvbG9yLXZhcmlhbnQoJG5hbWU6IFwiLmJnLXByaW1hcnlcIiwgJGNvbG9yOiAkcHJpbWFyeS1jb2xvcikge1xuICAjeyRuYW1lfSB7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yICFpbXBvcnRhbnQ7XG5cbiAgICBAaWYgKGxpZ2h0bmVzcygkY29sb3IpIDwgNjApIHtcbiAgICAgIGNvbG9yOiAkbGlnaHQtY29sb3I7XG4gICAgfVxuICB9XG59XG5cbi8vIFRleHQgY29sb3IgdXRpbGl0eSBtaXhpblxuQG1peGluIHRleHQtY29sb3ItdmFyaWFudCgkbmFtZTogXCIudGV4dC1wcmltYXJ5XCIsICRjb2xvcjogJHByaW1hcnktY29sb3IpIHtcbiAgI3skbmFtZX0ge1xuICAgIGNvbG9yOiAkY29sb3IgIWltcG9ydGFudDtcbiAgfVxuXG4gIGEjeyRuYW1lfSB7XG4gICAgJjpmb2N1cyxcbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiBkYXJrZW4oJGNvbG9yLCA1JSk7XG4gICAgfVxuICAgICY6dmlzaXRlZCB7XG4gICAgICBjb2xvcjogbGlnaHRlbigkY29sb3IsIDUlKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIExhYmVsIGJhc2Ugc3R5bGVcbkBtaXhpbiBsYWJlbC1iYXNlKCkge1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgbGluZS1oZWlnaHQ6IDEuMjU7XG4gIHBhZGRpbmc6IC4xcmVtIC4ycmVtO1xufVxuXG5AbWl4aW4gbGFiZWwtdmFyaWFudCgkY29sb3I6ICRsaWdodC1jb2xvciwgJGJnLWNvbG9yOiAkcHJpbWFyeS1jb2xvcikge1xuICBiYWNrZ3JvdW5kOiAkYmctY29sb3I7XG4gIGNvbG9yOiAkY29sb3I7XG59XG4iLCIvLyBNYXJnaW4gdXRpbGl0eSBtaXhpblxuQG1peGluIG1hcmdpbi12YXJpYW50KCRpZDogMSwgJHNpemU6ICR1bml0LTEpIHtcbiAgLm0tI3skaWR9IHtcbiAgICBtYXJnaW46ICRzaXplICFpbXBvcnRhbnQ7XG4gIH1cblxuICAubWItI3skaWR9IHtcbiAgICBtYXJnaW4tYm90dG9tOiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG5cbiAgLm1sLSN7JGlkfSB7XG4gICAgbWFyZ2luLWxlZnQ6ICRzaXplICFpbXBvcnRhbnQ7XG4gIH1cblxuICAubXItI3skaWR9IHtcbiAgICBtYXJnaW4tcmlnaHQ6ICRzaXplICFpbXBvcnRhbnQ7XG4gIH1cblxuICAubXQtI3skaWR9IHtcbiAgICBtYXJnaW4tdG9wOiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG5cbiAgLm14LSN7JGlkfSB7XG4gICAgbWFyZ2luLWxlZnQ6ICRzaXplICFpbXBvcnRhbnQ7XG4gICAgbWFyZ2luLXJpZ2h0OiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG5cbiAgLm15LSN7JGlkfSB7XG4gICAgbWFyZ2luLWJvdHRvbTogJHNpemUgIWltcG9ydGFudDtcbiAgICBtYXJnaW4tdG9wOiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG59XG5cbi8vIFBhZGRpbmcgdXRpbGl0eSBtaXhpblxuQG1peGluIHBhZGRpbmctdmFyaWFudCgkaWQ6IDEsICRzaXplOiAkdW5pdC0xKSB7XG4gIC5wLSN7JGlkfSB7XG4gICAgcGFkZGluZzogJHNpemUgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5wYi0jeyRpZH0ge1xuICAgIHBhZGRpbmctYm90dG9tOiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG5cbiAgLnBsLSN7JGlkfSB7XG4gICAgcGFkZGluZy1sZWZ0OiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG5cbiAgLnByLSN7JGlkfSB7XG4gICAgcGFkZGluZy1yaWdodDogJHNpemUgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5wdC0jeyRpZH0ge1xuICAgIHBhZGRpbmctdG9wOiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG5cbiAgLnB4LSN7JGlkfSB7XG4gICAgcGFkZGluZy1sZWZ0OiAkc2l6ZSAhaW1wb3J0YW50O1xuICAgIHBhZGRpbmctcmlnaHQ6ICRzaXplICFpbXBvcnRhbnQ7XG4gIH1cbiAgXG4gIC5weS0jeyRpZH0ge1xuICAgIHBhZGRpbmctYm90dG9tOiAkc2l6ZSAhaW1wb3J0YW50O1xuICAgIHBhZGRpbmctdG9wOiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG59XG4iLCIvLyBDb21wb25lbnQgZm9jdXMgc2hhZG93XG5AbWl4aW4gY29udHJvbC1zaGFkb3coJGNvbG9yOiAkcHJpbWFyeS1jb2xvcikge1xuICBib3gtc2hhZG93OiAwIDAgMCAuMXJlbSByZ2JhKCRjb2xvciwgLjIpO1xufVxuXG4vLyBTaGFkb3cgbWl4aW5cbkBtaXhpbiBzaGFkb3ctdmFyaWFudCgkb2Zmc2V0KSB7XG4gIGJveC1zaGFkb3c6IDAgJG9mZnNldCAoJG9mZnNldCArIC4wNXJlbSkgKiAyIHJnYmEoJGRhcmstY29sb3IsIC4zKTtcbn1cbiIsIi8vIFRleHQgRWxsaXBzaXNcbkBtaXhpbiB0ZXh0LWVsbGlwc2lzKCkge1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cbiIsIi8vIFRvYXN0IHZhcmlhbnQgbWl4aW5cbkBtaXhpbiB0b2FzdC12YXJpYW50KCRjb2xvcjogJGRhcmstY29sb3IpIHtcbiAgYmFja2dyb3VuZDogcmdiYSgkY29sb3IsIC45NSk7XG4gIGJvcmRlci1jb2xvcjogJGNvbG9yO1xufVxuIiwiLyogTWFudWFsbHkgZm9ya2VkIGZyb20gTm9ybWFsaXplLmNzcyAqL1xuLyogbm9ybWFsaXplLmNzcyB2NS4wLjAgfCBNSVQgTGljZW5zZSB8IGdpdGh1Yi5jb20vbmVjb2xhcy9ub3JtYWxpemUuY3NzICovXG5cbi8qKlxuICogMS4gQ2hhbmdlIHRoZSBkZWZhdWx0IGZvbnQgZmFtaWx5IGluIGFsbCBicm93c2VycyAob3BpbmlvbmF0ZWQpLlxuICogMi4gQ29ycmVjdCB0aGUgbGluZSBoZWlnaHQgaW4gYWxsIGJyb3dzZXJzLlxuICogMy4gUHJldmVudCBhZGp1c3RtZW50cyBvZiBmb250IHNpemUgYWZ0ZXIgb3JpZW50YXRpb24gY2hhbmdlcyBpblxuICogICAgSUUgb24gV2luZG93cyBQaG9uZSBhbmQgaW4gaU9TLlxuICovXG5cbi8qIERvY3VtZW50XG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG5odG1sIHtcbiAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7IC8qIDEgKi9cbiAgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC8qIDMgKi9cbiAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAvKiAzICovXG59XG5cbi8qIFNlY3Rpb25zXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKipcbiAqIFJlbW92ZSB0aGUgbWFyZ2luIGluIGFsbCBicm93c2VycyAob3BpbmlvbmF0ZWQpLlxuICovXG5cbmJvZHkge1xuICBtYXJnaW46IDA7XG59XG5cbi8qKlxuICogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUgOS0uXG4gKi9cblxuYXJ0aWNsZSxcbmFzaWRlLFxuZm9vdGVyLFxuaGVhZGVyLFxubmF2LFxuc2VjdGlvbiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4vKipcbiAqIENvcnJlY3QgdGhlIGZvbnQgc2l6ZSBhbmQgbWFyZ2luIG9uIGBoMWAgZWxlbWVudHMgd2l0aGluIGBzZWN0aW9uYCBhbmRcbiAqIGBhcnRpY2xlYCBjb250ZXh0cyBpbiBDaHJvbWUsIEZpcmVmb3gsIGFuZCBTYWZhcmkuXG4gKi9cblxuaDEge1xuICBmb250LXNpemU6IDJlbTtcbiAgbWFyZ2luOiAwLjY3ZW0gMDtcbn1cblxuLyogR3JvdXBpbmcgY29udGVudFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyoqXG4gKiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBJRSA5LS5cbiAqIDEuIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIElFLlxuICovXG5cbmZpZ2NhcHRpb24sXG5maWd1cmUsXG5tYWluIHsgLyogMSAqL1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLyoqXG4gKiBBZGQgdGhlIGNvcnJlY3QgbWFyZ2luIGluIElFIDggKHJlbW92ZWQpLlxuICovXG5cbi8qKlxuICogMS4gQWRkIHRoZSBjb3JyZWN0IGJveCBzaXppbmcgaW4gRmlyZWZveC5cbiAqIDIuIFNob3cgdGhlIG92ZXJmbG93IGluIEVkZ2UgYW5kIElFLlxuICovXG5cbmhyIHtcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7IC8qIDEgKi9cbiAgaGVpZ2h0OiAwOyAvKiAxICovXG4gIG92ZXJmbG93OiB2aXNpYmxlOyAvKiAyICovXG59XG5cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgaW5oZXJpdGFuY2UgYW5kIHNjYWxpbmcgb2YgZm9udCBzaXplIGluIGFsbCBicm93c2Vycy4gKHJlbW92ZWQpXG4gKiAyLiBDb3JyZWN0IHRoZSBvZGQgYGVtYCBmb250IHNpemluZyBpbiBhbGwgYnJvd3NlcnMuXG4gKi9cblxuLyogVGV4dC1sZXZlbCBzZW1hbnRpY3NcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qKlxuICogMS4gUmVtb3ZlIHRoZSBncmF5IGJhY2tncm91bmQgb24gYWN0aXZlIGxpbmtzIGluIElFIDEwLlxuICogMi4gUmVtb3ZlIGdhcHMgaW4gbGlua3MgdW5kZXJsaW5lIGluIGlPUyA4KyBhbmQgU2FmYXJpIDgrLlxuICovXG5cbmEge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgLyogMSAqL1xuICAtd2Via2l0LXRleHQtZGVjb3JhdGlvbi1za2lwOiBvYmplY3RzOyAvKiAyICovXG59XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBvdXRsaW5lIG9uIGZvY3VzZWQgbGlua3Mgd2hlbiB0aGV5IGFyZSBhbHNvIGFjdGl2ZSBvciBob3ZlcmVkXG4gKiBpbiBhbGwgYnJvd3NlcnMgKG9waW5pb25hdGVkKS5cbiAqL1xuXG5hOmFjdGl2ZSxcbmE6aG92ZXIge1xuICBvdXRsaW5lLXdpZHRoOiAwO1xufVxuXG4vKipcbiAqIE1vZGlmeSBkZWZhdWx0IHN0eWxpbmcgb2YgYWRkcmVzcy5cbiAqL1xuXG5hZGRyZXNzIHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xufVxuXG4vKipcbiAqIDEuIFJlbW92ZSB0aGUgYm90dG9tIGJvcmRlciBpbiBGaXJlZm94IDM5LS5cbiAqIDIuIEFkZCB0aGUgY29ycmVjdCB0ZXh0IGRlY29yYXRpb24gaW4gQ2hyb21lLCBFZGdlLCBJRSwgT3BlcmEsIGFuZCBTYWZhcmkuIChyZW1vdmVkKVxuICovXG5cbi8qKlxuICogUHJldmVudCB0aGUgZHVwbGljYXRlIGFwcGxpY2F0aW9uIG9mIGBib2xkZXJgIGJ5IHRoZSBuZXh0IHJ1bGUgaW4gU2FmYXJpIDYuXG4gKi9cblxuYixcbnN0cm9uZyB7XG4gIGZvbnQtd2VpZ2h0OiBpbmhlcml0O1xufVxuXG4vKipcbiAqIEFkZCB0aGUgY29ycmVjdCBmb250IHdlaWdodCBpbiBDaHJvbWUsIEVkZ2UsIGFuZCBTYWZhcmkuXG4gKi9cblxuYixcbnN0cm9uZyB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkZXI7XG59XG5cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgaW5oZXJpdGFuY2UgYW5kIHNjYWxpbmcgb2YgZm9udCBzaXplIGluIGFsbCBicm93c2Vycy5cbiAqIDIuIENvcnJlY3QgdGhlIG9kZCBgZW1gIGZvbnQgc2l6aW5nIGluIGFsbCBicm93c2Vycy5cbiAqL1xuXG5jb2RlLFxua2JkLFxucHJlLFxuc2FtcCB7XG4gIGZvbnQtZmFtaWx5OiAkbW9uby1mb250LWZhbWlseTsgLyogMSAoY2hhbmdlZCkgKi9cbiAgZm9udC1zaXplOiAxZW07IC8qIDIgKi9cbn1cblxuLyoqXG4gKiBBZGQgdGhlIGNvcnJlY3QgZm9udCBzdHlsZSBpbiBBbmRyb2lkIDQuMy0uXG4gKi9cblxuZGZuIHtcbiAgZm9udC1zdHlsZTogaXRhbGljO1xufVxuXG4vKipcbiAqIEFkZCB0aGUgY29ycmVjdCBiYWNrZ3JvdW5kIGFuZCBjb2xvciBpbiBJRSA5LS4gKFJlbW92ZWQpXG4gKi9cblxuLyoqXG4gKiBBZGQgdGhlIGNvcnJlY3QgZm9udCBzaXplIGluIGFsbCBicm93c2Vycy5cbiAqL1xuXG5zbWFsbCB7XG4gIGZvbnQtc2l6ZTogODAlO1xuICBmb250LXdlaWdodDogNDAwOyAvKiAoYWRkZWQpICovXG59XG5cbi8qKlxuICogUHJldmVudCBgc3ViYCBhbmQgYHN1cGAgZWxlbWVudHMgZnJvbSBhZmZlY3RpbmcgdGhlIGxpbmUgaGVpZ2h0IGluXG4gKiBhbGwgYnJvd3NlcnMuXG4gKi9cblxuc3ViLFxuc3VwIHtcbiAgZm9udC1zaXplOiA3NSU7XG4gIGxpbmUtaGVpZ2h0OiAwO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbn1cblxuc3ViIHtcbiAgYm90dG9tOiAtMC4yNWVtO1xufVxuXG5zdXAge1xuICB0b3A6IC0wLjVlbTtcbn1cblxuLyogRW1iZWRkZWQgY29udGVudFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyoqXG4gKiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBJRSA5LS5cbiAqL1xuXG5hdWRpbyxcbnZpZGVvIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuXG4vKipcbiAqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIGlPUyA0LTcuXG4gKi9cblxuYXVkaW86bm90KFtjb250cm9sc10pIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgaGVpZ2h0OiAwO1xufVxuXG4vKipcbiAqIFJlbW92ZSB0aGUgYm9yZGVyIG9uIGltYWdlcyBpbnNpZGUgbGlua3MgaW4gSUUgMTAtLlxuICovXG5cbmltZyB7XG4gIGJvcmRlci1zdHlsZTogbm9uZTtcbn1cblxuLyoqXG4gKiBIaWRlIHRoZSBvdmVyZmxvdyBpbiBJRS5cbiAqL1xuXG5zdmc6bm90KDpyb290KSB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi8qIEZvcm1zXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKipcbiAqIDEuIENoYW5nZSB0aGUgZm9udCBzdHlsZXMgaW4gYWxsIGJyb3dzZXJzIChvcGluaW9uYXRlZCkuXG4gKiAyLiBSZW1vdmUgdGhlIG1hcmdpbiBpbiBGaXJlZm94IGFuZCBTYWZhcmkuXG4gKi9cblxuYnV0dG9uLFxuaW5wdXQsXG5vcHRncm91cCxcbnNlbGVjdCxcbnRleHRhcmVhIHtcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7IC8qIDEgKGNoYW5nZWQpICovXG4gIGZvbnQtc2l6ZTogaW5oZXJpdDsgLyogMSAoY2hhbmdlZCkgKi9cbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7IC8qIDEgKGNoYW5nZWQpICovXG4gIG1hcmdpbjogMDsgLyogMiAqL1xufVxuXG4vKipcbiAqIFNob3cgdGhlIG92ZXJmbG93IGluIElFLlxuICogMS4gU2hvdyB0aGUgb3ZlcmZsb3cgaW4gRWRnZS5cbiAqL1xuXG5idXR0b24sXG5pbnB1dCB7IC8qIDEgKi9cbiAgb3ZlcmZsb3c6IHZpc2libGU7XG59XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBpbmhlcml0YW5jZSBvZiB0ZXh0IHRyYW5zZm9ybSBpbiBFZGdlLCBGaXJlZm94LCBhbmQgSUUuXG4gKiAxLiBSZW1vdmUgdGhlIGluaGVyaXRhbmNlIG9mIHRleHQgdHJhbnNmb3JtIGluIEZpcmVmb3guXG4gKi9cblxuYnV0dG9uLFxuc2VsZWN0IHsgLyogMSAqL1xuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbn1cblxuLyoqXG4gKiAxLiBQcmV2ZW50IGEgV2ViS2l0IGJ1ZyB3aGVyZSAoMikgZGVzdHJveXMgbmF0aXZlIGBhdWRpb2AgYW5kIGB2aWRlb2BcbiAqICAgIGNvbnRyb2xzIGluIEFuZHJvaWQgNC5cbiAqIDIuIENvcnJlY3QgdGhlIGluYWJpbGl0eSB0byBzdHlsZSBjbGlja2FibGUgdHlwZXMgaW4gaU9TIGFuZCBTYWZhcmkuXG4gKi9cblxuYnV0dG9uLFxuaHRtbCBbdHlwZT1cImJ1dHRvblwiXSwgLyogMSAqL1xuW3R5cGU9XCJyZXNldFwiXSxcblt0eXBlPVwic3VibWl0XCJdIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247IC8qIDIgKi9cbn1cblxuLyoqXG4gKiBSZW1vdmUgdGhlIGlubmVyIGJvcmRlciBhbmQgcGFkZGluZyBpbiBGaXJlZm94LlxuICovXG5cbmJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcixcblt0eXBlPVwiYnV0dG9uXCJdOjotbW96LWZvY3VzLWlubmVyLFxuW3R5cGU9XCJyZXNldFwiXTo6LW1vei1mb2N1cy1pbm5lcixcblt0eXBlPVwic3VibWl0XCJdOjotbW96LWZvY3VzLWlubmVyIHtcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xuICBwYWRkaW5nOiAwO1xufVxuXG4vKipcbiAqIFJlc3RvcmUgdGhlIGZvY3VzIHN0eWxlcyB1bnNldCBieSB0aGUgcHJldmlvdXMgcnVsZSAocmVtb3ZlZCkuXG4gKi9cblxuXG4vKipcbiAqIENoYW5nZSB0aGUgYm9yZGVyLCBtYXJnaW4sIGFuZCBwYWRkaW5nIGluIGFsbCBicm93c2VycyAob3BpbmlvbmF0ZWQpIChjaGFuZ2VkKS5cbiAqL1xuXG5maWVsZHNldCB7XG4gIGJvcmRlcjogMDtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xufVxuXG4vKipcbiAqIDEuIENvcnJlY3QgdGhlIHRleHQgd3JhcHBpbmcgaW4gRWRnZSBhbmQgSUUuXG4gKiAyLiBDb3JyZWN0IHRoZSBjb2xvciBpbmhlcml0YW5jZSBmcm9tIGBmaWVsZHNldGAgZWxlbWVudHMgaW4gSUUuXG4gKiAzLiBSZW1vdmUgdGhlIHBhZGRpbmcgc28gZGV2ZWxvcGVycyBhcmUgbm90IGNhdWdodCBvdXQgd2hlbiB0aGV5IHplcm8gb3V0XG4gKiAgICBgZmllbGRzZXRgIGVsZW1lbnRzIGluIGFsbCBicm93c2Vycy5cbiAqL1xuXG5sZWdlbmQge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94OyAvKiAxICovXG4gIGNvbG9yOiBpbmhlcml0OyAvKiAyICovXG4gIGRpc3BsYXk6IHRhYmxlOyAvKiAxICovXG4gIG1heC13aWR0aDogMTAwJTsgLyogMSAqL1xuICBwYWRkaW5nOiAwOyAvKiAzICovXG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7IC8qIDEgKi9cbn1cblxuLyoqXG4gKiAxLiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBJRSA5LS5cbiAqIDIuIEFkZCB0aGUgY29ycmVjdCB2ZXJ0aWNhbCBhbGlnbm1lbnQgaW4gQ2hyb21lLCBGaXJlZm94LCBhbmQgT3BlcmEuXG4gKi9cblxucHJvZ3Jlc3Mge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IC8qIDEgKi9cbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOyAvKiAyICovXG59XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBkZWZhdWx0IHZlcnRpY2FsIHNjcm9sbGJhciBpbiBJRS5cbiAqL1xuXG50ZXh0YXJlYSB7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuXG4vKipcbiAqIDEuIEFkZCB0aGUgY29ycmVjdCBib3ggc2l6aW5nIGluIElFIDEwLS5cbiAqIDIuIFJlbW92ZSB0aGUgcGFkZGluZyBpbiBJRSAxMC0uXG4gKi9cblxuW3R5cGU9XCJjaGVja2JveFwiXSxcblt0eXBlPVwicmFkaW9cIl0ge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94OyAvKiAxICovXG4gIHBhZGRpbmc6IDA7IC8qIDIgKi9cbn1cblxuLyoqXG4gKiBDb3JyZWN0IHRoZSBjdXJzb3Igc3R5bGUgb2YgaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgYnV0dG9ucyBpbiBDaHJvbWUuXG4gKi9cblxuW3R5cGU9XCJudW1iZXJcIl06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXG5bdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XG4gIGhlaWdodDogYXV0bztcbn1cblxuLyoqXG4gKiAxLiBDb3JyZWN0IHRoZSBvZGQgYXBwZWFyYW5jZSBpbiBDaHJvbWUgYW5kIFNhZmFyaS5cbiAqIDIuIENvcnJlY3QgdGhlIG91dGxpbmUgc3R5bGUgaW4gU2FmYXJpLlxuICovXG5cblt0eXBlPVwic2VhcmNoXCJdIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7IC8qIDEgKi9cbiAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7IC8qIDIgKi9cbn1cblxuLyoqXG4gKiBSZW1vdmUgdGhlIGlubmVyIHBhZGRpbmcgYW5kIGNhbmNlbCBidXR0b25zIGluIENocm9tZSBhbmQgU2FmYXJpIG9uIG1hY09TLlxuICovXG5cblt0eXBlPVwic2VhcmNoXCJdOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uLFxuW3R5cGU9XCJzZWFyY2hcIl06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG59XG5cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgaW5hYmlsaXR5IHRvIHN0eWxlIGNsaWNrYWJsZSB0eXBlcyBpbiBpT1MgYW5kIFNhZmFyaS5cbiAqIDIuIENoYW5nZSBmb250IHByb3BlcnRpZXMgdG8gYGluaGVyaXRgIGluIFNhZmFyaS5cbiAqL1xuXG46Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247IC8qIDEgKi9cbiAgZm9udDogaW5oZXJpdDsgLyogMiAqL1xufVxuXG4vKiBJbnRlcmFjdGl2ZVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLypcbiAqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIElFIDktLlxuICogMS4gQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gRWRnZSwgSUUsIGFuZCBGaXJlZm94LlxuICovXG5cbmRldGFpbHMsIC8qIDEgKi9cbm1lbnUge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLypcbiAqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIGFsbCBicm93c2Vycy5cbiAqL1xuXG5zdW1tYXJ5IHtcbiAgZGlzcGxheTogbGlzdC1pdGVtO1xuICBvdXRsaW5lOiBub25lO1xufVxuXG4vKiBTY3JpcHRpbmdcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qKlxuICogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUgOS0uXG4gKi9cblxuY2FudmFzIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuXG4vKipcbiAqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIElFLlxuICovXG5cbnRlbXBsYXRlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogSGlkZGVuXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKipcbiAqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIElFIDEwLS5cbiAqL1xuXG5baGlkZGVuXSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4iLCIvLyBCYXNlXG4qLFxuKjo6YmVmb3JlLFxuKjo6YWZ0ZXIge1xuICBib3gtc2l6aW5nOiBpbmhlcml0O1xufVxuXG5odG1sIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgZm9udC1zaXplOiAkaHRtbC1mb250LXNpemU7XG4gIGxpbmUtaGVpZ2h0OiAkaHRtbC1saW5lLWhlaWdodDtcbiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cblxuYm9keSB7XG4gIGJhY2tncm91bmQ6ICRib2R5LWJnO1xuICBjb2xvcjogJGJvZHktZm9udC1jb2xvcjtcbiAgZm9udC1mYW1pbHk6ICRib2R5LWZvbnQtZmFtaWx5O1xuICBmb250LXNpemU6ICRmb250LXNpemU7XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTtcbn1cblxuYSB7XG4gIGNvbG9yOiAkbGluay1jb2xvcjtcbiAgb3V0bGluZTogbm9uZTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXG4gICY6Zm9jdXMge1xuICAgIEBpbmNsdWRlIGNvbnRyb2wtc2hhZG93KCk7XG4gIH1cblxuICAmOmZvY3VzLFxuICAmOmhvdmVyLFxuICAmOmFjdGl2ZSxcbiAgJi5hY3RpdmUge1xuICAgIGNvbG9yOiAkbGluay1jb2xvci1kYXJrO1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICB9XG5cbiAgJjp2aXNpdGVkIHtcbiAgICBjb2xvcjogJGxpbmstY29sb3ItbGlnaHQ7XG4gIH1cbn1cbiIsIi8vIFR5cG9ncmFwaHlcbi8vIEhlYWRpbmdzXG5oMSxcbmgyLFxuaDMsXG5oNCxcbmg1LFxuaDYge1xuICBjb2xvcjogaW5oZXJpdDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgbGluZS1oZWlnaHQ6IDEuMjtcbiAgbWFyZ2luLWJvdHRvbTogLjVlbTtcbiAgbWFyZ2luLXRvcDogMDtcbn1cbi5oMSxcbi5oMixcbi5oMyxcbi5oNCxcbi5oNSxcbi5oNiB7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5oMSxcbi5oMSB7XG4gIGZvbnQtc2l6ZTogMnJlbTtcbn1cbmgyLFxuLmgyIHtcbiAgZm9udC1zaXplOiAxLjZyZW07XG59XG5oMyxcbi5oMyB7XG4gIGZvbnQtc2l6ZTogMS40cmVtO1xufVxuaDQsXG4uaDQge1xuICBmb250LXNpemU6IDEuMnJlbTtcbn1cbmg1LFxuLmg1IHtcbiAgZm9udC1zaXplOiAxcmVtO1xufVxuaDYsXG4uaDYge1xuICBmb250LXNpemU6IC44cmVtO1xufVxuXG4vLyBQYXJhZ3JhcGhzXG5wIHtcbiAgbWFyZ2luOiAwIDAgJGxpbmUtaGVpZ2h0O1xufVxuXG4vLyBTZW1hbnRpYyB0ZXh0IGVsZW1lbnRzXG5hLFxuaW5zLFxudSB7XG4gIHRleHQtZGVjb3JhdGlvbi1za2lwOiBpbmsgZWRnZXM7XG59XG5cbmFiYnJbdGl0bGVdIHtcbiAgYm9yZGVyLWJvdHRvbTogJGJvcmRlci13aWR0aCBkb3R0ZWQ7XG4gIGN1cnNvcjogaGVscDtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG5rYmQge1xuICBAaW5jbHVkZSBsYWJlbC1iYXNlKCk7XG4gIEBpbmNsdWRlIGxhYmVsLXZhcmlhbnQoJGxpZ2h0LWNvbG9yLCAkZGFyay1jb2xvcik7XG4gIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbTtcbn1cblxubWFyayB7XG4gIEBpbmNsdWRlIGxhYmVsLXZhcmlhbnQoJGJvZHktZm9udC1jb2xvciwgJGhpZ2hsaWdodC1jb2xvcik7XG4gIGJvcmRlci1ib3R0b206ICR1bml0LW8gc29saWQgZGFya2VuKCRoaWdobGlnaHQtY29sb3IsIDE1JSk7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICBwYWRkaW5nOiAkdW5pdC1vICR1bml0LWggMDtcbn1cblxuLy8gQmxvY2txdW90ZVxuYmxvY2txdW90ZSB7XG4gIGJvcmRlci1sZWZ0OiAkYm9yZGVyLXdpZHRoLWxnIHNvbGlkICRib3JkZXItY29sb3I7XG4gIG1hcmdpbi1sZWZ0OiAwO1xuICBwYWRkaW5nOiAkdW5pdC0yICR1bml0LTQ7XG5cbiAgcDpsYXN0LWNoaWxkIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG59XG5cbi8vIExpc3RzXG51bCxcbm9sIHtcbiAgbWFyZ2luOiAkdW5pdC00IDAgJHVuaXQtNCAkdW5pdC00O1xuICBwYWRkaW5nOiAwO1xuXG4gIHVsLFxuICBvbCB7XG4gICAgbWFyZ2luOiAkdW5pdC00IDAgJHVuaXQtNCAkdW5pdC00O1xuICB9XG5cbiAgbGkge1xuICAgIG1hcmdpbi10b3A6ICR1bml0LTI7XG4gIH1cbn1cblxudWwge1xuICBsaXN0LXN0eWxlOiBkaXNjIGluc2lkZTtcblxuICB1bCB7XG4gICAgbGlzdC1zdHlsZS10eXBlOiBjaXJjbGU7XG4gIH1cbn1cblxub2wge1xuICBsaXN0LXN0eWxlOiBkZWNpbWFsIGluc2lkZTtcblxuICBvbCB7XG4gICAgbGlzdC1zdHlsZS10eXBlOiBsb3dlci1hbHBoYTtcbiAgfVxufVxuXG5kbCB7XG4gIGR0IHtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxuICBkZCB7XG4gICAgbWFyZ2luOiAkdW5pdC0yIDAgJHVuaXQtNCAwO1xuICB9XG59XG4iLCIvLyBPcHRpbWl6ZWQgZm9yIEVhc3QgQXNpYW4gQ0pLXG5odG1sOmxhbmcoemgpLFxuaHRtbDpsYW5nKHpoLUhhbnMpLFxuLmxhbmctemgsXG4ubGFuZy16aC1oYW5zIHtcbiAgZm9udC1mYW1pbHk6ICRjamstemgtaGFucy1mb250LWZhbWlseTtcbn1cblxuaHRtbDpsYW5nKHpoLUhhbnQpLFxuLmxhbmctemgtaGFudCB7XG4gIGZvbnQtZmFtaWx5OiAkY2prLXpoLWhhbnQtZm9udC1mYW1pbHk7XG59XG5cbmh0bWw6bGFuZyhqYSksXG4ubGFuZy1qYSB7XG4gIGZvbnQtZmFtaWx5OiAkY2prLWpwLWZvbnQtZmFtaWx5O1xufVxuXG5odG1sOmxhbmcoa28pLFxuLmxhbmcta28ge1xuICBmb250LWZhbWlseTogJGNqay1rby1mb250LWZhbWlseTtcbn1cblxuOmxhbmcoemgpLFxuOmxhbmcoamEpLFxuLmxhbmctY2prIHtcbiAgaW5zLFxuICB1IHtcbiAgICBib3JkZXItYm90dG9tOiAkYm9yZGVyLXdpZHRoIHNvbGlkO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgfVxuXG4gIGRlbCArIGRlbCxcbiAgZGVsICsgcyxcbiAgaW5zICsgaW5zLFxuICBpbnMgKyB1LFxuICBzICsgZGVsLFxuICBzICsgcyxcbiAgdSArIGlucyxcbiAgdSArIHUge1xuICAgIG1hcmdpbi1sZWZ0OiAuMTI1ZW07XG4gIH1cbn1cbiIsIi8vIFRhYmxlc1xuLnRhYmxlIHtcbiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgYm9yZGVyLXNwYWNpbmc6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBAaWYgJHJ0bCA9PSB0cnVlIHtcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgfSBAZWxzZSB7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgfVxuXG4gICYudGFibGUtc3RyaXBlZCB7XG4gICAgdGJvZHkge1xuICAgICAgdHI6bnRoLW9mLXR5cGUob2RkKSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRiZy1jb2xvcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmLFxuICAmLnRhYmxlLXN0cmlwZWQge1xuICAgIHRib2R5IHtcbiAgICAgIHRyIHtcbiAgICAgICAgJi5hY3RpdmUge1xuICAgICAgICAgIGJhY2tncm91bmQ6ICRiZy1jb2xvci1kYXJrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJi50YWJsZS1ob3ZlciB7XG4gICAgdGJvZHkge1xuICAgICAgdHIge1xuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAkYmctY29sb3ItZGFyaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFNjb2xsYWJsZSB0YWJsZXNcbiAgJi50YWJsZS1zY3JvbGwge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG92ZXJmbG93LXg6IGF1dG87XG4gICAgcGFkZGluZy1ib3R0b206IC43NXJlbTtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB9XG5cbiAgdGQsXG4gIHRoIHtcbiAgICBib3JkZXItYm90dG9tOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRib3JkZXItY29sb3I7XG4gICAgcGFkZGluZzogJHVuaXQtMyAkdW5pdC0yO1xuICB9XG4gIHRoIHtcbiAgICBib3JkZXItYm90dG9tLXdpZHRoOiAkYm9yZGVyLXdpZHRoLWxnO1xuICB9XG59XG4iLCIvLyBCdXR0b25zXG4uYnRuIHtcbiAgYXBwZWFyYW5jZTogbm9uZTtcbiAgYmFja2dyb3VuZDogJGJnLWNvbG9yLWxpZ2h0O1xuICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgJHByaW1hcnktY29sb3I7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICBjb2xvcjogJHByaW1hcnktY29sb3I7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBmb250LXNpemU6ICRmb250LXNpemU7XG4gIGhlaWdodDogJGNvbnRyb2wtc2l6ZTtcbiAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodDtcbiAgb3V0bGluZTogbm9uZTtcbiAgcGFkZGluZzogJGNvbnRyb2wtcGFkZGluZy15ICRjb250cm9sLXBhZGRpbmcteDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQgLjJzLCBib3JkZXIgLjJzLCBib3gtc2hhZG93IC4ycywgY29sb3IgLjJzO1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgJjpmb2N1cyB7XG4gICAgQGluY2x1ZGUgY29udHJvbC1zaGFkb3coKTtcbiAgfVxuICAmOmZvY3VzLFxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiAkc2Vjb25kYXJ5LWNvbG9yO1xuICAgIGJvcmRlci1jb2xvcjogJHByaW1hcnktY29sb3ItZGFyaztcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIH1cbiAgJjphY3RpdmUsXG4gICYuYWN0aXZlIHtcbiAgICBiYWNrZ3JvdW5kOiAkcHJpbWFyeS1jb2xvci1kYXJrO1xuICAgIGJvcmRlci1jb2xvcjogZGFya2VuKCRwcmltYXJ5LWNvbG9yLWRhcmssIDUlKTtcbiAgICBjb2xvcjogJGxpZ2h0LWNvbG9yO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAmLmxvYWRpbmcge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAkbGlnaHQtY29sb3I7XG4gICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAkbGlnaHQtY29sb3I7XG4gICAgICB9XG4gICAgfVxuICB9XG4gICZbZGlzYWJsZWRdLFxuICAmOmRpc2FibGVkLFxuICAmLmRpc2FibGVkIHtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgb3BhY2l0eTogLjU7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIH1cblxuICAvLyBCdXR0b24gUHJpbWFyeVxuICAmLmJ0bi1wcmltYXJ5IHtcbiAgICBiYWNrZ3JvdW5kOiAkcHJpbWFyeS1jb2xvcjtcbiAgICBib3JkZXItY29sb3I6ICRwcmltYXJ5LWNvbG9yLWRhcms7XG4gICAgY29sb3I6ICRsaWdodC1jb2xvcjtcbiAgICAmOmZvY3VzLFxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogZGFya2VuKCRwcmltYXJ5LWNvbG9yLWRhcmssIDIlKTtcbiAgICAgIGJvcmRlci1jb2xvcjogZGFya2VuKCRwcmltYXJ5LWNvbG9yLWRhcmssIDUlKTtcbiAgICAgIGNvbG9yOiAkbGlnaHQtY29sb3I7XG4gICAgfVxuICAgICY6YWN0aXZlLFxuICAgICYuYWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQ6IGRhcmtlbigkcHJpbWFyeS1jb2xvci1kYXJrLCA0JSk7XG4gICAgICBib3JkZXItY29sb3I6IGRhcmtlbigkcHJpbWFyeS1jb2xvci1kYXJrLCA3JSk7XG4gICAgICBjb2xvcjogJGxpZ2h0LWNvbG9yO1xuICAgIH1cbiAgICAmLmxvYWRpbmcge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAkbGlnaHQtY29sb3I7XG4gICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAkbGlnaHQtY29sb3I7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQnV0dG9uIENvbG9yc1xuICAmLmJ0bi1zdWNjZXNzIHtcbiAgICBAaW5jbHVkZSBidXR0b24tdmFyaWFudCgkc3VjY2Vzcy1jb2xvcik7XG4gIH1cblxuICAmLmJ0bi1lcnJvciB7XG4gICAgQGluY2x1ZGUgYnV0dG9uLXZhcmlhbnQoJGVycm9yLWNvbG9yKTtcbiAgfVxuXG4gIC8vIEJ1dHRvbiBMaW5rXG4gICYuYnRuLWxpbmsge1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgY29sb3I6ICRsaW5rLWNvbG9yO1xuICAgICY6Zm9jdXMsXG4gICAgJjpob3ZlcixcbiAgICAmOmFjdGl2ZSxcbiAgICAmLmFjdGl2ZSB7XG4gICAgICBjb2xvcjogJGxpbmstY29sb3ItZGFyaztcbiAgICB9XG4gIH1cblxuICAvLyBCdXR0b24gU2l6ZXNcbiAgJi5idG4tc20ge1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbTtcbiAgICBoZWlnaHQ6ICRjb250cm9sLXNpemUtc207XG4gICAgcGFkZGluZzogJGNvbnRyb2wtcGFkZGluZy15LXNtICRjb250cm9sLXBhZGRpbmcteC1zbTtcbiAgfVxuXG4gICYuYnRuLWxnIHtcbiAgICBmb250LXNpemU6ICRmb250LXNpemUtbGc7XG4gICAgaGVpZ2h0OiAkY29udHJvbC1zaXplLWxnO1xuICAgIHBhZGRpbmc6ICRjb250cm9sLXBhZGRpbmcteS1sZyAkY29udHJvbC1wYWRkaW5nLXgtbGc7XG4gIH1cblxuICAvLyBCdXR0b24gQmxvY2tcbiAgJi5idG4tYmxvY2sge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG5cbiAgLy8gQnV0dG9uIEFjdGlvblxuICAmLmJ0bi1hY3Rpb24ge1xuICAgIHdpZHRoOiAkY29udHJvbC1zaXplO1xuICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuXG4gICAgJi5idG4tc20ge1xuICAgICAgd2lkdGg6ICRjb250cm9sLXNpemUtc207XG4gICAgfVxuXG4gICAgJi5idG4tbGcge1xuICAgICAgd2lkdGg6ICRjb250cm9sLXNpemUtbGc7XG4gICAgfVxuICB9XG5cbiAgLy8gQnV0dG9uIENsZWFyXG4gICYuYnRuLWNsZWFyIHtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBib3JkZXI6IDA7XG4gICAgY29sb3I6IGN1cnJlbnRDb2xvcjtcbiAgICBoZWlnaHQ6ICR1bml0LTU7XG4gICAgbGluZS1oZWlnaHQ6ICR1bml0LTQ7XG4gICAgbWFyZ2luLWxlZnQ6ICR1bml0LTE7XG4gICAgbWFyZ2luLXJpZ2h0OiAtMnB4O1xuICAgIG9wYWNpdHk6IDE7XG4gICAgcGFkZGluZzogJHVuaXQtaDtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgd2lkdGg6ICR1bml0LTU7XG5cbiAgICAmOmZvY3VzLFxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgkYmctY29sb3IsIC41KTtcbiAgICAgIG9wYWNpdHk6IC45NTtcbiAgICB9XG5cbiAgICAmOjpiZWZvcmUge1xuICAgICAgY29udGVudDogXCJcXDI3MTVcIjtcbiAgICB9XG4gIH1cbn1cblxuLy8gQnV0dG9uIGdyb3Vwc1xuLmJ0bi1ncm91cCB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG5cbiAgLmJ0biB7XG4gICAgZmxleDogMSAwIGF1dG87XG4gICAgJjpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpIHtcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XG4gICAgfVxuICAgICY6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSB7XG4gICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgbWFyZ2luLWxlZnQ6IC0kYm9yZGVyLXdpZHRoO1xuICAgIH1cbiAgICAmOmxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCkge1xuICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG4gICAgICBtYXJnaW4tbGVmdDogLSRib3JkZXItd2lkdGg7XG4gICAgfVxuICAgICY6Zm9jdXMsXG4gICAgJjpob3ZlcixcbiAgICAmOmFjdGl2ZSxcbiAgICAmLmFjdGl2ZSB7XG4gICAgICB6LWluZGV4OiAkemluZGV4LTA7XG4gICAgfVxuICB9XG5cbiAgJi5idG4tZ3JvdXAtYmxvY2sge1xuICAgIGRpc3BsYXk6IGZsZXg7XG5cbiAgICAuYnRuIHtcbiAgICAgIGZsZXg6IDEgMCAwO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gRm9ybXNcbi5mb3JtLWdyb3VwIHtcbiAgJjpub3QoOmxhc3QtY2hpbGQpIHtcbiAgICBtYXJnaW4tYm90dG9tOiAkbGF5b3V0LXNwYWNpbmc7XG4gIH1cbn1cblxuZmllbGRzZXQge1xuICBtYXJnaW4tYm90dG9tOiAkbGF5b3V0LXNwYWNpbmctbGc7XG59XG5cbmxlZ2VuZCB7XG4gIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1sZztcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgbWFyZ2luLWJvdHRvbTogJGxheW91dC1zcGFjaW5nLWxnO1xufVxuXG4vLyBGb3JtIGVsZW1lbnQ6IExhYmVsXG4uZm9ybS1sYWJlbCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0O1xuICBwYWRkaW5nOiAkY29udHJvbC1wYWRkaW5nLXkgKyAkYm9yZGVyLXdpZHRoIDA7XG5cbiAgJi5sYWJlbC1zbSB7XG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtO1xuICAgIHBhZGRpbmc6ICRjb250cm9sLXBhZGRpbmcteS1zbSArICRib3JkZXItd2lkdGggMDtcbiAgfVxuXG4gICYubGFiZWwtbGcge1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1sZztcbiAgICBwYWRkaW5nOiAkY29udHJvbC1wYWRkaW5nLXktbGcgKyAkYm9yZGVyLXdpZHRoIDA7XG4gIH1cbn1cblxuLy8gRm9ybSBlbGVtZW50OiBJbnB1dFxuLmZvcm0taW5wdXQge1xuICBhcHBlYXJhbmNlOiBub25lO1xuICBiYWNrZ3JvdW5kOiAkYmctY29sb3ItbGlnaHQ7XG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG4gIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkYm9yZGVyLWNvbG9yLWRhcms7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICBjb2xvcjogJGJvZHktZm9udC1jb2xvcjtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZTtcbiAgaGVpZ2h0OiAkY29udHJvbC1zaXplO1xuICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0O1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIG91dGxpbmU6IG5vbmU7XG4gIHBhZGRpbmc6ICRjb250cm9sLXBhZGRpbmcteSAkY29udHJvbC1wYWRkaW5nLXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAuMnMsIGJvcmRlciAuMnMsIGJveC1zaGFkb3cgLjJzLCBjb2xvciAuMnM7XG4gIHdpZHRoOiAxMDAlO1xuICAmOmZvY3VzIHtcbiAgICBAaW5jbHVkZSBjb250cm9sLXNoYWRvdygpO1xuICAgIGJvcmRlci1jb2xvcjogJHByaW1hcnktY29sb3I7XG4gIH1cbiAgJjo6cGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkZ3JheS1jb2xvcjtcbiAgfVxuXG4gIC8vIElucHV0IHNpemVzXG4gICYuaW5wdXQtc20ge1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbTtcbiAgICBoZWlnaHQ6ICRjb250cm9sLXNpemUtc207XG4gICAgcGFkZGluZzogJGNvbnRyb2wtcGFkZGluZy15LXNtICRjb250cm9sLXBhZGRpbmcteC1zbTtcbiAgfVxuXG4gICYuaW5wdXQtbGcge1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1sZztcbiAgICBoZWlnaHQ6ICRjb250cm9sLXNpemUtbGc7XG4gICAgcGFkZGluZzogJGNvbnRyb2wtcGFkZGluZy15LWxnICRjb250cm9sLXBhZGRpbmcteC1sZztcbiAgfVxuXG4gICYuaW5wdXQtaW5saW5lIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICB3aWR0aDogYXV0bztcbiAgfVxuXG4gIC8vIElucHV0IHR5cGVzXG4gICZbdHlwZT1cImZpbGVcIl0ge1xuICAgIGhlaWdodDogYXV0bztcbiAgfVxufVxuXG4vLyBGb3JtIGVsZW1lbnQ6IFRleHRhcmVhXG50ZXh0YXJlYS5mb3JtLWlucHV0IHtcbiAgJixcbiAgJi5pbnB1dC1sZyxcbiAgJi5pbnB1dC1zbSB7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICB9XG59XG5cbi8vIEZvcm0gZWxlbWVudDogSW5wdXQgaGludFxuLmZvcm0taW5wdXQtaGludCB7XG4gIGNvbG9yOiAkZ3JheS1jb2xvcjtcbiAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtO1xuICBtYXJnaW4tdG9wOiAkdW5pdC0xO1xuXG4gIC5oYXMtc3VjY2VzcyAmLFxuICAuaXMtc3VjY2VzcyArICYge1xuICAgIGNvbG9yOiAkc3VjY2Vzcy1jb2xvcjtcbiAgfVxuXG4gIC5oYXMtZXJyb3IgJixcbiAgLmlzLWVycm9yICsgJiB7XG4gICAgY29sb3I6ICRlcnJvci1jb2xvcjtcbiAgfVxufVxuXG4vLyBGb3JtIGVsZW1lbnQ6IFNlbGVjdFxuLmZvcm0tc2VsZWN0IHtcbiAgYXBwZWFyYW5jZTogbm9uZTtcbiAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRib3JkZXItY29sb3ItZGFyaztcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIGNvbG9yOiBpbmhlcml0O1xuICBmb250LXNpemU6ICRmb250LXNpemU7XG4gIGhlaWdodDogJGNvbnRyb2wtc2l6ZTtcbiAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodDtcbiAgb3V0bGluZTogbm9uZTtcbiAgcGFkZGluZzogJGNvbnRyb2wtcGFkZGluZy15ICRjb250cm9sLXBhZGRpbmcteDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQ6ICRiZy1jb2xvci1saWdodDsgXG4gICY6Zm9jdXMge1xuICAgIEBpbmNsdWRlIGNvbnRyb2wtc2hhZG93KCk7XG4gICAgYm9yZGVyLWNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcbiAgfVxuICAmOjotbXMtZXhwYW5kIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLy8gU2VsZWN0IHNpemVzXG4gICYuc2VsZWN0LXNtIHtcbiAgICBmb250LXNpemU6ICRmb250LXNpemUtc207XG4gICAgaGVpZ2h0OiAkY29udHJvbC1zaXplLXNtO1xuICAgIHBhZGRpbmc6ICRjb250cm9sLXBhZGRpbmcteS1zbSAoJGNvbnRyb2wtaWNvbi1zaXplICsgJGNvbnRyb2wtcGFkZGluZy14LXNtKSAkY29udHJvbC1wYWRkaW5nLXktc20gJGNvbnRyb2wtcGFkZGluZy14LXNtO1xuICB9XG5cbiAgJi5zZWxlY3QtbGcge1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1sZztcbiAgICBoZWlnaHQ6ICRjb250cm9sLXNpemUtbGc7XG4gICAgcGFkZGluZzogJGNvbnRyb2wtcGFkZGluZy15LWxnICgkY29udHJvbC1pY29uLXNpemUgKyAkY29udHJvbC1wYWRkaW5nLXgtbGcpICRjb250cm9sLXBhZGRpbmcteS1sZyAkY29udHJvbC1wYWRkaW5nLXgtbGc7XG4gIH1cblxuICAvLyBNdWx0aXBsZSBzZWxlY3RcbiAgJltzaXplXSxcbiAgJlttdWx0aXBsZV0ge1xuICAgIGhlaWdodDogYXV0bztcbiAgICBwYWRkaW5nOiAkY29udHJvbC1wYWRkaW5nLXkgJGNvbnRyb2wtcGFkZGluZy14O1xuXG4gICAgb3B0aW9uIHtcbiAgICAgIHBhZGRpbmc6ICR1bml0LWggJHVuaXQtMTtcbiAgICB9XG4gIH1cbiAgJjpub3QoW211bHRpcGxlXSk6bm90KFtzaXplXSkge1xuICAgIGJhY2tncm91bmQ6ICRiZy1jb2xvci1saWdodCB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyUyMHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclMjB2aWV3Qm94PScwJTIwMCUyMDQlMjA1JyUzRSUzQ3BhdGglMjBmaWxsPSclMjM2NjcxODknJTIwZD0nTTIlMjAwTDAlMjAyaDR6bTAlMjA1TDAlMjAzaDR6Jy8lM0UlM0Mvc3ZnJTNFXCIpIG5vLXJlcGVhdCByaWdodCAuMzVyZW0gY2VudGVyIC8gLjRyZW0gLjVyZW07XG4gICAgcGFkZGluZy1yaWdodDogJGNvbnRyb2wtaWNvbi1zaXplICsgJGNvbnRyb2wtcGFkZGluZy14O1xuICB9XG59XG5cbi8vIEZvcm0gSWNvbnNcbi5oYXMtaWNvbi1sZWZ0LFxuLmhhcy1pY29uLXJpZ2h0IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gIC5mb3JtLWljb24ge1xuICAgIGhlaWdodDogJGNvbnRyb2wtaWNvbi1zaXplO1xuICAgIG1hcmdpbjogMCAkY29udHJvbC1wYWRkaW5nLXk7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogNTAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICB3aWR0aDogJGNvbnRyb2wtaWNvbi1zaXplO1xuICAgIHotaW5kZXg6ICR6aW5kZXgtMCArIDE7XG4gIH1cbn1cblxuLmhhcy1pY29uLWxlZnQge1xuICAuZm9ybS1pY29uIHtcbiAgICBsZWZ0OiAkYm9yZGVyLXdpZHRoO1xuICB9XG5cbiAgLmZvcm0taW5wdXQge1xuICAgIHBhZGRpbmctbGVmdDogJGNvbnRyb2wtaWNvbi1zaXplICsgJGNvbnRyb2wtcGFkZGluZy15ICogMjtcbiAgfVxufVxuXG4uaGFzLWljb24tcmlnaHQge1xuICAuZm9ybS1pY29uIHtcbiAgICByaWdodDogJGJvcmRlci13aWR0aDtcbiAgfVxuXG4gIC5mb3JtLWlucHV0IHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkY29udHJvbC1pY29uLXNpemUgKyAkY29udHJvbC1wYWRkaW5nLXkgKiAyO1xuICB9XG59XG5cbi8vIEZvcm0gZWxlbWVudDogQ2hlY2tib3ggYW5kIFJhZGlvXG4uZm9ybS1jaGVja2JveCxcbi5mb3JtLXJhZGlvLFxuLmZvcm0tc3dpdGNoIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQ7XG4gIG1hcmdpbjogKCRjb250cm9sLXNpemUgLSAkY29udHJvbC1zaXplLXNtKSAvIDIgMDtcbiAgbWluLWhlaWdodDogJGNvbnRyb2wtc2l6ZS1zbTtcbiAgcGFkZGluZzogKCgkY29udHJvbC1zaXplLXNtIC0gJGxpbmUtaGVpZ2h0KSAvIDIpICRjb250cm9sLXBhZGRpbmcteCAoKCRjb250cm9sLXNpemUtc20gLSAkbGluZS1oZWlnaHQpIC8gMikgKCRjb250cm9sLWljb24tc2l6ZSArICRjb250cm9sLXBhZGRpbmcteCk7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICBpbnB1dCB7XG4gICAgY2xpcDogcmVjdCgwLCAwLCAwLCAwKTtcbiAgICBoZWlnaHQ6IDFweDtcbiAgICBtYXJnaW46IC0xcHg7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgd2lkdGg6IDFweDtcbiAgICAmOmZvY3VzICsgLmZvcm0taWNvbiB7XG4gICAgICBAaW5jbHVkZSBjb250cm9sLXNoYWRvdygpO1xuICAgICAgYm9yZGVyLWNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcbiAgICB9XG4gICAgJjpjaGVja2VkICsgLmZvcm0taWNvbiB7XG4gICAgICBiYWNrZ3JvdW5kOiAkcHJpbWFyeS1jb2xvcjtcbiAgICAgIGJvcmRlci1jb2xvcjogJHByaW1hcnktY29sb3I7XG4gICAgfVxuICB9XG5cbiAgLmZvcm0taWNvbiB7XG4gICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRib3JkZXItY29sb3ItZGFyaztcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIC4ycywgYm9yZGVyIC4ycywgYm94LXNoYWRvdyAuMnMsIGNvbG9yIC4ycztcbiAgfVxuXG4gIC8vIElucHV0IGNoZWNrYm94LCByYWRpbyBhbmQgc3dpdGNoIHNpemVzXG4gICYuaW5wdXQtc20ge1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbTtcbiAgICBtYXJnaW46IDA7XG4gIH1cblxuICAmLmlucHV0LWxnIHtcbiAgICBmb250LXNpemU6ICRmb250LXNpemUtbGc7XG4gICAgbWFyZ2luOiAoJGNvbnRyb2wtc2l6ZS1sZyAtICRjb250cm9sLXNpemUtc20pIC8gMiAwO1xuICB9XG59XG5cbi5mb3JtLWNoZWNrYm94LFxuLmZvcm0tcmFkaW8ge1xuICAuZm9ybS1pY29uIHtcbiAgICBiYWNrZ3JvdW5kOiAkYmctY29sb3ItbGlnaHQ7XG4gICAgaGVpZ2h0OiAkY29udHJvbC1pY29uLXNpemU7XG4gICAgbGVmdDogMDtcbiAgICB0b3A6ICgkY29udHJvbC1zaXplLXNtIC0gJGNvbnRyb2wtaWNvbi1zaXplKSAvIDI7XG4gICAgd2lkdGg6ICRjb250cm9sLWljb24tc2l6ZTtcbiAgfVxuXG4gIGlucHV0IHtcbiAgICAmOmFjdGl2ZSArIC5mb3JtLWljb24ge1xuICAgICAgYmFja2dyb3VuZDogJGJnLWNvbG9yLWRhcms7XG4gICAgfVxuICB9XG59XG4uZm9ybS1jaGVja2JveCB7XG4gIC5mb3JtLWljb24ge1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICB9XG5cbiAgaW5wdXQge1xuICAgICY6Y2hlY2tlZCArIC5mb3JtLWljb24ge1xuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcbiAgICAgICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoLWxnIHNvbGlkICRsaWdodC1jb2xvcjtcbiAgICAgICAgYm9yZGVyLWxlZnQtd2lkdGg6IDA7XG4gICAgICAgIGJvcmRlci10b3Atd2lkdGg6IDA7XG4gICAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICAgIGhlaWdodDogOXB4O1xuICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAtM3B4O1xuICAgICAgICBtYXJnaW4tdG9wOiAtNnB4O1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogNTAlO1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XG4gICAgICAgIHdpZHRoOiA2cHg7XG4gICAgICB9XG4gICAgfVxuICAgICY6aW5kZXRlcm1pbmF0ZSArIC5mb3JtLWljb24ge1xuICAgICAgYmFja2dyb3VuZDogJHByaW1hcnktY29sb3I7XG4gICAgICBib3JkZXItY29sb3I6ICRwcmltYXJ5LWNvbG9yO1xuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGJnLWNvbG9yLWxpZ2h0O1xuICAgICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgICBoZWlnaHQ6IDJweDtcbiAgICAgICAgbGVmdDogNTAlO1xuICAgICAgICBtYXJnaW4tbGVmdDogLTVweDtcbiAgICAgICAgbWFyZ2luLXRvcDogLTFweDtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgd2lkdGg6IDEwcHg7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4uZm9ybS1yYWRpbyB7XG4gIC5mb3JtLWljb24ge1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgfVxuXG4gIGlucHV0IHtcbiAgICAmOmNoZWNrZWQgKyAuZm9ybS1pY29uIHtcbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRiZy1jb2xvci1saWdodDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgICBoZWlnaHQ6IDZweDtcbiAgICAgICAgbGVmdDogNTAlO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogNTAlO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICAgICAgd2lkdGg6IDZweDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gRm9ybSBlbGVtZW50OiBTd2l0Y2hcbi5mb3JtLXN3aXRjaCB7XG4gIHBhZGRpbmctbGVmdDogKCR1bml0LTggKyAkY29udHJvbC1wYWRkaW5nLXgpO1xuXG4gIC5mb3JtLWljb24ge1xuICAgIGJhY2tncm91bmQ6ICRncmF5LWNvbG9yO1xuICAgIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG4gICAgYm9yZGVyLXJhZGl1czogJHVuaXQtMiArICRib3JkZXItd2lkdGg7XG4gICAgaGVpZ2h0OiAkdW5pdC00ICsgJGJvcmRlci13aWR0aCAqIDI7XG4gICAgbGVmdDogMDtcbiAgICB0b3A6ICgkY29udHJvbC1zaXplLXNtIC0gJHVuaXQtNCkgLyAyIC0gJGJvcmRlci13aWR0aDtcbiAgICB3aWR0aDogJHVuaXQtODtcbiAgICAmOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZDogJGJnLWNvbG9yLWxpZ2h0O1xuICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgY29udGVudDogXCJcIjtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgaGVpZ2h0OiAkdW5pdC00O1xuICAgICAgbGVmdDogMDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDtcbiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgLjJzLCBib3JkZXIgLjJzLCBib3gtc2hhZG93IC4ycywgY29sb3IgLjJzLCBsZWZ0IC4ycztcbiAgICAgIHdpZHRoOiAkdW5pdC00O1xuICAgIH1cbiAgfVxuXG4gIGlucHV0IHtcbiAgICAmOmNoZWNrZWQgKyAuZm9ybS1pY29uIHtcbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIGxlZnQ6IDE0cHg7XG4gICAgICB9XG4gICAgfVxuICAgICY6YWN0aXZlICsgLmZvcm0taWNvbiB7XG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkYmctY29sb3I7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIEZvcm0gZWxlbWVudDogSW5wdXQgZ3JvdXBzXG4uaW5wdXQtZ3JvdXAge1xuICBkaXNwbGF5OiBmbGV4O1xuXG4gIC5pbnB1dC1ncm91cC1hZGRvbiB7XG4gICAgYmFja2dyb3VuZDogJGJnLWNvbG9yO1xuICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkYm9yZGVyLWNvbG9yLWRhcms7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodDtcbiAgICBwYWRkaW5nOiAkY29udHJvbC1wYWRkaW5nLXkgJGNvbnRyb2wtcGFkZGluZy14O1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgICAmLmFkZG9uLXNtIHtcbiAgICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbTtcbiAgICAgIHBhZGRpbmc6ICRjb250cm9sLXBhZGRpbmcteS1zbSAkY29udHJvbC1wYWRkaW5nLXgtc207XG4gICAgfVxuXG4gICAgJi5hZGRvbi1sZyB7XG4gICAgICBmb250LXNpemU6ICRmb250LXNpemUtbGc7XG4gICAgICBwYWRkaW5nOiAkY29udHJvbC1wYWRkaW5nLXktbGcgJGNvbnRyb2wtcGFkZGluZy14LWxnO1xuICAgIH1cbiAgfVxuXG4gIC5mb3JtLWlucHV0LFxuICAuZm9ybS1zZWxlY3Qge1xuICAgIGZsZXg6IDEgMSBhdXRvO1xuICAgIHdpZHRoOiAxJTtcbiAgfVxuXG4gIC5pbnB1dC1ncm91cC1idG4ge1xuICAgIHotaW5kZXg6ICR6aW5kZXgtMDtcbiAgfVxuXG4gIC5mb3JtLWlucHV0LFxuICAuZm9ybS1zZWxlY3QsXG4gIC5pbnB1dC1ncm91cC1hZGRvbixcbiAgLmlucHV0LWdyb3VwLWJ0biB7XG4gICAgJjpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpIHtcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XG4gICAgfVxuICAgICY6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSB7XG4gICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgbWFyZ2luLWxlZnQ6IC0kYm9yZGVyLXdpZHRoO1xuICAgIH1cbiAgICAmOmxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCkge1xuICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG4gICAgICBtYXJnaW4tbGVmdDogLSRib3JkZXItd2lkdGg7XG4gICAgfVxuICAgICY6Zm9jdXMge1xuICAgICAgei1pbmRleDogJHppbmRleC0wICsgMTtcbiAgICB9XG4gIH1cblxuICAuZm9ybS1zZWxlY3Qge1xuICAgIHdpZHRoOiBhdXRvO1xuICB9XG5cbiAgJi5pbnB1dC1pbmxpbmUge1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICB9XG59XG5cbi8vIEZvcm0gdmFsaWRhdGlvbiBzdGF0ZXNcbi5mb3JtLWlucHV0LFxuLmZvcm0tc2VsZWN0IHtcbiAgLmhhcy1zdWNjZXNzICYsXG4gICYuaXMtc3VjY2VzcyB7XG4gICAgYmFja2dyb3VuZDogbGlnaHRlbigkc3VjY2Vzcy1jb2xvciwgNTMlKTtcbiAgICBib3JkZXItY29sb3I6ICRzdWNjZXNzLWNvbG9yO1xuICAgICY6Zm9jdXMge1xuICAgICAgQGluY2x1ZGUgY29udHJvbC1zaGFkb3coJHN1Y2Nlc3MtY29sb3IpO1xuICAgIH1cbiAgfVxuXG4gIC5oYXMtZXJyb3IgJixcbiAgJi5pcy1lcnJvciB7XG4gICAgYmFja2dyb3VuZDogbGlnaHRlbigkZXJyb3ItY29sb3IsIDUzJSk7XG4gICAgYm9yZGVyLWNvbG9yOiAkZXJyb3ItY29sb3I7XG4gICAgJjpmb2N1cyB7XG4gICAgICBAaW5jbHVkZSBjb250cm9sLXNoYWRvdygkZXJyb3ItY29sb3IpO1xuICAgIH1cbiAgfVxufVxuXG4uZm9ybS1jaGVja2JveCxcbi5mb3JtLXJhZGlvLFxuLmZvcm0tc3dpdGNoIHtcbiAgLmhhcy1lcnJvciAmLFxuICAmLmlzLWVycm9yIHtcbiAgICAuZm9ybS1pY29uIHtcbiAgICAgIGJvcmRlci1jb2xvcjogJGVycm9yLWNvbG9yO1xuICAgIH1cblxuICAgIGlucHV0IHtcbiAgICAgICY6Y2hlY2tlZCArIC5mb3JtLWljb24ge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkZXJyb3ItY29sb3I7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJGVycm9yLWNvbG9yO1xuICAgICAgfVxuXG4gICAgICAmOmZvY3VzICsgLmZvcm0taWNvbiB7XG4gICAgICAgIEBpbmNsdWRlIGNvbnRyb2wtc2hhZG93KCRlcnJvci1jb2xvcik7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJGVycm9yLWNvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4uZm9ybS1jaGVja2JveCB7XG4gIC5oYXMtZXJyb3IgJixcbiAgJi5pcy1lcnJvciB7XG4gICAgaW5wdXQge1xuICAgICAgJjppbmRldGVybWluYXRlICsgLmZvcm0taWNvbiB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRlcnJvci1jb2xvcjtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkZXJyb3ItY29sb3I7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIHZhbGlkYXRpb24gYmFzZWQgb24gOnBsYWNlaG9sZGVyLXNob3duIChFZGdlIGRvZXNuJ3Qgc3VwcG9ydCBpdCB5ZXQpXG4uZm9ybS1pbnB1dCB7XG4gICY6bm90KDpwbGFjZWhvbGRlci1zaG93bikge1xuICAgICY6aW52YWxpZCB7XG4gICAgICBib3JkZXItY29sb3I6ICRlcnJvci1jb2xvcjtcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBAaW5jbHVkZSBjb250cm9sLXNoYWRvdygkZXJyb3ItY29sb3IpO1xuICAgICAgICBiYWNrZ3JvdW5kOiBsaWdodGVuKCRlcnJvci1jb2xvciwgNTMlKTtcbiAgICAgIH1cblxuICAgICAgJiArIC5mb3JtLWlucHV0LWhpbnQge1xuICAgICAgICBjb2xvcjogJGVycm9yLWNvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBGb3JtIGRpc2FibGVkIGFuZCByZWFkb25seVxuLmZvcm0taW5wdXQsXG4uZm9ybS1zZWxlY3Qge1xuICAmOmRpc2FibGVkLFxuICAmLmRpc2FibGVkIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmctY29sb3ItZGFyaztcbiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgIG9wYWNpdHk6IC41O1xuICB9XG59XG5cbi5mb3JtLWlucHV0IHtcbiAgJltyZWFkb25seV0ge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRiZy1jb2xvcjtcbiAgfVxufVxuXG5pbnB1dCB7XG4gICY6ZGlzYWJsZWQsXG4gICYuZGlzYWJsZWQge1xuICAgICYgKyAuZm9ybS1pY29uIHtcbiAgICAgIGJhY2tncm91bmQ6ICRiZy1jb2xvci1kYXJrO1xuICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICAgIG9wYWNpdHk6IC41O1xuICAgIH1cbiAgfVxufVxuXG4uZm9ybS1zd2l0Y2gge1xuICBpbnB1dCB7XG4gICAgJjpkaXNhYmxlZCxcbiAgICAmLmRpc2FibGVkIHtcbiAgICAgICYgKyAuZm9ybS1pY29uOjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkYmctY29sb3ItbGlnaHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIEZvcm0gaG9yaXpvbnRhbFxuLmZvcm0taG9yaXpvbnRhbCB7XG4gIHBhZGRpbmc6ICRsYXlvdXQtc3BhY2luZyAwO1xuXG4gIC5mb3JtLWdyb3VwIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgfVxufVxuXG4vLyBGb3JtIGlubGluZVxuLmZvcm0taW5saW5lIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuIiwiLy8gTGFiZWxzXG4ubGFiZWwge1xuICBAaW5jbHVkZSBsYWJlbC1iYXNlKCk7XG4gIEBpbmNsdWRlIGxhYmVsLXZhcmlhbnQobGlnaHRlbigkYm9keS1mb250LWNvbG9yLCA1JSksICRiZy1jb2xvci1kYXJrKTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXG4gIC8vIExhYmVsIHJvdW5kZWRcbiAgJi5sYWJlbC1yb3VuZGVkIHtcbiAgICBib3JkZXItcmFkaXVzOiA1cmVtO1xuICAgIHBhZGRpbmctbGVmdDogLjRyZW07XG4gICAgcGFkZGluZy1yaWdodDogLjRyZW07IFxuICB9XG5cbiAgLy8gTGFiZWwgY29sb3JzXG4gICYubGFiZWwtcHJpbWFyeSB7XG4gICAgQGluY2x1ZGUgbGFiZWwtdmFyaWFudCgkbGlnaHQtY29sb3IsICRwcmltYXJ5LWNvbG9yKTtcbiAgfVxuXG4gICYubGFiZWwtc2Vjb25kYXJ5IHtcbiAgICBAaW5jbHVkZSBsYWJlbC12YXJpYW50KCRwcmltYXJ5LWNvbG9yLCAkc2Vjb25kYXJ5LWNvbG9yKTtcbiAgfVxuXG4gICYubGFiZWwtc3VjY2VzcyB7XG4gICAgQGluY2x1ZGUgbGFiZWwtdmFyaWFudCgkbGlnaHQtY29sb3IsICRzdWNjZXNzLWNvbG9yKTtcbiAgfVxuXG4gICYubGFiZWwtd2FybmluZyB7XG4gICAgQGluY2x1ZGUgbGFiZWwtdmFyaWFudCgkbGlnaHQtY29sb3IsICR3YXJuaW5nLWNvbG9yKTtcbiAgfVxuXG4gICYubGFiZWwtZXJyb3Ige1xuICAgIEBpbmNsdWRlIGxhYmVsLXZhcmlhbnQoJGxpZ2h0LWNvbG9yLCAkZXJyb3ItY29sb3IpO1xuICB9XG59XG4iLCIvLyBDb2Rlc1xuY29kZSB7XG4gIEBpbmNsdWRlIGxhYmVsLWJhc2UoKTtcbiAgQGluY2x1ZGUgbGFiZWwtdmFyaWFudCgkY29kZS1jb2xvciwgbGlnaHRlbigkY29kZS1jb2xvciwgMjYlKSk7XG4gIGZvbnQtc2l6ZTogODUlO1xufVxuXG4uY29kZSB7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICBjb2xvcjogJGJvZHktZm9udC1jb2xvcjtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICY6OmJlZm9yZSB7XG4gICAgY29sb3I6ICRncmF5LWNvbG9yO1xuICAgIGNvbnRlbnQ6IGF0dHIoZGF0YS1sYW5nKTtcbiAgICBmb250LXNpemU6ICRmb250LXNpemUtc207XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiAkbGF5b3V0LXNwYWNpbmc7XG4gICAgdG9wOiAkdW5pdC1oO1xuICB9XG5cbiAgY29kZSB7XG4gICAgYmFja2dyb3VuZDogJGJnLWNvbG9yO1xuICAgIGNvbG9yOiBpbmhlcml0O1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjU7XG4gICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICBwYWRkaW5nOiAxcmVtO1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG4iLCIvLyBNZWRpYVxuLy8gSW1hZ2UgcmVzcG9uc2l2ZVxuLmltZy1yZXNwb25zaXZlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGhlaWdodDogYXV0bztcbiAgbWF4LXdpZHRoOiAxMDAlO1xufVxuXG4vLyBvYmplY3QtZml0IHN1cHBvcnQgaXMgY29taW5nIHRvIE1pY3Jvc29mdCBFZGdlXG4vLyBodHRwczovL2RldmVsb3Blci5taWNyb3NvZnQuY29tL2VuLXVzL21pY3Jvc29mdC1lZGdlL3BsYXRmb3JtL3N0YXR1cy9vYmplY3RmaXRhbmRvYmplY3Rwb3NpdGlvbi9cbi5pbWctZml0LWNvdmVyIHtcbiAgb2JqZWN0LWZpdDogY292ZXI7XG59XG5cbi5pbWctZml0LWNvbnRhaW4ge1xuICBvYmplY3QtZml0OiBjb250YWluO1xufVxuXG4vLyBWaWRlbyByZXNwb25zaXZlXG4udmlkZW8tcmVzcG9uc2l2ZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBwYWRkaW5nOiAwO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiAxMDAlO1xuICAmOjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcGFkZGluZy1ib3R0b206IDU2LjI1JTsgLy8gRGVmYXVsdCByYXRpbyAxNjo5LCB5b3UgY2FuIGNhbGN1bGF0ZSB0aGlzIHZhbHVlIGJ5IGRpdmlkaW5nIDkgYnkgMTZcbiAgfVxuXG4gIGlmcmFtZSxcbiAgb2JqZWN0LFxuICBlbWJlZCB7XG4gICAgYm9yZGVyOiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbGVmdDogMDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IDA7XG4gICAgdG9wOiAwO1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG5cbnZpZGVvLnZpZGVvLXJlc3BvbnNpdmUge1xuICBoZWlnaHQ6IGF1dG87XG4gIG1heC13aWR0aDogMTAwJTtcblxuICAmOjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IG5vbmU7XG4gIH1cbn1cblxuLnZpZGVvLXJlc3BvbnNpdmUtNC0zIHtcbiAgJjo6YmVmb3JlIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogNzUlOyAvLyBSYXRpbyA0OjNcbiAgfVxufVxuXG4udmlkZW8tcmVzcG9uc2l2ZS0xLTEge1xuICAmOjpiZWZvcmUge1xuICAgIHBhZGRpbmctYm90dG9tOiAxMDAlOyAvLyBSYXRpbyAxOjFcbiAgfVxufVxuXG4vLyBGaWd1cmVcbi5maWd1cmUge1xuICBtYXJnaW46IDAgMCAkbGF5b3V0LXNwYWNpbmcgMDtcblxuICAuZmlndXJlLWNhcHRpb24ge1xuICAgIGNvbG9yOiAkZ3JheS1jb2xvci1kYXJrO1xuICAgIG1hcmdpbi10b3A6ICRsYXlvdXQtc3BhY2luZztcbiAgfVxufVxuIiwiLy8gTGF5b3V0XG4uY29udGFpbmVyIHtcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbiAgcGFkZGluZy1sZWZ0OiAkbGF5b3V0LXNwYWNpbmc7XG4gIHBhZGRpbmctcmlnaHQ6ICRsYXlvdXQtc3BhY2luZztcbiAgd2lkdGg6IDEwMCU7XG5cbiAgJGdyaWQtc3BhY2luZzogKCRsYXlvdXQtc3BhY2luZyAvICgkbGF5b3V0LXNwYWNpbmcgKiAwICsgMSkpICogJGh0bWwtZm9udC1zaXplO1xuXG4gICYuZ3JpZC14bCB7XG4gICAgbWF4LXdpZHRoOiAkZ3JpZC1zcGFjaW5nICogMiArICRzaXplLXhsO1xuICB9XG5cbiAgJi5ncmlkLWxnIHtcbiAgICBtYXgtd2lkdGg6ICRncmlkLXNwYWNpbmcgKiAyICsgJHNpemUtbGc7XG4gIH1cblxuICAmLmdyaWQtbWQge1xuICAgIG1heC13aWR0aDogJGdyaWQtc3BhY2luZyAqIDIgKyAkc2l6ZS1tZDtcbiAgfVxuXG4gICYuZ3JpZC1zbSB7XG4gICAgbWF4LXdpZHRoOiAkZ3JpZC1zcGFjaW5nICogMiArICRzaXplLXNtO1xuICB9XG5cbiAgJi5ncmlkLXhzIHtcbiAgICBtYXgtd2lkdGg6ICRncmlkLXNwYWNpbmcgKiAyICsgJHNpemUteHM7XG4gIH1cbn1cblxuLy8gUmVzcG9uc2l2ZSBicmVha3BvaW50IHN5c3RlbVxuLnNob3cteHMsXG4uc2hvdy1zbSxcbi5zaG93LW1kLFxuLnNob3ctbGcsXG4uc2hvdy14bCB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuLy8gUmVzcG9uc2l2ZSBncmlkIHN5c3RlbVxuLmNvbHVtbnMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIG1hcmdpbi1sZWZ0OiAtJGxheW91dC1zcGFjaW5nO1xuICBtYXJnaW4tcmlnaHQ6IC0kbGF5b3V0LXNwYWNpbmc7XG5cbiAgJi5jb2wtZ2FwbGVzcyB7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xuXG4gICAgJiA+IC5jb2x1bW4ge1xuICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgcGFkZGluZy1yaWdodDogMDtcbiAgICB9XG4gIH1cbiAgJi5jb2wtb25lbGluZSB7XG4gICAgZmxleC13cmFwOiBub3dyYXA7XG4gICAgb3ZlcmZsb3cteDogYXV0bztcbiAgfVxufVxuLmNvbHVtbiB7XG4gIGZsZXg6IDE7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgcGFkZGluZy1sZWZ0OiAkbGF5b3V0LXNwYWNpbmc7XG4gIHBhZGRpbmctcmlnaHQ6ICRsYXlvdXQtc3BhY2luZztcblxuICAmLmNvbC0xMixcbiAgJi5jb2wtMTEsXG4gICYuY29sLTEwLFxuICAmLmNvbC05LFxuICAmLmNvbC04LFxuICAmLmNvbC03LFxuICAmLmNvbC02LFxuICAmLmNvbC01LFxuICAmLmNvbC00LFxuICAmLmNvbC0zLFxuICAmLmNvbC0yLFxuICAmLmNvbC0xLFxuICAmLmNvbC1hdXRvIHtcbiAgICBmbGV4OiBub25lO1xuICB9XG59XG4uY29sLTEyIHtcbiAgd2lkdGg6IDEwMCU7XG59XG4uY29sLTExIHtcbiAgd2lkdGg6IDkxLjY2NjY2NjY3JTtcbn1cbi5jb2wtMTAge1xuICB3aWR0aDogODMuMzMzMzMzMzMlO1xufVxuLmNvbC05IHtcbiAgd2lkdGg6IDc1JTtcbn1cbi5jb2wtOCB7XG4gIHdpZHRoOiA2Ni42NjY2NjY2NyU7XG59XG4uY29sLTcge1xuICB3aWR0aDogNTguMzMzMzMzMzMlO1xufVxuLmNvbC02IHtcbiAgd2lkdGg6IDUwJTtcbn1cbi5jb2wtNSB7XG4gIHdpZHRoOiA0MS42NjY2NjY2NyU7XG59XG4uY29sLTQge1xuICB3aWR0aDogMzMuMzMzMzMzMzMlO1xufVxuLmNvbC0zIHtcbiAgd2lkdGg6IDI1JTtcbn1cbi5jb2wtMiB7XG4gIHdpZHRoOiAxNi42NjY2NjY2NyU7XG59XG4uY29sLTEge1xuICB3aWR0aDogOC4zMzMzMzMzMyU7XG59XG4uY29sLWF1dG8ge1xuICBmbGV4OiAwIDAgYXV0bztcbiAgbWF4LXdpZHRoOiBub25lO1xuICB3aWR0aDogYXV0bztcbn1cbi5jb2wtbXgtYXV0byB7XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICBtYXJnaW4tcmlnaHQ6IGF1dG87XG59XG4uY29sLW1sLWF1dG8ge1xuICBtYXJnaW4tbGVmdDogYXV0bztcbn1cbi5jb2wtbXItYXV0byB7XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbn1cbkBtZWRpYSAobWF4LXdpZHRoOiAkc2l6ZS14bCkge1xuICAuY29sLXhsLTEyLFxuICAuY29sLXhsLTExLFxuICAuY29sLXhsLTEwLFxuICAuY29sLXhsLTksXG4gIC5jb2wteGwtOCxcbiAgLmNvbC14bC03LFxuICAuY29sLXhsLTYsXG4gIC5jb2wteGwtNSxcbiAgLmNvbC14bC00LFxuICAuY29sLXhsLTMsXG4gIC5jb2wteGwtMixcbiAgLmNvbC14bC0xLFxuICAuY29sLXhsLWF1dG8ge1xuICAgIGZsZXg6IG5vbmU7XG4gIH1cbiAgLmNvbC14bC0xMiB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbiAgLmNvbC14bC0xMSB7XG4gICAgd2lkdGg6IDkxLjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLXhsLTEwIHtcbiAgICB3aWR0aDogODMuMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wteGwtOSB7XG4gICAgd2lkdGg6IDc1JTtcbiAgfVxuICAuY29sLXhsLTgge1xuICAgIHdpZHRoOiA2Ni42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC14bC03IHtcbiAgICB3aWR0aDogNTguMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wteGwtNiB7XG4gICAgd2lkdGg6IDUwJTtcbiAgfVxuICAuY29sLXhsLTUge1xuICAgIHdpZHRoOiA0MS42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC14bC00IHtcbiAgICB3aWR0aDogMzMuMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wteGwtMyB7XG4gICAgd2lkdGg6IDI1JTtcbiAgfVxuICAuY29sLXhsLTIge1xuICAgIHdpZHRoOiAxNi42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC14bC0xIHtcbiAgICB3aWR0aDogOC4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC14bC1hdXRvIHtcbiAgICB3aWR0aDogYXV0bztcbiAgfVxuICAuaGlkZS14bCB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG4gIC5zaG93LXhsIHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgKG1heC13aWR0aDogJHNpemUtbGcpIHtcbiAgLmNvbC1sZy0xMixcbiAgLmNvbC1sZy0xMSxcbiAgLmNvbC1sZy0xMCxcbiAgLmNvbC1sZy05LFxuICAuY29sLWxnLTgsXG4gIC5jb2wtbGctNyxcbiAgLmNvbC1sZy02LFxuICAuY29sLWxnLTUsXG4gIC5jb2wtbGctNCxcbiAgLmNvbC1sZy0zLFxuICAuY29sLWxnLTIsXG4gIC5jb2wtbGctMSxcbiAgLmNvbC1sZy1hdXRvIHtcbiAgICBmbGV4OiBub25lO1xuICB9XG4gIC5jb2wtbGctMTIge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gIC5jb2wtbGctMTEge1xuICAgIHdpZHRoOiA5MS42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1sZy0xMCB7XG4gICAgd2lkdGg6IDgzLjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLWxnLTkge1xuICAgIHdpZHRoOiA3NSU7XG4gIH1cbiAgLmNvbC1sZy04IHtcbiAgICB3aWR0aDogNjYuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbGctNyB7XG4gICAgd2lkdGg6IDU4LjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLWxnLTYge1xuICAgIHdpZHRoOiA1MCU7XG4gIH1cbiAgLmNvbC1sZy01IHtcbiAgICB3aWR0aDogNDEuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbGctNCB7XG4gICAgd2lkdGg6IDMzLjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLWxnLTMge1xuICAgIHdpZHRoOiAyNSU7XG4gIH1cbiAgLmNvbC1sZy0yIHtcbiAgICB3aWR0aDogMTYuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbGctMSB7XG4gICAgd2lkdGg6IDguMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbGctYXV0byB7XG4gICAgd2lkdGg6IGF1dG87XG4gIH1cbiAgLmhpZGUtbGcge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgfVxuICAuc2hvdy1sZyB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIChtYXgtd2lkdGg6ICRzaXplLW1kKSB7XG4gIC5jb2wtbWQtMTIsXG4gIC5jb2wtbWQtMTEsXG4gIC5jb2wtbWQtMTAsXG4gIC5jb2wtbWQtOSxcbiAgLmNvbC1tZC04LFxuICAuY29sLW1kLTcsXG4gIC5jb2wtbWQtNixcbiAgLmNvbC1tZC01LFxuICAuY29sLW1kLTQsXG4gIC5jb2wtbWQtMyxcbiAgLmNvbC1tZC0yLFxuICAuY29sLW1kLTEsXG4gIC5jb2wtbWQtYXV0byB7XG4gICAgZmxleDogbm9uZTtcbiAgfVxuICAuY29sLW1kLTEyIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuICAuY29sLW1kLTExIHtcbiAgICB3aWR0aDogOTEuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbWQtMTAge1xuICAgIHdpZHRoOiA4My4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1tZC05IHtcbiAgICB3aWR0aDogNzUlO1xuICB9XG4gIC5jb2wtbWQtOCB7XG4gICAgd2lkdGg6IDY2LjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLW1kLTcge1xuICAgIHdpZHRoOiA1OC4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1tZC02IHtcbiAgICB3aWR0aDogNTAlO1xuICB9XG4gIC5jb2wtbWQtNSB7XG4gICAgd2lkdGg6IDQxLjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLW1kLTQge1xuICAgIHdpZHRoOiAzMy4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1tZC0zIHtcbiAgICB3aWR0aDogMjUlO1xuICB9XG4gIC5jb2wtbWQtMiB7XG4gICAgd2lkdGg6IDE2LjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLW1kLTEge1xuICAgIHdpZHRoOiA4LjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLW1kLWF1dG8ge1xuICAgIHdpZHRoOiBhdXRvO1xuICB9XG4gIC5oaWRlLW1kIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbiAgLnNob3ctbWQge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSAobWF4LXdpZHRoOiAkc2l6ZS1zbSkge1xuICAuY29sLXNtLTEyLFxuICAuY29sLXNtLTExLFxuICAuY29sLXNtLTEwLFxuICAuY29sLXNtLTksXG4gIC5jb2wtc20tOCxcbiAgLmNvbC1zbS03LFxuICAuY29sLXNtLTYsXG4gIC5jb2wtc20tNSxcbiAgLmNvbC1zbS00LFxuICAuY29sLXNtLTMsXG4gIC5jb2wtc20tMixcbiAgLmNvbC1zbS0xLFxuICAuY29sLXNtLWF1dG8ge1xuICAgIGZsZXg6IG5vbmU7XG4gIH1cbiAgLmNvbC1zbS0xMiB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbiAgLmNvbC1zbS0xMSB7XG4gICAgd2lkdGg6IDkxLjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLXNtLTEwIHtcbiAgICB3aWR0aDogODMuMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtc20tOSB7XG4gICAgd2lkdGg6IDc1JTtcbiAgfVxuICAuY29sLXNtLTgge1xuICAgIHdpZHRoOiA2Ni42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1zbS03IHtcbiAgICB3aWR0aDogNTguMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtc20tNiB7XG4gICAgd2lkdGg6IDUwJTtcbiAgfVxuICAuY29sLXNtLTUge1xuICAgIHdpZHRoOiA0MS42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1zbS00IHtcbiAgICB3aWR0aDogMzMuMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtc20tMyB7XG4gICAgd2lkdGg6IDI1JTtcbiAgfVxuICAuY29sLXNtLTIge1xuICAgIHdpZHRoOiAxNi42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1zbS0xIHtcbiAgICB3aWR0aDogOC4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1zbS1hdXRvIHtcbiAgICB3aWR0aDogYXV0bztcbiAgfVxuICAuaGlkZS1zbSB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG4gIC5zaG93LXNtIHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgKG1heC13aWR0aDogJHNpemUteHMpIHtcbiAgLmNvbC14cy0xMixcbiAgLmNvbC14cy0xMSxcbiAgLmNvbC14cy0xMCxcbiAgLmNvbC14cy05LFxuICAuY29sLXhzLTgsXG4gIC5jb2wteHMtNyxcbiAgLmNvbC14cy02LFxuICAuY29sLXhzLTUsXG4gIC5jb2wteHMtNCxcbiAgLmNvbC14cy0zLFxuICAuY29sLXhzLTIsXG4gIC5jb2wteHMtMSxcbiAgLmNvbC14cy1hdXRvIHtcbiAgICBmbGV4OiBub25lO1xuICB9XG4gIC5jb2wteHMtMTIge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gIC5jb2wteHMtMTEge1xuICAgIHdpZHRoOiA5MS42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC14cy0xMCB7XG4gICAgd2lkdGg6IDgzLjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLXhzLTkge1xuICAgIHdpZHRoOiA3NSU7XG4gIH1cbiAgLmNvbC14cy04IHtcbiAgICB3aWR0aDogNjYuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wteHMtNyB7XG4gICAgd2lkdGg6IDU4LjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLXhzLTYge1xuICAgIHdpZHRoOiA1MCU7XG4gIH1cbiAgLmNvbC14cy01IHtcbiAgICB3aWR0aDogNDEuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wteHMtNCB7XG4gICAgd2lkdGg6IDMzLjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLXhzLTMge1xuICAgIHdpZHRoOiAyNSU7XG4gIH1cbiAgLmNvbC14cy0yIHtcbiAgICB3aWR0aDogMTYuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wteHMtMSB7XG4gICAgd2lkdGg6IDguMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wteHMtYXV0byB7XG4gICAgd2lkdGg6IGF1dG87XG4gIH1cbiAgLmhpZGUteHMge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgfVxuICAuc2hvdy14cyB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgfVxufVxuIiwiLy8gSGVyb1xuLmhlcm8ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIHBhZGRpbmctYm90dG9tOiA0cmVtO1xuICBwYWRkaW5nLXRvcDogNHJlbTtcblxuICAmLmhlcm8tc20ge1xuICAgIHBhZGRpbmctYm90dG9tOiAycmVtO1xuICAgIHBhZGRpbmctdG9wOiAycmVtO1xuICB9XG5cbiAgJi5oZXJvLWxnIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogOHJlbTtcbiAgICBwYWRkaW5nLXRvcDogOHJlbTtcbiAgfVxuXG4gIC5oZXJvLWJvZHkge1xuICAgIHBhZGRpbmc6ICRsYXlvdXQtc3BhY2luZztcbiAgfVxufSIsIi8vIE5hdmJhclxuLm5hdmJhciB7XG4gIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcblxuICAubmF2YmFyLXNlY3Rpb24ge1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4OiAxIDAgMDtcblxuICAgICY6bm90KDpmaXJzdC1jaGlsZCk6bGFzdC1jaGlsZCB7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgIH1cbiAgfVxuXG4gIC5uYXZiYXItY2VudGVyIHtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleDogMCAwIGF1dG87XG4gIH1cblxuICAubmF2YmFyLWJyYW5kIHtcbiAgICBmb250LXNpemU6ICRmb250LXNpemUtbGc7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB9XG59XG4iLCIvLyBBY2NvcmRpb25zXG4uYWNjb3JkaW9uIHtcbiAgaW5wdXQ6Y2hlY2tlZCB+LFxuICAmW29wZW5dIHtcbiAgICAmIC5hY2NvcmRpb24taGVhZGVyIHtcbiAgICAgIC5pY29uIHtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpO1xuICAgICAgfVxuICAgIH1cblxuICAgICYgLmFjY29yZGlvbi1ib2R5IHtcbiAgICAgIG1heC1oZWlnaHQ6IDUwcmVtO1xuICAgIH1cbiAgfVxuXG4gIC5hY2NvcmRpb24taGVhZGVyIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiAkdW5pdC0xICR1bml0LTI7XG5cbiAgICAuaWNvbiB7XG4gICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjI1cztcbiAgICB9XG4gIH1cblxuICAuYWNjb3JkaW9uLWJvZHkge1xuICAgIG1hcmdpbi1ib3R0b206ICRsYXlvdXQtc3BhY2luZztcbiAgICBtYXgtaGVpZ2h0OiAwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdHJhbnNpdGlvbjogbWF4LWhlaWdodCAuMjVzO1xuICB9XG59XG5cbi8vIFJlbW92ZSBkZWZhdWx0IGRldGFpbHMgbWFya2VyIGluIFdlYmtpdFxuc3VtbWFyeS5hY2NvcmRpb24taGVhZGVyIHtcbiAgJjo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlciB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuIiwiLy8gQXZhdGFyc1xuLmF2YXRhciB7XG4gIEBpbmNsdWRlIGF2YXRhci1iYXNlKCk7XG4gIGJhY2tncm91bmQ6ICRwcmltYXJ5LWNvbG9yO1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGNvbG9yOiByZ2JhKCRsaWdodC1jb2xvciwgLjg1KTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBmb250LXdlaWdodDogMzAwO1xuICBsaW5lLWhlaWdodDogMS4yNTtcbiAgbWFyZ2luOiAwO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cbiAgJi5hdmF0YXIteHMge1xuICAgIEBpbmNsdWRlIGF2YXRhci1iYXNlKCR1bml0LTQpO1xuICB9XG4gICYuYXZhdGFyLXNtIHtcbiAgICBAaW5jbHVkZSBhdmF0YXItYmFzZSgkdW5pdC02KTtcbiAgfVxuICAmLmF2YXRhci1sZyB7XG4gICAgQGluY2x1ZGUgYXZhdGFyLWJhc2UoJHVuaXQtMTIpO1xuICB9XG4gICYuYXZhdGFyLXhsIHtcbiAgICBAaW5jbHVkZSBhdmF0YXItYmFzZSgkdW5pdC0xNik7XG4gIH1cblxuICBpbWcge1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHotaW5kZXg6ICR6aW5kZXgtMDtcbiAgfVxuXG4gIC5hdmF0YXItaWNvbixcbiAgLmF2YXRhci1wcmVzZW5jZSB7XG4gICAgYmFja2dyb3VuZDogJGJnLWNvbG9yLWxpZ2h0O1xuICAgIGJvdHRvbTogMTQuNjQlO1xuICAgIGhlaWdodDogNTAlO1xuICAgIHBhZGRpbmc6ICRib3JkZXItd2lkdGgtbGc7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiAxNC42NCU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoNTAlLCA1MCUpO1xuICAgIHdpZHRoOiA1MCU7XG4gICAgei1pbmRleDogJHppbmRleC0wICsgMTtcbiAgfVxuXG4gIC5hdmF0YXItcHJlc2VuY2Uge1xuICAgIGJhY2tncm91bmQ6ICRncmF5LWNvbG9yO1xuICAgIGJveC1zaGFkb3c6IDAgMCAwICRib3JkZXItd2lkdGgtbGcgJGxpZ2h0LWNvbG9yO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBoZWlnaHQ6IC41ZW07XG4gICAgd2lkdGg6IC41ZW07XG5cbiAgICAmLm9ubGluZSB7XG4gICAgICBiYWNrZ3JvdW5kOiAkc3VjY2Vzcy1jb2xvcjtcbiAgICB9XG5cbiAgICAmLmJ1c3kge1xuICAgICAgYmFja2dyb3VuZDogJGVycm9yLWNvbG9yO1xuICAgIH1cblxuICAgICYuYXdheSB7XG4gICAgICBiYWNrZ3JvdW5kOiAkd2FybmluZy1jb2xvcjtcbiAgICB9XG4gIH1cblxuICAmW2RhdGEtaW5pdGlhbF06OmJlZm9yZSB7XG4gICAgY29sb3I6IGN1cnJlbnRDb2xvcjtcbiAgICBjb250ZW50OiBhdHRyKGRhdGEtaW5pdGlhbCk7XG4gICAgbGVmdDogNTAlO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDUwJTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICB6LWluZGV4OiAkemluZGV4LTA7XG4gIH1cbn0iLCIvLyBCYWRnZXNcbi5iYWRnZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuICAmW2RhdGEtYmFkZ2VdLFxuICAmOm5vdChbZGF0YS1iYWRnZV0pIHtcbiAgICAmOjphZnRlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAkcHJpbWFyeS1jb2xvcjtcbiAgICAgIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG4gICAgICBib3JkZXItcmFkaXVzOiAuNXJlbTtcbiAgICAgIGJveC1zaGFkb3c6IDAgMCAwIC4xcmVtICRiZy1jb2xvci1saWdodDtcbiAgICAgIGNvbG9yOiAkbGlnaHQtY29sb3I7XG4gICAgICBjb250ZW50OiBhdHRyKGRhdGEtYmFkZ2UpO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLS4wNXJlbSwgLS41cmVtKTtcbiAgICB9XG4gIH1cbiAgJltkYXRhLWJhZGdlXSB7XG4gICAgJjo6YWZ0ZXIge1xuICAgICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtO1xuICAgICAgaGVpZ2h0OiAuOXJlbTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgbWluLXdpZHRoOiAuOXJlbTtcbiAgICAgIHBhZGRpbmc6IC4xcmVtIC4ycmVtO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICB9XG4gIH1cbiAgJjpub3QoW2RhdGEtYmFkZ2VdKSxcbiAgJltkYXRhLWJhZGdlPVwiXCJdIHtcbiAgICAmOjphZnRlciB7XG4gICAgICBoZWlnaHQ6IDZweDtcbiAgICAgIG1pbi13aWR0aDogNnB4O1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIHdpZHRoOiA2cHg7XG4gICAgfVxuICB9XG5cbiAgLy8gQmFkZ2VzIGZvciBCdXR0b25zXG4gICYuYnRuIHtcbiAgICAmOjphZnRlciB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDA7XG4gICAgICByaWdodDogMDtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDUwJSwgLTUwJSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQmFkZ2VzIGZvciBBdmF0YXJzXG4gICYuYXZhdGFyIHtcbiAgICAmOjphZnRlciB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDE0LjY0JTtcbiAgICAgIHJpZ2h0OiAxNC42NCU7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg1MCUsIC01MCUpO1xuICAgICAgei1pbmRleDogJHppbmRleC0xO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQnJlYWRjcnVtYnNcbi5icmVhZGNydW1iIHtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgbWFyZ2luOiAkdW5pdC0xIDA7XG4gIHBhZGRpbmc6ICR1bml0LTEgMDtcblxuICAuYnJlYWRjcnVtYi1pdGVtIHtcbiAgICBjb2xvcjogJGdyYXktY29sb3ItZGFyaztcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6ICR1bml0LTEgMDtcblxuICAgICY6bm90KDpsYXN0LWNoaWxkKSB7XG4gICAgICBtYXJnaW4tcmlnaHQ6ICR1bml0LTE7XG5cbiAgICAgIGEge1xuICAgICAgICBjb2xvcjogJGdyYXktY29sb3ItZGFyaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOm5vdCg6Zmlyc3QtY2hpbGQpIHtcbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIGNvbG9yOiAkZ3JheS1jb2xvci1kYXJrO1xuICAgICAgICBjb250ZW50OiBcIi9cIjtcbiAgICAgICAgcGFkZGluZy1yaWdodDogJHVuaXQtMjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIEJhcnNcbi5iYXIge1xuICBiYWNrZ3JvdW5kOiAkYmctY29sb3ItZGFyaztcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogbm93cmFwO1xuICBoZWlnaHQ6ICR1bml0LTQ7XG4gIHdpZHRoOiAxMDAlO1xuXG4gICYuYmFyLXNtIHtcbiAgICBoZWlnaHQ6ICR1bml0LTE7XG4gIH1cblxuICAvLyBUT0RPOiBhdHRyKCkgc3VwcG9ydFxuICAuYmFyLWl0ZW0ge1xuICAgIGJhY2tncm91bmQ6ICRwcmltYXJ5LWNvbG9yO1xuICAgIGNvbG9yOiAkbGlnaHQtY29sb3I7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtO1xuICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIGxpbmUtaGVpZ2h0OiAkdW5pdC00O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHdpZHRoOiAwO1xuXG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIH1cbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgICAgZmxleC1zaHJpbms6IDE7XG4gICAgfVxuICB9XG59XG5cbi8vIFNsaWRlciBiYXJcbi5iYXItc2xpZGVyIHtcbiAgaGVpZ2h0OiAkYm9yZGVyLXdpZHRoLWxnO1xuICBtYXJnaW46ICRsYXlvdXQtc3BhY2luZyAwO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgLmJhci1pdGVtIHtcbiAgICBsZWZ0OiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICY6bm90KDpsYXN0LWNoaWxkKTpmaXJzdC1jaGlsZCB7XG4gICAgICBiYWNrZ3JvdW5kOiAkYmctY29sb3ItZGFyaztcbiAgICAgIHotaW5kZXg6ICR6aW5kZXgtMDtcbiAgICB9XG4gIH1cblxuICAuYmFyLXNsaWRlci1idG4ge1xuICAgIGJhY2tncm91bmQ6ICRwcmltYXJ5LWNvbG9yO1xuICAgIGJvcmRlcjogMDtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgaGVpZ2h0OiAkdW5pdC0zO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiAwO1xuICAgIHRvcDogNTAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDUwJSwgLTUwJSk7XG4gICAgd2lkdGg6ICR1bml0LTM7XG5cbiAgICAmOmFjdGl2ZSB7XG4gICAgICBib3gtc2hhZG93OiAwIDAgMCAuMXJlbSAkcHJpbWFyeS1jb2xvcjtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENhcmRzXG4uY2FyZCB7XG4gIGJhY2tncm91bmQ6ICRiZy1jb2xvci1saWdodDtcbiAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRib3JkZXItY29sb3I7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXG4gIC5jYXJkLWhlYWRlcixcbiAgLmNhcmQtYm9keSxcbiAgLmNhcmQtZm9vdGVyIHtcbiAgICBwYWRkaW5nOiAkbGF5b3V0LXNwYWNpbmctbGc7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG5cbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgcGFkZGluZy1ib3R0b206ICRsYXlvdXQtc3BhY2luZy1sZztcbiAgICB9XG4gIH1cblxuICAuY2FyZC1ib2R5IHtcbiAgICBmbGV4OiAxIDEgYXV0bztcbiAgfVxuXG4gIC5jYXJkLWltYWdlIHtcbiAgICBwYWRkaW5nLXRvcDogJGxheW91dC1zcGFjaW5nLWxnO1xuXG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICBwYWRkaW5nLXRvcDogMDtcblxuICAgICAgaW1nIHtcbiAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgaW1nIHtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIENoaXBzXG4uY2hpcCB7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJhY2tncm91bmQ6ICRiZy1jb2xvci1kYXJrO1xuICBib3JkZXItcmFkaXVzOiA1cmVtO1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgZm9udC1zaXplOiA5MCU7XG4gIGhlaWdodDogJHVuaXQtNjtcbiAgbGluZS1oZWlnaHQ6ICR1bml0LTQ7XG4gIG1hcmdpbjogJHVuaXQtaDtcbiAgbWF4LXdpZHRoOiAkY29udHJvbC13aWR0aC1zbTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcGFkZGluZzogJHVuaXQtMSAkdW5pdC0yO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gICYuYWN0aXZlIHtcbiAgICBiYWNrZ3JvdW5kOiAkcHJpbWFyeS1jb2xvcjtcbiAgICBjb2xvcjogJGxpZ2h0LWNvbG9yO1xuICB9XG5cbiAgLmF2YXRhciB7XG4gICAgbWFyZ2luLWxlZnQ6IC0kdW5pdC0yO1xuICAgIG1hcmdpbi1yaWdodDogJHVuaXQtMTtcbiAgfVxuXG4gIC5idG4tY2xlYXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKC43NSk7XG4gIH1cbn1cbiIsIi8vIERyb3Bkb3duXG4uZHJvcGRvd24ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAubWVudSB7XG4gICAgYW5pbWF0aW9uOiBzbGlkZS1kb3duIC4xNXMgZWFzZSAxO1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgbGVmdDogMDtcbiAgICBtYXgtaGVpZ2h0OiA1MHZoO1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMTAwJTtcbiAgfVxuXG4gICYuZHJvcGRvd24tcmlnaHQge1xuICAgIC5tZW51IHtcbiAgICAgIGxlZnQ6IGF1dG87XG4gICAgICByaWdodDogMDtcbiAgICB9XG4gIH1cblxuICAmLmFjdGl2ZSAubWVudSxcbiAgLmRyb3Bkb3duLXRvZ2dsZTpmb2N1cyArIC5tZW51LFxuICAubWVudTpob3ZlciB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cblxuICAvLyBGaXggZHJvcGRvd24tdG9nZ2xlIGJvcmRlciByYWRpdXMgaW4gYnV0dG9uIGdyb3Vwc1xuICAuYnRuLWdyb3VwIHtcbiAgICAuZHJvcGRvd24tdG9nZ2xlOm50aC1sYXN0LWNoaWxkKDIpIHtcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEVtcHR5IHN0YXRlcyAob3IgQmxhbmsgc2xhdGVzKVxuLmVtcHR5IHtcbiAgYmFja2dyb3VuZDogJGJnLWNvbG9yO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgY29sb3I6ICRncmF5LWNvbG9yLWRhcms7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgcGFkZGluZzogJHVuaXQtMTYgJHVuaXQtODtcblxuICAuZW1wdHktaWNvbiB7XG4gICAgbWFyZ2luLWJvdHRvbTogJGxheW91dC1zcGFjaW5nLWxnO1xuICB9XG5cbiAgLmVtcHR5LXRpdGxlLFxuICAuZW1wdHktc3VidGl0bGUge1xuICAgIG1hcmdpbjogJGxheW91dC1zcGFjaW5nIGF1dG87XG4gIH1cblxuICAuZW1wdHktYWN0aW9uIHtcbiAgICBtYXJnaW4tdG9wOiAkbGF5b3V0LXNwYWNpbmctbGc7XG4gIH1cbn1cbiIsIi8vIE1lbnVzXG4ubWVudSB7XG4gIEBpbmNsdWRlIHNoYWRvdy12YXJpYW50KC4wNXJlbSk7XG4gIGJhY2tncm91bmQ6ICRiZy1jb2xvci1saWdodDtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIG1hcmdpbjogMDtcbiAgbWluLXdpZHRoOiAkY29udHJvbC13aWR0aC14cztcbiAgcGFkZGluZzogJHVuaXQtMjtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKCRsYXlvdXQtc3BhY2luZy1zbSk7XG4gIHotaW5kZXg6ICR6aW5kZXgtMztcblxuICAmLm1lbnUtbmF2IHtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICB9XG5cbiAgLm1lbnUtaXRlbSB7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBwYWRkaW5nOiAwICR1bml0LTI7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblxuICAgICYgPiBhIHtcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgICAgY29sb3I6IGluaGVyaXQ7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIG1hcmdpbjogMCAoLSR1bml0LTIpO1xuICAgICAgcGFkZGluZzogJHVuaXQtMSAkdW5pdC0yO1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgJjpmb2N1cyxcbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkc2Vjb25kYXJ5LWNvbG9yO1xuICAgICAgICBjb2xvcjogJHByaW1hcnktY29sb3I7XG4gICAgICB9XG4gICAgICAmOmFjdGl2ZSxcbiAgICAgICYuYWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogJHNlY29uZGFyeS1jb2xvcjtcbiAgICAgICAgY29sb3I6ICRwcmltYXJ5LWNvbG9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5mb3JtLWNoZWNrYm94LFxuICAgIC5mb3JtLXJhZGlvLFxuICAgIC5mb3JtLXN3aXRjaCB7XG4gICAgICBtYXJnaW46ICR1bml0LWggMDtcbiAgICB9XG5cbiAgICAmICsgLm1lbnUtaXRlbSB7XG4gICAgICBtYXJnaW4tdG9wOiAkdW5pdC0xO1xuICAgIH1cbiAgfVxuXG4gIC5tZW51LWJhZGdlIHtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICByaWdodDogMDtcbiAgICB0b3A6IDA7XG5cbiAgICAubGFiZWwge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAkdW5pdC0yO1xuICAgIH1cbiAgfVxufSIsIi8vIE1vZGFsc1xuLm1vZGFsIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYm90dG9tOiAwO1xuICBkaXNwbGF5OiBub25lO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbGVmdDogMDtcbiAgb3BhY2l0eTogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcGFkZGluZzogJGxheW91dC1zcGFjaW5nO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHJpZ2h0OiAwO1xuICB0b3A6IDA7XG5cbiAgJjp0YXJnZXQsXG4gICYuYWN0aXZlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIG9wYWNpdHk6IDE7XG4gICAgei1pbmRleDogJHppbmRleC00O1xuXG4gICAgLm1vZGFsLW92ZXJsYXkge1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgkYmctY29sb3IsIC43NSk7XG4gICAgICBib3R0b206IDA7XG4gICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGxlZnQ6IDA7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICByaWdodDogMDtcbiAgICAgIHRvcDogMDtcbiAgICB9XG5cbiAgICAubW9kYWwtY29udGFpbmVyIHtcbiAgICAgIGFuaW1hdGlvbjogc2xpZGUtZG93biAuMnMgZWFzZSAxO1xuICAgICAgei1pbmRleDogJHppbmRleC0wO1xuICAgIH1cbiAgfVxuXG4gICYubW9kYWwtc20ge1xuICAgIC5tb2RhbC1jb250YWluZXIge1xuICAgICAgbWF4LXdpZHRoOiAkY29udHJvbC13aWR0aC1zbTtcbiAgICAgIHBhZGRpbmc6IDAgJHVuaXQtMjtcbiAgICB9XG4gIH1cblxuICAmLm1vZGFsLWxnIHtcbiAgICAubW9kYWwtb3ZlcmxheSB7XG4gICAgICBiYWNrZ3JvdW5kOiAkYmctY29sb3ItbGlnaHQ7XG4gICAgfVxuXG4gICAgLm1vZGFsLWNvbnRhaW5lciB7XG4gICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgbWF4LXdpZHRoOiAkY29udHJvbC13aWR0aC1sZztcbiAgICB9XG4gIH1cbn1cblxuLm1vZGFsLWNvbnRhaW5lciB7XG4gIEBpbmNsdWRlIHNoYWRvdy12YXJpYW50KC4ycmVtKTtcbiAgYmFja2dyb3VuZDogJGJnLWNvbG9yLWxpZ2h0O1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgbWF4LWhlaWdodDogNzV2aDtcbiAgbWF4LXdpZHRoOiAkY29udHJvbC13aWR0aC1tZDtcbiAgcGFkZGluZzogMCAkdW5pdC00O1xuICB3aWR0aDogMTAwJTtcblxuICAmLm1vZGFsLWZ1bGxoZWlnaHQge1xuICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICB9XG5cbiAgLm1vZGFsLWhlYWRlciB7XG4gICAgY29sb3I6ICRkYXJrLWNvbG9yO1xuICAgIHBhZGRpbmc6ICR1bml0LTQ7XG4gIH1cblxuICAubW9kYWwtYm9keSB7XG4gICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICBwYWRkaW5nOiAkdW5pdC00O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgfVxuXG4gIC5tb2RhbC1mb290ZXIge1xuICAgIHBhZGRpbmc6ICR1bml0LTQ7XG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gIH1cbn1cbiIsIi8vIE5hdnNcbi5uYXYge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBtYXJnaW46ICR1bml0LTEgMDtcblxuICAubmF2LWl0ZW0ge1xuICAgIGEge1xuICAgICAgY29sb3I6ICRncmF5LWNvbG9yLWRhcms7XG4gICAgICBwYWRkaW5nOiAkdW5pdC0xICR1bml0LTI7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAmOmZvY3VzLFxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcbiAgICAgIH1cbiAgICB9XG4gICAgJi5hY3RpdmUge1xuICAgICAgJiA+IGEge1xuICAgICAgICBjb2xvcjogZGFya2VuKCRncmF5LWNvbG9yLWRhcmssIDEwJSk7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgICAmOmZvY3VzLFxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICBjb2xvcjogJHByaW1hcnktY29sb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmIC5uYXYge1xuICAgIG1hcmdpbi1ib3R0b206ICR1bml0LTI7XG4gICAgbWFyZ2luLWxlZnQ6ICR1bml0LTQ7XG4gIH1cbn1cbiIsIi8vIFBhZ2luYXRpb25cbi5wYWdpbmF0aW9uIHtcbiAgZGlzcGxheTogZmxleDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgbWFyZ2luOiAkdW5pdC0xIDA7XG4gIHBhZGRpbmc6ICR1bml0LTEgMDtcblxuICAucGFnZS1pdGVtIHtcbiAgICBtYXJnaW46ICR1bml0LTEgJHVuaXQtbztcblxuICAgIHNwYW4ge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgcGFkZGluZzogJHVuaXQtMSAkdW5pdC0xO1xuICAgIH1cblxuICAgIGEge1xuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBwYWRkaW5nOiAkdW5pdC0xICR1bml0LTI7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAmOmZvY3VzLFxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLmRpc2FibGVkIHtcbiAgICAgIGEge1xuICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgIG9wYWNpdHk6IC41O1xuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLmFjdGl2ZSB7XG4gICAgICBhIHtcbiAgICAgICAgYmFja2dyb3VuZDogJHByaW1hcnktY29sb3I7XG4gICAgICAgIGNvbG9yOiAkbGlnaHQtY29sb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5wYWdlLXByZXYsXG4gICAgJi5wYWdlLW5leHQge1xuICAgICAgZmxleDogMSAwIDUwJTtcbiAgICB9XG5cbiAgICAmLnBhZ2UtbmV4dCB7XG4gICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICB9XG5cbiAgICAucGFnZS1pdGVtLXRpdGxlIHtcbiAgICAgIG1hcmdpbjogMDtcbiAgICB9XG5cbiAgICAucGFnZS1pdGVtLXN1YnRpdGxlIHtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIG9wYWNpdHk6IC41O1xuICAgIH1cbiAgfVxufVxuIiwiLy8gUGFuZWxzXG4ucGFuZWwge1xuICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgJGJvcmRlci1jb2xvcjtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgLnBhbmVsLWhlYWRlcixcbiAgLnBhbmVsLWZvb3RlciB7XG4gICAgZmxleDogMCAwIGF1dG87XG4gICAgcGFkZGluZzogJGxheW91dC1zcGFjaW5nLWxnO1xuICB9XG5cbiAgLnBhbmVsLW5hdiB7XG4gICAgZmxleDogMCAwIGF1dG87XG4gIH1cblxuICAucGFuZWwtYm9keSB7XG4gICAgZmxleDogMSAxIGF1dG87XG4gICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICBwYWRkaW5nOiAwICRsYXlvdXQtc3BhY2luZy1sZztcbiAgfVxufVxuIiwiLy8gUG9wb3ZlcnNcbi5wb3BvdmVyIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgLnBvcG92ZXItY29udGFpbmVyIHtcbiAgICBsZWZ0OiA1MCU7XG4gICAgb3BhY2l0eTogMDtcbiAgICBwYWRkaW5nOiAkbGF5b3V0LXNwYWNpbmc7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSBzY2FsZSgwKTtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjJzO1xuICAgIHdpZHRoOiAkY29udHJvbC13aWR0aC1zbTtcbiAgICB6LWluZGV4OiAkemluZGV4LTM7XG4gIH1cblxuICAqOmZvY3VzICsgLnBvcG92ZXItY29udGFpbmVyLFxuICAmOmhvdmVyIC5wb3BvdmVyLWNvbnRhaW5lciB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtMTAwJSkgc2NhbGUoMSk7XG4gIH1cblxuICAmLnBvcG92ZXItcmlnaHQge1xuICAgIC5wb3BvdmVyLWNvbnRhaW5lciB7XG4gICAgICBsZWZ0OiAxMDAlO1xuICAgICAgdG9wOiA1MCU7XG4gICAgfVxuXG4gICAgKjpmb2N1cyArIC5wb3BvdmVyLWNvbnRhaW5lcixcbiAgICAmOmhvdmVyIC5wb3BvdmVyLWNvbnRhaW5lciB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtNTAlKSBzY2FsZSgxKTtcbiAgICB9XG4gIH1cblxuICAmLnBvcG92ZXItYm90dG9tIHtcbiAgICAucG9wb3Zlci1jb250YWluZXIge1xuICAgICAgbGVmdDogNTAlO1xuICAgICAgdG9wOiAxMDAlO1xuICAgIH1cblxuICAgICo6Zm9jdXMgKyAucG9wb3Zlci1jb250YWluZXIsXG4gICAgJjpob3ZlciAucG9wb3Zlci1jb250YWluZXIge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgMCkgc2NhbGUoMSk7XG4gICAgfVxuICB9XG5cbiAgJi5wb3BvdmVyLWxlZnQge1xuICAgIC5wb3BvdmVyLWNvbnRhaW5lciB7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgdG9wOiA1MCU7XG4gICAgfVxuXG4gICAgKjpmb2N1cyArIC5wb3BvdmVyLWNvbnRhaW5lcixcbiAgICAmOmhvdmVyIC5wb3BvdmVyLWNvbnRhaW5lciB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMTAwJSwgLTUwJSkgc2NhbGUoMSk7XG4gICAgfVxuICB9XG5cbiAgLmNhcmQge1xuICAgIEBpbmNsdWRlIHNoYWRvdy12YXJpYW50KC4ycmVtKTtcbiAgICBib3JkZXI6IDA7XG4gIH1cbn1cbiIsIi8vIFN0ZXBzXG4uc3RlcCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogbm93cmFwO1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBtYXJnaW46ICR1bml0LTEgMDtcbiAgd2lkdGg6IDEwMCU7XG5cbiAgLnN0ZXAtaXRlbSB7XG4gICAgZmxleDogMSAxIDA7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBtaW4taGVpZ2h0OiAxcmVtO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAmOm5vdCg6Zmlyc3QtY2hpbGQpOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZDogJHByaW1hcnktY29sb3I7XG4gICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgaGVpZ2h0OiAycHg7XG4gICAgICBsZWZ0OiAtNTAlO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiA5cHg7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG5cbiAgICBhIHtcbiAgICAgIGNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHBhZGRpbmc6IDIwcHggMTBweCAwO1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkcHJpbWFyeS1jb2xvcjtcbiAgICAgICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoLWxnIHNvbGlkICRsaWdodC1jb2xvcjtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgaGVpZ2h0OiAkdW5pdC0zO1xuICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAkdW5pdC0xO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gICAgICAgIHdpZHRoOiAkdW5pdC0zO1xuICAgICAgICB6LWluZGV4OiAkemluZGV4LTA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5hY3RpdmUge1xuICAgICAgYSB7XG4gICAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgICAgYmFja2dyb3VuZDogJGxpZ2h0LWNvbG9yO1xuICAgICAgICAgIGJvcmRlcjogJGJvcmRlci13aWR0aC1sZyBzb2xpZCAkcHJpbWFyeS1jb2xvcjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmIH4gLnN0ZXAtaXRlbSB7XG4gICAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgICAgYmFja2dyb3VuZDogJGJvcmRlci1jb2xvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGEge1xuICAgICAgICAgIGNvbG9yOiAkZ3JheS1jb2xvcjtcblxuICAgICAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAkYm9yZGVyLWNvbG9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gVGlsZXNcbi50aWxlIHtcbiAgYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gIGRpc3BsYXk6IGZsZXg7XG5cbiAgLnRpbGUtaWNvbixcbiAgLnRpbGUtYWN0aW9uIHtcbiAgICBmbGV4OiAwIDAgYXV0bztcbiAgfVxuICAudGlsZS1jb250ZW50IHtcbiAgICBmbGV4OiAxIDEgYXV0bztcbiAgICAmOm5vdCg6Zmlyc3QtY2hpbGQpIHtcbiAgICAgIHBhZGRpbmctbGVmdDogJHVuaXQtMjtcbiAgICB9XG4gICAgJjpub3QoOmxhc3QtY2hpbGQpIHtcbiAgICAgIHBhZGRpbmctcmlnaHQ6ICR1bml0LTI7XG4gICAgfVxuICB9XG4gIC50aWxlLXRpdGxlLFxuICAudGlsZS1zdWJ0aXRsZSB7XG4gICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodDtcbiAgfVxuXG4gICYudGlsZS1jZW50ZXJlZCB7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICAgIC50aWxlLWNvbnRlbnQge1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB9XG5cbiAgICAudGlsZS10aXRsZSxcbiAgICAudGlsZS1zdWJ0aXRsZSB7XG4gICAgICBAaW5jbHVkZSB0ZXh0LWVsbGlwc2lzKCk7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gVG9hc3RzXG4udG9hc3Qge1xuICBAaW5jbHVkZSB0b2FzdC12YXJpYW50KCRkYXJrLWNvbG9yKTtcbiAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRkYXJrLWNvbG9yO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgY29sb3I6ICRsaWdodC1jb2xvcjtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6ICRsYXlvdXQtc3BhY2luZztcbiAgd2lkdGg6IDEwMCU7XG5cbiAgJi50b2FzdC1wcmltYXJ5IHtcbiAgICBAaW5jbHVkZSB0b2FzdC12YXJpYW50KCRwcmltYXJ5LWNvbG9yKTtcbiAgfVxuXG4gICYudG9hc3Qtc3VjY2VzcyB7XG4gICAgQGluY2x1ZGUgdG9hc3QtdmFyaWFudCgkc3VjY2Vzcy1jb2xvcik7XG4gIH1cblxuICAmLnRvYXN0LXdhcm5pbmcge1xuICAgIEBpbmNsdWRlIHRvYXN0LXZhcmlhbnQoJHdhcm5pbmctY29sb3IpO1xuICB9XG5cbiAgJi50b2FzdC1lcnJvciB7XG4gICAgQGluY2x1ZGUgdG9hc3QtdmFyaWFudCgkZXJyb3ItY29sb3IpO1xuICB9XG5cbiAgYSB7XG4gICAgY29sb3I6ICRsaWdodC1jb2xvcjtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgICBcbiAgICAmOmZvY3VzLFxuICAgICY6aG92ZXIsXG4gICAgJjphY3RpdmUsXG4gICAgJi5hY3RpdmUge1xuICAgICAgb3BhY2l0eTogLjc1O1xuICAgIH1cbiAgfVxuXG4gIC5idG4tY2xlYXIge1xuICAgIG1hcmdpbjogJHVuaXQtaDtcbiAgfVxuXG4gIHAge1xuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gVG9vbHRpcHNcbi50b29sdGlwIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAmOjphZnRlciB7XG4gICAgYmFja2dyb3VuZDogcmdiYSgkZGFyay1jb2xvciwgLjk1KTtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBib3R0b206IDEwMCU7XG4gICAgY29sb3I6ICRsaWdodC1jb2xvcjtcbiAgICBjb250ZW50OiBhdHRyKGRhdGEtdG9vbHRpcCk7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtO1xuICAgIGxlZnQ6IDUwJTtcbiAgICBtYXgtd2lkdGg6ICRjb250cm9sLXdpZHRoLXNtO1xuICAgIG9wYWNpdHk6IDA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBwYWRkaW5nOiAkdW5pdC0xICR1bml0LTI7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsICR1bml0LTIpO1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgLjJzLCB0cmFuc2Zvcm0gLjJzO1xuICAgIHdoaXRlLXNwYWNlOiBwcmU7XG4gICAgei1pbmRleDogJHppbmRleC0zO1xuICB9XG4gICY6Zm9jdXMsXG4gICY6aG92ZXIge1xuICAgICY6OmFmdGVyIHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtJHVuaXQtMSk7XG4gICAgfVxuICB9XG4gICZbZGlzYWJsZWRdLFxuICAmLmRpc2FibGVkIHtcbiAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgfVxuXG4gICYudG9vbHRpcC1yaWdodCB7XG4gICAgJjo6YWZ0ZXIge1xuICAgICAgYm90dG9tOiA1MCU7XG4gICAgICBsZWZ0OiAxMDAlO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLSR1bml0LTEsIDUwJSk7XG4gICAgfVxuICAgICY6Zm9jdXMsXG4gICAgJjpob3ZlciB7XG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKCR1bml0LTEsIDUwJSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJi50b29sdGlwLWJvdHRvbSB7XG4gICAgJjo6YWZ0ZXIge1xuICAgICAgYm90dG9tOiBhdXRvO1xuICAgICAgdG9wOiAxMDAlO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLSR1bml0LTIpO1xuICAgIH1cbiAgICAmOmZvY3VzLFxuICAgICY6aG92ZXIge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAkdW5pdC0xKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgXG4gICYudG9vbHRpcC1sZWZ0IHtcbiAgICAmOjphZnRlciB7XG4gICAgICBib3R0b206IDUwJTtcbiAgICAgIGxlZnQ6IGF1dG87XG4gICAgICByaWdodDogMTAwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKCR1bml0LTIsIDUwJSk7XG4gICAgfVxuICAgICY6Zm9jdXMsXG4gICAgJjpob3ZlciB7XG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC0kdW5pdC0xLCA1MCUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gQW5pbWF0aW9uc1xuQGtleWZyYW1lcyBsb2FkaW5nIHtcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB9XG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBzbGlkZS1kb3duIHtcbiAgMCUge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0kdW5pdC04KTtcbiAgfVxuICAxMDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbiAgfVxufVxuIiwiQGltcG9ydCBcInV0aWxpdGllcy9jb2xvcnNcIjtcbkBpbXBvcnQgXCJ1dGlsaXRpZXMvY3Vyc29yc1wiO1xuQGltcG9ydCBcInV0aWxpdGllcy9kaXNwbGF5XCI7XG5AaW1wb3J0IFwidXRpbGl0aWVzL2RpdmlkZXJcIjtcbkBpbXBvcnQgXCJ1dGlsaXRpZXMvbG9hZGluZ1wiO1xuQGltcG9ydCBcInV0aWxpdGllcy9wb3NpdGlvblwiO1xuQGltcG9ydCBcInV0aWxpdGllcy9zaGFwZXNcIjtcbkBpbXBvcnQgXCJ1dGlsaXRpZXMvdGV4dFwiO1xuIiwiLy8gVGV4dCBjb2xvcnNcbkBpbmNsdWRlIHRleHQtY29sb3ItdmFyaWFudChcIi50ZXh0LXByaW1hcnlcIiwgJHByaW1hcnktY29sb3IpO1xuXG5AaW5jbHVkZSB0ZXh0LWNvbG9yLXZhcmlhbnQoXCIudGV4dC1zZWNvbmRhcnlcIiwgJHNlY29uZGFyeS1jb2xvci1kYXJrKTtcblxuQGluY2x1ZGUgdGV4dC1jb2xvci12YXJpYW50KFwiLnRleHQtZ3JheVwiLCAkZ3JheS1jb2xvcik7XG5cbkBpbmNsdWRlIHRleHQtY29sb3ItdmFyaWFudChcIi50ZXh0LWxpZ2h0XCIsICRsaWdodC1jb2xvcik7XG5cbkBpbmNsdWRlIHRleHQtY29sb3ItdmFyaWFudChcIi50ZXh0LWRhcmtcIiwgJGJvZHktZm9udC1jb2xvcik7XG5cbkBpbmNsdWRlIHRleHQtY29sb3ItdmFyaWFudChcIi50ZXh0LXN1Y2Nlc3NcIiwgJHN1Y2Nlc3MtY29sb3IpO1xuXG5AaW5jbHVkZSB0ZXh0LWNvbG9yLXZhcmlhbnQoXCIudGV4dC13YXJuaW5nXCIsICR3YXJuaW5nLWNvbG9yKTtcblxuQGluY2x1ZGUgdGV4dC1jb2xvci12YXJpYW50KFwiLnRleHQtZXJyb3JcIiwgJGVycm9yLWNvbG9yKTtcblxuLy8gQmFja2dyb3VuZCBjb2xvcnNcbkBpbmNsdWRlIGJnLWNvbG9yLXZhcmlhbnQoXCIuYmctcHJpbWFyeVwiLCAkcHJpbWFyeS1jb2xvcik7XG5cbkBpbmNsdWRlIGJnLWNvbG9yLXZhcmlhbnQoXCIuYmctc2Vjb25kYXJ5XCIsICRzZWNvbmRhcnktY29sb3IpO1xuXG5AaW5jbHVkZSBiZy1jb2xvci12YXJpYW50KFwiLmJnLWRhcmtcIiwgJGRhcmstY29sb3IpO1xuXG5AaW5jbHVkZSBiZy1jb2xvci12YXJpYW50KFwiLmJnLWdyYXlcIiwgJGJnLWNvbG9yKTtcblxuQGluY2x1ZGUgYmctY29sb3ItdmFyaWFudChcIi5iZy1zdWNjZXNzXCIsICRzdWNjZXNzLWNvbG9yKTtcblxuQGluY2x1ZGUgYmctY29sb3ItdmFyaWFudChcIi5iZy13YXJuaW5nXCIsICR3YXJuaW5nLWNvbG9yKTtcblxuQGluY2x1ZGUgYmctY29sb3ItdmFyaWFudChcIi5iZy1lcnJvclwiLCAkZXJyb3ItY29sb3IpO1xuIiwiLy8gQ3Vyc29yc1xuLmMtaGFuZCB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLmMtbW92ZSB7XG4gIGN1cnNvcjogbW92ZTtcbn1cblxuLmMtem9vbS1pbiB7XG4gIGN1cnNvcjogem9vbS1pbjtcbn1cblxuLmMtem9vbS1vdXQge1xuICBjdXJzb3I6IHpvb20tb3V0O1xufVxuXG4uYy1ub3QtYWxsb3dlZCB7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG5cbi5jLWF1dG8ge1xuICBjdXJzb3I6IGF1dG87XG59IiwiLy8gRGlzcGxheVxuLmQtYmxvY2sge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbi5kLWlubGluZSB7XG4gIGRpc3BsYXk6IGlubGluZTtcbn1cbi5kLWlubGluZS1ibG9jayB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cbi5kLWZsZXgge1xuICBkaXNwbGF5OiBmbGV4O1xufVxuLmQtaW5saW5lLWZsZXgge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbn1cbi5kLW5vbmUsXG4uZC1oaWRlIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuLmQtdmlzaWJsZSB7XG4gIHZpc2liaWxpdHk6IHZpc2libGU7XG59XG4uZC1pbnZpc2libGUge1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG59XG4udGV4dC1oaWRlIHtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogMDtcbiAgY29sb3I6IHRyYW5zcGFyZW50O1xuICBmb250LXNpemU6IDA7XG4gIGxpbmUtaGVpZ2h0OiAwO1xuICB0ZXh0LXNoYWRvdzogbm9uZTtcbn1cbi50ZXh0LWFzc2lzdGl2ZSB7XG4gIGJvcmRlcjogMDtcbiAgY2xpcDogcmVjdCgwLDAsMCwwKTtcbiAgaGVpZ2h0OiAxcHg7XG4gIG1hcmdpbjogLTFweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcGFkZGluZzogMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMXB4O1xufVxuIiwiLy8gRGl2aWRlclxuLmRpdmlkZXIsXG4uZGl2aWRlci12ZXJ0IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAmW2RhdGEtY29udGVudF06OmFmdGVyIHtcbiAgICBiYWNrZ3JvdW5kOiAkYmctY29sb3ItbGlnaHQ7XG4gICAgY29sb3I6ICRncmF5LWNvbG9yO1xuICAgIGNvbnRlbnQ6IGF0dHIoZGF0YS1jb250ZW50KTtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtO1xuICAgIHBhZGRpbmc6IDAgJHVuaXQtMjtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLSRmb250LXNpemUtc20gKyAkYm9yZGVyLXdpZHRoKTtcbiAgfVxufVxuXG4uZGl2aWRlciB7XG4gIGJvcmRlci10b3A6ICRib3JkZXItd2lkdGggc29saWQgJGJvcmRlci1jb2xvci1saWdodDtcbiAgaGVpZ2h0OiAkYm9yZGVyLXdpZHRoO1xuICBtYXJnaW46ICR1bml0LTIgMDtcblxuICAmW2RhdGEtY29udGVudF0ge1xuICAgIG1hcmdpbjogJHVuaXQtNCAwO1xuICB9XG59XG5cbi5kaXZpZGVyLXZlcnQge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogJHVuaXQtNDtcblxuICAmOjpiZWZvcmUge1xuICAgIGJvcmRlci1sZWZ0OiAkYm9yZGVyLXdpZHRoIHNvbGlkICRib3JkZXItY29sb3I7XG4gICAgYm90dG9tOiAkdW5pdC0yO1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbGVmdDogNTAlO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6ICR1bml0LTI7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICB9XG5cbiAgJltkYXRhLWNvbnRlbnRdOjphZnRlciB7XG4gICAgbGVmdDogNTAlO1xuICAgIHBhZGRpbmc6ICR1bml0LTEgMDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiA1MCU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gIH1cbn1cbiIsIi8vIExvYWRpbmdcbi5sb2FkaW5nIHtcbiAgY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gIG1pbi1oZWlnaHQ6ICR1bml0LTQ7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICY6OmFmdGVyIHtcbiAgICBhbmltYXRpb246IGxvYWRpbmcgNTAwbXMgaW5maW5pdGUgbGluZWFyO1xuICAgIGJvcmRlcjogJGJvcmRlci13aWR0aC1sZyBzb2xpZCAkcHJpbWFyeS1jb2xvcjtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBib3JkZXItdG9wLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBjb250ZW50OiBcIlwiO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGhlaWdodDogJHVuaXQtNDtcbiAgICBsZWZ0OiA1MCU7XG4gICAgbWFyZ2luLWxlZnQ6IC0kdW5pdC0yO1xuICAgIG1hcmdpbi10b3A6IC0kdW5pdC0yO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDUwJTtcbiAgICB3aWR0aDogJHVuaXQtNDtcbiAgICB6LWluZGV4OiAkemluZGV4LTA7XG4gIH1cblxuICAmLmxvYWRpbmctbGcge1xuICAgIG1pbi1oZWlnaHQ6ICR1bml0LTEwO1xuICAgICY6OmFmdGVyIHtcbiAgICAgIGhlaWdodDogJHVuaXQtODtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtJHVuaXQtNDtcbiAgICAgIG1hcmdpbi10b3A6IC0kdW5pdC00O1xuICAgICAgd2lkdGg6ICR1bml0LTg7XG4gICAgfVxuICB9XG59XG4iLCIvLyBQb3NpdGlvblxuLmNsZWFyZml4IHtcbiAgQGluY2x1ZGUgY2xlYXJmaXgoKTtcbn1cblxuLmZsb2F0LWxlZnQge1xuICBmbG9hdDogbGVmdCAhaW1wb3J0YW50O1xufVxuXG4uZmxvYXQtcmlnaHQge1xuICBmbG9hdDogcmlnaHQgIWltcG9ydGFudDtcbn1cblxuLnAtcmVsYXRpdmUge1xuICBwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDtcbn1cblxuLnAtYWJzb2x1dGUge1xuICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDtcbn1cblxuLnAtZml4ZWQge1xuICBwb3NpdGlvbjogZml4ZWQgIWltcG9ydGFudDtcbn1cblxuLnAtc3RpY2t5IHtcbiAgcG9zaXRpb246IHN0aWNreSAhaW1wb3J0YW50O1xufVxuXG4ucC1jZW50ZXJlZCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmbG9hdDogbm9uZTtcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbn1cblxuLmZsZXgtY2VudGVyZWQge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLy8gU3BhY2luZ1xuQGluY2x1ZGUgbWFyZ2luLXZhcmlhbnQoMCwgMCk7XG5cbkBpbmNsdWRlIG1hcmdpbi12YXJpYW50KDEsICR1bml0LTEpO1xuXG5AaW5jbHVkZSBtYXJnaW4tdmFyaWFudCgyLCAkdW5pdC0yKTtcblxuQGluY2x1ZGUgcGFkZGluZy12YXJpYW50KDAsIDApO1xuXG5AaW5jbHVkZSBwYWRkaW5nLXZhcmlhbnQoMSwgJHVuaXQtMSk7XG5cbkBpbmNsdWRlIHBhZGRpbmctdmFyaWFudCgyLCAkdW5pdC0yKTtcbiIsIi8vIFNoYXBlc1xuLnMtcm91bmRlZCB7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xufVxuXG4ucy1jaXJjbGUge1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG59IiwiLy8gVGV4dFxuLy8gVGV4dCBhbGlnbm1lbnQgdXRpbGl0aWVzXG4udGV4dC1sZWZ0IHtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cblxuLnRleHQtcmlnaHQge1xuICB0ZXh0LWFsaWduOiByaWdodDtcbn1cblxuLnRleHQtY2VudGVyIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4udGV4dC1qdXN0aWZ5IHtcbiAgdGV4dC1hbGlnbjoganVzdGlmeTtcbn1cblxuLy8gVGV4dCB0cmFuc2Zvcm0gdXRpbGl0aWVzXG4udGV4dC1sb3dlcmNhc2Uge1xuICB0ZXh0LXRyYW5zZm9ybTogbG93ZXJjYXNlO1xufVxuXG4udGV4dC11cHBlcmNhc2Uge1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xufVxuXG4udGV4dC1jYXBpdGFsaXplIHtcbiAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XG59XG5cbi8vIFRleHQgc3R5bGUgdXRpbGl0aWVzXG4udGV4dC1ub3JtYWwge1xuICBmb250LXdlaWdodDogbm9ybWFsO1xufVxuXG4udGV4dC1ib2xkIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbi50ZXh0LWl0YWxpYyB7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbn1cblxuLnRleHQtbGFyZ2Uge1xuICBmb250LXNpemU6IDEuMmVtO1xufVxuXG4vLyBUZXh0IG92ZXJmbG93IHV0aWxpdGllc1xuLnRleHQtZWxsaXBzaXMge1xuICBAaW5jbHVkZSB0ZXh0LWVsbGlwc2lzKCk7XG59XG5cbi50ZXh0LWNsaXAge1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB0ZXh0LW92ZXJmbG93OiBjbGlwO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4udGV4dC1icmVhayB7XG4gIGh5cGhlbnM6IGF1dG87XG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG4gIHdvcmQtd3JhcDogYnJlYWstd29yZDtcbn1cbiIsIi8vIE9mZiBjYW52YXMgbWVudXNcbiRvZmYtY2FudmFzLWJyZWFrcG9pbnQ6ICRzaXplLWxnICFkZWZhdWx0O1xuXG4ub2ZmLWNhbnZhcyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZmxvdzogbm93cmFwO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2lkdGg6IDEwMCU7XG5cbiAgLm9mZi1jYW52YXMtdG9nZ2xlIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAkbGF5b3V0LXNwYWNpbmc7XG4gICAgdHJhbnNpdGlvbjogbm9uZTtcbiAgICB6LWluZGV4OiAkemluZGV4LTA7XG4gICAgQGlmICRydGwgPT0gdHJ1ZSB7XG4gICAgICByaWdodDogJGxheW91dC1zcGFjaW5nO1xuICAgIH0gQGVsc2Uge1xuICAgICAgbGVmdDogJGxheW91dC1zcGFjaW5nO1xuICAgIH1cbiAgfVxuXG4gIC5vZmYtY2FudmFzLXNpZGViYXIge1xuICAgIGJhY2tncm91bmQ6ICRiZy1jb2xvcjtcbiAgICBib3R0b206IDA7XG4gICAgbWluLXdpZHRoOiAxMHJlbTtcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB0b3A6IDA7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIC4yNXM7XG4gICAgei1pbmRleDogJHppbmRleC0yO1xuICAgIEBpZiAkcnRsID09IHRydWUge1xuICAgICAgcmlnaHQ6IDA7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XG4gICAgfSBAZWxzZSB7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDAlKTtcbiAgICB9XG4gIH1cblxuICAub2ZmLWNhbnZhcy1jb250ZW50IHtcbiAgICBmbGV4OiAxIDEgYXV0bztcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgcGFkZGluZzogJGxheW91dC1zcGFjaW5nICRsYXlvdXQtc3BhY2luZyAkbGF5b3V0LXNwYWNpbmcgNHJlbTtcbiAgfVxuXG4gIC5vZmYtY2FudmFzLW92ZXJsYXkge1xuICAgIGJhY2tncm91bmQ6IHJnYmEoJGRhcmstY29sb3IsIC4xKTtcbiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGxlZnQ6IDA7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHJpZ2h0OiAwO1xuICAgIHRvcDogMDtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuXG4gIC5vZmYtY2FudmFzLXNpZGViYXIge1xuICAgICY6dGFyZ2V0LFxuICAgICYuYWN0aXZlIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgICB9XG5cbiAgICAmOnRhcmdldCB+IC5vZmYtY2FudmFzLW92ZXJsYXksXG4gICAgJi5hY3RpdmUgfiAub2ZmLWNhbnZhcy1vdmVybGF5IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgei1pbmRleDogJHppbmRleC0xO1xuICAgIH1cbiAgfVxufVxuXG4vLyBSZXNwb25zaXZlIGxheW91dFxuQG1lZGlhIChtaW4td2lkdGg6ICRvZmYtY2FudmFzLWJyZWFrcG9pbnQpIHtcbiAgLm9mZi1jYW52YXMge1xuICAgICYub2ZmLWNhbnZhcy1zaWRlYmFyLXNob3cge1xuICAgICAgLm9mZi1jYW52YXMtdG9nZ2xlIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgXG4gICAgICAub2ZmLWNhbnZhcy1zaWRlYmFyIHtcbiAgICAgICAgZmxleDogMCAwIGF1dG87XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgdHJhbnNmb3JtOiBub25lO1xuICAgICAgfVxuXG4gICAgICAub2ZmLWNhbnZhcy1vdmVybGF5IHtcbiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLnNlYXJjaC1pbnB1dCwgW2RhdGEtZ3Jhdi1maWVsZD1cImFycmF5XCJdIGlucHV0LCBbZGF0YS1ncmF2LWZpZWxkPVwiYXJyYXlcIl0gdGV4dGFyZWEge1xuICBAZXh0ZW5kIC5mb3JtLWlucHV0O1xufVxuXG4uYnV0dG9uIHtcbiAgQGV4dGVuZCAuYnRuO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLHdFQUE4RTtBYUw5RSx3Q0FBd0M7QUFDeEMsMkVBQTJFO0FBRTNFLG9OQUtHO0FBRUgseUZBQ2dGO0FBRWhGLEFBQUEsSUFBSSxDQUFDLEVBQ0gsV0FBVyxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQ2hDLG9CQUFvQixFQUFFLElBQUksRUFBRSxPQUFPLENBQ25DLHdCQUF3QixFQUFFLElBQUksRUFBRSxPQUFPLEVBQ3hDOztBQUVELHlGQUNnRjtBQUVoRix1REFFRztBQUVILEFBQUEsSUFBSSxDQUFDLEVBQ0gsTUFBTSxFQUFFLENBQUMsR0FDVjs7QUFFRCx3Q0FFRztBQUVILEFBQUEsT0FBTyxFQUNQLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLEdBQUcsRUFDSCxPQUFPLENBQUMsRUFDTixPQUFPLEVBQUUsS0FBSyxHQUNmOztBQUVELGdJQUdHO0FBRUgsQUFBQSxFQUFFLENBQUMsRUFDRCxTQUFTLEVBQUUsR0FBRyxFQUNkLE1BQU0sRUFBRSxRQUFRLEdBQ2pCOztBQUVELGlHQUNnRjtBQUVoRiwwRUFHRztBQUVILEFBQUEsVUFBVSxFQUNWLE1BQU0sRUFDTixJQUFJLENBQUMsRUFBRSxPQUFPLENBQ1osT0FBTyxFQUFFLEtBQUssR0FDZjs7QUFFRCxnREFFRztBQUVILHFGQUdHO0FBRUgsQUFBQSxFQUFFLENBQUMsRUFDRCxVQUFVLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FDaEMsTUFBTSxFQUFFLENBQUMsRUFBRSxPQUFPLENBQ2xCLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUMzQjs7QUFFRCwwSUFHRztBQUVILHFHQUNnRjtBQUVoRix5SEFHRztBQUVILEFBQUEsQ0FBQyxDQUFDLEVBQ0EsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FDdEMsNEJBQTRCLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFDL0M7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 */ diff --git a/themes/learn4/css-compiled/spectre.min.css b/themes/learn4/css-compiled/spectre.min.css new file mode 100644 index 00000000..95133427 --- /dev/null +++ b/themes/learn4/css-compiled/spectre.min.css @@ -0,0 +1 @@ +/*! Spectre.css v0.5.8 | MIT License | github.com/picturepan2/spectre */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}hr{overflow:visible;box-sizing:content-box;height:0}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}address{font-style:normal}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:Hack,monospace;font-size:1em}dfn{font-style:italic}small{font-size:80%;font-weight:400}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}fieldset{margin:0;padding:0;border:0}legend{display:table;box-sizing:border-box;max-width:100%;padding:0;white-space:normal;color:inherit}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}details,menu{display:block}summary{display:list-item;outline:0}canvas{display:inline-block}template{display:none}[hidden]{display:none}*,::after,::before{box-sizing:inherit}html{font-size:20px;line-height:1.5;box-sizing:border-box;-webkit-tap-highlight-color:transparent}body{font-family:'Public Sans','Helvetica Neue',sans-serif;font-size:.85rem;overflow-x:hidden;color:#3a414e;background:#fff;text-rendering:optimizeLegibility}a{text-decoration:none;color:#1195dc;outline:0}a:focus{box-shadow:0 0 0 .1rem rgba(26,163,237,.2)}a.active,a:active,a:focus,a:hover{text-decoration:underline;color:#0e75ad}a:visited{color:#32acef}h1,h2,h3,h4,h5,h6{font-weight:500;line-height:1.2;margin-top:0;margin-bottom:.5em;color:inherit}.h1,.h2,.h3,.h4,.h5,.h6{font-weight:500}.h1,h1{font-size:2rem}.h2,h2{font-size:1.6rem}.h3,h3{font-size:1.4rem}.h4,h4{font-size:1.2rem}.h5,h5{font-size:1rem}.h6,h6{font-size:.8rem}p{margin:0 0 1.2rem}a,ins,u{-webkit-text-decoration-skip:ink edges;text-decoration-skip:ink edges}abbr[title]{cursor:help;text-decoration:none;border-bottom:.05rem dotted}kbd{font-size:.7rem;line-height:1.25;padding:.1rem .2rem;color:#fff;border-radius:.1rem;background:#454d5d}mark{padding:.05rem .1rem 0;color:#3a414e;border-bottom:.05rem solid #ffd367;border-radius:.1rem;background:#ffe9b3}blockquote{margin-left:0;padding:.4rem .8rem;border-left:.1rem solid #e7e9ed}blockquote p:last-child{margin-bottom:0}ol,ul{margin:.8rem 0 .8rem .8rem;padding:0}ol ol,ol ul,ul ol,ul ul{margin:.8rem 0 .8rem .8rem}ol li,ul li{margin-top:.4rem}ul{list-style:disc inside}ul ul{list-style-type:circle}ol{list-style:decimal inside}ol ol{list-style-type:lower-alpha}dl dt{font-weight:700}dl dd{margin:.4rem 0 .8rem 0}.lang-zh,.lang-zh-hans,html:lang(zh),html:lang(zh-Hans){font-family:-apple-system,system-ui,BlinkMacSystemFont,'Segoe UI',Roboto,'PingFang SC','Hiragino Sans GB','Microsoft YaHei','Helvetica Neue',sans-serif}.lang-zh-hant,html:lang(zh-Hant){font-family:-apple-system,system-ui,BlinkMacSystemFont,'Segoe UI',Roboto,'PingFang TC','Hiragino Sans CNS','Microsoft JhengHei','Helvetica Neue',sans-serif}.lang-ja,html:lang(ja){font-family:-apple-system,system-ui,BlinkMacSystemFont,'Segoe UI',Roboto,'Hiragino Sans','Hiragino Kaku Gothic Pro','Yu Gothic',YuGothic,Meiryo,'Helvetica Neue',sans-serif}.lang-ko,html:lang(ko){font-family:-apple-system,system-ui,BlinkMacSystemFont,'Segoe UI',Roboto,'Malgun Gothic','Helvetica Neue',sans-serif}.lang-cjk ins,.lang-cjk u,:lang(ja) ins,:lang(ja) u,:lang(zh) ins,:lang(zh) u{text-decoration:none;border-bottom:.05rem solid}.lang-cjk del+del,.lang-cjk del+s,.lang-cjk ins+ins,.lang-cjk ins+u,.lang-cjk s+del,.lang-cjk s+s,.lang-cjk u+ins,.lang-cjk u+u,:lang(ja) del+del,:lang(ja) del+s,:lang(ja) ins+ins,:lang(ja) ins+u,:lang(ja) s+del,:lang(ja) s+s,:lang(ja) u+ins,:lang(ja) u+u,:lang(zh) del+del,:lang(zh) del+s,:lang(zh) ins+ins,:lang(zh) ins+u,:lang(zh) s+del,:lang(zh) s+s,:lang(zh) u+ins,:lang(zh) u+u{margin-left:.125em}.table{width:100%;border-spacing:0;border-collapse:collapse;text-align:left}.table.table-striped tbody tr:nth-of-type(odd){background:#f8f9fa}.table tbody tr.active,.table.table-striped tbody tr.active{background:#f0f1f4}.table.table-hover tbody tr:hover{background:#f0f1f4}.table.table-scroll{display:block;overflow-x:auto;padding-bottom:.75rem;white-space:nowrap}.table td,.table th{padding:.6rem .4rem;border-bottom:.05rem solid #e7e9ed}.table th{border-bottom-width:.1rem}.btn,.button{font-size:.85rem;line-height:1.2rem;display:inline-block;height:1.8rem;padding:.25rem .4rem;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;transition:background .2s,border .2s,box-shadow .2s,color .2s;text-align:center;vertical-align:middle;white-space:nowrap;text-decoration:none;color:#1aa3ed;border:.05rem solid #1aa3ed;border-radius:.1rem;outline:0;background:#fff;-webkit-appearance:none;-moz-appearance:none;appearance:none}.btn:focus,.button:focus{box-shadow:0 0 0 .1rem rgba(26,163,237,.2)}.btn:focus,.btn:hover,.button:focus,.button:hover{text-decoration:none;border-color:#129be6;background:#38c5c7}.active.button,.btn.active,.btn:active,.button:active{text-decoration:none;color:#fff;border-color:#108bce;background:#129be6}.active.loading.button::after,.btn.active.loading::after,.btn:active.loading::after,.button:active.loading::after{border-bottom-color:#fff;border-left-color:#fff}.btn.disabled,.btn:disabled,.btn[disabled],.button:disabled,.button[disabled],.disabled.button{cursor:default;pointer-events:none;opacity:.5}.btn-primary.button,.btn.btn-primary{color:#fff;border-color:#129be6;background:#1aa3ed}.btn-primary.button:focus,.btn-primary.button:hover,.btn.btn-primary:focus,.btn.btn-primary:hover{color:#fff;border-color:#108bce;background:#1195dc}.btn-primary.active.button,.btn-primary.button:active,.btn.btn-primary.active,.btn.btn-primary:active{color:#fff;border-color:#0f85c5;background:#118fd3}.btn-primary.loading.button::after,.btn.btn-primary.loading::after{border-bottom-color:#fff;border-left-color:#fff}.btn-success.button,.btn.btn-success{color:#fff;border-color:#2faa3f;background:#32b643}.btn-success.button:focus,.btn.btn-success:focus{box-shadow:0 0 0 .1rem rgba(50,182,67,.2)}.btn-success.button:focus,.btn-success.button:hover,.btn.btn-success:focus,.btn.btn-success:hover{color:#fff;border-color:#2da23c;background:#30ae40}.btn-success.active.button,.btn-success.button:active,.btn.btn-success.active,.btn.btn-success:active{color:#fff;border-color:#278e34;background:#2a9a39}.btn-success.loading.button::after,.btn.btn-success.loading::after{border-bottom-color:#fff;border-left-color:#fff}.btn-error.button,.btn.btn-error{color:#fff;border-color:#d95000;background:#e85600}.btn-error.button:focus,.btn.btn-error:focus{box-shadow:0 0 0 .1rem rgba(232,86,0,.2)}.btn-error.button:focus,.btn-error.button:hover,.btn.btn-error:focus,.btn.btn-error:hover{color:#fff;border-color:#cf4d00;background:#de5200}.btn-error.active.button,.btn-error.button:active,.btn.btn-error.active,.btn.btn-error:active{color:#fff;border-color:#b54300;background:#c44900}.btn-error.loading.button::after,.btn.btn-error.loading::after{border-bottom-color:#fff;border-left-color:#fff}.btn-link.button,.btn.btn-link{color:#1195dc;border-color:transparent;background:0 0}.btn-link.active.button,.btn-link.button:active,.btn-link.button:focus,.btn-link.button:hover,.btn.btn-link.active,.btn.btn-link:active,.btn.btn-link:focus,.btn.btn-link:hover{color:#0e75ad}.btn-sm.button,.btn.btn-sm{font-size:.7rem;height:1.4rem;padding:.05rem .3rem}.btn-lg.button,.btn.btn-lg{font-size:.9rem;height:2rem;padding:.35rem .6rem}.btn-block.button,.btn.btn-block{display:block;width:100%}.btn-action.button,.btn.btn-action{width:1.8rem;padding-right:0;padding-left:0}.btn-action.btn-sm.button,.btn.btn-action.btn-sm{width:1.4rem}.btn-action.btn-lg.button,.btn.btn-action.btn-lg{width:2rem}.btn-clear.button,.btn.btn-clear{line-height:.8rem;width:1rem;height:1rem;margin-right:-2px;margin-left:.2rem;padding:.1rem;text-decoration:none;opacity:1;color:currentColor;border:0;background:0 0}.btn-clear.button:focus,.btn-clear.button:hover,.btn.btn-clear:focus,.btn.btn-clear:hover{opacity:.95;background:rgba(248,249,250,.5)}.btn-clear.button::before,.btn.btn-clear::before{content:'\2715'}.btn-group{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.btn-group .btn,.btn-group .button{-ms-flex:1 0 auto;flex:1 0 auto}.btn-group .btn:first-child:not(:last-child),.btn-group .button:first-child:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group .btn:not(:first-child):not(:last-child),.btn-group .button:not(:first-child):not(:last-child){margin-left:-.05rem;border-radius:0}.btn-group .btn:last-child:not(:first-child),.btn-group .button:last-child:not(:first-child){margin-left:-.05rem;border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .active.button,.btn-group .btn.active,.btn-group .btn:active,.btn-group .btn:focus,.btn-group .btn:hover,.btn-group .button:active,.btn-group .button:focus,.btn-group .button:hover{z-index:1}.btn-group.btn-group-block{display:-ms-flexbox;display:flex}.btn-group.btn-group-block .btn,.btn-group.btn-group-block .button{-ms-flex:1 0 0;flex:1 0 0}.form-group:not(:last-child){margin-bottom:.4rem}fieldset{margin-bottom:.8rem}legend{font-size:.9rem;font-weight:500;margin-bottom:.8rem}.form-label{line-height:1.2rem;display:block;padding:.3rem 0}.form-label.label-sm{font-size:.7rem;padding:.1rem 0}.form-label.label-lg{font-size:.9rem;padding:.4rem 0}.form-input,.search-input,[data-grav-field=array] input,[data-grav-field=array] textarea{font-size:.85rem;line-height:1.2rem;position:relative;display:block;width:100%;max-width:100%;height:1.8rem;padding:.25rem .4rem;transition:background .2s,border .2s,box-shadow .2s,color .2s;color:#3a414e;border:.05rem solid #caced7;border-radius:.1rem;outline:0;background:#fff;background-image:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-input:focus,.search-input:focus,[data-grav-field=array] input:focus,[data-grav-field=array] textarea:focus{border-color:#1aa3ed;box-shadow:0 0 0 .1rem rgba(26,163,237,.2)}.form-input:-ms-input-placeholder,.search-input:-ms-input-placeholder,[data-grav-field=array] input:-ms-input-placeholder,[data-grav-field=array] textarea:-ms-input-placeholder{color:#acb3c2}.form-input::-ms-input-placeholder,.search-input::-ms-input-placeholder,[data-grav-field=array] input::-ms-input-placeholder,[data-grav-field=array] textarea::-ms-input-placeholder{color:#acb3c2}.form-input::placeholder,.search-input::placeholder,[data-grav-field=array] input::placeholder,[data-grav-field=array] textarea::placeholder{color:#acb3c2}.form-input.input-sm,.input-sm.search-input,[data-grav-field=array] input.input-sm,[data-grav-field=array] textarea.input-sm{font-size:.7rem;height:1.4rem;padding:.05rem .3rem}.form-input.input-lg,.input-lg.search-input,[data-grav-field=array] input.input-lg,[data-grav-field=array] textarea.input-lg{font-size:.9rem;height:2rem;padding:.35rem .6rem}.form-input.input-inline,.input-inline.search-input,[data-grav-field=array] input.input-inline,[data-grav-field=array] textarea.input-inline{display:inline-block;width:auto;vertical-align:middle}.form-input[type=file],.search-input[type=file],[data-grav-field=array] input[type=file],[data-grav-field=array] textarea[type=file]{height:auto}[data-grav-field=array] textarea,[data-grav-field=array] textarea.input-lg,[data-grav-field=array] textarea.input-sm,textarea.form-input,textarea.form-input.input-lg,textarea.form-input.input-sm,textarea.input-lg.search-input,textarea.input-sm.search-input,textarea.search-input{height:auto}.form-input-hint{font-size:.7rem;margin-top:.2rem;color:#acb3c2}.has-success .form-input-hint,.is-success+.form-input-hint{color:#32b643}.has-error .form-input-hint,.is-error+.form-input-hint{color:#e85600}.form-select{font-size:.85rem;line-height:1.2rem;width:100%;height:1.8rem;padding:.25rem .4rem;vertical-align:middle;color:inherit;border:.05rem solid #caced7;border-radius:.1rem;outline:0;background:#fff;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-select:focus{border-color:#1aa3ed;box-shadow:0 0 0 .1rem rgba(26,163,237,.2)}.form-select::-ms-expand{display:none}.form-select.select-sm{font-size:.7rem;height:1.4rem;padding:.05rem 1.1rem .05rem .3rem}.form-select.select-lg{font-size:.9rem;height:2rem;padding:.35rem 1.4rem .35rem .6rem}.form-select[multiple],.form-select[size]{height:auto;padding:.25rem .4rem}.form-select[multiple] option,.form-select[size] option{padding:.1rem .2rem}.form-select:not([multiple]):not([size]){padding-right:1.2rem;background:#fff url('data:image/svg+xml;charset=utf8,%3Csvg%20xmlns=\'http://www.w3.org/2000/svg\'%20viewBox=\'0%200%204%205\'%3E%3Cpath%20fill=\'%23667189\'%20d=\'M2%200L0%202h4zm0%205L0%203h4z\'/%3E%3C/svg%3E') no-repeat right .35rem center/.4rem .5rem}.has-icon-left,.has-icon-right{position:relative}.has-icon-left .form-icon,.has-icon-right .form-icon{position:absolute;z-index:2;top:50%;width:.8rem;height:.8rem;margin:0 .25rem;transform:translateY(-50%)}.has-icon-left .form-icon{left:.05rem}.has-icon-left .form-input,.has-icon-left .search-input,.has-icon-left [data-grav-field=array] input,.has-icon-left [data-grav-field=array] textarea,[data-grav-field=array] .has-icon-left input,[data-grav-field=array] .has-icon-left textarea{padding-left:1.3rem}.has-icon-right .form-icon{right:.05rem}.has-icon-right .form-input,.has-icon-right .search-input,.has-icon-right [data-grav-field=array] input,.has-icon-right [data-grav-field=array] textarea,[data-grav-field=array] .has-icon-right input,[data-grav-field=array] .has-icon-right textarea{padding-right:1.3rem}.form-checkbox,.form-radio,.form-switch{line-height:1.2rem;position:relative;display:block;min-height:1.4rem;margin:.2rem 0;padding:.1rem .4rem .1rem 1.2rem}.form-checkbox input,.form-radio input,.form-switch input{position:absolute;overflow:hidden;clip:rect(0,0,0,0);width:1px;height:1px;margin:-1px}.form-checkbox input:focus+.form-icon,.form-radio input:focus+.form-icon,.form-switch input:focus+.form-icon{border-color:#1aa3ed;box-shadow:0 0 0 .1rem rgba(26,163,237,.2)}.form-checkbox input:checked+.form-icon,.form-radio input:checked+.form-icon,.form-switch input:checked+.form-icon{border-color:#1aa3ed;background:#1aa3ed}.form-checkbox .form-icon,.form-radio .form-icon,.form-switch .form-icon{position:absolute;display:inline-block;cursor:pointer;transition:background .2s,border .2s,box-shadow .2s,color .2s;border:.05rem solid #caced7}.form-checkbox.input-sm,.form-radio.input-sm,.form-switch.input-sm{font-size:.7rem;margin:0}.form-checkbox.input-lg,.form-radio.input-lg,.form-switch.input-lg{font-size:.9rem;margin:.3rem 0}.form-checkbox .form-icon,.form-radio .form-icon{top:.3rem;left:0;width:.8rem;height:.8rem;background:#fff}.form-checkbox input:active+.form-icon,.form-radio input:active+.form-icon{background:#f0f1f4}.form-checkbox .form-icon{border-radius:.1rem}.form-checkbox input:checked+.form-icon::before{position:absolute;top:50%;left:50%;width:6px;height:9px;margin-top:-6px;margin-left:-3px;content:'';transform:rotate(45deg);border:.1rem solid #fff;border-top-width:0;border-left-width:0;background-clip:padding-box}.form-checkbox input:indeterminate+.form-icon{border-color:#1aa3ed;background:#1aa3ed}.form-checkbox input:indeterminate+.form-icon::before{position:absolute;top:50%;left:50%;width:10px;height:2px;margin-top:-1px;margin-left:-5px;content:'';background:#fff}.form-radio .form-icon{border-radius:50%}.form-radio input:checked+.form-icon::before{position:absolute;top:50%;left:50%;width:6px;height:6px;content:'';transform:translate(-50%,-50%);border-radius:50%;background:#fff}.form-switch{padding-left:2rem}.form-switch .form-icon{top:.25rem;left:0;width:1.6rem;height:.9rem;border-radius:.45rem;background:#acb3c2;background-clip:padding-box}.form-switch .form-icon::before{position:absolute;top:0;left:0;display:block;width:.8rem;height:.8rem;content:'';transition:background .2s,border .2s,box-shadow .2s,color .2s,left .2s;border-radius:50%;background:#fff}.form-switch input:checked+.form-icon::before{left:14px}.form-switch input:active+.form-icon::before{background:#f8f9fa}.input-group{display:-ms-flexbox;display:flex}.input-group .input-group-addon{line-height:1.2rem;padding:.25rem .4rem;white-space:nowrap;border:.05rem solid #caced7;border-radius:.1rem;background:#f8f9fa}.input-group .input-group-addon.addon-sm{font-size:.7rem;padding:.05rem .3rem}.input-group .input-group-addon.addon-lg{font-size:.9rem;padding:.35rem .6rem}.input-group .form-input,.input-group .form-select,.input-group .search-input,.input-group [data-grav-field=array] input,.input-group [data-grav-field=array] textarea,[data-grav-field=array] .input-group input,[data-grav-field=array] .input-group textarea{width:1%;-ms-flex:1 1 auto;flex:1 1 auto}.input-group .input-group-btn{z-index:1}.input-group .form-input:first-child:not(:last-child),.input-group .form-select:first-child:not(:last-child),.input-group .input-group-addon:first-child:not(:last-child),.input-group .input-group-btn:first-child:not(:last-child),.input-group .search-input:first-child:not(:last-child),.input-group [data-grav-field=array] input:first-child:not(:last-child),.input-group [data-grav-field=array] textarea:first-child:not(:last-child),[data-grav-field=array] .input-group input:first-child:not(:last-child),[data-grav-field=array] .input-group textarea:first-child:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group .form-input:not(:first-child):not(:last-child),.input-group .form-select:not(:first-child):not(:last-child),.input-group .input-group-addon:not(:first-child):not(:last-child),.input-group .input-group-btn:not(:first-child):not(:last-child),.input-group .search-input:not(:first-child):not(:last-child),.input-group [data-grav-field=array] input:not(:first-child):not(:last-child),.input-group [data-grav-field=array] textarea:not(:first-child):not(:last-child),[data-grav-field=array] .input-group input:not(:first-child):not(:last-child),[data-grav-field=array] .input-group textarea:not(:first-child):not(:last-child){margin-left:-.05rem;border-radius:0}.input-group .form-input:last-child:not(:first-child),.input-group .form-select:last-child:not(:first-child),.input-group .input-group-addon:last-child:not(:first-child),.input-group .input-group-btn:last-child:not(:first-child),.input-group .search-input:last-child:not(:first-child),.input-group [data-grav-field=array] input:last-child:not(:first-child),.input-group [data-grav-field=array] textarea:last-child:not(:first-child),[data-grav-field=array] .input-group input:last-child:not(:first-child),[data-grav-field=array] .input-group textarea:last-child:not(:first-child){margin-left:-.05rem;border-top-left-radius:0;border-bottom-left-radius:0}.input-group .form-input:focus,.input-group .form-select:focus,.input-group .input-group-addon:focus,.input-group .input-group-btn:focus,.input-group .search-input:focus,.input-group [data-grav-field=array] input:focus,.input-group [data-grav-field=array] textarea:focus,[data-grav-field=array] .input-group input:focus,[data-grav-field=array] .input-group textarea:focus{z-index:2}.input-group .form-select{width:auto}.input-group.input-inline{display:-ms-inline-flexbox;display:inline-flex}.form-input.is-success,.form-select.is-success,.has-success .form-input,.has-success .form-select,.has-success .search-input,.has-success [data-grav-field=array] input,.has-success [data-grav-field=array] textarea,.is-success.search-input,[data-grav-field=array] .has-success input,[data-grav-field=array] .has-success textarea,[data-grav-field=array] input.is-success,[data-grav-field=array] textarea.is-success{border-color:#32b643;background:#f9fdfa}.form-input.is-success:focus,.form-select.is-success:focus,.has-success .form-input:focus,.has-success .form-select:focus,.has-success .search-input:focus,.has-success [data-grav-field=array] input:focus,.has-success [data-grav-field=array] textarea:focus,.is-success.search-input:focus,[data-grav-field=array] .has-success input:focus,[data-grav-field=array] .has-success textarea:focus,[data-grav-field=array] input.is-success:focus,[data-grav-field=array] textarea.is-success:focus{box-shadow:0 0 0 .1rem rgba(50,182,67,.2)}.form-input.is-error,.form-select.is-error,.has-error .form-input,.has-error .form-select,.has-error .search-input,.has-error [data-grav-field=array] input,.has-error [data-grav-field=array] textarea,.is-error.search-input,[data-grav-field=array] .has-error input,[data-grav-field=array] .has-error textarea,[data-grav-field=array] input.is-error,[data-grav-field=array] textarea.is-error{border-color:#e85600;background:#fffaf7}.form-input.is-error:focus,.form-select.is-error:focus,.has-error .form-input:focus,.has-error .form-select:focus,.has-error .search-input:focus,.has-error [data-grav-field=array] input:focus,.has-error [data-grav-field=array] textarea:focus,.is-error.search-input:focus,[data-grav-field=array] .has-error input:focus,[data-grav-field=array] .has-error textarea:focus,[data-grav-field=array] input.is-error:focus,[data-grav-field=array] textarea.is-error:focus{box-shadow:0 0 0 .1rem rgba(232,86,0,.2)}.form-checkbox.is-error .form-icon,.form-radio.is-error .form-icon,.form-switch.is-error .form-icon,.has-error .form-checkbox .form-icon,.has-error .form-radio .form-icon,.has-error .form-switch .form-icon{border-color:#e85600}.form-checkbox.is-error input:checked+.form-icon,.form-radio.is-error input:checked+.form-icon,.form-switch.is-error input:checked+.form-icon,.has-error .form-checkbox input:checked+.form-icon,.has-error .form-radio input:checked+.form-icon,.has-error .form-switch input:checked+.form-icon{border-color:#e85600;background:#e85600}.form-checkbox.is-error input:focus+.form-icon,.form-radio.is-error input:focus+.form-icon,.form-switch.is-error input:focus+.form-icon,.has-error .form-checkbox input:focus+.form-icon,.has-error .form-radio input:focus+.form-icon,.has-error .form-switch input:focus+.form-icon{border-color:#e85600;box-shadow:0 0 0 .1rem rgba(232,86,0,.2)}.form-checkbox.is-error input:indeterminate+.form-icon,.has-error .form-checkbox input:indeterminate+.form-icon{border-color:#e85600;background:#e85600}.form-input:not(:placeholder-shown):invalid,.search-input:not(:placeholder-shown):invalid,[data-grav-field=array] input:not(:placeholder-shown):invalid,[data-grav-field=array] textarea:not(:placeholder-shown):invalid{border-color:#e85600}.form-input:not(:placeholder-shown):invalid:focus,.search-input:not(:placeholder-shown):invalid:focus,[data-grav-field=array] input:not(:placeholder-shown):invalid:focus,[data-grav-field=array] textarea:not(:placeholder-shown):invalid:focus{background:#fffaf7;box-shadow:0 0 0 .1rem rgba(232,86,0,.2)}.form-input:not(:placeholder-shown):invalid+.form-input-hint,.search-input:not(:placeholder-shown):invalid+.form-input-hint,[data-grav-field=array] input:not(:placeholder-shown):invalid+.form-input-hint,[data-grav-field=array] textarea:not(:placeholder-shown):invalid+.form-input-hint{color:#e85600}.disabled.search-input,.form-input.disabled,.form-input:disabled,.form-select.disabled,.form-select:disabled,.search-input:disabled,[data-grav-field=array] input.disabled,[data-grav-field=array] input:disabled,[data-grav-field=array] textarea.disabled,[data-grav-field=array] textarea:disabled{cursor:not-allowed;opacity:.5;background-color:#f0f1f4}.form-input[readonly],.search-input[readonly],[data-grav-field=array] input[readonly],[data-grav-field=array] textarea[readonly]{background-color:#f8f9fa}input.disabled+.form-icon,input:disabled+.form-icon{cursor:not-allowed;opacity:.5;background:#f0f1f4}.form-switch input.disabled+.form-icon::before,.form-switch input:disabled+.form-icon::before{background:#fff}.form-horizontal{padding:.4rem 0}.form-horizontal .form-group{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.form-inline{display:inline-block}.label{line-height:1.25;display:inline-block;padding:.1rem .2rem;color:#454d5d;border-radius:.1rem;background:#f0f1f4}.label.label-rounded{padding-right:.4rem;padding-left:.4rem;border-radius:5rem}.label.label-primary{color:#fff;background:#1aa3ed}.label.label-secondary{color:#1aa3ed;background:#38c5c7}.label.label-success{color:#fff;background:#32b643}.label.label-warning{color:#fff;background:#ffb700}.label.label-error{color:#fff;background:#e85600}code{font-size:85%;line-height:1.25;padding:.1rem .2rem;color:#7676f4;border-radius:.1rem;background:#f1f1fe}.code{position:relative;color:#3a414e;border-radius:.1rem}.code::before{font-size:.7rem;position:absolute;top:.1rem;right:.4rem;content:attr(data-lang);color:#acb3c2}.code code{line-height:1.5;display:block;overflow-x:auto;width:100%;padding:1rem;color:inherit;background:#f8f9fa}.img-responsive{display:block;max-width:100%;height:auto}.img-fit-cover{object-fit:cover}.img-fit-contain{object-fit:contain}.video-responsive{position:relative;display:block;overflow:hidden;width:100%;padding:0}.video-responsive::before{display:block;padding-bottom:56.25%;content:''}.video-responsive embed,.video-responsive iframe,.video-responsive object{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;border:0}video.video-responsive{max-width:100%;height:auto}video.video-responsive::before{content:none}.video-responsive-4-3::before{padding-bottom:75%}.video-responsive-1-1::before{padding-bottom:100%}.figure{margin:0 0 .4rem 0}.figure .figure-caption{margin-top:.4rem;color:#667189}.container{width:100%;margin-right:auto;margin-left:auto;padding-right:.4rem;padding-left:.4rem}.container.grid-xl{max-width:1296px}.container.grid-lg{max-width:976px}.container.grid-md{max-width:856px}.container.grid-sm{max-width:616px}.container.grid-xs{max-width:496px}.show-lg,.show-md,.show-sm,.show-xl,.show-xs{display:none!important}.columns{display:-ms-flexbox;display:flex;margin-right:-.4rem;margin-left:-.4rem;-ms-flex-wrap:wrap;flex-wrap:wrap}.columns.col-gapless{margin-right:0;margin-left:0}.columns.col-gapless>.column{padding-right:0;padding-left:0}.columns.col-oneline{overflow-x:auto;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.column{max-width:100%;padding-right:.4rem;padding-left:.4rem;-ms-flex:1;flex:1}.column.col-1,.column.col-10,.column.col-11,.column.col-12,.column.col-2,.column.col-3,.column.col-4,.column.col-5,.column.col-6,.column.col-7,.column.col-8,.column.col-9,.column.col-auto{-ms-flex:none;flex:none}.col-12{width:100%}.col-11{width:91.66666667%}.col-10{width:83.33333333%}.col-9{width:75%}.col-8{width:66.66666667%}.col-7{width:58.33333333%}.col-6{width:50%}.col-5{width:41.66666667%}.col-4{width:33.33333333%}.col-3{width:25%}.col-2{width:16.66666667%}.col-1{width:8.33333333%}.col-auto{width:auto;max-width:none;-ms-flex:0 0 auto;flex:0 0 auto}.col-mx-auto{margin-right:auto;margin-left:auto}.col-ml-auto{margin-left:auto}.col-mr-auto{margin-right:auto}@media (max-width:1280px){.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{-ms-flex:none;flex:none}.col-xl-12{width:100%}.col-xl-11{width:91.66666667%}.col-xl-10{width:83.33333333%}.col-xl-9{width:75%}.col-xl-8{width:66.66666667%}.col-xl-7{width:58.33333333%}.col-xl-6{width:50%}.col-xl-5{width:41.66666667%}.col-xl-4{width:33.33333333%}.col-xl-3{width:25%}.col-xl-2{width:16.66666667%}.col-xl-1{width:8.33333333%}.col-xl-auto{width:auto}.hide-xl{display:none!important}.show-xl{display:block!important}}@media (max-width:960px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto{-ms-flex:none;flex:none}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-auto{width:auto}.hide-lg{display:none!important}.show-lg{display:block!important}}@media (max-width:840px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto{-ms-flex:none;flex:none}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-auto{width:auto}.hide-md{display:none!important}.show-md{display:block!important}}@media (max-width:600px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto{-ms-flex:none;flex:none}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-auto{width:auto}.hide-sm{display:none!important}.show-sm{display:block!important}}@media (max-width:480px){.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-auto{-ms-flex:none;flex:none}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-auto{width:auto}.hide-xs{display:none!important}.show-xs{display:block!important}}.hero{display:-ms-flexbox;display:flex;flex-direction:column;padding-top:4rem;padding-bottom:4rem;-ms-flex-direction:column;-ms-flex-pack:justify;justify-content:space-between}.hero.hero-sm{padding-top:2rem;padding-bottom:2rem}.hero.hero-lg{padding-top:8rem;padding-bottom:8rem}.hero .hero-body{padding:.4rem}.navbar{display:-ms-flexbox;display:flex;-ms-flex-align:stretch;align-items:stretch;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:justify;justify-content:space-between}.navbar .navbar-section{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex:1 0 0;flex:1 0 0}.navbar .navbar-section:not(:first-child):last-child{-ms-flex-pack:end;justify-content:flex-end}.navbar .navbar-center{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex:0 0 auto;flex:0 0 auto}.navbar .navbar-brand{font-size:.9rem;text-decoration:none}.accordion input:checked~.accordion-header .icon,.accordion[open] .accordion-header .icon{transform:rotate(90deg)}.accordion input:checked~.accordion-body,.accordion[open] .accordion-body{max-height:50rem}.accordion .accordion-header{display:block;padding:.2rem .4rem}.accordion .accordion-header .icon{transition:transform .25s}.accordion .accordion-body{overflow:hidden;max-height:0;margin-bottom:.4rem;transition:max-height .25s}summary.accordion-header::-webkit-details-marker{display:none}.avatar{font-size:.8rem;font-weight:300;line-height:1.25;position:relative;display:inline-block;width:1.6rem;height:1.6rem;margin:0;vertical-align:middle;color:rgba(255,255,255,.85);border-radius:50%;background:#1aa3ed}.avatar.avatar-xs{font-size:.4rem;width:.8rem;height:.8rem}.avatar.avatar-sm{font-size:.6rem;width:1.2rem;height:1.2rem}.avatar.avatar-lg{font-size:1.2rem;width:2.4rem;height:2.4rem}.avatar.avatar-xl{font-size:1.6rem;width:3.2rem;height:3.2rem}.avatar img{position:relative;z-index:1;width:100%;height:100%;border-radius:50%}.avatar .avatar-icon,.avatar .avatar-presence{position:absolute;z-index:2;right:14.64%;bottom:14.64%;width:50%;height:50%;padding:.1rem;transform:translate(50%,50%);background:#fff}.avatar .avatar-presence{width:.5em;height:.5em;border-radius:50%;background:#acb3c2;box-shadow:0 0 0 .1rem #fff}.avatar .avatar-presence.online{background:#32b643}.avatar .avatar-presence.busy{background:#e85600}.avatar .avatar-presence.away{background:#ffb700}.avatar[data-initial]::before{position:absolute;z-index:1;top:50%;left:50%;content:attr(data-initial);transform:translate(-50%,-50%);color:currentColor}.badge{position:relative;white-space:nowrap}.badge:not([data-badge])::after,.badge[data-badge]::after{display:inline-block;content:attr(data-badge);transform:translate(-.05rem,-.5rem);color:#fff;border-radius:.5rem;background:#1aa3ed;background-clip:padding-box;box-shadow:0 0 0 .1rem #fff}.badge[data-badge]::after{font-size:.7rem;line-height:1;min-width:.9rem;height:.9rem;padding:.1rem .2rem;text-align:center;white-space:nowrap}.badge:not([data-badge])::after,.badge[data-badge='']::after{width:6px;min-width:6px;height:6px;padding:0}.badge.btn::after,.badge.button::after{position:absolute;top:0;right:0;transform:translate(50%,-50%)}.badge.avatar::after{position:absolute;z-index:100;top:14.64%;right:14.64%;transform:translate(50%,-50%)}.breadcrumb{margin:.2rem 0;padding:.2rem 0;list-style:none}.breadcrumb .breadcrumb-item{display:inline-block;margin:0;padding:.2rem 0;color:#667189}.breadcrumb .breadcrumb-item:not(:last-child){margin-right:.2rem}.breadcrumb .breadcrumb-item:not(:last-child) a{color:#667189}.breadcrumb .breadcrumb-item:not(:first-child)::before{padding-right:.4rem;content:'/';color:#667189}.bar{display:-ms-flexbox;display:flex;width:100%;height:.8rem;border-radius:.1rem;background:#f0f1f4;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.bar.bar-sm{height:.2rem}.bar .bar-item{font-size:.7rem;line-height:.8rem;position:relative;display:block;width:0;height:100%;text-align:center;color:#fff;background:#1aa3ed;-ms-flex-negative:0;flex-shrink:0}.bar .bar-item:first-child{border-top-left-radius:.1rem;border-bottom-left-radius:.1rem}.bar .bar-item:last-child{border-top-right-radius:.1rem;border-bottom-right-radius:.1rem;-ms-flex-negative:1;flex-shrink:1}.bar-slider{position:relative;height:.1rem;margin:.4rem 0}.bar-slider .bar-item{position:absolute;left:0;padding:0}.bar-slider .bar-item:not(:last-child):first-child{z-index:1;background:#f0f1f4}.bar-slider .bar-slider-btn{position:absolute;top:50%;right:0;width:.6rem;height:.6rem;padding:0;transform:translate(50%,-50%);border:0;border-radius:50%;background:#1aa3ed}.bar-slider .bar-slider-btn:active{box-shadow:0 0 0 .1rem #1aa3ed}.card{display:-ms-flexbox;display:flex;flex-direction:column;border:.05rem solid #e7e9ed;border-radius:.1rem;background:#fff;-ms-flex-direction:column}.card .card-body,.card .card-footer,.card .card-header{padding:.8rem;padding-bottom:0}.card .card-body:last-child,.card .card-footer:last-child,.card .card-header:last-child{padding-bottom:.8rem}.card .card-body{-ms-flex:1 1 auto;flex:1 1 auto}.card .card-image{padding-top:.8rem}.card .card-image:first-child{padding-top:0}.card .card-image:first-child img{border-top-left-radius:.1rem;border-top-right-radius:.1rem}.card .card-image:last-child img{border-bottom-right-radius:.1rem;border-bottom-left-radius:.1rem}.chip{font-size:90%;line-height:.8rem;display:-ms-inline-flexbox;display:inline-flex;overflow:hidden;max-width:320px;height:1.2rem;margin:.1rem;padding:.2rem .4rem;vertical-align:middle;white-space:nowrap;text-decoration:none;text-overflow:ellipsis;border-radius:5rem;background:#f0f1f4;-ms-flex-align:center;align-items:center}.chip.active{color:#fff;background:#1aa3ed}.chip .avatar{margin-right:.2rem;margin-left:-.4rem}.chip .btn-clear{transform:scale(.75);border-radius:50%}.dropdown{position:relative;display:inline-block}.dropdown .menu{position:absolute;top:100%;left:0;display:none;overflow-y:auto;max-height:50vh;animation:slide-down .15s ease 1}.dropdown.dropdown-right .menu{right:0;left:auto}.dropdown .dropdown-toggle:focus+.menu,.dropdown .menu:hover,.dropdown.active .menu{display:block}.dropdown .btn-group .dropdown-toggle:nth-last-child(2){border-top-right-radius:.1rem;border-bottom-right-radius:.1rem}.empty{padding:3.2rem 1.6rem;text-align:center;color:#667189;border-radius:.1rem;background:#f8f9fa}.empty .empty-icon{margin-bottom:.8rem}.empty .empty-subtitle,.empty .empty-title{margin:.4rem auto}.empty .empty-action{margin-top:.8rem}.menu{z-index:300;min-width:180px;margin:0;padding:.4rem;list-style:none;transform:translateY(.2rem);border-radius:.1rem;background:#fff;box-shadow:0 .05rem .2rem rgba(69,77,93,.3)}.menu.menu-nav{background:0 0;box-shadow:none}.menu .menu-item{position:relative;margin-top:0;padding:0 .4rem;text-decoration:none}.menu .menu-item>a{display:block;margin:0 -.4rem;padding:.2rem .4rem;text-decoration:none;color:inherit;border-radius:.1rem}.menu .menu-item>a:focus,.menu .menu-item>a:hover{color:#1aa3ed;background:#38c5c7}.menu .menu-item>a.active,.menu .menu-item>a:active{color:#1aa3ed;background:#38c5c7}.menu .menu-item .form-checkbox,.menu .menu-item .form-radio,.menu .menu-item .form-switch{margin:.1rem 0}.menu .menu-item+.menu-item{margin-top:.2rem}.menu .menu-badge{position:absolute;top:0;right:0;display:-ms-flexbox;display:flex;height:100%;-ms-flex-align:center;align-items:center}.menu .menu-badge .label{margin-right:.4rem}.modal{position:fixed;top:0;right:0;bottom:0;left:0;display:none;overflow:hidden;padding:.4rem;opacity:0;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.modal.active,.modal:target{z-index:400;display:-ms-flexbox;display:flex;opacity:1}.modal.active .modal-overlay,.modal:target .modal-overlay{position:absolute;top:0;right:0;bottom:0;left:0;display:block;cursor:default;background:rgba(248,249,250,.75)}.modal.active .modal-container,.modal:target .modal-container{z-index:1;animation:slide-down .2s ease 1}.modal.modal-sm .modal-container{max-width:320px;padding:0 .4rem}.modal.modal-lg .modal-overlay{background:#fff}.modal.modal-lg .modal-container{max-width:960px;box-shadow:none}.modal-container{display:-ms-flexbox;display:flex;flex-direction:column;width:100%;max-width:640px;max-height:75vh;padding:0 .8rem;border-radius:.1rem;background:#fff;box-shadow:0 .2rem .5rem rgba(69,77,93,.3);-ms-flex-direction:column}.modal-container.modal-fullheight{max-height:100vh}.modal-container .modal-header{padding:.8rem;color:#454d5d}.modal-container .modal-body{position:relative;overflow-y:auto;padding:.8rem}.modal-container .modal-footer{padding:.8rem;text-align:right}.nav{display:-ms-flexbox;display:flex;flex-direction:column;margin:.2rem 0;list-style:none;-ms-flex-direction:column}.nav .nav-item a{padding:.2rem .4rem;text-decoration:none;color:#667189}.nav .nav-item a:focus,.nav .nav-item a:hover{color:#1aa3ed}.nav .nav-item.active>a{font-weight:700;color:#50596c}.nav .nav-item.active>a:focus,.nav .nav-item.active>a:hover{color:#1aa3ed}.nav .nav{margin-bottom:.4rem;margin-left:.8rem}.pagination{display:-ms-flexbox;display:flex;margin:.2rem 0;padding:.2rem 0;list-style:none}.pagination .page-item{margin:.2rem .05rem}.pagination .page-item span{display:inline-block;padding:.2rem .2rem}.pagination .page-item a{display:inline-block;padding:.2rem .4rem;text-decoration:none;border-radius:.1rem}.pagination .page-item a:focus,.pagination .page-item a:hover{color:#1aa3ed}.pagination .page-item.disabled a{cursor:default;pointer-events:none;opacity:.5}.pagination .page-item.active a{color:#fff;background:#1aa3ed}.pagination .page-item.page-next,.pagination .page-item.page-prev{-ms-flex:1 0 50%;flex:1 0 50%}.pagination .page-item.page-next{text-align:right}.pagination .page-item .page-item-title{margin:0}.pagination .page-item .page-item-subtitle{margin:0;opacity:.5}.panel{display:-ms-flexbox;display:flex;flex-direction:column;border:.05rem solid #e7e9ed;border-radius:.1rem;-ms-flex-direction:column}.panel .panel-footer,.panel .panel-header{padding:.8rem;-ms-flex:0 0 auto;flex:0 0 auto}.panel .panel-nav{-ms-flex:0 0 auto;flex:0 0 auto}.panel .panel-body{overflow-y:auto;padding:0 .8rem;-ms-flex:1 1 auto;flex:1 1 auto}.popover{position:relative;display:inline-block}.popover .popover-container{position:absolute;z-index:300;top:0;left:50%;width:320px;padding:.4rem;transition:transform .2s;transform:translate(-50%,-50%) scale(0);opacity:0}.popover :focus+.popover-container,.popover:hover .popover-container{display:block;transform:translate(-50%,-100%) scale(1);opacity:1}.popover.popover-right .popover-container{top:50%;left:100%}.popover.popover-right :focus+.popover-container,.popover.popover-right:hover .popover-container{transform:translate(0,-50%) scale(1)}.popover.popover-bottom .popover-container{top:100%;left:50%}.popover.popover-bottom :focus+.popover-container,.popover.popover-bottom:hover .popover-container{transform:translate(-50%,0) scale(1)}.popover.popover-left .popover-container{top:50%;left:0}.popover.popover-left :focus+.popover-container,.popover.popover-left:hover .popover-container{transform:translate(-100%,-50%) scale(1)}.popover .card{border:0;box-shadow:0 .2rem .5rem rgba(69,77,93,.3)}.step{display:-ms-flexbox;display:flex;width:100%;margin:.2rem 0;list-style:none;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.step .step-item{position:relative;min-height:1rem;margin-top:0;text-align:center;-ms-flex:1 1 0;flex:1 1 0}.step .step-item:not(:first-child)::before{position:absolute;top:9px;left:-50%;width:100%;height:2px;content:'';background:#1aa3ed}.step .step-item a{display:inline-block;padding:20px 10px 0;text-decoration:none;color:#1aa3ed}.step .step-item a::before{position:absolute;z-index:1;top:.2rem;left:50%;display:block;width:.6rem;height:.6rem;content:'';transform:translateX(-50%);border:.1rem solid #fff;border-radius:50%;background:#1aa3ed}.step .step-item.active a::before{border:.1rem solid #1aa3ed;background:#fff}.step .step-item.active~.step-item::before{background:#e7e9ed}.step .step-item.active~.step-item a{color:#acb3c2}.step .step-item.active~.step-item a::before{background:#e7e9ed}.tile{display:-ms-flexbox;display:flex;-ms-flex-line-pack:justify;align-content:space-between;-ms-flex-align:start;align-items:flex-start}.tile .tile-action,.tile .tile-icon{-ms-flex:0 0 auto;flex:0 0 auto}.tile .tile-content{-ms-flex:1 1 auto;flex:1 1 auto}.tile .tile-content:not(:first-child){padding-left:.4rem}.tile .tile-content:not(:last-child){padding-right:.4rem}.tile .tile-subtitle,.tile .tile-title{line-height:1.2rem}.tile.tile-centered{-ms-flex-align:center;align-items:center}.tile.tile-centered .tile-content{overflow:hidden}.tile.tile-centered .tile-subtitle,.tile.tile-centered .tile-title{overflow:hidden;margin-bottom:0;white-space:nowrap;text-overflow:ellipsis}.toast{display:block;width:100%;padding:.4rem;color:#fff;border:.05rem solid #454d5d;border-color:#454d5d;border-radius:.1rem;background:rgba(69,77,93,.95)}.toast.toast-primary{border-color:#1aa3ed;background:rgba(26,163,237,.95)}.toast.toast-success{border-color:#32b643;background:rgba(50,182,67,.95)}.toast.toast-warning{border-color:#ffb700;background:rgba(255,183,0,.95)}.toast.toast-error{border-color:#e85600;background:rgba(232,86,0,.95)}.toast a{text-decoration:underline;color:#fff}.toast a.active,.toast a:active,.toast a:focus,.toast a:hover{opacity:.75}.toast .btn-clear{margin:.1rem}.toast p:last-child{margin-bottom:0}.tooltip{position:relative}.tooltip::after{font-size:.7rem;position:absolute;z-index:300;bottom:100%;left:50%;display:block;overflow:hidden;max-width:320px;padding:.2rem .4rem;content:attr(data-tooltip);transition:opacity .2s,transform .2s;transform:translate(-50%,.4rem);white-space:pre;text-overflow:ellipsis;pointer-events:none;opacity:0;color:#fff;border-radius:.1rem;background:rgba(69,77,93,.95)}.tooltip:focus::after,.tooltip:hover::after{transform:translate(-50%,-.2rem);opacity:1}.tooltip.disabled,.tooltip[disabled]{pointer-events:auto}.tooltip.tooltip-right::after{bottom:50%;left:100%;transform:translate(-.2rem,50%)}.tooltip.tooltip-right:focus::after,.tooltip.tooltip-right:hover::after{transform:translate(.2rem,50%)}.tooltip.tooltip-bottom::after{top:100%;bottom:auto;transform:translate(-50%,-.4rem)}.tooltip.tooltip-bottom:focus::after,.tooltip.tooltip-bottom:hover::after{transform:translate(-50%,.2rem)}.tooltip.tooltip-left::after{right:100%;bottom:50%;left:auto;transform:translate(.4rem,50%)}.tooltip.tooltip-left:focus::after,.tooltip.tooltip-left:hover::after{transform:translate(-.2rem,50%)}@keyframes loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes slide-down{0%{transform:translateY(-1.6rem);opacity:0}100%{transform:translateY(0);opacity:1}}.text-primary{color:#1aa3ed!important}a.text-primary:focus,a.text-primary:hover{color:#1195dc}a.text-primary:visited{color:#32acef}.text-secondary{color:#35b9bb!important}a.text-secondary:focus,a.text-secondary:hover{color:#2fa5a7}a.text-secondary:visited{color:#40c7c9}.text-gray{color:#acb3c2!important}a.text-gray:focus,a.text-gray:hover{color:#9ea6b7}a.text-gray:visited{color:#bbc1cd}.text-light{color:#fff!important}a.text-light:focus,a.text-light:hover{color:#f2f2f2}a.text-light:visited{color:#fff}.text-dark{color:#3a414e!important}a.text-dark:focus,a.text-dark:hover{color:#2f3540}a.text-dark:visited{color:#454d5d}.text-success{color:#32b643!important}a.text-success:focus,a.text-success:hover{color:#2da23c}a.text-success:visited{color:#39c94b}.text-warning{color:#ffb700!important}a.text-warning:focus,a.text-warning:hover{color:#e6a500}a.text-warning:visited{color:#ffbe1a}.text-error{color:#e85600!important}a.text-error:focus,a.text-error:hover{color:#cf4d00}a.text-error:visited{color:#ff6003}.bg-primary{color:#fff;background:#1aa3ed!important}.bg-secondary{color:#fff;background:#38c5c7!important}.bg-dark{color:#fff;background:#454d5d!important}.bg-gray{background:#f8f9fa!important}.bg-success{color:#fff;background:#32b643!important}.bg-warning{color:#fff;background:#ffb700!important}.bg-error{color:#fff;background:#e85600!important}.c-hand{cursor:pointer}.c-move{cursor:move}.c-zoom-in{cursor:zoom-in}.c-zoom-out{cursor:zoom-out}.c-not-allowed{cursor:not-allowed}.c-auto{cursor:auto}.d-block{display:block}.d-inline{display:inline}.d-inline-block{display:inline-block}.d-flex{display:-ms-flexbox;display:flex}.d-inline-flex{display:-ms-inline-flexbox;display:inline-flex}.d-hide,.d-none{display:none!important}.d-visible{visibility:visible}.d-invisible{visibility:hidden}.text-hide{font-size:0;line-height:0;color:transparent;border:0;background:0 0;text-shadow:none}.text-assistive{position:absolute;overflow:hidden;clip:rect(0,0,0,0);width:1px;height:1px;margin:-1px;padding:0;border:0}.divider,.divider-vert{position:relative;display:block}.divider-vert[data-content]::after,.divider[data-content]::after{font-size:.7rem;display:inline-block;padding:0 .4rem;content:attr(data-content);transform:translateY(-.65rem);color:#acb3c2;background:#fff}.divider{height:.05rem;margin:.4rem 0;border-top:.05rem solid #fefefe}.divider[data-content]{margin:.8rem 0}.divider-vert{display:block;padding:.8rem}.divider-vert::before{position:absolute;top:.4rem;bottom:.4rem;left:50%;display:block;content:'';transform:translateX(-50%);border-left:.05rem solid #e7e9ed}.divider-vert[data-content]::after{position:absolute;top:50%;left:50%;padding:.2rem 0;transform:translate(-50%,-50%)}.loading{position:relative;min-height:.8rem;pointer-events:none;color:transparent!important}.loading::after{position:absolute;z-index:1;top:50%;left:50%;display:block;width:.8rem;height:.8rem;margin-top:-.4rem;margin-left:-.4rem;content:'';animation:loading .5s infinite linear;border:.1rem solid #1aa3ed;border-top-color:transparent;border-right-color:transparent;border-radius:50%}.loading.loading-lg{min-height:2rem}.loading.loading-lg::after{width:1.6rem;height:1.6rem;margin-top:-.8rem;margin-left:-.8rem}.clearfix::after{display:table;clear:both;content:''}.float-left{float:left!important}.float-right{float:right!important}.p-relative{position:relative!important}.p-absolute{position:absolute!important}.p-fixed{position:fixed!important}.p-sticky{position:-webkit-sticky!important;position:sticky!important}.p-centered{display:block;float:none;margin-right:auto;margin-left:auto}.flex-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.m-0{margin:0!important}.mb-0{margin-bottom:0!important}.ml-0{margin-left:0!important}.mr-0{margin-right:0!important}.mt-0{margin-top:0!important}.mx-0{margin-right:0!important;margin-left:0!important}.my-0{margin-top:0!important;margin-bottom:0!important}.m-1{margin:.2rem!important}.mb-1{margin-bottom:.2rem!important}.ml-1{margin-left:.2rem!important}.mr-1{margin-right:.2rem!important}.mt-1{margin-top:.2rem!important}.mx-1{margin-right:.2rem!important;margin-left:.2rem!important}.my-1{margin-top:.2rem!important;margin-bottom:.2rem!important}.m-2{margin:.4rem!important}.mb-2{margin-bottom:.4rem!important}.ml-2{margin-left:.4rem!important}.mr-2{margin-right:.4rem!important}.mt-2{margin-top:.4rem!important}.mx-2{margin-right:.4rem!important;margin-left:.4rem!important}.my-2{margin-top:.4rem!important;margin-bottom:.4rem!important}.p-0{padding:0!important}.pb-0{padding-bottom:0!important}.pl-0{padding-left:0!important}.pr-0{padding-right:0!important}.pt-0{padding-top:0!important}.px-0{padding-right:0!important;padding-left:0!important}.py-0{padding-top:0!important;padding-bottom:0!important}.p-1{padding:.2rem!important}.pb-1{padding-bottom:.2rem!important}.pl-1{padding-left:.2rem!important}.pr-1{padding-right:.2rem!important}.pt-1{padding-top:.2rem!important}.px-1{padding-right:.2rem!important;padding-left:.2rem!important}.py-1{padding-top:.2rem!important;padding-bottom:.2rem!important}.p-2{padding:.4rem!important}.pb-2{padding-bottom:.4rem!important}.pl-2{padding-left:.4rem!important}.pr-2{padding-right:.4rem!important}.pt-2{padding-top:.4rem!important}.px-2{padding-right:.4rem!important;padding-left:.4rem!important}.py-2{padding-top:.4rem!important;padding-bottom:.4rem!important}.s-rounded{border-radius:.1rem}.s-circle{border-radius:50%}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-normal{font-weight:400}.text-bold{font-weight:700}.text-italic{font-style:italic}.text-large{font-size:1.2em}.text-ellipsis{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.text-clip{overflow:hidden;white-space:nowrap;text-overflow:clip}.text-break{word-wrap:break-word;word-break:break-word;-webkit-hyphens:auto;hyphens:auto;-ms-hyphens:auto}.off-canvas{position:relative;display:-ms-flexbox;display:flex;width:100%;height:100%;-ms-flex-flow:nowrap;flex-flow:nowrap}.off-canvas .off-canvas-toggle{position:absolute;z-index:1;top:.4rem;left:.4rem;display:block;transition:none}.off-canvas .off-canvas-sidebar{position:fixed;z-index:200;top:0;bottom:0;left:0;overflow-y:auto;min-width:10rem;transition:transform .25s;transform:translateX(-100%);background:#f8f9fa}.off-canvas .off-canvas-content{height:100%;padding:.4rem .4rem .4rem 4rem;-ms-flex:1 1 auto;flex:1 1 auto}.off-canvas .off-canvas-overlay{position:fixed;top:0;right:0;bottom:0;left:0;display:none;width:100%;height:100%;border-color:transparent;border-radius:0;background:rgba(69,77,93,.1)}.off-canvas .off-canvas-sidebar.active,.off-canvas .off-canvas-sidebar:target{transform:translateX(0)}.off-canvas .off-canvas-sidebar.active~.off-canvas-overlay,.off-canvas .off-canvas-sidebar:target~.off-canvas-overlay{z-index:100;display:block}@media (min-width:960px){.off-canvas.off-canvas-sidebar-show .off-canvas-toggle{display:none}.off-canvas.off-canvas-sidebar-show .off-canvas-sidebar{position:relative;transform:none;-ms-flex:0 0 auto;flex:0 0 auto}.off-canvas.off-canvas-sidebar-show .off-canvas-overlay{display:none!important}} \ No newline at end of file diff --git a/themes/learn4/css-compiled/theme.css b/themes/learn4/css-compiled/theme.css new file mode 100644 index 00000000..30e0f599 --- /dev/null +++ b/themes/learn4/css-compiled/theme.css @@ -0,0 +1,469 @@ +.off-canvas { min-height: 100vh; } + +.off-canvas .off-canvas-toggle { position: fixed; top: 0.3rem; left: 0.3rem; width: 1.6rem; height: 1.6rem; padding-top: .15rem; z-index: 3; font-size: 16px !important; } + +.off-canvas .off-canvas-content { padding: inherit; } + +.off-canvas .off-canvas-overlay { background: rgba(69, 77, 93, 0.5); } + +.off-canvas .learn-sidebar { width: 14rem; color: rgba(255, 255, 255, 0.6); overflow-y: inherit; } + +.off-canvas .learn-sidebar:before { position: fixed; content: ''; height: 100vh; width: 14rem; top: 0; left: 0; } + +.off-canvas .learn-sidebar a { color: rgba(255, 255, 255, 0.8); } + +.off-canvas .learn-sidebar a:hover { color: #fff; } + +.off-canvas .learn-sidebar .padding { padding-left: 1rem; } + +.off-canvas .learn-sidebar hr { border: 0; border-bottom: 1px solid rgba(255, 255, 255, 0.1); } + +.off-canvas .learn-sidebar .learn-brand { position: fixed; height: 7rem; width: 14rem; top: 0; padding: 10px 20px; box-shadow: 0 10px 10px -10px rgba(0, 0, 0, 0.3); } + +.off-canvas .learn-sidebar .learn-brand #logo { display: inline-block; margin: 0 2.5rem 0.5rem; } + +.off-canvas .learn-sidebar .learn-brand #logo path { fill: rgba(255, 255, 255, 0.8) !important; } + +.off-canvas .learn-sidebar .learn-nav { top: 7rem; bottom: 0; width: 14rem; padding-bottom: 1rem; position: fixed; } + +.off-canvas .learn-sidebar .learn-nav .read-icon { float: right; margin-right: 12px; margin-top: 5px; display: none; opacity: 0.8; color: rgba(255, 255, 255, 0.6); font-size: 12px; } + +.off-canvas .learn-sidebar .learn-nav .visited > a > .read-icon { display: inline; } + +.off-canvas .learn-sidebar .learn-nav ul { list-style: none; margin-left: 1rem; margin-top: .2rem; } + +.off-canvas .learn-sidebar .learn-nav ul.topics { margin-top: 0; } + +.off-canvas .learn-sidebar .learn-nav ul.topics > li:first-child { margin-top: 0; } + +.off-canvas .learn-sidebar .learn-nav ul a { display: block; padding-top: 0.1rem; padding-bottom: 0.1rem; } + +.off-canvas .learn-sidebar .learn-nav ul.searched a { color: rgba(255, 255, 255, 0.5); } + +.off-canvas .learn-sidebar .learn-nav ul.searched .search-match a { color: rgba(255, 255, 255, 0.8); } + +.off-canvas .learn-sidebar .learn-nav ul.searched .search-match a:hover { color: rgba(255, 255, 255, 0.9); } + +.off-canvas .learn-sidebar .learn-nav ul.topics.searched ul { display: block; } + +.off-canvas .learn-sidebar .learn-nav ul.topics > li { margin-top: .3rem; } + +.off-canvas .learn-sidebar .learn-nav ul.topics > li.active, .off-canvas .learn-sidebar .learn-nav ul.topics > li.parent { background-color: rgba(0, 0, 0, 0.2); margin-left: -1rem; padding-left: 1rem; padding-top: 0.25rem; padding-bottom: 0.25rem; } + +.off-canvas .learn-sidebar .learn-nav ul li, .off-canvas .learn-sidebar .learn-nav ul ol { margin-top: .1rem; } + +.off-canvas .learn-sidebar .learn-nav ul ul { font-size: 0.75rem; display: none; margin-top: 0; margin-bottom: 0; } + +.off-canvas .learn-sidebar .learn-nav ul li.active > a { background-color: #1AA3ED; color: #fff; margin-left: -0.4rem; padding-left: 0.4rem; } + +.off-canvas .learn-sidebar .learn-nav ul li a > span > b { font-weight: 300; color: rgba(255, 255, 255, 0.6); } + +.off-canvas .learn-sidebar .learn-nav ul .active ul, .off-canvas .learn-sidebar .learn-nav ul .parent ul { display: block; } + +.off-canvas .learn-sidebar .searchbox { position: relative; border: 1px solid rgba(255, 255, 255, 0.1); background: rgba(0, 0, 0, 0.1); color: rgba(255, 255, 255, 0.6); border-radius: 2px; } + +.off-canvas .learn-sidebar .searchbox :-ms-input-placeholder { color: rgba(255, 255, 255, 0.5); } + +.off-canvas .learn-sidebar .searchbox ::-ms-input-placeholder { color: rgba(255, 255, 255, 0.5); } + +.off-canvas .learn-sidebar .searchbox ::placeholder { color: rgba(255, 255, 255, 0.5); } + +.off-canvas .learn-sidebar .searchbox input { border: 0; background: transparent; width: 100%; padding: 4px 25px 4px 30px; color: rgba(255, 255, 255, 0.8); font-weight: 200; font-size: 0.7rem; } + +.off-canvas .learn-sidebar .searchbox label { position: absolute; left: 8px; top: 2px; } + +.off-canvas .learn-sidebar .searchbox span { position: absolute; right: 8px; top: 2px; cursor: pointer; } + +.off-canvas .learn-sidebar .search-options { margin-top: 10px; } + +.off-canvas .learn-sidebar .search-options .adv-search { font-size: 85%; display: -ms-flexbox; display: flex; -ms-flex-align: center; align-items: center; padding-left: 0.6rem; } + +.off-canvas .learn-sidebar .search-options .adv-search i { margin-right: 5px; } + +.off-canvas .learn-sidebar .search-options .version-chooser select { display: inline-block; border: 1px solid rgba(255, 255, 255, 0.1); background: rgba(0, 0, 0, 0.1); color: #fff; border-radius: 2px; font-size: .8rem; font-weight: 700; margin: 0; letter-spacing: 1px; } + +.off-canvas .learn-sidebar .side-tools { font-size: 90%; color: rgba(255, 255, 255, 0.5); } + +/** Defaults (purple) **/ +.off-canvas .learn-sidebar:before { background: linear-gradient(150deg, #8E44AD 0, #283A63 100%); } + +/** Secondary (green) **/ +body.sidebar-green .off-canvas .learn-sidebar:before { background: linear-gradient(150deg, #16A085 0, #283A63 100%); } + +/** Tertiary (blue)**/ +body.sidebar-blue .off-canvas .learn-sidebar:before { background: linear-gradient(150deg, #1AA3ED 0, #283A63 100%); } + +/** High Contrast **/ +body.sidebar-contrast .off-canvas .learn-sidebar a { color: #fff; } + +body.sidebar-contrast .off-canvas .learn-sidebar:before { background: linear-gradient(150deg, #3B4349 0, #1E2329 100%); } + +body.sidebar-contrast .off-canvas .learn-sidebar .searchbox :-ms-input-placeholder { color: rgba(255, 255, 255, 0.7); } + +body.sidebar-contrast .off-canvas .learn-sidebar .searchbox ::-ms-input-placeholder { color: rgba(255, 255, 255, 0.7); } + +body.sidebar-contrast .off-canvas .learn-sidebar .searchbox ::placeholder { color: rgba(255, 255, 255, 0.7); } + +@font-face { font-family: 'Metropolis'; src: url("../fonts/metropolis-bold-webfont.woff2") format("woff2"), url("../fonts/metropolis-bold-webfont.woff") format("woff"); font-weight: 400; font-style: normal; } + +@font-face { font-family: 'Public Sans'; src: url("../fonts/PublicSans-Light.woff2") format("woff2"), url("../fonts/PublicSans-Light.woff") format("woff"); font-weight: 300; font-style: normal; } + +@font-face { font-family: 'Public Sans'; src: url("../fonts/PublicSans-SemiBold.woff2") format("woff2"), url("../fonts/PublicSans-SemiBold.woff") format("woff"); font-weight: 500; font-style: normal; } + +@font-face { font-family: 'Hack'; src: url("../fonts/hack-regular-subset.woff2") format("woff2"), url("../fonts/hack-regular-subset.woff") format("woff"); font-weight: 400; font-style: normal; } + +#top-bar { position: fixed; display: -ms-flexbox; display: flex; background: #f8f9fa; border-bottom: 1px solid #edeef1; z-index: 2; -ms-flex-align: center; align-items: center; top: 0; right: 0; left: 14rem; } + +@media (max-width: 960px) { #top-bar { left: 0; } } + +#top-bar #breadcrumbs { padding-left: 0.5rem; line-height: 1; height: auto; width: 100%; } + +@media (max-width: 600px) { #top-bar #breadcrumbs * { display: none; } } + +#top-bar #breadcrumbs > span, #top-bar #breadcrumbs > a { padding: 0 .5rem !important; } + +#top-bar #breadcrumbs > span span, #top-bar #breadcrumbs > a span { padding: 0 !important; } + +@media (max-width: 960px) { #top-bar #breadcrumbs { padding-left: 2rem; } } + +#top-bar #navigation { width: 400px; display: -ms-flexbox; display: flex; } + +#top-bar #navigation > a, #top-bar #navigation span { width: 50%; text-align: center; border-left: 1px solid #edeef1; font-size: 27px; text-decoration: none; transition: background-color 0.5s ease, color 0.5s ease; } + +#top-bar #navigation > a.disabled, #top-bar #navigation span.disabled { color: #bbc1cd; } + +#top-bar #navigation > a:hover { background: #edeef1; color: #0e75ad; } + +#top-bar .progress { position: absolute; bottom: -1px; background: linear-gradient(to right, #1AA3ED var(--scroll), transparent 0); background-repeat: no-repeat; width: 100%; height: 1px; z-index: 1; } + +.center-content #start { -ms-flex: 1; flex: 1; display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; -ms-flex-pack: center; justify-content: center; } + +.learn-content { position: relative; display: -ms-flexbox; display: flex; min-height: 100vh; -ms-flex-direction: column; flex-direction: column; } + +.learn-content #start { padding: 2rem 3rem; } + +@media (max-width: 1280px) { .learn-content #start { padding: 2rem 2rem; } } + +@media (max-width: 960px) { .learn-content #start { padding: 2rem 1rem; } } + +#footer { border-top: 1px solid #e7e9ed; margin-top: 1rem; text-align: center; } + +#footer p { margin: 1rem 0; } + +.page-toc { float: right; width: 250px; padding: 0.5rem 0.75rem; background: #f3f4f6; margin-left: 1.5rem; margin-right: 0; margin-bottom: 1rem; margin-top: 10px; font-size: 0.7rem; overflow: hidden; } + +@media (max-width: 600px) { .page-toc { float: none; width: 100%; margin-top: 0.5rem; margin-left: 0; margin-bottom: 0; } } + +.page-toc .toc-toggle { font-size: 1.2rem; display: block; float: right; margin-top: -8px; margin-right: -10px; padding: 5px 10px; line-height: 1; color: #667189; cursor: pointer; } + +.page-toc.toc-closed { height: 40px; margin-bottom: 0.5rem; } + +.page-toc.toc-closed .toc-toggle .fa:before { content: '\f107'; } + +.page-toc h5 { margin: 0 0 1rem; } + +.page-toc ul { margin-left: 1rem; margin-bottom: 0; } + +.page-toc li { margin-top: 0; list-style: decimal; color: #808ba1; } + +.page-toc li li { list-style: decimal; } + +.page-toc li li li { list-style: square; } + +.page-toc ul > li.first.last { list-style: none; margin: 0; margin-left: -1rem; } + +.page-toc + #body-inner > .notices, .page-toc + #body-inner > .code-toolbar { overflow: hidden; } + +html { font-size: 18px; } + +@media screen and (min-width: 480px) { html { font-size: calc(18px + 2 * ((100vw - 480px) / 800)); } } + +@media screen and (min-width: 1280px) { html { font-size: 20px; } } + +body { font-weight: 300; letter-spacing: -0.015rem; } + +body ::-moz-selection { background: #ECECFE; } + +body ::selection { background: #ECECFE; } + +div { min-width: 0; } + +pre { padding: 1em; } + +mark { padding: 0; } + +h1, h2, h3, h4, h5, h6 { font-family: "Metropolis", "Helvetica Neue", sans-serif; letter-spacing: -0.05rem; margin-top: 2rem; color: #242931; line-height: 1; font-weight: 500; } + +h1 { font-size: 2.5rem; font-weight: 500; } + +@media (max-width: 600px) { h1 { font-size: 2rem; } } + +a:hover, a:focus, a:active, a.active { color: #0e75ad; text-decoration: none; } + +a:focus { outline: none !important; box-shadow: none !important; } + +a:visited { color: #1195dc; } + +.table-keycol { overflow: hidden; } + +.table { width: auto; } + +table { border-collapse: collapse; border-spacing: 0; width: 100%; overflow-x: auto; margin-bottom: 1.5rem; text-align: left; } + +table tbody tr:nth-of-type(odd) { background: #f8f9fa; } + +table tbody tr.active { background: #f0f1f4; } + +table td, table th { border-bottom: 0.05rem solid #e7e9ed; padding: 0.6rem 0.4rem; } + +table th { border-bottom-width: 0.1rem; } + +.table-keycol table tr > td:first-child, .table-keycol table tr > th:first-child { white-space: nowrap; width: 15%; } + +img, .video-container { max-width: 100%; margin: 3rem auto; display: block; text-align: center; } + +img.border, .video-container.border { border: 2px solid #e6e6e6 !important; padding: 2px; } + +img.shadow, .video-container.shadow { box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1); } + +hr { border: 0; border-top: 1px solid #e7e9ed; } + +ul, ol { margin: 0 0 1.2rem 0; } + +ul ul, ul ol, ol ul, ol ol { margin: 0; } + +ul ol, ol ol { list-style-type: decimal; } + +ul li, ol li { padding-top: 0; } + +#chapter { text-align: center; max-width: 600px; margin: 0 auto; } + +#chapter h3 { opacity: 0.7; } + +#chapter h3 + h1 { display: inline-block; margin: 1rem auto 2rem; border-bottom: 3px solid #e7e9ed; } + +@media (max-width: 600px) { #chapter h3 + h1 { font-size: 2.5rem; } } + +#body-inner :target:before { content: ""; display: block; margin-top: -60px; height: 60px; width: 1px; } + +pre.xdebug-var-dump { background: #fafafa; display: block; padding: 1rem; line-height: 1.5; color: inherit; border-radius: 2px; overflow-x: auto; } + +#body-inner pre { margin: 0.5rem 0; } + +#body-inner pre ::-moz-selection { background: #ECECFE; } + +#body-inner pre ::selection { background: #ECECFE; } + +#body-inner code { word-break: break-word; } + +#body-inner .code-toolbar { margin: 0.5rem 0; } + +#body-inner .code-toolbar pre[class*="language-"] { margin: 0; } + +#body-inner code[class*="language-"], #body-inner pre[class*="language-"] { font-family: "Hack", monospace; } + +#body-inner pre[class*="language-"] { font-size: .7rem; } + +#body-inner pre[class*="language-"] code { padding: initial; font-size: .7rem; } + +#body-inner .no-margin-top { margin-top: -1em; } + +#body-inner .no-margin-top .code-toolbar { margin-top: 0; } + +#body-inner .no-margin-top .code-toolbar > pre { padding-top: 3px; } + +#body-inner .no-margin-bottom .code-toolbar { margin-bottom: 0; } + +#body-inner .line-highlight { background: linear-gradient(to right, rgba(255, 233, 179, 0.3) 70%, rgba(255, 233, 179, 0)); } + +#body-inner .line-highlight:before { background-color: #ffbd1a; box-shadow: none; top: 0.15rem; } + +i.fa.fa-heart.pulse, i.fa.fa-heart-o.pulse { color: #920; } + +b, strong { font-weight: 500; } + +.heavy { font-weight: 700; } + +.light { font-weight: 200; } + +#error { text-align: center; position: relative; margin-top: 5rem; } + +#error .icon { font-size: 50px; } + +#messages { margin-bottom: 1rem; } + +#messages .icon { font-size: 1rem; } + +ul, ol { margin-left: 1.6rem; } + +ul ul, ul ol, ol ul, ol ol { margin-left: 1.6rem; } + +ul { list-style: disc outside; } + +ol { list-style: decimal outside; } + +#navigation a.github-link { font-size: inherit !important; display: -ms-flexbox; display: flex; -ms-flex-pack: center; justify-content: center; -ms-flex-align: center; align-items: center; padding: 0 1rem; } + +#navigation a.github-link i { padding-right: 5px; } + +.tabs-wrapper.ui-theme-badges { background: #F8F9FA; border: 1px solid #f2f4f6; border-radius: 0; } + +.tabs-wrapper.ui-theme-badges .tabs-nav { margin: 0.25rem; } + +.tabs-wrapper.ui-theme-badges .tabs-nav > li { margin-top: 0; } + +.tabs-wrapper.ui-theme-badges .tabs-nav li a { color: #767693; background: #e6eaed; border-radius: 0; } + +.tabs-wrapper.ui-theme-badges .tabs-nav li.current a { background: #8193a5; color: #fff; } + +.tabs-wrapper.ui-theme-badges .tabs-nav li:not(.current) a:hover { background: #dde2e7; } + +.tabs-wrapper.ui-theme-badges .tabs .tab { padding: 0.25rem 0; } + +.tabs-wrapper.ui-theme-badges .tabs .tab pre { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } + +.notices { margin: 1.5rem 0; padding: 0.4rem; } + +.notices p { margin: 0 0 1.5rem 0.5rem; } + +.notices p:last-child { margin-bottom: 0; } + +.notices.info { border-left: 5px solid #f0ad4e; background: #fcf8f2; color: #df8a13; } + +.notices.warning { border-left: 5px solid #d9534f; background: #fdf7f7; color: #b52b27; } + +.notices.note { border-left: 5px solid #5bc0de; background: #f4f8fa; color: #28a1c5; } + +.notices.tip { border-left: 5px solid #5cb85c; background: #f1f9f1; color: #3d8b3d; } + +audio { max-width: 100%; } + +pre { max-width: 100%; } + +pre[class*="language-"]:not(.command-line), pre[class*="language-"]:not(.command-line) > code[class*="language-"] { word-break: break-word; white-space: pre-wrap; } + +.tntsearch-results em { background: #ffe9b3; color: #3a414e; border-bottom: 0.05rem solid #ffd367; border-radius: 0.1rem; padding: 0.05rem 0.1rem 0; } + +.lifecycle #body-inner .level { position: relative; } + +.lifecycle #body-inner .level h3 { font-size: 18px; position: absolute; margin: 0; padding: 2px 10px 4px; left: 0; z-index: 1000; color: #fff; } + +.lifecycle #body-inner .level .level { margin-top: 0.5rem; margin-left: -1rem; margin-right: 1rem; margin-bottom: 0.5rem; padding-bottom: 1rem; } + +.lifecycle #body-inner .level ol li { padding-top: 0.1rem; margin-top: 0.2rem; } + +.lifecycle #body-inner .level > ol { margin-top: 2rem; } + +.lifecycle #body-inner .level.level-1 { background: #f6fefc; border: 4px solid #1ABC9C; color: #1ABC9C; margin-bottom: 1rem; } + +.lifecycle #body-inner .level.level-1 h3 { background: #1ABC9C; } + +.lifecycle #body-inner .level.level-2 { background: #f7fdf9; border: 4px solid #2ECC71; color: #2ECC71; } + +.lifecycle #body-inner .level.level-2 h3 { background: #2ECC71; } + +.lifecycle #body-inner .level.level-3 { background: #f3f9fd; border: 4px solid #3498DB; color: #3498DB; } + +.lifecycle #body-inner .level.level-3 h3 { background: #3498DB; } + +.lifecycle #body-inner .level.level-4 { background: #e4eaf0; border: 4px solid #34495E; color: #34495E; } + +.lifecycle #body-inner .level.level-4 h3 { background: #34495E; } + +form { /** Reset some defaults for Quark Theme **/ } + +form .button-wrapper { margin-top: 0.75rem; margin-bottom: 1rem; } + +form span.required { color: #e85600; font-weight: 700; font-size: 1.2rem; } + +form .form-input[type=range] { -webkit-appearance: slider-horizontal; -moz-appearance: slider-horizontal; appearance: slider-horizontal; } + +form .form-input[type=range]:focus { box-shadow: none; border: none; } + +form .form-group:not(.form-field-toggleable) .checkboxes { display: inherit; } + +form .form-group:not(.form-field-toggleable) .checkboxes label { display: inherit; padding: 0.1rem 0.4rem 0.1rem 1.2rem; margin: inherit; } + +form .form-group:not(.form-field-toggleable) .checkboxes label:before { display: none; } + +#grav-login > form { margin: 2rem auto 0; max-width: 350px; } + +#grav-login .form-label { display: none; } + +#grav-login .form-data { margin: 1rem 0; } + +#grav-login .form-input { text-align: center; } + +#grav-login .button-wrapper { text-align: right; } + +#grav-login .button-wrapper .form-data.rememberme { margin: 0; float: left; } + +#grav-login .login-form button[type="submit"] { background: #1AA3ED; border-color: #129be6; color: #fff; } + +#grav-login .login-form button[type="submit"]:focus, #grav-login .login-form button[type="submit"]:hover { background: #1195dc; border-color: #108bce; color: #fff; } + +#grav-login .login-form button[type="submit"]:active, #grav-login .login-form button[type="submit"].active { background: #118fd3; border-color: #0f85c5; color: #fff; } + +#grav-login .twofa-form button[type="submit"]:first-child { background: #1AA3ED; border-color: #129be6; color: #fff; float: right; margin-left: 4px; } + +#grav-login .twofa-form button[type="submit"]:first-child:focus, #grav-login .twofa-form button[type="submit"]:first-child:hover { background: #1195dc; border-color: #108bce; color: #fff; } + +#grav-login .twofa-form button[type="submit"]:first-child:active, #grav-login .twofa-form button[type="submit"]:first-child.active { background: #118fd3; border-color: #0f85c5; color: #fff; } + +.default-animation, a { transition: all 0.5s ease; } + +.pulse { animation-name: pulse_animation; animation-duration: 2000ms; transform-origin: 70% 70%; animation-iteration-count: infinite; animation-timing-function: linear; } + +@keyframes pulse_animation { 0% { transform: scale(1); } + 30% { transform: scale(1); } + 40% { transform: scale(1.08); } + 50% { transform: scale(1); } + 60% { transform: scale(1); } + 70% { transform: scale(1.05); } + 80% { transform: scale(1); } + 100% { transform: scale(1); } } + +[data-simplebar] { position: relative; -ms-flex-direction: column; flex-direction: column; -ms-flex-wrap: wrap; flex-wrap: wrap; -ms-flex-pack: start; justify-content: flex-start; -ms-flex-line-pack: start; align-content: flex-start; -ms-flex-align: start; align-items: flex-start; width: inherit; height: inherit; max-width: inherit; max-height: inherit; } + +.simplebar-wrapper { overflow: hidden; width: inherit; height: inherit; max-width: inherit; max-height: inherit; } + +.simplebar-mask { direction: inherit; position: absolute; overflow: hidden; padding: 0; margin: 0; left: 0; top: 0; bottom: 0; right: 0; width: auto !important; height: auto !important; z-index: 0; } + +.simplebar-offset { direction: inherit !important; box-sizing: inherit !important; resize: none !important; position: absolute; top: 0; left: 0; bottom: 0; right: 0; padding: 0; margin: 0; -webkit-overflow-scrolling: touch; } + +.simplebar-content-wrapper { direction: inherit; box-sizing: border-box !important; position: relative; display: block; height: 100%; /* Required for horizontal native scrollbar to not appear if parent is taller than natural height */ width: auto; visibility: visible; overflow: auto; /* Scroll on this element otherwise element can't have a padding applied properly */ max-width: 100%; /* Not required for horizontal scroll to trigger */ max-height: 100%; /* Needed for vertical scroll to trigger */ } + +.simplebar-content:before, .simplebar-content:after { content: " "; display: table; } + +.simplebar-placeholder { max-height: 100%; max-width: 100%; width: 100%; pointer-events: none; } + +.simplebar-height-auto-observer-wrapper { box-sizing: inherit !important; height: 100%; width: inherit; max-width: 1px; position: relative; float: left; max-height: 1px; overflow: hidden; z-index: -1; padding: 0; margin: 0; pointer-events: none; -ms-flex-positive: inherit; flex-grow: inherit; -ms-flex-negative: 0; flex-shrink: 0; -ms-flex-preferred-size: 0; flex-basis: 0; } + +.simplebar-height-auto-observer { box-sizing: inherit; display: block; opacity: 0; position: absolute; top: 0; left: 0; height: 1000%; width: 1000%; min-height: 1px; min-width: 1px; overflow: hidden; pointer-events: none; z-index: -1; } + +.simplebar-track { z-index: 1; position: absolute; right: 0; bottom: 0; pointer-events: none; overflow: hidden; } + +[data-simplebar].simplebar-dragging .simplebar-track { pointer-events: all; } + +.simplebar-scrollbar { position: absolute; right: 2px; width: 7px; min-height: 10px; } + +.simplebar-scrollbar:before { position: absolute; content: ""; background: rgba(255, 255, 255, 0.5); border-radius: 7px; left: 0; right: 0; opacity: 0; transition: opacity 0.2s linear; } + +.simplebar-track .simplebar-scrollbar.simplebar-visible:before { /* When hovered, remove all transitions from drag handle */ opacity: 0.5; transition: opacity 0s linear; } + +.simplebar-track.simplebar-vertical { top: 0; width: 11px; } + +.simplebar-track.simplebar-vertical .simplebar-scrollbar:before { top: 2px; bottom: 2px; } + +.simplebar-track.simplebar-horizontal { left: 0; height: 11px; } + +.simplebar-track.simplebar-horizontal .simplebar-scrollbar:before { height: 100%; left: 2px; right: 2px; } + +.simplebar-track.simplebar-horizontal .simplebar-scrollbar { right: auto; left: 0; top: 2px; height: 7px; min-height: 0; min-width: 10px; width: auto; } + +/* Rtl support */ +[data-simplebar-direction="rtl"] .simplebar-track.simplebar-vertical { right: auto; left: 0; } + +.hs-dummy-scrollbar-size { direction: rtl; position: fixed; opacity: 0; visibility: hidden; height: 500px; width: 500px; overflow-y: hidden; overflow-x: scroll; } + +/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUuY3NzIiwic291cmNlcyI6WyJ0aGVtZS5zY3NzIiwidGhlbWUvX3ZhcmlhYmxlcy5zY3NzIiwic3BlY3RyZS9fdmFyaWFibGVzLnNjc3MiLCJzcGVjdHJlL19taXhpbnMuc2NzcyIsInNwZWN0cmUvbWl4aW5zL19hdmF0YXIuc2NzcyIsInNwZWN0cmUvbWl4aW5zL19idXR0b24uc2NzcyIsInNwZWN0cmUvbWl4aW5zL19jbGVhcmZpeC5zY3NzIiwic3BlY3RyZS9taXhpbnMvX2NvbG9yLnNjc3MiLCJzcGVjdHJlL21peGlucy9fbGFiZWwuc2NzcyIsInNwZWN0cmUvbWl4aW5zL19wb3NpdGlvbi5zY3NzIiwic3BlY3RyZS9taXhpbnMvX3NoYWRvdy5zY3NzIiwic3BlY3RyZS9taXhpbnMvX3RleHQuc2NzcyIsInNwZWN0cmUvbWl4aW5zL190b2FzdC5zY3NzIiwidGhlbWUvX21peGlucy5zY3NzIiwidGhlbWUvX29mZmNhbnZhcy5zY3NzIiwidGhlbWUvX2ZvbnRzLnNjc3MiLCJ0aGVtZS9fdG9wYmFyLnNjc3MiLCJ0aGVtZS9fYm9keS5zY3NzIiwidGhlbWUvX3R5cG9ncmFwaHkuc2NzcyIsInRoZW1lL19saWZlY3ljbGUuc2NzcyIsInRoZW1lL19mb3Jtcy5zY3NzIiwidGhlbWUvX2FuaW1hdGlvbi5zY3NzIiwidGhlbWUvX3NpbXBsZWJhci5zY3NzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcmUgdmFyaWFibGVzIGFuZCBtaXhpbnNcbkBpbXBvcnQgJ3RoZW1lL3ZhcmlhYmxlcyc7XG5AaW1wb3J0ICdzcGVjdHJlL3ZhcmlhYmxlcyc7XG5AaW1wb3J0ICdzcGVjdHJlL21peGlucyc7XG5cbkBpbXBvcnQgJ3RoZW1lL21peGlucyc7XG5AaW1wb3J0ICd0aGVtZS9vZmZjYW52YXMnO1xuQGltcG9ydCAndGhlbWUvZm9udHMnO1xuQGltcG9ydCAndGhlbWUvdG9wYmFyJztcbkBpbXBvcnQgJ3RoZW1lL2JvZHknO1xuQGltcG9ydCAndGhlbWUvdHlwb2dyYXBoeSc7XG5AaW1wb3J0ICd0aGVtZS9saWZlY3ljbGUnO1xuQGltcG9ydCAndGhlbWUvZm9ybXMnO1xuQGltcG9ydCAndGhlbWUvYW5pbWF0aW9uJztcbkBpbXBvcnQgJ3RoZW1lL3NpbXBsZWJhcic7XG5cblxuIiwiLy8gQ29sb3JzXG4kdHVycXVvaXNlOiAjMUFCQzlDO1xuJGdyZWVuLXNlYTogIzE2QTA4NTtcbiRlbWVyYWxkOiAjMkVDQzcxO1xuJG5lcGhyaXRpczogIzI3QUU2MDtcbiRwZXRlci1yaXZlcjogIzM0OThEQjtcbiRiZWxpemVfaG9sZTogIzI5ODBCOTtcbiRkZWVwLXdlbGw6ICMyODNBNjM7XG4kbGF2ZW5kZXI6ICM3Njc2ZjQ7XG4kYW1ldGh5c3Q6ICNBNjZCQkU7XG4kd2lzdGVyaWE6ICM4RTQ0QUQ7XG4kd2V0LWFzcGhhbHQ6ICMzNDQ5NUU7XG4kbWlkbmlnaHQtYmx1ZTogIzJDM0U1MDtcbiRzdW5mbG93ZXI6ICNGMkNBMjc7XG4kb3JhbmdlOiAjRjM5QzEyO1xuJGNhcnJvdDogI0U2N0UyMjtcbiRwdW1wa2luOiAjRDM1NDAwO1xuJGFsaXphcmluOiAjRTc0QzNDO1xuJHBvbWVncmFuYXRlOiAjQzAzOTJCO1xuJGNsb3VkczogI0VDRjBGMTtcbiRzaWx2ZXI6ICNCREMzQzc7XG4kY29uY3JldGU6ICM5NUE1QTY7XG4kYXNiZXN0b3M6ICM3RjhDOEQ7XG5cbiRwcmltYXJ5LWNvbG9yOiAjMUFBM0VEICFkZWZhdWx0O1xuJHNlY29uZGFyeS1jb2xvcjogIzM4QzVDNyAhZGVmYXVsdDtcbiRkYXJrLWNvbG9yOiAjNDU0ZDVkICFkZWZhdWx0O1xuJGJvZHktZm9udC1jb2xvcjogZGFya2VuKCRkYXJrLWNvbG9yLCA1JSkgIWRlZmF1bHQ7XG4kbGluay1jb2xvcjogZGFya2VuKCRwcmltYXJ5LWNvbG9yLCA1JSkgIWRlZmF1bHQ7XG4kZ3JheS1jb2xvcjogbGlnaHRlbigkZGFyay1jb2xvciwgNDAlKSAhZGVmYXVsdDtcbiRncmF5LWNvbG9yLWRhcms6IGRhcmtlbigkZ3JheS1jb2xvciwgMjUlKSAhZGVmYXVsdDtcbiRib3JkZXItY29sb3I6IGxpZ2h0ZW4oJGRhcmstY29sb3IsIDYwJSkgIWRlZmF1bHQ7XG4kYmctY29sb3I6IGxpZ2h0ZW4oJGRhcmstY29sb3IsIDY2JSkgIWRlZmF1bHQ7XG4kY29kZS1jb2xvcjogJGxhdmVuZGVyICFkZWZhdWx0O1xuJHNlbGVjdGlvbi1jb2xvcjogI0VDRUNGRTtcblxuLy8gU2lkZWJhclxuJHNpZGViYXItd2lkdGg6IDE0cmVtO1xuJHNpZGViYXItYnJhbmQtaGVpZ2h0OiA3cmVtO1xuXG4vLyBGb250c1xuJGJhc2UtZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIHN5c3RlbS11aSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcIlNlZ29lIFVJXCIsIFJvYm90byAhZGVmYXVsdDtcbiRmYWxsYmFjay1mb250LWZhbWlseTogXCJIZWx2ZXRpY2EgTmV1ZVwiLCBzYW5zLXNlcmlmICFkZWZhdWx0O1xuJGJvZHktZm9udC1mYW1pbHk6IFwiUHVibGljIFNhbnNcIiwgICRmYWxsYmFjay1mb250LWZhbWlseSAhZGVmYXVsdDtcbiR0aXRsZS1mb250LWZhbWlseTogXCJNZXRyb3BvbGlzXCIsICRmYWxsYmFjay1mb250LWZhbWlseSAhZGVmYXVsdDtcbiRtb25vLWZvbnQtZmFtaWx5OiBcIkhhY2tcIiwgbW9ub3NwYWNlICFkZWZhdWx0O1xuJGZvbnQtc2l6ZTogLjg1cmVtICFkZWZhdWx0O1xuJG1pbi1yZXNwb25zaXZlLWZvbnQtc2l6ZTogMThweDtcbiIsIi8vIENvcmUgdmFyaWFibGVzXG4kdmVyc2lvbjogXCIwLjUuOFwiO1xuXG4vLyBDb3JlIGZlYXR1cmVzXG4kcnRsOiBmYWxzZSAhZGVmYXVsdDtcblxuLy8gQ29yZSBjb2xvcnNcbiRwcmltYXJ5LWNvbG9yOiAjNTc1NWQ5ICFkZWZhdWx0O1xuJHByaW1hcnktY29sb3ItZGFyazogZGFya2VuKCRwcmltYXJ5LWNvbG9yLCAzJSkgIWRlZmF1bHQ7XG4kcHJpbWFyeS1jb2xvci1saWdodDogbGlnaHRlbigkcHJpbWFyeS1jb2xvciwgMyUpICFkZWZhdWx0O1xuJHNlY29uZGFyeS1jb2xvcjogbGlnaHRlbigkcHJpbWFyeS1jb2xvciwgMzcuNSUpICFkZWZhdWx0O1xuJHNlY29uZGFyeS1jb2xvci1kYXJrOiBkYXJrZW4oJHNlY29uZGFyeS1jb2xvciwgMyUpICFkZWZhdWx0O1xuJHNlY29uZGFyeS1jb2xvci1saWdodDogbGlnaHRlbigkc2Vjb25kYXJ5LWNvbG9yLCAzJSkgIWRlZmF1bHQ7XG5cbi8vIEdyYXkgY29sb3JzXG4kZGFyay1jb2xvcjogIzMwMzc0MiAhZGVmYXVsdDtcbiRsaWdodC1jb2xvcjogI2ZmZiAhZGVmYXVsdDtcbiRncmF5LWNvbG9yOiBsaWdodGVuKCRkYXJrLWNvbG9yLCA1NSUpICFkZWZhdWx0O1xuJGdyYXktY29sb3ItZGFyazogZGFya2VuKCRncmF5LWNvbG9yLCAzMCUpICFkZWZhdWx0O1xuJGdyYXktY29sb3ItbGlnaHQ6IGxpZ2h0ZW4oJGdyYXktY29sb3IsIDIwJSkgIWRlZmF1bHQ7XG5cbiRib3JkZXItY29sb3I6IGxpZ2h0ZW4oJGRhcmstY29sb3IsIDY1JSkgIWRlZmF1bHQ7XG4kYm9yZGVyLWNvbG9yLWRhcms6IGRhcmtlbigkYm9yZGVyLWNvbG9yLCAxMCUpICFkZWZhdWx0O1xuJGJvcmRlci1jb2xvci1saWdodDogbGlnaHRlbigkYm9yZGVyLWNvbG9yLCA4JSkgIWRlZmF1bHQ7XG4kYmctY29sb3I6IGxpZ2h0ZW4oJGRhcmstY29sb3IsIDc1JSkgIWRlZmF1bHQ7XG4kYmctY29sb3ItZGFyazogZGFya2VuKCRiZy1jb2xvciwgMyUpICFkZWZhdWx0O1xuJGJnLWNvbG9yLWxpZ2h0OiAkbGlnaHQtY29sb3IgIWRlZmF1bHQ7XG5cbi8vIENvbnRyb2wgY29sb3JzXG4kc3VjY2Vzcy1jb2xvcjogIzMyYjY0MyAhZGVmYXVsdDtcbiR3YXJuaW5nLWNvbG9yOiAjZmZiNzAwICFkZWZhdWx0O1xuJGVycm9yLWNvbG9yOiAjZTg1NjAwICFkZWZhdWx0O1xuXG4vLyBPdGhlciBjb2xvcnNcbiRjb2RlLWNvbG9yOiAjZDczZTQ4ICFkZWZhdWx0O1xuJGhpZ2hsaWdodC1jb2xvcjogI2ZmZTliMyAhZGVmYXVsdDtcbiRib2R5LWJnOiAkYmctY29sb3ItbGlnaHQgIWRlZmF1bHQ7XG4kYm9keS1mb250LWNvbG9yOiBsaWdodGVuKCRkYXJrLWNvbG9yLCA1JSkgIWRlZmF1bHQ7XG4kbGluay1jb2xvcjogJHByaW1hcnktY29sb3IgIWRlZmF1bHQ7XG4kbGluay1jb2xvci1kYXJrOiBkYXJrZW4oJGxpbmstY29sb3IsIDEwJSkgIWRlZmF1bHQ7XG4kbGluay1jb2xvci1saWdodDogbGlnaHRlbigkbGluay1jb2xvciwgMTAlKSAhZGVmYXVsdDtcblxuLy8gRm9udHNcbi8vIENyZWRpdDogaHR0cHM6Ly93d3cuc21hc2hpbmdtYWdhemluZS5jb20vMjAxNS8xMS91c2luZy1zeXN0ZW0tdWktZm9udHMtcHJhY3RpY2FsLWd1aWRlL1xuJGJhc2UtZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIHN5c3RlbS11aSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcIlNlZ29lIFVJXCIsIFJvYm90byAhZGVmYXVsdDtcbiRtb25vLWZvbnQtZmFtaWx5OiBcIlNGIE1vbm9cIiwgXCJTZWdvZSBVSSBNb25vXCIsIFwiUm9ib3RvIE1vbm9cIiwgTWVubG8sIENvdXJpZXIsIG1vbm9zcGFjZSAhZGVmYXVsdDtcbiRmYWxsYmFjay1mb250LWZhbWlseTogXCJIZWx2ZXRpY2EgTmV1ZVwiLCBzYW5zLXNlcmlmICFkZWZhdWx0O1xuJGNqay16aC1oYW5zLWZvbnQtZmFtaWx5OiAkYmFzZS1mb250LWZhbWlseSwgXCJQaW5nRmFuZyBTQ1wiLCBcIkhpcmFnaW5vIFNhbnMgR0JcIiwgXCJNaWNyb3NvZnQgWWFIZWlcIiwgJGZhbGxiYWNrLWZvbnQtZmFtaWx5ICFkZWZhdWx0O1xuJGNqay16aC1oYW50LWZvbnQtZmFtaWx5OiAkYmFzZS1mb250LWZhbWlseSwgXCJQaW5nRmFuZyBUQ1wiLCBcIkhpcmFnaW5vIFNhbnMgQ05TXCIsIFwiTWljcm9zb2Z0IEpoZW5nSGVpXCIsICRmYWxsYmFjay1mb250LWZhbWlseSAhZGVmYXVsdDtcbiRjamstanAtZm9udC1mYW1pbHk6ICRiYXNlLWZvbnQtZmFtaWx5LCBcIkhpcmFnaW5vIFNhbnNcIiwgXCJIaXJhZ2lubyBLYWt1IEdvdGhpYyBQcm9cIiwgXCJZdSBHb3RoaWNcIiwgWXVHb3RoaWMsIE1laXJ5bywgJGZhbGxiYWNrLWZvbnQtZmFtaWx5ICFkZWZhdWx0O1xuJGNqay1rby1mb250LWZhbWlseTogJGJhc2UtZm9udC1mYW1pbHksIFwiTWFsZ3VuIEdvdGhpY1wiLCAkZmFsbGJhY2stZm9udC1mYW1pbHkgIWRlZmF1bHQ7XG4kYm9keS1mb250LWZhbWlseTogJGJhc2UtZm9udC1mYW1pbHksICRmYWxsYmFjay1mb250LWZhbWlseSAhZGVmYXVsdDtcblxuLy8gVW5pdCBzaXplc1xuJHVuaXQtbzogLjA1cmVtICFkZWZhdWx0O1xuJHVuaXQtaDogLjFyZW0gIWRlZmF1bHQ7XG4kdW5pdC0xOiAuMnJlbSAhZGVmYXVsdDtcbiR1bml0LTI6IC40cmVtICFkZWZhdWx0O1xuJHVuaXQtMzogLjZyZW0gIWRlZmF1bHQ7XG4kdW5pdC00OiAuOHJlbSAhZGVmYXVsdDtcbiR1bml0LTU6IDFyZW0gIWRlZmF1bHQ7XG4kdW5pdC02OiAxLjJyZW0gIWRlZmF1bHQ7XG4kdW5pdC03OiAxLjRyZW0gIWRlZmF1bHQ7XG4kdW5pdC04OiAxLjZyZW0gIWRlZmF1bHQ7XG4kdW5pdC05OiAxLjhyZW0gIWRlZmF1bHQ7XG4kdW5pdC0xMDogMnJlbSAhZGVmYXVsdDtcbiR1bml0LTEyOiAyLjRyZW0gIWRlZmF1bHQ7XG4kdW5pdC0xNjogMy4ycmVtICFkZWZhdWx0O1xuXG4vLyBGb250IHNpemVzXG4kaHRtbC1mb250LXNpemU6IDIwcHggIWRlZmF1bHQ7XG4kaHRtbC1saW5lLWhlaWdodDogMS41ICFkZWZhdWx0O1xuJGZvbnQtc2l6ZTogLjhyZW0gIWRlZmF1bHQ7XG4kZm9udC1zaXplLXNtOiAuN3JlbSAhZGVmYXVsdDtcbiRmb250LXNpemUtbGc6IC45cmVtICFkZWZhdWx0O1xuJGxpbmUtaGVpZ2h0OiAxLjJyZW0gIWRlZmF1bHQ7XG5cbi8vIFNpemVzXG4kbGF5b3V0LXNwYWNpbmc6ICR1bml0LTIgIWRlZmF1bHQ7XG4kbGF5b3V0LXNwYWNpbmctc206ICR1bml0LTEgIWRlZmF1bHQ7XG4kbGF5b3V0LXNwYWNpbmctbGc6ICR1bml0LTQgIWRlZmF1bHQ7XG4kYm9yZGVyLXJhZGl1czogJHVuaXQtaCAhZGVmYXVsdDtcbiRib3JkZXItd2lkdGg6ICR1bml0LW8gIWRlZmF1bHQ7XG4kYm9yZGVyLXdpZHRoLWxnOiAkdW5pdC1oICFkZWZhdWx0O1xuJGNvbnRyb2wtc2l6ZTogJHVuaXQtOSAhZGVmYXVsdDtcbiRjb250cm9sLXNpemUtc206ICR1bml0LTcgIWRlZmF1bHQ7XG4kY29udHJvbC1zaXplLWxnOiAkdW5pdC0xMCAhZGVmYXVsdDtcbiRjb250cm9sLXBhZGRpbmcteDogJHVuaXQtMiAhZGVmYXVsdDtcbiRjb250cm9sLXBhZGRpbmcteC1zbTogJHVuaXQtMiAqIC43NSAhZGVmYXVsdDtcbiRjb250cm9sLXBhZGRpbmcteC1sZzogJHVuaXQtMiAqIDEuNSAhZGVmYXVsdDtcbiRjb250cm9sLXBhZGRpbmcteTogKCRjb250cm9sLXNpemUgLSAkbGluZS1oZWlnaHQpIC8gMiAtICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XG4kY29udHJvbC1wYWRkaW5nLXktc206ICgkY29udHJvbC1zaXplLXNtIC0gJGxpbmUtaGVpZ2h0KSAvIDIgLSAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xuJGNvbnRyb2wtcGFkZGluZy15LWxnOiAoJGNvbnRyb2wtc2l6ZS1sZyAtICRsaW5lLWhlaWdodCkgLyAyIC0gJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcbiRjb250cm9sLWljb24tc2l6ZTogLjhyZW0gIWRlZmF1bHQ7XG5cbiRjb250cm9sLXdpZHRoLXhzOiAxODBweCAhZGVmYXVsdDtcbiRjb250cm9sLXdpZHRoLXNtOiAzMjBweCAhZGVmYXVsdDtcbiRjb250cm9sLXdpZHRoLW1kOiA2NDBweCAhZGVmYXVsdDtcbiRjb250cm9sLXdpZHRoLWxnOiA5NjBweCAhZGVmYXVsdDtcbiRjb250cm9sLXdpZHRoLXhsOiAxMjgwcHggIWRlZmF1bHQ7XG5cbi8vIFJlc3BvbnNpdmUgYnJlYWtwb2ludHNcbiRzaXplLXhzOiA0ODBweCAhZGVmYXVsdDtcbiRzaXplLXNtOiA2MDBweCAhZGVmYXVsdDtcbiRzaXplLW1kOiA4NDBweCAhZGVmYXVsdDtcbiRzaXplLWxnOiA5NjBweCAhZGVmYXVsdDtcbiRzaXplLXhsOiAxMjgwcHggIWRlZmF1bHQ7XG4kc2l6ZS0yeDogMTQ0MHB4ICFkZWZhdWx0O1xuXG4kcmVzcG9uc2l2ZS1icmVha3BvaW50OiAkc2l6ZS14cyAhZGVmYXVsdDtcblxuLy8gWi1pbmRleFxuJHppbmRleC0wOiAxICFkZWZhdWx0O1xuJHppbmRleC0xOiAxMDAgIWRlZmF1bHQ7XG4kemluZGV4LTI6IDIwMCAhZGVmYXVsdDtcbiR6aW5kZXgtMzogMzAwICFkZWZhdWx0O1xuJHppbmRleC00OiA0MDAgIWRlZmF1bHQ7XG4iLCIvLyBNaXhpbnNcbkBpbXBvcnQgXCJtaXhpbnMvYXZhdGFyXCI7XG5AaW1wb3J0IFwibWl4aW5zL2J1dHRvblwiO1xuQGltcG9ydCBcIm1peGlucy9jbGVhcmZpeFwiO1xuQGltcG9ydCBcIm1peGlucy9jb2xvclwiO1xuQGltcG9ydCBcIm1peGlucy9sYWJlbFwiO1xuQGltcG9ydCBcIm1peGlucy9wb3NpdGlvblwiO1xuQGltcG9ydCBcIm1peGlucy9zaGFkb3dcIjtcbkBpbXBvcnQgXCJtaXhpbnMvdGV4dFwiO1xuQGltcG9ydCBcIm1peGlucy90b2FzdFwiOyIsIi8vIEF2YXRhciBtaXhpblxuQG1peGluIGF2YXRhci1iYXNlKCRzaXplOiAkdW5pdC04KSB7XG4gIGZvbnQtc2l6ZTogJHNpemUgLyAyO1xuICBoZWlnaHQ6ICRzaXplO1xuICB3aWR0aDogJHNpemU7XG59XG4iLCIvLyBCdXR0b24gdmFyaWFudCBtaXhpblxuQG1peGluIGJ1dHRvbi12YXJpYW50KCRjb2xvcjogJHByaW1hcnktY29sb3IpIHtcbiAgYmFja2dyb3VuZDogJGNvbG9yO1xuICBib3JkZXItY29sb3I6IGRhcmtlbigkY29sb3IsIDMlKTtcbiAgY29sb3I6ICRsaWdodC1jb2xvcjtcbiAgJjpmb2N1cyB7XG4gICAgQGluY2x1ZGUgY29udHJvbC1zaGFkb3coJGNvbG9yKTtcbiAgfVxuICAmOmZvY3VzLFxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiBkYXJrZW4oJGNvbG9yLCAyJSk7XG4gICAgYm9yZGVyLWNvbG9yOiBkYXJrZW4oJGNvbG9yLCA1JSk7XG4gICAgY29sb3I6ICRsaWdodC1jb2xvcjtcbiAgfVxuICAmOmFjdGl2ZSxcbiAgJi5hY3RpdmUge1xuICAgIGJhY2tncm91bmQ6IGRhcmtlbigkY29sb3IsIDclKTtcbiAgICBib3JkZXItY29sb3I6IGRhcmtlbigkY29sb3IsIDEwJSk7XG4gICAgY29sb3I6ICRsaWdodC1jb2xvcjtcbiAgfVxuICAmLmxvYWRpbmcge1xuICAgICY6OmFmdGVyIHtcbiAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICRsaWdodC1jb2xvcjtcbiAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAkbGlnaHQtY29sb3I7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBidXR0b24tb3V0bGluZS12YXJpYW50KCRjb2xvcjogJHByaW1hcnktY29sb3IpIHtcbiAgYmFja2dyb3VuZDogJGxpZ2h0LWNvbG9yO1xuICBib3JkZXItY29sb3I6ICRjb2xvcjtcbiAgY29sb3I6ICRjb2xvcjtcbiAgJjpmb2N1cyB7XG4gICAgQGluY2x1ZGUgY29udHJvbC1zaGFkb3coJGNvbG9yKTtcbiAgfVxuICAmOmZvY3VzLFxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiBsaWdodGVuKCRjb2xvciwgNTAlKTtcbiAgICBib3JkZXItY29sb3I6IGRhcmtlbigkY29sb3IsIDIlKTtcbiAgICBjb2xvcjogJGNvbG9yO1xuICB9XG4gICY6YWN0aXZlLFxuICAmLmFjdGl2ZSB7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yO1xuICAgIGJvcmRlci1jb2xvcjogZGFya2VuKCRjb2xvciwgNSUpO1xuICAgIGNvbG9yOiAkbGlnaHQtY29sb3I7XG4gIH1cbiAgJi5sb2FkaW5nIHtcbiAgICAmOjphZnRlciB7XG4gICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAkY29sb3I7XG4gICAgICBib3JkZXItbGVmdC1jb2xvcjogJGNvbG9yO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ2xlYXJmaXggbWl4aW5cbkBtaXhpbiBjbGVhcmZpeCgpIHtcbiAgJjo6YWZ0ZXIge1xuICAgIGNsZWFyOiBib3RoO1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgZGlzcGxheTogdGFibGU7XG4gIH1cbn1cbiIsIi8vIEJhY2tncm91bmQgY29sb3IgdXRpbGl0eSBtaXhpblxuQG1peGluIGJnLWNvbG9yLXZhcmlhbnQoJG5hbWU6IFwiLmJnLXByaW1hcnlcIiwgJGNvbG9yOiAkcHJpbWFyeS1jb2xvcikge1xuICAjeyRuYW1lfSB7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yICFpbXBvcnRhbnQ7XG5cbiAgICBAaWYgKGxpZ2h0bmVzcygkY29sb3IpIDwgNjApIHtcbiAgICAgIGNvbG9yOiAkbGlnaHQtY29sb3I7XG4gICAgfVxuICB9XG59XG5cbi8vIFRleHQgY29sb3IgdXRpbGl0eSBtaXhpblxuQG1peGluIHRleHQtY29sb3ItdmFyaWFudCgkbmFtZTogXCIudGV4dC1wcmltYXJ5XCIsICRjb2xvcjogJHByaW1hcnktY29sb3IpIHtcbiAgI3skbmFtZX0ge1xuICAgIGNvbG9yOiAkY29sb3IgIWltcG9ydGFudDtcbiAgfVxuXG4gIGEjeyRuYW1lfSB7XG4gICAgJjpmb2N1cyxcbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiBkYXJrZW4oJGNvbG9yLCA1JSk7XG4gICAgfVxuICAgICY6dmlzaXRlZCB7XG4gICAgICBjb2xvcjogbGlnaHRlbigkY29sb3IsIDUlKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIExhYmVsIGJhc2Ugc3R5bGVcbkBtaXhpbiBsYWJlbC1iYXNlKCkge1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgbGluZS1oZWlnaHQ6IDEuMjU7XG4gIHBhZGRpbmc6IC4xcmVtIC4ycmVtO1xufVxuXG5AbWl4aW4gbGFiZWwtdmFyaWFudCgkY29sb3I6ICRsaWdodC1jb2xvciwgJGJnLWNvbG9yOiAkcHJpbWFyeS1jb2xvcikge1xuICBiYWNrZ3JvdW5kOiAkYmctY29sb3I7XG4gIGNvbG9yOiAkY29sb3I7XG59XG4iLCIvLyBNYXJnaW4gdXRpbGl0eSBtaXhpblxuQG1peGluIG1hcmdpbi12YXJpYW50KCRpZDogMSwgJHNpemU6ICR1bml0LTEpIHtcbiAgLm0tI3skaWR9IHtcbiAgICBtYXJnaW46ICRzaXplICFpbXBvcnRhbnQ7XG4gIH1cblxuICAubWItI3skaWR9IHtcbiAgICBtYXJnaW4tYm90dG9tOiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG5cbiAgLm1sLSN7JGlkfSB7XG4gICAgbWFyZ2luLWxlZnQ6ICRzaXplICFpbXBvcnRhbnQ7XG4gIH1cblxuICAubXItI3skaWR9IHtcbiAgICBtYXJnaW4tcmlnaHQ6ICRzaXplICFpbXBvcnRhbnQ7XG4gIH1cblxuICAubXQtI3skaWR9IHtcbiAgICBtYXJnaW4tdG9wOiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG5cbiAgLm14LSN7JGlkfSB7XG4gICAgbWFyZ2luLWxlZnQ6ICRzaXplICFpbXBvcnRhbnQ7XG4gICAgbWFyZ2luLXJpZ2h0OiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG5cbiAgLm15LSN7JGlkfSB7XG4gICAgbWFyZ2luLWJvdHRvbTogJHNpemUgIWltcG9ydGFudDtcbiAgICBtYXJnaW4tdG9wOiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG59XG5cbi8vIFBhZGRpbmcgdXRpbGl0eSBtaXhpblxuQG1peGluIHBhZGRpbmctdmFyaWFudCgkaWQ6IDEsICRzaXplOiAkdW5pdC0xKSB7XG4gIC5wLSN7JGlkfSB7XG4gICAgcGFkZGluZzogJHNpemUgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5wYi0jeyRpZH0ge1xuICAgIHBhZGRpbmctYm90dG9tOiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG5cbiAgLnBsLSN7JGlkfSB7XG4gICAgcGFkZGluZy1sZWZ0OiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG5cbiAgLnByLSN7JGlkfSB7XG4gICAgcGFkZGluZy1yaWdodDogJHNpemUgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5wdC0jeyRpZH0ge1xuICAgIHBhZGRpbmctdG9wOiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG5cbiAgLnB4LSN7JGlkfSB7XG4gICAgcGFkZGluZy1sZWZ0OiAkc2l6ZSAhaW1wb3J0YW50O1xuICAgIHBhZGRpbmctcmlnaHQ6ICRzaXplICFpbXBvcnRhbnQ7XG4gIH1cbiAgXG4gIC5weS0jeyRpZH0ge1xuICAgIHBhZGRpbmctYm90dG9tOiAkc2l6ZSAhaW1wb3J0YW50O1xuICAgIHBhZGRpbmctdG9wOiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG59XG4iLCIvLyBDb21wb25lbnQgZm9jdXMgc2hhZG93XG5AbWl4aW4gY29udHJvbC1zaGFkb3coJGNvbG9yOiAkcHJpbWFyeS1jb2xvcikge1xuICBib3gtc2hhZG93OiAwIDAgMCAuMXJlbSByZ2JhKCRjb2xvciwgLjIpO1xufVxuXG4vLyBTaGFkb3cgbWl4aW5cbkBtaXhpbiBzaGFkb3ctdmFyaWFudCgkb2Zmc2V0KSB7XG4gIGJveC1zaGFkb3c6IDAgJG9mZnNldCAoJG9mZnNldCArIC4wNXJlbSkgKiAyIHJnYmEoJGRhcmstY29sb3IsIC4zKTtcbn1cbiIsIi8vIFRleHQgRWxsaXBzaXNcbkBtaXhpbiB0ZXh0LWVsbGlwc2lzKCkge1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cbiIsIi8vIFRvYXN0IHZhcmlhbnQgbWl4aW5cbkBtaXhpbiB0b2FzdC12YXJpYW50KCRjb2xvcjogJGRhcmstY29sb3IpIHtcbiAgYmFja2dyb3VuZDogcmdiYSgkY29sb3IsIC45NSk7XG4gIGJvcmRlci1jb2xvcjogJGNvbG9yO1xufVxuIiwiQG1peGluIGJyZWFrcG9pbnQoJHBvaW50KSB7XG4gIEBpZiAkcG9pbnQgPT0gMngge1xuICAgIEBtZWRpYSAobWluLXdpZHRoOiRzaXplLTJ4KSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH0gQGVsc2UgaWYgJHBvaW50ID09IHhsIHtcbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNpemUteGwpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cblxuICB9IEBlbHNlIGlmICRwb2ludCA9PSBsZyB7XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzaXplLWxnKSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH0gQGVsc2UgaWYgJHBvaW50ID09IG1kIHtcbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNpemUtbWQpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfSBAZWxzZSBpZiAkcG9pbnQgPT0gc20ge1xuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2l6ZS1zbSkge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9IEBlbHNlIGlmICRwb2ludCA9PSB4cyB7XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzaXplLXhzKSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH0gIEBlbHNlIHtcbiAgICBAd2FybiBcIkJyZWFrcG9pbnQgbWl4aW4gc3VwcG9ydHM6IHhzLCBzbSwgbWQsIGxnLCB4bCwgMnhcIjtcbiAgfVxufVxuXG5AbWl4aW4gdmVydGljYWwtYWxpZ24oJHBvc2l0aW9uOiByZWxhdGl2ZSkge1xuICBwb3NpdGlvbjogJHBvc2l0aW9uO1xuICB0b3A6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xufVxuXG5AbWl4aW4gYnV0dG9uLXByaW1hcnkoKSB7XG4gIGJhY2tncm91bmQ6ICRwcmltYXJ5LWNvbG9yO1xuICBib3JkZXItY29sb3I6ICRwcmltYXJ5LWNvbG9yLWRhcms7XG4gIGNvbG9yOiAkbGlnaHQtY29sb3I7XG4gICY6Zm9jdXMsXG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IGRhcmtlbigkcHJpbWFyeS1jb2xvci1kYXJrLCAyJSk7XG4gICAgYm9yZGVyLWNvbG9yOiBkYXJrZW4oJHByaW1hcnktY29sb3ItZGFyaywgNSUpO1xuICAgIGNvbG9yOiAkbGlnaHQtY29sb3I7XG4gIH1cbiAgJjphY3RpdmUsXG4gICYuYWN0aXZlIHtcbiAgICBiYWNrZ3JvdW5kOiBkYXJrZW4oJHByaW1hcnktY29sb3ItZGFyaywgNCUpO1xuICAgIGJvcmRlci1jb2xvcjogZGFya2VuKCRwcmltYXJ5LWNvbG9yLWRhcmssIDclKTtcbiAgICBjb2xvcjogJGxpZ2h0LWNvbG9yO1xuICB9XG59XG5cbkBmdW5jdGlvbiBzdHJpcC11bml0KCR2YWx1ZSkge1xuICBAcmV0dXJuICR2YWx1ZSAvICgkdmFsdWUgKiAwICsgMSk7XG59XG5cbkBtaXhpbiBmbHVpZC10eXBlKCRtaW4tdncsICRtYXgtdncsICRtaW4tZm9udC1zaXplLCAkbWF4LWZvbnQtc2l6ZSkge1xuICAkdTE6IHVuaXQoJG1pbi12dyk7XG4gICR1MjogdW5pdCgkbWF4LXZ3KTtcbiAgJHUzOiB1bml0KCRtaW4tZm9udC1zaXplKTtcbiAgJHU0OiB1bml0KCRtYXgtZm9udC1zaXplKTtcblxuICBAaWYgJHUxID09ICR1MiBhbmQgJHUxID09ICR1MyBhbmQgJHUxID09ICR1NCB7XG4gICAgJiB7XG4gICAgICBmb250LXNpemU6ICRtaW4tZm9udC1zaXplO1xuICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogJG1pbi12dykge1xuICAgICAgICBmb250LXNpemU6IGNhbGMoI3skbWluLWZvbnQtc2l6ZX0gKyAje3N0cmlwLXVuaXQoJG1heC1mb250LXNpemUgLSAkbWluLWZvbnQtc2l6ZSl9ICogKCgxMDB2dyAtICN7JG1pbi12d30pIC8gI3tzdHJpcC11bml0KCRtYXgtdncgLSAkbWluLXZ3KX0pKTtcbiAgICAgIH1cbiAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6ICRtYXgtdncpIHtcbiAgICAgICAgZm9udC1zaXplOiAkbWF4LWZvbnQtc2l6ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi5vZmYtY2FudmFzIHtcbiAgICBtaW4taGVpZ2h0OiAxMDB2aDtcblxuICAgIC5vZmYtY2FudmFzLXRvZ2dsZSB7XG4gICAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgICAgdG9wOiAwLjNyZW07XG4gICAgICAgIGxlZnQ6IDAuM3JlbTtcbiAgICAgICAgd2lkdGg6IDEuNnJlbTtcbiAgICAgICAgaGVpZ2h0OiAxLjZyZW07XG4gICAgICAgIHBhZGRpbmctdG9wOiAuMTVyZW07XG4gICAgICAgIHotaW5kZXg6IDM7XG4gICAgICAgIGZvbnQtc2l6ZTogMTZweCAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIC5vZmYtY2FudmFzLWNvbnRlbnQge1xuICAgICAgICBwYWRkaW5nOiBpbmhlcml0O1xuICAgIH1cblxuICAgIC5vZmYtY2FudmFzLW92ZXJsYXkge1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKCRkYXJrLWNvbG9yLCAuNSk7XG4gICAgfVxuXG4gICAgLmxlYXJuLXNpZGViYXIge1xuICAgICAgICB3aWR0aDogJHNpZGViYXItd2lkdGg7XG4gICAgICAgIGNvbG9yOiByZ2JhKCNmZmYsIDAuNik7XG4gICAgICAgIG92ZXJmbG93LXk6IGluaGVyaXQ7XG5cbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMHZoO1xuICAgICAgICAgICAgd2lkdGg6ICRzaWRlYmFyLXdpZHRoO1xuICAgICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGEge1xuICAgICAgICAgICAgY29sb3I6IHJnYmEoI2ZmZiwgMC44KTtcbiAgICAgICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLnBhZGRpbmcge1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAxcmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgaHIge1xuICAgICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoI2ZmZiwgMC4xKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5sZWFybi1icmFuZCB7XG4gICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgICAgICBoZWlnaHQ6ICRzaWRlYmFyLWJyYW5kLWhlaWdodDtcbiAgICAgICAgICAgIHdpZHRoOiAkc2lkZWJhci13aWR0aDtcbiAgICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICAgIC8vYmFja2dyb3VuZDogcmdiYSgjMDAwLCAwLjMpO1xuICAgICAgICAgICAgLy9ib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgjZmZmLCAwLjEpO1xuICAgICAgICAgICAgcGFkZGluZzogMTBweCAyMHB4O1xuICAgICAgICAgICAgYm94LXNoYWRvdzogMCAxMHB4IDEwcHggLTEwcHggcmdiYSgjMDAwLCAwLjMpO1xuXG4gICAgICAgICAgICAjbG9nbyB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgICAgIG1hcmdpbjogMCAyLjVyZW0gMC41cmVtO1xuXG4gICAgICAgICAgICAgICAgcGF0aCB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGw6IHJnYmEoI2ZmZiwgMC44KSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLmxlYXJuLW5hdiB7XG4gICAgICAgICAgICB0b3A6ICRzaWRlYmFyLWJyYW5kLWhlaWdodDtcbiAgICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgICAgIHdpZHRoOiAkc2lkZWJhci13aWR0aDtcbiAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAxcmVtO1xuICAgICAgICAgICAgcG9zaXRpb246IGZpeGVkO1xuXG4gICAgICAgICAgICAucmVhZC1pY29uIHtcbiAgICAgICAgICAgICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMnB4O1xuICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDVweDtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuODtcbiAgICAgICAgICAgICAgICBjb2xvcjogcmdiYSgjZmZmLCAwLjYpO1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLnZpc2l0ZWQgPiBhID4gLnJlYWQtaWNvbiB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB1bCB7XG4gICAgICAgICAgICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogMXJlbTtcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAuMnJlbTtcblxuICAgICAgICAgICAgICAgICYudG9waWNzIHtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgICAgICAgICAgICAgPiBsaTpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYSB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLXRvcDogMC4xcmVtO1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMC4xcmVtO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICYuc2VhcmNoZWQge1xuICAgICAgICAgICAgICAgICAgICBhIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiByZ2JhKCNmZmYsIDAuNSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAuc2VhcmNoLW1hdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiByZ2JhKCNmZmYsIDAuOCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiByZ2JhKCNmZmYsIDAuOSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJi50b3BpY3Mge1xuXG4gICAgICAgICAgICAgICAgICAgICYuc2VhcmNoZWQge1xuICAgICAgICAgICAgICAgICAgICAgICAgdWwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICAgICAmID4gbGkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogLjNyZW07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICYuYWN0aXZlLCAmLnBhcmVudCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgjMDAwLCAwLjIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAtMXJlbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDFyZW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZy10b3A6IDAuMjVyZW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDAuMjVyZW07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG5cblxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxpLCBvbCB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IC4xcmVtO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHVsIHtcbiAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuXG5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsaSB7XG4gICAgICAgICAgICAgICAgICAgICYuYWN0aXZlID4gYSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IC0wLjRyZW07XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDAuNHJlbTtcblxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYSA+IHNwYW4gPiBiIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogcmdiYSgjZmZmLCAwLjYpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLmFjdGl2ZSB1bCwgLnBhcmVudCB1bCB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC5zZWFyY2hib3gge1xuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgjZmZmLCAwLjEpO1xuICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgjMDAwLCAwLjEpO1xuICAgICAgICAgICAgY29sb3I6IHJnYmEoI2ZmZiwgMC42KTtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDtcblxuICAgICAgICAgICAgOjpwbGFjZWhvbGRlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6IHJnYmEoI2ZmZiwgMC41KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5wdXQge1xuICAgICAgICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiA0cHggMjVweCA0cHggMzBweDtcbiAgICAgICAgICAgICAgICBjb2xvcjogcmdiYSgjZmZmLCAwLjgpO1xuICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiAyMDA7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAwLjdyZW07XG5cblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsYWJlbCB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgIGxlZnQ6IDhweDtcbiAgICAgICAgICAgICAgICB0b3A6IDJweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3BhbiB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgIHJpZ2h0OiA4cHg7XG4gICAgICAgICAgICAgICAgdG9wOiAycHg7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLnNlYXJjaC1vcHRpb25zIHtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IDEwcHg7XG5cbiAgICAgICAgICAgIC5hZHYtc2VhcmNoIHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDg1JTtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAwLjZyZW07XG5cbiAgICAgICAgICAgICAgICBpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAudmVyc2lvbi1jaG9vc2VyIHNlbGVjdCB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoI2ZmZiwgMC4xKTtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKCMwMDAsIDAuMSk7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4O1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogLjhyZW07XG4gICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDFweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC5zaWRlLXRvb2xzIHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogOTAlO1xuICAgICAgICAgICAgY29sb3I6IHJnYmEoI2ZmZiwgMC41KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqIERlZmF1bHRzIChwdXJwbGUpICoqL1xuLm9mZi1jYW52YXMgLmxlYXJuLXNpZGViYXI6YmVmb3JlIHtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTUwZGVnLCAkd2lzdGVyaWEgMCwgJGRlZXAtd2VsbCAxMDAlKTtcbn1cblxuLyoqIFNlY29uZGFyeSAoZ3JlZW4pICoqL1xuYm9keS5zaWRlYmFyLWdyZWVuIHtcbiAgICAub2ZmLWNhbnZhcyAubGVhcm4tc2lkZWJhcjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTUwZGVnLCAkZ3JlZW4tc2VhIDAsICRkZWVwLXdlbGwgMTAwJSk7XG4gICAgfVxufVxuXG4vKiogVGVydGlhcnkgKGJsdWUpKiovXG5ib2R5LnNpZGViYXItYmx1ZSB7XG4gICAgLm9mZi1jYW52YXMgLmxlYXJuLXNpZGViYXI6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE1MGRlZywgJHByaW1hcnktY29sb3IgMCwgJGRlZXAtd2VsbCAxMDAlKTtcbiAgICB9XG59XG5cbi8qKiBIaWdoIENvbnRyYXN0ICoqL1xuYm9keS5zaWRlYmFyLWNvbnRyYXN0IHtcblxuICAgIGEge1xuICAgICAgICAvL2NvbG9yOiBtaXgoIzAwMCwgJGxpbmstY29sb3IsIDIwJSk7XG4gICAgfVxuXG4gICAgLm9mZi1jYW52YXMgLmxlYXJuLXNpZGViYXIge1xuICAgICAgICBhIHtcbiAgICAgICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICB9XG5cbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE1MGRlZywgIzNCNDM0OSAwLCAjMUUyMzI5IDEwMCUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLnNlYXJjaGJveCB7XG4gICAgICAgICAgICA6OnBsYWNlaG9sZGVyIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogcmdiYSgjZmZmLCAwLjcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSIsIkBmb250LWZhY2Uge1xuICAgIGZvbnQtZmFtaWx5OiAnTWV0cm9wb2xpcyc7XG4gICAgc3JjOiB1cmwoJy4uL2ZvbnRzL21ldHJvcG9saXMtYm9sZC13ZWJmb250LndvZmYyJykgZm9ybWF0KCd3b2ZmMicpLFxuICAgICAgICAgdXJsKCcuLi9mb250cy9tZXRyb3BvbGlzLWJvbGQtd2ViZm9udC53b2ZmJykgZm9ybWF0KCd3b2ZmJyk7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG59XG5AZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ1B1YmxpYyBTYW5zJztcbiAgICBzcmM6IHVybCgnLi4vZm9udHMvUHVibGljU2Fucy1MaWdodC53b2ZmMicpIGZvcm1hdCgnd29mZjInKSxcbiAgICAgICAgIHVybCgnLi4vZm9udHMvUHVibGljU2Fucy1MaWdodC53b2ZmJykgZm9ybWF0KCd3b2ZmJyk7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG59XG5AZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ1B1YmxpYyBTYW5zJztcbiAgICBzcmM6IHVybCgnLi4vZm9udHMvUHVibGljU2Fucy1TZW1pQm9sZC53b2ZmMicpIGZvcm1hdCgnd29mZjInKSxcbiAgICAgICAgIHVybCgnLi4vZm9udHMvUHVibGljU2Fucy1TZW1pQm9sZC53b2ZmJykgZm9ybWF0KCd3b2ZmJyk7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG59XG5AZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ0hhY2snO1xuICAgIHNyYzogdXJsKCcuLi9mb250cy9oYWNrLXJlZ3VsYXItc3Vic2V0LndvZmYyJykgZm9ybWF0KCd3b2ZmMicpLFxuICAgICAgICAgdXJsKCcuLi9mb250cy9oYWNrLXJlZ3VsYXItc3Vic2V0LndvZmYnKSBmb3JtYXQoJ3dvZmYnKTtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbn0iLCIjdG9wLWJhciB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYmFja2dyb3VuZDogJGJnLWNvbG9yO1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBkYXJrZW4oJGJnLWNvbG9yLCA0JSk7XG4gICAgei1pbmRleDogMjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuXG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGxlZnQ6ICRzaWRlYmFyLXdpZHRoO1xuXG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludChsZykge1xuICAgICAgICBsZWZ0OiAwO1xuICAgIH1cblxuICAgICNicmVhZGNydW1icyB7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMC41cmVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMTtcbiAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgICB3aWR0aDogMTAwJTtcblxuICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KHNtKSB7XG4gICAgICAgICAgICAqIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgPiBzcGFuLCA+IGEge1xuICAgICAgICAgICAgcGFkZGluZzogMCAuNXJlbSAhaW1wb3J0YW50O1xuXG4gICAgICAgICAgICBzcGFuIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KGxnKSB7XG4gICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDJyZW07XG4gICAgICAgIH1cbiAgICAgICAgXG5cbiAgICB9XG5cbiAgICAjbmF2aWdhdGlvbiB7XG4gICAgICAgIHdpZHRoOiA0MDBweDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcblxuICAgICAgICA+IGEsIHNwYW4ge1xuICAgICAgICAgICAgd2lkdGg6IDUwJTtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgZGFya2VuKCRiZy1jb2xvciwgNCUpO1xuXG4gICAgICAgICAgICBmb250LXNpemU6IDI3cHg7XG4gICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuNXMgZWFzZSwgY29sb3IgMC41cyBlYXNlO1xuXG4gICAgICAgICAgICAmLmRpc2FibGVkIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogbGlnaHRlbigkYm9keS1mb250LWNvbG9yLCA1MCUpO1xuXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICA+IGEge1xuICAgICAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogZGFya2VuKCRiZy1jb2xvciwgNCUpO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAkbGluay1jb2xvci1kYXJrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLnByb2dyZXNzIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBib3R0b206IC0xcHg7XG4gICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgJHByaW1hcnktY29sb3IgdmFyKC0tc2Nyb2xsKSwgdHJhbnNwYXJlbnQgMCk7XG4gICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBoZWlnaHQ6IDFweDtcbiAgICAgICAgei1pbmRleDogMTtcbiAgICB9XG59IiwiLmNlbnRlci1jb250ZW50IHtcbiAgICAjc3RhcnQge1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICB9XG59XG4ubGVhcm4tY29udGVudCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgbWluLWhlaWdodDogMTAwdmg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblxuICAgICNzdGFydCB7XG4gICAgICAgIHBhZGRpbmc6IDJyZW0gM3JlbTtcblxuICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KHhsKSB7XG4gICAgICAgICAgICBwYWRkaW5nOiAycmVtIDJyZW07XG4gICAgICAgIH1cblxuICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KGxnKSB7XG4gICAgICAgICAgICBwYWRkaW5nOiAycmVtIDFyZW07XG4gICAgICAgIH1cbiAgICB9XG59XG5cbiNmb290ZXIge1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAkZ3JheS1jb2xvci1saWdodDtcbiAgICBtYXJnaW4tdG9wOiAxcmVtO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBwIHtcbiAgICAgICAgbWFyZ2luOiAxcmVtIDA7XG4gICAgfVxufVxuXG4ucGFnZS10b2Mge1xuICAgIGZsb2F0OiByaWdodDtcbiAgICB3aWR0aDogMjUwcHg7XG4gICAgcGFkZGluZzogMC41cmVtIDAuNzVyZW07XG4gICAgYmFja2dyb3VuZDogZGFya2VuKCRiZy1jb2xvciwgMiUpO1xuICAgIG1hcmdpbi1sZWZ0OiAxLjVyZW07XG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgIG1hcmdpbi1ib3R0b206IDFyZW07XG4gICAgbWFyZ2luLXRvcDogMTBweDtcbiAgICBmb250LXNpemU6IDAuN3JlbTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludChzbSkge1xuICAgICAgICBmbG9hdDogbm9uZTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIG1hcmdpbi10b3A6IDAuNXJlbTtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgfVxuXG4gICAgLnRvYy10b2dnbGUge1xuICAgICAgICBmb250LXNpemU6IDEuMnJlbTtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGZsb2F0OiByaWdodDtcbiAgICAgICAgbWFyZ2luLXRvcDogLThweDtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAtMTBweDtcbiAgICAgICAgcGFkZGluZzogNXB4IDEwcHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgICBjb2xvcjogbGlnaHRlbigkYm9keS1mb250LWNvbG9yLCAyMCUpO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgfVxuXG4gICAgJi50b2MtY2xvc2VkIHtcbiAgICAgICAgaGVpZ2h0OiA0MHB4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG5cbiAgICAgICAgLnRvYy10b2dnbGUgLmZhOmJlZm9yZSB7XG4gICAgICAgICAgICBjb250ZW50OiAnXFxmMTA3JztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGg1IHtcbiAgICAgICAgbWFyZ2luOiAwIDAgMXJlbTtcbiAgICB9XG5cbiAgICB1bCB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAxcmVtO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIH1cblxuICAgIGxpIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgbGlzdC1zdHlsZTogZGVjaW1hbDtcbiAgICAgICAgY29sb3I6IGxpZ2h0ZW4oJGJvZHktZm9udC1jb2xvciwgMzAlKTtcbiAgICAgICAgbGkge1xuICAgICAgICAgICAgbGlzdC1zdHlsZTogZGVjaW1hbDtcbiAgICAgICAgICAgIGxpIHtcbiAgICAgICAgICAgICAgICBsaXN0LXN0eWxlOiBzcXVhcmU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHVsID4gbGkuZmlyc3QubGFzdCB7XG4gICAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IC0xcmVtO1xuICAgIH1cblxuICAgIC8vIEZpeCBpc3N1ZSB3aXRoIG5vdGljZXMgZ29pbmcgdW5kZXIgVE9DXG4gICAgJiArICNib2R5LWlubmVyIHtcbiAgICAgICAgPiAubm90aWNlcywgPiAuY29kZS10b29sYmFyIHtcbiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIH1cbiAgICB9XG5cbn1cbiIsImh0bWwge1xuICAgIEBpbmNsdWRlIGZsdWlkLXR5cGUoJHNpemUteHMsICRzaXplLXhsLCAkbWluLXJlc3BvbnNpdmUtZm9udC1zaXplLCAkaHRtbC1mb250LXNpemUpO1xufVxuXG5ib2R5IHtcbiAgICBmb250LXdlaWdodDogMzAwO1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMTVyZW07XG4gICAgOjpzZWxlY3Rpb24ge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkc2VsZWN0aW9uLWNvbG9yO1xuICAgIH1cbn1cblxuZGl2IHtcbiAgICBtaW4td2lkdGg6IDA7XG59XG5cbnByZSB7XG4gICAgcGFkZGluZzogMWVtO1xufVxuXG5tYXJrIHtcbiAgICBwYWRkaW5nOiAwO1xufVxuXG4vLyBIZWFkZXIgT3ZlcnJpZGVzXG5oMSwgaDIsIGgzLCBoNCwgaDUsIGg2IHtcbiAgICBmb250LWZhbWlseTogJHRpdGxlLWZvbnQtZmFtaWx5O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wNXJlbTtcbiAgICBtYXJnaW4tdG9wOiAycmVtO1xuICAgIGNvbG9yOiBkYXJrZW4oJGJvZHktZm9udC1jb2xvciwgMTAlKTtcbiAgICBsaW5lLWhlaWdodDogMTtcbiAgICBmb250LXdlaWdodDogNTAwO1xufVxuXG5oMSB7XG4gICAgZm9udC1zaXplOiAyLjVyZW07XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcblxuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoc20pIHtcbiAgICAgICAgZm9udC1zaXplOiAycmVtO1xuICAgIH1cbn1cblxuYSB7XG4gICAgQGV4dGVuZCAuZGVmYXVsdC1hbmltYXRpb247XG5cbiAgICAmOmhvdmVyLCAmOmZvY3VzLCAmOmFjdGl2ZSwgJi5hY3RpdmUge1xuICAgICAgICBjb2xvcjogJGxpbmstY29sb3ItZGFyaztcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIH1cblxuICAgICY6Zm9jdXMge1xuICAgICAgICBvdXRsaW5lOiBub25lICFpbXBvcnRhbnQ7XG4gICAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICAmOnZpc2l0ZWQge1xuICAgICAgICBjb2xvcjogJGxpbmstY29sb3I7XG4gICAgfVxufVxuXG4vLyBUYWJsZXNcbi50YWJsZS1rZXljb2wge1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi50YWJsZSB7XG4gICAgd2lkdGg6IGF1dG87XG59XG5cbnRhYmxlIHtcbiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICAgIGJvcmRlci1zcGFjaW5nOiAwO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG92ZXJmbG93LXg6IGF1dG87XG5cbiAgICBtYXJnaW4tYm90dG9tOiAxLjVyZW07XG5cbiAgICBAaWYgJHJ0bCA9PSB0cnVlIHtcbiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgfSBAZWxzZSB7XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgfVxuXG4gICAgdGJvZHkge1xuICAgICAgICB0cjpudGgtb2YtdHlwZShvZGQpIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICRiZy1jb2xvcjtcbiAgICAgICAgfVxuICAgICAgICB0ciB7XG4gICAgICAgICAgICAmLmFjdGl2ZSB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJGJnLWNvbG9yLWRhcms7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0ZCxcbiAgICB0aCB7XG4gICAgICAgIGJvcmRlci1ib3R0b206ICRib3JkZXItd2lkdGggc29saWQgJGJvcmRlci1jb2xvcjtcbiAgICAgICAgcGFkZGluZzogJHVuaXQtMyAkdW5pdC0yO1xuICAgIH1cbiAgICB0aCB7XG4gICAgICAgIGJvcmRlci1ib3R0b20td2lkdGg6ICRib3JkZXItd2lkdGgtbGc7XG4gICAgfVxuXG4gICAgLnRhYmxlLWtleWNvbCAmIHtcbiAgICAgICAgdHIgPiB0ZDpmaXJzdC1jaGlsZCwgdHIgPiB0aDpmaXJzdC1jaGlsZCAge1xuICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgICAgIHdpZHRoOiAxNSU7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuaW1nLCAudmlkZW8tY29udGFpbmVyIHtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luOiAzcmVtIGF1dG87XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG5cbiAgICAmLmJvcmRlciB7XG4gICAgICAgIGJvcmRlcjogMnB4IHNvbGlkICNlNmU2ZTYgIWltcG9ydGFudDtcbiAgICAgICAgcGFkZGluZzogMnB4O1xuICAgIH1cblxuICAgICYuc2hhZG93IHtcbiAgICAgICAgYm94LXNoYWRvdzogMCAxMHB4IDMwcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICAgIH1cblxufVxuXG5ociB7XG4gICAgYm9yZGVyOiAwO1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAkYm9yZGVyLWNvbG9yO1xufVxuXG51bCwgb2wge1xuICAgIG1hcmdpbjogMCAwIDEuMnJlbSAwO1xuXG4gICAgdWwsIG9sIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgIH1cblxuICAgIG9sIHtcbiAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBkZWNpbWFsO1xuICAgIH1cblxuICAgIGxpIHtcbiAgICAgICAgcGFkZGluZy10b3A6IDA7XG4gICAgfVxufVxuXG4jY2hhcHRlciB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIG1heC13aWR0aDogNjAwcHg7XG4gICAgbWFyZ2luOiAwIGF1dG87XG5cbiAgICBoMyB7XG4gICAgICAgIG9wYWNpdHk6IDAuNztcblxuICAgICAgICAmICsgaDEge1xuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgbWFyZ2luOiAxcmVtIGF1dG8gMnJlbTtcbiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDNweCBzb2xpZCAkZ3JheS1jb2xvci1saWdodDtcblxuICAgICAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludChzbSkge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMi41cmVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4jYm9keS1pbm5lciB7XG5cbiAgICA6dGFyZ2V0OmJlZm9yZSB7XG4gICAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBtYXJnaW4tdG9wOiAtNjBweDtcbiAgICAgICAgaGVpZ2h0OiA2MHB4O1xuICAgICAgICB3aWR0aDogMXB4O1xuICAgIH1cbn1cblxuLy8gRGVidWcgQ29kZSBCbG9ja3NcbnByZS54ZGVidWctdmFyLWR1bXAge1xuICAgIGJhY2tncm91bmQ6ICNmYWZhZmE7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcGFkZGluZzogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41O1xuICAgIGNvbG9yOiBpbmhlcml0O1xuICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICBvdmVyZmxvdy14OiBhdXRvO1xufVxuXG4jYm9keS1pbm5lciB7XG5cbiAgICBwcmUge1xuICAgICAgICBtYXJnaW46IDAuNXJlbSAwO1xuICAgICAgICA6OnNlbGVjdGlvbiB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAkc2VsZWN0aW9uLWNvbG9yO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29kZSB7XG4gICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG4gICAgfVxuXG4gICAgLmNvZGUtdG9vbGJhciB7XG4gICAgICAgIG1hcmdpbjogMC41cmVtIDA7XG4gICAgICAgIHByZVtjbGFzcyo9XCJsYW5ndWFnZS1cIl0ge1xuICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29kZVtjbGFzcyo9XCJsYW5ndWFnZS1cIl0sIHByZVtjbGFzcyo9XCJsYW5ndWFnZS1cIl0ge1xuICAgICAgICBmb250LWZhbWlseTogJG1vbm8tZm9udC1mYW1pbHk7XG4gICAgfVxuXG4gICAgcHJlW2NsYXNzKj1cImxhbmd1YWdlLVwiXSB7XG4gICAgICAgIGZvbnQtc2l6ZTogLjdyZW07XG4gICAgICAgIGNvZGUge1xuICAgICAgICAgICAgcGFkZGluZzogaW5pdGlhbDtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogLjdyZW07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAubm8tbWFyZ2luLXRvcCB7XG4gICAgICAgIG1hcmdpbi10b3A6IC0xZW07XG4gICAgICAgIC5jb2RlLXRvb2xiYXIge1xuICAgICAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgICAgID4gcHJlIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLXRvcDogM3B4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICAubm8tbWFyZ2luLWJvdHRvbSAuY29kZS10b29sYmFyIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB9XG5cbiAgICAubGluZS1oaWdobGlnaHQge1xuICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoJGhpZ2hsaWdodC1jb2xvciwgMC4zKSA3MCUsIHJnYmEoJGhpZ2hsaWdodC1jb2xvciwgMCkpO1xuICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oJGhpZ2hsaWdodC1jb2xvciwgMzAlKTtcbiAgICAgICAgICAgIC8vY29sb3I6ICM5OTk7XG4gICAgICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgICAgICAgdG9wOiAwLjE1cmVtO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBJY29uIFR3ZWFrc1xuaS5mYSB7XG4gICAgJi5mYS1oZWFydCwgJi5mYS1oZWFydC1vIHtcbiAgICAgICAgJi5wdWxzZSB7XG4gICAgICAgICAgICBjb2xvcjogIzkyMFxuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBGb250IFdlaWdodHNcbmIsXG5zdHJvbmcge1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5cbi5oZWF2eSB7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbn1cblxuLmxpZ2h0IHtcbiAgICBmb250LXdlaWdodDogMjAwO1xufVxuXG4vLyBFcnJvciBjb25maWd1cmF0aW9uXG4jZXJyb3Ige1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWFyZ2luLXRvcDogNXJlbTtcblxuICAgIC5pY29uIHtcbiAgICAgICAgZm9udC1zaXplOiA1MHB4O1xuICAgIH1cbn1cblxuLy8gTWVzc2FnZXNcbiNtZXNzYWdlcyB7XG4gICAgbWFyZ2luLWJvdHRvbTogMXJlbTtcblxuICAgIC5pY29uIHtcbiAgICAgICAgZm9udC1zaXplOiAxcmVtO1xuICAgIH1cbn1cblxuLy8gTGlzdHNcbnVsLFxub2wge1xuICAgIG1hcmdpbi1sZWZ0OiAkdW5pdC04O1xuXG4gICAgdWwsXG4gICAgb2wge1xuICAgICAgICBtYXJnaW4tbGVmdDogJHVuaXQtODtcbiAgICB9XG59XG5cbnVsIHtcbiAgICBsaXN0LXN0eWxlOiBkaXNjIG91dHNpZGU7XG59XG5cbm9sIHtcbiAgICBsaXN0LXN0eWxlOiBkZWNpbWFsIG91dHNpZGU7XG59XG5cbiNuYXZpZ2F0aW9uIHtcbiAgICBhLmdpdGh1Yi1saW5rIHtcbiAgICAgICAgZm9udC1zaXplOiBpbmhlcml0ICFpbXBvcnRhbnQ7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBwYWRkaW5nOiAwIDFyZW07XG5cbiAgICAgICAgaSB7XG4gICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiA1cHg7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIFRhYnNcbiR0YWJzLWNvbG9yOiAjNzY3NjkzO1xuJHRhYnMtYmc6ICNGOEY5RkE7XG4udGFicy13cmFwcGVyIHtcblxuICAgICYudWktdGhlbWUtYmFkZ2VzIHtcbiAgICAgICAgYmFja2dyb3VuZDogJHRhYnMtYmc7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGRhcmtlbigkdGFicy1iZywgMiUpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuXG4gICAgICAgIC50YWJzLW5hdiB7XG4gICAgICAgICAgICBtYXJnaW46IDAuMjVyZW07XG5cbiAgICAgICAgICAgICYgPiBsaSB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxpIHtcbiAgICAgICAgICAgICAgICBhIHtcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICR0YWJzLWNvbG9yO1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBkYXJrZW4oJHRhYnMtYmcsIDYlKTtcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJi5jdXJyZW50IHtcbiAgICAgICAgICAgICAgICAgICAgYSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBkYXJrZW4oJHRhYnMtYmcsIDQwJSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAmOm5vdCguY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICBhOmhvdmVyIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGRhcmtlbigkdGFicy1iZywgOSUpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAudGFicyB7XG4gICAgICAgICAgICAudGFiIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLjI1cmVtIDA7XG5cbiAgICAgICAgICAgICAgICBwcmUge1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAwLjVyZW0gIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMC41cmVtICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfVxuXG59XG5cbi8vIE5vdGljZXNcbi5ub3RpY2VzIHtcbiAgICBtYXJnaW46IDEuNXJlbSAwO1xuICAgIHBhZGRpbmc6IDAuNHJlbTtcblxuICAgIHAge1xuICAgICAgICBtYXJnaW46IDAgMCAxLjVyZW0gMC41cmVtO1xuXG4gICAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi5pbmZvIHtcbiAgICAgICAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCAjZjBhZDRlO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZmNmOGYyO1xuICAgICAgICBjb2xvcjogI2RmOGExMztcbiAgICB9XG5cbiAgICAmLndhcm5pbmcge1xuICAgICAgICBib3JkZXItbGVmdDogNXB4IHNvbGlkICNkOTUzNGY7XG4gICAgICAgIGJhY2tncm91bmQ6ICNmZGY3Zjc7XG4gICAgICAgIGNvbG9yOiAjYjUyYjI3O1xuICAgIH1cblxuICAgICYubm90ZSB7XG4gICAgICAgIGJvcmRlci1sZWZ0OiA1cHggc29saWQgIzViYzBkZTtcbiAgICAgICAgYmFja2dyb3VuZDogI2Y0ZjhmYTtcbiAgICAgICAgY29sb3I6ICMyOGExYzU7XG4gICAgfVxuXG4gICAgJi50aXAge1xuICAgICAgICBib3JkZXItbGVmdDogNXB4IHNvbGlkICM1Y2I4NWM7XG4gICAgICAgIGJhY2tncm91bmQ6ICNmMWY5ZjE7XG4gICAgICAgIGNvbG9yOiAjM2Q4YjNkO1xuICAgIH1cblxufVxuXG5cbi8vIFdyYXAgZml4ZXNcbmF1ZGlvIHtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG59XG5cbnByZSB7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xufVxuXG5wcmVbY2xhc3MqPVwibGFuZ3VhZ2UtXCJdOm5vdCguY29tbWFuZC1saW5lKSB7XG5cbiAgICAmLCAmPmNvZGVbY2xhc3MqPVwibGFuZ3VhZ2UtXCJdIHtcbiAgICAgICAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICAgIH1cbn1cblxuLnRudHNlYXJjaC1yZXN1bHRzIGVtIHtcbiAgICBAaW5jbHVkZSBsYWJlbC12YXJpYW50KCRib2R5LWZvbnQtY29sb3IsICRoaWdobGlnaHQtY29sb3IpO1xuICAgIGJvcmRlci1ib3R0b206ICR1bml0LW8gc29saWQgZGFya2VuKCRoaWdobGlnaHQtY29sb3IsIDE1JSk7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgcGFkZGluZzogJHVuaXQtbyAkdW5pdC1oIDA7XG59XG5cbi8vcHJlLmNvbW1hbmQtbGluZSB7XG4vLyAgICAmLCAmID4gY29kZSB7XG4vLyAgICAgICAgd29yZC1icmVhazogaW5pdGlhbDtcbi8vICAgICAgICB3aGl0ZS1zcGFjZTogcHJlXG4vLyAgICB9XG4vL31cblxuIiwiLy9MaWZlY3ljbGVcbi5saWZlY3ljbGUge1xuXG4gICAgI2JvZHktaW5uZXIge1xuXG4gICAgICAgIC5sZXZlbCB7XG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAgICAgICAgIGgzIHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAycHggMTBweCA0cHg7XG4gICAgICAgICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICAgICAgICB6LWluZGV4OiAxMDAwO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjZmZmO1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5sZXZlbCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMC41cmVtO1xuICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAtMXJlbTtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDFyZW07XG4gICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMC41cmVtO1xuICAgICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAxcmVtO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvbCBsaSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZy10b3A6IDAuMXJlbTtcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAwLjJyZW07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYgPiBvbCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMnJlbTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi5sZXZlbC0xIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaWdodGVuKCR0dXJxdW9pc2UsNTYlKTtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDRweCBzb2xpZCAkdHVycXVvaXNlO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAkdHVycXVvaXNlO1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDFyZW07XG5cbiAgICAgICAgICAgICAgICBoMyB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICR0dXJxdW9pc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLmxldmVsLTIgICB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogbGlnaHRlbigkZW1lcmFsZCw0OSUpO1xuICAgICAgICAgICAgICAgIGJvcmRlcjogNHB4IHNvbGlkICRlbWVyYWxkO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAkZW1lcmFsZDtcblxuICAgICAgICAgICAgICAgIGgzIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJGVtZXJhbGQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLmxldmVsLTMge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpZ2h0ZW4oJHBldGVyLXJpdmVyLDQ0JSk7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiA0cHggc29saWQgJHBldGVyLXJpdmVyO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAkcGV0ZXItcml2ZXI7XG5cbiAgICAgICAgICAgICAgICBoMyB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICRwZXRlci1yaXZlcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYubGV2ZWwtNCB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogbGlnaHRlbigkd2V0LWFzcGhhbHQsNjMlKTtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDRweCBzb2xpZCAkd2V0LWFzcGhhbHQ7XG4gICAgICAgICAgICAgICAgY29sb3I6ICR3ZXQtYXNwaGFsdDtcblxuICAgICAgICAgICAgICAgIGgzIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHdldC1hc3BoYWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0iLCJmb3JtIHtcbiAgLmJ1dHRvbi13cmFwcGVyIHtcbiAgICBtYXJnaW4tdG9wOiAwLjc1cmVtO1xuICAgIG1hcmdpbi1ib3R0b206IDFyZW07XG4gIH1cblxuICBzcGFuLnJlcXVpcmVkIHtcbiAgICBjb2xvcjogJGVycm9yLWNvbG9yO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgZm9udC1zaXplOiAxLjJyZW07XG4gIH1cblxuICAuZm9ybS1pbnB1dFt0eXBlPXJhbmdlXSB7XG4gICAgYXBwZWFyYW5jZTogc2xpZGVyLWhvcml6b250YWw7XG4gICAgJjpmb2N1cyB7XG4gICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgYm9yZGVyOiBub25lO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBSZXNldCBzb21lIGRlZmF1bHRzIGZvciBRdWFyayBUaGVtZSAqKi9cbiAgLmZvcm0tZ3JvdXA6bm90KC5mb3JtLWZpZWxkLXRvZ2dsZWFibGUpIHtcbiAgICAuY2hlY2tib3hlcyB7XG4gICAgICBkaXNwbGF5OiBpbmhlcml0O1xuXG4gICAgICBsYWJlbCB7XG4gICAgICAgIGRpc3BsYXk6IGluaGVyaXQ7XG4gICAgICAgIHBhZGRpbmc6ICgoJGNvbnRyb2wtc2l6ZS1zbSAtICRsaW5lLWhlaWdodCkgLyAyKSAkY29udHJvbC1wYWRkaW5nLXggKCgkY29udHJvbC1zaXplLXNtIC0gJGxpbmUtaGVpZ2h0KSAvIDIpICgkY29udHJvbC1pY29uLXNpemUgKyAkY29udHJvbC1wYWRkaW5nLXgpO1xuICAgICAgICBtYXJnaW46IGluaGVyaXQ7XG5cbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxufVxuXG4jZ3Jhdi1sb2dpbiB7XG5cbiAgPiBmb3JtIHtcbiAgICBtYXJnaW46IDJyZW0gYXV0byAwO1xuICAgIG1heC13aWR0aDogMzUwcHg7XG4gIH1cbiAgLmZvcm0tbGFiZWwge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLmZvcm0tZGF0YSB7XG4gICAgbWFyZ2luOiAxcmVtIDA7XG4gIH1cbiAgLmZvcm0taW5wdXQge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxuICAuYnV0dG9uLXdyYXBwZXIge1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuXG4gICAgLmZvcm0tZGF0YS5yZW1lbWJlcm1lIHtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIGZsb2F0OiBsZWZ0O1xuICAgIH1cbiAgfVxuXG4gIC5sb2dpbi1mb3JtIHtcbiAgICBidXR0b25bdHlwZT1cInN1Ym1pdFwiXSB7XG4gICAgICBAaW5jbHVkZSBidXR0b24tcHJpbWFyeTtcbiAgICB9XG4gIH1cblxuICAudHdvZmEtZm9ybSB7XG4gICAgYnV0dG9uW3R5cGU9XCJzdWJtaXRcIl06Zmlyc3QtY2hpbGQge1xuICAgICAgQGluY2x1ZGUgYnV0dG9uLXByaW1hcnk7XG4gICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICBtYXJnaW4tbGVmdDogNHB4O1xuICAgIH1cbiAgfVxufVxuIiwiLmRlZmF1bHQtYW5pbWF0aW9uIHtcbiAgdHJhbnNpdGlvbjogYWxsIDAuNXMgZWFzZTtcbn1cblxuLy8gUHVsc2UgQW5pbWF0aW9uXG4ucHVsc2Uge1xuICBhbmltYXRpb24tbmFtZTogcHVsc2VfYW5pbWF0aW9uO1xuICBhbmltYXRpb24tZHVyYXRpb246IDIwMDBtcztcbiAgdHJhbnNmb3JtLW9yaWdpbjo3MCUgNzAlO1xuICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTtcbiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyO1xufVxuXG5Aa2V5ZnJhbWVzIHB1bHNlX2FuaW1hdGlvbiB7XG4gIDAlIHsgdHJhbnNmb3JtOiBzY2FsZSgxKTsgfVxuICAzMCUgeyB0cmFuc2Zvcm06IHNjYWxlKDEpOyB9XG4gIDQwJSB7IHRyYW5zZm9ybTogc2NhbGUoMS4wOCk7IH1cbiAgNTAlIHsgdHJhbnNmb3JtOiBzY2FsZSgxKTsgfVxuICA2MCUgeyB0cmFuc2Zvcm06IHNjYWxlKDEpOyB9XG4gIDcwJSB7IHRyYW5zZm9ybTogc2NhbGUoMS4wNSk7IH1cbiAgODAlIHsgdHJhbnNmb3JtOiBzY2FsZSgxKTsgfVxuICAxMDAlIHsgdHJhbnNmb3JtOiBzY2FsZSgxKTsgfVxufVxuIiwiW2RhdGEtc2ltcGxlYmFyXSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgICBhbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgIHdpZHRoOiBpbmhlcml0O1xuICAgIGhlaWdodDogaW5oZXJpdDtcbiAgICBtYXgtd2lkdGg6IGluaGVyaXQ7XG4gICAgbWF4LWhlaWdodDogaW5oZXJpdDtcbn1cblxuLnNpbXBsZWJhci13cmFwcGVyIHtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHdpZHRoOiBpbmhlcml0O1xuICAgIGhlaWdodDogaW5oZXJpdDtcbiAgICBtYXgtd2lkdGg6IGluaGVyaXQ7XG4gICAgbWF4LWhlaWdodDogaW5oZXJpdDtcbn1cblxuLnNpbXBsZWJhci1tYXNrIHtcbiAgICBkaXJlY3Rpb246IGluaGVyaXQ7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgcGFkZGluZzogMDtcbiAgICBtYXJnaW46IDA7XG4gICAgbGVmdDogMDtcbiAgICB0b3A6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIHdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7XG4gICAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7XG4gICAgei1pbmRleDogMDtcbn1cblxuLnNpbXBsZWJhci1vZmZzZXQge1xuICAgIGRpcmVjdGlvbjogaW5oZXJpdCAhaW1wb3J0YW50O1xuICAgIGJveC1zaXppbmc6IGluaGVyaXQgIWltcG9ydGFudDtcbiAgICByZXNpemU6IG5vbmUgIWltcG9ydGFudDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbWFyZ2luOiAwO1xuICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcbn1cblxuLnNpbXBsZWJhci1jb250ZW50LXdyYXBwZXIge1xuICAgIGRpcmVjdGlvbjogaW5oZXJpdDtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94ICFpbXBvcnRhbnQ7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGhlaWdodDogMTAwJTsgLyogUmVxdWlyZWQgZm9yIGhvcml6b250YWwgbmF0aXZlIHNjcm9sbGJhciB0byBub3QgYXBwZWFyIGlmIHBhcmVudCBpcyB0YWxsZXIgdGhhbiBuYXR1cmFsIGhlaWdodCAqL1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gICAgb3ZlcmZsb3c6IGF1dG87IC8qIFNjcm9sbCBvbiB0aGlzIGVsZW1lbnQgb3RoZXJ3aXNlIGVsZW1lbnQgY2FuJ3QgaGF2ZSBhIHBhZGRpbmcgYXBwbGllZCBwcm9wZXJseSAqL1xuICAgIG1heC13aWR0aDogMTAwJTsgLyogTm90IHJlcXVpcmVkIGZvciBob3Jpem9udGFsIHNjcm9sbCB0byB0cmlnZ2VyICovXG4gICAgbWF4LWhlaWdodDogMTAwJTsgLyogTmVlZGVkIGZvciB2ZXJ0aWNhbCBzY3JvbGwgdG8gdHJpZ2dlciAqL1xufVxuXG4uc2ltcGxlYmFyLWNvbnRlbnQ6YmVmb3JlLFxuLnNpbXBsZWJhci1jb250ZW50OmFmdGVyIHtcbiAgICBjb250ZW50OiBcIiBcIjtcbiAgICBkaXNwbGF5OiB0YWJsZTtcbn1cblxuLnNpbXBsZWJhci1wbGFjZWhvbGRlciB7XG4gICAgbWF4LWhlaWdodDogMTAwJTtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5zaW1wbGViYXItaGVpZ2h0LWF1dG8tb2JzZXJ2ZXItd3JhcHBlciB7XG4gICAgYm94LXNpemluZzogaW5oZXJpdCAhaW1wb3J0YW50O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB3aWR0aDogaW5oZXJpdDtcbiAgICBtYXgtd2lkdGg6IDFweDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgbWF4LWhlaWdodDogMXB4O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgei1pbmRleDogLTE7XG4gICAgcGFkZGluZzogMDtcbiAgICBtYXJnaW46IDA7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgZmxleC1ncm93OiBpbmhlcml0O1xuICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIGZsZXgtYmFzaXM6IDA7XG59XG5cbi5zaW1wbGViYXItaGVpZ2h0LWF1dG8tb2JzZXJ2ZXIge1xuICAgIGJveC1zaXppbmc6IGluaGVyaXQ7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgb3BhY2l0eTogMDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgaGVpZ2h0OiAxMDAwJTtcbiAgICB3aWR0aDogMTAwMCU7XG4gICAgbWluLWhlaWdodDogMXB4O1xuICAgIG1pbi13aWR0aDogMXB4O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgei1pbmRleDogLTE7XG59XG5cbi5zaW1wbGViYXItdHJhY2sge1xuICAgIHotaW5kZXg6IDE7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG5bZGF0YS1zaW1wbGViYXJdLnNpbXBsZWJhci1kcmFnZ2luZyAuc2ltcGxlYmFyLXRyYWNrIHtcbiAgICBwb2ludGVyLWV2ZW50czogYWxsO1xufVxuXG4uc2ltcGxlYmFyLXNjcm9sbGJhciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiAycHg7XG4gICAgd2lkdGg6IDdweDtcbiAgICBtaW4taGVpZ2h0OiAxMHB4O1xufVxuXG4uc2ltcGxlYmFyLXNjcm9sbGJhcjpiZWZvcmUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBjb250ZW50OiBcIlwiO1xuICAgIGJhY2tncm91bmQ6IHJnYmEoI2ZmZiwgMC41KTtcbiAgICBib3JkZXItcmFkaXVzOiA3cHg7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBsaW5lYXI7XG59XG5cbi5zaW1wbGViYXItdHJhY2sgLnNpbXBsZWJhci1zY3JvbGxiYXIuc2ltcGxlYmFyLXZpc2libGU6YmVmb3JlIHtcbiAgICAvKiBXaGVuIGhvdmVyZWQsIHJlbW92ZSBhbGwgdHJhbnNpdGlvbnMgZnJvbSBkcmFnIGhhbmRsZSAqL1xuICAgIG9wYWNpdHk6IDAuNTtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDBzIGxpbmVhcjtcbn1cblxuLnNpbXBsZWJhci10cmFjay5zaW1wbGViYXItdmVydGljYWwge1xuICAgIHRvcDogMDtcbiAgICB3aWR0aDogMTFweDtcbn1cblxuLnNpbXBsZWJhci10cmFjay5zaW1wbGViYXItdmVydGljYWwgLnNpbXBsZWJhci1zY3JvbGxiYXI6YmVmb3JlIHtcbiAgICB0b3A6IDJweDtcbiAgICBib3R0b206IDJweDtcbn1cblxuLnNpbXBsZWJhci10cmFjay5zaW1wbGViYXItaG9yaXpvbnRhbCB7XG4gICAgbGVmdDogMDtcbiAgICBoZWlnaHQ6IDExcHg7XG59XG5cbi5zaW1wbGViYXItdHJhY2suc2ltcGxlYmFyLWhvcml6b250YWwgLnNpbXBsZWJhci1zY3JvbGxiYXI6YmVmb3JlIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbGVmdDogMnB4O1xuICAgIHJpZ2h0OiAycHg7XG59XG5cbi5zaW1wbGViYXItdHJhY2suc2ltcGxlYmFyLWhvcml6b250YWwgLnNpbXBsZWJhci1zY3JvbGxiYXIge1xuICAgIHJpZ2h0OiBhdXRvO1xuICAgIGxlZnQ6IDA7XG4gICAgdG9wOiAycHg7XG4gICAgaGVpZ2h0OiA3cHg7XG4gICAgbWluLWhlaWdodDogMDtcbiAgICBtaW4td2lkdGg6IDEwcHg7XG4gICAgd2lkdGg6IGF1dG87XG59XG5cbi8qIFJ0bCBzdXBwb3J0ICovXG5bZGF0YS1zaW1wbGViYXItZGlyZWN0aW9uPVwicnRsXCJdIC5zaW1wbGViYXItdHJhY2suc2ltcGxlYmFyLXZlcnRpY2FsIHtcbiAgICByaWdodDogYXV0bztcbiAgICBsZWZ0OiAwO1xufVxuXG4uaHMtZHVtbXktc2Nyb2xsYmFyLXNpemUge1xuICAgIGRpcmVjdGlvbjogcnRsO1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICBoZWlnaHQ6IDUwMHB4O1xuICAgIHdpZHRoOiA1MDBweDtcbiAgICBvdmVyZmxvdy15OiBoaWRkZW47XG4gICAgb3ZlcmZsb3cteDogc2Nyb2xsO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBY0FBLEFBQUEsV0FBVyxDQUFDLEVBQ1IsVUFBVSxFQUFFLEtBQUssR0ErUHBCOztBQWhRRCxBQUdJLFdBSE8sQ0FHUCxrQkFBa0IsQ0FBQyxFQUNmLFFBQVEsRUFBRSxLQUFLLEVBQ2YsR0FBRyxFQUFFLE1BQU0sRUFDWCxJQUFJLEVBQUUsTUFBTSxFQUNaLEtBQUssRUFBRSxNQUFNLEVBQ2IsTUFBTSxFQUFFLE1BQU0sRUFDZCxXQUFXLEVBQUUsTUFBTSxFQUNuQixPQUFPLEVBQUUsQ0FBQyxFQUNWLFNBQVMsRUFBRSxlQUFlLEdBQzdCOztBQVpMLEFBY0ksV0FkTyxDQWNQLG1CQUFtQixDQUFDLEVBQ2hCLE9BQU8sRUFBRSxPQUFPLEdBQ25COztBQWhCTCxBQWtCSSxXQWxCTyxDQWtCUCxtQkFBbUIsQ0FBQyxFQUNoQixVQUFVLEViT0wscUJBQU8sR2FOZjs7QUFwQkwsQUFzQkksV0F0Qk8sQ0FzQlAsY0FBYyxDQUFDLEVBQ1gsS0FBSyxFYmNHLEtBQUssRWFiYixLQUFLLEVBQU8sd0JBQUksRUFDaEIsVUFBVSxFQUFFLE9BQU8sR0FzT3RCOztBQS9QTCxBQTJCUSxXQTNCRyxDQXNCUCxjQUFjLEFBS1QsT0FBTyxDQUFDLEVBQ0wsUUFBUSxFQUFFLEtBQUssRUFDZixPQUFPLEVBQUUsRUFBRSxFQUNYLE1BQU0sRUFBRSxLQUFLLEVBQ2IsS0FBSyxFYk1ELEtBQUssRWFMVCxH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 */ diff --git a/themes/learn4/css-compiled/theme.min.css b/themes/learn4/css-compiled/theme.min.css new file mode 100644 index 00000000..40e7af5b --- /dev/null +++ b/themes/learn4/css-compiled/theme.min.css @@ -0,0 +1 @@ +.off-canvas{min-height:100vh}.off-canvas .off-canvas-toggle{font-size:16px!important;position:fixed;z-index:3;top:.3rem;left:.3rem;width:1.6rem;height:1.6rem;padding-top:.15rem}.off-canvas .off-canvas-content{padding:inherit}.off-canvas .off-canvas-overlay{background:rgba(69,77,93,.5)}.off-canvas .learn-sidebar{overflow-y:inherit;width:14rem;color:rgba(255,255,255,.6)}.off-canvas .learn-sidebar:before{position:fixed;top:0;left:0;width:14rem;height:100vh;content:''}.off-canvas .learn-sidebar a{color:rgba(255,255,255,.8)}.off-canvas .learn-sidebar a:hover{color:#fff}.off-canvas .learn-sidebar .padding{padding-left:1rem}.off-canvas .learn-sidebar hr{border:0;border-bottom:1px solid rgba(255,255,255,.1)}.off-canvas .learn-sidebar .learn-brand{position:fixed;top:0;width:14rem;height:7rem;padding:10px 20px;box-shadow:0 10px 10px -10px rgba(0,0,0,.3)}.off-canvas .learn-sidebar .learn-brand #logo{display:inline-block;margin:0 2.5rem .5rem}.off-canvas .learn-sidebar .learn-brand #logo path{fill:rgba(255,255,255,.8)!important}.off-canvas .learn-sidebar .learn-nav{position:fixed;top:7rem;bottom:0;width:14rem;padding-bottom:1rem}.off-canvas .learn-sidebar .learn-nav .read-icon{font-size:12px;display:none;float:right;margin-top:5px;margin-right:12px;opacity:.8;color:rgba(255,255,255,.6)}.off-canvas .learn-sidebar .learn-nav .visited>a>.read-icon{display:inline}.off-canvas .learn-sidebar .learn-nav ul{margin-top:.2rem;margin-left:1rem;list-style:none}.off-canvas .learn-sidebar .learn-nav ul.topics{margin-top:0}.off-canvas .learn-sidebar .learn-nav ul.topics>li:first-child{margin-top:0}.off-canvas .learn-sidebar .learn-nav ul a{display:block;padding-top:.1rem;padding-bottom:.1rem}.off-canvas .learn-sidebar .learn-nav ul.searched a{color:rgba(255,255,255,.5)}.off-canvas .learn-sidebar .learn-nav ul.searched .search-match a{color:rgba(255,255,255,.8)}.off-canvas .learn-sidebar .learn-nav ul.searched .search-match a:hover{color:rgba(255,255,255,.9)}.off-canvas .learn-sidebar .learn-nav ul.topics.searched ul{display:block}.off-canvas .learn-sidebar .learn-nav ul.topics>li{margin-top:.3rem}.off-canvas .learn-sidebar .learn-nav ul.topics>li.active,.off-canvas .learn-sidebar .learn-nav ul.topics>li.parent{margin-left:-1rem;padding-top:.25rem;padding-bottom:.25rem;padding-left:1rem;background-color:rgba(0,0,0,.2)}.off-canvas .learn-sidebar .learn-nav ul li,.off-canvas .learn-sidebar .learn-nav ul ol{margin-top:.1rem}.off-canvas .learn-sidebar .learn-nav ul ul{font-size:.75rem;display:none;margin-top:0;margin-bottom:0}.off-canvas .learn-sidebar .learn-nav ul li.active>a{margin-left:-.4rem;padding-left:.4rem;color:#fff;background-color:#1aa3ed}.off-canvas .learn-sidebar .learn-nav ul li a>span>b{font-weight:300;color:rgba(255,255,255,.6)}.off-canvas .learn-sidebar .learn-nav ul .active ul,.off-canvas .learn-sidebar .learn-nav ul .parent ul{display:block}.off-canvas .learn-sidebar .searchbox{position:relative;color:rgba(255,255,255,.6);border:1px solid rgba(255,255,255,.1);border-radius:2px;background:rgba(0,0,0,.1)}.off-canvas .learn-sidebar .searchbox :-ms-input-placeholder{color:rgba(255,255,255,.5)}.off-canvas .learn-sidebar .searchbox ::-ms-input-placeholder{color:rgba(255,255,255,.5)}.off-canvas .learn-sidebar .searchbox ::placeholder{color:rgba(255,255,255,.5)}.off-canvas .learn-sidebar .searchbox input{font-size:.7rem;font-weight:200;width:100%;padding:4px 25px 4px 30px;color:rgba(255,255,255,.8);border:0;background:0 0}.off-canvas .learn-sidebar .searchbox label{position:absolute;top:2px;left:8px}.off-canvas .learn-sidebar .searchbox span{position:absolute;top:2px;right:8px;cursor:pointer}.off-canvas .learn-sidebar .search-options{margin-top:10px}.off-canvas .learn-sidebar .search-options .adv-search{font-size:85%;display:-ms-flexbox;display:flex;padding-left:.6rem;-ms-flex-align:center;align-items:center}.off-canvas .learn-sidebar .search-options .adv-search i{margin-right:5px}.off-canvas .learn-sidebar .search-options .version-chooser select{font-size:.8rem;font-weight:700;display:inline-block;margin:0;letter-spacing:1px;color:#fff;border:1px solid rgba(255,255,255,.1);border-radius:2px;background:rgba(0,0,0,.1)}.off-canvas .learn-sidebar .side-tools{font-size:90%;color:rgba(255,255,255,.5)}.off-canvas .learn-sidebar:before{background:linear-gradient(150deg,#8e44ad 0,#283a63 100%)}body.sidebar-green .off-canvas .learn-sidebar:before{background:linear-gradient(150deg,#16a085 0,#283a63 100%)}body.sidebar-blue .off-canvas .learn-sidebar:before{background:linear-gradient(150deg,#1aa3ed 0,#283a63 100%)}body.sidebar-contrast .off-canvas .learn-sidebar a{color:#fff}body.sidebar-contrast .off-canvas .learn-sidebar:before{background:linear-gradient(150deg,#3b4349 0,#1e2329 100%)}body.sidebar-contrast .off-canvas .learn-sidebar .searchbox :-ms-input-placeholder{color:rgba(255,255,255,.7)}body.sidebar-contrast .off-canvas .learn-sidebar .searchbox ::-ms-input-placeholder{color:rgba(255,255,255,.7)}body.sidebar-contrast .off-canvas .learn-sidebar .searchbox ::placeholder{color:rgba(255,255,255,.7)}@font-face{font-family:Metropolis;font-weight:400;font-style:normal;src:url(../fonts/metropolis-bold-webfont.woff2) format('woff2'),url(../fonts/metropolis-bold-webfont.woff) format('woff')}@font-face{font-family:'Public Sans';font-weight:300;font-style:normal;src:url(../fonts/PublicSans-Light.woff2) format('woff2'),url(../fonts/PublicSans-Light.woff) format('woff')}@font-face{font-family:'Public Sans';font-weight:500;font-style:normal;src:url(../fonts/PublicSans-SemiBold.woff2) format('woff2'),url(../fonts/PublicSans-SemiBold.woff) format('woff')}@font-face{font-family:Hack;font-weight:400;font-style:normal;src:url(../fonts/hack-regular-subset.woff2) format('woff2'),url(../fonts/hack-regular-subset.woff) format('woff')}#top-bar{position:fixed;z-index:2;top:0;right:0;left:14rem;display:-ms-flexbox;display:flex;border-bottom:1px solid #edeef1;background:#f8f9fa;-ms-flex-align:center;align-items:center}@media (max-width:960px){#top-bar{left:0}}#top-bar #breadcrumbs{line-height:1;width:100%;height:auto;padding-left:.5rem}@media (max-width:600px){#top-bar #breadcrumbs *{display:none}}#top-bar #breadcrumbs>a,#top-bar #breadcrumbs>span{padding:0 .5rem!important}#top-bar #breadcrumbs>a span,#top-bar #breadcrumbs>span span{padding:0!important}@media (max-width:960px){#top-bar #breadcrumbs{padding-left:2rem}}#top-bar #navigation{display:-ms-flexbox;display:flex;width:400px}#top-bar #navigation span,#top-bar #navigation>a{font-size:27px;width:50%;transition:background-color .5s ease,color .5s ease;text-align:center;text-decoration:none;border-left:1px solid #edeef1}#top-bar #navigation span.disabled,#top-bar #navigation>a.disabled{color:#bbc1cd}#top-bar #navigation>a:hover{color:#0e75ad;background:#edeef1}#top-bar .progress{position:absolute;z-index:1;bottom:-1px;width:100%;height:1px;background:linear-gradient(to right,#1aa3ed var(--scroll),transparent 0);background-repeat:no-repeat}.center-content #start{display:-ms-flexbox;display:flex;flex-direction:column;-ms-flex:1;flex:1;-ms-flex-direction:column;-ms-flex-pack:center;justify-content:center}.learn-content{position:relative;display:-ms-flexbox;display:flex;flex-direction:column;min-height:100vh;-ms-flex-direction:column}.learn-content #start{padding:2rem 3rem}@media (max-width:1280px){.learn-content #start{padding:2rem 2rem}}@media (max-width:960px){.learn-content #start{padding:2rem 1rem}}#footer{margin-top:1rem;text-align:center;border-top:1px solid #e7e9ed}#footer p{margin:1rem 0}.page-toc{font-size:.7rem;float:right;overflow:hidden;width:250px;margin-top:10px;margin-right:0;margin-bottom:1rem;margin-left:1.5rem;padding:.5rem .75rem;background:#f3f4f6}@media (max-width:600px){.page-toc{float:none;width:100%;margin-top:.5rem;margin-bottom:0;margin-left:0}}.page-toc .toc-toggle{font-size:1.2rem;line-height:1;display:block;float:right;margin-top:-8px;margin-right:-10px;padding:5px 10px;cursor:pointer;color:#667189}.page-toc.toc-closed{height:40px;margin-bottom:.5rem}.page-toc.toc-closed .toc-toggle .fa:before{content:'\f107'}.page-toc h5{margin:0 0 1rem}.page-toc ul{margin-bottom:0;margin-left:1rem}.page-toc li{margin-top:0;list-style:decimal;color:#808ba1}.page-toc li li{list-style:decimal}.page-toc li li li{list-style:square}.page-toc ul>li.first.last{margin:0;margin-left:-1rem;list-style:none}.page-toc+#body-inner>.code-toolbar,.page-toc+#body-inner>.notices{overflow:hidden}html{font-size:18px}@media screen and (min-width:480px){html{font-size:calc(18px + 2 * ((100vw - 480px)/ 800))}}@media screen and (min-width:1280px){html{font-size:20px}}body{font-weight:300;letter-spacing:-.015rem}body ::-moz-selection{background:#ececfe}body ::selection{background:#ececfe}div{min-width:0}pre{padding:1em}mark{padding:0}h1,h2,h3,h4,h5,h6{font-family:Metropolis,'Helvetica Neue',sans-serif;font-weight:500;line-height:1;margin-top:2rem;letter-spacing:-.05rem;color:#242931}h1{font-size:2.5rem;font-weight:500}@media (max-width:600px){h1{font-size:2rem}}a.active,a:active,a:focus,a:hover{text-decoration:none;color:#0e75ad}a:focus{outline:0!important;box-shadow:none!important}a:visited{color:#1195dc}.table-keycol{overflow:hidden}.table{width:auto}table{overflow-x:auto;width:100%;margin-bottom:1.5rem;border-spacing:0;border-collapse:collapse;text-align:left}table tbody tr:nth-of-type(odd){background:#f8f9fa}table tbody tr.active{background:#f0f1f4}table td,table th{padding:.6rem .4rem;border-bottom:.05rem solid #e7e9ed}table th{border-bottom-width:.1rem}.table-keycol table tr>td:first-child,.table-keycol table tr>th:first-child{width:15%;white-space:nowrap}.video-container,img{display:block;max-width:100%;margin:3rem auto;text-align:center}.video-container.border,img.border{padding:2px;border:2px solid #e6e6e6!important}.video-container.shadow,img.shadow{box-shadow:0 10px 30px rgba(0,0,0,.1)}hr{border:0;border-top:1px solid #e7e9ed}ol,ul{margin:0 0 1.2rem 0}ol ol,ol ul,ul ol,ul ul{margin:0}ol ol,ul ol{list-style-type:decimal}ol li,ul li{padding-top:0}#chapter{max-width:600px;margin:0 auto;text-align:center}#chapter h3{opacity:.7}#chapter h3+h1{display:inline-block;margin:1rem auto 2rem;border-bottom:3px solid #e7e9ed}@media (max-width:600px){#chapter h3+h1{font-size:2.5rem}}#body-inner :target:before{display:block;width:1px;height:60px;margin-top:-60px;content:''}pre.xdebug-var-dump{line-height:1.5;display:block;overflow-x:auto;padding:1rem;color:inherit;border-radius:2px;background:#fafafa}#body-inner pre{margin:.5rem 0}#body-inner pre ::-moz-selection{background:#ececfe}#body-inner pre ::selection{background:#ececfe}#body-inner code{word-break:break-word}#body-inner .code-toolbar{margin:.5rem 0}#body-inner .code-toolbar pre[class*=language-]{margin:0}#body-inner code[class*=language-],#body-inner pre[class*=language-]{font-family:Hack,monospace}#body-inner pre[class*=language-]{font-size:.7rem}#body-inner pre[class*=language-] code{font-size:.7rem;padding:initial}#body-inner .no-margin-top{margin-top:-1em}#body-inner .no-margin-top .code-toolbar{margin-top:0}#body-inner .no-margin-top .code-toolbar>pre{padding-top:3px}#body-inner .no-margin-bottom .code-toolbar{margin-bottom:0}#body-inner .line-highlight{background:linear-gradient(to right,rgba(255,233,179,.3) 70%,rgba(255,233,179,0))}#body-inner .line-highlight:before{top:.15rem;background-color:#ffbd1a;box-shadow:none}i.fa.fa-heart-o.pulse,i.fa.fa-heart.pulse{color:#920}b,strong{font-weight:500}.heavy{font-weight:700}.light{font-weight:200}#error{position:relative;margin-top:5rem;text-align:center}#error .icon{font-size:50px}#messages{margin-bottom:1rem}#messages .icon{font-size:1rem}ol,ul{margin-left:1.6rem}ol ol,ol ul,ul ol,ul ul{margin-left:1.6rem}ul{list-style:disc outside}ol{list-style:decimal outside}#navigation a.github-link{font-size:inherit!important;display:-ms-flexbox;display:flex;padding:0 1rem;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center}#navigation a.github-link i{padding-right:5px}.tabs-wrapper.ui-theme-badges{border:1px solid #f2f4f6;border-radius:0;background:#f8f9fa}.tabs-wrapper.ui-theme-badges .tabs-nav{margin:.25rem}.tabs-wrapper.ui-theme-badges .tabs-nav>li{margin-top:0}.tabs-wrapper.ui-theme-badges .tabs-nav li a{color:#767693;border-radius:0;background:#e6eaed}.tabs-wrapper.ui-theme-badges .tabs-nav li.current a{color:#fff;background:#8193a5}.tabs-wrapper.ui-theme-badges .tabs-nav li:not(.current) a:hover{background:#dde2e7}.tabs-wrapper.ui-theme-badges .tabs .tab{padding:.25rem 0}.tabs-wrapper.ui-theme-badges .tabs .tab pre{margin-top:.5rem!important;margin-bottom:.5rem!important}.notices{margin:1.5rem 0;padding:.4rem}.notices p{margin:0 0 1.5rem .5rem}.notices p:last-child{margin-bottom:0}.notices.info{color:#df8a13;border-left:5px solid #f0ad4e;background:#fcf8f2}.notices.warning{color:#b52b27;border-left:5px solid #d9534f;background:#fdf7f7}.notices.note{color:#28a1c5;border-left:5px solid #5bc0de;background:#f4f8fa}.notices.tip{color:#3d8b3d;border-left:5px solid #5cb85c;background:#f1f9f1}audio{max-width:100%}pre{max-width:100%}pre[class*=language-]:not(.command-line),pre[class*=language-]:not(.command-line)>code[class*=language-]{white-space:pre-wrap;word-break:break-word}.tntsearch-results em{padding:.05rem .1rem 0;color:#3a414e;border-bottom:.05rem solid #ffd367;border-radius:.1rem;background:#ffe9b3}.lifecycle #body-inner .level{position:relative}.lifecycle #body-inner .level h3{font-size:18px;position:absolute;z-index:1000;left:0;margin:0;padding:2px 10px 4px;color:#fff}.lifecycle #body-inner .level .level{margin-top:.5rem;margin-right:1rem;margin-bottom:.5rem;margin-left:-1rem;padding-bottom:1rem}.lifecycle #body-inner .level ol li{margin-top:.2rem;padding-top:.1rem}.lifecycle #body-inner .level>ol{margin-top:2rem}.lifecycle #body-inner .level.level-1{margin-bottom:1rem;color:#1abc9c;border:4px solid #1abc9c;background:#f6fefc}.lifecycle #body-inner .level.level-1 h3{background:#1abc9c}.lifecycle #body-inner .level.level-2{color:#2ecc71;border:4px solid #2ecc71;background:#f7fdf9}.lifecycle #body-inner .level.level-2 h3{background:#2ecc71}.lifecycle #body-inner .level.level-3{color:#3498db;border:4px solid #3498db;background:#f3f9fd}.lifecycle #body-inner .level.level-3 h3{background:#3498db}.lifecycle #body-inner .level.level-4{color:#34495e;border:4px solid #34495e;background:#e4eaf0}.lifecycle #body-inner .level.level-4 h3{background:#34495e}form .button-wrapper{margin-top:.75rem;margin-bottom:1rem}form span.required{font-size:1.2rem;font-weight:700;color:#e85600}form .form-input[type=range]{-webkit-appearance:slider-horizontal;-moz-appearance:slider-horizontal;appearance:slider-horizontal}form .form-input[type=range]:focus{border:none;box-shadow:none}form .form-group:not(.form-field-toggleable) .checkboxes{display:inherit}form .form-group:not(.form-field-toggleable) .checkboxes label{display:inherit;margin:inherit;padding:.1rem .4rem .1rem 1.2rem}form .form-group:not(.form-field-toggleable) .checkboxes label:before{display:none}#grav-login>form{max-width:350px;margin:2rem auto 0}#grav-login .form-label{display:none}#grav-login .form-data{margin:1rem 0}#grav-login .form-input{text-align:center}#grav-login .button-wrapper{text-align:right}#grav-login .button-wrapper .form-data.rememberme{float:left;margin:0}#grav-login .login-form button[type=submit]{color:#fff;border-color:#129be6;background:#1aa3ed}#grav-login .login-form button[type=submit]:focus,#grav-login .login-form button[type=submit]:hover{color:#fff;border-color:#108bce;background:#1195dc}#grav-login .login-form button[type=submit].active,#grav-login .login-form button[type=submit]:active{color:#fff;border-color:#0f85c5;background:#118fd3}#grav-login .twofa-form button[type=submit]:first-child{float:right;margin-left:4px;color:#fff;border-color:#129be6;background:#1aa3ed}#grav-login .twofa-form button[type=submit]:first-child:focus,#grav-login .twofa-form button[type=submit]:first-child:hover{color:#fff;border-color:#108bce;background:#1195dc}#grav-login .twofa-form button[type=submit]:first-child.active,#grav-login .twofa-form button[type=submit]:first-child:active{color:#fff;border-color:#0f85c5;background:#118fd3}.default-animation,a{transition:all .5s ease}.pulse{transform-origin:70% 70%;animation-name:pulse_animation;animation-duration:2s;animation-timing-function:linear;animation-iteration-count:infinite}@keyframes pulse_animation{0%{transform:scale(1)}30%{transform:scale(1)}40%{transform:scale(1.08)}50%{transform:scale(1)}60%{transform:scale(1)}70%{transform:scale(1.05)}80%{transform:scale(1)}100%{transform:scale(1)}}[data-simplebar]{position:relative;flex-direction:column;width:inherit;max-width:inherit;height:inherit;max-height:inherit;-ms-flex-direction:column;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start;-ms-flex-line-pack:start;align-content:flex-start;-ms-flex-align:start;align-items:flex-start}.simplebar-wrapper{overflow:hidden;width:inherit;max-width:inherit;height:inherit;max-height:inherit}.simplebar-mask{position:absolute;z-index:0;top:0;right:0;bottom:0;left:0;overflow:hidden;width:auto!important;height:auto!important;margin:0;padding:0;direction:inherit}.simplebar-offset{position:absolute;top:0;right:0;bottom:0;left:0;box-sizing:inherit!important;margin:0;padding:0;resize:none!important;direction:inherit!important;-webkit-overflow-scrolling:touch}.simplebar-content-wrapper{position:relative;display:block;visibility:visible;overflow:auto;box-sizing:border-box!important;width:auto;max-width:100%;height:100%;max-height:100%;direction:inherit}.simplebar-content:after,.simplebar-content:before{display:table;content:' '}.simplebar-placeholder{width:100%;max-width:100%;max-height:100%;pointer-events:none}.simplebar-height-auto-observer-wrapper{position:relative;z-index:-1;float:left;overflow:hidden;box-sizing:inherit!important;width:inherit;max-width:1px;height:100%;max-height:1px;margin:0;padding:0;pointer-events:none;-ms-flex-positive:inherit;flex-grow:inherit;-ms-flex-negative:0;flex-shrink:0;-ms-flex-preferred-size:0;flex-basis:0}.simplebar-height-auto-observer{position:absolute;z-index:-1;top:0;left:0;display:block;overflow:hidden;box-sizing:inherit;width:1000%;min-width:1px;height:1000%;min-height:1px;pointer-events:none;opacity:0}.simplebar-track{position:absolute;z-index:1;right:0;bottom:0;overflow:hidden;pointer-events:none}[data-simplebar].simplebar-dragging .simplebar-track{pointer-events:all}.simplebar-scrollbar{position:absolute;right:2px;width:7px;min-height:10px}.simplebar-scrollbar:before{position:absolute;right:0;left:0;content:'';transition:opacity .2s linear;opacity:0;border-radius:7px;background:rgba(255,255,255,.5)}.simplebar-track .simplebar-scrollbar.simplebar-visible:before{transition:opacity 0s linear;opacity:.5}.simplebar-track.simplebar-vertical{top:0;width:11px}.simplebar-track.simplebar-vertical .simplebar-scrollbar:before{top:2px;bottom:2px}.simplebar-track.simplebar-horizontal{left:0;height:11px}.simplebar-track.simplebar-horizontal .simplebar-scrollbar:before{right:2px;left:2px;height:100%}.simplebar-track.simplebar-horizontal .simplebar-scrollbar{top:2px;right:auto;left:0;width:auto;min-width:10px;height:7px;min-height:0}[data-simplebar-direction=rtl] .simplebar-track.simplebar-vertical{right:auto;left:0}.hs-dummy-scrollbar-size{position:fixed;visibility:hidden;overflow-x:scroll;overflow-y:hidden;width:500px;height:500px;opacity:0;direction:rtl} \ No newline at end of file diff --git a/themes/learn4/css/bricklayer.css b/themes/learn4/css/bricklayer.css new file mode 100644 index 00000000..45054803 --- /dev/null +++ b/themes/learn4/css/bricklayer.css @@ -0,0 +1,49 @@ +.bricklayer { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: start; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; +} + +.bricklayer-column-sizer { + width: 100%; + display: none; +} + +@media screen and (min-width: 640px) { + .bricklayer-column-sizer { + width: 100%; + } +} + +@media screen and (min-width: 980px) { + .bricklayer-column-sizer { + width: 50%; + } +} + +/*@media screen and (min-width: 1200px) {*/ + /*.bricklayer-column-sizer {*/ + /*width: 33.33333%;*/ + /*}*/ +/*}*/ + +.bricklayer-column { + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + padding-left: 5px; + padding-right: 5px; +} \ No newline at end of file diff --git a/themes/learn4/css/custom.css b/themes/learn4/css/custom.css new file mode 100644 index 00000000..e69de29b diff --git a/themes/learn4/css/fork-awesome.min.css b/themes/learn4/css/fork-awesome.min.css new file mode 100644 index 00000000..6c4010ca --- /dev/null +++ b/themes/learn4/css/fork-awesome.min.css @@ -0,0 +1,12 @@ +/*! +Fork Awesome 1.1.7 +License - https://forkaweso.me/Fork-Awesome/license + +Copyright 2018 Dave Gandy & Fork Awesome + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */@font-face{font-family:ForkAwesome;src:url(../fonts/forkawesome-webfont.eot?v=1.1.7);src:url(../fonts/forkawesome-webfont.eot?#iefix&v=1.1.7) format('embedded-opentype'),url(../fonts/forkawesome-webfont.woff2?v=1.1.7) format('woff2'),url(../fonts/forkawesome-webfont.woff?v=1.1.7) format('woff'),url(../fonts/forkawesome-webfont.ttf?v=1.1.7) format('truetype'),url(../fonts/forkawesome-webfont.svg?v=1.1.7#forkawesomeregular) format('svg');font-weight:400;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 ForkAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scale(1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-close:before,.fa-remove:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-repeat:before,.fa-rotate-right:before{content:"\f01e"}.fa-refresh:before,.fa-sync:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before,.fa-video:before{content:"\f03d"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-exclamation-triangle:before,.fa-warning:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell-o:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-globe-e:before{content:"\f304"}.fa-globe-w:before{content:"\f305"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-community:before,.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-floppy-o:before,.fa-save:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus-g:before,.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-bolt:before,.fa-flash:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before,.fa-utensils:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-chain-broken:before,.fa-unlink:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"\f150"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"\f151"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"\f152"}.fa-eur:before,.fa-euro:before{content:"\f153"}.fa-gbp:before,.fa-pound:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-inr:before,.fa-rupee:before{content:"\f156"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"\f158"}.fa-krw:before,.fa-won:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-desc:before,.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-desc:before,.fa-sort-amount-up:before{content:"\f161"}.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-desc:before,.fa-sort-numeric-up:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-try:before,.fa-turkish-lira:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:"\f19c"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before,.fa-utensil-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:"\f1c5"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:"\f1c6"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:"\f1d0"}.fa-empire:before,.fa-ge:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-paper-plane:before,.fa-send:before{content:"\f1d8"}.fa-paper-plane-o:before,.fa-send-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before,.fa-heading:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before,.fa-closed-captioning:before{content:"\f20a"}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before,.fa-gem:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-bed:before,.fa-hotel:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-medium-square:before{content:"\f2f8"}.fa-y-combinator:before,.fa-yc:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-television:before,.fa-tv:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo-v:before,.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:"\f2a3"}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-address-card:before,.fa-vcard:before{content:"\f2bb"}.fa-address-card-o:before,.fa-vcard-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.fa-mastodon:before{content:"\f2e1"}.fa-mastodon-alt:before{content:"\f2e2"}.fa-fork-awesome:before,.fa-fork-circle:before{content:"\f2e3"}.fa-peertube:before{content:"\f2e4"}.fa-diaspora:before{content:"\f2e5"}.fa-friendica:before{content:"\f2e6"}.fa-gnu-social:before{content:"\f2e7"}.fa-liberapay-square:before{content:"\f2e8"}.fa-liberapay:before{content:"\f2e9"}.fa-scuttlebutt:before,.fa-ssb:before{content:"\f2ea"}.fa-hubzilla:before{content:"\f2eb"}.fa-social-home:before{content:"\f2ec"}.fa-artstation:before{content:"\f2ed"}.fa-discord:before{content:"\f2ee"}.fa-discord-alt:before{content:"\f2ef"}.fa-patreon:before{content:"\f2f0"}.fa-snowdrift:before{content:"\f2f1"}.fa-activitypub:before{content:"\f2f2"}.fa-ethereum:before{content:"\f2f3"}.fa-keybase:before{content:"\f2f4"}.fa-shaarli:before{content:"\f2f5"}.fa-shaarli-o:before{content:"\f2f6"}.fa-cut-key:before,.fa-key-modern:before{content:"\f2f7"}.fa-xmpp:before{content:"\f2f9"}.fa-archive-org:before{content:"\f2fc"}.fa-freedombox:before{content:"\f2fd"}.fa-facebook-messenger:before{content:"\f2fe"}.fa-debian:before{content:"\f2ff"}.fa-mastodon-square:before{content:"\f300"}.fa-tipeee:before{content:"\f301"}.fa-react:before{content:"\f302"}.fa-dogmazic:before{content:"\f303"}.fa-zotero:before{content:"\f309"}.fa-nodejs:before{content:"\f308"}.fa-nextcloud:before{content:"\f306"}.fa-nextcloud-square:before{content:"\f307"}.fa-hackaday:before{content:"\f30a"}.fa-laravel:before{content:"\f30b"}.fa-signalapp:before{content:"\f30c"}.fa-gnupg:before{content:"\f30d"}.fa-php:before{content:"\f30e"}.fa-ffmpeg:before{content:"\f30f"}.fa-joplin:before{content:"\f310"}.fa-syncthing:before{content:"\f311"}.fa-inkscape:before{content:"\f312"}.fa-matrix-org:before{content:"\f313"}.fa-pixelfed:before{content:"\f314"}.fa-bootstrap:before{content:"\f315"}.fa-dev-to:before{content:"\f316"}.fa-hashnode:before{content:"\f317"}.fa-jirafeau:before{content:"\f318"}.fa-emby:before{content:"\f319"}.fa-wikidata:before{content:"\f31a"}.fa-gimp:before{content:"\f31b"}.fa-c:before{content:"\f31c"}.fa-digitalocean:before{content:"\f31d"}.fa-att:before{content:"\f31e"}.fa-gitea:before{content:"\f31f"}.fa-file-epub:before{content:"\f321"}.fa-python:before{content:"\f322"}.fa-archlinux:before{content:"\f323"}.fa-pleroma:before{content:"\f324"}.fa-unsplash:before{content:"\f325"}.fa-hackster:before{content:"\f326"}.fa-spell-check:before{content:"\f327"}.fa-moon:before{content:"\f328"}.fa-sun:before{content:"\f329"}.fa-f-droid:before{content:"\f32a"}.fa-biometric:before{content:"\f32b"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}/*# sourceMappingURL=fork-awesome.min.css.map */ \ No newline at end of file diff --git a/themes/learn4/fonts/PublicSans-Light.woff b/themes/learn4/fonts/PublicSans-Light.woff new file mode 100644 index 00000000..29f8ea44 Binary files /dev/null and b/themes/learn4/fonts/PublicSans-Light.woff differ diff --git a/themes/learn4/fonts/PublicSans-Light.woff2 b/themes/learn4/fonts/PublicSans-Light.woff2 new file mode 100644 index 00000000..be3d146b Binary files /dev/null and b/themes/learn4/fonts/PublicSans-Light.woff2 differ diff --git a/themes/learn4/fonts/PublicSans-SemiBold.woff b/themes/learn4/fonts/PublicSans-SemiBold.woff new file mode 100644 index 00000000..bbefee0f Binary files /dev/null and b/themes/learn4/fonts/PublicSans-SemiBold.woff differ diff --git a/themes/learn4/fonts/PublicSans-SemiBold.woff2 b/themes/learn4/fonts/PublicSans-SemiBold.woff2 new file mode 100644 index 00000000..a3caec32 Binary files /dev/null and b/themes/learn4/fonts/PublicSans-SemiBold.woff2 differ diff --git a/themes/learn4/fonts/forkawesome-webfont.eot b/themes/learn4/fonts/forkawesome-webfont.eot new file mode 100644 index 00000000..b96d208f Binary files /dev/null and b/themes/learn4/fonts/forkawesome-webfont.eot differ diff --git a/themes/learn4/fonts/forkawesome-webfont.svg b/themes/learn4/fonts/forkawesome-webfont.svg new file mode 100644 index 00000000..e9972045 --- /dev/null +++ b/themes/learn4/fonts/forkawesome-webfont.svg @@ -0,0 +1,2849 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<!-- +2019-2-18: Created with FontForge (http://fontforge.org) +--> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"> +<metadata> +Created by FontForge 20180321 at Mon Feb 18 18:29:30 2019 + By Julien Deswaef +The Fork Awesome font is licensed under the SIL OFL 1.1 (http://scripts.sil.org/OFL). Fork Awesome is a fork based of off Font Awesome 4.7.0 by Dave Gandy. More info on licenses at https://forkawesome.github.io +</metadata> +<defs> +<font id="forkawesome" horiz-adv-x="1536" > + <font-face + font-family="forkawesome" + font-weight="400" + font-stretch="normal" + units-per-em="1792" + panose-1="2 0 5 3 0 0 0 0 0 0" + ascent="1536" + descent="-256" + bbox="-0.653061 -264 2304.01 1538" + underline-thickness="89.6" + underline-position="-179.2" + unicode-range="U+0020-F32B" + /> + <missing-glyph /> + <glyph glyph-name="space" unicode=" " horiz-adv-x="200" + /> + <glyph glyph-name="code" unicode="" horiz-adv-x="1830" +d="M572 137l-50 -50c-13 -13 -33 -13 -46 0l-466 466c-13 13 -13 33 0 46l466 466c13 13 33 13 46 0l50 -50c13 -13 13 -33 0 -46l-393 -393l393 -393c13 -13 13 -33 0 -46zM1163 1204l-373 -1291c-5 -17 -23 -27 -39 -22l-62 17c-17 5 -27 23 -22 40l373 1291 +c5 17 23 27 39 22l62 -17c17 -5 27 -23 22 -40zM1820 553l-466 -466c-13 -13 -33 -13 -46 0l-50 50c-13 13 -13 33 0 46l393 393l-393 393c-13 13 -13 33 0 46l50 50c13 13 33 13 46 0l466 -466c13 -13 13 -33 0 -46z" /> + <glyph glyph-name="chevron-circle-right" unicode="" +d="M717 141l454 454c25 25 25 65 0 90l-454 454c-25 25 -65 25 -90 0l-102 -102c-25 -25 -25 -65 0 -90l307 -307l-307 -307c-25 -25 -25 -65 0 -90l102 -102c25 -25 65 -25 90 0zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768 +s768 -344 768 -768z" /> + <glyph glyph-name="crosshairs" unicode="" +d="M1197 512h-109c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h109c-43 144 -157 258 -301 301v-109c0 -35 -29 -64 -64 -64h-128c-35 0 -64 29 -64 64v109c-144 -43 -258 -157 -301 -301h109c35 0 64 -29 64 -64v-128c0 -35 -29 -64 -64 -64h-109c43 -144 157 -258 301 -301 +v109c0 35 29 64 64 64h128c35 0 64 -29 64 -64v-109c144 43 258 157 301 301zM1536 704v-128c0 -35 -29 -64 -64 -64h-143c-49 -215 -218 -384 -433 -433v-143c0 -35 -29 -64 -64 -64h-128c-35 0 -64 29 -64 64v143c-215 49 -384 218 -433 433h-143c-35 0 -64 29 -64 64v128 +c0 35 29 64 64 64h143c49 215 218 384 433 433v143c0 35 29 64 64 64h128c35 0 64 -29 64 -64v-143c215 -49 384 -218 433 -433h143c35 0 64 -29 64 -64z" /> + <glyph glyph-name="gg" unicode="" horiz-adv-x="1920" +d="M672 736l384 -384l-384 -384l-672 672l672 672l168 -168l-96 -96l-72 72l-480 -480l480 -480l193 193l-289 287zM1248 1312l672 -672l-672 -672l-168 168l96 96l72 -72l480 480l-480 480l-193 -193l289 -287l-96 -96l-384 384z" /> + <glyph glyph-name="wpforms" unicode="" +d="M515 625v-128h-252v128h252zM515 880v-127h-252v127h252zM1273 369v-128h-341v128h341zM1273 625v-128h-672v128h672zM1273 880v-127h-672v127h672zM1408 20v1240c0 11 -9 20 -20 20h-32l-378 -256l-210 171l-210 -171l-378 256h-32c-11 0 -20 -9 -20 -20v-1240 +c0 -11 9 -20 20 -20h1240c11 0 20 9 20 20zM553 1130l185 150h-406zM983 1130l221 150h-406zM1536 1260v-1240c0 -82 -66 -148 -148 -148h-1240c-82 0 -148 66 -148 148v1240c0 82 66 148 148 148h1240c82 0 148 -66 148 -148z" /> + <glyph glyph-name="angle-double-left" unicode="" horiz-adv-x="966" +d="M582 160c0 -8 -4 -17 -10 -23l-50 -50c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-466 466c-6 6 -10 15 -10 23s4 17 10 23l466 466c6 6 15 10 23 10s17 -4 23 -10l50 -50c6 -6 10 -15 10 -23s-4 -17 -10 -23l-393 -393l393 -393c6 -6 10 -15 10 -23zM966 160 +c0 -8 -4 -17 -10 -23l-50 -50c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-466 466c-6 6 -10 15 -10 23s4 17 10 23l466 466c6 6 15 10 23 10s17 -4 23 -10l50 -50c6 -6 10 -15 10 -23s-4 -17 -10 -23l-393 -393l393 -393c6 -6 10 -15 10 -23z" /> + <glyph glyph-name="list" unicode="" horiz-adv-x="1792" +d="M256 224v-192c0 -17 -15 -32 -32 -32h-192c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h192c17 0 32 -15 32 -32zM256 608v-192c0 -17 -15 -32 -32 -32h-192c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h192c17 0 32 -15 32 -32zM256 992v-192c0 -17 -15 -32 -32 -32h-192 +c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h192c17 0 32 -15 32 -32zM1792 224v-192c0 -17 -15 -32 -32 -32h-1344c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1344c17 0 32 -15 32 -32zM256 1376v-192c0 -17 -15 -32 -32 -32h-192c-17 0 -32 15 -32 32v192 +c0 17 15 32 32 32h192c17 0 32 -15 32 -32zM1792 608v-192c0 -17 -15 -32 -32 -32h-1344c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1344c17 0 32 -15 32 -32zM1792 992v-192c0 -17 -15 -32 -32 -32h-1344c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1344 +c17 0 32 -15 32 -32zM1792 1376v-192c0 -17 -15 -32 -32 -32h-1344c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1344c17 0 32 -15 32 -32z" /> + <glyph glyph-name="archlinux" unicode="" horiz-adv-x="1794" +d="M897 1538c164 -386 203 -504 682 -1397c-61 36 -138 70 -247 98c158 -81 236 -156 310 -214c47 -87 97 -179 152 -281c-281 162 -499 263 -702 303c7 31 11 64 12 98c5 182 -83 337 -195 347s-207 -131 -212 -313v-9c0 -43 4 -84 13 -122c-205 -39 -426 -140 -710 -304 +c362 650 540 989 654 1226c60 -50 139 -99 256 -147c-109 76 -175 143 -230 201c89 190 137 318 217 514z" /> + <glyph glyph-name="th" unicode="" horiz-adv-x="1792" +d="M512 288v-192c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96zM512 800v-192c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96zM1152 288v-192c0 -53 -43 -96 -96 -96h-320 +c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96zM512 1312v-192c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96zM1152 800v-192c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96 +h320c53 0 96 -43 96 -96zM1792 288v-192c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96zM1152 1312v-192c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96zM1792 800v-192 +c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96zM1792 1312v-192c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96z" /> + <glyph glyph-name="angle-left" unicode="" horiz-adv-x="582" +d="M582 992c0 -8 -4 -17 -10 -23l-393 -393l393 -393c6 -6 10 -15 10 -23s-4 -17 -10 -23l-50 -50c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-466 466c-6 6 -10 15 -10 23s4 17 10 23l466 466c6 6 15 10 23 10s17 -4 23 -10l50 -50c6 -6 10 -14 10 -23z" /> + <glyph glyph-name="recycle" unicode="" horiz-adv-x="1760" +d="M820 367l-15 -368l-2 -22l-420 29c-52 4 -95 53 -114 97c-40 93 12 203 42 292c0 0 77 -12 509 -28zM433 953l180 -379l-147 92c-225 -257 -246 -448 -246 -448l-190 357c-39 58 -4 121 -4 121s35 63 114 188l-140 86zM1664 436l-188 -359c-26 -65 -98 -71 -98 -71 +s-71 -7 -219 -12l8 -164l-230 367l211 362l7 -173c339 -41 509 50 509 50zM879 1360c0 0 -47 -62 -265 -435l-317 187l-19 12l225 356c28 44 91 60 140 55c100 -9 172 -106 236 -175zM1534 1053l212 -363c27 -45 11 -108 -15 -150c-54 -84 -174 -104 -264 -129 +c0 0 -34 71 -265 436l313 195zM1391 1279l142 83l-220 -373l-419 20l151 86c-120 319 -279 429 -279 429l405 -1c70 6 108 -54 108 -54s39 -61 112 -190z" /> + <glyph glyph-name="file-code-o" unicode="" +d="M1468 1156c37 -37 68 -111 68 -164v-1152c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h896c53 0 127 -31 164 -68zM1024 1400v-376h376c-6 17 -15 34 -22 41l-313 313c-7 7 -24 16 -41 22zM1408 -128v1024h-416c-53 0 -96 43 -96 96v416 +h-768v-1536h1280zM480 768c11 14 31 17 45 6l51 -38c14 -11 17 -31 6 -45l-182 -243l182 -243c11 -14 8 -34 -6 -45l-51 -38c-14 -11 -34 -8 -45 6l-226 301c-8 11 -8 27 0 38zM1282 467c8 -11 8 -27 0 -38l-226 -301c-11 -14 -31 -17 -45 -6l-51 38c-14 11 -17 31 -6 45 +l182 243l-182 243c-11 14 -8 34 6 45l51 38c14 11 34 8 45 -6zM662 6c-18 3 -29 20 -26 37l138 831c3 18 20 29 37 26l63 -10c18 -3 29 -20 26 -37l-138 -831c-3 -18 -20 -29 -37 -26z" /> + <glyph glyph-name="thumb-tack" unicode="" horiz-adv-x="1152" +d="M480 672v448c0 18 -14 32 -32 32s-32 -14 -32 -32v-448c0 -18 14 -32 32 -32s32 14 32 32zM1152 320c0 -35 -29 -64 -64 -64h-429l-51 -483c-2 -16 -15 -29 -31 -29h-1c-16 0 -29 11 -32 27l-76 485h-404c-35 0 -64 29 -64 64c0 164 124 320 256 320v512 +c-70 0 -128 58 -128 128s58 128 128 128h640c70 0 128 -58 128 -128s-58 -128 -128 -128v-512c132 0 256 -156 256 -320z" /> + <glyph glyph-name="fax" unicode="" horiz-adv-x="1792" +d="M288 1152c88 0 160 -72 160 -160v-1088c0 -88 -72 -160 -160 -160h-128c-88 0 -160 72 -160 160v1088c0 88 72 160 160 160h128zM1664 989c76 -44 128 -127 128 -221v-768c0 -141 -115 -256 -256 -256h-864c-88 0 -160 72 -160 160v1536c0 53 43 96 96 96h672 +c53 0 127 -31 164 -68l152 -152c37 -37 68 -111 68 -164v-163zM928 0v128c0 18 -14 32 -32 32h-128c-18 0 -32 -14 -32 -32v-128c0 -18 14 -32 32 -32h128c18 0 32 14 32 32zM928 256v128c0 18 -14 32 -32 32h-128c-18 0 -32 -14 -32 -32v-128c0 -18 14 -32 32 -32h128 +c18 0 32 14 32 32zM928 512v128c0 18 -14 32 -32 32h-128c-18 0 -32 -14 -32 -32v-128c0 -18 14 -32 32 -32h128c18 0 32 14 32 32zM1184 0v128c0 18 -14 32 -32 32h-128c-18 0 -32 -14 -32 -32v-128c0 -18 14 -32 32 -32h128c18 0 32 14 32 32zM1184 256v128 +c0 18 -14 32 -32 32h-128c-18 0 -32 -14 -32 -32v-128c0 -18 14 -32 32 -32h128c18 0 32 14 32 32zM1184 512v128c0 18 -14 32 -32 32h-128c-18 0 -32 -14 -32 -32v-128c0 -18 14 -32 32 -32h128c18 0 32 14 32 32zM1440 0v128c0 18 -14 32 -32 32h-128 +c-18 0 -32 -14 -32 -32v-128c0 -18 14 -32 32 -32h128c18 0 32 14 32 32zM1440 256v128c0 18 -14 32 -32 32h-128c-18 0 -32 -14 -32 -32v-128c0 -18 14 -32 32 -32h128c18 0 32 14 32 32zM1440 512v128c0 18 -14 32 -32 32h-128c-18 0 -32 -14 -32 -32v-128 +c0 -18 14 -32 32 -32h128c18 0 32 14 32 32zM1536 896v256h-160c-53 0 -96 43 -96 96v160h-640v-512h896z" /> + <glyph glyph-name="xing-square" unicode="" +d="M685 771c0 0 0 1 -126 222c-10 16 -24 34 -52 34h-184c-12 0 -21 -4 -26 -11c-5 -8 -4 -19 1 -29l125 -216v-1l-196 -346c-6 -10 -5 -20 0 -28s13 -13 24 -13h185c27 0 41 19 50 36c192 339 199 352 199 352zM1309 1268c-5 8 -13 12 -24 12h-187c-27 0 -39 -17 -49 -35 +c-398 -706 -411 -729 -411 -729s0 -1 262 -481c9 -16 23 -35 52 -35h184c11 0 20 4 25 12s5 18 -1 28l-260 476v1l409 723c5 10 5 20 0 28zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960 +c159 0 288 -129 288 -288z" /> + <glyph glyph-name="google-plus-official" unicode="" +d="M917 631c0 22 -2 43 -6 64h-362v-132h217c-16 -106 -116 -165 -217 -165c-133 0 -239 110 -239 242s106 242 239 242c56 0 112 -19 153 -59l104 101c-71 66 -160 100 -257 100c-213 0 -384 -172 -384 -384s171 -384 384 -384c221 0 368 156 368 375zM1262 585h109v110 +h-109v110h-110v-110h-110v-110h110v-110h110v110zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" /> + <glyph glyph-name="quora" unicode="" horiz-adv-x="1734" +d="M1226 749c0 417 -130 631 -435 631c-300 0 -430 -214 -430 -631c0 -415 130 -627 430 -627c48 0 91 5 131 17c-62 122 -135 245 -277 245c-27 0 -54 -4 -79 -16l-49 97c59 51 154 91 276 91c191 0 288 -92 366 -209c45 100 67 235 67 402zM1616 117h117 +c7 -72 -29 -373 -356 -373c-198 0 -302 115 -381 249c-65 -18 -135 -27 -205 -27c-400 0 -791 319 -791 783c0 468 392 787 791 787c407 0 794 -317 794 -787c0 -262 -122 -475 -299 -612c57 -86 116 -143 198 -143c90 0 126 69 132 123z" /> + <glyph glyph-name="archive-org" unicode="" horiz-adv-x="1506" +d="M1459 1344l-27 -53h-1385l-24 53l717 189zM1430 1237v-140h-1380v140h1380zM1257 442c-3 65 -4 124 -3 178c0 25 1 61 3 108s3 77 3 91c1 22 3 57 5 104s4 82 5 107c0 1 1 3 1 7v10c47 10 93 10 138 0c21 -325 21 -630 0 -916c-41 -11 -82 -12 -123 -1c-6 1 -10 2 -11 2 +s-3 2 -3 3s-1 4 -1 9c-3 34 -6 90 -10 165zM80 369v0c-1 9 -1 22 -1 38c0 5 -1 11 -1 21s-1 17 -1 22c0 26 0 45 -1 57v219c2 38 3 68 3 88c2 32 3 56 3 71c1 7 1 15 1 26c0 3 1 9 1 17s1 14 1 18c0 7 0 10 1 12c0 12 0 22 1 28c0 11 1 20 2 27c0 11 0 19 1 24c0 4 2 6 7 7 +c29 10 61 13 96 8c11 -2 22 -5 32 -9c2 0 3 -2 3 -6c2 -42 4 -74 6 -97c1 -20 2 -50 3 -90s2 -69 2 -88s1 -47 1 -85s1 -66 2 -84c-3 -131 -4 -199 -4 -206c-1 -47 -3 -112 -7 -194c-2 -27 -3 -47 -3 -60c0 -3 -2 -5 -6 -6c-28 -9 -59 -11 -94 -8c-4 1 -10 3 -18 5 +s-12 4 -14 5c-4 0 -6 1 -6 4c0 12 0 21 -1 26c0 4 -1 8 -1 14s-1 10 -1 13c0 9 0 15 -1 20c0 6 -1 13 -1 24v25c-1 6 -2 14 -2 25s0 19 -1 25c0 17 -1 30 -2 40v24zM464 255v0v25s-1 19 -1 25c-1 10 -1 23 -1 40c-1 5 -2 13 -2 24c0 16 0 29 -1 38v43c-1 13 -2 32 -2 57v29 +s-1 21 -1 27v102c0 27 0 47 1 61c0 18 1 48 3 88c0 17 1 40 3 71c0 11 0 20 1 26c0 15 1 27 2 35v12c0 4 1 9 1 15v13s1 7 2 13s1 10 1 14l2 24c0 4 1 6 5 7c30 10 62 13 96 8c11 -2 22 -5 32 -9c4 0 6 -2 6 -6l4 -97l4 -178c2 -78 3 -135 3 -169c0 -24 -1 -59 -1 -104 +s-1 -79 -2 -102c-1 -47 -3 -112 -7 -194c0 -13 -1 -33 -3 -60c0 -3 -2 -5 -7 -6c-26 -10 -57 -12 -92 -8c-4 0 -7 1 -11 2s-8 3 -13 4s-8 3 -10 4c-2 0 -3 1 -3 4c-1 7 -1 15 -1 26c-1 7 -2 16 -2 27c-2 4 -3 10 -3 20zM1046 961v0c1 -26 3 -63 4 -114s2 -89 2 -114 +c2 -67 3 -113 3 -140c0 -22 -1 -53 -1 -95s-1 -73 -2 -94c-1 -45 -3 -111 -7 -199c-1 -8 -2 -20 -2 -36s0 -28 -1 -36c0 -3 -2 -5 -7 -6c-27 -9 -58 -11 -93 -8c-5 1 -12 2 -20 5s-12 5 -13 5c-3 0 -5 1 -5 5c0 12 0 31 -2 56s-4 45 -5 58c0 15 -1 40 -2 73s-2 59 -3 77 +c0 13 -1 33 -2 60s-1 47 -1 60v68c-1 46 -1 69 0 70c1 55 3 136 7 242c2 48 4 94 8 139c0 4 2 6 6 7c29 10 61 13 95 8c12 -2 23 -5 33 -9c3 0 4 -2 4 -6zM60 -18v98h1390v-98h-1390zM0 -128v73h1506v-73h-1506z" /> + <glyph glyph-name="volume-up" unicode="" horiz-adv-x="1664" +d="M768 1184v-1088c0 -35 -29 -64 -64 -64c-17 0 -33 7 -45 19l-333 333h-262c-35 0 -64 29 -64 64v384c0 35 29 64 64 64h262l333 333c12 12 28 19 45 19c35 0 64 -29 64 -64zM1152 640c0 -100 -61 -197 -155 -235c-8 -4 -17 -5 -25 -5c-35 0 -64 28 -64 64 +c0 76 116 55 116 176s-116 100 -116 176c0 36 29 64 64 64c8 0 17 -1 25 -5c94 -37 155 -135 155 -235zM1408 640c0 -203 -122 -392 -310 -471c-8 -3 -17 -5 -25 -5c-36 0 -65 29 -65 64c0 28 16 47 39 59c27 14 52 26 76 44c99 72 157 187 157 309s-58 237 -157 309 +c-24 18 -49 30 -76 44c-23 12 -39 31 -39 59c0 35 29 64 64 64c9 0 18 -2 26 -5c188 -79 310 -268 310 -471zM1664 640c0 -307 -183 -585 -465 -706c-8 -3 -17 -5 -26 -5c-35 0 -64 29 -64 64c0 29 15 45 39 59c14 8 30 13 45 21c28 15 56 32 82 51c164 121 261 312 261 516 +s-97 395 -261 516c-26 19 -54 36 -82 51c-15 8 -31 13 -45 21c-24 14 -39 30 -39 59c0 35 29 64 64 64c9 0 18 -2 26 -5c282 -121 465 -399 465 -706z" /> + <glyph glyph-name="spoon" unicode="" horiz-adv-x="640" +d="M640 1008c0 -200 -87 -331 -209 -379l45 -821c2 -35 -25 -64 -60 -64h-192c-35 0 -62 29 -60 64l45 821c-122 48 -209 179 -209 379c0 256 143 528 320 528s320 -272 320 -528z" /> + <glyph glyph-name="facebook" unicode="" horiz-adv-x="864" +d="M864 1524v-264h-157c-123 0 -146 -59 -146 -144v-189h293l-39 -296h-254v-759h-306v759h-255v296h255v218c0 253 155 391 381 391c108 0 201 -8 228 -12z" /> + <glyph glyph-name="universal-access" unicode="" horiz-adv-x="1792" +d="M1374 879c-8 34 -42 55 -77 47c-143 -34 -273 -62 -401 -62s-258 28 -401 62c-35 8 -69 -13 -77 -47c-8 -35 13 -69 47 -77c106 -25 205 -47 303 -58c-4 -338 -41 -432 -83 -540l-9 -21c-13 -33 4 -70 37 -83c7 -3 15 -4 23 -4c26 0 50 15 60 41l8 20 +c28 72 54 139 71 259h42c17 -120 43 -187 71 -259l8 -20c10 -26 34 -41 60 -41c8 0 16 1 23 4c33 13 50 50 37 83l-9 21c-42 108 -79 202 -83 540c98 11 197 33 303 58c34 8 55 42 47 77zM1024 1024c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128 +s128 57 128 128zM1600 640c0 -389 -315 -704 -704 -704s-704 315 -704 704s315 704 704 704s704 -315 704 -704zM896 1408c-423 0 -768 -345 -768 -768s345 -768 768 -768s768 345 768 768s-345 768 -768 768zM1792 640c0 -495 -401 -896 -896 -896s-896 401 -896 896 +s401 896 896 896s896 -401 896 -896z" /> + <glyph glyph-name="cloud-download" unicode="" horiz-adv-x="1920" +d="M1280 608c0 18 -14 32 -32 32h-224v352c0 17 -15 32 -32 32h-192c-17 0 -32 -15 -32 -32v-352h-224c-18 0 -32 -15 -32 -32c0 -8 3 -17 9 -23l352 -352c6 -6 14 -9 23 -9c8 0 17 3 23 9l351 351c6 7 10 15 10 24zM1920 384c0 -212 -172 -384 -384 -384h-1088 +c-247 0 -448 201 -448 448c0 174 101 332 258 405c-1 15 -2 29 -2 43c0 283 229 512 512 512c208 0 395 -126 474 -318c46 40 105 62 166 62c141 0 256 -115 256 -256c0 -49 -14 -97 -41 -138c174 -41 297 -196 297 -374z" /> + <glyph glyph-name="trophy" unicode="" horiz-adv-x="1664" +d="M458 653c-42 92 -74 214 -74 371h-256v-96c0 -98 133 -234 330 -275zM1536 928v96h-256c0 -157 -32 -279 -74 -371c197 41 330 177 330 275zM1664 1056v-128c0 -190 -230 -400 -542 -415c-40 -51 -77 -81 -95 -95c-53 -48 -67 -98 -67 -162s32 -128 128 -128 +s192 -64 192 -160v-64c0 -18 -14 -32 -32 -32h-832c-18 0 -32 14 -32 32v64c0 96 96 160 192 160s128 64 128 128s-14 114 -67 162c-18 14 -55 44 -95 95c-312 15 -542 225 -542 415v128c0 53 43 96 96 96h288v96c0 88 72 160 160 160h576c88 0 160 -72 160 -160v-96h288 +c53 0 96 -43 96 -96z" /> + <glyph glyph-name="caret-up" unicode="" horiz-adv-x="1024" +d="M1024 320c0 -35 -29 -64 -64 -64h-896c-35 0 -64 29 -64 64c0 17 7 33 19 45l448 448c12 12 28 19 45 19s33 -7 45 -19l448 -448c12 -12 19 -28 19 -45z" /> + <glyph glyph-name="magic" unicode="" horiz-adv-x="1637" +d="M1163 955l293 293l-107 107l-293 -293zM1610 1248c0 -17 -6 -33 -18 -45l-1286 -1286c-12 -12 -28 -18 -45 -18s-33 6 -45 18l-198 198c-12 12 -18 28 -18 45s6 33 18 45l1286 1286c12 12 28 18 45 18s33 -6 45 -18l198 -198c12 -12 18 -28 18 -45zM259 1438l98 -30 +l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM609 1276l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1539 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM899 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z" /> + <glyph glyph-name="hourglass-o" unicode="" +d="M1408 1408c0 -370 -177 -638 -373 -768c196 -130 373 -398 373 -768h96c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-1472c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h96c0 370 177 638 373 768c-196 130 -373 398 -373 768h-96c-18 0 -32 14 -32 32v64 +c0 18 14 32 32 32h1472c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-96zM874 700c202 76 406 343 406 708h-1024c0 -365 204 -632 406 -708c25 -9 42 -33 42 -60s-17 -51 -42 -60c-202 -76 -406 -343 -406 -708h1024c0 365 -204 632 -406 708c-25 9 -42 33 -42 60 +s17 51 42 60z" /> + <glyph glyph-name="balance-scale" unicode="" horiz-adv-x="2176" +d="M1728 1088l-384 -704h768zM448 1088l-384 -704h768zM1269 1280c-19 -54 -63 -98 -117 -117v-1291h608c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-1344c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h608v1291c-54 19 -98 63 -117 117h-491c-18 0 -32 14 -32 32v64 +c0 18 14 32 32 32h491c27 75 97 128 181 128s154 -53 181 -128h491c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-491zM1088 1264c44 0 80 36 80 80s-36 80 -80 80s-80 -36 -80 -80s36 -80 80 -80zM2176 384c0 -206 -285 -288 -448 -288s-448 82 -448 288 +c0 39 349 657 392 735c11 20 33 33 56 33s45 -13 56 -33c43 -78 392 -696 392 -735zM896 384c0 -206 -285 -288 -448 -288s-448 82 -448 288c0 39 349 657 392 735c11 20 33 33 56 33s45 -13 56 -33c43 -78 392 -696 392 -735z" /> + <glyph glyph-name="upload" unicode="" horiz-adv-x="1664" +d="M1280 64c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1536 64c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1664 288v-320c0 -53 -43 -96 -96 -96h-1472c-53 0 -96 43 -96 96v320c0 53 43 96 96 96h427c27 -74 98 -128 181 -128 +h256c83 0 154 54 181 128h427c53 0 96 -43 96 -96zM1339 936c-10 -24 -33 -40 -59 -40h-256v-448c0 -35 -29 -64 -64 -64h-256c-35 0 -64 29 -64 64v448h-256c-26 0 -49 16 -59 40c-10 23 -5 51 14 69l448 448c12 13 29 19 45 19s33 -6 45 -19l448 -448 +c19 -18 24 -46 14 -69z" /> + <glyph glyph-name="magnet" unicode="" +d="M1536 704v-128c0 -408 -323 -704 -768 -704s-768 296 -768 704v128c0 35 29 64 64 64h384c35 0 64 -29 64 -64v-128c0 -183 213 -192 256 -192s256 9 256 192v128c0 35 29 64 64 64h384c35 0 64 -29 64 -64zM512 1344v-384c0 -35 -29 -64 -64 -64h-384 +c-35 0 -64 29 -64 64v384c0 35 29 64 64 64h384c35 0 64 -29 64 -64zM1536 1344v-384c0 -35 -29 -64 -64 -64h-384c-35 0 -64 29 -64 64v384c0 35 29 64 64 64h384c35 0 64 -29 64 -64z" /> + <glyph glyph-name="adjust" unicode="" +d="M768 96v1088c-300 0 -544 -244 -544 -544s244 -544 544 -544zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" /> + <glyph glyph-name="subway" unicode="" +d="M1088 1536c247 0 448 -143 448 -320v-896c0 -173 -191 -313 -431 -319l213 -202c21 -20 7 -55 -22 -55h-1056c-29 0 -43 35 -22 55l213 202c-240 6 -431 146 -431 319v896c0 177 201 320 448 320h640zM288 224c88 0 160 72 160 160s-72 160 -160 160s-160 -72 -160 -160 +s72 -160 160 -160zM704 768v512h-544v-512h544zM1248 224c88 0 160 72 160 160s-72 160 -160 160s-160 -72 -160 -160s72 -160 160 -160zM1408 768v512h-576v-512h576z" /> + <glyph glyph-name="unslpash" unicode="" +d="M1052 728h484v-856h-1536v856h484v-428h568v428zM484 1408h568v-428h-568v428z" /> + <glyph glyph-name="chevron-down" unicode="" horiz-adv-x="1612" +d="M1593 728l-742 -741c-25 -25 -65 -25 -90 0l-742 741c-25 25 -25 66 0 91l166 165c25 25 65 25 90 0l531 -531l531 531c25 25 65 25 90 0l166 -165c25 -25 25 -66 0 -91z" /> + <glyph glyph-name="location-arrow" unicode="" horiz-adv-x="1408" +d="M1401 1187l-640 -1280c-11 -22 -33 -35 -57 -35c-5 0 -10 1 -15 2c-29 7 -49 32 -49 62v576h-576c-30 0 -55 20 -62 49s7 59 33 72l1280 640c9 5 19 7 29 7c17 0 33 -6 45 -19c20 -19 25 -49 12 -74z" /> + <glyph glyph-name="check-circle" unicode="" +d="M1284 802c0 17 -6 34 -18 46l-91 90c-12 12 -28 19 -45 19s-33 -7 -45 -19l-408 -407l-226 226c-12 12 -28 19 -45 19s-33 -7 -45 -19l-91 -90c-12 -12 -18 -29 -18 -46s6 -33 18 -45l362 -362c12 -12 29 -19 45 -19c17 0 34 7 46 19l543 543c12 12 18 28 18 45z +M1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" /> + <glyph glyph-name="arrow-down" unicode="" horiz-adv-x="1558" +d="M1558 704c0 -34 -14 -67 -37 -90l-651 -652c-24 -23 -57 -37 -91 -37s-67 14 -90 37l-651 652c-24 23 -38 56 -38 90s14 67 38 91l74 75c24 23 57 37 91 37s67 -14 90 -37l294 -294v704c0 70 58 128 128 128h128c70 0 128 -58 128 -128v-704l294 294c23 23 56 37 90 37 +s67 -14 91 -37l75 -75c23 -24 37 -57 37 -91z" /> + <glyph glyph-name="bicycle" unicode="" horiz-adv-x="2304" +d="M762 384h-314c-53 0 -83 60 -51 102l188 251c-42 20 -88 31 -137 31c-176 0 -320 -144 -320 -320s144 -320 320 -320c155 0 284 110 314 256zM576 512h186c-12 56 -38 107 -75 148zM1056 512l288 384h-480l-99 -132c67 -66 112 -154 126 -252h165zM2176 448 +c0 176 -144 320 -320 320c-43 0 -83 -9 -121 -24l174 -260c20 -30 12 -70 -17 -89c-11 -8 -24 -11 -36 -11c-21 0 -41 10 -53 29l-174 260c-57 -58 -93 -137 -93 -225c0 -176 144 -320 320 -320s320 144 320 320zM2304 448c0 -247 -201 -448 -448 -448s-448 201 -448 448 +c0 132 58 251 149 333l-65 98l-353 -469c-12 -17 -31 -26 -51 -26h-197c-31 -217 -217 -384 -443 -384c-247 0 -448 201 -448 448s201 448 448 448c78 0 151 -20 215 -55l137 183h-224c-35 0 -64 29 -64 64s29 64 64 64h384v-128h435l-85 128h-222c-35 0 -64 29 -64 64 +s29 64 64 64h256c21 0 41 -11 53 -28l267 -400c58 28 123 44 192 44c247 0 448 -201 448 -448z" /> + <glyph glyph-name="instagram" unicode="" +d="M1024 640c0 141 -115 256 -256 256s-256 -115 -256 -256s115 -256 256 -256s256 115 256 256zM1162 640c0 -218 -176 -394 -394 -394s-394 176 -394 394s176 394 394 394s394 -176 394 -394zM1270 1050c0 -51 -41 -92 -92 -92s-92 41 -92 92s41 92 92 92s92 -41 92 -92z +M768 1270c-112 0 -352 9 -453 -31c-35 -14 -61 -31 -88 -58s-44 -53 -58 -88c-40 -101 -31 -341 -31 -453s-9 -352 31 -453c14 -35 31 -61 58 -88s53 -44 88 -58c101 -40 341 -31 453 -31s352 -9 453 31c35 14 61 31 88 58s44 53 58 88c40 101 31 341 31 453s9 352 -31 453 +c-14 35 -31 61 -58 88s-53 44 -88 58c-101 40 -341 31 -453 31zM1536 640c0 -106 1 -211 -5 -317c-6 -123 -34 -232 -124 -322s-199 -118 -322 -124c-106 -6 -211 -5 -317 -5s-211 -1 -317 5c-123 6 -232 34 -322 124s-118 199 -124 322c-6 106 -5 211 -5 317s-1 211 5 317 +c6 123 34 232 124 322s199 118 322 124c106 6 211 5 317 5s211 1 317 -5c123 -6 232 -34 322 -124s118 -199 124 -322c6 -106 5 -211 5 -317z" /> + <glyph glyph-name="caret-square-o-up" unicode="" +d="M1145 419c-11 -22 -33 -35 -57 -35h-640c-24 0 -46 13 -57 35c-11 21 -9 47 5 66l320 448c12 17 31 27 52 27s40 -10 52 -27l320 -448c14 -19 16 -45 5 -66zM1280 160v960c0 17 -15 32 -32 32h-960c-17 0 -32 -15 -32 -32v-960c0 -17 15 -32 32 -32h960c17 0 32 15 32 32 +zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" /> + <glyph glyph-name="crop" unicode="" horiz-adv-x="1664" +d="M557 256h595v595zM512 301l595 595h-595v-595zM1664 224v-192c0 -18 -14 -32 -32 -32h-224v-224c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v224h-864c-18 0 -32 14 -32 32v864h-224c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h224v224c0 18 14 32 32 32h192 +c18 0 32 -14 32 -32v-224h851l246 247c13 12 33 12 46 0c12 -13 12 -33 0 -46l-247 -246v-851h224c18 0 32 -14 32 -32z" /> + <glyph glyph-name="external-link" unicode="" horiz-adv-x="1792" +d="M1408 608v-320c0 -159 -129 -288 -288 -288h-832c-159 0 -288 129 -288 288v832c0 159 129 288 288 288h704c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-704c-88 0 -160 -72 -160 -160v-832c0 -88 72 -160 160 -160h832c88 0 160 72 160 160v320c0 18 14 32 32 32 +h64c18 0 32 -14 32 -32zM1792 1472v-512c0 -35 -29 -64 -64 -64c-17 0 -33 7 -45 19l-176 176l-652 -652c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-114 114c-6 6 -10 15 -10 23s4 17 10 23l652 652l-176 176c-12 12 -19 28 -19 45c0 35 29 64 64 64h512c35 0 64 -29 64 -64z +" /> + <glyph glyph-name="arrow-circle-down" unicode="" +d="M1284 639c0 17 -6 33 -18 45l-91 91c-12 12 -28 18 -45 18s-33 -6 -45 -18l-189 -189v502c0 35 -29 64 -64 64h-128c-35 0 -64 -29 -64 -64v-502l-189 189c-12 12 -28 19 -45 19s-33 -7 -45 -19l-91 -91c-12 -12 -18 -28 -18 -45s6 -33 18 -45l362 -362l91 -91 +c12 -12 28 -18 45 -18s33 6 45 18l91 91l362 362c12 12 18 28 18 45zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" /> + <glyph glyph-name="font-awesome" unicode="" horiz-adv-x="1499" +d="M1499 1024v-839c0 -31 -20 -54 -49 -62c-107 -32 -227 -52 -338 -52c-150 0 -277 59 -443 59c-123 0 -250 -20 -370 -48v-338h-160v1368c-84 33 -139 115 -139 205c0 121 98 219 219 219s219 -98 219 -219c0 -90 -55 -172 -139 -205v-68c112 26 228 44 343 44 +c66 0 132 -5 198 -15c86 -13 173 -43 261 -43c55 0 111 7 165 18c41 8 135 40 169 40c35 0 64 -29 64 -64z" /> + <glyph glyph-name="paper-plane" unicode="" horiz-adv-x="1792" +d="M1764 1525c21 -15 31 -39 27 -64l-256 -1536c-3 -19 -15 -35 -32 -45c-9 -5 -20 -8 -31 -8c-8 0 -16 2 -24 5l-453 185l-242 -295c-12 -15 -30 -23 -49 -23c-7 0 -15 1 -22 4c-25 9 -42 33 -42 60v349l864 1059l-1069 -925l-395 162c-23 9 -38 30 -40 55 +c-1 24 11 47 32 59l1664 960c10 6 21 9 32 9c13 0 26 -4 36 -11z" /> + <glyph glyph-name="meanpath" unicode="" +d="M1311 694v-114c0 -32 -19 -52 -51 -52h-202c-32 0 -52 20 -52 52v114c0 32 20 52 52 52h202c32 0 51 -20 51 -52zM821 464v250c0 71 -47 118 -118 118h-133c-45 0 -78 -19 -96 -52c-18 33 -51 52 -96 52h-130c-70 0 -118 -47 -118 -118v-250c0 -15 7 -22 21 -22h55 +c15 0 22 7 22 22v230c0 32 19 52 52 52h94c32 0 52 -20 52 -52v-230c0 -15 6 -22 21 -22h54c15 0 22 7 22 22v230c0 32 20 52 52 52h97c32 0 51 -20 51 -52v-230c0 -15 7 -22 22 -22h55c14 0 21 7 21 22zM1410 560v154c0 71 -48 118 -119 118h-264c-71 0 -119 -47 -119 -118 +v-410c0 -15 8 -21 22 -21h55c15 0 21 6 21 21v180c19 -26 49 -42 94 -42h191c71 0 119 48 119 118zM1536 1176v-1072c0 -128 -104 -232 -232 -232h-1072c-128 0 -232 104 -232 232v1072c0 128 104 232 232 232h1072c128 0 232 -104 232 -232z" /> + <glyph glyph-name="long-arrow-left" unicode="" horiz-adv-x="1728" +d="M1728 736v-192c0 -18 -14 -32 -32 -32h-1248v-224c0 -13 -7 -24 -19 -29s-25 -3 -35 5l-384 350c-6 6 -10 14 -10 23s4 18 10 24l384 354c10 9 23 11 35 6c11 -5 19 -16 19 -29v-224h1248c18 0 32 -14 32 -32z" /> + <glyph glyph-name="download" unicode="" horiz-adv-x="1664" +d="M1280 192c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1536 192c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1664 416v-320c0 -53 -43 -96 -96 -96h-1472c-53 0 -96 43 -96 96v320c0 53 43 96 96 96h465l135 -136 +c37 -36 85 -56 136 -56s99 20 136 56l136 136h464c53 0 96 -43 96 -96zM1339 985c10 -24 5 -52 -14 -70l-448 -448c-12 -13 -29 -19 -45 -19s-33 6 -45 19l-448 448c-19 18 -24 46 -14 70c10 23 33 39 59 39h256v448c0 35 29 64 64 64h256c35 0 64 -29 64 -64v-448h256 +c26 0 49 -16 59 -39z" /> + <glyph glyph-name="bold" unicode="" horiz-adv-x="1408" +d="M555 15c44 -19 92 -32 140 -32c228 0 376 91 376 335c0 62 -8 127 -41 180c-93 150 -227 158 -388 158c-30 0 -73 0 -101 -10c0 -106 -1 -212 -1 -317c0 -69 -9 -256 15 -314zM541 761c36 -6 73 -7 109 -7c206 0 353 58 353 289c0 195 -173 262 -340 262 +c-44 0 -87 -6 -130 -13c0 -101 8 -202 8 -303c0 -53 -1 -106 -1 -159c0 -23 0 -46 1 -69zM0 -128l2 94c64 16 129 17 191 43c35 59 30 163 30 230c0 22 2 978 -22 1025c-15 29 -162 36 -195 40l-4 83c238 4 476 21 713 21c45 0 91 -1 136 -1c226 0 475 -108 475 -368 +c0 -179 -136 -246 -277 -310c190 -43 359 -172 359 -382c0 -344 -313 -458 -606 -458c-88 0 -176 6 -264 6c-179 0 -360 -16 -538 -23z" /> + <glyph glyph-name="caret-down" unicode="" horiz-adv-x="1024" +d="M1024 832c0 -17 -7 -33 -19 -45l-448 -448c-12 -12 -28 -19 -45 -19s-33 7 -45 19l-448 448c-12 12 -19 28 -19 45c0 35 29 64 64 64h896c35 0 64 -29 64 -64z" /> + <glyph glyph-name="chevron-left" unicode="" horiz-adv-x="1036" +d="M1017 1235l-531 -531l531 -531c25 -25 25 -65 0 -90l-166 -166c-25 -25 -65 -25 -90 0l-742 742c-25 25 -25 65 0 90l742 742c25 25 65 25 90 0l166 -166c25 -25 25 -65 0 -90z" /> + <glyph glyph-name="venus" unicode="" horiz-adv-x="1152" +d="M1152 960c0 -296 -224 -540 -512 -572v-260h224c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-224v-224c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v224h-224c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h224v260c-303 33 -535 302 -510 619 +c22 272 238 495 508 525c348 39 642 -232 642 -572zM128 960c0 -247 201 -448 448 -448s448 201 448 448s-201 448 -448 448s-448 -201 -448 -448z" /> + <glyph glyph-name="font" unicode="" horiz-adv-x="1664" +d="M725 977l-170 -450c99 -1 198 -4 297 -4c19 0 38 1 57 2c-52 152 -113 307 -184 452zM0 -128l2 79c94 29 196 9 238 117l237 616l280 724h128c4 -7 8 -14 11 -21l205 -480c75 -177 144 -356 220 -532c45 -104 80 -211 130 -313c7 -16 21 -46 35 -57 +c33 -26 125 -32 172 -50c3 -19 6 -38 6 -57c0 -9 -1 -17 -1 -26c-127 0 -254 16 -381 16c-131 0 -262 -11 -393 -15c0 26 1 52 4 78l131 28c27 6 80 13 80 50c0 36 -129 333 -145 374l-450 2c-26 -58 -127 -320 -127 -358c0 -77 147 -80 204 -88c1 -19 1 -38 1 -58 +c0 -9 -1 -18 -2 -27c-116 0 -233 20 -349 20c-14 0 -34 -6 -48 -8c-63 -11 -125 -14 -188 -14z" /> + <glyph glyph-name="pinterest" unicode="" +d="M1536 640c0 -424 -344 -768 -768 -768c-76 0 -148 11 -218 32c29 46 62 105 78 164c0 0 9 34 54 211c26 -51 104 -96 187 -96c247 0 415 225 415 527c0 227 -193 440 -487 440c-364 0 -548 -262 -548 -480c0 -132 50 -250 157 -294c17 -7 33 0 38 20c4 13 12 47 16 61 +c5 20 3 26 -11 43c-31 37 -51 84 -51 151c0 194 145 368 378 368c206 0 320 -126 320 -295c0 -221 -98 -408 -244 -408c-80 0 -140 66 -121 148c23 97 68 202 68 272c0 63 -34 116 -104 116c-82 0 -148 -85 -148 -199c0 0 0 -73 25 -122c-84 -356 -99 -418 -99 -418 +c-14 -58 -15 -123 -13 -177c-271 119 -460 389 -460 704c0 424 344 768 768 768s768 -344 768 -768z" /> + <glyph glyph-name="sun" unicode="" horiz-adv-x="1707" +d="M1706 363c-3 -10 -11 -17 -20 -20l-292 -96v-306c0 -10 -5 -20 -13 -26c-9 -6 -19 -8 -29 -4l-292 94l-180 -248c-6 -8 -16 -13 -26 -13s-20 5 -26 13l-180 248l-292 -94c-10 -4 -20 -2 -29 4c-8 6 -13 16 -13 26v306l-292 96c-9 3 -17 10 -20 20s-2 21 4 29l180 248 +l-180 248c-6 9 -7 19 -4 29s11 17 20 20l292 96v306c0 10 5 20 13 26c9 6 19 8 29 4l292 -94l180 248c12 16 40 16 52 0l180 -248l292 94c10 4 20 2 29 -4c8 -6 13 -16 13 -26v-306l292 -96c9 -3 17 -10 20 -20s2 -20 -4 -29l-180 -248l180 -248c6 -8 7 -19 4 -29z" /> + <glyph glyph-name="cart-plus" unicode="" horiz-adv-x="1664" +d="M1216 832c0 35 -29 64 -64 64h-128v128c0 35 -29 64 -64 64s-64 -29 -64 -64v-128h-128c-35 0 -64 -29 -64 -64s29 -64 64 -64h128v-128c0 -35 29 -64 64 -64s64 29 64 64v128h128c35 0 64 29 64 64zM640 0c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128 +s128 -57 128 -128zM1536 0c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128s128 -57 128 -128zM1664 1088v-512c0 -32 -24 -60 -57 -64l-1044 -122c4 -22 13 -47 13 -70s-14 -44 -24 -64h920c35 0 64 -29 64 -64s-29 -64 -64 -64h-1024c-35 0 -64 29 -64 64 +c0 31 47 108 61 137l-177 823h-204c-35 0 -64 29 -64 64s29 64 64 64h256c68 0 69 -80 79 -128h1201c35 0 64 -29 64 -64z" /> + <glyph glyph-name="folder-open-o" unicode="" horiz-adv-x="1909" +d="M1781 605c0 28 -31 35 -53 35h-1088c-53 0 -123 -33 -157 -74l-294 -363c-9 -12 -18 -25 -18 -40c0 -28 31 -35 53 -35h1088c53 0 123 33 157 75l294 363c9 11 18 24 18 39zM640 768h768v160c0 53 -43 96 -96 96h-576c-53 0 -96 43 -96 96v64c0 53 -43 96 -96 96h-320 +c-53 0 -96 -43 -96 -96v-853l256 315c58 71 165 122 256 122zM1909 605c0 -44 -19 -86 -46 -120l-295 -363c-57 -70 -166 -122 -256 -122h-1088c-123 0 -224 101 -224 224v960c0 123 101 224 224 224h320c123 0 224 -101 224 -224v-32h544c123 0 224 -101 224 -224v-160h192 +c68 0 136 -31 166 -95c10 -21 15 -44 15 -68z" /> + <glyph glyph-name="tachometer" unicode="" horiz-adv-x="1792" +d="M384 384c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM576 832c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1004 351l101 382c8 34 -12 69 -46 78s-69 -12 -78 -46l-101 -382 +c-79 -6 -148 -61 -170 -142c-27 -103 35 -208 137 -235c103 -27 208 35 235 137c21 81 -13 163 -78 208zM1664 384c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1024 1024c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128 +s128 57 128 128zM1472 832c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1792 384c0 -172 -49 -338 -141 -483c-12 -18 -32 -29 -54 -29h-1402c-22 0 -42 11 -54 29c-92 144 -141 311 -141 483c0 494 402 896 896 896s896 -402 896 -896z +" /> + <glyph glyph-name="creative-commons" unicode="" horiz-adv-x="1792" +d="M605 303c-200 0 -344 142 -344 337c0 192 147 337 344 337c159 0 240 -92 243 -96c9 -11 10 -27 2 -39l-53 -78c-5 -8 -14 -13 -24 -14s-19 3 -26 10c0 0 -55 56 -138 56c-99 0 -170 -73 -170 -175c0 -103 73 -177 174 -177c92 0 155 67 156 67c7 8 17 12 27 11 +c10 -2 20 -8 24 -17l45 -82c7 -11 5 -26 -3 -36c-4 -4 -93 -104 -257 -104zM1235 303c-200 0 -344 142 -344 337c0 192 148 337 344 337c159 0 240 -92 243 -96c9 -11 10 -27 2 -39l-53 -78c-5 -8 -14 -13 -24 -14s-19 3 -26 10c0 0 -54 56 -138 56 +c-99 0 -170 -73 -170 -175c0 -103 73 -177 174 -177c92 0 155 67 156 67c7 8 17 12 27 11c11 -2 20 -8 25 -17l45 -82c6 -11 4 -26 -4 -36c-4 -4 -92 -104 -257 -104zM896 1376c-406 0 -736 -330 -736 -736s330 -736 736 -736s736 330 736 736s-330 736 -736 736zM896 1536 +c495 0 896 -401 896 -896s-401 -896 -896 -896s-896 401 -896 896s401 896 896 896z" /> + <glyph glyph-name="clipboard" unicode="" horiz-adv-x="1792" +d="M768 -128h896v640h-416c-53 0 -96 43 -96 96v416h-384v-1152zM1024 1312v64c0 17 -15 32 -32 32h-704c-17 0 -32 -15 -32 -32v-64c0 -17 15 -32 32 -32h704c17 0 32 15 32 32zM1280 640h299l-299 299v-299zM1792 512v-672c0 -53 -43 -96 -96 -96h-960 +c-53 0 -96 43 -96 96v160h-544c-53 0 -96 43 -96 96v1344c0 53 43 96 96 96h1088c53 0 96 -43 96 -96v-328c13 -8 25 -17 36 -28l408 -408c38 -38 68 -111 68 -164z" /> + <glyph glyph-name="eercast" unicode="" horiz-adv-x="1719" +d="M1304 752c35 54 -6 191 -128 272c-121 81 -276 75 -312 21c-35 -53 40 -19 177 -70c226 -84 228 -277 263 -223zM1667 178c-283 -696 -1558 -520 -1531 383c3 115 35 192 68 302c-211 -864 966 -1367 1449 -685c18 25 23 23 14 0zM1428 627c0 -283 -228 -513 -509 -513 +s-509 230 -509 513s228 513 509 513s509 -230 509 -513zM1715 915c-356 808 -1826 510 -1663 -589c-338 1101 1055 1606 1570 822c42 -64 90 -176 93 -233zM1653 573c17 338 -217 569 -533 656c-5 0 -27 9 14 13c772 -26 800 -1260 -41 -1274c274 76 543 266 560 605z" /> + <glyph glyph-name="bar-chart" unicode="" horiz-adv-x="2048" +d="M640 640v-512h-256v512h256zM1024 1152v-1024h-256v1024h256zM2048 0v-128h-2048v1536h128v-1408h1920zM1408 896v-768h-256v768h256zM1792 1280v-1152h-256v1152h256z" /> + <glyph glyph-name="reply" unicode="" horiz-adv-x="1792" +d="M1792 416c0 -140 -70 -323 -127 -451c-11 -23 -22 -55 -37 -76c-7 -10 -14 -17 -28 -17c-20 0 -32 16 -32 35c0 16 4 34 5 50c3 41 5 82 5 123c0 477 -283 560 -714 560h-224v-256c0 -35 -29 -64 -64 -64c-17 0 -33 7 -45 19l-512 512c-12 12 -19 28 -19 45s7 33 19 45 +l512 512c12 12 28 19 45 19c35 0 64 -29 64 -64v-256h224c328 0 736 -58 875 -403c42 -106 53 -221 53 -333z" /> + <glyph glyph-name="hourglass-half" unicode="" +d="M1408 1408c0 -370 -177 -638 -373 -768c196 -130 373 -398 373 -768h96c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-1472c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h96c0 370 177 638 373 768c-196 130 -373 398 -373 768h-96c-18 0 -32 14 -32 32v64 +c0 18 14 32 32 32h1472c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-96zM1280 1408h-1024c0 -146 33 -275 85 -384h854c52 109 85 238 85 384zM1223 192c-74 193 -207 330 -340 384h-230c-133 -54 -266 -191 -340 -384h910z" /> + <glyph glyph-name="microchip" unicode="" +d="M192 256v-128h-112c-9 0 -16 7 -16 16v16h-48c-9 0 -16 7 -16 16v32c0 9 7 16 16 16h48v16c0 9 7 16 16 16h112zM192 512v-128h-112c-9 0 -16 7 -16 16v16h-48c-9 0 -16 7 -16 16v32c0 9 7 16 16 16h48v16c0 9 7 16 16 16h112zM192 768v-128h-112c-9 0 -16 7 -16 16v16 +h-48c-9 0 -16 7 -16 16v32c0 9 7 16 16 16h48v16c0 9 7 16 16 16h112zM192 1024v-128h-112c-9 0 -16 7 -16 16v16h-48c-9 0 -16 7 -16 16v32c0 9 7 16 16 16h48v16c0 9 7 16 16 16h112zM192 1280v-128h-112c-9 0 -16 7 -16 16v16h-48c-9 0 -16 7 -16 16v32c0 9 7 16 16 16 +h48v16c0 9 7 16 16 16h112zM1280 1440v-1472c0 -53 -43 -96 -96 -96h-832c-53 0 -96 43 -96 96v1472c0 53 43 96 96 96h832c53 0 96 -43 96 -96zM1536 208v-32c0 -9 -7 -16 -16 -16h-48v-16c0 -9 -7 -16 -16 -16h-112v128h112c9 0 16 -7 16 -16v-16h48c9 0 16 -7 16 -16z +M1536 464v-32c0 -9 -7 -16 -16 -16h-48v-16c0 -9 -7 -16 -16 -16h-112v128h112c9 0 16 -7 16 -16v-16h48c9 0 16 -7 16 -16zM1536 720v-32c0 -9 -7 -16 -16 -16h-48v-16c0 -9 -7 -16 -16 -16h-112v128h112c9 0 16 -7 16 -16v-16h48c9 0 16 -7 16 -16zM1536 976v-32 +c0 -9 -7 -16 -16 -16h-48v-16c0 -9 -7 -16 -16 -16h-112v128h112c9 0 16 -7 16 -16v-16h48c9 0 16 -7 16 -16zM1536 1232v-32c0 -9 -7 -16 -16 -16h-48v-16c0 -9 -7 -16 -16 -16h-112v128h112c9 0 16 -7 16 -16v-16h48c9 0 16 -7 16 -16z" /> + <glyph glyph-name="graduation-cap" unicode="" horiz-adv-x="2304" +d="M1774 700l18 -316c8 -141 -287 -256 -640 -256s-648 115 -640 256l18 316l574 -181c16 -5 32 -7 48 -7s32 2 48 7zM2304 1024c0 -14 -9 -26 -22 -31l-1120 -352c-4 -1 -7 -1 -10 -1s-6 0 -10 1l-652 206c-57 -45 -97 -155 -105 -290c38 -22 63 -62 63 -109 +c0 -45 -23 -84 -58 -107l58 -433c1 -9 -2 -18 -8 -25s-15 -11 -24 -11h-192c-9 0 -18 4 -24 11s-9 16 -8 25l58 433c-35 23 -58 62 -58 107c0 48 27 89 65 111c6 117 36 243 98 330l-333 104c-13 5 -22 17 -22 31s9 26 22 31l1120 352c4 1 7 1 10 1s6 0 10 -1l1120 -352 +c13 -5 22 -17 22 -31z" /> + <glyph glyph-name="info-circle" unicode="" +d="M1024 160v160c0 18 -14 32 -32 32h-96v512c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-160c0 -18 14 -32 32 -32h96v-320h-96c-18 0 -32 -14 -32 -32v-160c0 -18 14 -32 32 -32h448c18 0 32 14 32 32zM896 1056v160c0 18 -14 32 -32 32h-192c-18 0 -32 -14 -32 -32 +v-160c0 -18 14 -32 32 -32h192c18 0 32 14 32 32zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" /> + <glyph glyph-name="barcode" unicode="" horiz-adv-x="2176" +d="M0 1404h128v-1532h-128v1532zM2048 1408h128v-1536h-128v1536zM256 1408h128v-1280h-128v1280zM512 1408h256v-1280h-256v1280zM1280 1408h256v-1280h-256v1280zM1792 1408h128v-1280h-128v1280zM1024 1408h128v-1280h-128v1280zM256 0h128v-128h-128v128zM512 0h128 +v-128h-128v128zM768 0h128v-128h-128v128zM1024 0h128v-128h-128v128zM1280 0h128v-128h-128v128zM1536 0h128v-128h-128v128zM1792 0h128v-128h-128v128z" /> + <glyph glyph-name="exchange" unicode="" horiz-adv-x="1792" +d="M1792 352v-192c0 -17 -15 -32 -32 -32h-1376v-192c0 -17 -14 -32 -32 -32c-9 0 -17 4 -24 10l-319 320c-6 6 -9 14 -9 22c0 9 3 17 9 23l320 320c6 6 15 9 23 9c17 0 32 -14 32 -32v-192h1376c17 0 32 -14 32 -32zM1792 896c0 -8 -3 -17 -9 -23l-320 -320 +c-6 -6 -15 -9 -23 -9c-17 0 -32 15 -32 32v192h-1376c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1376v192c0 18 14 32 32 32c9 0 17 -4 24 -10l319 -319c6 -6 9 -15 9 -23z" /> + <glyph glyph-name="hand-o-up" unicode="" +d="M1280 -64c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1408 700c0 113 -46 189 -167 189c-19 0 -38 -2 -56 -5c-23 42 -80 65 -126 65c-24 0 -48 -6 -69 -18c-32 34 -72 53 -119 53c-32 0 -79 -14 -103 -35v331c0 69 -59 128 -128 128 +c-68 0 -128 -61 -128 -128v-576c-63 0 -128 96 -256 96c-96 0 -128 -75 -128 -160c0 -28 116 -79 139 -90c22 -12 44 -24 65 -37c53 -33 99 -71 145 -112c73 -64 163 -135 163 -241v-32h640v32c0 175 128 346 128 540zM1536 705c0 -112 -31 -218 -69 -322 +c-22 -61 -59 -160 -59 -223v-288c0 -71 -57 -128 -128 -128h-640c-71 0 -128 57 -128 128v288c0 48 -86 116 -119 145c-41 36 -82 70 -129 100c-93 58 -264 101 -264 235c0 159 87 288 256 288c44 0 87 -7 128 -22v374c0 138 117 256 255 256c140 0 257 -116 257 -256v-169 +c42 -3 82 -16 119 -37c14 2 29 3 43 3c64 0 128 -21 178 -60c189 2 300 -127 300 -312z" /> + <glyph glyph-name="pause" unicode="" +d="M1536 1344v-1408c0 -35 -29 -64 -64 -64h-512c-35 0 -64 29 -64 64v1408c0 35 29 64 64 64h512c35 0 64 -29 64 -64zM640 1344v-1408c0 -35 -29 -64 -64 -64h-512c-35 0 -64 29 -64 64v1408c0 35 29 64 64 64h512c35 0 64 -29 64 -64z" /> + <glyph glyph-name="github-square" unicode="" +d="M519 336c2 3 1 9 -3 13c-5 4 -11 5 -14 2c-2 -3 -1 -9 3 -13c5 -4 11 -5 14 -2zM491 377c-3 4 -8 6 -12 4c-3 -2 -3 -8 0 -12c4 -5 9 -7 12 -5s3 8 0 13zM450 417c1 2 -1 6 -5 8c-3 1 -7 1 -8 -2c-2 -3 0 -6 4 -8c4 -1 8 -1 9 2zM471 394c2 2 2 7 -2 10c-3 4 -8 5 -10 3 +c-3 -3 -2 -7 1 -11c3 -3 8 -5 11 -2zM557 319c1 4 -3 9 -9 11s-11 0 -13 -4c-1 -4 3 -9 9 -11s11 0 13 4zM599 316c0 4 -5 8 -12 8c-6 0 -10 -4 -10 -8s5 -8 11 -8s11 4 11 8zM638 323c-1 4 -7 6 -13 5s-10 -5 -9 -9s6 -7 12 -6s10 6 10 10zM1280 640 +c0 283 -229 512 -512 512s-512 -229 -512 -512c0 -226 147 -418 350 -486c26 -5 35 11 35 25c0 12 0 52 -1 95c0 0 -142 -31 -172 61c0 0 -23 59 -57 74c0 0 -46 32 4 32c0 0 50 -4 78 -53c45 -79 120 -56 149 -43c5 33 18 56 33 69c-114 13 -234 57 -234 253 +c0 56 20 101 53 137c-5 13 -23 65 5 136c43 13 141 -53 141 -53c41 12 84 17 128 17s87 -5 128 -17c0 0 98 66 141 53c28 -71 10 -123 5 -136c33 -36 53 -81 53 -137c0 -197 -120 -240 -234 -253c18 -16 35 -47 35 -95c0 -68 -1 -123 -1 -140c0 -14 9 -30 35 -25 +c203 68 350 260 350 486zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" /> + <glyph glyph-name="search" unicode="" horiz-adv-x="1664" +d="M1152 704c0 247 -201 448 -448 448s-448 -201 -448 -448s201 -448 448 -448s448 201 448 448zM1664 -128c0 -70 -58 -128 -128 -128c-34 0 -67 14 -90 38l-343 342c-117 -81 -257 -124 -399 -124c-389 0 -704 315 -704 704s315 704 704 704s704 -315 704 -704 +c0 -142 -43 -282 -124 -399l343 -343c23 -23 37 -56 37 -90z" /> + <glyph glyph-name="mixcloud" unicode="" horiz-adv-x="2304" +d="M1645 438c0 80 -51 148 -121 175c-5 -31 -13 -62 -23 -92c-10 -32 -40 -52 -72 -52c-8 0 -16 1 -24 3c-41 14 -62 57 -49 97c15 46 23 94 23 143c0 250 -204 454 -455 454c-180 0 -342 -107 -414 -267c70 -18 135 -54 188 -106c30 -30 30 -79 0 -109s-79 -30 -109 0 +c-48 48 -112 75 -180 75c-141 0 -256 -114 -256 -255s115 -255 256 -255h1046c105 0 190 85 190 189zM1798 438c0 -189 -154 -342 -343 -342h-1046c-226 0 -409 183 -409 408c0 205 152 374 349 403c83 244 314 412 575 412c315 0 575 -241 605 -548 +c153 -33 269 -170 269 -333zM2048 438c0 -114 -33 -224 -97 -319c-15 -22 -39 -33 -64 -33c-15 0 -30 4 -43 13c-35 23 -44 71 -20 106c47 69 71 149 71 233c0 83 -24 164 -71 233c-24 35 -15 82 20 106s83 14 107 -21c64 -94 97 -204 97 -318zM2304 438 +c0 -159 -46 -312 -134 -443c-15 -22 -39 -34 -64 -34c-14 0 -29 4 -42 13c-35 24 -45 71 -21 106c70 106 108 230 108 358s-38 252 -108 357c-24 35 -14 83 21 106c35 24 82 15 106 -21c88 -130 134 -283 134 -442z" /> + <glyph glyph-name="snowflake-o" unicode="" horiz-adv-x="1570" +d="M1519 419l-167 -33l186 -107c30 -17 41 -57 23 -87s-57 -41 -87 -23l-186 106l55 -160c28 -80 -94 -121 -121 -42l-102 300l-271 156v-313l208 -238c56 -63 -41 -148 -96 -84l-112 128v-214c0 -35 -29 -64 -64 -64s-64 29 -64 64v214l-112 -128c-55 -64 -152 21 -96 84 +l208 238v313l-271 -156l-102 -300c-27 -79 -149 -38 -121 42l55 160l-186 -106c-30 -18 -69 -7 -87 23s-7 70 23 87l186 107l-167 33c-83 17 -58 142 25 126l310 -62l271 157l-271 157l-310 -62c-4 -1 -9 -1 -13 -1c-76 0 -87 112 -12 127l167 33l-186 107 +c-30 17 -41 57 -23 87c18 31 57 41 87 23l186 -106l-55 160c-28 80 94 121 121 42l102 -300l271 -156v313l-208 238c-56 63 41 148 96 84l112 -128v214c0 35 29 64 64 64s64 -29 64 -64v-214l112 128c55 64 152 -21 96 -84l-208 -238v-313l271 156l102 300 +c27 79 149 38 121 -42l-55 -160l186 106c30 18 69 7 87 -23s7 -70 -23 -87l-186 -107l167 -33c75 -15 64 -127 -12 -127c-4 0 -9 0 -13 1l-310 62l-271 -157l271 -157l310 62c83 16 108 -109 25 -126z" /> + <glyph glyph-name="flask" unicode="" horiz-adv-x="1458" +d="M1424 88c75 -119 22 -216 -119 -216h-1152c-141 0 -194 97 -119 216l503 793v399h-64c-35 0 -64 29 -64 64s29 64 64 64h512c35 0 64 -29 64 -64s-29 -64 -64 -64h-64v-399zM645 813l-272 -429h712l-272 429l-20 31v436h-128v-436z" /> + <glyph glyph-name="pinterest-square" unicode="" +d="M1248 1408c159 0 288 -129 288 -288v-960c0 -159 -129 -288 -288 -288h-725c33 47 87 128 108 210c0 0 9 34 53 209c27 -51 104 -95 186 -95c244 0 410 223 410 521c0 225 -191 435 -481 435c-361 0 -543 -259 -543 -475c0 -130 50 -246 156 -290c17 -7 33 0 38 19 +c3 13 11 47 15 61c5 19 3 26 -11 42c-30 37 -50 83 -50 150c0 192 144 363 374 363c204 0 316 -124 316 -291c0 -219 -97 -404 -241 -404c-79 0 -139 66 -120 147c23 96 67 200 67 269c0 62 -33 114 -102 114c-81 0 -146 -84 -146 -196c0 0 0 -72 24 -121 +c-83 -352 -98 -414 -98 -414c-22 -92 -13 -199 -7 -254h-183c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960z" /> + <glyph glyph-name="fast-backward" unicode="" horiz-adv-x="1792" +d="M1747 1395c25 25 45 16 45 -19v-1472c0 -35 -20 -44 -45 -19l-710 710c-6 6 -10 12 -13 19v-710c0 -35 -20 -44 -45 -19l-710 710c-6 6 -10 12 -13 19v-678c0 -35 -29 -64 -64 -64h-128c-35 0 -64 29 -64 64v1408c0 35 29 64 64 64h128c35 0 64 -29 64 -64v-678 +c3 7 7 13 13 19l710 710c25 25 45 16 45 -19v-710c3 7 7 13 13 19z" /> + <glyph glyph-name="volume-control-phone" unicode="" horiz-adv-x="1408" +d="M617 -153c0 -34 -90 -84 -119 -95c-15 -6 -30 -8 -45 -8c-33 0 -66 9 -98 18c-164 49 -203 149 -268 290c-70 151 -87 295 -87 460s17 309 87 460c65 141 104 241 268 290c32 9 65 18 98 18c15 0 30 -2 45 -8c29 -11 119 -61 119 -95c0 -24 -53 -194 -64 -234 +c-6 -25 -8 -66 -27 -84c-13 -12 -34 -14 -51 -14c-47 0 -94 11 -141 11c-14 0 -35 -1 -47 -11c-16 -13 -24 -58 -30 -78c-24 -83 -37 -168 -37 -255s13 -172 37 -255c6 -20 14 -65 30 -78c12 -10 33 -11 47 -11c47 0 94 11 141 11c17 0 38 -2 51 -14c19 -18 21 -59 27 -84 +c11 -40 64 -210 64 -234zM776 760c-17 0 -33 7 -45 19c-25 25 -26 66 0 91c24 24 37 56 37 90s-13 66 -37 91c-26 25 -25 65 0 90s65 25 90 0c48 -48 75 -113 75 -181s-27 -133 -75 -181c-13 -12 -29 -19 -45 -19zM957 579c-17 0 -33 6 -45 19c-25 25 -25 65 0 90 +c72 73 112 169 112 272s-40 199 -112 272c-25 25 -25 65 0 90s65 25 90 0c97 -97 150 -225 150 -362s-53 -265 -150 -362c-12 -13 -29 -19 -45 -19zM1138 398c-17 0 -33 6 -45 19c-25 25 -25 65 0 90c120 121 187 282 187 453s-67 332 -187 453c-25 25 -25 65 0 90 +s65 25 90 0c145 -145 225 -338 225 -543s-80 -398 -225 -543c-12 -13 -29 -19 -45 -19z" /> + <glyph glyph-name="biometric" unicode="" horiz-adv-x="2304" +d="M1419 640c0 -147 -120 -267 -267 -267s-267 120 -267 267s120 267 267 267s267 -120 267 -267zM0 1222h2304v-521h-769c-29 185 -190 327 -383 327s-354 -142 -383 -327h-769v521zM0 579h769c29 -185 190 -327 383 -327s354 142 383 327h769v-521h-2304v521z" /> + <glyph glyph-name="tasks" unicode="" horiz-adv-x="1792" +d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256c0 -35 -29 -64 -64 -64h-1664c-35 0 -64 29 -64 64v256c0 35 29 64 64 64h1664c35 0 64 -29 64 -64zM1792 832v-256c0 -35 -29 -64 -64 -64h-1664 +c-35 0 -64 29 -64 64v256c0 35 29 64 64 64h1664c35 0 64 -29 64 -64zM1792 1344v-256c0 -35 -29 -64 -64 -64h-1664c-35 0 -64 29 -64 64v256c0 35 29 64 64 64h1664c35 0 64 -29 64 -64z" /> + <glyph glyph-name="firefox" unicode="" horiz-adv-x="1792" +d="M903 -256c-386 0 -693 226 -834 549c-158 359 -32 934 249 1188l-11 -281c14 18 121 23 138 0c58 111 245 194 395 197c-57 -48 -189 -223 -178 -312c73 -23 185 -24 244 -28c18 -10 15 -71 -21 -121c0 0 -47 -65 -174 -88l15 -189l-139 67c-45 -114 63 -215 175 -196 +c124 21 168 102 255 97c86 -5 120 -53 109 -98c0 0 -14 -54 -107 -45c-79 -125 -184 -180 -354 -165c258 -214 606 -20 694 155c88 174 11 433 -77 506c104 -45 176 -91 214 -192c20 224 -83 478 -267 627c346 -101 557 -369 563 -797s-379 -874 -889 -874z" /> + <glyph glyph-name="apple" unicode="" horiz-adv-x="1393" +d="M1393 321c-25 -79 -65 -163 -123 -250c-86 -131 -172 -196 -257 -196c-34 0 -80 11 -140 32c-59 22 -110 32 -151 32c-40 0 -88 -11 -142 -33c-55 -23 -99 -34 -132 -34c-103 0 -202 87 -301 259c-97 172 -147 339 -147 503c0 153 38 277 113 374c75 96 169 144 284 144 +c49 0 107 -10 177 -30c69 -20 115 -30 138 -30c29 0 77 11 143 34c66 22 124 34 173 34c80 0 151 -22 213 -65c35 -24 70 -58 104 -100c-52 -44 -90 -83 -114 -118c-43 -62 -65 -131 -65 -207c0 -82 23 -157 69 -223s99 -108 158 -126zM1017 1494c0 -41 -10 -87 -29 -136 +c-20 -50 -51 -96 -93 -138c-36 -36 -72 -60 -108 -72c-23 -7 -57 -13 -104 -17c2 99 28 185 78 257s134 121 250 148c2 -9 4 -16 5 -22c0 -7 1 -13 1 -20z" /> + <glyph glyph-name="gamepad" unicode="" horiz-adv-x="1920" +d="M832 448v128c0 18 -14 32 -32 32h-192v192c0 18 -14 32 -32 32h-128c-18 0 -32 -14 -32 -32v-192h-192c-18 0 -32 -14 -32 -32v-128c0 -18 14 -32 32 -32h192v-192c0 -18 14 -32 32 -32h128c18 0 32 14 32 32v192h192c18 0 32 14 32 32zM1408 384c0 71 -57 128 -128 128 +s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1664 640c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1920 512c0 -283 -229 -512 -512 -512c-130 0 -248 49 -338 128h-220c-90 -79 -208 -128 -338 -128c-283 0 -512 229 -512 512 +s229 512 512 512h896c283 0 512 -229 512 -512z" /> + <glyph glyph-name="cc-stripe" unicode="" horiz-adv-x="2304" +d="M1597 633c0 -46 -7 -81 -21 -106c-12 -22 -31 -35 -52 -35c-15 0 -29 3 -41 9v224c26 27 49 30 57 30c38 0 57 -42 57 -122zM2035 669h-110c4 67 22 98 56 98s52 -32 54 -98zM476 534c0 84 -51 119 -134 149c-44 16 -68 29 -68 49c0 17 14 26 38 26c46 0 92 -17 124 -33 +l18 112c-25 12 -77 32 -149 32c-51 0 -93 -13 -123 -38c-32 -26 -48 -64 -48 -109c0 -82 50 -118 132 -147c52 -19 70 -32 70 -53c0 -20 -17 -31 -48 -31c-38 0 -101 19 -142 43l-18 -113c35 -20 100 -41 168 -41c54 0 98 13 129 37c34 27 51 66 51 117zM771 749l19 111h-96 +v135l-129 -21l-18 -114l-46 -8l-17 -103h62v-219c0 -57 15 -96 44 -120c25 -20 61 -30 111 -30c39 0 62 7 79 11v118c-9 -2 -30 -7 -44 -7c-29 0 -42 16 -42 50v197h77zM1087 724v139c-10 2 -19 3 -28 3c-42 0 -76 -22 -89 -62l-10 56h-131v-471h150v306c19 23 46 31 82 31 +c8 0 16 0 26 -2zM1124 389h150v471h-150v-471zM1746 638c0 80 -15 141 -45 179c-27 35 -64 52 -111 52c-43 0 -81 -18 -117 -56l-8 47h-132v-645l150 25v151c23 -7 47 -11 68 -11c37 0 92 10 134 56c41 44 61 112 61 202zM1278 986c0 44 -35 79 -79 79s-79 -35 -79 -79 +s35 -80 79 -80s79 36 79 80zM2176 629c0 75 -16 134 -48 176c-33 42 -82 64 -144 64c-128 0 -207 -94 -207 -246c0 -84 21 -148 63 -188c37 -37 91 -55 161 -55c64 0 123 15 160 40l-16 103c-37 -20 -80 -31 -128 -31c-29 0 -49 6 -63 19c-16 13 -25 35 -28 66h248 +c1 7 2 41 2 52zM2304 1280v-1280c0 -70 -58 -128 -128 -128h-2048c-70 0 -128 58 -128 128v1280c0 70 58 128 128 128h2048c70 0 128 -58 128 -128z" /> + <glyph glyph-name="quote-left" unicode="" horiz-adv-x="1664" +d="M768 576v-384c0 -106 -86 -192 -192 -192h-384c-106 0 -192 86 -192 192v704c0 282 230 512 512 512h64c35 0 64 -29 64 -64v-128c0 -35 -29 -64 -64 -64h-64c-141 0 -256 -115 -256 -256v-32c0 -53 43 -96 96 -96h224c106 0 192 -86 192 -192zM1664 576v-384 +c0 -106 -86 -192 -192 -192h-384c-106 0 -192 86 -192 192v704c0 282 230 512 512 512h64c35 0 64 -29 64 -64v-128c0 -35 -29 -64 -64 -64h-64c-141 0 -256 -115 -256 -256v-32c0 -53 43 -96 96 -96h224c106 0 192 -86 192 -192z" /> + <glyph glyph-name="user-times" unicode="" horiz-adv-x="2039" +d="M704 640c-212 0 -384 172 -384 384s172 384 384 384s384 -172 384 -384s-172 -384 -384 -384zM1781 320l249 -249c6 -6 9 -14 9 -23c0 -8 -3 -16 -9 -22l-136 -136c-6 -6 -14 -9 -22 -9c-9 0 -17 3 -23 9l-249 249l-249 -249c-6 -6 -14 -9 -23 -9c-8 0 -16 3 -22 9 +l-136 136c-6 6 -9 14 -9 22c0 9 3 17 9 23l249 249l-249 249c-6 6 -9 14 -9 23c0 8 3 16 9 22l136 136c6 6 14 9 22 9c9 0 17 -3 23 -9l249 -249l249 249c6 6 14 9 23 9c8 0 16 -3 22 -9l136 -136c6 -6 9 -14 9 -22c0 -9 -3 -17 -9 -23zM1283 320l-181 -181 +c-24 -24 -37 -57 -37 -91c0 -33 13 -66 37 -90l83 -83c-14 -2 -29 -3 -44 -3h-874c-160 0 -267 96 -267 259c0 226 53 573 346 573c16 0 27 -7 39 -17c96 -76 194 -122 319 -122s223 46 319 122c12 10 23 17 39 17c19 0 38 -2 57 -6c-33 -32 -54 -58 -54 -106 +c0 -34 13 -67 37 -91z" /> + <glyph glyph-name="plus-square-o" unicode="" horiz-adv-x="1408" +d="M1152 736v-64c0 -18 -14 -32 -32 -32h-352v-352c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v352h-352c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h352v352c0 18 14 32 32 32h64c18 0 32 -14 32 -32v-352h352c18 0 32 -14 32 -32zM1280 288v832c0 88 -72 160 -160 160 +h-832c-88 0 -160 -72 -160 -160v-832c0 -88 72 -160 160 -160h832c88 0 160 72 160 160zM1408 1120v-832c0 -159 -129 -288 -288 -288h-832c-159 0 -288 129 -288 288v832c0 159 129 288 288 288h832c159 0 288 -129 288 -288z" /> + <glyph glyph-name="eye-slash" unicode="" horiz-adv-x="1792" +d="M555 201l78 141c-116 84 -185 219 -185 362c0 79 21 157 61 225c-156 -80 -286 -206 -381 -353c104 -161 251 -296 427 -375zM944 960c0 26 -22 48 -48 48c-167 0 -304 -137 -304 -304c0 -26 22 -48 48 -48s48 22 48 48c0 115 94 208 208 208c26 0 48 22 48 48z +M1307 1151c0 -2 0 -7 -1 -9c-211 -377 -420 -756 -631 -1133l-49 -89c-6 -10 -17 -16 -28 -16c-18 0 -113 58 -134 70c-10 6 -16 16 -16 28c0 16 34 70 44 87c-194 88 -357 238 -472 418c-13 20 -20 44 -20 69c0 24 7 49 20 69c198 304 507 507 876 507c60 0 121 -6 180 -17 +l54 97c6 10 16 16 28 16c18 0 112 -58 133 -70c10 -6 16 -16 16 -27zM1344 704c0 -186 -115 -352 -288 -418l280 502c5 -28 8 -56 8 -84zM1792 576c0 -26 -7 -47 -20 -69c-31 -51 -70 -100 -109 -145c-196 -225 -466 -362 -767 -362l74 132c291 25 538 202 694 444 +c-74 115 -169 216 -282 294l63 112c124 -83 249 -208 327 -337c13 -22 20 -43 20 -69z" /> + <glyph glyph-name="trello" unicode="" +d="M704 192v1024c0 18 -14 32 -32 32h-480c-18 0 -32 -14 -32 -32v-1024c0 -18 14 -32 32 -32h480c18 0 32 14 32 32zM1376 576v640c0 18 -14 32 -32 32h-480c-18 0 -32 -14 -32 -32v-640c0 -18 14 -32 32 -32h480c18 0 32 14 32 32zM1536 1344v-1408c0 -35 -29 -64 -64 -64 +h-1408c-35 0 -64 29 -64 64v1408c0 35 29 64 64 64h1408c35 0 64 -29 64 -64z" /> + <glyph glyph-name="dribbble" unicode="" +d="M1024 36c-10 58 -48 258 -140 498c-1 0 -3 -1 -4 -1c0 0 -389 -136 -515 -410c-6 5 -15 11 -15 11c114 -93 259 -150 418 -150c91 0 177 19 256 52zM839 643c-16 37 -34 74 -53 111c-338 -101 -662 -93 -673 -93c-1 -7 -1 -14 -1 -21c0 -168 64 -322 168 -438 +c179 319 533 433 533 433c9 3 18 5 26 8zM732 855c-114 202 -235 366 -244 378c-183 -86 -319 -255 -362 -458c17 0 291 -3 606 80zM1416 536c-14 4 -197 62 -409 29c86 -237 121 -430 128 -469c147 99 251 257 281 440zM611 1277c-1 0 -1 0 -2 -1c0 0 1 1 2 1zM1201 1132 +c-115 102 -267 164 -433 164c-53 0 -105 -7 -155 -19c10 -13 134 -176 246 -382c247 92 340 234 342 237zM1424 647c-2 155 -57 298 -149 410c-2 -2 -107 -154 -366 -260c15 -31 30 -63 44 -95c5 -11 9 -23 14 -34c226 29 449 -20 457 -21zM1536 640 +c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" /> + <glyph glyph-name="user-secret" unicode="" horiz-adv-x="1408" +d="M576 0l96 448l-96 128l-128 64zM832 0l128 640l-128 -64l-96 -128zM992 1010c-1 2 -2 4 -4 6c-9 7 -81 8 -96 8c-57 0 -111 -8 -167 -19c-7 -2 -14 -2 -21 -2s-14 0 -21 2c-56 11 -110 19 -167 19c-15 0 -87 -1 -96 -8c-2 -2 -3 -4 -4 -6c1 -9 2 -18 4 -27 +c6 -8 11 -5 15 -17c26 -71 38 -126 128 -126c129 0 93 119 135 119h12c42 0 6 -119 135 -119c90 0 102 55 128 126c4 12 9 9 15 17c2 9 3 18 4 27zM1408 131c0 -163 -107 -259 -267 -259h-874c-160 0 -267 96 -267 259c0 181 32 455 218 545l-90 220h214 +c-14 41 -22 84 -22 128c0 11 1 22 2 32c-39 8 -194 40 -194 96c0 59 170 91 210 99c21 75 71 189 122 248c20 23 45 37 76 37c60 0 108 -62 168 -62s108 62 168 62c31 0 56 -14 76 -37c51 -59 101 -173 122 -248c40 -8 210 -40 210 -99c0 -56 -155 -88 -194 -96 +c5 -54 -2 -108 -20 -160h214l-82 -225c179 -93 210 -362 210 -540z" /> + <glyph glyph-name="cloud" unicode="" horiz-adv-x="1920" +d="M1920 384c0 -212 -172 -384 -384 -384h-1088c-247 0 -448 201 -448 448c0 179 106 334 258 405c-1 14 -2 29 -2 43c0 283 229 512 512 512c214 0 397 -131 474 -318c44 39 102 62 166 62c141 0 256 -115 256 -256c0 -51 -15 -98 -41 -138c170 -40 297 -192 297 -374z" /> + <glyph glyph-name="usd" unicode="" horiz-adv-x="932" +d="M932 351c0 -204 -146 -365 -358 -400v-175c0 -18 -14 -32 -32 -32h-135c-17 0 -32 14 -32 32v175c-234 33 -362 173 -367 179c-10 12 -11 29 -2 41l103 135c5 7 14 11 23 12s18 -2 24 -9c2 -1 142 -135 319 -135c98 0 204 52 204 165c0 96 -118 143 -253 197 +c-180 71 -404 161 -404 412c0 184 144 336 353 376v180c0 18 15 32 32 32h135c18 0 32 -14 32 -32v-176c203 -23 311 -133 315 -137c10 -11 12 -26 5 -38l-81 -146c-5 -9 -13 -15 -23 -16c-10 -2 -19 1 -27 7c-1 1 -122 108 -272 108c-127 0 -215 -63 -215 -154 +c0 -106 122 -153 264 -208c184 -71 392 -152 392 -393z" /> + <glyph glyph-name="eye" unicode="" horiz-adv-x="1792" +d="M1664 576c-95 147 -225 273 -381 353c40 -68 61 -146 61 -225c0 -247 -201 -448 -448 -448s-448 201 -448 448c0 79 21 157 61 225c-156 -80 -286 -206 -381 -353c171 -264 447 -448 768 -448s597 184 768 448zM944 960c0 26 -22 48 -48 48c-167 0 -304 -137 -304 -304 +c0 -26 22 -48 48 -48s48 22 48 48c0 114 94 208 208 208c26 0 48 22 48 48zM1792 576c0 -25 -8 -48 -20 -69c-184 -303 -521 -507 -876 -507s-692 205 -876 507c-12 21 -20 44 -20 69s8 48 20 69c184 302 521 507 876 507s692 -205 876 -507c12 -21 20 -44 20 -69z" /> + <glyph glyph-name="usb" unicode="" horiz-adv-x="2304" +d="M2288 731c10 -5 16 -16 16 -27s-6 -22 -16 -27l-320 -192c-5 -3 -10 -5 -16 -5c-5 0 -11 1 -16 4c-10 6 -16 16 -16 28v128h-858c32 -50 59 -109 83 -165c48 -108 97 -219 167 -219h96v96c0 18 14 32 32 32h320c18 0 32 -14 32 -32v-320c0 -18 -14 -32 -32 -32h-320 +c-18 0 -32 14 -32 32v96h-96c-153 0 -222 157 -284 295c-47 107 -96 217 -164 217h-360c-29 -110 -129 -192 -248 -192c-141 0 -256 115 -256 256s115 256 256 256c119 0 219 -82 248 -192h104c68 0 117 110 164 217c62 138 131 295 284 295h107c27 75 97 128 181 128 +c106 0 192 -86 192 -192s-86 -192 -192 -192c-84 0 -154 53 -181 128h-107c-70 0 -119 -111 -167 -219c-24 -56 -51 -115 -83 -165h1114v128c0 12 6 22 16 28s23 5 32 -1z" /> + <glyph glyph-name="certificate" unicode="" +d="M1376 640l138 -135c19 -18 26 -45 20 -70c-7 -25 -27 -45 -52 -51l-188 -48l53 -186c7 -25 0 -52 -19 -70c-18 -19 -45 -26 -70 -19l-186 53l-48 -188c-6 -25 -26 -45 -51 -52c-6 -1 -13 -2 -19 -2c-19 0 -38 8 -51 22l-135 138l-135 -138c-18 -19 -45 -26 -70 -20 +c-26 7 -45 27 -51 52l-48 188l-186 -53c-25 -7 -52 0 -70 19c-19 18 -26 45 -19 70l53 186l-188 48c-25 6 -45 26 -52 51c-6 25 1 52 20 70l138 135l-138 135c-19 18 -26 45 -20 70c7 25 27 45 52 51l188 48l-53 186c-7 25 0 52 19 70c18 19 45 26 70 19l186 -53l48 188 +c6 25 26 45 51 51c25 7 52 0 70 -19l135 -139l135 139c18 19 44 26 70 19c25 -6 45 -26 51 -51l48 -188l186 53c25 7 52 0 70 -19c19 -18 26 -45 19 -70l-53 -186l188 -48c25 -6 45 -26 52 -51c6 -25 -1 -52 -20 -70z" /> + <glyph glyph-name="500px" unicode="" horiz-adv-x="1394" +d="M1387 -11l-6 -6c-75 -75 -162 -134 -259 -175c-101 -42 -207 -64 -317 -64s-217 22 -317 64c-97 41 -185 100 -259 175c-75 74 -134 161 -175 258c-25 61 -45 124 -54 189c-4 28 35 34 48 36c31 5 52 3 56 -20c1 -1 1 -2 1 -4c4 -20 14 -80 46 -159 +c33 -82 84 -158 152 -226c65 -65 141 -116 226 -152c87 -37 180 -56 276 -56c95 0 188 19 276 56c84 36 160 87 225 152l6 6c7 7 15 9 25 6c9 -2 20 -10 33 -22c32 -33 25 -49 17 -58zM915 604l-66 -66l63 -63c7 -7 20 -22 -7 -49c-11 -11 -22 -17 -32 -17 +c-7 0 -13 3 -19 10l-62 61l-66 -66c-2 -2 -7 -5 -15 -5c-9 0 -20 5 -31 16l-2 2c-7 6 -18 17 -18 29c0 6 3 11 8 17l66 65l-66 66c-11 11 -6 25 14 45c12 12 22 18 31 18c5 0 9 -2 13 -5l65 -66l65 65c11 11 29 6 48 -13c12 -12 25 -29 11 -44zM1386 547 +c0 -79 -16 -156 -46 -228c-30 -70 -72 -132 -126 -186s-117 -96 -187 -126c-72 -31 -149 -46 -228 -46s-156 15 -228 46c-70 30 -133 72 -187 126s-96 116 -125 186c-6 13 -15 38 -15 40h-1c-9 28 31 40 43 44c29 9 51 13 60 -12c24 -64 61 -126 97 -167h1v341 +c2 84 37 169 102 232c67 66 157 103 253 103c196 0 355 -158 355 -352c0 -196 -160 -355 -355 -355c-39 0 -68 3 -112 16c-5 2 -28 12 -13 61c4 13 16 51 44 43c2 0 51 -12 77 -12c139 0 248 108 248 246c0 65 -26 126 -72 171c-46 46 -108 71 -175 71 +c-69 0 -132 -28 -178 -80c-40 -45 -64 -105 -64 -160v-413c72 -44 155 -67 242 -67c128 0 252 51 341 140c90 90 140 211 140 338c0 128 -50 248 -141 339c-90 90 -210 140 -339 140s-250 -50 -340 -140c-1 -1 -58 -60 -77 -87l-2 -2c-12 -17 -23 -33 -73 -22 +c-25 6 -52 21 -52 43v680c0 18 14 38 38 38h877c30 0 30 -42 30 -55c0 -14 0 -55 -30 -55h-811v-483h1c56 59 153 121 210 145c71 30 151 46 231 46c79 0 156 -15 228 -46c70 -30 133 -72 187 -126s96 -116 126 -186c30 -73 46 -149 46 -229zM1355 1128 +c19 -17 6 -35 -13 -57c-12 -12 -25 -26 -39 -26c-6 0 -11 2 -16 7c-72 62 -137 104 -207 133c-87 38 -180 56 -276 56c-85 0 -178 -17 -262 -49c-26 -10 -40 24 -45 37c-6 16 -9 29 -8 38c2 10 7 17 16 20c82 36 194 57 299 57c109 0 216 -22 316 -64 +c92 -39 167 -87 235 -152z" /> + <glyph glyph-name="liberapay-square" unicode="" horiz-adv-x="1533" +d="M148 1404h1236c82 0 149 -66 149 -148v-1236c0 -82 -67 -148 -149 -148h-1236c-82 0 -148 66 -148 148v1236c0 82 66 148 148 148zM736 1150v0l-161 -25l-133 -553c-8 -33 -12 -64 -12 -93s6 -54 18 -76s32 -40 60 -53s68 -19 117 -19l31 128c-18 1 -32 4 -42 9 +s-18 12 -22 20s-5 17 -5 27s1 23 4 35zM985 902v0c-42 0 -80 -3 -116 -10s-67 -14 -95 -22l-174 -722h155l47 189c24 -4 47 -6 71 -6c49 0 94 8 135 25s76 41 106 72s52 67 69 109s25 88 25 139c0 31 -4 61 -13 88s-22 51 -40 72c-18 20 -41 36 -69 48s-62 18 -101 18z +M965 772v0c33 0 56 -11 69 -32s20 -46 20 -76c0 -31 -4 -59 -13 -84s-21 -47 -37 -65s-34 -32 -56 -42s-47 -15 -74 -15c-17 0 -32 1 -44 4l73 303c19 4 40 7 62 7z" /> + <glyph glyph-name="foursquare" unicode="" horiz-adv-x="1192" +d="M956 1102l37 194c7 32 -17 57 -44 57h-712c-32 0 -54 -29 -54 -54v-1101c0 -3 3 -4 6 -1c262 315 291 352 291 352c30 35 42 41 86 41h239c33 0 52 28 55 44s31 162 37 191s-21 59 -48 59h-294c-39 0 -67 28 -67 67v42c0 39 28 66 67 66h346c24 0 51 22 55 43zM1183 1324 +c-37 -180 -148 -749 -158 -790c-12 -47 -30 -129 -144 -129h-271c-11 0 -12 1 -22 -10c0 0 -7 -8 -426 -494c-33 -38 -87 -31 -107 -23s-55 32 -55 98v1410c0 58 36 150 158 150h888c130 0 165 -74 137 -212zM1183 1324l-158 -790c10 41 121 610 158 790z" /> + <glyph glyph-name="music" unicode="" +d="M1536 1312v-1120c0 -141 -211 -192 -320 -192s-320 51 -320 192s211 192 320 192c66 0 132 -12 192 -39v537l-768 -237v-709c0 -141 -211 -192 -320 -192s-320 51 -320 192s211 192 320 192c66 0 132 -12 192 -39v967c0 42 28 79 68 92l832 256c9 3 18 4 28 4 +c53 0 96 -43 96 -96z" /> + <glyph glyph-name="wpexplorer" unicode="" horiz-adv-x="1792" +d="M948 508l163 -329h-51l-175 350l-171 -350h-49l179 374l-78 33l21 49l240 -102l-21 -50zM563 1100l304 -130l-130 -304l-304 130zM907 915l240 -103l-103 -239l-239 102zM1188 765l191 -81l-82 -190l-190 81zM1680 640c0 432 -352 784 -784 784s-784 -352 -784 -784 +s352 -784 784 -784s784 352 784 784zM1792 640c0 -494 -402 -896 -896 -896s-896 402 -896 896s402 896 896 896s896 -402 896 -896z" /> + <glyph glyph-name="gg-circle" unicode="" horiz-adv-x="1792" +d="M717 182l271 271l-279 279l-88 -88l192 -191l-96 -96l-279 279l279 279l40 -40l87 87l-127 128l-454 -454zM1075 190l454 454l-454 454l-271 -271l279 -279l88 88l-192 191l96 96l279 -279l-279 -279l-40 40l-87 -88zM1792 640c0 -495 -401 -896 -896 -896 +s-896 401 -896 896s401 896 896 896s896 -401 896 -896z" /> + <glyph glyph-name="sort" unicode="" horiz-adv-x="1024" +d="M1024 448c0 -17 -7 -33 -19 -45l-448 -448c-12 -12 -28 -19 -45 -19s-33 7 -45 19l-448 448c-12 12 -19 28 -19 45c0 35 29 64 64 64h896c35 0 64 -29 64 -64zM1024 832c0 -35 -29 -64 -64 -64h-896c-35 0 -64 29 -64 64c0 17 7 33 19 45l448 448c12 12 28 19 45 19 +s33 -7 45 -19l448 -448c12 -12 19 -28 19 -45z" /> + <glyph glyph-name="pencil" unicode="" horiz-adv-x="1515" +d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928c0 13 -9 22 -22 22c-6 0 -12 -2 -17 -7l-542 -542c-5 -5 -7 -11 -7 -17c0 -13 9 -22 22 -22c6 0 12 2 17 7l542 542c5 5 7 11 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024c0 -34 -14 -67 -37 -90 +l-166 -166l-416 416l166 165c23 24 56 38 90 38s67 -14 91 -38l235 -234c23 -24 37 -57 37 -91z" /> + <glyph glyph-name="bookmark-o" unicode="" horiz-adv-x="1280" +d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408c15 0 30 -3 44 -9c44 -17 72 -58 72 -103v-1289c0 -45 -28 -86 -72 -103c-14 -6 -29 -8 -44 -8c-31 0 -60 11 -83 32l-441 424l-441 -424c-23 -21 -52 -33 -83 -33c-15 0 -30 3 -44 9 +c-44 17 -72 58 -72 103v1289c0 45 28 86 72 103c14 6 29 9 44 9h1048z" /> + <glyph glyph-name="diamond" unicode="" horiz-adv-x="2048" +d="M212 768l623 -665l-300 665h-323zM1024 -4l349 772h-698zM538 896l204 384h-262l-288 -384h346zM1213 103l623 665h-323zM683 896h682l-204 384h-274zM1510 896h346l-288 384h-262zM1651 1382l384 -512c19 -24 17 -59 -4 -82l-960 -1024c-12 -13 -29 -20 -47 -20 +s-35 7 -47 20l-960 1024c-21 23 -23 58 -4 82l384 512c12 17 31 26 51 26h1152c20 0 39 -9 51 -26z" /> + <glyph glyph-name="share" unicode="" horiz-adv-x="1792" +d="M1792 896c0 -17 -7 -33 -19 -45l-512 -512c-12 -12 -28 -19 -45 -19c-35 0 -64 29 -64 64v256h-224c-431 0 -714 -83 -714 -560c0 -41 2 -82 5 -123c1 -16 5 -34 5 -50c0 -19 -12 -35 -32 -35c-14 0 -21 7 -28 17c-15 21 -26 53 -37 76c-57 128 -127 311 -127 451 +c0 112 11 227 53 333c139 345 547 403 875 403h224v256c0 35 29 64 64 64c17 0 33 -7 45 -19l512 -512c12 -12 19 -28 19 -45z" /> + <glyph glyph-name="envelope" unicode="" horiz-adv-x="1792" +d="M1792 826v-794c0 -88 -72 -160 -160 -160h-1472c-88 0 -160 72 -160 160v794c30 -33 64 -62 101 -87c166 -113 334 -226 497 -345c84 -62 188 -138 297 -138h2c109 0 213 76 297 138c163 118 331 232 498 345c36 25 70 54 100 87zM1792 1120c0 -112 -83 -213 -171 -274 +c-156 -108 -313 -216 -468 -325c-65 -45 -175 -137 -256 -137h-2c-81 0 -191 92 -256 137c-155 109 -312 217 -467 325c-71 48 -172 161 -172 252c0 98 53 182 160 182h1472c87 0 160 -72 160 -160z" /> + <glyph glyph-name="yahoo" unicode="" horiz-adv-x="1318" +d="M750 579l13 -707c-34 6 -69 11 -105 11c-35 0 -70 -5 -105 -11l13 707c-186 321 -361 648 -566 957c35 -9 71 -15 108 -15s75 7 111 15c140 -248 292 -489 439 -733c148 242 305 483 439 733c35 -9 71 -14 107 -14c38 0 77 5 114 14c-80 -110 -146 -230 -215 -347 +c-119 -203 -236 -406 -353 -610z" /> + <glyph glyph-name="window-restore" unicode="" horiz-adv-x="2048" +d="M256 0h768v512h-768v-512zM1280 512h512v768h-768v-256h96c88 0 160 -72 160 -160v-352zM2048 1376v-960c0 -88 -72 -160 -160 -160h-608v-352c0 -88 -72 -160 -160 -160h-960c-88 0 -160 72 -160 160v960c0 88 72 160 160 160h608v352c0 88 72 160 160 160h960 +c88 0 160 -72 160 -160z" /> + <glyph glyph-name="glass" unicode="" horiz-adv-x="1606" +d="M1606 1350c0 -29 -23 -58 -43 -78l-632 -632v-768h320c35 0 64 -29 64 -64s-29 -64 -64 -64h-896c-35 0 -64 29 -64 64s29 64 64 64h320v768l-632 632c-20 20 -43 49 -43 78c0 49 62 58 99 58h1408c37 0 99 -9 99 -58z" /> + <glyph glyph-name="flag" unicode="" horiz-adv-x="1728" +d="M256 1280c0 -46 -25 -87 -64 -110v-1266c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v1266c-39 23 -64 64 -64 110c0 71 57 128 128 128s128 -57 128 -128zM1728 1216v-763c0 -37 -23 -51 -52 -66c-113 -61 -238 -116 -369 -116c-184 0 -272 140 -490 140 +c-159 0 -326 -72 -464 -146c-11 -6 -21 -9 -33 -9c-35 0 -64 29 -64 64v742c0 24 12 41 31 55c24 16 53 30 79 43c126 64 279 120 421 120c157 0 280 -52 419 -117c28 -14 57 -19 88 -19c157 0 326 136 370 136c35 0 64 -29 64 -64z" /> + <glyph glyph-name="train" unicode="" +d="M1088 1536c247 0 448 -143 448 -320v-896c0 -173 -191 -313 -431 -319l213 -202c21 -20 7 -55 -22 -55h-1056c-29 0 -43 35 -22 55l213 202c-240 6 -431 146 -431 319v896c0 177 201 320 448 320h640zM768 192c106 0 192 86 192 192s-86 192 -192 192s-192 -86 -192 -192 +s86 -192 192 -192zM1344 768v512h-1152v-512h1152z" /> + <glyph glyph-name="bullhorn" unicode="" horiz-adv-x="1792" +d="M1664 896c71 0 128 -57 128 -128s-57 -128 -128 -128v-384c0 -70 -58 -128 -128 -128c-178 148 -465 351 -812 380c-119 -40 -160 -179 -82 -259c-70 -115 20 -196 126 -279c-62 -122 -320 -124 -412 -39c-58 178 -144 356 -74 581h-122c-88 0 -160 72 -160 160v192 +c0 88 72 160 160 160h480c384 0 704 224 896 384c70 0 128 -58 128 -128v-384zM1536 292v954c-261 -200 -514 -315 -768 -343v-270c254 -28 507 -141 768 -341z" /> + <glyph glyph-name="pause-circle-o" unicode="" +d="M768 1408c424 0 768 -344 768 -768s-344 -768 -768 -768s-768 344 -768 768s344 768 768 768zM768 96c300 0 544 244 544 544s-244 544 -544 544s-544 -244 -544 -544s244 -544 544 -544zM864 320c-18 0 -32 14 -32 32v576c0 18 14 32 32 32h192c18 0 32 -14 32 -32v-576 +c0 -18 -14 -32 -32 -32h-192zM480 320c-18 0 -32 14 -32 32v576c0 18 14 32 32 32h192c18 0 32 -14 32 -32v-576c0 -18 -14 -32 -32 -32h-192z" /> + <glyph glyph-name="snapchat-ghost" unicode="" horiz-adv-x="1634" +d="M833 1408c180 2 329 -99 404 -261c23 -49 27 -125 27 -179c0 -64 -5 -127 -9 -191c8 -4 19 -7 28 -7c36 0 66 27 102 27c34 0 83 -24 83 -64c0 -96 -201 -78 -201 -162c0 -15 6 -29 12 -43c48 -105 139 -206 247 -251c26 -11 52 -17 80 -23c18 -4 28 -17 28 -35 +c0 -68 -173 -96 -219 -103c-20 -31 -5 -104 -58 -104c-41 0 -82 13 -126 13c-21 0 -42 -1 -62 -5c-119 -20 -159 -148 -354 -148c-188 0 -233 128 -349 148c-21 4 -42 5 -63 5c-45 0 -88 -15 -124 -15c-56 0 -39 74 -60 106c-46 7 -219 35 -219 103c0 18 10 31 28 35 +c28 6 54 12 80 23c107 44 200 146 247 251c6 14 12 28 12 43c0 84 -202 68 -202 161c0 39 46 64 81 64c31 0 62 -26 101 -26c11 0 22 2 32 7c-4 63 -9 126 -9 190c0 54 4 131 27 180c88 190 237 259 436 261z" /> + <glyph glyph-name="folder" unicode="" horiz-adv-x="1664" +d="M1664 928v-704c0 -123 -101 -224 -224 -224h-1216c-123 0 -224 101 -224 224v960c0 123 101 224 224 224h320c123 0 224 -101 224 -224v-32h672c123 0 224 -101 224 -224z" /> + <glyph glyph-name="outdent" unicode="" horiz-adv-x="1792" +d="M384 992v-576c0 -17 -15 -32 -32 -32c-8 0 -17 3 -23 9l-288 288c-6 6 -9 15 -9 23s3 17 9 23l288 288c6 6 15 9 23 9c17 0 32 -15 32 -32zM1792 224v-192c0 -17 -15 -32 -32 -32h-1728c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1728c17 0 32 -15 32 -32zM1792 608 +v-192c0 -17 -15 -32 -32 -32h-1088c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1088c17 0 32 -15 32 -32zM1792 992v-192c0 -17 -15 -32 -32 -32h-1088c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1088c17 0 32 -15 32 -32zM1792 1376v-192c0 -17 -15 -32 -32 -32h-1728 +c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1728c17 0 32 -15 32 -32z" /> + <glyph glyph-name="stumbleupon" unicode="" horiz-adv-x="1920" +d="M1062 824v118c0 56 -46 102 -102 102s-102 -46 -102 -102v-612c0 -234 -194 -423 -429 -423c-237 0 -429 192 -429 429v266h328v-262c0 -57 46 -102 102 -102s102 45 102 102v620c0 229 196 413 428 413c233 0 428 -185 428 -416v-136l-195 -58zM1592 602h328v-266 +c0 -237 -192 -429 -429 -429c-236 0 -429 190 -429 425v268l131 -61l195 58v-270c0 -56 46 -101 102 -101s102 45 102 101v275z" /> + <glyph glyph-name="address-card" unicode="" horiz-adv-x="2048" +d="M1024 405c0 155 -38 327 -196 327c-49 -28 -115 -76 -188 -76s-139 48 -188 76c-158 0 -196 -172 -196 -327c0 -87 57 -149 128 -149h512c71 0 128 62 128 149zM867 925c0 125 -102 227 -227 227s-227 -102 -227 -227c0 -126 102 -227 227 -227s227 101 227 227z +M1792 416v64c0 18 -14 32 -32 32h-576c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h576c18 0 32 14 32 32zM1792 676v56c0 20 -16 36 -36 36h-568c-20 0 -36 -16 -36 -36v-56c0 -20 16 -36 36 -36h568c20 0 36 16 36 36zM1792 928v64c0 18 -14 32 -32 32h-576 +c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h576c18 0 32 14 32 32zM2048 1248v-1216c0 -88 -72 -160 -160 -160h-352v96c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-96h-768v96c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-96h-352c-88 0 -160 72 -160 160 +v1216c0 88 72 160 160 160h1728c88 0 160 -72 160 -160z" /> + <glyph glyph-name="i-cursor" unicode="" horiz-adv-x="896" +d="M832 1408c-212 0 -320 -75 -320 -224v-416h128v-128h-128v-544c0 -149 108 -224 320 -224h64v-128h-64c-180 0 -312 52 -384 146c-72 -94 -204 -146 -384 -146h-64v128h64c212 0 320 75 320 224v544h-128v128h128v416c0 149 -108 224 -320 224h-64v128h64 +c180 0 312 -52 384 -146c72 94 204 146 384 146h64v-128h-64z" /> + <glyph glyph-name="car" unicode="" horiz-adv-x="2048" +d="M480 448c0 88 -72 160 -160 160s-160 -72 -160 -160s72 -160 160 -160s160 72 160 160zM516 768h1016l-89 357c-3 11 -23 27 -35 27h-768c-12 0 -32 -16 -35 -27zM1888 448c0 88 -72 160 -160 160s-160 -72 -160 -160s72 -160 160 -160s160 72 160 160zM2048 544v-384 +c0 -18 -14 -32 -32 -32h-96v-128c0 -106 -86 -192 -192 -192s-192 86 -192 192v128h-1024v-128c0 -106 -86 -192 -192 -192s-192 86 -192 192v128h-96c-18 0 -32 14 -32 32v384c0 124 100 224 224 224h28l105 419c31 126 153 221 283 221h768c130 0 252 -95 283 -221 +l105 -419h28c124 0 224 -100 224 -224z" /> + <glyph glyph-name="file-excel-o" unicode="" +d="M1468 1156c37 -37 68 -111 68 -164v-1152c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h896c53 0 127 -31 164 -68zM1024 1400v-376h376c-6 17 -15 34 -22 41l-313 313c-7 7 -24 16 -41 22zM1408 -128v1024h-416c-53 0 -96 43 -96 96v416 +h-768v-1536h1280zM429 106h68l194 283l-189 272h-68v107h290v-107h-76l106 -159c8 -9 13 -16 17 -23c2 -3 4 -6 5 -10h2c0 -1 9 14 21 33l103 159h-74v107h279v-107h-67l-195 -282l192 -273h68v-106h-291v106h76l-107 161c-7 10 -13 16 -17 24c-2 3 -4 6 -5 10h-2 +c-3 0 -9 -15 -21 -34l-103 -161h75v-106h-281v106z" /> + <glyph glyph-name="arrow-circle-o-left" unicode="" +d="M1152 736v-192c0 -17 -15 -32 -32 -32h-352v-192c0 -18 -14 -32 -32 -32c-9 0 -17 4 -24 10l-319 319c-6 6 -9 15 -9 23s3 17 9 23l320 320c6 6 15 9 23 9c17 0 32 -15 32 -32v-192h352c17 0 32 -15 32 -32zM1312 640c0 300 -244 544 -544 544s-544 -244 -544 -544 +s244 -544 544 -544s544 244 544 544zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" /> + <glyph glyph-name="paragraph" unicode="" horiz-adv-x="1254" +d="M1254 1347v-73c0 -34 -27 -93 -61 -93c-17 0 -37 3 -54 -1c-16 -4 -28 -15 -32 -31c-5 -19 -3 -43 -3 -64v-1152c0 -34 -27 -61 -61 -61h-108c-34 0 -61 27 -61 61v1218h-143v-1218c0 -34 -27 -61 -61 -61h-108c-34 0 -61 27 -61 61v496c-97 8 -180 28 -245 59 +c-84 39 -148 99 -192 179c-42 77 -64 164 -64 259c0 111 30 207 88 286c59 79 129 132 209 159c75 25 233 37 417 37h479c34 0 61 -27 61 -61z" /> + <glyph glyph-name="y-combinator" unicode="" +d="M809 532l266 499h-112l-157 -312s-24 -48 -44 -92c-19 46 -42 92 -42 92l-155 312h-120l263 -493v-324h101v318zM1536 1408v-1536h-1536v1536h1536z" /> + <glyph glyph-name="male" unicode="" horiz-adv-x="1024" +d="M1024 832v-416c0 -53 -43 -96 -96 -96s-96 43 -96 96v352h-64v-912c0 -62 -50 -112 -112 -112s-112 50 -112 112v464h-64v-464c0 -62 -50 -112 -112 -112s-112 50 -112 112v912h-64v-352c0 -53 -43 -96 -96 -96s-96 43 -96 96v416c0 106 86 192 192 192h640 +c106 0 192 -86 192 -192zM736 1280c0 -124 -100 -224 -224 -224s-224 100 -224 224s100 224 224 224s224 -100 224 -224z" /> + <glyph glyph-name="history" unicode="" +d="M1536 640c0 -423 -345 -768 -768 -768c-229 0 -445 101 -591 277c-10 13 -9 32 2 43l137 138c7 6 16 9 25 9c9 -1 18 -5 23 -12c98 -127 245 -199 404 -199c282 0 512 230 512 512s-230 512 -512 512c-131 0 -255 -50 -348 -137l137 -138c19 -18 24 -46 14 -69 +c-10 -24 -33 -40 -59 -40h-448c-35 0 -64 29 -64 64v448c0 26 16 49 40 59c23 10 51 5 69 -14l130 -129c141 133 332 212 529 212c423 0 768 -345 768 -768zM896 928v-448c0 -18 -14 -32 -32 -32h-320c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h224v352c0 18 14 32 32 32h64 +c18 0 32 -14 32 -32z" /> + <glyph glyph-name="h-square" unicode="" +d="M1280 192v896c0 35 -29 64 -64 64h-128c-35 0 -64 -29 -64 -64v-320h-512v320c0 35 -29 64 -64 64h-128c-35 0 -64 -29 -64 -64v-896c0 -35 29 -64 64 -64h128c35 0 64 29 64 64v320h512v-320c0 -35 29 -64 64 -64h128c35 0 64 29 64 64zM1536 1120v-960 +c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" /> + <glyph glyph-name="heart" unicode="" horiz-adv-x="1792" +d="M896 -128c-16 0 -32 6 -44 18l-624 602c-8 7 -228 208 -228 448c0 293 179 468 478 468c175 0 339 -138 418 -216c79 78 243 216 418 216c299 0 478 -175 478 -468c0 -240 -220 -441 -229 -450l-623 -600c-12 -12 -28 -18 -44 -18z" /> + <glyph glyph-name="sort-amount-desc" unicode="" horiz-adv-x="1760" +d="M1184 -32v-192c0 -18 -14 -32 -32 -32h-256c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h256c18 0 32 -14 32 -32zM704 96c0 -9 -4 -17 -10 -24l-319 -319c-7 -6 -15 -9 -23 -9s-16 3 -23 9l-320 320c-9 10 -12 23 -7 35s17 20 30 20h192v1376c0 18 14 32 32 32h192 +c18 0 32 -14 32 -32v-1376h192c18 0 32 -14 32 -32zM1376 480v-192c0 -18 -14 -32 -32 -32h-448c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h448c18 0 32 -14 32 -32zM1568 992v-192c0 -18 -14 -32 -32 -32h-640c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h640 +c18 0 32 -14 32 -32zM1760 1504v-192c0 -18 -14 -32 -32 -32h-832c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h832c18 0 32 -14 32 -32z" /> + <glyph glyph-name="search-plus" unicode="" horiz-adv-x="1664" +d="M1024 736v-64c0 -17 -15 -32 -32 -32h-224v-224c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v224h-224c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h224v224c0 17 15 32 32 32h64c17 0 32 -15 32 -32v-224h224c17 0 32 -15 32 -32zM1152 704c0 247 -201 448 -448 448 +s-448 -201 -448 -448s201 -448 448 -448s448 201 448 448zM1664 -128c0 -71 -57 -128 -128 -128c-34 0 -67 14 -90 38l-343 342c-117 -81 -257 -124 -399 -124c-389 0 -704 315 -704 704s315 704 704 704s704 -315 704 -704c0 -142 -43 -282 -124 -399l343 -343 +c23 -23 37 -56 37 -90z" /> + <glyph glyph-name="life-ring" unicode="" horiz-adv-x="1792" +d="M896 1536c495 0 896 -401 896 -896s-401 -896 -896 -896s-896 401 -896 896s401 896 896 896zM896 1408c-130 0 -253 -33 -361 -90l194 -194c53 18 109 28 167 28c59 0 114 -10 167 -28l194 194c-108 57 -231 90 -361 90zM218 279l194 194c-18 53 -28 109 -28 167 +c0 59 10 114 28 167l-194 194c-57 -108 -90 -231 -90 -361s33 -253 90 -361zM896 -128c130 0 253 33 361 90l-194 194c-53 -18 -108 -28 -167 -28c-58 0 -114 10 -167 28l-194 -194c108 -57 231 -90 361 -90zM896 256c212 0 384 172 384 384s-172 384 -384 384 +s-384 -172 -384 -384s172 -384 384 -384zM1380 473l194 -194c57 108 90 231 90 361s-33 253 -90 361l-194 -194c18 -53 28 -109 28 -167s-10 -114 -28 -167z" /> + <glyph glyph-name="lock" unicode="" horiz-adv-x="1152" +d="M320 768h512v192c0 141 -115 256 -256 256s-256 -115 -256 -256v-192zM1152 672v-576c0 -53 -43 -96 -96 -96h-960c-53 0 -96 43 -96 96v576c0 53 43 96 96 96h32v192c0 246 202 448 448 448s448 -202 448 -448v-192h32c53 0 96 -43 96 -96z" /> + <glyph glyph-name="git-square" unicode="" +d="M582 228c0 -54 -49 -66 -93 -66c-43 0 -107 7 -107 63c0 55 54 64 98 64c42 0 102 -7 102 -61zM546 694c0 -50 -20 -85 -74 -85c-55 0 -77 32 -77 84s20 90 77 90c51 0 74 -42 74 -89zM712 769v125c-43 -16 -89 -29 -135 -29c-33 19 -71 29 -110 29 +c-114 0 -204 -84 -204 -200c0 -62 41 -148 103 -169v-3c-32 -14 -38 -53 -38 -85c0 -33 12 -60 41 -77v-3c-68 -22 -113 -65 -113 -139c0 -127 121 -163 227 -163c128 0 224 47 224 188c0 100 -91 130 -174 145c-28 5 -76 25 -76 60c0 33 18 47 49 52c102 20 167 99 167 204 +c0 18 -4 35 -10 52c16 4 33 8 49 13zM771 350h137c-2 27 -2 55 -2 82v387c0 23 0 46 2 69h-137c3 -23 3 -48 3 -71v-392c0 -25 0 -50 -3 -75zM1280 366v121c-20 -14 -44 -21 -68 -21c-45 0 -53 45 -53 82v225h52c18 0 35 -2 53 -2v117h-105c0 34 -2 68 3 102h-140 +c3 -18 4 -36 4 -55v-47h-60v-117c12 1 24 3 37 3c7 0 15 -1 23 -1v-2h-2v-217c0 -108 16 -212 148 -212c37 0 75 6 108 24zM924 1072c0 47 -35 91 -84 91s-85 -43 -85 -91c0 -47 37 -89 85 -89s84 43 84 89zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960 +c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" /> + <glyph glyph-name="mouse-pointer" unicode="" horiz-adv-x="1152" +d="M1133 493c19 -18 24 -46 14 -69c-10 -24 -33 -40 -59 -40h-382l201 -476c14 -33 -2 -70 -34 -84l-177 -75c-33 -14 -70 2 -84 34l-191 452l-312 -312c-12 -12 -28 -19 -45 -19c-8 0 -17 2 -24 5c-24 10 -40 33 -40 59v1504c0 26 16 49 40 59c7 3 16 5 24 5 +c17 0 33 -6 45 -19z" /> + <glyph glyph-name="sign-in" unicode="" +d="M1184 640c0 -17 -7 -33 -19 -45l-544 -544c-12 -12 -28 -19 -45 -19c-35 0 -64 29 -64 64v288h-448c-35 0 -64 29 -64 64v384c0 35 29 64 64 64h448v288c0 35 29 64 64 64c17 0 33 -7 45 -19l544 -544c12 -12 19 -28 19 -45zM1536 992v-704c0 -159 -129 -288 -288 -288 +h-320c-17 0 -32 15 -32 32c0 28 -13 96 32 96h320c88 0 160 72 160 160v704c0 88 -72 160 -160 160h-288c-25 0 -64 -5 -64 32c0 28 -13 96 32 96h320c159 0 288 -129 288 -288z" /> + <glyph glyph-name="odnoklassniki-square" unicode="" +d="M927 956c0 -88 -71 -159 -159 -159s-159 71 -159 159s71 159 159 159s159 -71 159 -159zM1141 593c-18 36 -69 67 -136 14c0 0 -91 -72 -237 -72s-237 72 -237 72c-67 53 -118 22 -136 -14c-32 -64 4 -95 85 -148c69 -44 165 -61 226 -67l-51 -52 +c-72 -72 -142 -142 -191 -190c-29 -29 -29 -76 0 -105l9 -9c29 -29 76 -29 105 0l191 191c72 -73 142 -143 191 -191c29 -29 76 -29 105 0l9 9c29 29 29 76 0 105l-191 190l-52 52c62 6 156 23 225 67c81 53 117 84 85 148zM1092 956c0 179 -145 324 -324 324 +s-324 -145 -324 -324s145 -324 324 -324s324 145 324 324zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" /> + <glyph glyph-name="tag" unicode="" horiz-adv-x="1515" +d="M448 1088c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1515 512c0 -34 -14 -67 -37 -90l-491 -492c-24 -23 -57 -37 -91 -37s-67 14 -90 37l-715 716c-51 50 -91 147 -91 218v416c0 70 58 128 128 128h416c71 0 168 -40 219 -91 +l715 -714c23 -24 37 -57 37 -91z" /> + <glyph glyph-name="align-justify" unicode="" horiz-adv-x="1792" +d="M1792 192v-128c0 -35 -29 -64 -64 -64h-1664c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1664c35 0 64 -29 64 -64zM1792 576v-128c0 -35 -29 -64 -64 -64h-1664c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1664c35 0 64 -29 64 -64zM1792 960v-128 +c0 -35 -29 -64 -64 -64h-1664c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1664c35 0 64 -29 64 -64zM1792 1344v-128c0 -35 -29 -64 -64 -64h-1664c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1664c35 0 64 -29 64 -64z" /> + <glyph glyph-name="hospital-o" unicode="" horiz-adv-x="1408" +d="M384 224v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM384 480v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM640 480v-64c0 -17 -15 -32 -32 -32h-64 +c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM384 736v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM1152 224v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64 +c17 0 32 -15 32 -32zM896 480v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM640 736v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM1152 480v-64 +c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM896 736v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM1152 736v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64 +c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM896 -128h384v1152h-256v-32c0 -53 -43 -96 -96 -96h-448c-53 0 -96 43 -96 96v32h-256v-1152h384v224c0 17 15 32 32 32h320c17 0 32 -15 32 -32v-224zM896 1056v320c0 17 -15 32 -32 32h-64c-17 0 -32 -15 -32 -32v-96h-128v96 +c0 17 -15 32 -32 32h-64c-17 0 -32 -15 -32 -32v-320c0 -17 15 -32 32 -32h64c17 0 32 15 32 32v96h128v-96c0 -17 15 -32 32 -32h64c17 0 32 15 32 32zM1408 1088v-1280c0 -35 -29 -64 -64 -64h-1280c-35 0 -64 29 -64 64v1280c0 35 29 64 64 64h320v288c0 53 43 96 96 96 +h448c53 0 96 -43 96 -96v-288h320c35 0 64 -29 64 -64z" /> + <glyph glyph-name="chevron-circle-down" unicode="" +d="M813 237l454 454c25 25 25 65 0 90l-102 102c-25 25 -65 25 -90 0l-307 -307l-307 307c-25 25 -65 25 -90 0l-102 -102c-25 -25 -25 -65 0 -90l454 -454c25 -25 65 -25 90 0zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z +" /> + <glyph glyph-name="filter" unicode="" horiz-adv-x="1408" +d="M1403 1241c10 -24 5 -52 -14 -70l-493 -493v-742c0 -26 -16 -49 -39 -59c-8 -3 -17 -5 -25 -5c-17 0 -33 6 -45 19l-256 256c-12 12 -19 28 -19 45v486l-493 493c-19 18 -24 46 -14 70c10 23 33 39 59 39h1280c26 0 49 -16 59 -39z" /> + <glyph glyph-name="google-plus" unicode="" horiz-adv-x="2304" +d="M1437 623c0 -419 -281 -716 -704 -716c-405 0 -733 328 -733 733s328 733 733 733c198 0 363 -72 491 -192l-199 -191c-54 52 -149 113 -292 113c-250 0 -454 -207 -454 -463s204 -463 454 -463c290 0 399 209 416 316h-416v252h692c7 -37 12 -74 12 -122zM2304 745v-210 +h-209v-209h-210v209h-209v210h209v209h210v-209h209z" /> + <glyph glyph-name="sticky-note-o" unicode="" +d="M1400 256h-248v-248c17 6 34 15 41 22l185 185c7 7 16 24 22 41zM1120 384h288v896h-1280v-1280h896v288c0 53 43 96 96 96zM1536 1312v-1024c0 -53 -31 -127 -68 -164l-184 -184c-37 -37 -111 -68 -164 -68h-1024c-53 0 -96 43 -96 96v1344c0 53 43 96 96 96h1344 +c53 0 96 -43 96 -96z" /> + <glyph glyph-name="fonticons" unicode="" +d="M0 1408h1536v-1536h-1536v1536zM908 1088l-12 -33l75 -83l-31 -114l25 -25l107 57l107 -57l25 25l-31 114l75 83l-12 33h-95l-53 96h-32l-53 -96h-95zM641 925c41 0 57 -15 56 -79l174 21c0 153 -105 181 -222 181c-174 0 -265 -70 -265 -240v-72h-96v-128h76 +c10 0 20 0 20 -8v-382c0 -19 -5 -25 -23 -27l-73 -7v-88h448v86l-149 14c-18 2 -11 5 -11 25v387h191l38 128h-231c-10 0 2 7 2 15v80c0 60 2 94 65 94zM1248 96v86l-54 9c-19 3 -10 5 -10 25v520h-275l-23 -101l83 -22c13 -4 23 -13 23 -27v-370c0 -19 -8 -23 -26 -25 +l-70 -9v-86h352z" /> + <glyph glyph-name="comments-o" unicode="" horiz-adv-x="1792" +d="M704 1152c-312 0 -576 -176 -576 -384c0 -110 74 -216 202 -290l97 -56l-35 -84c21 12 42 25 62 39l44 31l53 -10c50 -9 101 -14 153 -14c312 0 576 176 576 384s-264 384 -576 384zM704 1280c389 0 704 -229 704 -512s-315 -512 -704 -512c-61 0 -120 6 -176 16 +c-83 -59 -177 -102 -278 -128c-27 -7 -56 -12 -86 -16h-3c-15 0 -29 12 -32 29c-4 19 9 31 20 44c39 44 83 83 117 166c-162 94 -266 239 -266 401c0 283 315 512 704 512zM1526 111c34 -83 78 -122 117 -166c11 -13 24 -25 20 -44c-4 -18 -19 -31 -35 -29 +c-30 4 -59 9 -86 16c-101 26 -195 69 -278 128c-56 -10 -115 -16 -176 -16c-181 0 -347 50 -472 132c29 -2 59 -4 88 -4c215 0 418 62 573 174c167 122 259 287 259 466c0 52 -8 103 -23 152c169 -93 279 -241 279 -408c0 -163 -104 -307 -266 -401z" /> + <glyph glyph-name="lastfm" unicode="" horiz-adv-x="1792" +d="M1292 832c0 -6 8 -34 10 -41c27 -82 90 -99 165 -120c167 -47 325 -136 325 -332c0 -199 -166 -339 -360 -339c-322 0 -422 394 -515 634c-77 198 -158 314 -381 314c-198 0 -372 -190 -372 -385c0 -207 155 -399 370 -399c95 0 194 20 258 95c31 35 61 73 83 116 +l84 -152c-11 -25 -27 -49 -44 -70l1 -1c-101 -117 -239 -152 -388 -152c-302 0 -528 267 -528 561c0 285 248 550 536 550c478 0 502 -414 664 -747c44 -92 119 -200 233 -200c104 0 196 67 196 177c0 238 -437 76 -499 467c-2 11 -3 22 -3 33c0 148 139 275 286 270 +c88 -3 141 -6 211 -68h-1c27 -25 47 -59 68 -88l-129 -99c-15 28 -29 51 -54 70v1c-24 22 -67 21 -97 21c-65 0 -119 -49 -119 -116z" /> + <glyph glyph-name="peertube" unicode="" horiz-adv-x="1350" +d="M0 1536l675 -450l-675 -450v900zM675 1086l675 -450l-675 -450v900zM0 636l675 -450l-675 -450v900z" /> + <glyph glyph-name="pagelines" unicode="" horiz-adv-x="1402" +d="M1402 433c-201 -499 -683 -197 -683 -197c-148 -299 -392 -491 -674 -492c-25 0 -45 20 -45 45s20 44 45 44c235 1 440 156 574 402c-150 -58 -433 -102 -590 300c398 164 581 -41 651 -166c36 89 62 186 79 291c0 0 -510 -80 -546 358c435 175 557 -280 557 -280 +c6 61 12 192 12 195c0 0 -388 269 -139 603c455 -157 224 -593 224 -593c2 -6 2 -87 0 -122c0 0 165 325 498 210c-15 -489 -518 -388 -518 -388c-16 -100 -41 -195 -73 -283c0 0 303 335 628 73z" /> + <glyph glyph-name="credit-card-alt" unicode="" horiz-adv-x="2304" +d="M0 32v608h2304v-608c0 -88 -72 -160 -160 -160h-1984c-88 0 -160 72 -160 160zM640 256v-128h384v128h-384zM256 256v-128h256v128h-256zM2144 1408c88 0 160 -72 160 -160v-224h-2304v224c0 88 72 160 160 160h1984z" /> + <glyph glyph-name="file-word-o" unicode="" +d="M1468 1156c37 -37 68 -111 68 -164v-1152c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h896c53 0 127 -31 164 -68zM1024 1400v-376h376c-6 17 -15 34 -22 41l-313 313c-7 7 -24 16 -41 22zM1408 -128v1024h-416c-53 0 -96 43 -96 96v416 +h-768v-1536h1280zM233 768h300v-107h-90l99 -438c4 -16 6 -33 7 -46l2 -21h4l4 21c3 13 4 30 8 46l144 545h114l144 -545c4 -16 6 -33 9 -46c1 -7 3 -15 3 -21h4l2 21c1 13 3 30 7 46l99 438h-90v107h300v-107h-70l-164 -661h-159l-128 485c-5 16 -6 32 -9 46l-3 24h-4 +c0 -8 -1 -16 -2 -24c-2 -16 -5 -31 -10 -46l-128 -485h-159l-164 661h-70v107z" /> + <glyph glyph-name="map" unicode="" horiz-adv-x="1792" +d="M512 1536c17 0 32 -15 32 -32v-1472c0 -12 -7 -23 -17 -28l-480 -256c-5 -3 -10 -4 -15 -4c-17 0 -32 15 -32 32v1472c0 12 7 23 17 28l480 256c5 3 10 4 15 4zM1760 1536c17 0 32 -15 32 -32v-1472c0 -12 -7 -23 -17 -28l-480 -256c-5 -3 -10 -4 -15 -4 +c-17 0 -32 15 -32 32v1472c0 12 7 23 17 28l480 256c5 3 10 4 15 4zM640 1536c5 0 10 -1 14 -3l512 -256c11 -6 18 -17 18 -29v-1472c0 -17 -15 -32 -32 -32c-5 0 -10 1 -14 3l-512 256c-11 6 -18 17 -18 29v1472c0 17 15 32 32 32z" /> + <glyph glyph-name="object-ungroup" unicode="" horiz-adv-x="2304" +d="M2304 768h-128v-640h128v-384h-384v128h-896v-128h-384v384h128v128h-384v-128h-384v384h128v640h-128v384h384v-128h896v128h384v-384h-128v-128h384v128h384v-384zM2048 1024v-128h128v128h-128zM1408 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 256 +v128h-128v-128h128zM1536 384h-128v-128h128v128zM384 384h896v128h128v640h-128v128h-896v-128h-128v-640h128v-128zM896 -128v128h-128v-128h128zM2176 -128v128h-128v-128h128zM2048 128v640h-128v128h-384v-384h128v-384h-384v128h-384v-128h128v-128h896v128h128z" /> + <glyph glyph-name="briefcase" unicode="" horiz-adv-x="1792" +d="M640 1280h512v128h-512v-128zM1792 640v-480c0 -88 -72 -160 -160 -160h-1472c-88 0 -160 72 -160 160v480h672v-160c0 -35 29 -64 64 -64h320c35 0 64 29 64 64v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384c0 88 72 160 160 160h352v160 +c0 53 43 96 96 96h576c53 0 96 -43 96 -96v-160h352c88 0 160 -72 160 -160z" /> + <glyph glyph-name="weixin" unicode="" horiz-adv-x="2048" +d="M580 1075c0 55 -36 91 -91 91c-54 0 -109 -36 -109 -91c0 -54 55 -90 109 -90c55 0 91 36 91 90zM1323 568c0 36 -36 72 -91 72c-36 0 -72 -36 -72 -72c0 -37 36 -73 72 -73c55 0 91 36 91 73zM1087 1075c0 55 -36 91 -90 91c-55 0 -109 -36 -109 -91 +c0 -54 54 -90 109 -90c54 0 90 36 90 90zM1722 568c0 36 -37 72 -91 72c-36 0 -72 -36 -72 -72c0 -37 36 -73 72 -73c54 0 91 36 91 73zM1456 965c-23 3 -46 4 -70 4c-344 0 -616 -257 -616 -573c0 -53 8 -104 23 -152c-23 -2 -45 -3 -68 -3c-91 0 -163 18 -254 36 +l-253 -127l72 218c-181 127 -290 291 -290 490c0 345 326 616 725 616c356 0 669 -217 731 -509zM2048 404c0 -163 -108 -308 -254 -417l55 -181l-199 109c-73 -18 -146 -37 -218 -37c-345 0 -616 236 -616 526s271 526 616 526c326 0 616 -236 616 -526z" /> + <glyph glyph-name="stop" unicode="" +d="M1536 1344v-1408c0 -35 -29 -64 -64 -64h-1408c-35 0 -64 29 -64 64v1408c0 35 29 64 64 64h1408c35 0 64 -29 64 -64z" /> + <glyph glyph-name="clone" unicode="" horiz-adv-x="1792" +d="M1664 -96v1088c0 17 -15 32 -32 32h-1088c-17 0 -32 -15 -32 -32v-1088c0 -17 15 -32 32 -32h1088c17 0 32 15 32 32zM1792 992v-1088c0 -88 -72 -160 -160 -160h-1088c-88 0 -160 72 -160 160v1088c0 88 72 160 160 160h1088c88 0 160 -72 160 -160zM1408 1376v-160 +h-128v160c0 17 -15 32 -32 32h-1088c-17 0 -32 -15 -32 -32v-1088c0 -17 15 -32 32 -32h160v-128h-160c-88 0 -160 72 -160 160v1088c0 88 72 160 160 160h1088c88 0 160 -72 160 -160z" /> + <glyph glyph-name="thermometer-full" unicode="" horiz-adv-x="1024" +d="M640 192c0 -106 -86 -192 -192 -192s-192 86 -192 192c0 80 50 153 128 181v907h128v-907c78 -28 128 -101 128 -181zM768 192c0 105 -50 197 -128 256v768c0 106 -86 192 -192 192s-192 -86 -192 -192v-768c-78 -59 -128 -151 -128 -256c0 -177 143 -320 320 -320 +s320 143 320 320zM896 192c0 -247 -201 -448 -448 -448s-448 201 -448 448c0 122 49 232 128 313v711c0 177 143 320 320 320s320 -143 320 -320v-711c79 -81 128 -191 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192v128h192z +" /> + <glyph glyph-name="plane" unicode="" horiz-adv-x="1402" +d="M1376 1376c64 -64 0 -224 -96 -320l-161 -161l160 -696c3 -12 -2 -25 -12 -33l-128 -96c-5 -4 -12 -6 -19 -6c-2 0 -4 0 -7 1c-9 2 -17 7 -21 16l-279 508l-259 -259l53 -194c3 -11 0 -22 -8 -31l-96 -96c-6 -6 -15 -9 -23 -9h-2c-10 1 -18 5 -24 13l-189 252l-252 189 +c-8 5 -12 14 -13 23s3 18 9 25l96 97c6 6 15 9 23 9c3 0 6 0 8 -1l194 -53l259 259l-508 279c-9 5 -15 14 -17 24c-1 9 2 20 9 27l128 128c8 7 20 11 30 8l665 -159l160 160c96 96 256 160 320 96z" /> + <glyph glyph-name="check-square" unicode="" +d="M685 237l614 614c25 25 25 65 0 90l-102 102c-25 25 -65 25 -90 0l-467 -467l-211 211c-25 25 -65 25 -90 0l-102 -102c-25 -25 -25 -65 0 -90l358 -358c25 -25 65 -25 90 0zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960 +c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" /> + <glyph glyph-name="window-maximize" unicode="" horiz-adv-x="1792" +d="M256 128h1280v768h-1280v-768zM1792 1248v-1216c0 -88 -72 -160 -160 -160h-1472c-88 0 -160 72 -160 160v1216c0 88 72 160 160 160h1472c88 0 160 -72 160 -160z" /> + <glyph glyph-name="github" unicode="" +d="M768 1408c424 0 768 -344 768 -768c0 -339 -220 -627 -525 -729c-39 -7 -53 17 -53 37c0 25 1 108 1 211c0 72 -24 118 -52 142c171 19 351 84 351 379c0 84 -30 152 -79 206c8 20 34 98 -8 204c-64 20 -211 -79 -211 -79c-61 17 -127 26 -192 26s-131 -9 -192 -26 +c0 0 -147 99 -211 79c-42 -106 -16 -184 -8 -204c-49 -54 -79 -122 -79 -206c0 -294 179 -360 350 -379c-22 -20 -42 -54 -49 -103c-44 -20 -156 -54 -223 64c-42 73 -118 79 -118 79c-75 1 -5 -47 -5 -47c50 -23 85 -112 85 -112c45 -137 259 -91 259 -91 +c0 -64 1 -124 1 -143c0 -20 -14 -44 -53 -37c-305 102 -525 390 -525 729c0 424 344 768 768 768zM291 305c-2 -4 -8 -5 -13 -2c-6 3 -9 8 -7 12c2 3 7 4 13 2c6 -3 9 -8 7 -12zM322 271c-4 -4 -11 -2 -16 3c-5 6 -6 13 -2 16c4 4 11 2 16 -3c5 -6 6 -13 2 -16zM352 226 +c-4 -3 -12 0 -17 7s-5 15 0 18c5 4 13 1 17 -6c5 -7 5 -15 0 -19zM394 184c-4 -5 -13 -4 -20 3c-7 6 -9 15 -4 19c4 5 13 4 20 -3c6 -6 8 -15 4 -19zM451 159c-2 -6 -11 -9 -19 -6c-9 2 -15 9 -13 15s11 9 19 7c9 -3 15 -10 13 -16zM514 154c0 -6 -7 -11 -16 -11 +c-10 -1 -17 4 -17 11c0 6 7 11 16 11c9 1 17 -4 17 -11zM572 164c1 -6 -5 -12 -14 -14s-17 2 -18 8c-1 7 5 13 14 15c9 1 17 -3 18 -9z" /> + <glyph glyph-name="mastodon" unicode="" +d="M1503 425c-23 -116 -202 -243 -408 -268c-108 -13 -214 -25 -327 -20c-185 8 -330 44 -330 44c0 -18 1 -35 3 -51c24 -182 181 -193 329 -198c150 -5 284 37 284 37l6 -136s-105 -56 -292 -66c-103 -6 -230 3 -379 42c-323 85 -379 430 -388 779c-3 104 -1 201 -1 283 +c0 357 235 462 235 462c118 54 320 77 531 79h5c211 -2 413 -25 531 -79c0 0 234 -105 234 -462c0 0 3 -263 -33 -446zM1260 843c0 88 -22 160 -68 211c-47 52 -107 79 -183 79c-88 0 -154 -34 -198 -101l-43 -72l-43 72c-44 67 -110 101 -198 101c-76 0 -136 -27 -183 -79 +c-45 -52 -68 -123 -68 -211v-432h171v420c0 88 38 133 112 133c82 0 124 -54 124 -159v-229h170v229c0 105 42 159 124 159c74 0 112 -45 112 -133v-420h171v432v0z" /> + <glyph glyph-name="envelope-open" unicode="" horiz-adv-x="1792" +d="M1792 882v-978c0 -88 -72 -160 -160 -160h-1472c-88 0 -160 72 -160 160v978c0 9 4 18 11 24c105 92 106 103 628 484c63 46 174 146 257 146s195 -101 257 -146c522 -381 523 -392 628 -484c7 -6 11 -15 11 -24zM1228 297c156 113 265 192 345 252c14 10 17 30 6 44 +l-38 52c-11 14 -31 17 -45 6c-79 -58 -187 -138 -343 -250c-62 -45 -174 -145 -257 -145s-195 100 -257 145c-156 113 -264 192 -343 250c-14 11 -34 8 -45 -6l-38 -52c-11 -14 -8 -34 6 -44c80 -60 189 -139 345 -252c78 -56 201 -169 332 -169c132 0 258 115 332 169z" /> + <glyph glyph-name="step-backward" unicode="" horiz-adv-x="1024" +d="M979 1395c25 25 45 16 45 -19v-1472c0 -35 -20 -44 -45 -19l-710 710c-6 6 -10 12 -13 19v-678c0 -35 -29 -64 -64 -64h-128c-35 0 -64 29 -64 64v1408c0 35 29 64 64 64h128c35 0 64 -29 64 -64v-678c3 7 7 13 13 19z" /> + <glyph glyph-name="wheelchair" unicode="" horiz-adv-x="1629" +d="M1023 349l102 -204c-77 -238 -299 -401 -549 -401c-317 0 -576 259 -576 576c0 242 152 458 379 541l17 -131c-163 -72 -268 -232 -268 -410c0 -247 201 -448 448 -448c257 0 465 220 447 477zM1571 249l58 -114l-256 -128c-9 -5 -19 -7 -29 -7c-24 0 -47 14 -57 35 +l-239 477h-472c-32 0 -60 25 -64 57l-96 779c-1 10 3 32 6 42c19 69 83 114 154 114c88 0 160 -72 160 -160c0 -91 -80 -169 -172 -159l37 -289h423v-128h-407l16 -128h455c24 0 47 -14 57 -35l228 -455z" /> + <glyph glyph-name="bootstrap" unicode="" +d="M256 1408h1024c141 0 256 -115 256 -256v-1024c0 -141 -115 -256 -256 -256h-1024c-141 0 -256 115 -256 256v1024c0 141 115 256 256 256zM494 1020v-795h310c169 0 270 83 270 223c0 106 -69 182 -177 196v4c77 14 137 91 137 174c0 119 -93 198 -229 198h-311z +M593 933h190c97 0 150 -44 150 -123c0 -86 -64 -133 -181 -133h-159v256zM593 592v0h187c127 0 192 -47 192 -139s-63 -141 -183 -141h-196v280z" /> + <glyph glyph-name="cutlery" unicode="" horiz-adv-x="1408" +d="M640 1472v-640c0 -81 -52 -154 -128 -181v-779c0 -70 -58 -128 -128 -128h-128c-70 0 -128 58 -128 128v779c-76 27 -128 100 -128 181v640c0 35 29 64 64 64s64 -29 64 -64v-416c0 -35 29 -64 64 -64s64 29 64 64v416c0 35 29 64 64 64s64 -29 64 -64v-416 +c0 -35 29 -64 64 -64s64 29 64 64v416c0 35 29 64 64 64s64 -29 64 -64zM1408 1472v-1600c0 -70 -58 -128 -128 -128h-128c-70 0 -128 58 -128 128v512h-224c-17 0 -32 15 -32 32v800c0 176 144 320 320 320h256c35 0 64 -29 64 -64z" /> + <glyph glyph-name="microphone-slash" unicode="" horiz-adv-x="1382" +d="M258 591l-101 -101c-27 66 -42 138 -42 214v128c0 35 29 64 64 64s64 -29 64 -64v-128c0 -39 6 -77 15 -113zM1372 1193l-361 -361v-128c0 -176 -144 -320 -320 -320c-38 0 -75 7 -109 19l-96 -96c61 -32 131 -51 205 -51c247 0 448 201 448 448v128c0 35 29 64 64 64 +s64 -29 64 -64v-128c0 -296 -224 -540 -512 -572v-132h256c35 0 64 -29 64 -64s-29 -64 -64 -64h-640c-35 0 -64 29 -64 64s29 64 64 64h256v132c-85 9 -165 38 -235 81l-254 -254c-13 -13 -33 -13 -46 0l-82 82c-13 13 -13 33 0 46l1234 1234c13 13 33 13 46 0l82 -82 +c13 -13 13 -33 0 -46zM992 1325l-621 -621v512c0 176 144 320 320 320c138 0 256 -89 301 -211z" /> + <glyph glyph-name="user-plus" unicode="" horiz-adv-x="2048" +d="M704 640c-212 0 -384 172 -384 384s172 384 384 384s384 -172 384 -384s-172 -384 -384 -384zM1664 512h352c17 0 32 -15 32 -32v-192c0 -17 -15 -32 -32 -32h-352v-352c0 -17 -15 -32 -32 -32h-192c-17 0 -32 15 -32 32v352h-352c-17 0 -32 15 -32 32v192 +c0 17 15 32 32 32h352v352c0 17 15 32 32 32h192c17 0 32 -15 32 -32v-352zM928 288c0 -70 58 -128 128 -128h256v-238c-49 -36 -111 -50 -171 -50h-874c-160 0 -267 96 -267 259c0 226 53 573 346 573c16 0 27 -7 39 -17c98 -75 193 -122 319 -122s221 47 319 122 +c12 10 23 17 39 17c85 0 160 -32 217 -96h-223c-70 0 -128 -58 -128 -128v-192z" /> + <glyph glyph-name="truck" unicode="" horiz-adv-x="1728" +d="M576 128c0 70 -58 128 -128 128s-128 -58 -128 -128s58 -128 128 -128s128 58 128 128zM192 640h384v256h-158c-4 0 -19 -6 -22 -9l-195 -195c-3 -3 -9 -18 -9 -22v-30zM1472 128c0 70 -58 128 -128 128s-128 -58 -128 -128s58 -128 128 -128s128 58 128 128zM1728 1216 +v-1024c0 -74 -78 -64 -128 -64c0 -141 -115 -256 -256 -256s-256 115 -256 256h-384c0 -141 -115 -256 -256 -256s-256 115 -256 256h-64c-50 0 -128 -10 -128 64c0 35 29 64 64 64v320c0 71 -10 150 45 205l198 198c25 25 73 45 109 45h160v192c0 35 29 64 64 64h1024 +c35 0 64 -29 64 -64z" /> + <glyph glyph-name="wrench" unicode="" horiz-adv-x="1641" +d="M363 64c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1007 484l-682 -682c-23 -23 -56 -37 -90 -37s-67 14 -91 37l-106 108c-24 23 -38 56 -38 90s14 67 38 91l681 681c52 -131 157 -236 288 -288zM1641 919c0 -33 -12 -74 -23 -106 +c-63 -178 -234 -301 -423 -301c-247 0 -448 201 -448 448s201 448 448 448c73 0 168 -22 229 -63c10 -7 16 -16 16 -28c0 -11 -7 -22 -16 -28l-293 -169v-224l193 -107c33 19 265 165 285 165s32 -15 32 -35z" /> + <glyph glyph-name="ambulance" unicode="" horiz-adv-x="1856" +d="M576 128c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM192 640h384v256h-158c-6 -1 -17 -5 -22 -9l-195 -195c-3 -5 -8 -16 -9 -22v-30zM1472 128c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1600 800 +v192c0 18 -14 32 -32 32h-224v224c0 18 -14 32 -32 32h-192c-18 0 -32 -14 -32 -32v-224h-224c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h224v-224c0 -18 14 -32 32 -32h192c18 0 32 14 32 32v224h224c18 0 32 14 32 32zM1856 1344v-1152c0 -35 -29 -64 -64 -64h-192 +c0 -141 -114 -256 -256 -256c-141 0 -256 115 -256 256h-384c0 -141 -114 -256 -256 -256s-256 115 -256 256h-128c-35 0 -64 29 -64 64s29 64 64 64v416c0 35 20 84 45 109l198 198c25 25 74 45 109 45h160v320c0 35 29 64 64 64h1152c35 0 64 -29 64 -64z" /> + <glyph glyph-name="cc-visa" unicode="" horiz-adv-x="2304" +d="M1975 546h-138s14 37 66 179c-1 -1 14 37 22 61l12 -55c31 -153 38 -185 38 -185zM531 611l-58 295c-8 41 -39 54 -75 54h-268l-2 -13c184 -47 335 -147 403 -336zM710 960l-162 -438l-17 89c-35 93 -120 179 -216 218l135 -510h175l261 641h-176zM849 318h166l104 642 +h-166zM1617 944c-33 13 -85 27 -149 27c-164 0 -279 -87 -280 -212c-1 -92 82 -143 145 -174c65 -31 86 -52 86 -80c0 -43 -52 -62 -99 -62c-67 0 -103 8 -156 33l-22 11l-23 -144c39 -18 110 -34 185 -34c174 -1 287 86 289 219c0 73 -45 128 -140 174 +c-58 29 -93 50 -93 80c0 27 30 55 95 55c54 1 94 -10 124 -24l15 -8zM2042 960h-128c-40 0 -70 -12 -87 -54l-246 -588h174c28 79 35 96 35 96h212s5 -22 20 -96h154zM2304 1280v-1280c0 -70 -58 -128 -128 -128h-2048c-70 0 -128 58 -128 128v1280c0 70 58 128 128 128 +h2048c70 0 128 -58 128 -128z" /> + <glyph glyph-name="superscript" unicode="" horiz-adv-x="1529" +d="M892 167v-167h-248l-159 252l-24 42c-6 7 -9 14 -11 21h-3c-2 -7 -6 -14 -9 -21c-6 -12 -15 -28 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228c9 -14 16 -29 23 -42c6 -7 9 -14 11 -21h3c2 7 6 14 11 21l25 42l140 228h257v-168h-125 +l-184 -267l204 -296h109zM1529 846v-206h-514l-3 27c-2 14 -4 33 -4 46c0 273 350 296 350 441c0 52 -47 87 -100 87c-38 0 -72 -18 -97 -39c-13 -11 -25 -25 -36 -38l-105 92c18 25 38 46 63 66c42 33 103 65 188 65c145 0 246 -85 246 -218c0 -240 -332 -260 -346 -403 +h232v80h126z" /> + <glyph glyph-name="pixelfed" unicode="" +d="M768 -128c-424 0 -768 344 -768 768s344 768 768 768s768 -344 768 -768s-344 -768 -768 -768zM707 472h141c133 0 240 105 240 234s-107 234 -240 234h-203c-77 0 -139 -60 -139 -135v-525z" /> + <glyph glyph-name="tty" unicode="" horiz-adv-x="1792" +d="M448 224v-192c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM256 608v-192c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM832 224v-192c0 -18 -14 -32 -32 -32h-192 +c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM640 608v-192c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM66 768c-37 0 -66 29 -66 65v129h514v-129c0 -36 -29 -65 -65 -65h-383zM1216 224v-192 +c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM1024 608v-192c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM1600 224v-192c0 -18 -14 -32 -32 -32h-192 +c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM1408 608v-192c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM1792 1016v-13h-514v10c0 37 -32 104 -382 102c-350 -1 -382 -65 -382 -102v-10h-514v13 +c0 67 120 392 896 392c775 0 896 -325 896 -392zM1792 608v-192c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM1792 962v-129c0 -36 -29 -65 -65 -65h-384c-36 0 -65 29 -65 65v129h514z" /> + <glyph glyph-name="linode" unicode="" horiz-adv-x="1494" +d="M309 1l202 -214l-34 236l-216 213zM535 -225l274 218l-11 245l-300 -215zM224 413l227 -213l-48 327l-245 204zM474 189l317 214l-14 324l-352 -200zM822 178l95 -80l-2 239l-103 79c0 -8 4 -22 -4 -28l-78 -52l85 -70c10 -8 7 -76 7 -88zM117 930l256 -200l-68 465 +l-279 173zM1152 267l15 234l-230 -164l2 -240zM396 722l373 194l-19 441l-423 -163zM1249 357l20 233l-226 142l-2 -105l144 -95c3 -2 5 -6 4 -9l-7 -119zM1440 496l30 222l-179 -128l-20 -228zM1252 329l-71 49l-8 -117c0 -3 -1 -6 -4 -8l-234 -187c-4 -3 -10 -3 -14 0 +l-98 83l7 -161c0 -3 -1 -6 -4 -8l-293 -234c-2 -1 -4 -2 -6 -2c-3 1 -6 1 -8 3l-228 242c-5 5 -54 252 -59 277c-1 4 2 9 5 11l61 37c-12 11 -93 82 -95 92l-72 351c-1 4 1 9 6 12l94 45c-16 12 -132 96 -135 108l-96 466c-1 6 2 11 7 13l433 135c2 0 5 0 8 -1l317 -153 +c3 -2 6 -6 6 -9l20 -463c0 -4 -2 -8 -6 -10l-118 -61l126 -85c3 -1 5 -5 5 -8l5 -123l121 74c3 2 8 2 11 0l84 -56l3 110c0 3 2 7 5 9l206 126c4 2 8 2 11 0l245 -135c2 -2 4 -4 5 -7c2 -7 -31 -232 -34 -255c0 -3 -2 -6 -4 -7l-191 -153c-4 -3 -9 -3 -13 0z" /> + <glyph glyph-name="shield" unicode="" horiz-adv-x="1280" +d="M1088 576v640h-448v-1137c51 27 133 74 213 137c107 84 235 215 235 360zM1280 1344v-768c0 -421 -589 -687 -614 -698c-8 -4 -17 -6 -26 -6s-18 2 -26 6c-25 11 -614 277 -614 698v768c0 35 29 64 64 64h1152c35 0 64 -29 64 -64z" /> + <glyph glyph-name="user-md" unicode="" horiz-adv-x="1408" +d="M384 192c0 -35 -29 -64 -64 -64s-64 29 -64 64s29 64 64 64s64 -29 64 -64zM1408 131c0 -163 -107 -259 -267 -259h-874c-160 0 -267 96 -267 259c0 199 40 513 278 565c-16 -38 -22 -79 -22 -120v-203c-77 -27 -128 -100 -128 -181c0 -106 86 -192 192 -192 +s192 86 192 192c0 81 -52 154 -128 181v203c0 33 3 66 25 93c84 -66 188 -104 295 -104s211 38 295 104c22 -27 25 -60 25 -93v-64c-141 0 -256 -115 -256 -256v-89c-20 -18 -32 -44 -32 -71c0 -53 43 -96 96 -96s96 43 96 96c0 27 -12 53 -32 71v89c0 70 58 128 128 128 +s128 -58 128 -128v-89c-20 -18 -32 -44 -32 -71c0 -53 43 -96 96 -96s96 43 96 96c0 27 -12 53 -32 71v89c0 91 -49 176 -128 221c0 73 7 151 -22 219c238 -52 278 -366 278 -565zM1088 1024c0 -212 -172 -384 -384 -384s-384 172 -384 384s172 384 384 384 +s384 -172 384 -384z" /> + <glyph glyph-name="xmpp" unicode="" horiz-adv-x="1542" +d="M1536 1314c47 -398 -206 -904 -657 -1199c122 -101 261 -177 414 -216v-27c-165 14 -320 59 -461 128l-30 15l-1 1l-6 3c-11 6 -30 16 -41 22c-94 -51 -193 -90 -297 -116c-68 -19 -139 -33 -211 -42v28c145 37 279 107 396 201c-426 296 -682 805 -637 1192l93 -33v0 +l273 -81c-1 -16 -1 -32 -1 -49c0 -296 147 -656 394 -917c254 262 406 628 406 929c0 17 0 33 -1 49l274 81z" /> + <glyph glyph-name="moon-o" unicode="" horiz-adv-x="1471" +d="M1262 233c-36 -6 -73 -9 -110 -9c-371 0 -672 301 -672 672c0 127 37 251 104 357c-266 -79 -456 -323 -456 -613c0 -353 287 -640 640 -640c193 0 374 88 494 233zM1465 318c-125 -271 -399 -446 -697 -446c-423 0 -768 345 -768 768c0 415 325 752 739 767 +c28 1 51 -15 61 -39c11 -25 4 -54 -15 -72c-114 -104 -177 -246 -177 -400c0 -300 244 -544 544 -544c79 0 155 17 228 51c25 11 53 6 72 -13s24 -48 13 -72z" /> + <glyph glyph-name="pie-chart" unicode="" horiz-adv-x="1728" +d="M768 646l546 -546c-139 -141 -333 -228 -546 -228c-424 0 -768 344 -768 768s344 768 768 768v-762zM955 640h773c0 -213 -87 -407 -228 -546zM1664 768h-768v768c424 0 768 -344 768 -768z" /> + <glyph glyph-name="align-left" unicode="" horiz-adv-x="1792" +d="M1792 192v-128c0 -35 -29 -64 -64 -64h-1664c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1664c35 0 64 -29 64 -64zM1408 576v-128c0 -35 -29 -64 -64 -64h-1280c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1280c35 0 64 -29 64 -64zM1664 960v-128 +c0 -35 -29 -64 -64 -64h-1536c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1536c35 0 64 -29 64 -64zM1280 1344v-128c0 -35 -29 -64 -64 -64h-1152c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1152c35 0 64 -29 64 -64z" /> + <glyph glyph-name="motorcycle" unicode="" horiz-adv-x="2304" +d="M2301 500c32 -281 -197 -517 -476 -499c-214 14 -392 185 -414 399c-16 152 44 289 146 381l-71 107c-126 -105 -206 -262 -206 -438c0 -36 -28 -66 -64 -66h-325c-31 -217 -217 -384 -443 -384c-247 0 -448 201 -448 448s201 448 448 448c53 0 104 -10 152 -27l24 45 +c-77 69 -178 110 -304 110h-64c-35 0 -64 29 -64 64s29 64 64 64h128c224 0 338 -92 384 -128h627l-85 128h-222c-39 0 -70 35 -63 75c5 31 35 53 66 53h253c21 0 41 -11 53 -28l70 -105l114 114c12 12 29 19 46 19h101c35 0 64 -29 64 -64v-128c0 -35 -29 -64 -64 -64h-179 +l115 -172c81 39 175 55 275 36c191 -35 340 -195 362 -388zM448 128c155 0 284 110 314 256h-314c-22 0 -43 12 -55 31c-11 19 -12 43 -1 63l147 277c-29 8 -59 13 -91 13c-176 0 -320 -144 -320 -320s144 -320 320 -320zM1856 128c176 0 320 144 320 320s-144 320 -320 320 +c-43 0 -83 -9 -121 -24l174 -260c20 -30 12 -70 -17 -89c-11 -8 -24 -11 -36 -11c-21 0 -41 10 -53 29l-174 260c-57 -58 -93 -137 -93 -225c0 -176 144 -320 320 -320z" /> + <glyph glyph-name="nextcloud-square" unicode="" +d="M257 1408h1022c142 0 257 -115 257 -257v-1022c0 -142 -115 -257 -257 -257h-1022c-142 0 -257 115 -257 257v1022c0 142 115 257 257 257zM772 969v0c-145 0 -268 -98 -307 -230c-34 69 -105 118 -187 118c-114 0 -208 -94 -208 -208s94 -207 208 -207 +c82 0 153 48 187 117c39 -132 162 -230 307 -230s267 98 306 230c34 -69 105 -117 187 -117c114 0 208 93 208 207s-94 208 -208 208c-82 0 -153 -49 -187 -118c-39 132 -161 230 -306 230zM772 846v0c106 0 196 -88 196 -197s-87 -196 -196 -196s-197 87 -197 196 +s88 197 197 197zM278 733c47 0 84 -37 84 -84s-37 -84 -84 -84s-84 37 -84 84s37 84 84 84zM1265 733c47 0 84 -37 84 -84s-37 -84 -84 -84s-84 37 -84 84s37 84 84 84z" /> + <glyph glyph-name="ticket" unicode="" horiz-adv-x="1685" +d="M970 1084l316 -316l-572 -572l-316 316zM760 105l618 618c25 25 25 65 0 90l-362 362c-24 24 -66 24 -90 0l-618 -618c-25 -25 -25 -65 0 -90l362 -362c12 -12 27 -18 44 -18s34 6 46 18zM1648 742l-906 -908c-50 -49 -133 -49 -182 0l-126 126c75 75 75 197 0 272 +s-197 75 -272 0l-124 126c-50 49 -50 131 0 181l906 906c49 50 132 50 182 0l124 -125c-75 -75 -75 -197 0 -272s197 -75 272 0l126 -125c49 -50 49 -132 0 -181z" /> + <glyph glyph-name="battery-half" unicode="" horiz-adv-x="2304" +d="M256 256v768h896v-768h-896zM2176 960c71 0 128 -57 128 -128v-384c0 -71 -57 -128 -128 -128v-160c0 -88 -72 -160 -160 -160h-1856c-88 0 -160 72 -160 160v960c0 88 72 160 160 160h1856c88 0 160 -72 160 -160v-160zM2176 448v384h-128v288c0 18 -14 32 -32 32h-1856 +c-18 0 -32 -14 -32 -32v-960c0 -18 14 -32 32 -32h1856c18 0 32 14 32 32v288h128z" /> + <glyph glyph-name="spotify" unicode="" +d="M1127 326c0 28 -11 39 -30 51c-129 77 -279 115 -447 115c-98 0 -192 -13 -287 -34c-23 -5 -42 -20 -42 -52c0 -25 19 -49 49 -49c9 0 25 5 37 8c78 16 160 27 243 27c147 0 286 -36 397 -103c12 -7 20 -11 33 -11c25 0 47 20 47 48zM1223 541c0 27 -10 46 -35 61 +c-153 91 -347 141 -548 141c-129 0 -217 -18 -303 -42c-32 -9 -48 -31 -48 -64s27 -60 60 -60c14 0 22 4 37 8c70 19 154 33 251 33c190 0 363 -50 488 -124c11 -6 22 -13 38 -13c34 0 60 27 60 60zM1331 789c0 37 -16 56 -40 70c-173 101 -410 148 -636 148 +c-133 0 -255 -15 -364 -47c-28 -8 -54 -32 -54 -74c0 -41 31 -73 72 -73c15 0 29 5 40 8c97 27 202 37 307 37c208 0 424 -46 563 -129c14 -8 24 -12 40 -12c38 0 72 30 72 72zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z +" /> + <glyph glyph-name="dot-circle-o" unicode="" +d="M1024 640c0 -141 -115 -256 -256 -256s-256 115 -256 256s115 256 256 256s256 -115 256 -256zM768 1184c-300 0 -544 -244 -544 -544s244 -544 544 -544s544 244 544 544s-244 544 -544 544zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768 +s768 -344 768 -768z" /> + <glyph glyph-name="facebook-square" unicode="" +d="M1248 1408c159 0 288 -129 288 -288v-960c0 -159 -129 -288 -288 -288h-188v595h199l30 232h-229v148c0 67 18 112 115 112l122 1v207c-21 3 -94 9 -178 9c-177 0 -299 -108 -299 -306v-171h-200v-232h200v-595h-532c-159 0 -288 129 -288 288v960c0 159 129 288 288 288 +h960z" /> + <glyph glyph-name="facebook-messenger" unicode="" horiz-adv-x="1520" +d="M760 1408c420 0 760 -318 760 -711c0 -476 -490 -817 -978 -681l-260 -144v272c-556 420 -235 1264 478 1264zM841 455l415 440l-379 -209l-197 204l-415 -441l379 210z" /> + <glyph glyph-name="angle-up" unicode="" horiz-adv-x="998" +d="M998 352c0 -8 -4 -17 -10 -23l-50 -50c-6 -6 -14 -10 -23 -10c-8 0 -17 4 -23 10l-393 393l-393 -393c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-50 50c-6 6 -10 15 -10 23s4 17 10 23l466 466c6 6 15 10 23 10s17 -4 23 -10l466 -466c6 -6 10 -15 10 -23z" /> + <glyph glyph-name="glide" unicode="" +d="M866 1021c0 -32 -7 -63 -13 -94c-21 -100 -41 -200 -62 -300c-3 -14 -3 -14 -18 -15c-10 -1 -21 -2 -31 -2c-86 0 -110 93 -110 163c0 104 41 243 138 298c16 8 33 14 51 14c41 0 45 -30 45 -64zM1352 597c0 18 -74 135 -91 142c-8 3 -25 8 -34 8 +c-82 0 -156 -37 -226 -77l-2 2c16 107 52 202 52 313c0 159 -85 233 -242 233c-23 0 -46 -3 -68 -6c-197 -35 -317 -260 -317 -445c0 -196 113 -304 308 -304c4 0 25 2 25 -3c0 -2 0 -3 -1 -5c-4 -38 -16 -80 -26 -117c-15 -55 -67 -150 -134 -150c-29 0 -42 20 -42 47 +c0 87 100 139 102 144c0 4 -5 8 -7 10c-31 28 -82 51 -124 51c-76 0 -117 -122 -117 -184c0 -116 73 -196 190 -196c173 0 299 182 338 332c11 44 19 89 30 133c2 9 5 13 14 18c71 36 146 60 227 60c44 0 83 -8 127 -18c1 -1 3 -1 4 -1c6 0 14 7 14 13zM1536 1120v-960 +c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" /> + <glyph glyph-name="gitea" unicode="" horiz-adv-x="2066" +d="M366 1280v0c62 0 120 -8 160 -8v0v0c329 -18 502 -29 699 -29l1 -363l53 -27v390c171 2 371 11 709 29v0h1c15 0 28 -7 38 -17s18 -25 24 -43c12 -36 16 -85 15 -143c-3 -117 -30 -272 -75 -427s-107 -311 -182 -431s-163 -204 -259 -211h-615c-75 8 -156 85 -224 169 +c-34 42 -64 87 -87 126c-21 36 -35 66 -41 88c-82 2 -219 15 -341 80c-125 67 -233 191 -242 414c-6 143 45 245 118 310s167 93 248 93zM388 1107v0c-90 -1 -147 -29 -180 -71c-36 -44 -46 -104 -38 -164c14 -113 61 -183 126 -229c62 -44 143 -65 231 -78 +c-70 193 -106 325 -128 542h-11zM1118 893c-34 0 -66 -19 -82 -51l-172 -353c-22 -45 -3 -99 42 -121l354 -172c45 -22 99 -3 121 42l171 354c22 45 3 99 -42 121l-249 121l-45 -93c5 -5 10 -14 12 -20c2 -5 3 -13 3 -19v-4c30 -14 54 -25 74 -36c30 -17 52 -34 59 -62 +s-1 -57 -17 -95c-12 -29 -29 -65 -51 -111c4 -5 9 -13 11 -19c2 -5 4 -13 4 -19c0 -22 -17 -46 -38 -54c-5 -2 -14 -4 -20 -4c-22 0 -46 17 -54 38c-2 5 -3 14 -3 20c0 22 17 46 38 54c5 2 14 3 19 3h2c22 46 41 82 52 109c15 36 18 55 15 66s-13 20 -39 35 +c-18 10 -41 22 -71 36c-4 -4 -13 -9 -19 -11c-5 -2 -14 -3 -19 -3h-6l-77 -158c5 -5 12 -14 14 -21c2 -5 3 -13 3 -19c0 -22 -17 -46 -38 -54c-5 -2 -13 -4 -19 -4c-22 0 -46 17 -54 38c-2 5 -3 14 -3 20c0 22 16 46 37 54c5 2 15 3 20 3l79 162c-3 4 -8 11 -10 16 +s-3 14 -3 20c0 22 17 46 38 54c5 2 14 3 19 3h1l46 94l-64 31c-13 6 -26 9 -39 9z" /> + <glyph glyph-name="f-droid" unicode="" horiz-adv-x="1676" +d="M47 1526v0c12 0 29 -8 36 -18l127 -164c10 3 27 6 37 6v0h1182v0c10 0 27 -3 37 -6l127 164c7 9 22 17 34 18h2h3c24 -1 44 -22 44 -46c0 -9 -4 -22 -10 -29l-133 -172c4 -11 7 -29 7 -40v0v-258c0 -61 -50 -111 -111 -111h-1182c-61 0 -111 50 -111 111v258v0 +c0 11 3 29 7 40l-133 172c-6 7 -10 20 -10 29c0 26 20 46 46 46h1zM482 1212v0c-69 0 -125 -56 -125 -125v0c0 -69 56 -125 125 -125v0c69 0 125 56 125 125v0c0 69 -56 125 -125 125v0zM1203 1212c-69 0 -125 -56 -125 -125v0c0 -69 56 -125 125 -125s125 56 125 125v0 +c0 69 -56 125 -125 125zM247 833h1182c61 0 111 -50 111 -111v-739c0 -61 -50 -111 -111 -111h-1182c-61 0 -111 50 -111 111v739c0 61 50 111 111 111zM838 740v0c-214 0 -388 -174 -388 -388s174 -388 388 -388s388 174 388 388s-174 388 -388 388zM838 670v0 +c176 0 318 -142 318 -318s-142 -317 -318 -317s-318 141 -318 317s142 318 318 318zM838 583v0c-106 0 -197 -72 -223 -171h119c20 36 59 61 104 61c67 0 120 -54 120 -121s-53 -120 -120 -120c-48 0 -89 28 -108 69h-117c24 -102 116 -180 225 -180c127 0 231 104 231 231 +s-104 231 -231 231z" /> + <glyph glyph-name="shopping-basket" unicode="" horiz-adv-x="2048" +d="M1920 768c71 0 128 -57 128 -128s-57 -128 -128 -128h-15l-115 -662c-11 -61 -64 -106 -126 -106h-1280c-62 0 -115 45 -126 106l-115 662h-15c-71 0 -128 57 -128 128s57 128 128 128h1792zM485 -32c35 3 62 34 59 69l-32 416c-3 35 -34 62 -69 59s-62 -34 -59 -69 +l32 -416c3 -33 31 -59 64 -59h5zM896 32v416c0 35 -29 64 -64 64s-64 -29 -64 -64v-416c0 -35 29 -64 64 -64s64 29 64 64zM1280 32v416c0 35 -29 64 -64 64s-64 -29 -64 -64v-416c0 -35 29 -64 64 -64s64 29 64 64zM1632 27l32 416c3 35 -24 66 -59 69s-66 -24 -69 -59 +l-32 -416c-3 -35 24 -66 59 -69h5c33 0 61 26 64 59zM476 1244l-93 -412h-132l101 441c26 117 129 199 249 199h167c0 35 29 64 64 64h384c35 0 64 -29 64 -64h167c120 0 223 -82 249 -199l101 -441h-132l-93 412c-14 59 -65 100 -125 100h-167c0 -35 -29 -64 -64 -64h-384 +c-35 0 -64 29 -64 64h-167c-60 0 -111 -41 -125 -100z" /> + <glyph glyph-name="user-o" unicode="" +d="M1201 752c141 -41 335 -180 335 -635c0 -206 -153 -373 -341 -373h-854c-188 0 -341 167 -341 373c0 455 194 594 335 635c-50 79 -79 172 -79 272c0 282 230 512 512 512s512 -230 512 -512c0 -100 -29 -193 -79 -272zM768 1408c-212 0 -384 -172 -384 -384 +s172 -384 384 -384s384 172 384 384s-172 384 -384 384zM1195 -128c117 0 213 109 213 245c0 315 -106 512 -304 522c-90 -79 -207 -127 -336 -127s-246 48 -336 127c-198 -10 -304 -207 -304 -522c0 -136 96 -245 213 -245h854z" /> + <glyph glyph-name="paperclip" unicode="" horiz-adv-x="1400" +d="M1400 151c0 -156 -119 -275 -275 -275c-88 0 -173 38 -235 100l-777 776c-71 72 -113 170 -113 271c0 212 167 381 379 381c102 0 200 -41 273 -113l605 -606c6 -6 10 -14 10 -22c0 -21 -56 -77 -77 -77c-9 0 -17 4 -23 10l-606 607c-48 47 -113 77 -181 77 +c-142 0 -252 -115 -252 -256c0 -68 28 -133 76 -181l776 -777c38 -38 91 -63 145 -63c85 0 148 63 148 148c0 55 -25 107 -63 145l-581 581c-16 15 -38 24 -60 24c-38 0 -67 -28 -67 -67c0 -22 10 -43 25 -59l410 -410c6 -6 10 -14 10 -22c0 -21 -57 -78 -78 -78 +c-8 0 -16 4 -22 10l-410 410c-40 39 -63 94 -63 149c0 110 86 196 196 196c56 0 110 -23 149 -63l581 -581c63 -62 100 -147 100 -235z" /> + <glyph glyph-name="deviantart" unicode="" horiz-adv-x="1024" +d="M1024 1233l-303 -582l24 -31h279v-415h-507l-44 -30l-142 -273c-1 0 -28 -28 -30 -30h-301v303l303 583l-24 30h-279v415h507l44 30l142 273c1 0 28 28 30 30h301v-303z" /> + <glyph glyph-name="file-audio-o" unicode="" +d="M1468 1156c37 -37 68 -111 68 -164v-1152c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h896c53 0 127 -31 164 -68zM1024 1400v-376h376c-6 17 -15 34 -22 41l-313 313c-7 7 -24 16 -41 22zM1408 -128v1024h-416c-53 0 -96 43 -96 96v416 +h-768v-1536h1280zM620 686c12 -5 20 -17 20 -30v-544c0 -13 -8 -25 -20 -30c-4 -1 -8 -2 -12 -2c-8 0 -16 3 -23 9l-166 167h-131c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h131l166 167c10 9 23 12 35 7zM1037 -3c-14 0 -28 5 -40 15c-28 22 -32 62 -9 90 +c65 80 100 178 100 282s-35 202 -100 282c-23 28 -19 68 9 91c27 22 68 18 90 -10c83 -102 129 -231 129 -363s-46 -261 -129 -363c-13 -16 -31 -24 -50 -24zM826 145c-15 0 -31 6 -44 17c-25 24 -27 65 -2 91c33 36 52 82 52 131s-19 95 -52 131c-25 26 -23 67 2 91 +c26 24 67 23 91 -3c56 -60 87 -137 87 -219s-31 -159 -87 -219c-13 -13 -30 -20 -47 -20z" /> + <glyph glyph-name="eur" unicode="" horiz-adv-x="1012" +d="M976 229l35 -159c4 -16 -5 -32 -20 -37c-4 -1 -97 -33 -217 -33c-312 0 -563 188 -647 482h-95c-18 0 -32 15 -32 32v113c0 17 14 32 32 32h66c-1 32 -1 70 1 105h-67c-18 0 -32 14 -32 32v114c0 18 14 32 32 32h98c89 280 345 466 644 466c104 0 190 -22 194 -23 +c8 -2 15 -8 20 -15c4 -7 5 -16 3 -24l-43 -159c-4 -17 -21 -27 -38 -22c-1 0 -69 17 -140 17c-168 0 -309 -91 -376 -240h468c10 0 19 -4 25 -12c6 -7 9 -17 7 -26l-24 -114c-3 -15 -16 -26 -32 -26h-488c-3 -32 -2 -66 0 -105h459c10 0 19 -5 25 -12c6 -8 8 -18 6 -27 +l-24 -112c-3 -15 -16 -26 -31 -26h-387c64 -156 208 -254 378 -254c87 0 158 24 159 24c8 3 18 2 26 -2c8 -5 13 -13 15 -21z" /> + <glyph glyph-name="coffee" unicode="" horiz-adv-x="1856" +d="M1664 896c0 106 -86 192 -192 192h-64v-384h64c106 0 192 86 192 192zM0 128h1792c0 -141 -115 -256 -256 -256h-1280c-141 0 -256 115 -256 256zM1856 896c0 -212 -172 -384 -384 -384h-64v-32c0 -123 -101 -224 -224 -224h-704c-123 0 -224 101 -224 224v736 +c0 35 29 64 64 64h1152c212 0 384 -172 384 -384z" /> + <glyph glyph-name="university" unicode="" horiz-adv-x="1920" +d="M960 1536l960 -384v-128h-128c0 -35 -31 -64 -69 -64h-1526c-38 0 -69 29 -69 64h-128v128zM256 896h256v-768h128v768h256v-768h128v768h256v-768h128v768h256v-768h59c38 0 69 -29 69 -64v-64h-1664v64c0 35 31 64 69 64h59v768zM1851 -64c38 0 69 -29 69 -64v-128 +h-1920v128c0 35 31 64 69 64h1782z" /> + <glyph glyph-name="times-circle-o" unicode="" +d="M1097 457l-146 -146c-13 -13 -33 -13 -46 0l-137 137l-137 -137c-13 -13 -33 -13 -46 0l-146 146c-13 13 -13 33 0 46l137 137l-137 137c-13 13 -13 33 0 46l146 146c13 13 33 13 46 0l137 -137l137 137c13 13 33 13 46 0l146 -146c13 -13 13 -33 0 -46l-137 -137 +l137 -137c13 -13 13 -33 0 -46zM1312 640c0 300 -244 544 -544 544s-544 -244 -544 -544s244 -544 544 -544s544 244 544 544zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" /> + <glyph glyph-name="python" unicode="" +d="M759 1416v0c63 0 129 -4 193 -15c101 -17 185 -92 185 -192v-353c0 -103 -82 -188 -185 -188h-370c-126 0 -232 -108 -232 -230v-170h-127c-108 0 -171 78 -197 188c-36 147 -34 236 0 377c29 123 124 188 232 188h509v47h-370v141c0 107 28 164 185 192 +c53 9 114 15 177 15zM558 1303c-38 0 -69 -32 -69 -71s31 -70 69 -70s70 31 70 70s-32 71 -70 71zM1183 1021h139c108 0 159 -81 186 -188c37 -149 39 -261 0 -377c-37 -113 -78 -188 -186 -188h-555v-47h370v-141c0 -107 -92 -161 -185 -188c-140 -41 -253 -34 -370 0 +c-98 29 -185 88 -185 188v353c0 102 84 188 185 188h370c123 0 231 107 231 235v165zM975 127v0c-38 0 -69 -31 -69 -70s31 -71 69 -71s70 32 70 71s-32 70 -70 70zM1389 366c0 -17 -70 -30 -156 -30s-156 13 -156 30s70 30 156 30s156 -13 156 -30z" /> + <glyph glyph-name="internet-explorer" unicode="" horiz-adv-x="1792" +d="M1792 599c0 -35 -2 -70 -7 -104h-1151c0 -199 175 -343 367 -343c130 0 255 64 322 177h423c-114 -321 -419 -536 -759 -536c-123 0 -246 29 -356 83c-112 -57 -269 -116 -394 -116c-168 0 -237 103 -237 263c0 93 20 186 45 275c16 58 80 176 109 229 +c123 223 285 437 475 606c-153 -66 -319 -232 -427 -354c84 366 410 625 785 625c15 0 30 0 45 -1c124 57 297 117 433 117c162 0 301 -62 301 -245c0 -96 -37 -200 -75 -286c66 -119 101 -254 101 -390zM1722 1239c0 112 -80 181 -190 181c-84 0 -179 -34 -254 -70 +c162 -63 301 -179 393 -327c25 66 51 146 51 216zM128 2c0 -116 69 -179 183 -179c89 0 188 40 266 83c-163 96 -289 249 -351 428c-46 -96 -98 -224 -98 -332zM632 715h728c-7 193 -177 332 -364 332c-188 0 -357 -139 -364 -332z" /> + <glyph glyph-name="file-video-o" unicode="" +d="M1468 1156c37 -37 68 -111 68 -164v-1152c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h896c53 0 127 -31 164 -68zM1024 1400v-376h376c-6 17 -15 34 -22 41l-313 313c-7 7 -24 16 -41 22zM1408 -128v1024h-416c-53 0 -96 43 -96 96v416 +h-768v-1536h1280zM768 768c70 0 128 -58 128 -128v-384c0 -70 -58 -128 -128 -128h-384c-70 0 -128 58 -128 128v384c0 70 58 128 128 128h384zM1260 766c12 -5 20 -17 20 -30v-576c0 -13 -8 -25 -20 -30c-4 -1 -8 -2 -12 -2c-8 0 -17 3 -23 9l-265 266v90l265 266 +c6 6 15 9 23 9c4 0 8 -1 12 -2z" /> + <glyph glyph-name="angle-double-right" unicode="" horiz-adv-x="966" +d="M582 576c0 -8 -4 -17 -10 -23l-466 -466c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-50 50c-6 6 -10 15 -10 23s4 17 10 23l393 393l-393 393c-6 6 -10 15 -10 23s4 17 10 23l50 50c6 6 15 10 23 10s17 -4 23 -10l466 -466c6 -6 10 -15 10 -23zM966 576c0 -8 -4 -17 -10 -23 +l-466 -466c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-50 50c-6 6 -10 15 -10 23s4 17 10 23l393 393l-393 393c-6 6 -10 15 -10 23s4 17 10 23l50 50c6 6 15 10 23 10s17 -4 23 -10l466 -466c6 -6 10 -15 10 -23z" /> + <glyph glyph-name="safari" unicode="" horiz-adv-x="1792" +d="M949 643c0 -33 -23 -64 -58 -64c-33 0 -64 24 -64 58c0 33 24 64 59 64c32 0 63 -23 63 -58zM964 585l350 581c-47 -44 -485 -447 -497 -468l-349 -580c46 43 485 448 496 467zM1611 640c0 -131 -36 -260 -104 -371c-10 5 -52 35 -60 35c-7 0 -13 -6 -13 -13 +c0 -13 47 -37 59 -44c-99 -150 -252 -258 -426 -301l-16 67c-1 9 -7 10 -15 10c-7 0 -11 -10 -10 -15l16 -68c-48 -10 -97 -15 -146 -15c-131 0 -260 37 -372 105c6 10 44 65 44 73c0 7 -6 13 -13 13c-14 0 -44 -60 -53 -72c-151 100 -260 255 -302 432l69 15 +c8 2 10 8 10 15s-10 11 -16 10l-68 -15c-9 46 -14 92 -14 139c0 134 38 266 109 379c10 -6 58 -39 66 -39c7 0 13 5 13 12c0 14 -53 41 -65 49c102 149 257 256 433 296l15 -67c2 -8 8 -10 15 -10s11 10 10 16l-15 66c44 8 89 13 134 13c134 0 265 -38 379 -109 +c-7 -10 -39 -57 -39 -65c0 -7 5 -13 12 -13c14 0 41 52 48 64c148 -100 254 -253 295 -427l-56 -12c-9 -2 -10 -8 -10 -16c0 -7 10 -11 15 -10l57 13c9 -46 14 -93 14 -140zM1696 640c0 442 -358 800 -800 800s-800 -358 -800 -800s358 -800 800 -800s800 358 800 800z +M1792 640c0 -495 -401 -896 -896 -896s-896 401 -896 896s401 896 896 896s896 -401 896 -896z" /> + <glyph glyph-name="commenting-o" unicode="" horiz-adv-x="1792" +d="M640 640c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128s128 -57 128 -128zM1024 640c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128s128 -57 128 -128zM1408 640c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128s128 -57 128 -128z +M896 1152c-416 0 -768 -234 -768 -512c0 -149 100 -291 273 -389l87 -50l-27 -96c-19 -71 -44 -126 -70 -172c101 42 193 99 275 171l43 38l57 -6c43 -5 87 -8 130 -8c416 0 768 234 768 512s-352 512 -768 512zM1792 640c0 -354 -401 -640 -896 -640c-49 0 -98 3 -145 8 +c-131 -116 -287 -198 -460 -242c-36 -10 -75 -17 -114 -22h-5c-20 0 -38 16 -43 38v1c-5 25 12 40 27 58c63 71 135 131 182 298c-206 117 -338 298 -338 501c0 353 401 640 896 640s896 -287 896 -640z" /> + <glyph glyph-name="snowdrift" unicode="" horiz-adv-x="1448" +d="M1007 384c104 116 30 287 -165 383c7 -6 44 24 83 67s65 84 58 90c-195 96 -438 80 -542 -36s-30 -287 165 -383c-7 6 -44 -24 -83 -67s-65 -84 -58 -90c195 -96 438 -80 542 36zM103 1188v0c228 253 760 288 1188 78c15 -14 -42 -101 -127 -196s-167 -161 -182 -147 +c428 -210 591 -585 363 -839c-228 -253 -760 -288 -1188 -78c-15 14 42 101 127 196s167 161 182 147c-428 210 -591 585 -363 839z" /> + <glyph glyph-name="black-tie" unicode="" +d="M0 1408h1536v-1536h-1536v1536zM1085 293l-221 631l221 297h-634l221 -297l-221 -631l317 -304z" /> + <glyph glyph-name="youtube-play" unicode="" horiz-adv-x="1792" +d="M711 408l484 250l-484 253v-503zM896 1270c377 0 627 -18 627 -18c35 -4 112 -4 180 -76c0 0 55 -54 71 -178c19 -145 18 -290 18 -290v-136s1 -145 -18 -290c-16 -123 -71 -178 -71 -178c-68 -71 -145 -71 -180 -75c0 0 -250 -19 -627 -19c-466 4 -609 18 -609 18 +c-40 7 -130 5 -198 76c0 0 -55 55 -71 178c-19 145 -18 290 -18 290v136s-1 145 18 290c16 124 71 178 71 178c68 72 145 72 180 76c0 0 250 18 627 18z" /> + <glyph glyph-name="modx" unicode="" horiz-adv-x="1728" +d="M1395 827l-614 386l92 151h855zM373 562l-184 116v858l1183 -743zM1392 697l147 -95v-858l-532 335zM1355 718l-500 -802h-855l356 571z" /> + <glyph glyph-name="caret-square-o-right" unicode="" +d="M1088 640c0 -21 -10 -40 -27 -52l-448 -320c-19 -14 -45 -16 -66 -5c-22 11 -35 33 -35 57v640c0 24 13 46 35 57c21 11 47 9 66 -5l448 -320c17 -12 27 -31 27 -52zM1280 160v960c0 18 -14 32 -32 32h-960c-18 0 -32 -14 -32 -32v-960c0 -18 14 -32 32 -32h960 +c18 0 32 14 32 32zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" /> + <glyph glyph-name="gitlab" unicode="" horiz-adv-x="1793" +d="M104 830l792 -1015l-868 630c-24 18 -34 49 -25 77zM566 830h660l-330 -1015zM368 1442l198 -612h-462l198 612c11 31 55 31 66 0zM1688 830l101 -308c9 -28 -1 -59 -25 -77l-868 -630zM1688 830h-462l198 612c11 31 55 31 66 0z" /> + <glyph glyph-name="arrows" unicode="" horiz-adv-x="1792" +d="M1792 640c0 -17 -7 -33 -19 -45l-256 -256c-12 -12 -28 -19 -45 -19c-35 0 -64 29 -64 64v128h-384v-384h128c35 0 64 -29 64 -64c0 -17 -7 -33 -19 -45l-256 -256c-12 -12 -28 -19 -45 -19s-33 7 -45 19l-256 256c-12 12 -19 28 -19 45c0 35 29 64 64 64h128v384h-384 +v-128c0 -35 -29 -64 -64 -64c-17 0 -33 7 -45 19l-256 256c-12 12 -19 28 -19 45s7 33 19 45l256 256c12 12 28 19 45 19c35 0 64 -29 64 -64v-128h384v384h-128c-35 0 -64 29 -64 64c0 17 7 33 19 45l256 256c12 12 28 19 45 19s33 -7 45 -19l256 -256 +c12 -12 19 -28 19 -45c0 -35 -29 -64 -64 -64h-128v-384h384v128c0 35 29 64 64 64c17 0 33 -7 45 -19l256 -256c12 -12 19 -28 19 -45z" /> + <glyph glyph-name="refresh" unicode="" +d="M1511 480c0 -2 0 -5 -1 -7c-85 -354 -377 -601 -746 -601c-195 0 -384 77 -526 212l-129 -129c-12 -12 -28 -19 -45 -19c-35 0 -64 29 -64 64v448c0 35 29 64 64 64h448c35 0 64 -29 64 -64c0 -17 -7 -33 -19 -45l-137 -137c94 -88 219 -138 348 -138 +c178 0 343 92 436 244c24 39 36 77 53 117c5 14 15 23 30 23h192c18 0 32 -15 32 -32zM1536 1280v-448c0 -35 -29 -64 -64 -64h-448c-35 0 -64 29 -64 64c0 17 7 33 19 45l138 138c-95 88 -220 137 -349 137c-178 0 -343 -92 -436 -244c-24 -39 -36 -77 -53 -117 +c-5 -14 -15 -23 -30 -23h-199c-18 0 -32 15 -32 32v7c86 355 381 601 750 601c196 0 387 -78 529 -212l130 129c12 12 28 19 45 19c35 0 64 -29 64 -64z" /> + <glyph glyph-name="file-o" unicode="" +d="M1468 1156c37 -37 68 -111 68 -164v-1152c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h896c53 0 127 -31 164 -68zM1024 1400v-376h376c-6 17 -15 34 -22 41l-313 313c-7 7 -24 16 -41 22zM1408 -128v1024h-416c-53 0 -96 43 -96 96v416 +h-768v-1536h1280z" /> + <glyph glyph-name="battery-three-quarters" unicode="" horiz-adv-x="2304" +d="M256 256v768h1280v-768h-1280zM2176 960c71 0 128 -57 128 -128v-384c0 -71 -57 -128 -128 -128v-160c0 -88 -72 -160 -160 -160h-1856c-88 0 -160 72 -160 160v960c0 88 72 160 160 160h1856c88 0 160 -72 160 -160v-160zM2176 448v384h-128v288c0 18 -14 32 -32 32 +h-1856c-18 0 -32 -14 -32 -32v-960c0 -18 14 -32 32 -32h1856c18 0 32 14 32 32v288h128z" /> + <glyph glyph-name="reddit-alien" unicode="" horiz-adv-x="1792" +d="M1792 690c0 -78 -44 -145 -109 -178c8 -31 12 -63 12 -96c0 -316 -357 -572 -797 -572c-439 0 -796 256 -796 572c0 32 4 64 11 94c-67 33 -113 101 -113 180c0 110 89 199 199 199c57 0 108 -24 145 -63c135 94 315 155 515 162l116 521c4 18 23 30 41 26l369 -81 +c24 48 75 82 133 82c83 0 150 -67 150 -149c0 -83 -67 -150 -150 -150c-82 0 -149 67 -149 149l-334 74l-104 -472c201 -6 383 -66 519 -160c36 38 87 61 143 61c110 0 199 -89 199 -199zM418 491c0 -83 67 -150 149 -150c83 0 150 67 150 150c0 82 -67 149 -150 149 +c-82 0 -149 -67 -149 -149zM1228 136c15 15 15 37 0 52c-14 14 -37 14 -51 0c-60 -61 -189 -82 -281 -82s-221 21 -281 82c-14 14 -37 14 -51 0c-15 -14 -15 -37 0 -52c95 -95 278 -102 332 -102s237 7 332 102zM1225 341c82 0 149 67 149 150c0 82 -67 149 -149 149 +c-83 0 -150 -67 -150 -149c0 -83 67 -150 150 -150z" /> + <glyph glyph-name="square" unicode="" +d="M1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" /> + <glyph glyph-name="ellipsis-v" unicode="" horiz-adv-x="384" +d="M384 288v-192c0 -53 -43 -96 -96 -96h-192c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h192c53 0 96 -43 96 -96zM384 800v-192c0 -53 -43 -96 -96 -96h-192c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h192c53 0 96 -43 96 -96zM384 1312v-192c0 -53 -43 -96 -96 -96h-192 +c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h192c53 0 96 -43 96 -96z" /> + <glyph glyph-name="glide-g" unicode="" horiz-adv-x="1461" +d="M707 1231c0 53 -5 99 -69 99c-27 0 -54 -9 -78 -23c-151 -83 -213 -298 -213 -460c0 -108 37 -252 169 -252c30 0 68 -8 76 27c32 154 64 309 96 463c10 48 19 97 19 146zM1461 575c0 -10 -13 -20 -23 -20l-6 1c-68 10 -128 28 -197 28c-125 0 -240 -37 -351 -93 +c-14 -7 -17 -13 -21 -27c-18 -68 -30 -138 -47 -206c-60 -233 -255 -514 -522 -514c-182 0 -294 124 -294 303c0 97 63 286 180 286c41 0 202 -53 203 -95c-2 -8 -157 -88 -157 -223c0 -41 20 -73 65 -73c159 0 232 290 248 412v9c0 8 -32 4 -38 4c-301 0 -477 168 -477 471 +c0 286 186 635 491 688c35 6 70 9 106 9c242 0 374 -113 374 -360c0 -167 -57 -321 -81 -484l3 -3c108 61 222 119 350 119c13 0 41 -8 53 -13c26 -10 141 -191 141 -219z" /> + <glyph glyph-name="globe" unicode="" +d="M768 1404c424 0 768 -344 768 -768s-344 -768 -768 -768s-768 344 -768 768s344 768 768 768zM737 1186v0c-18 0 -40 -7 -58 -7c-27 0 -61 12 -81 0s-18 -37 -27 -55s-28 -34 -28 -54s19 -36 28 -54s2 -47 27 -54s54 36 81 54s69 32 81 54s0 36 0 54s16 39 0 55 +c-5 5 -14 7 -23 7zM491 1178h-6s-44 -8 -76 -13c-136 -92 -261 -300 -278 -464c23 -12 46 -22 60 -36c27 -27 83 -27 88 -56s-24 -62 -33 -80s-31 -31 -27 -54s36 -36 54 -54s37 -22 54 -54s20 -98 27 -135c9 -47 23 -85 44 -118c27 -19 72 -44 102 -58c10 28 10 93 16 122 +c7 37 13 109 27 135s19 19 28 28s18 15 28 28s17 34 26 52s30 31 26 53s-36 37 -54 55s-29 39 -55 54s-73 18 -101 25s-127 12 -129 13c-2 0 -1 -6 -7 2s-2 39 -2 57s11 34 24 66c13 18 5 10 25 24c10 9 43 -44 57 -44s-3 91 6 100c36 36 128 98 128 136s-37 36 -55 54 +s-46 -30 -111 -30s76 103 85 112s23 17 27 27s0 18 0 27s12 22 8 25c-2 1 -4 1 -6 1zM1212 1096c-62 -8 -139 -10 -182 -26c-45 -17 -54 -36 -81 -54s-67 -28 -81 -54s0 -54 0 -81s-26 -68 0 -82s55 37 82 55s63 64 81 54s6 -7 0 -27s-51 -41 -52 -81s102 -73 68 -126 +s-188 46 -232 17s-19 -54 -28 -81s-37 -52 -27 -81s52 -34 81 -54s81 -56 82 -58s20 -99 27 -135c14 -73 -27 -199 76 -231c31 14 78 41 106 60c13 34 24 72 35 94c22 44 71 123 80 161s0 37 0 55s7 30 0 54s-36 54 -54 81s-34 64 -54 81s-46 18 -54 27s-4 8 -4 13 +s-4 7 5 14s34 8 54 0s36 -36 54 -54s25 -51 54 -54s54 36 81 54c25 17 52 56 76 55c-12 131 -98 312 -193 404z" /> + <glyph glyph-name="hashnode" unicode="" +d="M246 1408h1044c136 0 246 -110 246 -246v-1044c0 -136 -110 -246 -246 -246h-1044c-136 0 -246 110 -246 246v1044c0 136 110 246 246 246zM1153 23v0c87 1 158 71 162 158s-62 162 -149 171l-315 556c-46 83 -135 78 -167 -39c-28 -111 -20 -216 -28 -342 +c0 -1 -1 -2 -2 -2s-2 1 -2 1l-281 560c20 16 37 50 37 75c0 52 -41 93 -93 93s-94 -41 -94 -93s42 -93 94 -93c4 0 7 1 11 1c118 -304 250 -659 297 -741c32 -78 141 -53 144 31l12 444c0 3 3 3 4 1l226 -537c-11 -20 -21 -55 -21 -78v-1c0 -91 74 -165 165 -165z" /> + <glyph glyph-name="comment-o" unicode="" horiz-adv-x="1792" +d="M896 1152c-416 0 -768 -234 -768 -512c0 -149 100 -291 273 -389l87 -50l-27 -96c-19 -71 -44 -126 -70 -172c101 42 193 99 275 171l43 38l57 -6c43 -5 87 -8 130 -8c416 0 768 234 768 512s-352 512 -768 512zM1792 640c0 -354 -401 -640 -896 -640c-49 0 -98 3 -145 8 +c-131 -116 -287 -198 -460 -242c-36 -10 -75 -17 -114 -22h-5c-20 0 -38 16 -43 38v1c-5 25 12 40 27 58c63 71 135 131 182 298c-206 117 -338 298 -338 501c0 354 401 640 896 640s896 -286 896 -640z" /> + <glyph glyph-name="bluetooth" unicode="" horiz-adv-x="1322" +d="M734 483l148 -148l-149 -149zM733 1094l149 -149l-148 -148zM603 -130l464 464l-306 306l306 306l-464 464v-611l-255 255l-93 -93l320 -321l-320 -321l93 -93l255 255v-611zM1322 640c0 -710 -270 -896 -661 -896s-661 186 -661 896s270 896 661 896s661 -186 661 -896z +" /> + <glyph glyph-name="hand-pointer-o" unicode="" horiz-adv-x="1664" +d="M640 1408c-71 0 -128 -57 -128 -128v-896l-151 202c-25 33 -65 54 -107 54c-70 0 -126 -59 -126 -128c0 -28 9 -55 26 -77l384 -512c24 -32 62 -51 102 -51h718c29 0 55 20 62 48l92 368c16 64 24 129 24 194v217c0 53 -41 101 -96 101c-53 0 -96 -43 -96 -96h-32v61 +c0 63 -48 115 -112 115c-62 0 -112 -50 -112 -112v-64h-32v90c0 72 -55 134 -128 134c-71 0 -128 -57 -128 -128v-96h-32v570c0 72 -55 134 -128 134zM640 1536c143 0 256 -120 256 -262v-220c11 1 21 2 32 2c65 0 126 -25 173 -69c31 14 65 21 99 21c72 0 139 -32 184 -87 +c19 5 37 7 56 7c126 0 224 -105 224 -229v-217c0 -75 -9 -151 -28 -225l-92 -368c-21 -85 -98 -145 -186 -145h-718c-80 0 -157 39 -205 102l-384 512c-33 44 -51 99 -51 154c0 140 114 256 254 256c46 0 91 -12 130 -35v547c0 141 115 256 256 256zM768 128h-32v384h32 +v-384zM1024 128h-32v384h32v-384zM1280 128h-32v384h32v-384z" /> + <glyph glyph-name="unlock" unicode="" horiz-adv-x="1664" +d="M1664 960v-256c0 -35 -29 -64 -64 -64h-64c-35 0 -64 29 -64 64v256c0 141 -115 256 -256 256s-256 -115 -256 -256v-192h96c53 0 96 -43 96 -96v-576c0 -53 -43 -96 -96 -96h-960c-53 0 -96 43 -96 96v576c0 53 43 96 96 96h672v192c0 247 201 448 448 448 +s448 -201 448 -448z" /> + <glyph glyph-name="quote-right" unicode="" horiz-adv-x="1664" +d="M768 1216v-704c0 -282 -230 -512 -512 -512h-64c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h64c141 0 256 115 256 256v32c0 53 -43 96 -96 96h-224c-106 0 -192 86 -192 192v384c0 106 86 192 192 192h384c106 0 192 -86 192 -192zM1664 1216v-704 +c0 -282 -230 -512 -512 -512h-64c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h64c141 0 256 115 256 256v32c0 53 -43 96 -96 96h-224c-106 0 -192 86 -192 192v384c0 106 86 192 192 192h384c106 0 192 -86 192 -192z" /> + <glyph glyph-name="arrow-left" unicode="" horiz-adv-x="1472" +d="M1472 640v-128c0 -68 -45 -128 -117 -128h-704l293 -294c24 -23 38 -56 38 -90s-14 -67 -38 -90l-75 -76c-23 -23 -56 -37 -90 -37s-67 14 -91 37l-651 652c-23 23 -37 56 -37 90s14 67 37 91l651 650c24 24 57 38 91 38s66 -14 90 -38l75 -74c24 -24 38 -57 38 -91 +s-14 -67 -38 -91l-293 -293h704c72 0 117 -60 117 -128z" /> + <glyph glyph-name="scissors" unicode="" horiz-adv-x="1792" +d="M960 640c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM1260 576l507 -398c18 -13 27 -35 25 -56c-3 -22 -16 -41 -35 -51l-128 -64c-9 -5 -19 -7 -29 -7c-11 0 -22 3 -31 8l-690 387l-110 -66c-4 -2 -8 -4 -12 -5c9 -31 13 -64 10 -97 +c-9 -103 -78 -201 -188 -271c-85 -54 -183 -84 -277 -84c-90 0 -166 27 -222 78c-57 53 -86 129 -79 207c9 102 78 201 187 271c85 54 184 84 278 84c56 0 107 -11 151 -31c6 9 13 16 22 22l122 73l-122 73c-9 6 -16 13 -22 22c-44 -20 -95 -31 -151 -31 +c-94 0 -193 30 -278 84c-109 70 -178 169 -187 271c-7 78 22 154 79 206c56 52 132 79 222 79c94 0 192 -30 277 -84c110 -69 179 -168 188 -271c3 -33 -1 -66 -10 -97c4 -1 8 -3 12 -5l110 -66l690 387c9 5 20 8 31 8c10 0 20 -2 29 -7l128 -64c19 -10 32 -29 35 -51 +c2 -21 -7 -43 -25 -56zM579 836c61 56 23 157 -85 225c-61 39 -132 59 -192 59c-46 0 -87 -12 -113 -36c-61 -56 -23 -157 85 -225c61 -39 131 -59 192 -59c46 0 87 12 113 36zM494 91c108 68 146 169 85 225c-26 24 -67 36 -113 36c-61 0 -131 -20 -192 -59 +c-108 -68 -146 -169 -85 -225c26 -24 67 -36 113 -36c60 0 131 20 192 59zM672 704l96 -58v11c0 23 13 44 33 56l14 8l-79 47l-26 -26c-8 -8 -14 -16 -22 -23c-3 -3 -5 -4 -7 -6zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8c2 -3 4 -4 7 -6 +c8 -8 14 -16 22 -24l26 -26zM1600 64l128 64l-520 408l-177 -138c-3 -4 -8 -5 -13 -7z" /> + <glyph glyph-name="ellipsis-h" unicode="" horiz-adv-x="1408" +d="M384 800v-192c0 -53 -43 -96 -96 -96h-192c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h192c53 0 96 -43 96 -96zM896 800v-192c0 -53 -43 -96 -96 -96h-192c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h192c53 0 96 -43 96 -96zM1408 800v-192c0 -53 -43 -96 -96 -96h-192 +c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h192c53 0 96 -43 96 -96z" /> + <glyph glyph-name="scribd" unicode="" horiz-adv-x="1464" +d="M1464 -13c0 -119 -96 -216 -216 -216s-217 97 -217 216c0 120 97 217 217 217s216 -97 216 -217zM1231 268c-152 -20 -270 -150 -270 -308c0 -49 12 -97 33 -138c-90 -48 -212 -78 -379 -78c-532 0 -615 376 -615 426c0 51 30 218 218 218s214 -161 214 -194 +c0 0 0 -34 -23 -81c64 -60 215 -60 215 -60c151 0 265 74 265 184c0 111 -128 165 -420 302c-292 138 -402 239 -402 490c0 252 168 507 587 507s577 -235 577 -396s-137 -201 -188 -201c-50 0 -235 -17 -235 261c-33 37 -177 37 -177 37c-145 0 -209 -110 -209 -177 +c0 -68 27 -152 329 -252c463 -154 480 -355 480 -540z" /> + <glyph glyph-name="exclamation" unicode="" horiz-adv-x="444" +d="M414 288v-224c0 -35 -29 -64 -64 -64h-256c-35 0 -64 29 -64 64v224c0 35 29 64 64 64h256c35 0 64 -29 64 -64zM444 1344l-28 -768c-1 -35 -31 -64 -66 -64h-256c-35 0 -65 29 -66 64l-28 768c-1 35 27 64 62 64h320c35 0 63 -29 62 -64z" /> + <glyph glyph-name="try" unicode="" horiz-adv-x="1152" +d="M1152 704c0 -388 -316 -704 -704 -704h-160c-18 0 -32 14 -32 32v611l-215 -66c-3 -1 -6 -1 -9 -1c-7 0 -13 2 -19 6c-8 6 -13 16 -13 26v128c0 14 9 26 23 31l233 71v93l-215 -66c-3 -1 -6 -1 -9 -1c-7 0 -13 2 -19 6c-8 6 -13 16 -13 26v128c0 14 9 26 23 31l233 71 +v250c0 18 14 32 32 32h160c18 0 32 -14 32 -32v-181l375 116c9 3 20 1 28 -5s13 -16 13 -26v-128c0 -14 -9 -26 -23 -31l-393 -121v-93l375 116c9 3 20 1 28 -5s13 -16 13 -26v-128c0 -14 -9 -26 -23 -31l-393 -121v-487c250 17 448 225 448 479c0 18 14 32 32 32h160 +c18 0 32 -14 32 -32z" /> + <glyph glyph-name="assistive-listening-systems" unicode="" horiz-adv-x="1792" +d="M128 -192c0 -35 -29 -64 -64 -64s-64 29 -64 64s29 64 64 64s64 -29 64 -64zM320 0c0 -35 -29 -64 -64 -64s-64 29 -64 64s29 64 64 64s64 -29 64 -64zM365 365l256 -256l-90 -90l-256 256zM704 384c0 -35 -29 -64 -64 -64s-64 29 -64 64s29 64 64 64s64 -29 64 -64z +M1411 704c0 -166 -78 -255 -146 -334c-63 -72 -113 -129 -113 -242c0 -212 -172 -384 -384 -384c-35 0 -64 29 -64 64s29 64 64 64c141 0 256 115 256 256c0 161 77 249 144 326c62 71 115 132 115 250c0 247 -201 448 -448 448s-448 -201 -448 -448c0 -35 -29 -64 -64 -64 +s-64 29 -64 64c0 318 258 576 576 576s576 -258 576 -576zM896 576c0 -35 -29 -64 -64 -64s-64 29 -64 64s29 64 64 64s64 -29 64 -64zM1184 704c0 -35 -29 -64 -64 -64s-64 29 -64 64c0 124 -100 224 -224 224c-123 0 -224 -100 -224 -224c0 -35 -29 -64 -64 -64 +s-64 29 -64 64c0 194 158 352 352 352s352 -158 352 -352zM1578 993c13 -33 -4 -70 -37 -83c-7 -3 -15 -4 -23 -4c-25 0 -50 15 -59 41c-45 117 -123 219 -224 295c-28 21 -34 61 -13 89c22 28 62 34 90 13c120 -90 212 -212 266 -351zM1788 1074c12 -33 -4 -70 -37 -83 +c-8 -3 -15 -4 -23 -4c-26 0 -50 15 -60 41c-60 156 -163 292 -297 393c-29 21 -34 61 -13 89c21 29 61 34 89 13c154 -115 272 -271 341 -449z" /> + <glyph glyph-name="flag-o" unicode="" horiz-adv-x="1728" +d="M1600 491v616c-80 -43 -192 -91 -306 -91c-53 0 -102 10 -145 32c-107 53 -223 104 -362 104c-129 0 -287 -63 -403 -127v-599c132 61 300 113 433 113c154 0 254 -51 361 -104l28 -14c28 -14 62 -22 101 -22c111 0 231 59 293 92zM256 1280c0 -47 -26 -88 -64 -110 +v-1266c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v1266c-38 22 -64 63 -64 110c0 71 57 128 128 128s128 -57 128 -128zM1728 1216v-763c0 -24 -14 -46 -35 -57c-4 -2 -10 -5 -17 -9c-64 -34 -215 -116 -369 -116c-59 0 -112 12 -158 35l-28 14 +c-101 51 -181 91 -304 91c-144 0 -347 -75 -464 -146c-10 -6 -22 -9 -33 -9s-22 3 -32 8c-20 12 -32 33 -32 56v742c0 22 12 43 31 55c64 38 290 163 500 163c167 0 303 -61 418 -117c26 -13 56 -19 89 -19c118 0 248 75 310 112c13 7 24 13 31 17c20 10 43 9 62 -2 +c19 -12 31 -33 31 -55z" /> + <glyph glyph-name="wikipedia-w" unicode="" horiz-adv-x="2304" +d="M1494 -103l-295 695c-117 -229 -246 -468 -357 -695c-1 -1 -54 0 -54 1c-169 395 -346 787 -515 1183c-41 96 -178 252 -272 251c0 11 -1 36 -1 51h583v-50c-69 -4 -190 -48 -156 -123c79 -179 373 -865 452 -1039c54 107 208 393 271 514c-50 102 -211 482 -262 576 +c-35 64 -130 70 -201 71v50l513 -1v-47c-70 -2 -137 -28 -106 -94c68 -144 110 -245 173 -377c20 39 125 250 173 363c32 74 -14 103 -139 106c1 13 0 37 1 49c160 1 400 1 443 2v-49c-81 -3 -165 -46 -209 -114l-213 -442c23 -58 228 -514 249 -564l441 1017 +c-31 83 -131 101 -170 102v50l460 -4l1 -2l-1 -44c-101 -3 -162 -57 -201 -145c-90 -208 -372 -864 -559 -1291h-49z" /> + <glyph glyph-name="battery-quarter" unicode="" horiz-adv-x="2304" +d="M256 256v768h512v-768h-512zM2176 960c71 0 128 -57 128 -128v-384c0 -71 -57 -128 -128 -128v-160c0 -88 -72 -160 -160 -160h-1856c-88 0 -160 72 -160 160v960c0 88 72 160 160 160h1856c88 0 160 -72 160 -160v-160zM2176 448v384h-128v288c0 18 -14 32 -32 32h-1856 +c-18 0 -32 -14 -32 -32v-960c0 -18 14 -32 32 -32h1856c18 0 32 14 32 32v288h128z" /> + <glyph glyph-name="print" unicode="" horiz-adv-x="1664" +d="M384 0h896v256h-896v-256zM384 640h896v384h-160c-53 0 -96 43 -96 96v160h-640v-640zM1536 576c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1664 576v-416c0 -17 -15 -32 -32 -32h-224v-160c0 -53 -43 -96 -96 -96h-960c-53 0 -96 43 -96 96v160 +h-224c-17 0 -32 15 -32 32v416c0 105 87 192 192 192h64v544c0 53 43 96 96 96h672c53 0 126 -30 164 -68l152 -152c38 -38 68 -111 68 -164v-256h64c105 0 192 -87 192 -192z" /> + <glyph glyph-name="tipeee" unicode="" horiz-adv-x="2304" +d="M116 1259h2072c64 0 116 -52 116 -116v-1006c0 -64 -52 -116 -116 -116h-2072c-64 0 -116 52 -116 116v1006c0 64 52 116 116 116zM756 1006v0c-59 0 -90 -47 -90 -85c0 -40 37 -84 90 -84c59 0 92 38 92 84c0 38 -34 85 -92 85zM1672 966v-159l45 -211h110l45 211v159 +h-200zM534 925l-154 -49v-77h-45v-109h45v-148c3 -107 7 -176 132 -176c19 0 77 6 102 16v107c-16 -7 -42 -14 -53 -14c-33 0 -27 39 -27 67v148h80v109h-80v126zM1212 806v0c-50 0 -85 -24 -101 -36l-14 29h-192v-111h35v-368h-35v-109h250v109h-45v85c6 -5 40 -33 109 -33 +c108 0 190 82 190 215c0 119 -67 219 -197 219zM643 799v-109h35v-199h-35v-110h234v110h-40v308h-194zM1169 688v0c37 0 61 -53 61 -103c0 -64 -25 -104 -60 -104c-32 0 -60 43 -60 100c-3 66 26 107 59 107zM1764 555c-60 0 -95 -47 -95 -89c0 -43 41 -86 95 -86 +c61 0 99 39 99 86c0 48 -40 89 -99 89z" /> + <glyph glyph-name="check-circle-o" unicode="" +d="M1171 723l-422 -422c-25 -25 -65 -25 -90 0l-294 294c-25 25 -25 65 0 90l102 102c25 25 65 25 90 0l147 -147l275 275c25 25 65 25 90 0l102 -102c25 -25 25 -65 0 -90zM1312 640c0 300 -244 544 -544 544s-544 -244 -544 -544s244 -544 544 -544s544 244 544 544z +M1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" /> + <glyph glyph-name="level-up" unicode="" horiz-adv-x="1024" +d="M1018 933c-11 -23 -33 -37 -58 -37h-192v-864c0 -18 -14 -32 -32 -32h-704c-12 0 -24 7 -29 18c-5 12 -4 25 4 35l160 192c6 7 16 11 25 11h320v640h-192c-25 0 -47 14 -58 37c-10 22 -7 49 9 68l320 384c24 29 74 29 98 0l320 -384c16 -19 20 -46 9 -68z" /> + <glyph glyph-name="houzz" unicode="" horiz-adv-x="1024" +d="M512 345l512 295v-591l-512 -296v592zM0 640l512 -295l-512 -296v591zM512 1527v-591l-512 -296v591zM512 936l512 295v-591z" /> + <glyph glyph-name="lemon-o" unicode="" horiz-adv-x="1535" +d="M1407 710c0 47 -9 170 -25 210c-19 48 -30 75 -30 129c0 46 10 91 10 136c0 19 -1 39 -10 55c-4 1 -9 1 -13 1c-39 0 -78 -9 -117 -9c-119 0 -232 48 -351 48c-93 0 -183 -35 -269 -69c-68 -27 -143 -59 -202 -103c-202 -153 -272 -433 -272 -674c0 -81 25 -160 25 -241 +c0 -46 -22 -88 -22 -132c0 -28 16 -51 46 -51c49 0 96 22 146 22c114 0 225 -31 339 -31c89 0 201 7 284 36c263 93 461 397 461 673zM1535 712c0 -333 -231 -684 -547 -796c-99 -35 -222 -44 -326 -44c-114 0 -226 29 -339 29c-48 0 -96 -29 -146 -29 +c-99 0 -174 89 -174 184c0 47 22 89 22 135c0 81 -25 160 -25 242c0 284 87 598 323 777c68 52 153 89 232 120c102 41 205 78 316 78c119 0 232 -48 349 -48c38 0 76 10 115 10c114 0 155 -81 155 -185c0 -45 -10 -91 -10 -136c0 -36 9 -50 21 -82c23 -58 34 -191 34 -255z +" /> + <glyph glyph-name="umbrella" unicode="" horiz-adv-x="1664" +d="M896 708v-580c0 -139 -117 -256 -256 -256s-256 117 -256 256c0 35 29 64 64 64s64 -29 64 -64c0 -67 61 -128 128 -128s128 61 128 128v580c21 7 42 11 64 11s43 -4 64 -11zM1664 681c0 -17 -15 -32 -32 -32c-9 0 -16 4 -23 10c-58 54 -112 92 -195 92 +c-95 0 -177 -59 -231 -134c-12 -17 -21 -35 -32 -52c-7 -11 -15 -17 -28 -17c-14 0 -22 6 -29 17c-11 17 -20 35 -32 52c-54 75 -135 134 -230 134s-176 -59 -230 -134c-12 -17 -21 -35 -32 -52c-7 -11 -15 -17 -29 -17c-13 0 -21 6 -28 17c-11 17 -20 35 -32 52 +c-54 75 -136 134 -231 134c-83 0 -137 -38 -195 -92c-7 -6 -14 -10 -23 -10c-17 0 -32 15 -32 32c0 3 0 5 1 7c92 378 457 592 831 592c372 0 741 -214 831 -592c1 -2 1 -4 1 -7zM896 1408v-98c-21 1 -43 2 -64 2s-43 -1 -64 -2v98c0 35 29 64 64 64s64 -29 64 -64z" /> + <glyph glyph-name="bell-o" unicode="" horiz-adv-x="1664" +d="M848 -160c0 9 -7 16 -16 16c-79 0 -144 65 -144 144c0 9 -7 16 -16 16s-16 -7 -16 -16c0 -97 79 -176 176 -176c9 0 16 7 16 16zM1664 128c0 -70 -58 -128 -128 -128h-448c0 -141 -115 -256 -256 -256s-256 115 -256 256h-448c-70 0 -128 58 -128 128 +c148 125 320 349 320 832c0 192 159 402 424 441c-5 12 -8 25 -8 39c0 53 43 96 96 96s96 -43 96 -96c0 -14 -3 -27 -8 -39c265 -39 424 -249 424 -441c0 -483 172 -707 320 -832z" /> + <glyph glyph-name="shaarli" unicode="" horiz-adv-x="1651" +d="M878 1408c161 0 254 -160 278 -479h66c287 -44 429 -135 426 -273c24 -163 -80 -238 -312 -226c178 -156 241 -302 191 -437c-39 -108 -133 -143 -282 -107c-164 82 -281 176 -349 282h-43c-64 -188 -188 -282 -372 -282h-64c-153 47 -209 140 -166 278l80 221h-23 +c-225 32 -326 131 -305 298c6 153 160 231 462 233c84 9 119 36 105 80c0 275 103 412 308 412zM830 1182c-56 4 -83 -72 -82 -227l-5 -128c-5 -64 -25 -96 -61 -96l-360 -20c-56 -2 -85 -25 -85 -69c0 -43 31 -65 92 -68c211 11 310 -4 296 -43l-64 -137 +c-108 -163 -135 -258 -80 -287c73 -44 176 70 310 342c32 29 59 29 80 0c94 -100 171 -182 232 -246c62 -64 113 -83 151 -57c46 49 33 101 -37 157c-68 58 -146 137 -234 237c-9 33 -8 50 6 50c298 -20 441 -1 429 57c9 64 -121 96 -388 96c-41 -8 -74 2 -100 29v224 +c0 125 -30 186 -89 184c-3 1 -8 2 -11 2v0z" /> + <glyph glyph-name="cc-diners-club" unicode="" horiz-adv-x="2304" +d="M858 295v693c-139 -54 -238 -189 -238 -347s99 -293 238 -346zM1362 641c0 158 -99 293 -238 347v-694c139 54 238 189 238 347zM1577 641c0 -323 -262 -586 -586 -586c-323 0 -586 263 -586 586c0 324 263 586 586 586c324 0 586 -262 586 -586zM1960 634 +c0 382 -319 646 -669 646h-301c-354 0 -646 -264 -646 -646c0 -349 292 -634 646 -634h301c350 0 669 285 669 634zM2304 1280v-1280c0 -70 -58 -128 -128 -128h-2048c-70 0 -128 58 -128 128v1280c0 70 58 128 128 128h2048c70 0 128 -58 128 -128z" /> + <glyph glyph-name="undo" unicode="" +d="M1536 640c0 -423 -345 -768 -768 -768c-229 0 -445 101 -591 277c-10 13 -9 32 2 43l137 138c7 6 16 9 25 9c9 -1 18 -5 23 -12c98 -127 245 -199 404 -199c282 0 512 230 512 512s-230 512 -512 512c-131 0 -255 -50 -348 -137l137 -138c19 -18 24 -46 14 -69 +c-10 -24 -33 -40 -59 -40h-448c-35 0 -64 29 -64 64v448c0 26 16 49 40 59c23 10 51 5 69 -14l130 -129c141 133 332 212 529 212c423 0 768 -345 768 -768z" /> + <glyph glyph-name="rebel" unicode="" horiz-adv-x="1756" +d="M0 662c10 286 156 550 421 724c1 0 7 2 4 -3c-21 -20 -402 -469 -51 -818c180 -179 325 -9 325 -9c139 181 -2 455 -2 455c-36 90 -165 145 -165 145l104 115c88 -38 156 -140 156 -140c3 107 -79 222 -79 222l161 183l160 -181c-74 -104 -79 -226 -79 -226 +c50 83 157 142 157 142l103 -115c-99 -32 -164 -144 -164 -144c-57 -103 -98 -323 2 -460c117 -161 317 10 317 10c371 332 -38 813 -38 813c-22 20 3 10 3 10c181 -132 414 -305 420 -740c7 -526 -361 -901 -876 -901c-503 0 -894 420 -879 918z" /> + <glyph glyph-name="codiepie" unicode="" horiz-adv-x="1723" +d="M1584 246l-218 111c-98 -160 -272 -258 -460 -258c-298 0 -539 241 -539 538c0 298 241 539 539 539c175 0 339 -85 440 -229l215 125c-147 226 -396 361 -665 361c-438 0 -793 -355 -793 -793s355 -793 793 -793c284 0 547 152 688 399zM1030 643l693 -352 +c-152 -332 -457 -547 -827 -547c-495 0 -896 401 -896 896s401 896 896 896c352 0 642 -194 806 -500zM1543 640h-39v-160h-96v352h136c111 0 121 -192 -1 -192z" /> + <glyph glyph-name="soundcloud" unicode="" horiz-adv-x="2304" +d="M784 164c-1 -13 -11 -23 -24 -23c-12 0 -22 10 -23 23l-14 241l14 523c0 13 11 24 23 24c13 0 23 -11 24 -24l16 -523zM1080 193l-1 -24c0 -8 -3 -15 -9 -20c-5 -5 -12 -9 -20 -9c-9 0 -17 4 -23 11c-4 5 -6 11 -6 17v1c-11 235 -11 236 -11 236l10 579l1 6 +c0 10 5 19 13 24c5 3 10 5 16 5s11 -2 16 -5c8 -5 13 -14 13 -24l12 -586zM35 533l20 -128l-20 -126c-1 -5 -4 -9 -9 -9s-8 4 -9 9l-17 126l17 128c1 5 4 9 9 9s8 -4 9 -9zM121 612l26 -207l-26 -203c-1 -5 -5 -9 -10 -9s-9 4 -9 10l-23 202l23 207c0 5 4 9 9 9s9 -4 10 -9z +M401 159zM213 650l25 -245l-25 -237c0 -6 -5 -11 -11 -11s-11 5 -12 11l-21 237l21 245c1 7 6 12 12 12s11 -5 11 -12zM307 657l23 -252l-23 -244c-1 -8 -7 -13 -14 -13s-13 5 -13 13l-21 244l21 252c0 8 6 13 13 13s13 -5 14 -13zM401 639l21 -234l-21 -246 +c-1 -9 -8 -16 -16 -16s-15 7 -15 16l-20 246l20 234c0 8 7 15 15 15s15 -7 16 -15zM784 164zM495 785l21 -380l-21 -246c0 -10 -8 -18 -17 -18c-10 0 -17 8 -18 18l-18 246l18 380c1 10 8 18 18 18c9 0 17 -8 17 -18zM589 871l19 -468l-19 -244c0 -11 -9 -19 -19 -19 +c-11 0 -19 8 -20 19l-16 244l16 468c1 11 9 19 20 19c10 0 19 -8 19 -19zM687 911l18 -506l-18 -242c-1 -12 -10 -21 -22 -21c-11 0 -20 9 -21 21l-16 242l16 506c0 12 10 22 21 22c12 0 21 -10 22 -22zM1079 169zM881 915l15 -510l-15 -239c0 -14 -11 -25 -25 -25 +s-24 11 -25 25l-14 239l14 510c0 14 11 25 25 25s25 -11 25 -25zM980 896l14 -492l-14 -236c0 -15 -12 -27 -27 -27s-27 12 -28 27l-12 236l12 492c1 16 13 28 28 28s26 -12 27 -28zM1192 404l-14 -231c0 -17 -14 -31 -31 -31s-31 14 -32 31l-6 114l-6 117l12 636v3 +c1 9 5 18 12 24c5 4 12 7 20 7c5 0 11 -2 15 -5c9 -5 15 -15 16 -26zM2304 423c0 -156 -127 -282 -283 -282h-786c-17 2 -31 15 -31 33v899c0 17 6 25 28 33c55 22 117 34 181 34c261 0 475 -200 498 -455c34 14 71 22 110 22c156 0 283 -127 283 -284z" /> + <glyph glyph-name="microphone" unicode="" horiz-adv-x="1152" +d="M1152 832v-128c0 -296 -224 -540 -512 -572v-132h256c35 0 64 -29 64 -64s-29 -64 -64 -64h-640c-35 0 -64 29 -64 64s29 64 64 64h256v132c-288 32 -512 276 -512 572v128c0 35 29 64 64 64s64 -29 64 -64v-128c0 -247 201 -448 448 -448s448 201 448 448v128 +c0 35 29 64 64 64s64 -29 64 -64zM896 1216v-512c0 -176 -144 -320 -320 -320s-320 144 -320 320v512c0 176 144 320 320 320s320 -144 320 -320z" /> + <glyph glyph-name="laravel" unicode="" horiz-adv-x="1870" +d="M1863 682v0c13 -14 10 -25 -13 -31c-20 -6 -203 -54 -255 -68c76 -101 219 -294 231 -312c17 -25 2 -32 -23 -42s-571 -207 -608 -218c-48 -14 -69 -21 -100 22c-23 33 -149 259 -211 371c-117 -30 -330 -86 -392 -101c-60 -14 -86 22 -96 44s-365 786 -387 839 +c-23 53 2 62 24 64s335 28 376 30s44 -8 62 -34l450 -753l566 136c-31 44 -173 246 -187 265c-15 22 0 32 25 36s242 41 261 44s33 9 63 -27s201 -251 214 -265zM834 472c7 1 10 5 3 18s-422 729 -422 729c-4 7 -3 9 -13 9s-305 -27 -310 -27s-5 -8 0 -18s380 -783 382 -789 +s2 -8 19 -4s334 81 341 82zM1728 304c-5 8 -178 244 -187 258s-13 10 -27 6l-552 -143s169 -293 182 -312s21 -17 31 -13s531 179 547 185s11 11 6 19zM1763 696c13 3 22 7 16 14s-149 189 -159 203s-18 12 -27 10c-8 -2 -196 -36 -208 -38s-8 -8 -3 -15l166 -227 +s202 50 215 53z" /> + <glyph glyph-name="indent" unicode="" horiz-adv-x="1792" +d="M352 704c0 -8 -3 -17 -9 -23l-288 -288c-6 -6 -15 -9 -23 -9c-17 0 -32 15 -32 32v576c0 17 15 32 32 32c8 0 17 -3 23 -9l288 -288c6 -6 9 -15 9 -23zM1792 224v-192c0 -17 -15 -32 -32 -32h-1728c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1728c17 0 32 -15 32 -32z +M1792 608v-192c0 -17 -15 -32 -32 -32h-1088c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1088c17 0 32 -15 32 -32zM1792 992v-192c0 -17 -15 -32 -32 -32h-1088c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1088c17 0 32 -15 32 -32zM1792 1376v-192c0 -17 -15 -32 -32 -32 +h-1728c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1728c17 0 32 -15 32 -32z" /> + <glyph glyph-name="address-card-o" unicode="" horiz-adv-x="2048" +d="M1024 405c0 -87 -57 -149 -128 -149h-512c-71 0 -128 62 -128 149c0 155 38 327 196 327c49 -28 115 -76 188 -76s139 48 188 76c158 0 196 -172 196 -327zM867 925c0 -126 -102 -227 -227 -227s-227 101 -227 227c0 125 102 227 227 227s227 -102 227 -227zM1792 480 +v-64c0 -18 -14 -32 -32 -32h-576c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h576c18 0 32 -14 32 -32zM1792 732v-56c0 -20 -16 -36 -36 -36h-568c-20 0 -36 16 -36 36v56c0 20 16 36 36 36h568c20 0 36 -16 36 -36zM1792 992v-64c0 -18 -14 -32 -32 -32h-576 +c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h576c18 0 32 -14 32 -32zM1920 32v1216c0 17 -15 32 -32 32h-1728c-17 0 -32 -15 -32 -32v-1216c0 -17 15 -32 32 -32h352v96c0 18 14 32 32 32h64c18 0 32 -14 32 -32v-96h768v96c0 18 14 32 32 32h64c18 0 32 -14 32 -32v-96h352 +c17 0 32 15 32 32zM2048 1248v-1216c0 -88 -72 -160 -160 -160h-1728c-88 0 -160 72 -160 160v1216c0 88 72 160 160 160h1728c88 0 160 -72 160 -160z" /> + <glyph glyph-name="language" unicode="" +d="M654 458c-2 -7 -51 16 -64 21c-13 6 -72 39 -87 49s-72 57 -79 60c-36 -55 -82 -120 -134 -181c-18 -21 -72 -89 -105 -110c-5 -3 -34 -6 -38 -4c16 12 62 69 82 92c25 29 144 195 164 233c21 38 84 164 87 176c-10 1 -89 -26 -110 -33c-20 -6 -75 -19 -79 -22 +c-4 -4 -1 -16 -3 -20s-20 -13 -31 -15c-10 -3 -33 -4 -47 0c-13 3 -25 16 -28 21c0 0 -4 6 -5 23c12 4 32 5 54 11s76 22 105 32s85 31 102 35c18 3 63 33 87 41s41 18 42 13s0 -27 -1 -33c-1 -5 -49 -99 -56 -114c-4 -8 -32 -61 -77 -131c16 -7 50 -21 64 -28 +c17 -8 136 -58 142 -60s17 -48 15 -56zM449 944c3 -17 -2 -24 -4 -28c-10 -19 -35 -32 -50 -38s-40 -12 -60 -12c-9 1 -27 4 -49 26c-12 13 -21 48 -17 44s33 -8 46 -5s44 12 58 16c15 5 45 13 55 14c10 0 18 -4 21 -17zM1147 815l63 -227l-139 42zM39 15l694 232v1032 +l-694 -233v-1031zM1280 332l102 -31l-181 657l-100 31l-216 -536l102 -31l45 110l211 -65zM777 1294l573 -184v380zM1088 -29l158 -13l-54 -160l-40 66c-81 -52 -181 -92 -276 -108c-29 -6 -62 -12 -91 -12h-84c-106 0 -299 63 -383 124c-6 5 -8 9 -8 16c0 11 8 19 18 19 +c9 0 56 -29 69 -35c90 -45 216 -86 317 -86c125 0 210 16 324 65c33 15 62 34 93 51zM1536 1050v-1079c-773 246 -774 246 -774 246c-16 -7 -733 -249 -743 -249c-8 0 -15 5 -18 13c0 1 -1 2 -1 3v1078c1 3 2 8 4 10c6 7 14 9 20 11c3 1 64 21 149 50v384l558 -198 +c7 2 629 217 638 217c11 0 20 -8 20 -21v-418z" /> + <glyph glyph-name="circle-thin" unicode="" +d="M768 1280c-353 0 -640 -287 -640 -640s287 -640 640 -640s640 287 640 640s-287 640 -640 640zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" /> + <glyph glyph-name="drupal" unicode="" +d="M1167 -50c-2 7 -8 17 -24 5c-34 -25 -110 -56 -218 -56s-159 23 -193 49c-5 4 -3 4 -13 4c-11 0 -17 -5 -26 -12c-8 -7 -12 -24 0 -36c74 -68 198 -62 289 -54c92 9 170 63 178 71c12 12 9 22 7 29zM1128 65c-7 17 -19 47 -39 61c-20 13 -49 15 -76 15s-42 2 -71 -10 +s-59 -39 -78 -56s-22 -30 -12 -44c10 -13 21 -5 49 19c29 23 48 44 107 44s69 -22 81 -44s13 -25 25 -19c14 7 21 17 14 34zM1483 346c0 52 -23 140 -108 140c-80 0 -242 -166 -327 -167c-99 -2 -236 196 -434 194c-156 -1 -279 -125 -281 -257c-1 -74 23 -129 74 -164 +c34 -23 65 -37 166 -37c168 0 381 208 479 205c78 -3 199 -194 260 -198c48 -4 73 18 114 77c40 60 57 154 57 207zM1536 506c0 -448 -354 -744 -761 -744c-408 0 -775 321 -775 758c0 436 340 638 403 671c75 40 129 61 214 129c42 33 77 81 88 198 +c61 -73 134 -158 186 -193c85 -56 170 -78 259 -134c54 -33 386 -236 386 -685z" /> + <glyph glyph-name="headphones" unicode="" horiz-adv-x="1664" +d="M1664 650c0 -109 -20 -215 -60 -314l-20 -49l-185 -33c-29 -109 -128 -190 -247 -190v-32c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v576c0 18 14 32 32 32h64c18 0 32 -14 32 -32v-32c96 0 179 -53 223 -131l68 12c19 62 29 126 29 193c0 302 -299 566 -640 566 +s-640 -264 -640 -566c0 -67 10 -131 29 -193l68 -12c44 78 127 131 223 131v32c0 18 14 32 32 32h64c18 0 32 -14 32 -32v-576c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v32c-119 0 -218 81 -247 190l-185 33l-20 49c-40 99 -60 205 -60 314c0 411 381 758 832 758 +s832 -347 832 -758z" /> + <glyph glyph-name="cc-mastercard" unicode="" horiz-adv-x="2304" +d="M1119 1195c-83 55 -181 85 -281 85c-281 0 -509 -228 -509 -508c0 -281 228 -509 509 -509c100 0 198 30 281 85c-268 218 -266 629 0 847zM1152 1171c-258 -203 -259 -597 0 -799c259 202 258 596 0 799zM1185 1195c265 -218 269 -630 0 -847c83 -55 182 -85 281 -85 +c281 0 509 228 509 509c0 280 -228 508 -509 508c-100 0 -198 -30 -281 -85zM1926 473h7v3h-17v-3h7v-17h3v17zM1955 456h4v20h-5l-6 -13l-6 13h-5v-20h3v15l6 -13h4l5 13v-15zM1947 16v-2h-5v3h5v-1zM1947 7h3l-4 5c2 0 2 1 3 1c1 1 1 2 1 3s0 2 -1 3c-1 0 -2 1 -4 1h-6 +v-13h3v5h1zM685 75c0 24 15 43 41 43c24 0 40 -19 40 -43c0 -25 -16 -43 -40 -43c-26 0 -41 19 -41 43zM1158 119c19 0 32 -11 35 -32h-70c3 19 15 32 35 32zM1514 75c0 24 15 43 40 43s41 -19 41 -43c0 -25 -16 -43 -41 -43s-40 19 -40 43zM1786 75c0 24 16 43 41 43 +c24 0 41 -19 41 -43c0 -25 -17 -43 -41 -43c-25 0 -41 19 -41 43zM1944 3c-1 0 -2 0 -4 1c-1 0 -2 1 -3 2s-2 2 -2 3c-1 2 -1 3 -1 4c0 2 0 3 1 4c0 2 1 3 2 4s2 1 3 2c2 1 3 1 4 1c2 0 3 0 4 -1c2 -1 3 -1 4 -2s1 -2 2 -4c0 -1 1 -2 1 -4c0 -1 -1 -2 -1 -4 +c-1 -1 -1 -2 -2 -3s-2 -2 -4 -2c-1 -1 -2 -1 -4 -1zM599 7h30v85c0 32 -21 53 -54 54c-17 0 -35 -5 -47 -24c-9 15 -24 24 -45 24c-14 0 -28 -5 -39 -20v16h-30v-135h30v75c0 24 13 36 33 36s30 -13 30 -36v-75h29v75c0 24 14 36 33 36c20 0 30 -13 30 -36v-75zM765 7h29 +v135h-29v-16c-10 12 -24 20 -43 20c-38 0 -67 -30 -67 -71s29 -71 67 -71c19 0 33 7 43 20v-17zM943 48c0 24 -18 36 -47 40l-14 2c-13 2 -23 5 -23 14s9 15 25 15c18 0 34 -6 43 -11l12 24c-14 9 -33 14 -55 14c-34 0 -56 -17 -56 -44c0 -22 16 -35 47 -39l13 -2 +c17 -3 24 -7 24 -14c0 -11 -11 -17 -31 -17s-35 7 -45 14l-13 -23c16 -11 36 -17 58 -17c39 0 62 18 62 44zM1073 14l-8 25c-9 -5 -18 -7 -26 -7c-15 0 -19 9 -19 22v61h48v27h-48v41h-30v-41h-28v-27h28v-61c0 -31 12 -50 47 -50c12 0 27 4 36 10zM1159 146 +c-39 0 -67 -29 -67 -71c0 -43 29 -71 69 -71c20 0 39 5 55 19l-14 22c-11 -9 -26 -15 -39 -15c-19 0 -36 9 -41 33h101v12c0 42 -26 71 -64 71zM1318 146c-17 0 -28 -8 -35 -20v16h-30v-135h30v76c0 22 9 35 29 35c6 0 12 -1 18 -4l9 28c-7 3 -15 4 -21 4zM1348 75 +c0 -41 28 -71 72 -71c20 0 34 4 48 16l-14 24c-11 -8 -22 -13 -35 -12c-24 0 -41 17 -41 43s17 43 41 43c13 0 24 -4 35 -12l14 24c-14 11 -28 16 -48 16c-44 0 -72 -30 -72 -71zM1593 7h30v135h-30v-16c-9 12 -23 20 -42 20c-38 0 -68 -30 -68 -71s30 -71 68 -71 +c19 0 33 7 42 20v-17zM1726 146c-17 0 -28 -8 -35 -20v16h-29v-135h29v76c0 22 10 35 29 35c6 0 12 -1 18 -4l9 28c-6 3 -15 4 -21 4zM1866 7h29v190h-29v-71c-9 12 -23 20 -43 20c-37 0 -67 -30 -67 -71s30 -71 67 -71c20 0 34 7 43 20v-17zM1944 27c-1 0 -3 -1 -5 -1 +c-2 -1 -3 -2 -4 -3c-2 -1 -3 -3 -3 -4c-1 -2 -1 -4 -1 -6c0 -1 0 -3 1 -5c0 -1 1 -3 3 -4c1 -1 2 -2 4 -3s4 -1 5 -1c2 0 4 0 6 1c1 1 3 2 4 3s2 3 3 4c1 2 1 4 1 5c0 2 0 4 -1 6c-1 1 -2 3 -3 4s-3 2 -4 3c-2 0 -4 1 -6 1zM2304 1280v-1280c0 -70 -58 -128 -128 -128h-2048 +c-70 0 -128 58 -128 128v1280c0 70 58 128 128 128h2048c70 0 128 -58 128 -128z" /> + <glyph glyph-name="times" unicode="" horiz-adv-x="1188" +d="M1188 214c0 -25 -10 -50 -28 -68l-136 -136c-18 -18 -43 -28 -68 -28s-50 10 -68 28l-294 294l-294 -294c-18 -18 -43 -28 -68 -28s-50 10 -68 28l-136 136c-18 18 -28 43 -28 68s10 50 28 68l294 294l-294 294c-18 18 -28 43 -28 68s10 50 28 68l136 136 +c18 18 43 28 68 28s50 -10 68 -28l294 -294l294 294c18 18 43 28 68 28s50 -10 68 -28l136 -136c18 -18 28 -43 28 -68s-10 -50 -28 -68l-294 -294l294 -294c18 -18 28 -43 28 -68z" /> + <glyph glyph-name="buysellads" unicode="" +d="M915 450h-294l147 551zM1001 128h311l-324 1024h-440l-324 -1024h311l383 314zM1536 1120v-960c0 -158 -130 -288 -288 -288h-960c-158 0 -288 130 -288 288v960c0 158 130 288 288 288h960c158 0 288 -130 288 -288z" /> + <glyph glyph-name="diaspora" unicode="" horiz-adv-x="1581" +d="M1005 -16c-42 59 -111 155 -153 214c-41 57 -75 102 -77 102s-66 -87 -152 -205c-82 -113 -150 -205 -151 -205c-2 0 -296 207 -297 209c0 1 65 99 147 217s149 217 149 219c0 4 -27 14 -234 83c-129 43 -235 78 -237 79s10 41 52 174c30 95 56 174 57 175 +s112 -35 248 -80s249 -81 250 -81s2 2 3 5s2 118 3 257s2 254 3 255c1 2 40 2 180 2c98 0 179 0 180 -1c2 -1 4 -78 8 -249c7 -281 9 -285 13 -285c2 0 109 36 239 80s236 79 237 78c3 -3 109 -350 108 -351s-109 -37 -241 -82c-181 -61 -240 -82 -240 -85 +c0 -2 62 -95 141 -211c78 -114 141 -208 141 -209c-1 -2 -293 -217 -295 -217c-1 0 -38 50 -82 112z" /> + <glyph glyph-name="att" unicode="" +d="M768 1407v0c144 0 278 -39 393 -108c31 -19 46 -30 46 -48c0 -73 -206 -150 -472 -150c-268 0 -419 70 -419 135c0 22 19 39 54 60c116 71 253 111 398 111zM273 1226v0c1 0 0 -1 -1 -2c-22 -27 -31 -53 -31 -79c0 -72 57 -185 362 -185c416 0 677 151 677 236 +c0 7 -2 13 -5 18c-1 1 0 2 1 1c25 -23 48 -46 73 -74c38 -43 53 -66 53 -104c0 -107 -166 -228 -539 -228c-350 0 -725 108 -725 257c0 10 10 28 25 47c32 41 68 78 108 112c1 0 2 1 2 1zM1456 979v0s1 0 1 -1c18 -36 40 -89 51 -133c10 -40 10 -69 2 -97 +c-43 -152 -307 -235 -646 -235c-556 0 -794 160 -841 260c-6 12 -7 20 -4 37c7 39 32 114 55 159c1 1 1 1 1 0c-4 -15 -6 -30 -6 -45c0 -153 253 -274 557 -274c281 0 837 129 830 328v1zM1534 683v0s1 -1 1 -2c1 -13 1 -25 1 -41c0 -67 -9 -146 -28 -190 +c-26 -61 -154 -248 -714 -248c-411 0 -649 139 -744 238c-21 22 -36 49 -39 67c-7 36 -11 91 -11 133c0 2 2 2 2 0c34 -125 219 -308 612 -308c413 0 891 200 919 350c0 1 1 1 1 1zM1482 360v0c1 0 1 -1 1 -2c-13 -33 -30 -67 -47 -96c-29 -50 -61 -86 -95 -114 +c-124 -102 -332 -154 -521 -154c-359 0 -649 111 -745 315c-1 2 0 2 1 1c103 -149 366 -227 610 -227c345 0 679 106 795 276c0 1 1 1 1 1zM1274 64v0c1 0 1 -1 0 -2c-135 -118 -312 -190 -506 -190c-177 0 -341 60 -471 161c-1 1 -1 3 1 2c84 -47 234 -100 470 -100 +c272 0 444 89 505 129h1z" /> + <glyph glyph-name="sort-asc" unicode="" horiz-adv-x="1024" +d="M1024 832c0 -35 -29 -64 -64 -64h-896c-35 0 -64 29 -64 64c0 17 7 33 19 45l448 448c12 12 28 19 45 19s33 -7 45 -19l448 -448c12 -12 19 -28 19 -45z" /> + <glyph glyph-name="folder-open" unicode="" horiz-adv-x="1879" +d="M1879 584c0 -24 -15 -48 -31 -66l-336 -396c-58 -68 -176 -122 -264 -122h-1088c-36 0 -87 11 -87 56c0 24 15 48 31 66l336 396c58 68 176 122 264 122h1088c36 0 87 -11 87 -56zM1536 928v-160h-832c-125 0 -280 -71 -361 -167l-337 -396l-5 -6c0 8 -1 17 -1 25v960 +c0 123 101 224 224 224h320c123 0 224 -101 224 -224v-32h544c123 0 224 -101 224 -224z" /> + <glyph glyph-name="heartbeat" unicode="" horiz-adv-x="1792" +d="M1280 512h305c-12 -13 -20 -20 -22 -22l-623 -600c-12 -12 -28 -18 -44 -18s-32 6 -44 18l-624 602c-2 1 -10 8 -21 20h369c29 0 55 20 62 48l70 281l190 -667c8 -27 33 -46 62 -46c28 0 53 19 61 46l146 485l56 -112c11 -21 33 -35 57 -35zM1792 940 +c0 -115 -50 -220 -103 -300h-369l-111 221c-11 23 -37 37 -62 35c-27 -3 -49 -20 -56 -46l-129 -430l-196 686c-8 27 -33 46 -63 46c-29 0 -54 -20 -61 -48l-116 -464h-423c-53 80 -103 185 -103 300c0 293 179 468 478 468c175 0 339 -138 418 -216c79 78 243 216 418 216 +c299 0 478 -175 478 -468z" /> + <glyph glyph-name="blind" unicode="" horiz-adv-x="1330" +d="M327 1225c-86 0 -156 70 -156 156c0 85 70 155 156 155s155 -70 155 -155c0 -86 -69 -156 -155 -156zM878 583c0 -108 -115 -84 -141 -40l-367 438c-16 26 -28 14 -28 14s-7 -8 4 -21l122 -139l1 -354c-86 -250 -161 -457 -161 -457c-47 -134 -86 -250 -120 -266 +c-41 -21 -71 -16 -103 -1c-42 19 -54 70 -51 100c0 0 2 16 197 618l5 416l-85 -164l35 -222c13 -84 -58 -95 -58 -95c-68 -11 -82 68 -82 70l-46 299c210 379 211 381 211 381c16 24 52 34 113 34c54 0 88 -16 107 -40l424 -521c6 -4 10 -10 14 -17l3 -3l-1 -1 +c5 -9 7 -19 7 -29zM475 433c96 -255 182 -448 182 -448c29 -74 79 -180 6 -222c-72 -42 -130 7 -146 41h-1c-3 8 -6 16 -8 25l-124 351zM1299 -159c21 -33 39 -57 28 -64c-19 -12 -25 23 -46 57c0 0 -113 171 -423 661c6 -2 17 7 17 7s11 9 11 17 +c308 -503 413 -678 413 -678z" /> + <glyph glyph-name="arrows-v" unicode="" horiz-adv-x="640" +d="M640 1216c0 -35 -29 -64 -64 -64h-128v-1024h128c35 0 64 -29 64 -64c0 -17 -7 -33 -19 -45l-256 -256c-12 -12 -28 -19 -45 -19s-33 7 -45 19l-256 256c-12 12 -19 28 -19 45c0 35 29 64 64 64h128v1024h-128c-35 0 -64 29 -64 64c0 17 7 33 19 45l256 256 +c12 12 28 19 45 19s33 -7 45 -19l256 -256c12 -12 19 -28 19 -45z" /> + <glyph glyph-name="phone-square" unicode="" +d="M1280 343c0 5 0 11 -2 16c-6 18 -152 92 -180 108c-19 11 -42 33 -65 33c-44 0 -109 -131 -148 -131c-20 0 -45 18 -63 28c-132 74 -223 165 -297 297c-10 18 -28 43 -28 63c0 39 131 104 131 148c0 23 -22 46 -33 65c-16 28 -90 174 -108 180c-5 2 -11 2 -16 2 +c-26 0 -77 -12 -101 -22c-66 -30 -114 -156 -114 -225c0 -67 27 -128 50 -190c80 -219 318 -457 537 -537c62 -23 123 -50 190 -50c69 0 195 48 225 114c10 24 22 75 22 101zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960 +c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" /> + <glyph glyph-name="text-height" unicode="" horiz-adv-x="1789" +d="M1744 128c44 0 58 -28 31 -63l-126 -162c-27 -35 -71 -35 -98 0l-126 162c-27 35 -13 63 31 63h80v1024h-80c-44 0 -58 28 -31 63l126 162c27 35 71 35 98 0l126 -162c27 -35 13 -63 -31 -63h-80v-1024h80zM81 1407l54 -27c7 -3 190 -5 211 -5c88 0 176 4 264 4 +c72 0 143 -1 215 -1h293c40 0 63 -9 90 29l42 1c9 0 19 -1 28 -1c2 -112 2 -224 2 -336c0 -35 1 -74 -5 -109c-22 -8 -45 -15 -68 -18c-23 40 -39 84 -54 128c-7 20 -31 155 -33 157c-21 26 -44 21 -75 21c-91 0 -186 4 -276 -7c-5 -44 -9 -91 -8 -136c1 -281 4 -562 4 -843 +c0 -77 -12 -158 10 -232c76 -39 166 -45 244 -80c2 -16 5 -33 5 -50c0 -9 -1 -19 -3 -29l-34 -1c-142 -4 -282 18 -425 18c-101 0 -202 -18 -303 -18c-1 17 -3 35 -3 52v9c38 61 175 62 238 99c22 49 19 320 19 383c0 202 -6 404 -6 606v117c0 18 4 90 -8 104 +c-14 15 -145 12 -162 12c-37 0 -144 -17 -173 -38c-48 -33 -48 -233 -108 -237c-18 11 -43 27 -56 44v383z" /> + <glyph glyph-name="linkedin-square" unicode="" +d="M237 122h231v694h-231v-694zM483 1030c-1 68 -50 120 -129 120s-131 -52 -131 -120c0 -66 50 -120 128 -120h1c81 0 131 54 131 120zM1068 122h231v398c0 213 -114 312 -266 312c-124 0 -179 -69 -209 -117h2v101h-231s3 -65 0 -694h231v388c0 20 1 41 7 56 +c17 41 55 84 119 84c83 0 116 -63 116 -157v-371zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" /> + <glyph glyph-name="delicious" unicode="" +d="M1472 160v480h-704v704h-480c-124 0 -224 -100 -224 -224v-480h704v-704h480c124 0 224 100 224 224zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" /> + <glyph glyph-name="qrcode" unicode="" +d="M0 1408h768v-704h-128v576h-512v-512h640v-128h-768v768zM0 -128v640h640v-640h-576v128h448v384h-384v-512h-128zM896 768v640h640v-640h-576v128h448v384h-384v-512h-128zM256 1152h256v-256h-256v256zM1152 1152h128v-128h-128v128zM256 256h128v-128h-128v128z +M768 512h128v-128h-128v128zM1152 384h128v-128h-128v128zM1152 128h128v-128h-128v128zM1024 640h384v-256h-128v128h-256v128zM1536 256v-384h-256v128h128v256h128zM1024 384v-256h-256v128h128v128h128zM768 0h384v-128h-384v128z" /> + <glyph glyph-name="arrows-h" unicode="" horiz-adv-x="1792" +d="M1792 640c0 -17 -7 -33 -19 -45l-256 -256c-12 -12 -28 -19 -45 -19c-35 0 -64 29 -64 64v128h-1024v-128c0 -35 -29 -64 -64 -64c-17 0 -33 7 -45 19l-256 256c-12 12 -19 28 -19 45s7 33 19 45l256 256c12 12 28 19 45 19c35 0 64 -29 64 -64v-128h1024v128 +c0 35 29 64 64 64c17 0 33 -7 45 -19l256 -256c12 -12 19 -28 19 -45z" /> + <glyph glyph-name="mercury" unicode="" horiz-adv-x="1152" +d="M830 1220c190 -94 322 -290 322 -516c0 -296 -224 -540 -512 -572v-132h96c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-96v-96c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v96h-96c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h96v132c-288 32 -512 276 -512 572 +c0 226 132 422 322 516c-105 61 -187 157 -228 273c-8 21 8 43 30 43h69c13 0 24 -8 29 -20c58 -139 195 -236 354 -236s296 97 354 236c5 12 16 20 37 20h61c22 0 38 -22 30 -43c-41 -116 -123 -212 -228 -273zM576 256c247 0 448 201 448 448s-201 448 -448 448 +s-448 -201 -448 -448s201 -448 448 -448z" /> + <glyph glyph-name="text-width" unicode="" +d="M81 1407l54 -27c7 -3 190 -5 211 -5c88 0 176 4 264 4c265 0 533 6 798 -3c22 -1 43 13 56 31l42 1c9 0 19 -1 28 -1c2 -112 2 -224 2 -336c0 -36 1 -74 -5 -109c-22 -8 -45 -15 -68 -18c-23 40 -39 84 -54 128c-7 20 -32 155 -33 157c-7 9 -16 15 -27 19 +c-8 3 -56 2 -66 2c-123 0 -265 7 -386 -7c-5 -44 -9 -91 -8 -136l1 -152v52c1 -163 3 -325 3 -487c0 -77 -12 -158 10 -232c76 -39 166 -45 244 -80c2 -16 5 -33 5 -50c0 -9 -1 -19 -3 -29l-34 -1c-142 -4 -282 18 -425 18c-101 0 -202 -18 -303 -18c-1 17 -3 35 -3 52v9 +c38 61 175 62 238 99c25 56 18 529 18 617c0 14 -5 29 -5 44c0 41 7 276 -8 293c-14 15 -145 12 -162 12c-42 0 -277 -22 -301 -38c-47 -31 -48 -232 -108 -237c-18 11 -43 27 -56 44v383zM1310 125c35 0 168 -119 195 -140c15 -12 26 -29 26 -49s-11 -37 -26 -49 +c-27 -21 -160 -140 -195 -140c-46 0 -30 107 -30 125h-1024c0 -18 16 -125 -30 -125c-35 0 -168 119 -195 140c-15 12 -26 29 -26 49s11 37 26 49c27 21 160 140 195 140c46 0 30 -107 30 -125h1024c0 18 -16 125 30 125z" /> + <glyph glyph-name="envelope-o" unicode="" horiz-adv-x="1792" +d="M1664 32v768c-21 -24 -44 -46 -69 -66c-143 -110 -287 -222 -426 -338c-75 -63 -168 -140 -272 -140h-2c-104 0 -197 77 -272 140c-139 116 -283 228 -426 338c-25 20 -48 42 -69 66v-768c0 -17 15 -32 32 -32h1472c17 0 32 15 32 32zM1664 1083c0 25 6 69 -32 69h-1472 +c-17 0 -32 -15 -32 -32c0 -114 57 -213 147 -284c134 -105 268 -211 401 -317c53 -43 149 -135 219 -135h2c70 0 166 92 219 135c133 106 267 212 401 317c65 51 147 162 147 247zM1792 1120v-1088c0 -88 -72 -160 -160 -160h-1472c-88 0 -160 72 -160 160v1088 +c0 88 72 160 160 160h1472c88 0 160 -72 160 -160z" /> + <glyph glyph-name="rss-square" unicode="" +d="M512 256c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM863 162c-17 310 -263 556 -573 573c-9 1 -18 -3 -24 -9s-10 -14 -10 -23v-128c0 -17 13 -31 30 -32c205 -15 370 -180 385 -385c1 -17 15 -30 32 -30h128c9 0 17 4 23 10 +s10 15 9 24zM1247 161c-17 520 -438 941 -958 958c-10 1 -17 -2 -23 -9c-6 -6 -10 -14 -10 -23v-128c0 -17 14 -31 31 -32c415 -15 753 -353 768 -768c1 -17 15 -31 32 -31h128c9 0 17 4 23 10c7 6 10 14 9 23zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960 +c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" /> + <glyph glyph-name="bookmark" unicode="" horiz-adv-x="1280" +d="M1164 1408c15 0 30 -3 44 -9c44 -17 72 -58 72 -103v-1289c0 -45 -28 -86 -72 -103c-14 -6 -29 -8 -44 -8c-31 0 -60 11 -83 32l-441 424l-441 -424c-23 -21 -52 -33 -83 -33c-15 0 -30 3 -44 9c-44 17 -72 58 -72 103v1289c0 45 28 86 72 103c14 6 29 9 44 9h1048z" /> + <glyph glyph-name="behance" unicode="" horiz-adv-x="2048" +d="M1848 1197v-124h-511v124h511zM1596 771c-120 0 -200 -75 -208 -195h408c-11 121 -74 195 -200 195zM1612 186c76 0 174 41 198 119h221c-68 -209 -209 -307 -427 -307c-288 0 -467 195 -467 479c0 274 189 483 467 483c286 0 444 -225 444 -495c0 -16 -1 -32 -2 -47 +h-658c0 -146 77 -232 224 -232zM277 236h296c113 0 205 40 205 167c0 129 -77 180 -199 180h-302v-347zM277 773h281c99 0 169 43 169 150c0 116 -90 144 -190 144h-260v-294zM0 1282h594c216 0 403 -61 403 -312c0 -127 -59 -209 -172 -263c155 -44 230 -161 230 -319 +c0 -256 -215 -366 -444 -366h-611v1260z" /> + <glyph glyph-name="wpbeginner" unicode="" horiz-adv-x="1792" +d="M384 704h160v224h-160v-224zM1221 372v92c-86 -30 -157 -37 -243 -38c-193 -1 -364 79 -480 169l1 -96c109 -99 276 -177 484 -176c87 0 169 18 238 49zM640 704h640v224h-640v-224zM1792 736c0 -127 -36 -247 -99 -352c56 -64 89 -143 89 -229 +c0 -209 -198 -379 -443 -379c-166 0 -310 78 -386 193c-19 -1 -38 -1 -57 -1s-38 0 -57 1c-76 -115 -220 -193 -386 -193c-245 0 -443 170 -443 379c0 86 33 165 89 229c-63 105 -99 225 -99 352c0 424 401 768 896 768s896 -344 896 -768z" /> + <glyph glyph-name="star-half-o" unicode="" horiz-adv-x="1664" +d="M1186 579l257 250l-356 52l-66 10l-30 60l-159 322v-963l59 -31l318 -168l-60 355l-12 66zM1638 841l-363 -354l86 -500c7 -44 -9 -70 -40 -70c-11 0 -25 4 -40 12l-449 236l-449 -236c-15 -8 -29 -12 -40 -12c-31 0 -47 26 -40 70l86 500l-364 354c-43 43 -29 85 31 94 +l502 73l225 455c13 27 31 41 49 41s35 -14 49 -41l225 -455l502 -73c60 -9 74 -51 30 -94z" /> + <glyph glyph-name="keyboard-o" unicode="" horiz-adv-x="1920" +d="M384 368v-96c0 -9 -7 -16 -16 -16h-96c-9 0 -16 7 -16 16v96c0 9 7 16 16 16h96c9 0 16 -7 16 -16zM512 624v-96c0 -9 -7 -16 -16 -16h-224c-9 0 -16 7 -16 16v96c0 9 7 16 16 16h224c9 0 16 -7 16 -16zM384 880v-96c0 -9 -7 -16 -16 -16h-96c-9 0 -16 7 -16 16v96 +c0 9 7 16 16 16h96c9 0 16 -7 16 -16zM1408 368v-96c0 -9 -7 -16 -16 -16h-864c-9 0 -16 7 -16 16v96c0 9 7 16 16 16h864c9 0 16 -7 16 -16zM768 624v-96c0 -9 -7 -16 -16 -16h-96c-9 0 -16 7 -16 16v96c0 9 7 16 16 16h96c9 0 16 -7 16 -16zM640 880v-96 +c0 -9 -7 -16 -16 -16h-96c-9 0 -16 7 -16 16v96c0 9 7 16 16 16h96c9 0 16 -7 16 -16zM1024 624v-96c0 -9 -7 -16 -16 -16h-96c-9 0 -16 7 -16 16v96c0 9 7 16 16 16h96c9 0 16 -7 16 -16zM896 880v-96c0 -9 -7 -16 -16 -16h-96c-9 0 -16 7 -16 16v96c0 9 7 16 16 16h96 +c9 0 16 -7 16 -16zM1280 624v-96c0 -9 -7 -16 -16 -16h-96c-9 0 -16 7 -16 16v96c0 9 7 16 16 16h96c9 0 16 -7 16 -16zM1664 368v-96c0 -9 -7 -16 -16 -16h-96c-9 0 -16 7 -16 16v96c0 9 7 16 16 16h96c9 0 16 -7 16 -16zM1152 880v-96c0 -9 -7 -16 -16 -16h-96 +c-9 0 -16 7 -16 16v96c0 9 7 16 16 16h96c9 0 16 -7 16 -16zM1408 880v-96c0 -9 -7 -16 -16 -16h-96c-9 0 -16 7 -16 16v96c0 9 7 16 16 16h96c9 0 16 -7 16 -16zM1664 880v-352c0 -9 -7 -16 -16 -16h-224c-9 0 -16 7 -16 16v96c0 9 7 16 16 16h112v240c0 9 7 16 16 16h96 +c9 0 16 -7 16 -16zM1792 128v896h-1664v-896h1664zM1920 1024v-896c0 -71 -57 -128 -128 -128h-1664c-71 0 -128 57 -128 128v896c0 71 57 128 128 128h1664c71 0 128 -57 128 -128z" /> + <glyph glyph-name="minus-circle" unicode="" +d="M1216 576v128c0 35 -29 64 -64 64h-768c-35 0 -64 -29 -64 -64v-128c0 -35 29 -64 64 -64h768c35 0 64 29 64 64zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" /> + <glyph glyph-name="hand-o-down" unicode="" +d="M1408 576c0 199 -128 369 -128 544v32h-640v-32c0 -106 -90 -177 -163 -241c-46 -41 -92 -79 -145 -112c-22 -14 -45 -26 -68 -38s-136 -62 -136 -89c0 -85 32 -160 128 -160c128 0 193 96 256 96v-576c0 -67 60 -128 128 -128c69 0 128 59 128 128v331 +c26 -20 70 -35 103 -35c47 0 87 19 119 53c21 -12 45 -18 69 -18c46 0 103 23 126 65c18 -3 37 -4 56 -4c118 0 167 73 167 184zM1280 1344c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1536 580c0 -184 -104 -318 -295 -317l-5 1 +c-50 -40 -114 -61 -178 -61c-14 0 -29 1 -43 3c-34 -19 -80 -33 -119 -37v-169c0 -140 -117 -256 -257 -256c-138 0 -255 118 -255 256v374c-39 -16 -86 -22 -128 -22c-168 0 -256 129 -256 288c0 134 171 177 264 235c47 30 88 64 129 100c33 29 119 97 119 145v288 +c0 71 57 128 128 128h640c71 0 128 -57 128 -128v-288c0 -63 37 -162 59 -223c37 -102 69 -207 69 -317z" /> + <glyph glyph-name="sort-numeric-asc" unicode="" horiz-adv-x="1454" +d="M1314 223c0 82 -67 169 -147 169c-70 0 -114 -57 -114 -131c0 -72 46 -133 141 -133c65 0 120 39 120 95zM704 96c0 -9 -4 -17 -10 -24l-319 -319c-7 -6 -15 -9 -23 -9s-16 3 -23 9l-320 320c-9 10 -12 23 -7 35s17 20 30 20h192v1376c0 18 14 32 32 32h192 +c18 0 32 -14 32 -32v-1376h192c18 0 32 -14 32 -32zM1454 165c0 -202 -110 -421 -348 -421c-45 0 -82 7 -108 16c-16 5 -30 10 -42 15l39 113c9 -4 20 -8 31 -11c20 -7 46 -13 75 -13c120 0 182 100 201 204h-2c-28 -30 -87 -51 -146 -51c-145 0 -240 114 -240 244 +c0 138 106 251 253 251c159 0 287 -130 287 -347zM1424 882v-114h-469v114h167v432c0 13 1 26 1 36v16h-2l-7 -12c-5 -8 -13 -18 -26 -31l-62 -58l-82 86l192 185h123v-654h165z" /> + <glyph glyph-name="share-alt" unicode="" +d="M1216 512c177 0 320 -143 320 -320s-143 -320 -320 -320s-320 143 -320 320c0 11 1 23 2 34l-360 180c-57 -53 -134 -86 -218 -86c-177 0 -320 143 -320 320s143 320 320 320c84 0 161 -33 218 -86l360 180c-1 11 -2 23 -2 34c0 177 143 320 320 320s320 -143 320 -320 +s-143 -320 -320 -320c-84 0 -161 33 -218 86l-360 -180c1 -11 2 -23 2 -34s-1 -23 -2 -34l360 -180c57 53 134 86 218 86z" /> + <glyph glyph-name="shirtsinbulk" unicode="" +d="M0 1536h1536v-1392l-776 -338l-760 338v1392zM1436 209v926h-1336v-926l661 -294zM1436 1235v201h-1336v-201h1336zM181 937v-115h-37v115h37zM181 789v-115h-37v115h37zM181 641v-115h-37v115h37zM181 493v-115h-37v115h37zM181 345v-115h-37v115h37zM207 202l15 34 +l105 -47l-15 -33zM343 142l15 34l105 -46l-15 -34zM478 82l15 34l105 -46l-15 -34zM614 23l15 33l104 -46l-15 -34zM797 10l105 46l15 -33l-105 -47zM932 70l105 46l15 -34l-105 -46zM1068 130l105 46l15 -34l-105 -46zM1203 189l105 47l15 -34l-105 -46zM259 1389v-36h-114 +v36h114zM421 1389v-36h-115v36h115zM583 1389v-36h-115v36h115zM744 1389v-36h-114v36h114zM906 1389v-36h-114v36h114zM1068 1389v-36h-115v36h115zM1230 1389v-36h-115v36h115zM1391 1389v-36h-114v36h114zM181 1049v-79h-37v115h115v-36h-78zM421 1085v-36h-115v36h115z +M583 1085v-36h-115v36h115zM744 1085v-36h-114v36h114zM906 1085v-36h-114v36h114zM1068 1085v-36h-115v36h115zM1230 1085v-36h-115v36h115zM1355 970v79h-78v36h115v-115h-37zM1355 822v115h37v-115h-37zM1355 674v115h37v-115h-37zM1355 526v115h37v-115h-37zM1355 378 +v115h37v-115h-37zM1355 230v115h37v-115h-37zM760 265c-172 0 -313 140 -313 313c0 172 141 313 313 313c173 0 313 -141 313 -313c0 -173 -140 -313 -313 -313zM595 646c0 -152 266 -41 266 -130c0 -45 -82 -49 -112 -49c-42 0 -102 9 -123 51h-3l-31 -63 +c51 -32 100 -42 162 -42c67 0 175 20 175 107c0 165 -269 56 -269 130c0 45 71 51 102 51c37 0 100 -11 122 -45h3l30 58c-52 21 -94 41 -152 41c-69 0 -170 -22 -170 -109z" /> + <glyph glyph-name="viacoin" unicode="" +d="M1536 1536l-192 -448h192v-192h-274l-55 -128h329v-192h-411l-357 -832l-357 832h-411v192h329l-55 128h-274v192h192l-192 448h256l323 -768h378l323 768h256zM768 320l108 256h-216z" /> + <glyph glyph-name="dogmazic" unicode="" +d="M768 1404c423 0 768 -343 768 -766s-345 -766 -768 -766s-768 343 -768 766s345 766 768 766zM768 1302c-368 0 -666 -297 -666 -664s298 -664 666 -664s666 297 666 664s-298 664 -666 664zM768 1223c668 3 845 -918 212 -1148c-52 -19 -148 -29 -165 -17 +c-9 6 6 111 30 214c20 88 28 84 -78 37c-49 -22 -92 -40 -96 -41c-5 -1 -23 23 -60 78c-32 48 -54 78 -55 74s-21 -73 -44 -154c-50 -177 -38 -165 -111 -110c-452 340 -218 1052 351 1067h16zM803 1137c-251 0 -505 -261 -415 -458c14 -31 19 -30 9 1 +c-66 214 206 464 458 420c281 -49 436 -423 255 -613c-49 -51 -21 -53 31 -2c184 181 17 586 -267 645c-23 5 -47 7 -71 7zM435 998c-2 0 -6 0 -10 -1c-132 -18 -189 -193 -96 -296c27 -30 30 -29 22 5c-18 75 7 167 69 258c19 28 24 34 15 34zM805 958 +c-12 0 -35 -27 -35 -44c0 -20 -7 -22 -25 -6c-42 37 -123 53 -167 34c-14 -6 -14 -5 6 -8c61 -8 101 -75 69 -117c-27 -36 -40 -72 -44 -123c-4 -61 -30 -81 -51 -39c-27 54 10 135 62 135c11 0 0 8 -15 11c-89 17 -142 -140 -56 -167c14 -4 6 -11 -14 -11 +c-24 0 -48 11 -69 31c-23 22 -10 -6 24 -53c12 -16 57 -84 101 -150c94 -139 89 -132 95 -129c3 1 61 28 131 60s144 64 166 72c40 15 83 37 79 41c-1 1 -6 0 -11 -3c-24 -13 -80 -2 -98 18c-9 10 -9 9 15 9c97 0 121 145 28 173c-16 5 -18 7 -20 26c-1 11 -4 26 -5 33 +c-5 33 78 59 121 37c19 -10 15 0 -9 21c-37 33 -64 43 -119 43c-70 0 -77 6 -56 49c9 19 10 23 4 24c-10 2 -23 -11 -30 -29c-5 -15 -13 -20 -19 -11c-2 3 1 12 6 20c11 17 12 30 3 30c-8 0 -17 -11 -27 -30c-4 -8 -10 -15 -12 -15c-6 0 -4 18 3 31c4 6 6 16 6 20 +c0 16 -22 -2 -32 -25c-5 -12 -13 -22 -16 -22c-9 0 -7 12 6 37c6 13 10 24 9 25s-2 2 -4 2zM1242 756c-5 0 -5 -16 -5 -59c0 -100 -23 -174 -72 -226c-26 -27 -19 -29 32 -6c106 48 136 192 58 280c-6 7 -10 11 -13 11zM982 689c3 0 6 -3 10 -8c39 -45 25 -117 -28 -144 +c-24 -12 -28 -11 -37 8c-8 16 -8 16 3 28c16 17 34 55 40 86c4 21 8 30 12 30zM680 537c10 0 20 -8 21 -22c2 -25 -16 -39 -36 -27v0c-11 6 -11 32 1 43c4 4 9 6 14 6zM778 509c10 0 19 -11 19 -28c0 -22 -23 -33 -38 -18c-10 10 -9 27 2 38c6 6 12 8 17 8z" /> + <glyph glyph-name="digg" unicode="" horiz-adv-x="2048" +d="M328 1254h204v-983h-532v697h328v286zM328 435v369h-123v-369h123zM614 968h205v-697h-205v697zM614 1254h205v-204h-205v204zM901 968h533v-942h-533v163h328v82h-328v697zM1229 435v369h-123v-369h123zM1516 968h532v-942h-532v163h327v82h-327v697zM1843 435v369h-123 +v-369h123z" /> + <glyph glyph-name="rss" unicode="" horiz-adv-x="1408" +d="M384 192c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM896 69c1 -18 -5 -35 -17 -48c-12 -14 -29 -21 -47 -21h-135c-33 0 -60 25 -63 58c-29 305 -271 547 -576 576c-33 3 -58 30 -58 63v135c0 18 7 35 21 47c11 11 27 17 43 17h5 +c213 -17 414 -110 565 -262c152 -151 245 -352 262 -565zM1408 67c1 -17 -5 -34 -18 -47c-12 -13 -28 -20 -46 -20h-143c-34 0 -62 26 -64 60c-33 581 -496 1044 -1077 1078c-34 2 -60 30 -60 63v143c0 18 7 34 20 46c12 12 28 18 44 18h3c350 -18 679 -165 927 -414 +c249 -248 396 -577 414 -927z" /> + <glyph glyph-name="television" unicode="" horiz-adv-x="1920" +d="M1792 288v960c0 17 -15 32 -32 32h-1600c-17 0 -32 -15 -32 -32v-960c0 -17 15 -32 32 -32h1600c17 0 32 15 32 32zM1920 1248v-960c0 -88 -72 -160 -160 -160h-736v-128h352c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-832c-18 0 -32 14 -32 32v64 +c0 18 14 32 32 32h352v128h-736c-88 0 -160 72 -160 160v960c0 88 72 160 160 160h1600c88 0 160 -72 160 -160z" /> + <glyph glyph-name="ffmpeg" unicode="" +d="M1158 323v179l-530 -527l-628 53l1010 1100l-167 -10l-730 -810v688l69 83l-169 -10v185l591 50l-325 -379v-161l483 553l774 66l-1134 -1194l149 -8l824 849v-806l-92 -87l234 -14v-223l-731 62z" /> + <glyph glyph-name="folder-o" unicode="" horiz-adv-x="1664" +d="M1536 224v704c0 53 -43 96 -96 96h-704c-53 0 -96 43 -96 96v64c0 53 -43 96 -96 96h-320c-53 0 -96 -43 -96 -96v-960c0 -53 43 -96 96 -96h1216c53 0 96 43 96 96zM1664 928v-704c0 -123 -101 -224 -224 -224h-1216c-123 0 -224 101 -224 224v960 +c0 123 101 224 224 224h320c123 0 224 -101 224 -224v-32h672c123 0 224 -101 224 -224z" /> + <glyph glyph-name="bed" unicode="" horiz-adv-x="2048" +d="M256 512h1728c35 0 64 -29 64 -64v-448h-256v256h-1536v-256h-256v1216c0 35 29 64 64 64h128c35 0 64 -29 64 -64v-704zM832 832c0 -141 -115 -256 -256 -256s-256 115 -256 256s115 256 256 256s256 -115 256 -256zM2048 576h-1152v384c0 35 29 64 64 64h704 +c212 0 384 -172 384 -384v-64z" /> + <glyph glyph-name="caret-square-o-down" unicode="" +d="M1145 861c11 -21 9 -47 -5 -66l-320 -448c-12 -17 -31 -27 -52 -27s-40 10 -52 27l-320 448c-14 19 -16 45 -5 66c11 22 33 35 57 35h640c24 0 46 -13 57 -35zM1280 160v960c0 17 -15 32 -32 32h-960c-17 0 -32 -15 -32 -32v-960c0 -17 15 -32 32 -32h960 +c17 0 32 15 32 32zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" /> + <glyph glyph-name="shower" unicode="" horiz-adv-x="1920" +d="M1433 1287c13 -13 13 -33 0 -46l-626 -626c-13 -13 -33 -13 -46 0l-82 82c-13 13 -13 33 0 46l44 44c-97 122 -109 289 -35 422c-46 44 -108 71 -176 71c-141 0 -256 -115 -256 -256v-1280h-256v1280c0 282 230 512 512 512c144 0 274 -60 367 -156 +c126 51 272 32 382 -55l44 44c13 13 33 13 46 0zM1344 1024c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM1600 896c-35 0 -64 29 -64 64s29 64 64 64s64 -29 64 -64s-29 -64 -64 -64zM1856 1024c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64 +s29 64 64 64zM1216 896c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM1408 832c0 35 29 64 64 64s64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64zM1728 896c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM1088 768c35 0 64 -29 64 -64 +s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM1344 640c-35 0 -64 29 -64 64s29 64 64 64s64 -29 64 -64s-29 -64 -64 -64zM1600 768c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM1216 512c-35 0 -64 29 -64 64s29 64 64 64s64 -29 64 -64 +s-29 -64 -64 -64zM1472 640c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM1088 512c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM1344 512c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM1216 384 +c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM1088 256c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64z" /> + <glyph glyph-name="paper-plane-o" unicode="" horiz-adv-x="1792" +d="M1764 1525c21 -15 31 -39 27 -64l-256 -1536c-3 -19 -15 -35 -32 -45c-9 -5 -20 -8 -31 -8c-8 0 -16 2 -24 5l-527 215l-298 -327c-12 -14 -29 -21 -47 -21c-8 0 -16 1 -23 4c-25 10 -41 34 -41 60v452l-472 193c-23 9 -38 30 -40 55c-2 24 11 47 32 59l1664 960 +c21 13 48 12 68 -2zM1422 26l221 1323l-1434 -827l336 -137l863 639l-478 -797z" /> + <glyph glyph-name="circle-o-notch" unicode="" horiz-adv-x="1728" +d="M1728 640c0 -477 -387 -864 -864 -864s-864 387 -864 864c0 434 320 793 736 855v-228c-292 -59 -512 -318 -512 -627c0 -353 287 -640 640 -640s640 287 640 640c0 309 -220 568 -512 627v228c416 -62 736 -421 736 -855z" /> + <glyph glyph-name="gnupg" unicode="" horiz-adv-x="1156" +d="M0 667h81v244c0 274 223 497 497 497s497 -223 497 -497v-242c-1 -1 -3 -1 -4 -2v0l-1 -1v0v0v0h-1v-1v0v0v0h-1v0v0v-1v0h-1v0v0v0l-1 -1v0v0h-1v0l-1 -1v0v0v0v0l-1 -1v0v0v0h-1v0v0v0l-1 -1v0v0v0v0v0h-1v0v-1v0v0v0v0h-1v0v0v0l-2 -1v0v0l-1 -1v0h-1v0v-1v0v0v0h-1v0 +v0v0v0h-1v-1h-1l-1 -1h-1v-1l-2 -1h-1l-1 -1v0l-3 -1l-1 -1l-1 -1h-1l-1 -1l-1 -1h-1l-4 -2v0l-1 -1h-1v-1h-2l-3 -2l-1 -1c-1 -1 -3 -1 -4 -2h-1v0l-2 -2h-1h-1l-1 -1v0l-2 -1v0l-2 -1h-1l-1 -1c-1 -1 -3 -1 -4 -2l-1 -1c-2 -1 -3 -1 -5 -2v0l-4 -2l-2 -1 +c-2 -1 -3 -2 -5 -3v0c-99 -47 -257 -97 -557 -119c-215 -15 -346 -110 -431 -224v390v0zM310 667h536v244c0 148 -120 268 -268 268s-268 -120 -268 -268v-244zM1004 628c-1 -1 -4 -1 -5 -2zM803 1288c-64 38 -138 60 -218 60c-218 0 -398 -164 -422 -376 +c64 200 251 345 472 345c59 0 116 -10 168 -29v0zM1156 573v-701h-989c109 61 190 54 325 50c183 -6 385 71 485 173s-9 24 -122 -5s-330 -31 -476 7c459 -6 637 142 739 275s-44 24 -138 -22s-258 -79 -439 -55c273 1 482 137 615 278v0z" /> + <glyph glyph-name="medkit" unicode="" horiz-adv-x="1792" +d="M1280 416v192c0 18 -14 32 -32 32h-224v224c0 18 -14 32 -32 32h-192c-18 0 -32 -14 -32 -32v-224h-224c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h224v-224c0 -18 14 -32 32 -32h192c18 0 32 14 32 32v224h224c18 0 32 14 32 32zM640 1152h512v128h-512v-128z +M256 1152v-1280h-32c-123 0 -224 101 -224 224v832c0 123 101 224 224 224h32zM1440 1152v-1280h-1088v1280h160v160c0 53 43 96 96 96h576c53 0 96 -43 96 -96v-160h160zM1792 928v-832c0 -123 -101 -224 -224 -224h-32v1280h32c123 0 224 -101 224 -224z" /> + <glyph glyph-name="toggle-off" unicode="" horiz-adv-x="2048" +d="M1152 640c0 282 -230 512 -512 512s-512 -230 -512 -512s230 -512 512 -512s512 230 512 512zM1920 640c0 282 -230 512 -512 512h-386c156 -117 258 -303 258 -512s-102 -395 -258 -512h386c282 0 512 230 512 512zM2048 640c0 -353 -287 -640 -640 -640h-768 +c-353 0 -640 287 -640 640s287 640 640 640h768c353 0 640 -287 640 -640z" /> + <glyph glyph-name="calendar-minus-o" unicode="" horiz-adv-x="1664" +d="M1152 416v-64c0 -18 -14 -32 -32 -32h-576c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h576c18 0 32 -14 32 -32zM128 -128h1408v1024h-1408v-1024zM512 1088v288c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-288c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM1280 1088 +v288c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-288c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM1664 1152v-1280c0 -70 -58 -128 -128 -128h-1408c-70 0 -128 58 -128 128v1280c0 70 58 128 128 128h128v96c0 88 72 160 160 160h64c88 0 160 -72 160 -160v-96h384v96 +c0 88 72 160 160 160h64c88 0 160 -72 160 -160v-96h128c70 0 128 -58 128 -128z" /> + <glyph glyph-name="id-badge" unicode="" horiz-adv-x="1280" +d="M1024 278c0 -86 -57 -150 -128 -150h-512c-71 0 -128 64 -128 150c0 156 39 329 196 329c49 -46 115 -75 188 -75s139 29 188 75c157 0 196 -173 196 -329zM870 797c0 -126 -103 -227 -230 -227s-230 101 -230 227c0 125 103 227 230 227s230 -102 230 -227zM1152 -96 +v1376h-1024v-1376c0 -17 15 -32 32 -32h960c17 0 32 15 32 32zM1280 1376v-1472c0 -88 -72 -160 -160 -160h-960c-88 0 -160 72 -160 160v1472c0 88 72 160 160 160h352v-96c0 -18 14 -32 32 -32h192c18 0 32 14 32 32v96h352c88 0 160 -72 160 -160z" /> + <glyph glyph-name="tencent-weibo" unicode="" horiz-adv-x="1166" +d="M785 964c0 -106 -87 -193 -193 -193c-41 0 -79 13 -111 35c-36 -39 -76 -88 -115 -146c-163 -245 -232 -534 -202 -859c2 -29 -19 -54 -47 -57h-5c-26 0 -49 20 -52 47c-39 438 100 748 223 931c45 67 90 121 132 165c-11 24 -16 50 -16 77c0 107 86 193 193 193 +c106 0 193 -86 193 -193zM1166 953c0 -321 -261 -582 -583 -582c-44 0 -88 5 -131 14c-28 7 -45 35 -39 63c7 27 34 45 62 39c35 -9 72 -13 108 -13c264 0 479 215 479 479s-215 479 -479 479s-479 -215 -479 -479c0 -77 18 -150 52 -218c13 -26 3 -57 -22 -70 +c-26 -13 -57 -3 -70 23c-42 81 -64 173 -64 265c0 322 262 583 583 583c322 0 583 -261 583 -583z" /> + <glyph glyph-name="file-archive-o" unicode="" +d="M640 1152h-128v128h128v-128zM768 1024h-128v128h128v-128zM640 896h-128v128h128v-128zM768 768h-128v128h128v-128zM1468 1156c37 -37 68 -111 68 -164v-1152c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h896c53 0 127 -31 164 -68z +M1024 1400v-376h376c-6 17 -15 34 -22 41l-313 313c-7 7 -24 16 -41 22zM1408 -128v1024h-416c-53 0 -96 43 -96 96v416h-128v-128h-128v128h-512v-1536h1280zM781 593c85 -287 107 -349 107 -349c5 -17 8 -34 8 -52c0 -111 -108 -192 -256 -192s-256 81 -256 192 +c0 18 3 35 8 52c0 0 21 62 120 396v128h128v-128h79c29 0 54 -19 62 -47zM640 128c71 0 128 29 128 64s-57 64 -128 64s-128 -29 -128 -64s57 -64 128 -64z" /> + <glyph glyph-name="yoast" unicode="" horiz-adv-x="1664" +d="M339 1318h691l-26 -72h-665c-147 0 -267 -121 -267 -268v-771c0 -126 90 -237 214 -263c32 -7 65 -5 98 -5v-72h-45c-187 0 -339 153 -339 340v771c0 187 152 340 339 340zM1190 1536h247l-482 -1294c-90 -240 -199 -490 -495 -498v195c111 18 182 79 220 182 +c13 34 20 69 20 105s-7 72 -20 106l-285 733h228l187 -585zM1664 978v-1111h-795c16 24 33 47 45 73h678v1038c0 114 -72 216 -179 254l25 67c136 -46 226 -178 226 -321z" /> + <glyph glyph-name="share-alt-square" unicode="" +d="M1280 341c0 118 -96 214 -213 214c-56 0 -107 -22 -145 -58l-241 120c1 8 2 15 2 23s-1 15 -2 23l241 120c38 -36 89 -58 145 -58c117 0 213 96 213 214c0 117 -96 213 -213 213c-118 0 -214 -96 -214 -213c0 -8 1 -15 2 -23l-241 -120c-38 35 -89 57 -145 57 +c-117 0 -213 -95 -213 -213s96 -213 213 -213c56 0 107 22 145 57l241 -120c-1 -8 -2 -15 -2 -23c0 -117 96 -213 214 -213c117 0 213 96 213 213zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960 +c159 0 288 -129 288 -288z" /> + <glyph glyph-name="imdb" unicode="" +d="M922 739v-182c0 -36 7 -69 -38 -68v309c44 0 38 -23 38 -59zM1238 643v-121c0 -20 6 -53 -23 -53c-6 0 -11 3 -14 9c-8 19 -4 163 -4 165c0 14 -4 47 18 47c27 0 23 -27 23 -47zM180 407h122v472h-122v-472zM614 407h106v472h-159l-28 -221c-10 74 -20 148 -32 221h-158 +v-472h107v312l45 -312h76l43 319v-319zM1039 712c0 30 1 62 -5 90c-16 83 -116 77 -181 77h-91v-472c318 0 277 -22 277 305zM1356 515v133c0 64 -3 111 -82 111c-33 0 -55 -10 -77 -34v154h-117v-472h110l7 30c21 -25 44 -36 77 -36c73 0 82 56 82 114zM1536 1248v-1216 +c0 -88 -72 -160 -160 -160h-1216c-88 0 -160 72 -160 160v1216c0 88 72 160 160 160h1216c88 0 160 -72 160 -160z" /> + <glyph glyph-name="snapchat-square" unicode="" +d="M1280 388c0 14 -8 24 -22 27c-91 19 -160 83 -198 167c-4 8 -7 16 -7 25c0 45 124 36 124 100c0 27 -33 44 -57 44c-22 0 -40 -16 -63 -16c-4 0 -8 1 -12 2c3 38 5 77 5 115c0 34 -2 82 -17 114c-48 104 -140 165 -255 165c-125 0 -220 -47 -275 -165 +c-15 -32 -18 -80 -18 -115c0 -38 3 -76 6 -114c-5 -1 -10 -2 -15 -2c-22 0 -41 16 -62 16c-25 0 -55 -17 -55 -45c0 -62 124 -54 124 -99c0 -9 -3 -17 -7 -25c-39 -84 -106 -147 -198 -167c-14 -3 -22 -13 -22 -27c0 -47 106 -64 138 -69c9 -24 5 -66 40 -66 +c26 0 51 10 77 10c106 0 134 -95 256 -95c127 0 151 95 258 95c26 0 52 -9 78 -9c34 0 31 42 39 65c32 5 138 22 138 69zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" /> + <glyph glyph-name="spell-check" unicode="" horiz-adv-x="2049" +d="M2049 700c0 -25 -10 -50 -28 -68l-724 -724l-136 -136c-18 -18 -43 -28 -68 -28s-50 10 -68 28l-136 136l-362 362c-18 18 -28 43 -28 68s10 50 28 68l136 136c18 18 43 28 68 28s50 -10 68 -28l294 -295l656 657c18 18 43 28 68 28s50 -10 68 -28l136 -136 +c18 -18 28 -43 28 -68zM0 880v73h48l158 454h111l158 -454h49v-73h-199v73h52l-32 98h-167l-32 -98h52v-73h-198zM200 1127h122l-49 149c-2 8 -5 16 -6 23c-1 8 -3 15 -3 18l-1 5h-2c-1 -13 -5 -29 -10 -46zM569 880v73h63v381h-63v73h242c40 0 72 -5 95 -14 +c24 -9 44 -25 58 -47c15 -21 22 -46 22 -75c0 -25 -6 -47 -17 -67s-28 -35 -48 -46v-1c28 -8 50 -24 64 -47s22 -49 22 -78c0 -35 -10 -65 -30 -91s-45 -43 -75 -52c-21 -6 -47 -9 -79 -9h-254zM730 1192h92c20 0 37 6 48 18c11 13 17 30 17 51c0 29 -10 49 -30 60 +c-11 5 -27 8 -46 8h-81v-137zM730 958h98c15 0 27 2 37 6c13 5 25 15 32 28c7 14 11 29 11 46c0 23 -7 41 -21 55c-13 14 -32 22 -56 22h-101v-157zM1131 950c-52 53 -78 118 -78 196s26 142 78 193s116 77 193 77c18 0 39 -2 60 -5c22 -3 44 -9 67 -16s41 -18 56 -33 +s23 -32 23 -51v-72h-88v41c0 12 -7 23 -20 31s-29 14 -45 17s-32 5 -48 5c-51 0 -94 -17 -127 -51c-33 -33 -49 -77 -49 -132c0 -59 17 -106 51 -142s78 -54 130 -54c14 0 29 2 45 4s31 8 46 16s23 19 23 32v41h89v-72c0 -18 -7 -35 -22 -49c-14 -14 -33 -26 -56 -33 +c-22 -7 -45 -13 -67 -16c-22 -4 -44 -6 -64 -6c-79 0 -145 27 -197 79v0z" /> + <glyph glyph-name="building-o" unicode="" horiz-adv-x="1408" +d="M384 224v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM384 480v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM640 480v-64c0 -17 -15 -32 -32 -32h-64 +c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM384 736v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM1152 224v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64 +c17 0 32 -15 32 -32zM896 480v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM640 736v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM384 992v-64 +c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM1152 480v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM896 736v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64 +c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM640 992v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM384 1248v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM1152 736 +v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM896 992v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM640 1248v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32 +v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM1152 992v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM896 1248v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32z +M1152 1248v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM896 -128h384v1536h-1152v-1536h384v224c0 17 15 32 32 32h320c17 0 32 -15 32 -32v-224zM1408 1472v-1664c0 -35 -29 -64 -64 -64h-1280c-35 0 -64 29 -64 64 +v1664c0 35 29 64 64 64h1280c35 0 64 -29 64 -64z" /> + <glyph glyph-name="sort-alpha-desc" unicode="" horiz-adv-x="1629" +d="M1159 104h177l-72 218l-12 47c-1 8 -2 14 -2 20h-4l-3 -20c-3 -12 -4 -27 -11 -47zM704 96c0 -9 -4 -17 -10 -24l-319 -319c-7 -6 -15 -9 -23 -9s-16 3 -23 9l-320 320c-9 10 -12 23 -7 35s17 20 30 20h192v1376c0 18 14 32 32 32h192c18 0 32 -14 32 -32v-1376h192 +c18 0 32 -14 32 -32zM1629 -150v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70zM1540 1001v-233h-584v90l369 529c8 12 16 22 21 27l11 9v3c-4 0 -8 -1 -14 -1c-8 -2 -18 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530 +c-6 -9 -14 -18 -21 -26l-11 -10v-3l14 3c9 1 18 1 30 1h248v119h121z" /> + <glyph glyph-name="map-signs" unicode="" horiz-adv-x="1718" +d="M1708 1239c13 -13 13 -33 0 -46l-141 -141c-18 -18 -43 -28 -68 -28h-1344c-35 0 -64 29 -64 64v256c0 35 29 64 64 64h576v64c0 35 29 64 64 64h128c35 0 64 -29 64 -64v-64h512c25 0 50 -10 68 -28zM731 320h256v-512c0 -35 -29 -64 -64 -64h-128c-35 0 -64 29 -64 64 +v512zM1563 768c35 0 64 -29 64 -64v-256c0 -35 -29 -64 -64 -64h-1344c-25 0 -50 10 -68 28l-141 141c-13 13 -13 33 0 46l141 141c18 18 43 28 68 28h512v192h256v-192h576z" /> + <glyph glyph-name="long-arrow-right" unicode="" horiz-adv-x="1728" +d="M1728 643c0 -9 -4 -18 -10 -24l-384 -354c-10 -9 -23 -11 -35 -6c-11 5 -19 16 -19 29v224h-1248c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h1248v224c0 13 7 24 19 29s25 3 35 -5l384 -350c6 -6 10 -14 10 -23z" /> + <glyph glyph-name="first-order" unicode="" +d="M1322 640c0 -26 -1 -51 -5 -76l-236 14l224 -78c-13 -51 -33 -98 -58 -141l-214 103l177 -158c-30 -41 -66 -77 -107 -108l-157 178l103 -215c-43 -26 -90 -45 -140 -59l-79 228l14 -240c-25 -4 -50 -6 -76 -6c-25 0 -51 2 -76 6l14 238l-78 -226c-50 13 -97 33 -140 59 +l103 215l-157 -178c-41 30 -77 67 -108 108l178 158l-214 -104c-25 44 -45 91 -58 141l224 79l-237 -14c-3 25 -5 50 -5 76s2 52 5 77l238 -14l-225 79c13 50 33 97 58 140l214 -104l-177 159c31 41 67 77 107 108l158 -178l-103 215c43 25 90 45 140 58l77 -224l-13 236 +c24 4 50 6 75 6c26 0 51 -2 76 -6l-14 -237l78 225c50 -13 97 -33 140 -59l-103 -214l158 178c40 -31 76 -67 107 -108l-177 -159l213 104c26 -43 45 -91 58 -141l-224 -78l237 14c4 -25 5 -51 5 -77zM1352 640c0 325 -262 588 -584 588c-323 0 -584 -263 -584 -588 +c0 -324 261 -587 584 -587c322 0 584 263 584 587zM1425 1023v-766l-657 -383l-657 383v766l657 383zM768 -183l708 412v823l-708 411l-708 -411v-823zM1536 1088v-896l-768 -448l-768 448v896l768 448z" /> + <glyph glyph-name="calendar-check-o" unicode="" horiz-adv-x="1664" +d="M1303 572l-512 -512c-13 -12 -33 -12 -46 0l-288 288c-12 13 -12 33 0 45l46 46c12 12 32 12 45 0l220 -220l444 444c13 12 33 12 45 0l46 -46c12 -12 12 -32 0 -45zM128 -128h1408v1024h-1408v-1024zM512 1088v288c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-288 +c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM1280 1088v288c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-288c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM1664 1152v-1280c0 -70 -58 -128 -128 -128h-1408c-70 0 -128 58 -128 128v1280c0 70 58 128 128 128h128v96 +c0 88 72 160 160 160h64c88 0 160 -72 160 -160v-96h384v96c0 88 72 160 160 160h64c88 0 160 -72 160 -160v-96h128c70 0 128 -58 128 -128z" /> + <glyph glyph-name="id-card" unicode="" horiz-adv-x="2048" +d="M896 324c0 132 -32 284 -164 284c-40 -40 -95 -64 -156 -64s-116 24 -156 64c-132 0 -164 -152 -164 -284c0 -73 48 -132 107 -132h426c59 0 107 59 107 132zM768 768c0 106 -86 192 -192 192s-192 -86 -192 -192s86 -192 192 -192s192 86 192 192zM1792 288v64 +c0 18 -14 32 -32 32h-704c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h704c18 0 32 14 32 32zM1408 544v64c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h320c18 0 32 14 32 32zM1792 544v64c0 18 -14 32 -32 32h-192c-18 0 -32 -14 -32 -32 +v-64c0 -18 14 -32 32 -32h192c18 0 32 14 32 32zM1792 800v64c0 18 -14 32 -32 32h-704c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h704c18 0 32 14 32 32zM128 1152h1792v96c0 18 -14 32 -32 32h-1728c-18 0 -32 -14 -32 -32v-96zM2048 1248v-1216 +c0 -88 -72 -160 -160 -160h-1728c-88 0 -160 72 -160 160v1216c0 88 72 160 160 160h1728c88 0 160 -72 160 -160z" /> + <glyph glyph-name="globe-w" unicode="" +d="M768 1404c424 0 768 -344 768 -768s-344 -768 -768 -768s-768 344 -768 768s344 768 768 768zM924 1238v0c-3 0 -6 -1 -7 -1c-2 0 -153 -25 -208 -34s-156 -30 -201 -34s-46 0 -69 0c-7 0 -14 1 -21 2c-65 -43 -152 -132 -193 -198c0 -4 2 -7 6 -11c12 -12 46 0 69 0 +s59 8 69 0s1 -7 2 -9s-16 -108 -7 -144s10 -88 33 -129s110 -63 145 -98s106 -34 112 -71s-30 -79 -42 -102s-40 -40 -35 -69s46 -47 69 -70s47 -29 69 -69s25 -125 35 -173c2 -9 5 -22 7 -31c3 0 8 -1 11 -1c57 0 146 15 200 33c6 41 13 83 24 103c18 33 24 24 36 36 +s23 18 35 35s23 46 34 68s38 38 33 67s-47 47 -70 70s-35 50 -69 69s-94 24 -130 33s-163 15 -165 16s0 -8 -8 2s-3 50 -3 73s13 44 30 85c17 23 7 12 33 31c13 12 55 -57 73 -57s-4 117 7 128c46 46 163 125 163 174s-46 46 -69 69s-60 -39 -143 -39s97 131 109 143 +s30 22 35 35s0 23 0 34s14 28 9 32c-2 2 -5 2 -8 2zM1041 1214v0c-6 -14 -7 -31 -14 -45c-12 -23 -35 -43 -35 -69s23 -46 35 -69s1 -60 34 -69s69 46 104 69c21 14 50 26 72 40c-46 50 -134 114 -196 143z" /> + <glyph glyph-name="github-alt" unicode="" horiz-adv-x="1664" +d="M640 320c0 -73 -38 -192 -128 -192s-128 119 -128 192s38 192 128 192s128 -119 128 -192zM1280 320c0 -73 -38 -192 -128 -192s-128 119 -128 192s38 192 128 192s128 -119 128 -192zM1440 320c0 153 -93 288 -256 288c-66 0 -129 -12 -195 -21 +c-52 -8 -104 -11 -157 -11s-105 3 -157 11c-65 9 -129 21 -195 21c-163 0 -256 -135 -256 -288c0 -306 280 -353 524 -353h168c244 0 524 47 524 353zM1664 496c0 -111 -11 -229 -61 -331c-132 -267 -495 -293 -755 -293c-264 0 -649 23 -786 293c-51 101 -62 220 -62 331 +c0 146 40 284 136 396c-18 55 -27 113 -27 170c0 75 17 150 51 218c158 0 259 -69 379 -163c101 24 205 35 309 35c94 0 189 -10 280 -32c119 93 220 160 376 160c34 -68 51 -143 51 -218c0 -57 -9 -114 -27 -168c96 -113 136 -252 136 -398z" /> + <glyph glyph-name="sign-language" unicode="" horiz-adv-x="1664" +d="M831 863c21 0 41 -6 59 -18l222 -148c41 -27 78 -60 110 -97l146 -170c25 -29 36 -68 29 -106l-72 -413c-8 -42 -42 -74 -85 -79l-527 -56l-352 -32h-9c-52 0 -96 42 -96 96c0 50 42 90 92 96l260 32h-448c-55 0 -99 46 -96 101c3 52 49 91 101 91l442 1l-521 64 +c-54 6 -93 55 -85 110c8 48 52 80 100 80h10l481 -60l-351 94c-50 13 -88 59 -80 110c8 48 49 81 95 81c7 0 13 -1 20 -2l448 -96l217 -37c2 0 4 -1 6 -1c30 0 45 41 18 59l-186 125c-46 31 -57 93 -24 137c18 25 47 38 76 38zM761 661l186 -125l-218 37l-5 2l-36 38 +l-238 262c-2 2 -3 5 -5 7c-31 41 -24 101 19 134c40 31 97 21 132 -16l142 -147c-3 -3 -6 -5 -9 -8c-21 -29 -29 -64 -23 -99c6 -34 26 -65 55 -85zM1648 1115l15 -266c3 -49 -1 -99 -11 -147l-48 -219c-8 -38 -32 -69 -67 -87l-106 -54c1 40 -12 78 -39 109l-146 170 +c-34 39 -73 74 -117 103l-222 148c-22 15 -48 23 -76 23c-34 0 -65 -14 -88 -37l-235 312c-33 44 -23 106 23 137c43 30 102 16 134 -26l266 -352l-262 455c-28 47 -12 108 37 134c46 24 104 5 130 -40l241 -420l-136 337c-19 48 -6 106 40 130c49 26 109 5 132 -45 +l193 -415l101 -196c16 -31 63 -18 61 16l-12 224c-3 55 40 101 95 102c52 0 94 -44 97 -96z" /> + <glyph glyph-name="play" unicode="" horiz-adv-x="1407" +d="M1384 609l-1328 -738c-31 -17 -56 -2 -56 33v1472c0 35 25 50 56 33l1328 -738c31 -17 31 -45 0 -62z" /> + <glyph glyph-name="heart-o" unicode="" horiz-adv-x="1792" +d="M1664 940c0 281 -190 340 -350 340c-149 0 -317 -161 -369 -223c-24 -29 -74 -29 -98 0c-52 62 -220 223 -369 223c-160 0 -350 -59 -350 -340c0 -183 185 -353 187 -355l581 -560l580 559c3 3 188 173 188 356zM1792 940c0 -240 -220 -441 -229 -450l-623 -600 +c-12 -12 -28 -18 -44 -18s-32 6 -44 18l-624 602c-8 7 -228 208 -228 448c0 293 179 468 478 468c175 0 339 -138 418 -216c79 78 243 216 418 216c299 0 478 -175 478 -468z" /> + <glyph glyph-name="weibo" unicode="" horiz-adv-x="1792" +d="M675 252c28 46 13 99 -34 119c-45 19 -105 -1 -133 -45c-29 -45 -15 -98 30 -119c46 -21 108 -1 137 45zM769 373c10 18 4 38 -14 45c-18 6 -40 -2 -50 -19c-10 -18 -5 -37 13 -45c18 -7 41 1 51 19zM943 266c-60 -136 -234 -210 -382 -162c-143 46 -203 187 -141 314 +c62 124 221 194 362 158c147 -38 221 -176 161 -310zM1255 426c-19 195 -275 329 -572 300c-297 -30 -521 -211 -502 -406s275 -329 572 -300c297 30 521 211 502 406zM1563 422c0 -225 -324 -508 -811 -508c-372 0 -752 180 -752 477c0 155 98 334 267 503 +c226 226 489 328 588 229c44 -43 48 -119 20 -209c-14 -46 43 -20 43 -21c182 77 341 81 399 -2c31 -44 28 -106 0 -178c-13 -33 4 -38 29 -46c103 -32 217 -109 217 -245zM1489 1046c57 -63 73 -150 48 -226c-10 -31 -43 -48 -74 -38s-48 43 -38 74c12 38 4 80 -24 111 +s-69 43 -107 35c-32 -7 -64 13 -70 45c-7 32 13 63 45 70c78 17 163 -7 220 -71zM1670 1209c118 -130 149 -308 99 -464c-12 -36 -50 -56 -86 -44s-56 50 -45 86c36 111 14 238 -70 330c-84 93 -207 128 -321 104c-37 -8 -74 16 -82 53s16 73 53 81c161 34 334 -15 452 -146 +z" /> + <glyph glyph-name="angle-down" unicode="" horiz-adv-x="998" +d="M998 800c0 -8 -4 -17 -10 -23l-466 -466c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-466 466c-6 6 -10 15 -10 23s4 17 10 23l50 50c6 6 14 10 23 10c8 0 17 -4 23 -10l393 -393l393 393c6 6 15 10 23 10s17 -4 23 -10l50 -50c6 -6 10 -15 10 -23z" /> + <glyph glyph-name="cc-jcb" unicode="" horiz-adv-x="2304" +d="M1951 538c0 -36 -24 -62 -54 -68c-4 -1 -13 -2 -18 -2h-153v140h153c5 0 14 -1 18 -2c30 -6 54 -33 54 -68zM1933 751c0 -35 -24 -58 -53 -63c-3 -1 -10 -1 -15 -1h-139v129h139c5 0 12 -1 15 -1c29 -5 53 -29 53 -64zM728 587v308h-228v-308c0 -75 -51 -131 -143 -131 +c-78 0 -155 23 -229 59v-112c120 -33 272 -33 272 -33c254 0 328 97 328 217zM1442 403v113c-52 -27 -118 -53 -200 -59c-144 -11 -230 59 -230 183s86 194 230 183c82 -6 147 -31 200 -58v112c-107 27 -208 31 -208 31c-352 16 -452 -123 -452 -268s100 -284 452 -268 +c0 0 101 4 208 31zM2176 518c0 74 -66 122 -152 128v3c78 11 121 62 121 121c0 76 -63 120 -148 124c-6 0 -17 1 -26 1h-455v-510h491c97 0 169 52 169 133zM2304 1280v-1280c0 -70 -58 -128 -128 -128h-2048c-70 0 -128 58 -128 128v1280c0 70 58 128 128 128h2048 +c70 0 128 -58 128 -128z" /> + <glyph glyph-name="compress" unicode="" horiz-adv-x="1510" +d="M755 576v-448c0 -35 -29 -64 -64 -64c-17 0 -33 7 -45 19l-144 144l-332 -332c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-114 114c-6 6 -10 15 -10 23s4 17 10 23l332 332l-144 144c-12 12 -19 28 -19 45c0 35 29 64 64 64h448c35 0 64 -29 64 -64zM1510 1248 +c0 -8 -4 -17 -10 -23l-332 -332l144 -144c12 -12 19 -28 19 -45c0 -35 -29 -64 -64 -64h-448c-35 0 -64 29 -64 64v448c0 35 29 64 64 64c17 0 33 -7 45 -19l144 -144l332 332c6 6 15 10 23 10s17 -4 23 -10l114 -114c6 -6 10 -15 10 -23z" /> + <glyph glyph-name="pencil-square-o" unicode="" horiz-adv-x="1784" +d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072c-9 9 -24 8 -33 -1l-350 -350c-9 -9 -10 -24 -1 -33s24 -8 33 1l350 350c9 9 10 24 1 33zM1408 478v-190c0 -159 -129 -288 -288 -288h-832c-159 0 -288 129 -288 288v832c0 159 129 288 288 288h832 +c40 0 80 -8 117 -25c9 -4 16 -13 18 -23c2 -11 -1 -21 -9 -29l-49 -49c-9 -9 -21 -12 -32 -8c-15 4 -30 6 -45 6h-832c-88 0 -160 -72 -160 -160v-832c0 -88 72 -160 160 -160h832c88 0 160 72 160 160v126c0 8 3 16 9 22l64 64c10 10 23 12 35 7s20 -16 20 -29zM1312 1216 +l288 -288l-672 -672h-288v288zM1756 1084l-92 -92l-288 288l92 92c37 37 99 37 136 0l152 -152c37 -37 37 -99 0 -136z" /> + <glyph glyph-name="google-plus-square" unicode="" +d="M917 631c0 25 -3 45 -6 64h-362v-132h217c-8 -56 -65 -165 -217 -165c-132 0 -239 108 -239 242s107 242 239 242c74 0 124 -31 153 -59l104 101c-67 62 -154 100 -257 100c-213 0 -384 -172 -384 -384s171 -384 384 -384c221 0 368 156 368 375zM1262 585h109v110h-109 +v110h-110v-110h-110v-110h110v-110h110v110zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" /> + <glyph glyph-name="keybase" unicode="" horiz-adv-x="1547" +d="M146 -80c-13 28 -30 67 -39 87l-13 38l-44 -49l-44 -48l-4 92c-7 131 4 267 26 363c50 214 208 408 411 511l45 21l-10 33c-7 17 -14 55 -16 79l-4 46l-46 4c-70 7 -107 26 -131 76c-13 26 -13 31 -9 101c4 92 12 111 40 142c35 39 59 45 146 41c63 -4 77 -6 105 -19 +c17 -9 33 -18 35 -18s22 24 46 57l41 59l26 -15c15 -9 33 -20 42 -24l15 -9l-13 -33c-7 -17 -16 -48 -18 -63l-4 -31l37 -4c133 -13 234 -94 271 -216c11 -39 11 -116 0 -153c-11 -35 -11 -37 -2 -37c15 0 118 -51 159 -77c81 -52 175 -143 227 -222 +c98 -146 140 -306 123 -481c-9 -105 -29 -187 -64 -268l-13 -31h-109l26 52c28 57 50 136 61 206c7 48 10 179 3 203l-5 15l-28 -31c-70 -76 -172 -98 -310 -61c-118 31 -167 37 -278 37c-85 0 -113 -2 -159 -13c-127 -28 -217 -69 -341 -159c-46 -33 -83 -59 -85 -59 +s4 22 13 50s24 74 33 105l17 55l-19 -20c-11 -11 -42 -42 -68 -70l-46 -50l11 -42c13 -55 44 -122 77 -172c13 -22 24 -40 24 -42s-26 -2 -57 -2h-57zM338 449c105 111 190 200 192 200c2 -2 -8 -35 -19 -72c-72 -227 -87 -271 -85 -273c0 0 26 9 54 20 +c186 81 402 92 631 31c103 -26 142 -26 192 0c28 15 40 23 53 45c24 37 26 90 11 138c-37 105 -182 240 -317 299c-70 31 -74 30 -89 15l-14 -13l57 -69c31 -37 64 -79 68 -90c13 -26 15 -68 2 -94c-17 -37 -70 -64 -111 -55c-17 4 -25 3 -42 -10c-48 -35 -100 -26 -144 26 +c-35 39 -44 59 -46 98c0 20 -7 43 -11 52c-7 13 -8 28 -8 48l2 31l-29 7c-39 11 -85 32 -111 52c-13 9 -24 17 -28 17s-33 -13 -64 -28c-212 -109 -349 -312 -371 -541c-2 -22 -4 -51 -6 -62l-3 -19l24 24c11 11 107 112 212 223zM904 610c20 15 37 28 41 28 +c2 0 9 -6 16 -15c11 -17 30 -17 39 -2c7 11 7 13 -122 170c-76 94 -92 110 -103 110c-26 -2 -19 -23 22 -73l39 -48l-22 -17c-24 -22 -26 -26 -11 -39c11 -11 13 -9 35 6l24 15l16 -13c9 -7 13 -17 13 -19c0 -4 -17 -20 -37 -37c-20 -15 -35 -34 -35 -38c0 -7 10 -24 30 -48 +c7 -13 18 -8 55 20zM679 920c13 39 56 70 100 70c24 0 59 -20 83 -46l22 -26l20 24c55 61 61 147 17 221c-33 55 -94 87 -179 96c-46 4 -57 8 -81 32l-17 18l-9 -13c-17 -26 -54 -111 -65 -144c-15 -50 -9 -129 11 -168c20 -37 72 -88 87 -81c2 -2 7 6 11 17zM484 1217 +c4 11 16 39 27 61s19 44 19 51c0 20 -21 28 -80 32c-52 4 -57 3 -68 -8c-9 -9 -13 -20 -13 -35c0 -13 -3 -37 -5 -57c-4 -46 2 -54 48 -61c68 -4 65 -5 72 17zM417 1270c0 37 4 41 35 41h28v-61h-61v20h-2zM554 -4c-13 13 -17 22 -17 44c0 41 24 66 63 66 +c37 0 64 -27 64 -64c0 -39 -25 -61 -66 -63c-22 0 -31 4 -44 17zM976 -10c-50 39 -24 116 39 116c39 0 61 -25 63 -66c0 -24 -2 -31 -17 -44s-22 -17 -44 -17c-20 0 -32 4 -41 11z" /> + <glyph glyph-name="angle-right" unicode="" horiz-adv-x="582" +d="M582 576c0 -8 -4 -17 -10 -23l-466 -466c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-50 50c-6 6 -10 14 -10 23c0 8 4 17 10 23l393 393l-393 393c-6 6 -10 15 -10 23s4 17 10 23l50 50c6 6 15 10 23 10s17 -4 23 -10l466 -466c6 -6 10 -15 10 -23z" /> + <glyph glyph-name="forumbee" unicode="" +d="M934 1386c-423 -161 -756 -499 -914 -923c-13 58 -20 117 -20 176c0 423 342 766 765 766c57 0 114 -7 169 -19zM1203 1267c62 -43 117 -95 164 -155c-518 -151 -923 -558 -1071 -1077c-59 46 -112 100 -155 162c149 514 549 918 1062 1070zM470 -67 +c154 475 526 849 999 1006c27 -62 45 -128 54 -195c-390 -160 -700 -472 -859 -863c-67 9 -132 26 -194 52zM1536 -125c-124 32 -247 70 -367 115c-88 -55 -187 -92 -290 -107c146 273 371 499 643 646c-14 -100 -49 -198 -101 -284c45 -121 83 -245 115 -370z" /> + <glyph glyph-name="eject" unicode="" horiz-adv-x="1538" +d="M14 557l710 710c25 25 65 25 90 0l710 -710c25 -25 16 -45 -19 -45h-1472c-35 0 -44 20 -19 45zM1473 0h-1408c-35 0 -64 29 -64 64v256c0 35 29 64 64 64h1408c35 0 64 -29 64 -64v-256c0 -35 -29 -64 -64 -64z" /> + <glyph glyph-name="mobile" unicode="" horiz-adv-x="768" +d="M464 128c0 44 -36 80 -80 80s-80 -36 -80 -80s36 -80 80 -80s80 36 80 80zM672 288v704c0 17 -15 32 -32 32h-512c-17 0 -32 -15 -32 -32v-704c0 -17 15 -32 32 -32h512c17 0 32 15 32 32zM480 1136c0 9 -7 16 -16 16h-160c-9 0 -16 -7 -16 -16s7 -16 16 -16h160 +c9 0 16 7 16 16zM768 1152v-1024c0 -70 -58 -128 -128 -128h-512c-70 0 -128 58 -128 128v1024c0 70 58 128 128 128h512c70 0 128 -58 128 -128z" /> + <glyph glyph-name="hourglass-end" unicode="" +d="M1408 1408c0 -370 -177 -638 -373 -768c196 -130 373 -398 373 -768h96c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-1472c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h96c0 370 177 638 373 768c-196 130 -373 398 -373 768h-96c-18 0 -32 14 -32 32v64 +c0 18 14 32 32 32h1472c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-96zM874 700c202 76 406 343 406 708h-1024c0 -365 204 -632 406 -708c25 -9 42 -33 42 -60s-17 -51 -42 -60c-86 -32 -173 -100 -244 -196h700c-71 96 -158 164 -244 196c-25 9 -42 33 -42 60 +s17 51 42 60z" /> + <glyph glyph-name="trash-o" unicode="" horiz-adv-x="1408" +d="M512 800v-576c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v576c0 18 14 32 32 32h64c18 0 32 -14 32 -32zM768 800v-576c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v576c0 18 14 32 32 32h64c18 0 32 -14 32 -32zM1024 800v-576c0 -18 -14 -32 -32 -32h-64 +c-18 0 -32 14 -32 32v576c0 18 14 32 32 32h64c18 0 32 -14 32 -32zM1152 76v948h-896v-948c0 -48 27 -76 32 -76h832c5 0 32 28 32 76zM480 1152h448l-48 117c-3 4 -12 10 -17 11h-317c-6 -1 -14 -7 -17 -11zM1408 1120v-64c0 -18 -14 -32 -32 -32h-96v-948 +c0 -110 -72 -204 -160 -204h-832c-88 0 -160 90 -160 200v952h-96c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h309l70 167c20 49 80 89 133 89h320c53 0 113 -40 133 -89l70 -167h309c18 0 32 -14 32 -32z" /> + <glyph glyph-name="star-o" unicode="" horiz-adv-x="1664" +d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889c0 -18 -13 -35 -26 -48l-363 -354l86 -500c1 -7 1 -13 1 -20c0 -27 -12 -50 -41 -50c-14 0 -28 5 -40 12l-449 236l-449 -236c-13 -7 -26 -12 -40 -12 +c-29 0 -42 24 -42 50c0 7 1 13 2 20l86 500l-364 354c-12 13 -25 30 -25 48c0 30 31 42 56 46l502 73l225 455c9 19 26 41 49 41s40 -22 49 -41l225 -455l502 -73c24 -4 56 -16 56 -46z" /> + <glyph glyph-name="floppy-o" unicode="" +d="M384 0h768v384h-768v-384zM1280 0h128v896c0 19 -17 60 -30 73l-281 281c-14 14 -53 30 -73 30v-416c0 -53 -43 -96 -96 -96h-576c-53 0 -96 43 -96 96v416h-128v-1280h128v416c0 53 43 96 96 96h832c53 0 96 -43 96 -96v-416zM896 928v320c0 17 -15 32 -32 32h-192 +c-17 0 -32 -15 -32 -32v-320c0 -17 15 -32 32 -32h192c17 0 32 15 32 32zM1536 896v-928c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1344c0 53 43 96 96 96h928c53 0 126 -30 164 -68l280 -280c38 -38 68 -111 68 -164z" /> + <glyph glyph-name="file-powerpoint-o" unicode="" +d="M1468 1156c37 -37 68 -111 68 -164v-1152c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h896c53 0 127 -31 164 -68zM1024 1400v-376h376c-6 17 -15 34 -22 41l-313 313c-7 7 -24 16 -41 22zM1408 -128v1024h-416c-53 0 -96 43 -96 96v416 +h-768v-1536h1280zM416 106h92v555h-92v107h368c46 0 92 -4 130 -19c83 -35 137 -119 137 -228s-56 -202 -146 -233c-36 -13 -75 -15 -118 -15h-137v-167h93v-106h-327v106zM769 386c31 0 57 5 78 15c42 21 62 64 62 120c0 53 -20 94 -56 115c-21 12 -48 18 -83 18h-120v-268 +h119z" /> + <glyph glyph-name="cc-discover" unicode="" horiz-adv-x="2304" +d="M313 759c0 -32 -13 -63 -36 -84c-20 -18 -47 -26 -89 -26h-17v220h17c42 0 68 -7 89 -27c23 -20 36 -51 36 -83zM2089 824c0 -34 -22 -52 -64 -52h-19v101h20c41 0 63 -17 63 -49zM380 759c0 98 -73 167 -179 167h-95v-333h95c50 0 87 11 119 38c38 32 60 79 60 128z +M410 593h65v333h-65v-333zM730 694c0 53 -22 77 -96 104c-39 14 -50 24 -50 42c0 21 20 37 48 37c20 0 36 -8 53 -27l34 44c-28 25 -62 37 -98 37c-59 0 -104 -41 -104 -95c0 -46 21 -70 82 -92c25 -9 38 -14 45 -19c13 -8 19 -20 19 -34c0 -27 -21 -47 -50 -47 +c-31 0 -56 15 -71 44l-42 -40c30 -44 66 -64 115 -64c68 0 115 45 115 110zM1008 604v77c-26 -26 -49 -37 -78 -37c-66 0 -112 48 -112 115c0 64 48 115 109 115c31 0 54 -11 81 -38v77c-28 14 -52 20 -80 20c-98 0 -177 -77 -177 -174c0 -98 77 -174 176 -174 +c28 0 52 5 81 19zM2240 0v527c-160 -100 -723 -420 -1633 -591h1569c35 0 64 29 64 64zM1389 757c0 100 -81 181 -181 181s-181 -81 -181 -181s81 -181 181 -181s181 81 181 181zM1541 584l144 342h-71l-90 -224l-89 224h-71l142 -342h35zM1714 593h184v56h-119v90h115v56 +h-115v74h119v57h-184v-333zM2105 593h80l-105 140c49 10 76 43 76 94c0 63 -43 99 -118 99h-97v-333h65v133h9zM2304 1274v-1268c0 -74 -59 -134 -132 -134h-2040c-73 0 -132 60 -132 134v1268c0 74 59 134 132 134h2040c73 0 132 -60 132 -134z" /> + <glyph glyph-name="bomb" unicode="" horiz-adv-x="1792" +d="M571 947c-13 33 -50 48 -83 35c-144 -58 -260 -174 -318 -318c-13 -33 2 -70 35 -83c8 -3 16 -5 24 -5c26 0 49 15 60 40c45 112 135 202 247 247c33 14 49 51 35 84zM1513 1303l46 -46l-244 -243l68 -68c25 -25 25 -66 0 -91l-64 -64c56 -101 89 -218 89 -343 +c0 -389 -315 -704 -704 -704s-704 315 -704 704s315 704 704 704c125 0 242 -33 343 -89l64 64c25 25 66 25 91 0l68 -68zM1521 1359c-6 -6 -14 -10 -22 -10c-9 0 -17 4 -23 10l-91 90c-12 13 -12 33 0 46c13 12 33 12 46 0l90 -91c13 -12 13 -33 0 -45zM1751 1129 +c-7 -6 -15 -9 -23 -9s-16 3 -23 9l-90 91c-13 12 -13 33 0 45c12 13 33 13 45 0l91 -90c12 -13 12 -33 0 -46zM1792 1312c0 -18 -14 -32 -32 -32h-96c-18 0 -32 14 -32 32s14 32 32 32h96c18 0 32 -14 32 -32zM1600 1504v-96c0 -18 -14 -32 -32 -32s-32 14 -32 32v96 +c0 18 14 32 32 32s32 -14 32 -32zM1751 1449l-91 -90c-6 -6 -14 -10 -22 -10c-9 0 -17 4 -23 10c-13 12 -13 33 0 45l90 91c13 12 33 12 46 0c12 -13 12 -33 0 -46z" /> + <glyph glyph-name="random" unicode="" horiz-adv-x="1792" +d="M666 1055c-56 -86 -97 -179 -137 -273c-58 121 -122 242 -273 242h-224c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h224c178 0 309 -83 410 -225zM1792 256c0 -8 -3 -17 -9 -23l-320 -320c-6 -6 -15 -9 -23 -9c-17 0 -32 15 -32 32v192c-297 0 -480 -35 -665 225 +c55 86 96 179 136 273c58 -121 122 -242 273 -242h256v192c0 18 14 32 32 32c9 0 17 -4 24 -10l319 -319c6 -6 9 -15 9 -23zM1792 1152c0 -8 -3 -17 -9 -23l-320 -320c-6 -6 -15 -9 -23 -9c-17 0 -32 14 -32 32v192h-256c-133 0 -196 -91 -252 -199 +c-29 -56 -54 -114 -78 -171c-111 -258 -241 -526 -566 -526h-224c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h224c133 0 196 91 252 199c29 56 54 114 78 171c111 258 241 526 566 526h256v192c0 18 14 32 32 32c9 0 17 -4 24 -10l319 -319c6 -6 9 -15 9 -23z" /> + <glyph glyph-name="fire-extinguisher" unicode="" horiz-adv-x="1408" +d="M512 1344c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1408 1376v-320c0 -10 -4 -19 -12 -25c-6 -5 -13 -7 -20 -7c-2 0 -4 0 -7 1l-448 96c-14 3 -25 16 -25 31h-256v-102c146 -30 256 -159 256 -314v-800c0 -35 -29 -64 -64 -64h-512 +c-35 0 -64 29 -64 64v800c0 143 94 265 224 305v111h-32c-212 0 -326 -219 -327 -221c-11 -22 -34 -35 -57 -35c-10 0 -20 2 -29 7c-31 16 -44 54 -28 86c5 10 105 204 306 269c-15 25 -25 54 -25 86c0 88 72 160 160 160s160 -72 160 -160c0 -23 -5 -44 -14 -64h302 +c0 15 11 28 25 31l448 96c3 1 5 1 7 1c7 0 14 -2 20 -7c8 -6 12 -15 12 -25z" /> + <glyph glyph-name="gnu-social" unicode="" horiz-adv-x="1513" +d="M218 1404v0h1077c121 0 218 -97 218 -218v-873c0 -121 -97 -218 -218 -218h-118c-80 -349 -645 -351 -645 -351s334 104 335 351h-649c-121 0 -218 97 -218 218v873c0 121 97 218 218 218zM532 1229c-35 -5 -114 -89 -114 -150c0 -49 -3 -127 70 -167 +c-69 -67 -82 -163 -81 -247c2 -154 67 -382 357 -397s352 214 352 360h-305l50 -134l89 5s17 -107 -174 -100c-122 5 -200 68 -200 249s22 211 193 218s203 -139 203 -139l142 -3s-11 107 -93 188c73 40 72 118 69 167c-2 47 -102 169 -125 148s39 -41 34 -143 +c-2 -45 11 -79 -75 -79c-57 0 -33 51 -105 51c-43 0 -59 -28 -65 -50c-6 22 -21 50 -64 50c-72 0 -49 -51 -106 -51c-86 0 -72 34 -74 79c-5 102 56 122 33 143c-1 1 -3 2 -5 2h-6z" /> + <glyph glyph-name="pencil-square" unicode="" +d="M404 428l152 -152l-52 -52h-56v96h-96v56zM818 818c8 -7 6 -21 -3 -30l-291 -291c-9 -9 -23 -11 -30 -3c-8 7 -6 21 3 30l291 291c9 9 23 11 30 3zM544 128l544 544l-288 288l-544 -544v-288h288zM1152 736l92 92c37 37 37 99 0 136l-152 152c-37 37 -99 37 -136 0 +l-92 -92zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" /> + <glyph glyph-name="reddit-square" unicode="" +d="M939 407c7 -7 7 -19 0 -26c-49 -49 -143 -53 -171 -53s-122 4 -171 53c-7 7 -7 19 0 26c7 8 19 8 26 0c31 -31 98 -42 145 -42s114 11 145 42c7 8 19 8 26 0zM676 563c0 -42 -35 -77 -77 -77s-77 35 -77 77c0 43 35 77 77 77s77 -34 77 -77zM1014 563 +c0 -42 -35 -77 -77 -77s-77 35 -77 77c0 43 35 77 77 77s77 -34 77 -77zM1229 666c0 56 -46 102 -103 102c-28 0 -54 -12 -73 -31c-70 48 -164 79 -267 82l54 243l171 -39c1 -42 35 -76 77 -76s77 35 77 77s-35 77 -77 77c-30 0 -56 -17 -69 -43l-189 42 +c-10 3 -19 -4 -21 -13l-60 -268c-103 -4 -196 -35 -265 -83c-19 20 -45 32 -74 32c-57 0 -103 -46 -103 -102c0 -41 24 -76 58 -93c-3 -15 -5 -32 -5 -48c0 -163 183 -295 409 -295s410 132 410 295c0 17 -2 33 -6 49c33 17 56 52 56 92zM1536 1120v-960 +c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" /> + <glyph glyph-name="arrow-circle-o-down" unicode="" +d="M1120 608c0 -9 -4 -17 -10 -24l-319 -319c-7 -6 -15 -9 -23 -9s-16 3 -23 9l-320 320c-9 10 -12 23 -7 35s17 20 30 20h192v352c0 18 14 32 32 32h192c18 0 32 -14 32 -32v-352h192c18 0 32 -14 32 -32zM768 1184c-300 0 -544 -244 -544 -544s244 -544 544 -544 +s544 244 544 544s-244 544 -544 544zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" /> + <glyph glyph-name="caret-left" unicode="" horiz-adv-x="576" +d="M576 1088v-896c0 -35 -29 -64 -64 -64c-17 0 -33 7 -45 19l-448 448c-12 12 -19 28 -19 45s7 33 19 45l448 448c12 12 28 19 45 19c35 0 64 -29 64 -64z" /> + <glyph glyph-name="camera-retro" unicode="" horiz-adv-x="1792" +d="M928 704c0 18 -14 32 -32 32c-88 0 -160 -72 -160 -160c0 -18 14 -32 32 -32s32 14 32 32c0 53 43 96 96 96c18 0 32 14 32 32zM1152 574c0 -141 -115 -256 -256 -256s-256 115 -256 256s115 256 256 256s256 -115 256 -256zM128 0h1536v128h-1536v-128zM1280 574 +c0 212 -172 384 -384 384s-384 -172 -384 -384s172 -384 384 -384s384 172 384 384zM256 1216h384v128h-384v-128zM128 1024h1536v256h-828l-64 -128h-644v-128zM1792 1280v-1280c0 -71 -57 -128 -128 -128h-1536c-71 0 -128 57 -128 128v1280c0 71 57 128 128 128h1536 +c71 0 128 -57 128 -128z" /> + <glyph glyph-name="thumbs-o-up" unicode="" +d="M256 192c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1408 768c0 68 -61 128 -128 128h-352c0 117 96 202 96 320c0 117 -23 192 -160 192c-64 -65 -31 -218 -128 -320c-28 -29 -52 -60 -77 -91c-45 -58 -164 -229 -243 -229h-32v-640h32 +c56 0 148 -36 202 -55c110 -38 224 -73 342 -73h121c113 0 192 45 192 167c0 19 -2 38 -5 56c42 23 65 80 65 126c0 24 -6 48 -18 69c34 32 53 72 53 119c0 32 -14 79 -35 103c47 1 75 91 75 128zM1536 769c0 -58 -17 -115 -49 -163c6 -22 9 -46 9 -69 +c0 -50 -13 -100 -38 -144c2 -14 3 -29 3 -43c0 -64 -21 -128 -60 -178c2 -189 -127 -300 -312 -300h-129c-142 0 -274 42 -406 88c-29 10 -110 40 -138 40h-288c-71 0 -128 57 -128 128v640c0 71 57 128 128 128h274c39 26 107 116 137 155c34 44 69 87 107 128 +c60 64 28 222 128 320c24 23 56 37 90 37c104 0 204 -37 253 -134c31 -61 35 -119 35 -186c0 -70 -18 -130 -48 -192h176c138 0 256 -117 256 -255z" /> + <glyph glyph-name="product-hunt" unicode="" horiz-adv-x="1792" +d="M1150 774c0 -74 -60 -134 -135 -134h-253v269h253c75 0 135 -60 135 -135zM1329 774c0 174 -140 314 -314 314h-433v-896h180v269h253c174 0 314 140 314 313zM1792 640c0 -495 -401 -896 -896 -896s-896 401 -896 896s401 896 896 896s896 -401 896 -896z" /> + <glyph glyph-name="etsy" unicode="" +d="M518 1353v-655c232 -2 354 10 354 10c94 3 108 27 130 119l33 142h103l-14 -322l7 -319h-103l-29 127c-21 95 -62 118 -129 119c0 0 -86 8 -352 8v-556c0 -104 57 -153 177 -153h357c120 0 228 12 302 183l93 216h89c-7 -43 -55 -440 -62 -528c-329 12 -470 12 -470 12 +h-628l-376 -12v102l127 25c89 17 116 43 117 116c6 242 8 643 8 643s3 402 -8 645c-3 83 -28 103 -117 120l-127 24v102l376 -12h702s139 0 374 27c-14 -153 -31 -506 -31 -506h-93l-32 124c-39 155 -91 238 -187 238h-548c-41 0 -43 -14 -43 -39z" /> + <glyph glyph-name="copyright" unicode="" +d="M1150 462v-109c0 -141 -225 -193 -366 -193c-274 0 -480 209 -480 485c0 271 204 475 475 475c99 0 358 -35 358 -194v-109c0 -9 -7 -16 -16 -16h-118c-9 0 -16 7 -16 16v70c0 63 -121 92 -203 92c-187 0 -317 -135 -317 -329c0 -201 136 -348 325 -348 +c72 0 208 27 208 90v70c0 9 7 16 15 16h119c8 0 16 -7 16 -16zM768 1280c-353 0 -640 -287 -640 -640s287 -640 640 -640s640 287 640 640s-287 640 -640 640zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" /> + <glyph glyph-name="pleroma" unicode="" horiz-adv-x="961" +d="M120 1408h262v-1536h-382v1416c0 66 54 120 120 120zM575 1408h386v-648c0 -66 -53 -120 -119 -120v0h-267v768zM575 254h386v-262c0 -66 -53 -120 -119 -120v0h-267v382z" /> + <glyph glyph-name="terminal" unicode="" horiz-adv-x="1651" +d="M572 553l-466 -466c-13 -13 -33 -13 -46 0l-50 50c-13 13 -13 33 0 46l393 393l-393 393c-13 13 -13 33 0 46l50 50c13 13 33 13 46 0l466 -466c13 -13 13 -33 0 -46zM1651 96v-64c0 -18 -14 -32 -32 -32h-960c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h960 +c18 0 32 -14 32 -32z" /> + <glyph glyph-name="twitter-square" unicode="" +d="M1280 926c-38 -17 -78 -28 -121 -34c44 26 77 68 93 117c-41 -24 -86 -42 -134 -51c-38 41 -93 66 -153 66c-116 0 -210 -94 -210 -210c0 -16 1 -33 5 -48c-175 9 -330 92 -434 220c-18 -31 -29 -68 -29 -106c0 -73 34 -137 91 -175c-35 1 -68 11 -100 26v-2 +c0 -102 77 -187 173 -206c-18 -5 -32 -8 -51 -8c-13 0 -26 2 -39 4c27 -83 104 -144 196 -146c-72 -56 -162 -90 -261 -90c-17 0 -34 1 -50 3c93 -59 203 -94 322 -94c386 0 598 320 598 598c0 9 0 18 -1 27c41 29 77 66 105 109zM1536 1120v-960 +c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" /> + <glyph glyph-name="shopping-bag" unicode="" horiz-adv-x="1793" +d="M1757 128l35 -313c2 -18 -4 -36 -16 -50c-12 -13 -30 -21 -48 -21h-1664c-18 0 -36 8 -48 21c-12 14 -18 32 -16 50l35 313h1722zM1664 967l86 -775h-1708l86 775c4 32 31 57 64 57h256v-128c0 -71 57 -128 128 -128s128 57 128 128v128h384v-128c0 -71 57 -128 128 -128 +s128 57 128 128v128h256c33 0 60 -25 64 -57zM1280 1152v-256c0 -35 -29 -64 -64 -64s-64 29 -64 64v256c0 141 -115 256 -256 256s-256 -115 -256 -256v-256c0 -35 -29 -64 -64 -64s-64 29 -64 64v256c0 212 172 384 384 384s384 -172 384 -384z" /> + <glyph glyph-name="stop-circle" unicode="" +d="M1088 352v576c0 18 -14 32 -32 32h-576c-18 0 -32 -14 -32 -32v-576c0 -18 14 -32 32 -32h576c18 0 32 14 32 32zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" /> + <glyph glyph-name="telegram" unicode="" horiz-adv-x="1792" +d="M1189 229l147 693c13 61 -22 85 -62 70l-864 -333c-59 -23 -58 -56 -10 -71l221 -69l513 323c24 16 46 7 28 -9l-415 -375l-16 -228c23 0 33 10 45 22l108 104l224 -165c41 -23 70 -11 81 38zM1792 640c0 -495 -401 -896 -896 -896s-896 401 -896 896s401 896 896 896 +s896 -401 896 -896z" /> + <glyph glyph-name="circle" unicode="" +d="M1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" /> + <glyph glyph-name="columns" unicode="" horiz-adv-x="1664" +d="M160 0h608v1152h-640v-1120c0 -17 15 -32 32 -32zM1536 32v1120h-640v-1152h608c17 0 32 15 32 32zM1664 1248v-1216c0 -88 -72 -160 -160 -160h-1344c-88 0 -160 72 -160 160v1216c0 88 72 160 160 160h1344c88 0 160 -72 160 -160z" /> + <glyph glyph-name="zotero" unicode="" horiz-adv-x="1330" +d="M662 -127l-662 310v924l662 301l668 -301v-924zM314 152h723v221l-63 78h-275l338 379v218l-63 78h-601l-59 -82v-214h377l-352 -379l-25 -97v-202z" /> + <glyph glyph-name="sign-out" unicode="" horiz-adv-x="1568" +d="M640 96c0 -28 13 -96 -32 -96h-320c-159 0 -288 129 -288 288v704c0 159 129 288 288 288h320c17 0 32 -15 32 -32c0 -28 13 -96 -32 -96h-320c-88 0 -160 -72 -160 -160v-704c0 -88 72 -160 160 -160h288c25 0 64 5 64 -32zM1568 640c0 -17 -7 -33 -19 -45l-544 -544 +c-12 -12 -28 -19 -45 -19c-35 0 -64 29 -64 64v288h-448c-35 0 -64 29 -64 64v384c0 35 29 64 64 64h448v288c0 35 29 64 64 64c17 0 33 -7 45 -19l544 -544c12 -12 19 -28 19 -45z" /> + <glyph glyph-name="cube" unicode="" horiz-adv-x="1664" +d="M896 -93l640 349v636l-640 -233v-752zM832 772l698 254l-698 254l-698 -254zM1664 1024v-768c0 -47 -26 -90 -67 -112l-704 -384c-19 -11 -40 -16 -61 -16s-42 5 -61 16l-704 384c-41 22 -67 65 -67 112v768c0 54 34 102 84 120l704 256c14 5 29 8 44 8s30 -3 44 -8 +l704 -256c50 -18 84 -66 84 -120z" /> + <glyph glyph-name="mars-stroke-v" unicode="" horiz-adv-x="1152" +d="M640 892c288 -32 512 -276 512 -572c0 -340 -294 -611 -642 -572c-270 30 -486 253 -508 525c-25 317 207 586 510 619v132h-160c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h160v165l-92 -92c-13 -12 -33 -12 -45 0l-46 46c-12 12 -12 32 0 45l202 201c25 25 65 25 90 0 +l202 -201c12 -13 12 -33 0 -45l-46 -46c-12 -12 -32 -12 -45 0l-92 92v-165h160c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-160v-132zM576 -128c247 0 448 201 448 448s-201 448 -448 448s-448 -201 -448 -448s201 -448 448 -448z" /> + <glyph glyph-name="file-text" unicode="" +d="M1468 1060c10 -10 19 -22 28 -36h-472v472c14 -9 26 -18 36 -28zM992 896h544v-1056c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h800v-544c0 -53 43 -96 96 -96zM1152 160v64c0 18 -14 32 -32 32h-704c-18 0 -32 -14 -32 -32v-64 +c0 -18 14 -32 32 -32h704c18 0 32 14 32 32zM1152 416v64c0 18 -14 32 -32 32h-704c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h704c18 0 32 14 32 32zM1152 672v64c0 18 -14 32 -32 32h-704c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h704c18 0 32 14 32 32z" /> + <glyph glyph-name="amazon" unicode="" horiz-adv-x="1736" +d="M1523 60c30 15 53 -8 22 -48s-280 -268 -698 -268s-738 286 -836 404c-27 31 4 45 22 33c293 -178 751 -471 1490 -121zM1730 175c15 -20 0 -108 -26 -172c-26 -63 -64 -107 -85 -124c-22 -18 -38 -11 -26 15s77 186 51 220c-26 33 -148 17 -192 13c-43 -4 -52 -8 -56 1 +c-9 23 87 62 150 70c63 7 164 3 184 -23zM1336 618c0 -110 129 -211 129 -211l-227 -224c-89 84 -156 154 -156 154c-10 10 -18 22 -25 33c-181 -283 -734 -265 -734 173c0 408 483 463 678 470v127c0 27 10 150 -142 150c0 0 -152 0 -217 -198l-294 27 +c0 197 187 417 539 417c351 0 449 -228 449 -329v-589zM664 597c0 -203 337 -251 337 69v162c-135 -4 -337 -42 -337 -231z" /> + <glyph glyph-name="smile-o" unicode="" +d="M1134 461c-50 -161 -197 -269 -366 -269s-316 108 -366 269c-11 34 8 69 42 80c33 11 69 -8 80 -42c33 -107 132 -179 244 -179s211 72 244 179c11 34 47 53 81 42c33 -11 52 -46 41 -80zM640 896c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128 +s128 -57 128 -128zM1152 896c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128s128 -57 128 -128zM1408 640c0 353 -287 640 -640 640s-640 -287 -640 -640s287 -640 640 -640s640 287 640 640zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768 +s344 768 768 768s768 -344 768 -768z" /> + <glyph glyph-name="compass" unicode="" +d="M640 448l256 128l-256 128v-256zM1024 1039v-542l-512 -256v542zM1312 640c0 300 -244 544 -544 544s-544 -244 -544 -544s244 -544 544 -544s544 244 544 544zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" /> + <glyph glyph-name="address-book" unicode="" horiz-adv-x="1664" +d="M1201 298c0 177 -43 374 -221 374c-55 -32 -130 -87 -212 -87s-157 55 -212 87c-178 0 -221 -197 -221 -374c0 -99 65 -170 145 -170h576c80 0 145 71 145 170zM1028 892c0 144 -117 260 -260 260s-260 -116 -260 -260c0 -143 117 -259 260 -259s260 116 260 259z +M1664 352v-192c0 -18 -14 -32 -32 -32h-96v-224c0 -88 -72 -160 -160 -160h-1216c-88 0 -160 72 -160 160v1472c0 88 72 160 160 160h1216c88 0 160 -72 160 -160v-224h96c18 0 32 -14 32 -32v-192c0 -18 -14 -32 -32 -32h-96v-128h96c18 0 32 -14 32 -32v-192 +c0 -18 -14 -32 -32 -32h-96v-128h96c18 0 32 -14 32 -32z" /> + <glyph glyph-name="list-ol" unicode="" horiz-adv-x="1777" +d="M366 -84c0 -110 -86 -172 -190 -172c-63 0 -127 21 -172 66l57 88c27 -25 68 -45 106 -45c35 0 72 17 72 57c0 56 -64 59 -105 56l-26 56c36 46 69 97 112 136v1c-32 0 -65 -2 -97 -2v-53h-106v152h333v-88l-95 -115c67 -16 111 -68 111 -137zM368 543v-159h-362 +c-3 18 -6 36 -6 54c0 185 226 213 226 297c0 34 -21 52 -54 52c-35 0 -64 -30 -81 -58l-85 59c33 69 101 108 177 108c93 0 173 -55 173 -154c0 -148 -217 -181 -220 -259h127v60h105zM1777 224v-192c0 -17 -15 -32 -32 -32h-1216c-18 0 -32 15 -32 32v192c0 18 14 32 32 32 +h1216c17 0 32 -14 32 -32zM369 1123v-99h-335v99h107c0 81 1 162 1 243v12h-2c-11 -22 -31 -37 -50 -54l-71 76l136 127h106v-404h108zM1777 736v-192c0 -17 -15 -32 -32 -32h-1216c-18 0 -32 15 -32 32v192c0 18 14 32 32 32h1216c17 0 32 -14 32 -32zM1777 1248v-192 +c0 -17 -15 -32 -32 -32h-1216c-18 0 -32 15 -32 32v192c0 17 14 32 32 32h1216c17 0 32 -15 32 -32z" /> + <glyph glyph-name="stumbleupon-circle" unicode="" +d="M866 697l90 27v62c0 106 -90 191 -196 191s-196 -84 -196 -190v-283c0 -26 -21 -47 -47 -47s-46 21 -46 47v120h-151v-122c0 -109 88 -196 197 -196c107 0 196 86 196 193v280c0 26 21 47 47 47c25 0 46 -21 46 -47v-54zM1199 502v122h-150v-126c0 -26 -21 -47 -47 -47 +c-25 0 -46 21 -46 47v123l-90 -26l-60 28v-123c0 -107 89 -194 197 -194s196 87 196 196zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" /> + <glyph glyph-name="slack" unicode="" +d="M837 508l-205 69l66 197l205 -68zM979 1344c528 -158 651 -387 493 -915s-387 -651 -915 -493s-651 387 -493 915s387 651 915 493zM1256 671v0c13 41 -9 87 -51 101l-99 34l34 103c13 42 -8 88 -50 101c-47 13 -88 -14 -101 -51l-34 -103l-206 69l35 103 +c13 42 -9 88 -51 101c-47 13 -87 -13 -100 -50l-35 -104c-100 33 -111 39 -126 37c-32 -1 -63 -22 -74 -54c-13 -42 8 -88 50 -101l100 -33l-66 -198c-100 33 -112 39 -127 37c-32 -1 -63 -23 -74 -55c-13 -42 9 -87 51 -100l99 -34l-34 -103c-13 -42 8 -88 50 -101 +s88 9 101 51l34 103l206 -69l-35 -103c-13 -42 9 -88 51 -101s87 8 100 50l35 104l99 -34c42 -13 88 9 101 51s-8 88 -50 101l-100 33l66 198l100 -34c42 -13 88 9 101 51z" /> + <glyph glyph-name="qq" unicode="" horiz-adv-x="1756" +d="M252 730c-7 17 -8 34 -8 52c0 28 18 73 35 94c-1 26 10 79 30 96c0 185 143 418 310 498c103 49 211 66 324 66c88 0 184 -21 266 -55c235 -99 288 -283 338 -518l1 -5c29 -44 55 -96 55 -150c0 -27 -18 -54 -18 -78c0 -2 6 -10 7 -12c86 -127 164 -265 164 -423 +c0 -35 -19 -157 -75 -157c-39 0 -82 95 -96 121c-1 1 -2 1 -3 1l-5 -4c-32 -83 -67 -161 -132 -223c57 -55 149 -50 166 -145c-5 -11 -3 -23 -11 -34c-57 -86 -210 -97 -302 -97c-122 0 -221 32 -336 66c-24 7 -60 3 -86 6c-61 -67 -210 -85 -296 -85c-76 0 -370 5 -370 135 +c0 56 12 72 51 108c31 6 54 23 90 25c5 0 9 1 14 2c1 1 2 1 2 4l-2 3c-69 16 -166 190 -181 262l-5 3c-7 0 -10 -15 -12 -20c-22 -51 -74 -106 -132 -112h-1c-8 0 -5 8 -11 10c-14 33 -23 63 -23 100c0 200 96 348 252 466z" /> + <glyph glyph-name="audio-description" unicode="" horiz-adv-x="2304" +d="M504 542h171l-1 265zM1530 641c0 111 -64 193 -197 193h-54v-388h52c125 0 199 91 199 195zM956 1018l1 -756c0 -19 -15 -34 -33 -34h-216c-18 0 -33 15 -33 34v62h-291l-55 -81c-6 -9 -17 -15 -28 -15h-267c-28 0 -44 31 -27 53l556 757c6 9 16 14 27 14h332 +c19 0 34 -15 34 -34zM1783 641c0 -263 -192 -413 -450 -413h-270c-19 0 -34 15 -34 34v756c0 19 15 34 34 34h268c260 0 452 -148 452 -411zM1939 640c0 0 4 -260 -148 -413h-51c136 162 139 414 139 414s2 198 -135 410h43c148 -169 152 -411 152 -411zM2123 640 +c0 0 4 -260 -149 -413h-51c136 162 139 414 139 414s2 198 -134 410h43c148 -169 152 -411 152 -411zM2304 640c0 0 4 -260 -148 -413h-51c135 162 138 414 138 414s2 198 -134 410h43c148 -169 152 -411 152 -411z" /> + <glyph glyph-name="stop-circle-o" unicode="" +d="M768 1408c424 0 768 -344 768 -768s-344 -768 -768 -768s-768 344 -768 768s344 768 768 768zM768 96c300 0 544 244 544 544s-244 544 -544 544s-544 -244 -544 -544s244 -544 544 -544zM480 320c-18 0 -32 14 -32 32v576c0 18 14 32 32 32h576c18 0 32 -14 32 -32v-576 +c0 -18 -14 -32 -32 -32h-576z" /> + <glyph glyph-name="grav" unicode="" horiz-adv-x="1794" +d="M1291 1060c-32 36 -84 -25 -56 -58c27 -33 116 -9 56 58zM895 814c-11 -11 -28 -11 -38 0c-11 10 -11 27 0 37c10 11 27 11 38 0c10 -10 10 -27 0 -37zM1060 740l-35 -35c-16 -17 -43 -17 -60 0l-38 38c-16 17 -16 43 0 60l35 35c16 16 43 16 60 0l38 -39 +c16 -16 16 -43 0 -59zM951 870c-10 -10 -27 -10 -38 0c-10 11 -10 28 0 38c11 11 28 11 38 0c11 -10 11 -27 0 -38zM1354 968c-45 -85 -163 -120 -235 -69c-72 52 -122 156 -43 246c78 90 147 62 216 -3c43 -41 106 -90 62 -174zM1555 486c9 58 -74 60 -92 93 +c-49 87 -100 133 -197 110c42 29 85 22 85 22c1 23 0 47 -34 90c14 45 1 81 1 81c56 31 97 88 105 156c13 112 -68 214 -180 227c-80 9 -158 -28 -196 -93c-84 -145 5 -256 81 -294c-52 5 -124 43 -145 124c-24 93 10 180 32 222c0 0 -16 21 -29 32c0 0 -50 0 -89 -19 +c43 55 91 52 91 52c0 23 -2 54 -13 78c-20 41 -90 47 -117 -15c1 3 2 5 4 7c-18 -43 -4 -202 61 -315c-9 -5 -33 -22 -47 -36c-78 -35 -203 -218 -203 -218c-102 -39 -280 -184 -256 -288c1 -11 5 -20 11 -27c-10 -8 -20 -18 -30 -30c-43 -50 -19 -127 64 -88 +c57 26 108 73 132 110c0 0 -21 18 -60 16c100 24 125 34 168 33c29 -14 29 124 29 124c0 53 -8 112 -40 150c45 -44 105 -118 101 -219c-3 -66 -55 -83 -55 -83c-33 -60 -156 -238 -110 -383c0 0 -35 54 -37 80c-63 -70 -169 -189 -90 -233c96 -53 394 320 457 514 +c125 75 200 171 231 235c80 -159 346 -343 367 -215zM1794 640c0 -495 -402 -896 -897 -896s-897 401 -897 896s402 896 897 896s897 -401 897 -896z" /> + <glyph glyph-name="mars-stroke-h" unicode="" horiz-adv-x="1919" +d="M1901 621c25 -25 25 -65 0 -90l-294 -294c-12 -13 -33 -13 -45 0l-45 45c-13 12 -13 33 0 45l185 185h-294v-224c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v224h-132c-32 -288 -276 -512 -572 -512c-340 0 -611 294 -572 642c30 270 253 486 525 508 +c317 25 586 -207 619 -510h132v224c0 18 14 32 32 32h64c18 0 32 -14 32 -32v-224h294l-185 185c-13 12 -13 33 0 45l45 45c12 13 33 13 45 0zM576 128c247 0 448 201 448 448s-201 448 -448 448s-448 -201 -448 -448s201 -448 448 -448z" /> + <glyph glyph-name="gbp" unicode="" horiz-adv-x="1020" +d="M1020 399v-367c0 -18 -14 -32 -32 -32h-956c-18 0 -32 14 -32 32v150c0 17 14 32 32 32h97v383h-95c-18 0 -32 14 -32 32v131c0 18 14 32 32 32h95v223c0 228 184 393 438 393c200 0 329 -120 335 -125c12 -11 13 -30 3 -43l-103 -127c-6 -7 -13 -11 -22 -12 +c-8 -1 -17 2 -23 7c-1 1 -87 69 -188 69c-113 0 -189 -68 -189 -170v-215h305c18 0 32 -14 32 -32v-131c0 -18 -14 -32 -32 -32h-305v-379h414v181c0 18 14 32 32 32h162c18 0 32 -14 32 -32z" /> + <glyph glyph-name="shaarli-o" unicode="" horiz-adv-x="1630" +d="M859 1408v0c107 0 210 -67 264 -160c40 -69 61 -156 75 -252c115 -20 212 -47 288 -96c78 -50 134 -137 140 -229l3 -20c7 -91 -25 -191 -100 -245c-18 -13 -36 -22 -55 -30c11 -19 25 -36 34 -56c37 -84 43 -181 12 -267v-1h-1c-26 -70 -82 -133 -154 -160 +s-147 -24 -224 -5c-9 3 -17 5 -25 10c-94 47 -174 101 -239 162c-25 -34 -53 -66 -86 -91c-75 -57 -168 -84 -266 -84c-31 0 -62 -4 -90 5c-82 25 -155 68 -199 141s-44 164 -20 243l1 3l1 3l21 58c-57 19 -109 45 -151 86c-67 66 -95 165 -86 259h-1c0 1 1 2 1 3v7h1 +c8 100 75 193 165 238c87 43 192 57 317 60c6 109 27 206 84 283c66 89 177 135 290 135zM859 1288c-173 0 -260 -116 -260 -348c12 -37 -17 -59 -88 -67c-255 -1 -386 -66 -391 -196c-18 -141 68 -226 258 -253h19l-67 -186c-36 -117 11 -195 141 -235h53 +c155 0 260 80 314 239h37c58 -90 155 -170 294 -239c126 -31 206 -1 239 90c42 114 -12 238 -162 370c196 -10 285 53 264 190c3 117 -118 194 -360 231h-56c-21 269 -99 404 -235 404zM819 1097v0c3 0 6 0 9 -1c50 1 76 -51 76 -156v-188c22 -23 49 -31 84 -25 +c226 0 335 -27 327 -81c10 -49 -110 -65 -361 -48c-12 0 -14 -15 -6 -43c74 -85 140 -151 198 -200c59 -47 69 -92 31 -133c-32 -22 -74 -5 -127 49c-51 54 -117 122 -197 207c-18 24 -40 24 -67 0c-113 -230 -200 -325 -262 -288c-46 24 -23 105 68 242l54 116 +c12 33 -72 45 -250 36c-51 3 -77 22 -77 58c0 37 24 57 71 58l304 17c31 0 48 27 52 81l4 107c-1 131 22 195 69 192z" /> + <glyph glyph-name="ban" unicode="" +d="M1312 643c0 109 -32 210 -87 295l-754 -753c86 -56 188 -89 297 -89c300 0 544 245 544 547zM313 344l755 754c-86 58 -189 91 -300 91c-300 0 -544 -245 -544 -546c0 -111 33 -213 89 -299zM1536 643c0 -426 -344 -771 -768 -771s-768 345 -768 771 +c0 425 344 770 768 770s768 -345 768 -770z" /> + <glyph glyph-name="fighter-jet" unicode="" horiz-adv-x="1920" +d="M1920 576c0 0 0 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69c35 0 64 -7 64 -16s-29 -16 -64 -16h-320v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h320c35 0 64 -7 64 -16 +s-29 -16 -64 -16h-69l293 -352h64l224 -64l352 -32c288 -64 288 -96 288 -96z" /> + <glyph glyph-name="space-shuttle" unicode="" horiz-adv-x="2176" +d="M620 416c-69 -40 -163 -64 -268 -64h-128v64h-64c-18 0 -32 36 -32 80c0 18 3 35 7 49c-77 2 -135 15 -135 31s58 29 135 31c-4 14 -7 31 -7 49c0 44 14 80 32 80h64v64h128c105 0 199 -24 268 -64h1113c74 -13 141 -24 187 -32c192 -32 256 -96 256 -128 +s-64 -96 -256 -128c-46 -8 -113 -19 -187 -32h-1113zM1739 668c32 -22 53 -55 53 -92s-21 -70 -53 -92l81 -30c41 29 68 73 68 122s-27 93 -68 122zM625 400h1015s-217 -38 -456 -80c-128 0 -224 -96 -224 -96l-288 -288s-97 -64 -160 -64h-96l-93 464h29 +c102 0 199 23 273 64zM352 816h-29l93 464h96c65 0 128 -32 160 -64l288 -288s96 -96 224 -96c239 -42 456 -80 456 -80h-1015c-74 41 -171 64 -273 64z" /> + <glyph glyph-name="matrix-org" unicode="" +d="M40 1373v-1466h106v-35h-146v1536h146v-35h-106zM491 908v-74h2c20 28 44 51 72 66c28 16 60 23 96 23c35 0 66 -7 95 -20s50 -37 65 -71c16 24 38 46 66 64s61 27 99 27c29 0 56 -4 81 -11s45 -18 63 -34s31 -35 41 -60s15 -56 15 -91v-367h-150v311c0 18 -1 36 -2 52 +s-6 30 -12 42s-16 22 -28 29s-29 10 -50 10s-38 -4 -51 -12s-24 -19 -31 -32s-13 -27 -15 -44s-4 -34 -4 -51v-305h-150v307c0 16 0 33 -1 49s-4 30 -9 44c-5 13 -15 24 -27 32s-31 12 -55 12c-7 0 -16 -2 -28 -5s-23 -9 -34 -18s-20 -21 -28 -38s-11 -38 -11 -65v-318h-151 +v548h142zM1496 -93v1466h-106v35h146v-1536h-146v35h106z" /> + <glyph glyph-name="steam" unicode="" horiz-adv-x="1792" +d="M1582 954c0 -135 -110 -244 -244 -244c-135 0 -244 109 -244 244s109 244 244 244c134 0 244 -109 244 -244zM812 212c0 139 -111 250 -250 250c-18 0 -36 -2 -54 -6l104 -42c102 -41 152 -156 111 -258s-157 -152 -259 -110c-41 16 -82 33 -123 49 +c42 -79 125 -133 221 -133c139 0 250 111 250 250zM1642 953c0 168 -137 305 -305 305c-169 0 -306 -137 -306 -305c0 -169 137 -305 306 -305c168 0 305 136 305 305zM1792 953c0 -252 -204 -455 -455 -455l-437 -319c-16 -172 -162 -307 -338 -307 +c-162 0 -299 115 -332 268l-230 92v429l389 -157c51 31 110 48 173 48c12 0 24 -1 35 -2l284 407c2 249 206 451 456 451c251 0 455 -204 455 -455z" /> + <glyph glyph-name="bars" unicode="" +d="M1536 192v-128c0 -35 -29 -64 -64 -64h-1408c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1408c35 0 64 -29 64 -64zM1536 704v-128c0 -35 -29 -64 -64 -64h-1408c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1408c35 0 64 -29 64 -64zM1536 1216v-128 +c0 -35 -29 -64 -64 -64h-1408c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1408c35 0 64 -29 64 -64z" /> + <glyph glyph-name="lightbulb-o" unicode="" horiz-adv-x="1024" +d="M736 960c0 -17 -15 -32 -32 -32s-32 15 -32 32c0 69 -107 96 -160 96c-17 0 -32 15 -32 32s15 32 32 32c93 0 224 -49 224 -160zM896 960c0 200 -203 320 -384 320s-384 -120 -384 -320c0 -64 26 -131 68 -180c19 -22 41 -43 61 -66c71 -85 131 -185 141 -298h228 +c10 113 70 213 141 298c20 23 42 44 61 66c42 49 68 116 68 180zM1024 960c0 -103 -34 -192 -103 -268s-160 -183 -168 -290c29 -17 47 -49 47 -82c0 -24 -9 -47 -25 -64c16 -17 25 -40 25 -64c0 -33 -17 -63 -45 -81c8 -14 13 -31 13 -47c0 -65 -51 -96 -109 -96 +c-26 -58 -84 -96 -147 -96s-121 38 -147 96c-58 0 -109 31 -109 96c0 16 5 33 13 47c-28 18 -45 48 -45 81c0 24 9 47 25 64c-16 17 -25 40 -25 64c0 33 18 65 47 82c-8 107 -99 214 -168 290s-103 165 -103 268c0 272 259 448 512 448s512 -176 512 -448z" /> + <glyph glyph-name="map-pin" unicode="" horiz-adv-x="1024" +d="M512 448c44 0 87 5 128 15v-655c0 -35 -29 -64 -64 -64h-128c-35 0 -64 29 -64 64v655c41 -10 84 -15 128 -15zM512 1536c283 0 512 -229 512 -512s-229 -512 -512 -512s-512 229 -512 512s229 512 512 512zM512 1312c18 0 32 14 32 32s-14 32 -32 32 +c-194 0 -352 -158 -352 -352c0 -18 14 -32 32 -32s32 14 32 32c0 159 129 288 288 288z" /> + <glyph glyph-name="circle-o" unicode="" +d="M768 1184c-300 0 -544 -244 -544 -544s244 -544 544 -544s544 244 544 544s-244 544 -544 544zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" /> + <glyph glyph-name="contao" unicode="" horiz-adv-x="1748" +d="M116 1408h197c-47 -43 -89 -93 -126 -149c-155 -239 -92 -501 -32 -783c49 -229 90 -447 233 -604h-272c-64 0 -116 52 -116 116v1304c0 64 52 116 116 116zM1324 1408h308c64 0 116 -52 116 -116v-1304c0 -64 -52 -116 -116 -116h-178c132 131 207 321 196 565 +l-469 -101c-6 -111 -44 -218 -196 -250c-85 -18 -155 2 -199 40c-54 46 -97 106 -169 448c-73 343 -58 415 -28 479c25 52 81 100 165 118c153 32 231 -51 282 -150l468 100c-46 118 -107 214 -180 287z" /> + <glyph glyph-name="vine" unicode="" horiz-adv-x="1458" +d="M1458 709v-198c-70 -16 -140 -23 -198 -23c-140 -294 -391 -546 -475 -593c-53 -30 -103 -32 -162 3c-103 62 -493 382 -623 1388h283c71 -604 245 -914 436 -1146c106 106 208 247 287 406c-189 96 -304 307 -304 553c0 249 143 437 388 437c238 0 368 -148 368 -403 +c0 -95 -20 -203 -58 -286c0 0 -176 -35 -241 78c13 43 31 117 31 184c0 119 -43 177 -108 177c-69 0 -117 -65 -117 -190c0 -255 162 -401 372 -401c37 0 79 4 121 14z" /> + <glyph glyph-name="align-center" unicode="" horiz-adv-x="1792" +d="M1792 192v-128c0 -35 -29 -64 -64 -64h-1664c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1664c35 0 64 -29 64 -64zM1408 576v-128c0 -35 -29 -64 -64 -64h-896c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h896c35 0 64 -29 64 -64zM1664 960v-128c0 -35 -29 -64 -64 -64 +h-1408c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1408c35 0 64 -29 64 -64zM1280 1344v-128c0 -35 -29 -64 -64 -64h-640c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h640c35 0 64 -29 64 -64z" /> + <glyph glyph-name="btc" unicode="" horiz-adv-x="1202" +d="M1111 896c13 -133 -43 -213 -131 -258c146 -35 238 -122 220 -317c-23 -243 -203 -308 -461 -322v-255h-154v251c-39 0 -80 0 -122 1v-252h-154v255c-36 0 -72 1 -109 1h-200l31 183c113 -2 111 0 111 0c43 0 55 31 58 51v402h16c-6 1 -12 1 -16 1v287 +c-6 32 -26 68 -89 68c0 0 2 2 -111 0v164l212 -1c31 0 64 0 97 1v252h154v-247c41 1 82 2 122 2v245h154v-252c198 -17 355 -78 372 -260zM896 351c0 198 -326 169 -430 169v-338c104 0 430 -22 430 169zM825 827c0 181 -272 154 -359 154v-307c87 0 359 -20 359 153z" /> + <glyph glyph-name="calendar" unicode="" horiz-adv-x="1664" +d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z +M512 1088v288c0 17 -15 32 -32 32h-64c-17 0 -32 -15 -32 -32v-288c0 -17 15 -32 32 -32h64c17 0 32 15 32 32zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288c0 17 -15 32 -32 32h-64c-17 0 -32 -15 -32 -32v-288 +c0 -17 15 -32 32 -32h64c17 0 32 15 32 32zM1664 1152v-1280c0 -70 -58 -128 -128 -128h-1408c-70 0 -128 58 -128 128v1280c0 70 58 128 128 128h128v96c0 88 72 160 160 160h64c88 0 160 -72 160 -160v-96h384v96c0 88 72 160 160 160h64c88 0 160 -72 160 -160v-96h128 +c70 0 128 -58 128 -128z" /> + <glyph glyph-name="retweet" unicode="" horiz-adv-x="1920" +d="M1280 32c0 -17 -15 -32 -32 -32h-960c-37 0 -32 39 -32 64v576h-192c-35 0 -64 29 -64 64c0 15 5 30 15 41l320 384c12 14 30 22 49 22s37 -8 49 -22l320 -384c10 -11 15 -26 15 -41c0 -35 -29 -64 -64 -64h-192v-384h576c9 0 19 -4 25 -11l160 -192c4 -6 7 -14 7 -21z +M1920 448c0 -15 -5 -30 -15 -41l-320 -384c-12 -14 -30 -23 -49 -23s-37 9 -49 23l-320 384c-10 11 -15 26 -15 41c0 35 29 64 64 64h192v384h-576c-9 0 -19 4 -25 12l-160 192c-4 5 -7 13 -7 20c0 17 15 32 32 32h960c37 0 32 -39 32 -64v-576h192c35 0 64 -29 64 -64z" /> + <glyph glyph-name="hourglass" unicode="" +d="M1504 -64c18 0 32 -14 32 -32v-128c0 -18 -14 -32 -32 -32h-1472c-18 0 -32 14 -32 32v128c0 18 14 32 32 32h1472zM130 0c19 337 294 518 478 640c-184 122 -459 303 -478 640h1276c-19 -337 -294 -518 -478 -640c184 -122 459 -303 478 -640h-1276zM1504 1536 +c18 0 32 -14 32 -32v-128c0 -18 -14 -32 -32 -32h-1472c-18 0 -32 14 -32 32v128c0 18 14 32 32 32h1472z" /> + <glyph glyph-name="paint-brush" unicode="" horiz-adv-x="1790" +d="M1615 1536c91 0 175 -68 175 -163c0 -53 -21 -104 -45 -151c-78 -148 -340 -637 -465 -752c-61 -57 -133 -91 -218 -91c-169 0 -307 144 -307 312c0 80 33 158 92 212l638 579c35 32 81 54 130 54zM706 502c52 -101 147 -177 257 -206l1 -71c6 -285 -192 -481 -478 -481 +c-339 0 -486 270 -486 577c37 -25 166 -128 208 -128c25 0 46 14 55 37c85 222 218 262 443 272z" /> + <glyph glyph-name="viadeo-square" unicode="" +d="M1050 495c0 50 -9 100 -28 147c-26 -16 -55 -28 -85 -34c16 -36 22 -75 22 -114c0 -154 -114 -280 -270 -280c-157 0 -271 126 -271 280c0 151 115 284 271 284c34 0 67 -6 98 -19c3 30 13 60 27 87c-40 14 -82 21 -125 21c-207 0 -361 -167 -361 -372s155 -367 361 -367 +s361 163 361 367zM872 850c25 -72 38 -148 38 -225c0 -173 -71 -317 -219 -411h-10c-14 0 -28 1 -42 3c199 76 235 377 235 562c0 23 0 47 -2 71zM872 850c-5 97 -60 247 -142 302c56 -95 106 -197 142 -302zM1207 955c0 61 -15 123 -51 174c-24 -51 -69 -94 -124 -109 +c-79 -22 -149 -59 -149 -153c0 -27 9 -54 24 -77c95 22 196 92 236 182c-6 -80 -155 -177 -213 -209c29 -29 67 -52 110 -52c73 0 125 65 150 127c12 30 17 86 17 117zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288 +h960c159 0 288 -129 288 -288z" /> + <glyph glyph-name="tags" unicode="" horiz-adv-x="1899" +d="M448 1088c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1515 512c0 -34 -14 -67 -37 -90l-491 -492c-24 -23 -57 -37 -91 -37s-67 14 -90 37l-715 716c-51 50 -91 147 -91 218v416c0 70 58 128 128 128h416c71 0 168 -40 219 -91 +l715 -714c23 -24 37 -57 37 -91zM1899 512c0 -34 -14 -67 -37 -90l-491 -492c-24 -23 -57 -37 -91 -37c-52 0 -78 24 -112 59l470 470c23 23 37 56 37 90s-14 67 -37 91l-715 714c-51 51 -148 91 -219 91h224c71 0 168 -40 219 -91l715 -714c23 -24 37 -57 37 -91z" /> + <glyph glyph-name="minus-square-o" unicode="" horiz-adv-x="1408" +d="M1152 736v-64c0 -18 -14 -32 -32 -32h-832c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h832c18 0 32 -14 32 -32zM1280 288v832c0 88 -72 160 -160 160h-832c-88 0 -160 -72 -160 -160v-832c0 -88 72 -160 160 -160h832c88 0 160 72 160 160zM1408 1120v-832 +c0 -159 -129 -288 -288 -288h-832c-159 0 -288 129 -288 288v832c0 159 129 288 288 288h832c159 0 288 -129 288 -288z" /> + <glyph glyph-name="user-circle" unicode="" horiz-adv-x="1792" +d="M1523 197c-26 187 -102 353 -272 376c-88 -96 -215 -157 -355 -157s-267 61 -355 157c-170 -23 -246 -189 -272 -376c139 -196 368 -325 627 -325s488 129 627 325zM1280 896c0 212 -172 384 -384 384s-384 -172 -384 -384s172 -384 384 -384s384 172 384 384zM1792 640 +c0 -493 -400 -896 -896 -896c-495 0 -896 402 -896 896c0 495 401 896 896 896s896 -401 896 -896z" /> + <glyph glyph-name="thumbs-o-down" unicode="" +d="M256 1088c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1408 512c0 37 -28 127 -75 128c21 24 35 71 35 103c0 47 -19 87 -53 119c12 21 18 45 18 69c0 46 -23 103 -65 126c3 18 5 37 5 56c0 117 -74 167 -185 167h-128c-118 0 -232 -35 -342 -73 +c-54 -19 -146 -55 -202 -55h-32v-640h32c79 0 198 -171 243 -229c25 -31 49 -62 77 -91c97 -102 64 -255 128 -320c137 0 160 75 160 192c0 118 -96 203 -96 320h352c67 0 128 60 128 128zM1536 511c0 -138 -118 -255 -256 -255h-176c30 -62 48 -122 48 -192 +c0 -66 -4 -126 -35 -186c-49 -97 -149 -134 -253 -134c-34 0 -66 14 -90 37c-100 98 -69 256 -128 321c-38 40 -73 83 -107 127c-30 39 -98 129 -137 155h-274c-71 0 -128 57 -128 128v640c0 71 57 128 128 128h288c28 0 109 30 138 40c144 50 269 88 423 88h112 +c182 0 313 -108 312 -295v-5c39 -50 60 -114 60 -178c0 -14 -1 -29 -3 -43c25 -44 38 -94 38 -144c0 -23 -3 -47 -9 -69c32 -48 49 -105 49 -163z" /> + <glyph glyph-name="subscript" unicode="" horiz-adv-x="1531" +d="M892 167v-167h-248l-159 252l-24 42c-6 7 -9 14 -11 21h-3c-2 -7 -6 -14 -9 -21c-6 -12 -15 -28 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228c9 -14 16 -29 23 -42c6 -7 9 -14 11 -21h3c2 7 6 14 11 21l25 42l140 228h257v-168h-125 +l-184 -267l204 -296h109zM1531 -50v-206h-514l-4 27c-1 15 -3 33 -3 46c0 273 350 296 350 441c0 52 -47 87 -100 87c-39 0 -72 -18 -97 -39c-13 -11 -25 -25 -36 -38l-105 92c18 25 38 46 63 66c42 34 103 65 188 65c145 0 246 -85 246 -218c0 -239 -332 -259 -346 -403 +h232v80h126z" /> + <glyph glyph-name="flickr" unicode="" +d="M1248 1408c159 0 288 -129 288 -288v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960zM698 640c0 117 -95 212 -212 212s-212 -95 -212 -212s95 -212 212 -212s212 95 212 212zM1262 640c0 117 -95 212 -212 212 +s-212 -95 -212 -212s95 -212 212 -212s212 95 212 212z" /> + <glyph glyph-name="cc-amex" unicode="" horiz-adv-x="2304" +d="M119 854h89l-45 108zM740 328l74 79l-70 79h-163v-49h142v-55h-142v-54h159zM898 406l99 -110v217zM1186 453c0 24 -18 33 -40 33h-84v-69h83c23 0 41 11 41 36zM1475 457c0 25 -22 29 -42 29h-82v-61h81c22 0 43 5 43 32zM1197 923c0 25 -22 29 -42 29h-82v-60h81 +c22 0 43 5 43 31zM1656 854h89l-44 108zM699 1009v-271h-66v212l-94 -212h-57l-94 212v-212h-132l-25 60h-135l-25 -60h-70l116 271h96l110 -257v257h106l85 -184l77 184h108zM1255 453c0 -109 -119 -91 -193 -91v-91h-126l-80 90l-83 -90h-256v271h260l80 -89l82 89h207 +c61 0 109 -21 109 -89zM964 794v-56h-217v271h217v-57h-152v-49h148v-55h-148v-54h152zM2304 235v-229c0 -73 -59 -134 -132 -134h-2040c-73 0 -132 61 -132 134v678h111l25 61h55l25 -61h218v46l19 -46h113l20 47v-47h541v99l10 1c9 0 10 -7 10 -14v-86h279v23 +c65 -34 154 -23 222 -23l25 61h56l25 -61h227v58l34 -58h182v378h-180v-44l-25 44h-185v-44l-23 44h-249c-37 0 -76 -4 -109 -22v22h-172v-22c-20 18 -47 22 -73 22h-628l-43 -97l-43 97h-198v-44l-22 44h-169l-78 -179v391c0 73 59 134 132 134h2040c73 0 132 -61 132 -134 +v-678h-120c-28 0 -58 -5 -81 -22v22h-177c-25 0 -59 -4 -78 -22v22h-316v-22c-24 17 -59 22 -87 22h-209v-22c-21 20 -64 22 -91 22h-234l-54 -58l-50 58h-349v-378h343l55 59l52 -59h211v89h21c30 0 61 1 90 13v-102h174v99h8c10 0 12 -1 12 -12v-87h529c29 0 65 6 88 24 +v-24h168c32 0 66 3 95 17zM1546 469c0 -30 -16 -60 -46 -72c36 -13 43 -37 43 -72v-54h-65v45c0 46 -15 54 -58 54h-69v-99h-65v271h154c51 0 106 -9 106 -73zM1269 936c0 -31 -17 -61 -46 -73c37 -13 43 -36 43 -72v-53h-65c-1 58 14 98 -58 98h-70v-98h-64v271l153 -1 +c52 0 107 -8 107 -72zM1798 327v-56h-216v271h216v-56h-151v-49h148v-55h-148v-54zM1372 1009v-271h-66v271h66zM2065 357c0 -64 -44 -86 -102 -86h-126v58h126c16 0 34 4 34 25c0 58 -167 -22 -167 107c0 55 42 81 92 81h130v-57h-119c-17 0 -36 -3 -36 -25 +c0 -59 168 27 168 -103zM2304 407v-101c-19 -28 -56 -35 -88 -35h-125v58h125c16 0 33 5 33 25c0 57 -167 -22 -167 107c0 55 43 81 93 81h129v-57h-118c-18 0 -36 -3 -36 -25c0 -48 113 1 154 -53zM2139 1008v-270h-92l-122 203v-203h-132l-26 60h-134l-25 -60h-75 +c-89 0 -129 46 -129 133c0 91 41 138 133 138h63v-59c-68 1 -130 16 -130 -77c0 -46 11 -78 63 -78h29l92 213h97l109 -256v256h99l114 -188v188h66z" /> + <glyph glyph-name="reddit" unicode="" horiz-adv-x="1792" +d="M1095 369c9 -9 9 -23 0 -31c-57 -57 -167 -62 -199 -62s-142 5 -199 62c-9 8 -9 22 0 31c8 8 22 8 30 0c36 -37 114 -49 169 -49s132 12 169 49c8 8 22 8 30 0zM788 550c0 -49 -40 -89 -89 -89c-50 0 -90 40 -90 89c0 50 40 90 90 90c49 0 89 -40 89 -90zM1183 550 +c0 -49 -40 -89 -90 -89c-49 0 -89 40 -89 89c0 50 40 90 89 90c50 0 90 -40 90 -90zM1434 670c0 66 -54 119 -120 119c-34 0 -64 -14 -86 -36c-81 56 -190 92 -311 96l63 283l200 -45c0 -49 40 -89 89 -89c50 0 90 41 90 90s-40 90 -90 90c-35 0 -65 -21 -80 -50l-221 49 +c-11 3 -22 -5 -25 -16l-69 -312c-120 -5 -228 -41 -309 -97c-22 23 -53 37 -87 37c-66 0 -120 -53 -120 -119c0 -48 28 -88 68 -108c-4 -18 -6 -37 -6 -56c0 -190 214 -344 477 -344c264 0 478 154 478 344c0 19 -2 39 -7 57c39 20 66 60 66 107zM1792 640 +c0 -495 -401 -896 -896 -896s-896 401 -896 896s401 896 896 896s896 -401 896 -896z" /> + <glyph glyph-name="times-circle" unicode="" +d="M1149 414c0 17 -7 33 -19 45l-181 181l181 181c12 12 19 28 19 45s-7 34 -19 46l-90 90c-12 12 -29 19 -46 19s-33 -7 -45 -19l-181 -181l-181 181c-12 12 -28 19 -45 19s-34 -7 -46 -19l-90 -90c-12 -12 -19 -29 -19 -46s7 -33 19 -45l181 -181l-181 -181 +c-12 -12 -19 -28 -19 -45s7 -34 19 -46l90 -90c12 -12 29 -19 46 -19s33 7 45 19l181 181l181 -181c12 -12 28 -19 45 -19s34 7 46 19l90 90c12 12 19 29 19 46zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" /> + <glyph glyph-name="tripadvisor" unicode="" horiz-adv-x="2304" +d="M651 539c0 -52 -42 -94 -93 -94c-52 0 -94 42 -94 94c0 51 42 93 94 93c51 0 93 -42 93 -93zM1805 540c0 -52 -42 -94 -94 -94s-94 42 -94 94s42 93 94 93s94 -41 94 -93zM765 539c0 106 -87 193 -193 193c-107 0 -193 -87 -193 -193c0 -107 86 -193 193 -193 +c106 0 193 86 193 193zM1918 540c0 106 -86 193 -193 193c-106 0 -193 -87 -193 -193c0 -107 87 -193 193 -193c107 0 193 86 193 193zM850 539c0 -154 -124 -279 -278 -279s-279 125 -279 279c0 153 125 278 279 278s278 -125 278 -278zM2004 540 +c0 -154 -125 -278 -279 -278c-153 0 -278 124 -278 278s125 278 278 278c154 0 279 -124 279 -278zM1040 537c0 255 -207 462 -462 462c-254 0 -461 -207 -461 -462s207 -462 461 -462c255 0 462 207 462 462zM1708 1110c-165 72 -351 111 -556 111s-409 -39 -573 -110 +c317 -1 573 -257 573 -574c0 311 247 564 556 573zM2187 537c0 255 -206 462 -461 462s-462 -207 -462 -462s207 -462 462 -462s461 207 461 462zM1921 1103h383c-60 -70 -104 -164 -115 -229c69 -95 110 -211 110 -337c0 -317 -257 -573 -573 -573c-180 0 -340 82 -445 211 +c0 0 -47 -56 -129 -179c-14 29 -85 130 -128 180c-105 -130 -266 -212 -446 -212c-316 0 -573 256 -573 573c0 126 41 242 110 337c-11 65 -55 159 -115 229h365c196 131 481 213 787 213s573 -82 769 -213z" /> + <glyph glyph-name="sort-amount-asc" unicode="" horiz-adv-x="1760" +d="M704 96c0 -9 -4 -17 -10 -24l-319 -319c-7 -6 -15 -9 -23 -9s-16 3 -23 9l-320 320c-9 10 -12 23 -7 35s17 20 30 20h192v1376c0 18 14 32 32 32h192c18 0 32 -14 32 -32v-1376h192c18 0 32 -14 32 -32zM1760 -32v-192c0 -18 -14 -32 -32 -32h-832c-18 0 -32 14 -32 32 +v192c0 18 14 32 32 32h832c18 0 32 -14 32 -32zM1568 480v-192c0 -18 -14 -32 -32 -32h-640c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h640c18 0 32 -14 32 -32zM1376 992v-192c0 -18 -14 -32 -32 -32h-448c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h448 +c18 0 32 -14 32 -32zM1184 1504v-192c0 -18 -14 -32 -32 -32h-256c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h256c18 0 32 -14 32 -32z" /> + <glyph glyph-name="renren" unicode="" +d="M1133 -34c-109 -60 -234 -94 -368 -94c-133 0 -258 34 -367 94c177 112 320 281 367 479c48 -198 191 -367 368 -479zM638 1394v-485c0 -342 -189 -636 -457 -766c-113 134 -181 306 -181 495c0 380 276 695 638 756zM1536 638c0 -189 -68 -361 -181 -495 +c-268 130 -457 424 -457 766v485c362 -61 638 -376 638 -756z" /> + <glyph glyph-name="key-modern" unicode="" horiz-adv-x="1792" +d="M546 1536v0c139 1 278 -52 383 -158c142 -141 187 -343 137 -525l726 -726v-319c0 -35 -29 -64 -64 -64h-300l-45 45l135 226l-46 45l-225 -135l-45 46l134 225l-45 45l-225 -134l-46 45l135 225l-45 46l-243 -139l-186 186c-182 -50 -382 -5 -524 136 +c-211 212 -209 556 4 770c107 106 246 159 385 160zM405 1290v0c-41 0 -82 -16 -113 -47c-63 -63 -63 -163 0 -226s164 -63 227 0s63 163 0 226c-31 31 -73 47 -114 47z" /> + <glyph glyph-name="arrow-circle-o-right" unicode="" +d="M1152 640c0 -8 -3 -17 -9 -23l-320 -320c-6 -6 -15 -9 -23 -9c-17 0 -32 15 -32 32v192h-352c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h352v192c0 18 14 32 32 32c9 0 17 -4 24 -10l319 -319c6 -6 9 -15 9 -23zM1312 640c0 300 -244 544 -544 544s-544 -244 -544 -544 +s244 -544 544 -544s544 244 544 544zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" /> + <glyph glyph-name="pinterest-p" unicode="" horiz-adv-x="1280" +d="M0 939c0 369 338 597 680 597c314 0 600 -216 600 -547c0 -311 -159 -656 -513 -656c-84 0 -190 42 -231 120c-76 -301 -70 -346 -238 -576l-14 -5l-9 10c-6 63 -15 125 -15 188c0 204 94 499 140 697c-25 51 -32 113 -32 169c0 101 70 229 184 229 +c84 0 129 -64 129 -143c0 -130 -88 -252 -88 -378c0 -86 71 -146 154 -146c230 0 301 332 301 509c0 237 -168 366 -395 366c-264 0 -468 -190 -468 -458c0 -129 79 -195 79 -226c0 -26 -19 -118 -52 -118c-5 0 -12 2 -17 3c-143 43 -195 234 -195 365z" /> + <glyph glyph-name="html5" unicode="" horiz-adv-x="1408" +d="M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674zM0 1408h1408l-128 -1438l-578 -162l-574 162z" /> + <glyph glyph-name="key" unicode="" horiz-adv-x="1683" +d="M832 1024c0 106 -86 192 -192 192s-192 -86 -192 -192c0 -29 7 -57 19 -83c-26 12 -54 19 -83 19c-106 0 -192 -86 -192 -192s86 -192 192 -192s192 86 192 192c0 29 -7 57 -19 83c26 -12 54 -19 83 -19c106 0 192 86 192 192zM1683 320c0 -23 -92 -115 -115 -115 +c-26 0 -107 94 -128 115l-96 -96l220 -220c18 -18 28 -43 28 -68c0 -56 -64 -120 -120 -120c-25 0 -50 10 -68 28l-671 671c-105 -78 -233 -131 -365 -131c-218 0 -368 151 -368 368c0 328 328 656 656 656c217 0 368 -150 368 -368c0 -132 -53 -260 -131 -365l355 -355 +l96 96c-21 21 -115 102 -115 128c0 23 92 115 115 115c8 0 17 -4 23 -10c37 -37 316 -300 316 -329z" /> + <glyph glyph-name="syncthing" unicode="" +d="M768 1408c424 0 768 -344 768 -768s-344 -768 -768 -768s-768 344 -768 768s344 768 768 768zM774 1254c-337 0 -611 -274 -611 -611c0 -10 0 -28 1 -38c-17 -10 -32 -23 -42 -41c-33 -56 -14 -128 41 -161c18 -10 37 -15 56 -16c97 -210 309 -355 555 -355 +c108 0 210 28 298 78c16 -11 35 -19 56 -21c65 -5 122 42 129 107v10c0 14 -5 36 -11 49c87 105 139 241 139 388c0 57 -8 112 -23 164c14 13 25 30 32 49c21 61 -12 128 -73 149c-12 4 -26 6 -38 6v0c-6 0 -15 0 -21 -1c-112 148 -289 244 -488 244zM774 1175v0 +c171 0 323 -79 420 -204c-10 -11 -17 -24 -22 -39c-9 -27 -8 -55 1 -80l-224 -186c-18 11 -39 16 -60 16c-22 0 -44 -5 -63 -18c-26 -16 -43 -42 -50 -70l-447 -41c-10 21 -25 39 -46 52c-13 8 -27 12 -41 14c0 8 -1 16 -1 24c0 295 238 532 533 532zM1224 792 +c6 -3 15 -7 21 -9c15 -5 29 -8 44 -7c11 -43 17 -87 17 -133c0 -125 -42 -240 -114 -331c-13 7 -28 11 -43 13c-15 1 -28 0 -42 -4l-122 175c23 32 29 73 15 110zM783 516c2 -4 5 -11 8 -15c29 -44 81 -63 129 -50l122 -175c-12 -16 -19 -37 -21 -59v-9c0 -10 2 -26 5 -35 +c-75 -40 -161 -63 -252 -63c-211 0 -394 123 -480 301c10 8 24 22 30 33c5 8 11 22 13 31z" /> + <glyph glyph-name="picture-o" unicode="" horiz-adv-x="1920" +d="M640 960c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600c-17 0 -32 -15 -32 -32v-1216c0 -17 15 -32 32 -32h1600c17 0 32 15 32 32v1216c0 17 -15 32 -32 32z +M1920 1248v-1216c0 -88 -72 -160 -160 -160h-1600c-88 0 -160 72 -160 160v1216c0 88 72 160 160 160h1600c88 0 160 -72 160 -160z" /> + <glyph glyph-name="list-alt" unicode="" horiz-adv-x="1792" +d="M384 352v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM384 608v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM384 864v-64c0 -17 -15 -32 -32 -32h-64 +c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM1536 352v-64c0 -17 -15 -32 -32 -32h-960c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h960c17 0 32 -15 32 -32zM1536 608v-64c0 -17 -15 -32 -32 -32h-960c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h960 +c17 0 32 -15 32 -32zM1536 864v-64c0 -17 -15 -32 -32 -32h-960c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h960c17 0 32 -15 32 -32zM1664 160v832c0 17 -15 32 -32 32h-1472c-17 0 -32 -15 -32 -32v-832c0 -17 15 -32 32 -32h1472c17 0 32 15 32 32zM1792 1248v-1088 +c0 -88 -72 -160 -160 -160h-1472c-88 0 -160 72 -160 160v1088c0 88 72 160 160 160h1472c88 0 160 -72 160 -160z" /> + <glyph glyph-name="fort-awesome" unicode="" horiz-adv-x="1664" +d="M640 528v224c0 9 -7 16 -16 16h-96c-9 0 -16 -7 -16 -16v-224c0 -9 7 -16 16 -16h96c9 0 16 7 16 16zM1152 528v224c0 9 -7 16 -16 16h-96c-9 0 -16 -7 -16 -16v-224c0 -9 7 -16 16 -16h96c9 0 16 7 16 16zM1664 496v-752h-640v320c0 106 -86 192 -192 192 +s-192 -86 -192 -192v-320h-640v752c0 9 7 16 16 16h96c9 0 16 -7 16 -16v-112h128v624c0 9 7 16 16 16h96c9 0 16 -7 16 -16v-112h128v112c0 9 7 16 16 16h96c9 0 16 -7 16 -16v-112h128v112c0 21 28 16 41 16v391c-19 9 -32 29 -32 50c0 30 25 55 55 55s55 -25 55 -55 +c0 -21 -13 -41 -32 -50v-17c27 6 55 10 83 10c41 0 80 -15 114 -15c31 0 66 15 84 15c9 0 16 -7 16 -16v-210c0 -24 -81 -28 -97 -28c-37 0 -72 15 -110 15c-30 0 -61 -5 -90 -12v-133c13 0 41 5 41 -16v-112h128v112c0 9 7 16 16 16h96c9 0 16 -7 16 -16v-112h128v112 +c0 9 7 16 16 16h96c9 0 16 -7 16 -16v-624h128v112c0 9 7 16 16 16h96c9 0 16 -7 16 -16z" /> + <glyph glyph-name="c" unicode="" horiz-adv-x="1404" +d="M996 819c0 0 -23 211 -232 217s-317 -157 -317 -392s119 -423 323 -423s226 235 226 235l391 -24s22 -211 -141 -373s-364 -188 -504 -187s-334 -2 -522 190s-220 379 -220 563s36 427 259 611c152 125 306 172 460 172c643 0 685 -593 685 -593l-408 4v0z" /> + <glyph glyph-name="commenting" unicode="" horiz-adv-x="1792" +d="M640 640c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1024 640c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1408 640c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128z +M1792 640c0 -354 -401 -640 -896 -640c-73 0 -144 6 -211 18c-114 -114 -263 -192 -435 -229c-27 -5 -56 -10 -86 -13c-16 -2 -31 9 -35 24c-4 16 8 26 20 37c63 59 138 106 164 317c-191 117 -313 291 -313 486c0 354 401 640 896 640s896 -286 896 -640z" /> + <glyph glyph-name="tablet" unicode="" horiz-adv-x="1152" +d="M640 128c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1024 288v960c0 17 -15 32 -32 32h-832c-17 0 -32 -15 -32 -32v-960c0 -17 15 -32 32 -32h832c17 0 32 15 32 32zM1152 1248v-1088c0 -88 -72 -160 -160 -160h-832c-88 0 -160 72 -160 160v1088 +c0 88 72 160 160 160h832c88 0 160 -72 160 -160z" /> + <glyph glyph-name="credit-card" unicode="" horiz-adv-x="1920" +d="M1760 1408c88 0 160 -72 160 -160v-1216c0 -88 -72 -160 -160 -160h-1600c-88 0 -160 72 -160 160v1216c0 88 72 160 160 160h1600zM160 1280c-17 0 -32 -15 -32 -32v-224h1664v224c0 17 -15 32 -32 32h-1600zM1760 0c17 0 32 15 32 32v608h-1664v-608 +c0 -17 15 -32 32 -32h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" /> + <glyph glyph-name="minus" unicode="" horiz-adv-x="1408" +d="M1408 800v-192c0 -53 -43 -96 -96 -96h-1216c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h1216c53 0 96 -43 96 -96z" /> + <glyph glyph-name="unlock-alt" unicode="" horiz-adv-x="1152" +d="M1056 768c53 0 96 -43 96 -96v-576c0 -53 -43 -96 -96 -96h-960c-53 0 -96 43 -96 96v576c0 53 43 96 96 96h32v320c0 247 201 448 448 448s448 -201 448 -448c0 -35 -29 -64 -64 -64h-64c-35 0 -64 29 -64 64c0 141 -115 256 -256 256s-256 -115 -256 -256v-320h736z +" /> + <glyph glyph-name="ils" unicode="" horiz-adv-x="1376" +d="M992 912v-496c0 -18 -14 -32 -32 -32h-160c-18 0 -32 14 -32 32v496c0 150 -122 272 -272 272h-272v-1152c0 -18 -14 -32 -32 -32h-160c-18 0 -32 14 -32 32v1344c0 18 14 32 32 32h464c274 0 496 -222 496 -496zM1376 1376v-880c0 -274 -222 -496 -496 -496h-464 +c-18 0 -32 14 -32 32v960c0 18 14 32 32 32h160c18 0 32 -14 32 -32v-768h272c150 0 272 122 272 272v880c0 18 14 32 32 32h160c18 0 32 -14 32 -32z" /> + <glyph glyph-name="cog" unicode="" +d="M1024 640c0 141 -115 256 -256 256s-256 -115 -256 -256s115 -256 256 -256s256 115 256 256zM1536 749v-222c0 -15 -12 -33 -28 -36l-185 -28c-11 -32 -23 -62 -39 -91c34 -49 70 -93 107 -138c6 -7 10 -16 10 -25s-3 -16 -9 -23c-24 -32 -159 -179 -193 -179 +c-9 0 -18 4 -26 9l-138 108c-29 -15 -60 -28 -91 -38c-7 -61 -13 -126 -29 -186c-4 -16 -18 -28 -36 -28h-222c-18 0 -34 13 -36 30l-28 184c-31 10 -61 22 -90 37l-141 -107c-7 -6 -16 -9 -25 -9s-18 4 -25 11c-53 48 -123 110 -165 168c-5 7 -7 15 -7 23c0 9 3 16 8 23 +c34 46 71 90 105 137c-17 32 -31 65 -41 99l-183 27c-17 3 -29 19 -29 36v222c0 15 12 33 27 36l186 28c10 32 23 62 39 92c-34 48 -70 93 -107 138c-6 7 -10 15 -10 24s4 16 9 23c24 33 159 179 193 179c9 0 18 -4 26 -10l138 -107c29 15 60 28 91 38c7 61 13 126 29 186 +c4 16 18 28 36 28h222c18 0 34 -13 36 -30l28 -184c31 -10 61 -22 90 -37l142 107c6 6 15 9 24 9s18 -4 25 -10c53 -49 123 -111 165 -170c5 -6 7 -14 7 -22c0 -9 -3 -16 -8 -23c-34 -46 -71 -90 -105 -137c17 -32 31 -65 41 -98l183 -28c17 -3 29 -19 29 -36z" /> + <glyph glyph-name="arrow-right" unicode="" horiz-adv-x="1472" +d="M1472 576c0 -34 -13 -67 -37 -91l-651 -651c-24 -23 -57 -37 -91 -37s-66 14 -90 37l-75 75c-24 24 -38 57 -38 91s14 67 38 91l293 293h-704c-72 0 -117 60 -117 128v128c0 68 45 128 117 128h704l-293 294c-24 23 -38 56 -38 90s14 67 38 90l75 75c24 24 56 38 90 38 +s67 -14 91 -38l651 -651c24 -23 37 -56 37 -90z" /> + <glyph glyph-name="cc-paypal" unicode="" horiz-adv-x="2304" +d="M745 630c0 -49 -39 -86 -88 -86c-37 0 -64 21 -64 60c0 49 38 88 87 88c37 0 65 -23 65 -62zM1530 779c0 -60 -36 -72 -88 -72l-32 -1l17 107c1 7 6 11 13 11h18c34 0 72 -2 72 -45zM1881 630c0 -49 -39 -86 -87 -86c-37 0 -65 21 -65 60c0 49 38 88 87 88 +c37 0 65 -23 65 -62zM513 801c0 84 -65 112 -139 112h-160c-10 0 -20 -8 -21 -19l-65 -408c-1 -8 5 -16 13 -16h76c11 0 21 8 22 19l18 110c4 29 53 19 72 19c114 0 184 68 184 183zM822 489l41 261c1 8 -5 16 -13 16h-76c-15 0 -16 -22 -17 -33c-23 34 -57 40 -95 40 +c-98 0 -173 -86 -173 -181c0 -78 49 -129 127 -129c36 0 81 16 106 44c-2 -6 -4 -15 -4 -21c0 -9 4 -16 13 -16h69c11 0 20 8 22 19zM1269 752c0 7 -6 14 -13 14h-77c-7 0 -14 -4 -18 -10l-106 -156l-44 150c-3 9 -12 16 -22 16h-75c-7 0 -13 -7 -13 -14 +c0 -5 78 -231 85 -252c-11 -15 -82 -108 -82 -120c0 -7 6 -13 13 -13h77c7 0 14 4 18 10l255 368c2 2 2 4 2 7zM1649 801c0 84 -65 112 -139 112h-159c-11 0 -21 -8 -22 -19l-65 -408c-1 -8 5 -16 13 -16h82c8 0 14 6 16 13l18 116c4 29 53 19 72 19c114 0 184 68 184 183z +M1958 489l41 261c1 8 -5 16 -13 16h-76c-15 0 -16 -22 -17 -33c-22 34 -56 40 -95 40c-98 0 -173 -86 -173 -181c0 -78 49 -129 127 -129c37 0 82 16 106 44c-1 -6 -4 -15 -4 -21c0 -9 4 -16 13 -16h69c11 0 20 8 22 19zM2176 898v1c0 8 -6 14 -13 14h-74 +c-6 0 -12 -5 -13 -11l-65 -416l-1 -2c0 -7 6 -14 14 -14h66c10 0 20 8 21 19zM392 764c-8 -51 -42 -57 -86 -57l-33 -1l17 107c1 7 7 11 13 11h19c45 0 79 -6 70 -60zM2304 1280v-1280c0 -70 -58 -128 -128 -128h-2048c-70 0 -128 58 -128 128v1280c0 70 58 128 128 128 +h2048c70 0 128 -58 128 -128z" /> + <glyph glyph-name="birthday-cake" unicode="" horiz-adv-x="1792" +d="M1792 128v-384h-1792v384c98 0 150 44 191 79c34 30 57 49 108 49s73 -19 108 -49c41 -35 92 -79 191 -79c98 0 149 44 191 79c34 30 56 49 107 49s74 -19 108 -49c41 -35 93 -79 191 -79s150 44 191 79c34 30 57 49 108 49c50 0 73 -19 107 -49c41 -35 93 -79 191 -79z +M1792 448v-192c-51 0 -73 19 -108 49c-41 35 -92 79 -190 79c-99 0 -150 -44 -191 -79c-35 -30 -57 -49 -108 -49s-74 19 -108 49c-41 35 -92 79 -191 79c-98 0 -149 -44 -191 -79c-34 -30 -56 -49 -107 -49s-74 19 -108 49c-41 35 -93 79 -191 79c-99 0 -150 -44 -191 -79 +c-34 -30 -57 -49 -108 -49v192c0 106 86 192 192 192h64v448h256v-448h256v448h256v-448h256v448h256v-448h64c106 0 192 -86 192 -192zM512 1312c0 -106 -57 -160 -128 -160s-128 57 -128 128c0 124 128 92 128 256c48 0 128 -118 128 -224zM1024 1312 +c0 -106 -57 -160 -128 -160s-128 57 -128 128c0 124 128 92 128 256c48 0 128 -118 128 -224zM1536 1312c0 -106 -57 -160 -128 -160s-128 57 -128 128c0 124 128 92 128 256c48 0 128 -118 128 -224z" /> + <glyph glyph-name="comment" unicode="" horiz-adv-x="1792" +d="M1792 640c0 -354 -401 -640 -896 -640c-49 0 -98 3 -145 8c-131 -116 -287 -198 -460 -242c-36 -10 -75 -17 -114 -22c-22 -2 -43 14 -48 38v1c-5 25 12 40 27 58c63 71 135 131 182 298c-206 117 -338 298 -338 501c0 353 401 640 896 640s896 -286 896 -640z" /> + <glyph glyph-name="bell" unicode="" horiz-adv-x="1664" +d="M848 -160c0 9 -7 16 -16 16c-79 0 -144 65 -144 144c0 9 -7 16 -16 16s-16 -7 -16 -16c0 -97 79 -176 176 -176c9 0 16 7 16 16zM182 128h1300c-179 202 -266 476 -266 832c0 129 -122 320 -384 320s-384 -191 -384 -320c0 -356 -87 -630 -266 -832zM1664 128 +c0 -70 -58 -128 -128 -128h-448c0 -141 -115 -256 -256 -256s-256 115 -256 256h-448c-70 0 -128 58 -128 128c148 125 320 349 320 832c0 192 159 402 424 441c-5 12 -8 25 -8 39c0 53 43 96 96 96s96 -43 96 -96c0 -14 -3 -27 -8 -39c265 -39 424 -249 424 -441 +c0 -483 172 -707 320 -832z" /> + <glyph glyph-name="cc" unicode="" horiz-adv-x="2048" +d="M785 528h207c-19 -211 -140 -339 -313 -339c-216 0 -347 166 -347 432c0 264 144 429 326 429c200 0 312 -124 329 -334h-203c-7 85 -49 134 -117 134c-75 0 -120 -80 -120 -238c0 -115 20 -223 129 -223c69 0 101 60 109 139zM1497 528h206 +c-19 -211 -139 -339 -312 -339c-216 0 -347 166 -347 432c0 264 144 429 326 429c200 0 312 -124 329 -334h-204c-6 85 -49 134 -116 134c-75 0 -120 -80 -120 -238c0 -115 19 -223 128 -223c69 0 102 60 110 139zM1856 647c0 268 -14 384 -76 468c-13 17 -34 28 -51 40 +c-63 46 -356 63 -697 63s-648 -17 -710 -63c-18 -13 -40 -23 -53 -40c-62 -83 -75 -200 -75 -468c0 -269 14 -385 75 -468c14 -19 35 -27 53 -41c62 -46 369 -65 710 -65s634 18 697 65c17 13 39 21 51 41c63 82 76 199 76 468zM2048 1408v-1536h-2048v1536h2048z" /> + <glyph glyph-name="get-pocket" unicode="" horiz-adv-x="1720" +d="M1565 1408c87 0 155 -70 155 -156v-519c0 -479 -383 -861 -859 -861c-478 0 -861 382 -861 861v519c0 85 71 156 156 156h1409zM861 344c30 0 60 12 82 33l404 388c23 22 37 53 37 85c0 65 -53 118 -118 118c-31 0 -60 -12 -82 -33l-323 -310l-323 310 +c-22 21 -51 33 -81 33c-65 0 -118 -53 -118 -118c0 -32 13 -63 36 -85l405 -388c21 -21 51 -33 81 -33z" /> + <glyph glyph-name="bell-slash-o" unicode="" horiz-adv-x="2019" +d="M1026 -160c0 9 -7 16 -16 16c-79 0 -144 65 -144 144c0 9 -7 16 -16 16s-16 -7 -16 -16c0 -97 79 -176 176 -176c9 0 16 7 16 16zM489 315l877 760c-50 105 -166 205 -356 205c-262 0 -384 -191 -384 -320c0 -256 -45 -470 -137 -645zM1842 128c0 -70 -58 -128 -128 -128 +h-448c0 -141 -115 -256 -256 -256s-255 114 -256 255l149 129h757c-111 125 -186 277 -227 459l111 97c51 -298 182 -458 298 -556zM1928 1520l84 -96c11 -14 10 -34 -3 -46l-1872 -1622c-13 -11 -34 -10 -45 4l-84 96c-11 14 -10 34 3 45l186 161c-12 20 -19 42 -19 66 +c148 125 320 349 320 832c0 192 159 402 424 441c-5 12 -8 25 -8 39c0 53 43 96 96 96s96 -43 96 -96c0 -14 -3 -27 -8 -39c172 -25 299 -122 367 -240l418 363c13 11 34 10 45 -4z" /> + <glyph glyph-name="header" unicode="" horiz-adv-x="1668" +d="M1620 -128c-88 0 -177 7 -266 7c-88 0 -176 -7 -264 -7c-34 0 -50 37 -50 66c0 89 100 51 152 85c33 21 33 105 33 140l-1 391c0 11 0 21 -1 31c-16 5 -34 4 -50 4h-675c-17 0 -35 1 -51 -4c-1 -10 -1 -20 -1 -31l-1 -371c0 -38 0 -142 37 -164c52 -32 170 13 170 -77 +c0 -30 -14 -70 -49 -70c-93 0 -186 7 -278 7c-85 0 -170 -7 -255 -7c-33 0 -48 38 -48 66c0 87 92 51 141 85c32 22 33 108 33 143l-1 57v813c0 48 7 202 -38 229c-50 31 -157 -17 -157 73c0 29 13 70 48 70c92 0 185 -7 277 -7c84 0 169 7 253 7c36 0 50 -40 50 -70 +c0 -86 -99 -44 -148 -75c-35 -21 -35 -124 -35 -160l1 -320c0 -11 0 -21 1 -32c13 -3 26 -3 39 -3h699c12 0 25 0 38 3c1 11 1 21 1 32l1 320c0 37 0 139 -35 160c-50 30 -150 -10 -150 75c0 30 14 70 50 70c88 0 176 -7 264 -7c86 0 172 7 258 7c36 0 50 -40 50 -70 +c0 -87 -103 -43 -153 -74c-34 -22 -35 -125 -35 -161l1 -943c0 -33 2 -120 34 -140c51 -32 159 9 159 -78c0 -29 -13 -70 -48 -70z" /> + <glyph glyph-name="bluetooth-b" unicode="" horiz-adv-x="944" +d="M556 113l173 172l-173 172v-344zM556 823l173 172l-173 172v-344zM588 640l356 -356l-539 -540v711l-297 -296l-108 108l372 373l-372 373l108 108l297 -296v711l539 -540z" /> + <glyph glyph-name="linux" unicode="" horiz-adv-x="1523" +d="M657 1125c-20 -2 -13 -20 -24 -20c-10 -1 -8 22 24 20zM744 1111c-10 -3 -11 16 -29 11c29 13 39 -7 29 -11zM393 684c-9 3 -7 -15 -16 -29c-7 -13 -25 -23 -11 -25c5 -1 19 11 25 25c5 17 10 26 2 29zM1248 325c0 18 -39 35 -55 42c27 90 15 126 -3 211 +c-14 64 -73 151 -119 178c12 -10 34 -39 57 -83c40 -75 80 -186 54 -278c-10 -36 -34 -41 -50 -42c-70 -8 -29 84 -58 209c-33 140 -67 150 -75 161c-41 182 -86 164 -99 232c-11 61 53 111 -34 128c-27 5 -65 32 -80 34s-23 101 33 104c55 4 65 -62 55 -88 +c-16 -26 1 -36 28 -27c22 7 8 65 13 73c-14 84 -49 96 -85 103c-138 -11 -76 -163 -90 -149c-20 21 -78 2 -78 15c1 78 -25 123 -61 124c-40 1 -56 -55 -58 -87c-3 -30 17 -93 32 -88c10 3 27 23 9 22c-9 0 -23 22 -25 48c-1 26 9 52 43 51c39 -1 39 -79 35 -82 +c-13 -9 -29 -26 -31 -29c-13 -21 -38 -27 -48 -36c-17 -18 -21 -38 -8 -45c46 -26 31 -56 95 -58c42 -2 73 6 102 15c22 7 93 22 108 48c7 11 15 11 20 8c10 -5 12 -24 -13 -30c-35 -10 -70 -29 -102 -41c-31 -13 -41 -18 -70 -23c-66 -12 -115 24 -71 -19 +c15 -14 29 -23 67 -22c84 3 177 104 186 59c2 -10 -26 -22 -48 -33c-78 -38 -133 -114 -183 -88c-45 24 -90 135 -89 85c1 -77 -101 -145 -54 -233c-31 -8 -100 -155 -110 -231c-6 -44 4 -98 -7 -128c-15 -44 -83 42 -61 147c4 18 0 22 -5 13c-27 -49 -12 -118 10 -166 +c9 -21 32 -30 49 -48c35 -40 173 -142 197 -167c31 -29 22 -97 -42 -104c33 -62 65 -68 64 -169c38 20 23 64 7 92c-11 20 -25 29 -22 34c2 3 22 20 33 7c34 -38 98 -45 166 -36c69 8 143 32 177 87c16 26 27 35 34 30c8 -4 11 -22 10 -52c-1 -32 -14 -65 -23 -92 +c-9 -31 -12 -52 18 -53c8 56 24 111 28 167c5 64 -41 182 9 241c13 16 29 18 51 18c3 80 126 74 167 41zM620 1152c4 25 -8 43 -14 45c-12 3 -10 -15 -4 -13c4 0 9 -6 7 -15c-2 -12 -1 -20 8 -20c1 0 3 0 3 3zM1039 955c-4 19 -18 12 -34 22c-19 12 -23 32 -30 25 +c-21 -23 26 -71 46 -75c12 -2 21 14 18 28zM861 1168c1 24 -20 36 -25 35c-13 -1 -9 -7 -3 -9c8 -2 16 -16 18 -31c0 -2 10 2 10 5zM915 1401c1 5 -12 11 -21 18c-8 8 -16 15 -24 15c-20 -2 -10 -23 -13 -33c-4 -11 -19 -20 -9 -28c9 -7 15 11 34 18c5 2 28 -1 33 10z +M1480 60c123 -76 -46 -139 -119 -176c-57 -29 -133 -93 -161 -120c-21 -20 -108 -30 -157 -5c-57 29 -27 75 -115 78c-44 1 -87 1 -130 1c-38 -1 -76 -3 -115 -4c-132 -3 -145 -88 -230 -85c-58 2 -131 48 -257 74c-88 18 -173 23 -191 62s22 83 25 121c3 51 -38 120 -8 146 +c26 23 81 6 117 26c38 22 54 39 54 86c14 -48 -1 -87 -32 -106c-19 -12 -54 -18 -83 -15c-23 2 -37 -1 -43 -10c-9 -11 -6 -31 5 -57s24 -43 22 -75c-1 -32 -37 -70 -31 -97c2 -10 12 -19 37 -26c40 -11 113 -22 184 -39c79 -20 161 -56 212 -49c152 21 65 184 41 223 +c-129 202 -214 334 -282 282c-17 -14 -18 34 -17 53c3 66 36 90 56 141c38 97 67 208 125 265c43 56 111 147 124 195c-11 104 -14 214 -16 310c-2 103 14 193 130 256c28 15 65 21 104 21c69 1 146 -19 195 -55c78 -58 127 -181 121 -269c-4 -69 8 -140 30 -214 +c26 -87 67 -148 133 -218c79 -84 141 -249 159 -354c16 -98 -6 -159 -27 -162c-32 -5 -52 -106 -152 -102c-64 3 -70 41 -88 74c-29 51 -58 35 -69 -19c-6 -27 -2 -67 7 -97c18 -63 12 -122 1 -195c-21 -138 97 -164 176 -98c78 65 95 75 193 109c149 51 99 96 19 123 +c-72 24 -75 145 -49 168c6 -130 74 -149 102 -167z" /> + <glyph glyph-name="table" unicode="" horiz-adv-x="1664" +d="M512 160v192c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h320c18 0 32 14 32 32zM512 544v192c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h320c18 0 32 14 32 32zM1024 160v192c0 18 -14 32 -32 32h-320 +c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h320c18 0 32 14 32 32zM512 928v192c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h320c18 0 32 14 32 32zM1024 544v192c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-192 +c0 -18 14 -32 32 -32h320c18 0 32 14 32 32zM1536 160v192c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h320c18 0 32 14 32 32zM1024 928v192c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h320c18 0 32 14 32 32z +M1536 544v192c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h320c18 0 32 14 32 32zM1536 928v192c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h320c18 0 32 14 32 32zM1664 1248v-1088c0 -88 -72 -160 -160 -160 +h-1344c-88 0 -160 72 -160 160v1088c0 88 72 160 160 160h1344c88 0 160 -72 160 -160z" /> + <glyph glyph-name="handshake-o" unicode="" horiz-adv-x="2304" +d="M192 384c84 0 84 128 0 128s-84 -128 0 -128zM1665 442c-79 103 -156 208 -246 302l-125 -140c-110 -125 -307 -122 -414 6c-76 92 -76 224 2 315l177 206c-62 32 -137 21 -204 21c-59 0 -116 -24 -158 -66l-158 -158h-155v-544c44 0 84 6 119 -28l297 -292 +c61 -59 140 -111 227 -111c45 0 93 15 125 47c75 -26 162 16 185 93c48 -4 92 11 127 44c23 21 53 63 50 96c9 -9 31 -10 43 -10c119 0 181 125 108 219zM1824 384h96v512h-93l-157 180c-42 48 -105 76 -169 76h-167c-56 0 -110 -25 -146 -67l-209 -243 +c-37 -44 -37 -106 -1 -150c57 -68 162 -69 221 -3l193 218c46 51 130 3 109 -62c38 -44 79 -87 116 -131c50 -62 98 -127 147 -190c31 -40 54 -88 60 -140zM2112 384c84 0 84 128 0 128s-84 -128 0 -128zM2304 960v-640c0 -35 -29 -64 -64 -64h-434 +c-36 -87 -115 -145 -207 -158c-43 -63 -109 -111 -183 -127c-55 -70 -144 -112 -233 -106c-165 -93 -351 -12 -474 109l-287 282h-358c-35 0 -64 29 -64 64v672c0 35 29 64 64 64h421c116 116 196 224 370 224h117c65 0 128 -20 181 -56c53 36 116 56 181 56h167 +c190 0 269 -124 384 -256h355c35 0 64 -29 64 -64z" /> + <glyph glyph-name="spinner" unicode="" horiz-adv-x="1664" +d="M462 142c0 -70 -57 -128 -128 -128c-70 0 -128 58 -128 128c0 71 58 128 128 128c71 0 128 -57 128 -128zM960 -64c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128s128 -57 128 -128zM256 640c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128 +s128 -57 128 -128zM1458 142c0 -70 -58 -128 -128 -128c-71 0 -128 58 -128 128c0 71 57 128 128 128c70 0 128 -57 128 -128zM494 1138c0 -88 -72 -160 -160 -160s-160 72 -160 160s72 160 160 160s160 -72 160 -160zM1664 640c0 -71 -57 -128 -128 -128s-128 57 -128 128 +s57 128 128 128s128 -57 128 -128zM1024 1344c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM1554 1138c0 -124 -101 -224 -224 -224c-124 0 -224 100 -224 224c0 123 100 224 224 224c123 0 224 -101 224 -224z" /> + <glyph glyph-name="snapchat" unicode="" +d="M1279 388c0 14 -8 24 -22 27c-91 20 -160 83 -198 167c-3 8 -7 16 -7 25c0 45 125 36 125 100c0 27 -33 44 -57 44c-23 0 -41 -16 -63 -16c-4 0 -8 1 -12 2c2 38 5 76 5 114c0 35 -2 83 -17 114c-48 104 -141 165 -255 165c-125 0 -220 -46 -275 -165 +c-15 -31 -17 -79 -17 -114c0 -38 3 -76 5 -114c-4 -2 -9 -2 -14 -2c-23 0 -41 15 -62 15c-25 0 -56 -16 -56 -44c0 -62 125 -54 125 -99c0 -9 -4 -17 -7 -25c-39 -84 -106 -147 -198 -167c-14 -3 -22 -13 -22 -27c0 -46 106 -63 137 -68c9 -24 5 -66 41 -66c25 0 50 9 77 9 +c105 0 133 -95 255 -95c127 0 151 95 257 95c27 0 52 -8 78 -8c35 0 31 42 40 65c31 5 137 22 137 68zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" /> + <glyph glyph-name="tint" unicode="" horiz-adv-x="1024" +d="M512 384c0 25 -8 49 -20 69c-13 20 -66 88 -87 155c-3 11 -13 16 -21 16s-18 -5 -21 -16c-21 -67 -74 -135 -87 -155c-12 -20 -20 -44 -20 -69c0 -71 57 -128 128 -128s128 57 128 128zM1024 512c0 -283 -229 -512 -512 -512s-512 229 -512 512c0 101 31 195 81 275 +c51 80 265 351 346 621c13 43 53 64 85 64s73 -21 85 -64c81 -270 295 -541 346 -621s81 -174 81 -275z" /> + <glyph glyph-name="connectdevelop" unicode="" horiz-adv-x="2048" +d="M2048 641c0 -28 -20 -51 -46 -56l-205 -356c2 -6 3 -12 3 -18c0 -27 -19 -50 -45 -55l-193 -337c2 -5 3 -10 3 -16c0 -31 -25 -57 -57 -57c-16 0 -31 7 -41 18h-400c-10 -12 -26 -20 -43 -20s-33 8 -43 20h-399c-10 -12 -25 -20 -43 -20c-31 0 -57 25 -57 57 +c0 7 2 14 4 20l-193 335c-26 5 -45 28 -45 55c0 7 1 12 3 18l-206 356c-26 6 -45 29 -45 56c0 28 20 51 47 56l199 344c0 2 -1 4 -1 6c0 23 14 42 34 51l209 363c-2 5 -4 12 -4 18c0 32 26 57 57 57c18 0 33 -8 44 -21h396c10 13 25 21 43 21s33 -8 43 -21h398 +c11 13 26 21 44 21c31 0 57 -25 57 -57c0 -6 -2 -12 -4 -18l207 -358c30 -1 55 -26 55 -56c0 -10 -3 -19 -7 -27l187 -324c25 -5 44 -28 44 -55zM1063 -158h389l-342 354h-143l-342 -354h360c10 9 24 16 39 16s29 -7 39 -16zM112 654c1 -4 1 -8 1 -13s0 -10 -2 -15l208 -360 +c5 -1 10 -4 15 -6l188 199v347l-187 194c-9 -6 -19 -9 -29 -10zM986 1438h-388l190 -200l554 200h-280c-10 -10 -23 -16 -38 -16s-28 6 -38 16zM1689 226c1 4 3 8 5 11l-64 68l-17 -79h76zM1583 226l22 105l-252 266l-296 -307l63 -64h463zM1495 -142l16 28l65 310h-427 +l333 -343c4 2 8 4 13 5zM578 -158h5l342 354h-373v-335l4 -6c9 -3 16 -7 22 -13zM552 226h402l64 66l-309 321l-157 -166v-221zM359 226h163v189l-168 -177c2 -4 4 -8 5 -12zM358 1051c0 -1 1 -3 1 -4c0 -11 -3 -21 -8 -29l171 -177v269zM552 1121v-311l153 -157l297 314 +l-223 236zM556 1425l-4 -8v-264l205 74l-191 201c-3 -1 -6 -2 -10 -3zM1447 1438h-16l-621 -224l213 -225zM1023 946l-297 -315l311 -319l296 307zM688 634l-136 141v-284zM1038 270l-42 -44h85zM1374 618l238 -251l132 624l-3 5l-1 1zM1718 1018c-5 8 -8 18 -8 29v2 +l-216 376c-5 1 -9 3 -13 5l-437 -463l310 -327zM522 1142v223l-163 -282zM522 196h-163l163 -283v283zM1607 196l-48 -227l130 227h-82zM1729 266l207 361c-1 5 -2 9 -2 14c0 6 2 11 3 16l-171 296l-129 -612l77 -82c5 3 10 5 15 7z" /> + <glyph glyph-name="chrome" unicode="" horiz-adv-x="1792" +d="M893 1536c153 1 309 -38 451 -120c157 -91 276 -222 352 -372l-742 39c-210 12 -410 -106 -479 -304l-276 424c172 214 430 332 694 333zM146 1131l337 -663c95 -187 296 -301 504 -262l-230 -451c-429 66 -757 437 -757 885c0 181 54 350 146 491zM1732 962 +c157 -404 0 -874 -388 -1098c-157 -91 -330 -128 -498 -119l405 623c115 177 113 408 -24 568zM896 942c167 0 302 -135 302 -302s-135 -302 -302 -302s-302 135 -302 302s135 302 302 302z" /> + <glyph glyph-name="trademark" unicode="" horiz-adv-x="1972" +d="M857 992v-117c0 -17 -15 -31 -32 -31h-298v-812c0 -18 -14 -32 -31 -32h-135c-18 0 -32 14 -32 32v812h-297c-18 0 -32 14 -32 31v117c0 18 14 32 32 32h793c17 0 32 -14 32 -32zM1895 995l77 -961c1 -9 -2 -17 -8 -24c-6 -6 -14 -10 -23 -10h-134c-16 0 -30 13 -31 29 +l-46 588l-189 -425c-5 -12 -16 -19 -29 -19h-120c-12 0 -23 7 -29 19l-188 427l-45 -590c-1 -16 -15 -29 -31 -29h-135c-9 0 -17 4 -23 10c-6 7 -9 15 -9 24l78 961c1 16 15 29 31 29h142c13 0 24 -8 29 -19l220 -520c7 -16 14 -34 20 -51c7 17 13 35 20 51l221 520 +c5 11 16 19 29 19h141c17 0 31 -13 32 -29z" /> + <glyph glyph-name="align-right" unicode="" horiz-adv-x="1792" +d="M1792 192v-128c0 -35 -29 -64 -64 -64h-1664c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1664c35 0 64 -29 64 -64zM1792 576v-128c0 -35 -29 -64 -64 -64h-1280c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1280c35 0 64 -29 64 -64zM1792 960v-128 +c0 -35 -29 -64 -64 -64h-1536c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1536c35 0 64 -29 64 -64zM1792 1344v-128c0 -35 -29 -64 -64 -64h-1152c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1152c35 0 64 -29 64 -64z" /> + <glyph glyph-name="bandcamp" unicode="" horiz-adv-x="1792" +d="M1070 358l306 564h-654l-306 -564h654zM1792 640c0 -495 -401 -896 -896 -896s-896 401 -896 896s401 896 896 896s896 -401 896 -896z" /> + <glyph glyph-name="long-arrow-down" unicode="" horiz-adv-x="767" +d="M765 237c5 -12 3 -25 -5 -35l-350 -384c-6 -6 -14 -10 -23 -10s-18 4 -24 10l-355 384c-8 10 -10 23 -5 35c5 11 16 19 29 19h224v1248c0 18 14 32 32 32h192c18 0 32 -14 32 -32v-1248h224c13 0 24 -7 29 -19z" /> + <glyph glyph-name="beer" unicode="" horiz-adv-x="1600" +d="M576 640v384h-256v-256c0 -71 57 -128 128 -128h128zM1600 192v-192h-1152v192l128 192h-128c-212 0 -384 172 -384 384v320l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z" /> + <glyph glyph-name="th-list" unicode="" horiz-adv-x="1792" +d="M512 288v-192c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96zM512 800v-192c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96zM1792 288v-192c0 -53 -43 -96 -96 -96h-960 +c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h960c53 0 96 -43 96 -96zM512 1312v-192c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96zM1792 800v-192c0 -53 -43 -96 -96 -96h-960c-53 0 -96 43 -96 96v192c0 53 43 96 96 96 +h960c53 0 96 -43 96 -96zM1792 1312v-192c0 -53 -43 -96 -96 -96h-960c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h960c53 0 96 -43 96 -96z" /> + <glyph glyph-name="eraser" unicode="" horiz-adv-x="1920" +d="M896 128l336 384h-768l-336 -384h768zM1909 1205c20 -46 12 -99 -21 -137l-896 -1024c-24 -28 -59 -44 -96 -44h-768c-50 0 -96 29 -117 75c-20 46 -12 99 21 137l896 1024c24 28 59 44 96 44h768c50 0 96 -29 117 -75z" /> + <glyph glyph-name="codepen" unicode="" horiz-adv-x="1792" +d="M216 367l603 -402v359l-334 223zM154 511l193 129l-193 129v-258zM973 -35l603 402l-269 180l-334 -223v-359zM896 458l272 182l-272 182l-272 -182zM485 733l334 223v359l-603 -402zM1445 640l193 -129v258zM1307 733l269 180l-603 402v-359zM1792 913v-546 +c0 -25 -13 -50 -34 -64l-819 -546c-13 -8 -28 -13 -43 -13s-30 5 -43 13l-819 546c-21 14 -34 39 -34 64v546c0 25 13 50 34 64l819 546c13 8 28 13 43 13s30 -5 43 -13l819 -546c21 -14 34 -39 34 -64z" /> + <glyph glyph-name="slideshare" unicode="" horiz-adv-x="1758" +d="M856 796c0 -111 -97 -202 -216 -202s-216 91 -216 202c0 112 97 202 216 202s216 -90 216 -202zM1358 796c0 -111 -96 -202 -216 -202c-119 0 -216 91 -216 202c0 112 97 202 216 202c120 0 216 -90 216 -202zM1583 616v667c0 115 -37 160 -143 160h-1112 +c-111 0 -142 -38 -142 -160v-673c237 -124 440 -102 551 -98c47 1 77 -8 95 -27c3 -3 6 -6 10 -9c21 -20 41 -36 61 -51c4 55 35 90 118 87c113 -5 321 -27 562 104zM1746 621c-64 -79 -186 -176 -372 -252c197 -671 -481 -778 -470 -434c0 -6 -1 185 -1 327 +c-15 3 -30 7 -48 11c0 -143 -1 -344 -1 -338c11 -344 -667 -237 -470 434c-186 76 -308 173 -372 252c-32 48 3 99 56 62c7 -5 15 -10 22 -15v694c0 96 72 174 161 174h1257c89 0 161 -78 161 -174v-694l21 15c53 37 88 -14 56 -62z" /> + <glyph glyph-name="square-o" unicode="" horiz-adv-x="1408" +d="M1120 1280h-832c-88 0 -160 -72 -160 -160v-832c0 -88 72 -160 160 -160h832c88 0 160 72 160 160v832c0 88 -72 160 -160 160zM1408 1120v-832c0 -159 -129 -288 -288 -288h-832c-159 0 -288 129 -288 288v832c0 159 129 288 288 288h832c159 0 288 -129 288 -288z" /> + <glyph glyph-name="hourglass-start" unicode="" +d="M1408 1408c0 -370 -177 -638 -373 -768c196 -130 373 -398 373 -768h96c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-1472c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h96c0 370 177 638 373 768c-196 130 -373 398 -373 768h-96c-18 0 -32 14 -32 32v64 +c0 18 14 32 32 32h1472c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-96zM1280 1408h-1024c0 -44 3 -87 9 -128h1006c6 41 9 84 9 128zM1280 -128c0 359 -198 624 -397 704h-230c-199 -80 -397 -345 -397 -704h1024z" /> + <glyph glyph-name="superpowers" unicode="" horiz-adv-x="1792" +d="M1473 607c18 320 -227 585 -544 604c-315 19 -594 -221 -612 -538c-18 -320 227 -585 545 -604c315 -19 594 220 611 538zM1792 1536l-349 -348c159 -155 245 -371 231 -593c-22 -372 -308 -669 -675 -719l-999 -132l347 347c-159 155 -244 371 -231 593 +c23 373 308 670 676 720c333 44 667 88 1000 132z" /> + <glyph glyph-name="fire" unicode="" horiz-adv-x="1408" +d="M1408 -160v-64c0 -17 -15 -32 -32 -32h-1344c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h1344c17 0 32 -15 32 -32zM1152 896c0 -383 -448 -417 -448 -672c0 -70 35 -163 67 -224l-4 1l1 -1c-276 127 -512 302 -512 640c0 383 448 417 448 672c0 70 -35 163 -66 224l3 -1 +l-1 1c276 -127 512 -302 512 -640z" /> + <glyph glyph-name="sellsy" unicode="" horiz-adv-x="2048" +d="M1500 165v733c0 28 -23 51 -50 51h-93c-27 0 -50 -23 -50 -51v-733c0 -27 23 -50 50 -50h93c27 0 50 23 50 50zM1216 165v531c0 27 -23 50 -50 50h-101c-27 0 -50 -23 -50 -50v-531c0 -27 23 -50 50 -50h101c27 0 50 23 50 50zM924 165v429c0 27 -23 50 -50 50h-101 +c-27 0 -50 -23 -50 -50v-429c0 -27 23 -50 50 -50h101c27 0 50 23 50 50zM632 165v362c0 27 -23 50 -50 50h-101c-27 0 -50 -23 -50 -50v-362c0 -27 23 -50 50 -50h101c27 0 50 23 50 50zM2048 311c0 -222 -181 -402 -402 -402h-1244c-221 0 -402 180 -402 402 +c0 155 91 297 231 363c-7 24 -10 49 -10 73c0 151 123 274 274 274c66 0 130 -24 180 -67c60 244 280 417 532 417c302 0 548 -246 548 -548c0 -41 -4 -82 -14 -122c180 -44 307 -206 307 -390z" /> + <glyph glyph-name="fast-forward" unicode="" horiz-adv-x="1792" +d="M45 -115c-25 -25 -45 -16 -45 19v1472c0 35 20 44 45 19l710 -710c6 -6 10 -12 13 -19v710c0 35 20 44 45 19l710 -710c6 -6 10 -12 13 -19v678c0 35 29 64 64 64h128c35 0 64 -29 64 -64v-1408c0 -35 -29 -64 -64 -64h-128c-35 0 -64 29 -64 64v678 +c-3 -7 -7 -13 -13 -19l-710 -710c-25 -25 -45 -16 -45 19v710c-3 -7 -7 -13 -13 -19z" /> + <glyph glyph-name="bell-slash" unicode="" horiz-adv-x="2019" +d="M1544 684c51 -298 182 -458 298 -556c0 -70 -58 -128 -128 -128h-448c0 -141 -115 -256 -256 -256s-255 114 -256 255zM1010 -176c9 0 16 7 16 16s-7 16 -16 16c-79 0 -144 65 -144 144c0 9 -7 16 -16 16s-16 -7 -16 -16c0 -97 79 -176 176 -176zM2012 1424 +c11 -14 10 -34 -3 -46l-1872 -1622c-13 -11 -34 -10 -45 4l-84 96c-11 14 -10 34 3 45l186 161c-12 20 -19 42 -19 66c148 125 320 349 320 832c0 192 159 402 424 441c-5 12 -8 25 -8 39c0 53 43 96 96 96s96 -43 96 -96c0 -14 -3 -27 -8 -39c172 -25 299 -122 367 -240 +l418 363c13 11 34 10 45 -4z" /> + <glyph glyph-name="cubes" unicode="" horiz-adv-x="2176" +d="M640 -96l384 192v314l-384 -164v-342zM576 358l404 173l-404 173l-404 -173zM1664 -96l384 192v314l-384 -164v-342zM1600 358l404 173l-404 173l-404 -173zM1152 651l384 165v266l-384 -164v-267zM1088 1030l441 189l-441 189l-441 -189zM2176 512v-416 +c0 -48 -27 -93 -71 -114l-448 -224c-18 -10 -37 -14 -57 -14s-39 4 -57 14l-448 224c-3 1 -5 2 -7 4c-2 -2 -4 -3 -7 -4l-448 -224c-18 -10 -37 -14 -57 -14s-39 4 -57 14l-448 224c-44 21 -71 66 -71 114v416c0 51 31 97 78 118l434 186v400c0 51 31 97 78 118l448 192 +c16 7 33 10 50 10s34 -3 50 -10l448 -192c47 -21 78 -67 78 -118v-400l434 -186c48 -21 78 -67 78 -118z" /> + <glyph glyph-name="inr" unicode="" horiz-adv-x="898" +d="M898 1066v-102c0 -18 -14 -32 -32 -32h-168c-31 -192 -178 -317 -405 -344c149 -159 308 -351 459 -536c8 -9 10 -23 4 -34c-5 -11 -16 -18 -29 -18h-195c-10 0 -19 4 -25 12c-161 193 -309 370 -498 571c-6 6 -9 14 -9 22v127c0 17 14 32 32 32h112 +c176 0 286 59 315 168h-427c-18 0 -32 14 -32 32v102c0 18 14 32 32 32h413c-38 75 -128 113 -268 113h-145c-18 0 -32 15 -32 32v133c0 18 14 32 32 32h832c18 0 32 -14 32 -32v-102c0 -18 -14 -32 -32 -32h-233c32 -41 53 -89 64 -144h171c18 0 32 -14 32 -32z" /> + <glyph glyph-name="hashtag" unicode="" horiz-adv-x="1728" +d="M959 512l64 256h-254l-64 -256h254zM1727 1016l-56 -224c-4 -14 -16 -24 -31 -24h-327l-64 -256h311c10 0 19 -5 25 -12c6 -8 9 -18 6 -28l-56 -224c-3 -14 -16 -24 -31 -24h-327l-81 -328c-4 -14 -17 -24 -31 -24h-224c-10 0 -20 5 -26 12c-6 8 -8 18 -6 28l78 312h-254 +l-81 -328c-4 -14 -17 -24 -31 -24h-225c-9 0 -19 5 -25 12c-6 8 -8 18 -6 28l78 312h-311c-10 0 -19 5 -25 12c-6 8 -8 18 -6 28l56 224c4 14 16 24 31 24h327l64 256h-311c-10 0 -19 5 -25 12c-6 8 -9 18 -6 28l56 224c3 14 16 24 31 24h327l81 328c4 14 17 24 32 24h224 +c9 0 19 -5 25 -12c6 -8 8 -18 6 -28l-78 -312h254l81 328c4 14 17 24 32 24h224c9 0 19 -5 25 -12c6 -8 8 -18 6 -28l-78 -312h311c10 0 19 -5 25 -12c6 -8 8 -18 6 -28z" /> + <glyph glyph-name="file-text-o" unicode="" +d="M1468 1156c37 -37 68 -111 68 -164v-1152c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h896c53 0 127 -31 164 -68zM1024 1400v-376h376c-6 17 -15 34 -22 41l-313 313c-7 7 -24 16 -41 22zM1408 -128v1024h-416c-53 0 -96 43 -96 96v416 +h-768v-1536h1280zM384 736c0 18 14 32 32 32h704c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-704c-18 0 -32 14 -32 32v64zM1120 512c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-704c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h704zM1120 256c18 0 32 -14 32 -32 +v-64c0 -18 -14 -32 -32 -32h-704c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h704z" /> + <glyph glyph-name="nextcloud" unicode="" horiz-adv-x="1792" +d="M896 1049c225 0 409 -184 409 -409s-184 -409 -409 -409s-409 184 -409 409s184 409 409 409zM896 891c-139 0 -251 -112 -251 -251s112 -251 251 -251s251 112 251 251s-112 251 -251 251zM265 905c146 0 265 -119 265 -265s-119 -265 -265 -265s-265 119 -265 265 +s119 265 265 265zM265 748c-60 0 -107 -48 -107 -108s47 -108 107 -108s108 48 108 108s-48 108 -108 108zM1527 905c146 0 265 -119 265 -265s-119 -265 -265 -265s-265 119 -265 265s119 265 265 265zM1527 748c-60 0 -108 -48 -108 -108s48 -108 108 -108s107 48 107 108 +s-47 108 -107 108z" /> + <glyph glyph-name="hand-o-left" unicode="" horiz-adv-x="1792" +d="M1376 128h32v640h-32c-106 0 -177 90 -241 163c-41 46 -79 92 -112 145c-14 22 -26 45 -38 68s-62 136 -89 136c-85 0 -160 -32 -160 -128c0 -128 96 -193 96 -256h-576c-67 0 -128 -60 -128 -128c0 -69 59 -128 128 -128h331c-21 -24 -35 -71 -35 -103 +c0 -47 19 -87 53 -119c-12 -21 -18 -45 -18 -69c0 -46 23 -103 65 -126c-3 -18 -4 -37 -4 -56c0 -118 73 -167 184 -167c199 0 369 128 544 128zM1664 192c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1792 768v-640c0 -71 -57 -128 -128 -128h-288 +c-63 0 -162 -37 -223 -59c-102 -37 -207 -69 -317 -69c-184 0 -318 104 -317 295l1 5c-40 50 -61 114 -61 178c0 14 1 29 3 43c-21 37 -34 77 -37 119h-169c-140 0 -256 117 -256 257c0 138 118 255 256 255h374c-15 41 -22 84 -22 128c0 169 129 256 288 256 +c134 0 177 -171 235 -264c30 -47 64 -88 100 -129c29 -33 97 -119 145 -119h288c71 0 128 -57 128 -128z" /> + <glyph glyph-name="vimeo" unicode="" horiz-adv-x="1628" +d="M1627 1018c-7 -158 -118 -375 -332 -651c-222 -287 -408 -431 -562 -431c-95 0 -175 88 -240 263c-44 160 -88 321 -132 482c-48 175 -101 262 -157 262c-12 0 -54 -25 -127 -76l-77 98c80 71 159 143 238 212c106 94 187 141 241 146c127 12 204 -74 234 -259 +c31 -200 54 -325 66 -373c37 -166 76 -249 120 -249c34 0 85 53 154 161c68 108 104 190 109 246c9 93 -27 139 -109 139c-39 0 -79 -9 -121 -26c80 262 233 389 459 382c167 -5 246 -114 236 -326z" /> + <glyph glyph-name="mastodon-alt" unicode="" +d="M766 1408h5c211 -2 413 -25 531 -79c0 0 234 -105 234 -462c0 0 3 -263 -33 -446c-23 -116 -202 -243 -408 -268c-108 -13 -214 -25 -327 -20c-185 8 -330 45 -330 45c0 -18 1 -36 3 -52c24 -182 181 -193 329 -198c150 -5 284 37 284 37l6 -135s-105 -57 -292 -67 +c-103 -6 -230 3 -379 42c-323 85 -380 430 -388 779c-3 104 -1 201 -1 283c0 357 235 462 235 462c118 54 320 77 531 79v0zM350 839c-64 0 -115 -52 -115 -116s51 -115 115 -115s116 51 116 115s-52 116 -116 116v0zM768 839c-64 0 -116 -52 -116 -116s52 -115 116 -115 +s116 51 116 115s-52 116 -116 116v0zM1186 839c-64 0 -116 -52 -116 -116s52 -115 116 -115s115 51 115 115s-51 116 -115 116v0z" /> + <glyph glyph-name="strikethrough" unicode="" horiz-adv-x="1792" +d="M1760 640c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-1728c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h1728zM483 704c-19 24 -36 51 -51 80c-32 65 -48 128 -48 188c0 122 45 224 134 309s220 127 393 127c38 0 93 -7 167 -19c44 -8 103 -24 177 -48 +c7 -26 14 -66 21 -118c9 -79 14 -140 14 -183c0 -14 -2 -29 -5 -45l-12 -3l-84 6l-14 2c-34 101 -69 169 -103 205c-59 61 -130 91 -210 91c-76 0 -137 -20 -182 -59s-67 -88 -67 -146c0 -49 22 -95 66 -140s137 -88 279 -129c48 -14 105 -36 173 -66c36 -17 68 -34 95 -52 +h-743zM990 448h411c5 -28 7 -59 7 -92c0 -72 -13 -143 -41 -212c-15 -37 -38 -71 -71 -104c-24 -23 -60 -50 -109 -81c-50 -30 -100 -53 -153 -66c-53 -14 -120 -21 -203 -21c-55 0 -121 2 -195 23l-140 40c-39 11 -62 20 -72 28c-4 4 -8 11 -8 22v13c0 8 2 60 -2 156 +c-2 50 2 85 2 105v44l102 2c37 -85 54 -136 65 -154c24 -39 51 -70 80 -94s64 -43 105 -57c40 -15 85 -22 132 -22c42 0 89 9 139 27c51 17 92 46 122 86c31 40 47 83 47 129c0 56 -27 108 -81 157c-22 19 -68 43 -137 71z" /> + <glyph glyph-name="ravelry" unicode="" horiz-adv-x="2080" +d="M1095 -197c-4 1 -7 2 -11 4c0 0 -329 193 -440 505c-37 6 -115 24 -175 37c87 -283 329 -499 626 -546zM454 409l168 -28c-57 171 -64 366 -64 366c-67 -65 -103 -154 -121 -224c3 -39 8 -77 17 -114zM564 1018c-31 -46 -56 -96 -77 -148c33 35 60 58 74 68 +c-2 30 3 80 3 80zM2001 584c0 436 -352 790 -784 790c-200 0 -382 -76 -521 -201c-21 -41 -35 -93 -45 -160c213 181 593 136 593 136c95 -4 84 -88 83 -114c-346 29 -516 -70 -684 -213c0 0 33 -320 109 -450c438 -20 771 218 771 218c42 30 79 33 87 -19 +c6 -42 9 -99 -39 -121c-146 -68 -307 -111 -467 -134c-104 -15 -162 -19 -317 -16c148 -344 518 -438 518 -438c116 -19 204 -4 263 15c256 130 433 398 433 707zM2075 621c-7 -68 -18 -147 -40 -212c-90 -267 -215 -441 -500 -600c-26 -18 -54 -35 -82 -44 +c-51 -18 -106 -22 -163 -16c-24 -2 -48 -3 -73 -3c-381 0 -703 260 -800 615c-3 0 -6 1 -9 1c-23 -180 110 -423 110 -423s8 -12 54 -82c-255 135 -262 533 -262 533c-61 23 -273 95 -310 154c0 0 166 -91 309 -109c-1 1 2 32 2 32c9 122 51 217 94 290 +c28 137 90 261 176 365c15 62 39 136 81 214c18 34 35 56 81 77c304 142 604 178 912 18c295 -154 455 -476 420 -810z" /> + <glyph glyph-name="code-fork" unicode="" horiz-adv-x="1024" +d="M288 64c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96s96 43 96 96zM288 1216c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96s96 43 96 96zM928 1088c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96s96 43 96 96zM1024 1088c0 -71 -39 -133 -96 -166 +c-3 -361 -259 -441 -429 -495c-159 -50 -211 -74 -211 -171v-26c57 -33 96 -95 96 -166c0 -106 -86 -192 -192 -192s-192 86 -192 192c0 71 39 133 96 166v820c-57 33 -96 95 -96 166c0 106 86 192 192 192s192 -86 192 -192c0 -71 -39 -133 -96 -166v-497 +c51 25 105 42 154 57c186 59 292 103 294 312c-57 33 -96 95 -96 166c0 106 86 192 192 192s192 -86 192 -192z" /> + <glyph glyph-name="hand-o-right" unicode="" horiz-adv-x="1792" +d="M256 192c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1664 768c0 68 -61 128 -128 128h-576c0 63 96 128 96 256c0 96 -75 128 -160 128c-28 0 -79 -116 -90 -139c-12 -22 -24 -44 -37 -65c-33 -53 -71 -99 -112 -145c-64 -73 -135 -163 -241 -163 +h-32v-640h32c175 0 346 -128 540 -128c112 0 189 47 189 167c0 19 -2 38 -5 56c42 23 65 80 65 126c0 24 -6 48 -18 69c34 32 53 72 53 119c0 32 -14 79 -35 103h331c69 0 128 59 128 128zM1792 769c0 -140 -116 -257 -256 -257h-169c-3 -42 -16 -82 -37 -119 +c2 -14 3 -29 3 -43c0 -64 -21 -128 -60 -178c2 -189 -127 -300 -312 -300c-112 0 -218 31 -322 69c-61 22 -160 59 -223 59h-288c-71 0 -128 57 -128 128v640c0 71 57 128 128 128h288c48 0 116 86 145 119c36 41 70 82 100 129c58 93 101 264 235 264 +c159 0 288 -87 288 -256c0 -44 -7 -87 -22 -128h374c138 0 256 -117 256 -255z" /> + <glyph glyph-name="object-group" unicode="" horiz-adv-x="2048" +d="M2048 1152h-128v-1024h128v-384h-384v128h-1280v-128h-384v384h128v1024h-128v384h384v-128h1280v128h384v-384zM1792 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 -128v128h-128v-128h128zM1664 0v128h128v1024h-128v128h-1280v-128h-128v-1024h128v-128 +h1280zM1920 -128v128h-128v-128h128zM1280 896h384v-768h-896v256h-384v768h896v-256zM512 512h640v512h-640v-512zM1536 256v512h-256v-384h-384v-128h640z" /> + <glyph glyph-name="wikidata" unicode="" horiz-adv-x="2048" +d="M0 1264h76v-1264h-76v1264zM152 1264h227v-1264h-227v1264zM455 1264h228v-1264h-228v1264zM759 1264h75v-1264h-75v1264zM910 1264h76v-1264h-76v1264zM1820 1264h76v-1264h-76v1264zM1972 1264h76v-1264h-76v1264zM1062 1264h227v-1264h-227v1264zM1365 1264h76v-1264 +h-76v1264zM1517 1264h228v-1264h-228v1264z" /> + <glyph glyph-name="anchor" unicode="" horiz-adv-x="1792" +d="M960 1280c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1792 352v-352c0 -13 -8 -25 -20 -30c-4 -1 -8 -2 -12 -2c-8 0 -16 3 -23 9l-93 93c-157 -189 -439 -310 -748 -310s-591 121 -748 310l-93 -93c-6 -6 -15 -9 -23 -9c-4 0 -8 1 -12 2 +c-12 5 -20 17 -20 30v352c0 18 14 32 32 32h352c13 0 25 -8 30 -20s2 -25 -7 -35l-100 -100c90 -121 263 -209 461 -236v647h-192c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h192v163c-76 44 -128 126 -128 221c0 141 115 256 256 256s256 -115 256 -256 +c0 -95 -52 -177 -128 -221v-163h192c35 0 64 -29 64 -64v-128c0 -35 -29 -64 -64 -64h-192v-647c198 27 371 115 461 236l-100 100c-9 10 -12 23 -7 35s17 20 30 20h352c18 0 32 -14 32 -32z" /> + <glyph glyph-name="meh-o" unicode="" +d="M1152 448c0 -35 -29 -64 -64 -64h-640c-35 0 -64 29 -64 64s29 64 64 64h640c35 0 64 -29 64 -64zM640 896c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128s128 -57 128 -128zM1152 896c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128 +s128 -57 128 -128zM1408 640c0 353 -287 640 -640 640s-640 -287 -640 -640s287 -640 640 -640s640 287 640 640zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" /> + <glyph glyph-name="file-image-o" unicode="" +d="M1468 1156c37 -37 68 -111 68 -164v-1152c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h896c53 0 127 -31 164 -68zM1024 1400v-376h376c-6 17 -15 34 -22 41l-313 313c-7 7 -24 16 -41 22zM1408 -128v1024h-416c-53 0 -96 43 -96 96v416 +h-768v-1536h1280zM1280 320v-320h-1024v192l192 192l128 -128l384 384zM448 512c-106 0 -192 86 -192 192s86 192 192 192s192 -86 192 -192s-86 -192 -192 -192z" /> + <glyph glyph-name="liberapay" unicode="" horiz-adv-x="1191" +d="M468 1404v0l-222 -918c-4 -19 -6 -37 -7 -53s3 -30 9 -42s18 -23 33 -30s36 -12 64 -14l-48 -196c-75 0 -134 9 -177 29s-74 47 -93 81s-28 73 -27 117s6 91 18 141l203 847zM849 1025v0c60 0 111 -9 154 -27s78 -44 106 -75s49 -68 62 -110s20 -86 20 -134h-1 +c0 -78 -12 -149 -38 -213s-61 -120 -106 -167s-99 -83 -162 -109s-133 -39 -207 -39c-36 0 -72 3 -108 9l-72 -288h-236l265 1103c42 13 91 24 146 34s113 16 177 16zM819 825v0c-34 0 -66 -3 -96 -9l-111 -464c18 -4 40 -7 67 -7c41 0 79 8 113 23s63 37 87 65 +s43 61 56 100s20 81 20 128c0 46 -11 84 -31 116s-55 48 -105 48z" /> + <glyph glyph-name="nodejs" unicode="" +d="M768 -225c-24 0 -46 6 -67 17l-211 126c-32 17 -17 24 -7 27c43 14 51 18 96 43c5 3 11 1 16 -2l162 -97c6 -3 14 -3 19 0l634 367c6 3 10 10 10 18v733c0 8 -4 14 -10 17l-634 366c-6 3 -14 3 -19 0l-635 -366c-6 -3 -9 -11 -9 -17v-733c0 -6 3 -15 9 -18l174 -100 +c94 -48 152 8 152 64v723c0 10 8 19 19 19h82c10 0 19 -8 19 -19v-723c0 -126 -69 -199 -188 -199c-37 0 -65 0 -146 40l-167 95c-41 24 -67 68 -67 116v733c0 48 26 92 67 116l634 368c40 22 94 22 134 0l634 -368c41 -24 67 -68 67 -116v-733c0 -48 -26 -92 -67 -116 +l-634 -367c-21 -10 -45 -14 -67 -14zM964 279c-278 0 -336 127 -336 235c0 10 8 19 19 19h83c10 0 17 -6 17 -16c13 -84 49 -125 218 -125c134 0 191 29 191 101c0 41 -16 72 -224 93c-173 17 -282 56 -282 194c0 129 109 205 290 205c204 0 303 -70 316 -223 +c0 -5 -2 -9 -5 -14c-3 -3 -7 -7 -12 -7h-83c-8 0 -16 7 -18 15c-19 87 -68 116 -198 116c-146 0 -164 -51 -164 -89c0 -46 21 -61 218 -86c196 -25 288 -62 288 -199c-2 -140 -116 -219 -318 -219z" /> + <glyph glyph-name="calculator" unicode="" horiz-adv-x="1664" +d="M384 0c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM768 0c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM384 384c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1152 0 +c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM768 384c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM384 768c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1152 384 +c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM768 768c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1536 0v384c0 70 -58 128 -128 128s-128 -58 -128 -128v-384c0 -70 58 -128 128 -128s128 58 128 128z +M1152 768c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1536 1088v256c0 35 -29 64 -64 64h-1280c-35 0 -64 -29 -64 -64v-256c0 -35 29 -64 64 -64h1280c35 0 64 29 64 64zM1536 768c0 71 -57 128 -128 128s-128 -57 -128 -128 +s57 -128 128 -128s128 57 128 128zM1664 1408v-1536c0 -70 -58 -128 -128 -128h-1408c-70 0 -128 58 -128 128v1536c0 70 58 128 128 128h1408c70 0 128 -58 128 -128z" /> + <glyph glyph-name="vk" unicode="" horiz-adv-x="1921" +d="M1918 1016c15 -41 -32 -137 -150 -294c-194 -258 -215 -234 -55 -383c154 -143 186 -212 191 -221c0 0 64 -112 -71 -113l-256 -4c-55 -11 -128 39 -128 39c-96 66 -186 237 -256 215c0 0 -72 -23 -70 -177c1 -33 -15 -51 -15 -51s-18 -19 -53 -22h-115 +c-253 -16 -476 217 -476 217s-244 252 -458 755c-14 33 1 49 1 49s15 19 57 19l274 2c26 -4 44 -18 44 -18s16 -11 24 -32c45 -112 103 -214 103 -214c100 -206 168 -241 207 -220c0 0 51 31 40 280c-4 90 -29 131 -29 131c-23 31 -66 40 -85 43c-15 2 10 38 43 54 +c49 24 136 25 239 24c81 -1 104 -6 135 -13c95 -23 63 -111 63 -323c0 -68 -13 -163 36 -194c21 -14 73 -2 201 216c0 0 60 104 107 225c8 22 25 31 25 31s16 9 38 6l288 2c87 11 101 -29 101 -29z" /> + <glyph glyph-name="odnoklassniki" unicode="" horiz-adv-x="1078" +d="M539 629c-250 0 -454 203 -454 453c0 251 204 454 454 454s454 -203 454 -454c0 -250 -204 -453 -454 -453zM539 1306c-123 0 -223 -100 -223 -224c0 -123 100 -223 223 -223s223 100 223 223c0 124 -100 224 -223 224zM1062 574c44 -90 -6 -133 -120 -207 +c-96 -61 -228 -85 -315 -94l73 -72l267 -267c40 -41 40 -107 0 -147l-12 -13c-41 -40 -107 -40 -148 0c-67 68 -165 166 -267 268l-267 -268c-41 -40 -107 -40 -147 0l-12 13c-41 40 -41 106 0 147c68 68 165 166 267 267l72 72c-86 9 -220 32 -317 94 +c-114 74 -164 117 -120 207c26 51 97 94 191 20c0 0 127 -101 332 -101s332 101 332 101c94 74 165 31 191 -20z" /> + <glyph glyph-name="linkedin" unicode="" +d="M349 911v-991h-330v991h330zM370 1217c1 -95 -71 -171 -186 -171h-2c-111 0 -182 76 -182 171c0 97 74 171 186 171c113 0 183 -74 184 -171zM1536 488v-568h-329v530c0 133 -48 224 -167 224c-91 0 -145 -61 -169 -120c-8 -22 -11 -51 -11 -81v-553h-329 +c4 898 0 991 0 991h329v-144h-2c43 68 121 167 299 167c217 0 379 -142 379 -446z" /> + <glyph glyph-name="jpy" unicode="" horiz-adv-x="1026" +d="M603 0h-172c-18 0 -32 14 -32 32v330h-288c-18 0 -32 14 -32 32v103c0 18 14 32 32 32h288v85h-288c-18 0 -32 14 -32 32v104c0 17 14 32 32 32h214l-321 578c-5 10 -5 22 0 32c6 10 17 16 28 16h194c12 0 23 -7 29 -18l215 -425c24 -47 40 -87 56 -125 +c17 43 39 85 58 129l191 420c5 12 17 19 29 19h191c11 0 21 -6 27 -16c6 -9 6 -21 1 -31l-313 -579h215c18 0 32 -15 32 -32v-104c0 -18 -14 -32 -32 -32h-290v-85h290c18 0 32 -14 32 -32v-103c0 -18 -14 -32 -32 -32h-290v-330c0 -18 -15 -32 -32 -32z" /> + <glyph glyph-name="skype" unicode="" +d="M1173 473c0 174 -169 234 -311 266l-104 24c-76 18 -133 31 -133 89c0 53 56 77 144 77c157 0 160 -115 257 -115c65 0 104 51 104 109c0 115 -191 190 -380 190c-173 0 -374 -75 -374 -278c0 -168 112 -228 258 -263l146 -36c89 -22 144 -32 144 -96 +c0 -51 -57 -90 -145 -90c-185 0 -195 154 -302 154c-70 0 -101 -50 -101 -105c0 -123 188 -223 413 -223c188 0 384 94 384 297zM1536 256c0 -212 -172 -384 -384 -384c-88 0 -169 30 -234 80c-48 -10 -99 -16 -150 -16c-389 0 -704 315 -704 704c0 51 6 102 16 150 +c-50 65 -80 146 -80 234c0 212 172 384 384 384c88 0 169 -30 234 -80c48 10 99 16 150 16c389 0 704 -315 704 -704c0 -51 -6 -102 -16 -150c50 -65 80 -146 80 -234z" /> + <glyph glyph-name="envelope-square" unicode="" +d="M1248 1408c159 0 288 -129 288 -288v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960zM1280 352v436c-19 -21 -40 -40 -64 -55c-94 -62 -191 -120 -284 -184c-47 -33 -105 -69 -164 -69s-117 36 -164 69 +c-93 64 -191 121 -284 185c-23 15 -41 37 -64 54v-436c0 -53 43 -96 96 -96h832c53 0 96 43 96 96zM1280 925c0 54 -40 99 -96 99h-832c-53 0 -96 -43 -96 -96c0 -54 56 -113 98 -141c88 -59 179 -114 267 -172c38 -25 101 -71 147 -71s109 46 147 71c89 58 178 115 267 174 +c39 26 98 86 98 136z" /> + <glyph glyph-name="question-circle-o" unicode="" +d="M880 336v-160c0 -18 -14 -32 -32 -32h-160c-18 0 -32 14 -32 32v160c0 18 14 32 32 32h160c18 0 32 -14 32 -32zM1136 832c0 -142 -99 -198 -172 -239c-52 -30 -84 -49 -84 -81v-32c0 -18 -14 -32 -32 -32h-160c-18 0 -32 14 -32 32v68c0 123 88 162 159 194 +c60 28 97 47 97 92c0 58 -73 101 -139 101c-35 0 -72 -11 -95 -27c-22 -15 -43 -37 -80 -83c-6 -8 -15 -12 -25 -12c-7 0 -14 2 -19 6l-108 82c-13 10 -16 29 -7 43c82 129 197 192 349 192c164 0 348 -130 348 -304zM768 1280c-353 0 -640 -287 -640 -640 +s287 -640 640 -640s640 287 640 640s-287 640 -640 640zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" /> + <glyph glyph-name="ship" unicode="" horiz-adv-x="2010" +d="M1792 -19c25 25 65 25 90 0l128 -128l-90 -90l-83 83l-83 -83c-12 -13 -29 -19 -45 -19s-33 6 -45 19l-83 83l-83 -83c-25 -25 -65 -25 -90 0l-83 83l-83 -83c-25 -25 -65 -25 -90 0l-83 83l-83 -83c-25 -25 -65 -25 -90 0l-83 83l-83 -83c-25 -25 -65 -25 -90 0l-83 83 +l-83 -83c-25 -25 -65 -25 -90 0l-83 83l-83 -83c-25 -25 -65 -25 -90 0l-128 128l90 90l83 -83l83 83c25 25 65 25 90 0l83 -83l83 83c25 25 65 25 90 0l83 -83l83 83c25 25 65 25 90 0l83 -83l83 83c25 25 65 25 90 0l83 -83l83 83c25 25 65 25 90 0l83 -83l83 83 +c25 25 65 25 90 0l83 -83zM218 19c-25 -25 -65 -25 -90 0l-128 128l90 90l83 -82l83 82c25 25 65 25 90 0l83 -82l64 64v293l-210 314c-23 35 -7 83 33 97l177 58v299h128v128h256v128h256v-128h256v-128h128v-299l177 -58c40 -14 56 -62 33 -97l-210 -314v-293l19 18 +c25 25 65 25 90 0l83 -82l83 82c25 25 65 25 90 0l128 -128l-90 -90l-83 83l-83 -83c-12 -13 -29 -19 -45 -19s-33 6 -45 19l-83 83l-83 -83c-25 -25 -65 -25 -90 0l-83 83l-83 -83c-25 -25 -65 -25 -90 0l-83 83l-83 -83c-25 -25 -65 -25 -90 0l-83 83l-83 -83 +c-25 -25 -65 -25 -90 0l-83 83l-83 -83c-25 -25 -65 -25 -90 0l-83 83zM621 1152v-128l384 128l384 -128v128h-128v128h-512v-128h-128z" /> + <glyph glyph-name="gimp" unicode="" horiz-adv-x="1792" +d="M1760 1453c243 -1827 -975 -1550 -1432 -1186c28 4 55 13 78 30c50 38 74 102 73 173s-25 150 -73 220c-6 9 -13 17 -20 25l26 588s159 -366 481 -358c674 18 794 417 867 508zM612 937c-97 0 -177 -85 -177 -193s80 -194 177 -194c16 0 31 4 46 8 +c-67 3 -122 62 -122 133v0c0 73 57 133 127 133v0c56 0 112 -47 124 -104c1 8 2 16 2 24c0 108 -80 193 -177 193zM1031 928v0c-119 0 -216 -102 -216 -228s97 -227 216 -227c45 0 87 14 122 39c-17 -8 -47 -15 -66 -15c-90 0 -162 77 -162 171v0c0 94 72 170 162 170 +c75 0 147 -63 160 -141v3c0 126 -97 228 -216 228zM158 822v0c79 -2 166 -58 227 -146c46 -67 70 -141 70 -206s-21 -121 -64 -153s-100 -37 -158 -16s-118 67 -164 134s-69 141 -69 206s21 121 64 153c26 20 58 29 94 28zM1042 804c-42 0 -76 -36 -76 -80v0 +c0 -44 34 -80 76 -80s76 36 76 80v0c0 44 -34 80 -76 80zM615 787c-28 0 -50 -23 -50 -52v0v0c0 -29 22 -53 50 -53s50 24 50 53v0v0c0 29 -22 52 -50 52zM130 770c-47 0 -85 -47 -85 -106v0c0 -59 38 -107 85 -107s84 48 84 107v0c0 59 -37 106 -84 106zM1202 468 +c0 0 44 -38 69 -72c-96 -78 -261 -141 -583 -73c163 -60 300 -88 406 -81c-64 -22 -146 -39 -250 -44c233 -23 407 22 468 117c16 -18 32 -49 47 -89c10 69 36 101 -4 155s-153 87 -153 87z" /> + <glyph glyph-name="dashcube" unicode="" horiz-adv-x="1408" +d="M0 856c0 173 138 322 314 322h742l352 358v-1470c0 -174 -138 -322 -314 -322h-780c-176 0 -314 148 -314 322v790zM1232 102l-176 180v425c0 61 -49 112 -110 112h-484c-61 0 -110 -51 -110 -112v-492c0 -61 49 -113 110 -113h770z" /> + <glyph glyph-name="optin-monster" unicode="" horiz-adv-x="2132" +d="M396 -139c-10 -21 -39 -50 -64 -60c-35 -12 -78 11 -80 35c-2 31 75 87 108 93c32 6 47 -42 36 -68zM1737 -139c-11 26 4 74 35 68c33 -6 111 -62 108 -93c-1 -24 -45 -47 -79 -35c-26 10 -55 39 -64 60zM1785 -30c-21 43 15 121 70 114c58 -6 183 -94 183 -160 +c0 -43 -58 -72 -119 -55c-45 12 -116 65 -134 101zM346 -30c-18 -36 -88 -89 -133 -101c-61 -17 -119 12 -119 55c0 66 125 154 183 160c55 7 91 -71 69 -114zM1076 1094c106 0 192 -80 192 -179s-86 -179 -192 -179s-191 80 -191 179c0 15 2 28 5 42c16 -25 46 -43 80 -43 +c51 0 92 38 92 85c0 37 -26 69 -61 80c23 10 49 15 76 15h-1zM1380 1312c-132 145 -301 177 -466 87c93 208 452 180 466 -87zM2130 73c5 -7 -1 -25 -11 -42c4 -13 7 -26 7 -40c3 -117 -164 -237 -272 -241c-64 -3 -128 31 -158 87c-420 -15 -840 -18 -1259 0 +c-31 -56 -95 -89 -159 -87c-107 4 -274 124 -272 241c1 14 3 27 7 40c-10 17 -16 35 -11 42c4 6 17 6 31 1c12 19 26 35 41 51c-4 17 -4 32 2 38c7 6 23 4 39 -4c17 12 37 24 59 34c0 18 5 32 13 37c12 6 33 2 51 -16c21 3 42 3 61 -2c13 -3 26 -10 38 -19v73 +c-6 0 -11 0 -18 2c-65 12 -136 57 -152 132c-6 25 -6 52 0 81c12 50 55 79 93 95c3 22 30 52 55 59c28 7 46 -17 52 -38h13c18 -2 47 -6 60 -23c2 -2 4 -5 5 -7c20 2 41 5 61 7c-9 7 -19 13 -30 17c-19 33 -51 41 -91 43c0 3 0 6 1 10c-73 2 -163 21 -203 66 +c-46 51 -54 138 -45 204c8 65 35 140 90 179c31 21 80 3 84 -36c2 -17 5 -75 21 -84c18 -9 47 -13 76 -12c30 29 62 54 98 74c-55 5 -107 -6 -162 -14l47 46c46 44 107 82 163 111c87 44 185 77 282 86c-69 29 -148 44 -221 61c283 60 646 82 904 -139 +c67 -57 120 -134 158 -222c41 -5 93 -6 121 9h1c16 9 19 66 21 84c4 38 53 57 84 35c55 -39 82 -114 91 -178c8 -66 1 -153 -46 -204c-40 -45 -127 -65 -199 -67v-10c-41 -1 -75 -9 -95 -43c-11 -4 -21 -10 -31 -17c21 -2 42 -5 62 -7c1 3 3 6 5 8c14 16 43 21 60 23h13 +c6 20 25 44 52 38s52 -37 55 -59c40 -16 82 -45 93 -95c7 -30 6 -56 1 -81c-17 -75 -88 -121 -153 -132c-5 -1 -12 -2 -17 -2c0 -25 0 -49 -1 -73c12 9 24 16 38 19c19 5 40 5 61 2c18 18 40 22 51 16c8 -5 14 -19 14 -37c21 -10 42 -22 59 -34c16 8 31 10 38 4 +c6 -6 7 -21 2 -38c15 -16 30 -33 41 -51c14 5 26 5 31 -1zM1855 1025c0 -23 -5 -43 -9 -54c64 -25 97 -82 112 -132c4 39 -10 146 -51 189c-27 27 -52 19 -52 -3zM1777 925c48 -58 63 -154 47 -233c40 8 76 23 97 45c7 8 14 18 18 28c-4 79 -38 158 -110 181 +c-12 -12 -34 -18 -52 -21zM1740 921c-14 0 -30 0 -44 1c28 -76 46 -158 53 -239c13 0 28 1 43 3c22 90 -1 191 -52 235zM176 839c15 50 48 107 112 132c-4 11 -9 31 -9 54c0 22 -26 30 -52 3c-42 -43 -55 -150 -51 -189zM212 737c21 -23 57 -37 97 -45c-16 79 -1 175 47 233 +c-18 3 -40 9 -52 21c-72 -23 -105 -102 -110 -181c5 -10 11 -20 18 -28zM389 683c9 82 34 162 73 235c-19 -4 -37 -11 -55 -18l-45 -19v1c-27 -52 -37 -127 -20 -196c17 -2 32 -3 47 -3zM1352 644c13 -66 18 -132 28 -198c4 -23 11 -28 33 -17c59 30 84 145 85 211 +c-48 3 -97 3 -146 4zM1070 1285c-155 0 -282 -126 -282 -281c0 -156 127 -282 282 -282s282 126 282 282c0 155 -127 281 -282 281zM1298 646c-70 1 -141 1 -211 0v1c-1 -19 1 -141 16 -152c41 -20 146 -17 189 -4c20 6 9 137 6 155zM1030 447c17 9 9 168 5 199v1 +c-72 -1 -143 -1 -214 -3c-7 -34 -17 -181 7 -191c48 -21 154 -19 202 -6zM636 636c-20 -73 1 -167 82 -203c20 -9 32 -9 36 16c7 32 9 136 18 193c-45 -1 -91 -3 -136 -6zM509 510c2 -18 -14 -29 -34 -36c162 -174 343 -317 577 -394c250 71 428 222 604 396 +c-18 7 -32 19 -30 34c1 4 2 6 3 9v1v-1c-33 3 -66 7 -98 10c-35 -122 -133 -196 -173 -117c-10 19 -13 43 -17 62c-14 -31 -49 -30 -91 -33c-49 -4 -117 -5 -163 11c-11 -48 -41 -48 -99 -53c-52 -5 -180 -15 -203 40c-4 -106 -130 -37 -167 26c-12 21 -20 42 -26 65 +c-29 -3 -58 -6 -87 -10c2 -3 3 -7 4 -10zM425 -118c2 9 3 19 3 30c-21 86 -69 184 -124 200c-83 25 -255 -87 -245 -202c47 -72 148 -132 219 -135c66 -3 133 41 147 107zM428 53c12 -33 24 -77 27 -119c124 72 256 132 392 174c-143 76 -252 177 -360 285 +c-8 -5 -19 -9 -29 -13c-1 -3 -1 -6 -2 -9c17 -10 29 -22 22 -37c-8 -15 -32 -28 -56 -34c-8 -10 -19 -18 -29 -24h-1c-1 -50 -1 -100 1 -150c14 -25 26 -51 35 -73zM497 -113c382 -15 764 -13 1145 0c-136 79 -274 153 -428 196c-51 -23 -103 -42 -156 -57 +c-8 -3 -8 -3 -16 0c-44 14 -86 30 -129 49c-149 -43 -286 -108 -416 -188h-1v-1c1 0 1 0 1 1zM1681 -67c3 42 16 87 28 120c8 22 19 47 33 71l-1 -1c2 51 3 102 3 153c-11 6 -21 15 -30 25c-24 5 -48 19 -56 33c-7 15 5 28 22 38c-1 2 -2 6 -2 9c-11 3 -20 7 -28 12 +c-117 -109 -242 -210 -383 -284c144 -43 281 -104 414 -176zM2073 -90c11 115 -161 227 -245 202c-54 -16 -103 -114 -124 -200c0 -11 1 -21 3 -30c14 -66 81 -110 147 -107c71 3 172 63 219 135z" /> + <glyph glyph-name="paw" unicode="" horiz-adv-x="1664" +d="M780 1064c0 -112 -58 -245 -187 -245c-162 0 -260 204 -260 344c0 112 58 245 187 245c163 0 260 -204 260 -344zM438 581c0 -97 -51 -198 -161 -198c-160 0 -277 196 -277 341c0 97 52 199 161 199c160 0 277 -197 277 -342zM832 608c245 0 576 -353 576 -589 +c0 -127 -104 -147 -206 -147c-134 0 -242 90 -370 90c-134 0 -248 -89 -393 -89c-97 0 -183 33 -183 146c0 237 331 589 576 589zM1071 819c-129 0 -187 133 -187 245c0 140 97 344 260 344c129 0 187 -133 187 -245c0 -140 -98 -344 -260 -344zM1503 923 +c109 0 161 -102 161 -199c0 -145 -117 -341 -277 -341c-110 0 -161 101 -161 198c0 145 117 342 277 342z" /> + <glyph glyph-name="venus-double" unicode="" horiz-adv-x="1792" +d="M1790 1007c25 -317 -207 -586 -510 -619v-260h224c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-224v-224c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v224h-512v-224c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v224h-224c-18 0 -32 14 -32 32v64 +c0 18 14 32 32 32h224v260c-303 33 -535 302 -510 619c22 275 243 500 517 526c140 14 271 -23 377 -94c106 71 237 108 377 94c274 -26 495 -251 517 -526zM896 647c79 81 128 191 128 313s-49 232 -128 313c-79 -81 -128 -191 -128 -313s49 -232 128 -313zM576 512 +c79 0 153 21 218 57c-96 103 -154 240 -154 391s59 288 154 391c-65 36 -139 57 -218 57c-247 0 -448 -201 -448 -448s201 -448 448 -448zM1152 128v260c-94 10 -181 44 -256 94c-75 -50 -162 -84 -256 -94v-260h512zM1216 512c247 0 448 201 448 448s-201 448 -448 448 +c-79 0 -153 -21 -218 -57c95 -103 154 -240 154 -391s-58 -288 -154 -391c65 -36 139 -57 218 -57z" /> + <glyph glyph-name="calendar-times-o" unicode="" horiz-adv-x="1664" +d="M1111 151l-46 -46c-12 -12 -32 -12 -45 0l-188 189l-188 -189c-13 -12 -33 -12 -45 0l-46 46c-12 12 -12 32 0 45l189 188l-189 188c-12 13 -12 33 0 45l46 46c12 12 32 12 45 0l188 -188l188 188c13 12 33 12 45 0l46 -46c12 -12 12 -32 0 -45l-188 -188l188 -188 +c12 -13 12 -33 0 -45zM128 -128h1408v1024h-1408v-1024zM512 1088v288c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-288c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM1280 1088v288c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-288c0 -18 14 -32 32 -32h64 +c18 0 32 14 32 32zM1664 1152v-1280c0 -70 -58 -128 -128 -128h-1408c-70 0 -128 58 -128 128v1280c0 70 58 128 128 128h128v96c0 88 72 160 160 160h64c88 0 160 -72 160 -160v-96h384v96c0 88 72 160 160 160h64c88 0 160 -72 160 -160v-96h128c70 0 128 -58 128 -128z +" /> + <glyph glyph-name="address-book-o" unicode="" horiz-adv-x="1664" +d="M1028 892c0 -143 -117 -259 -260 -259s-260 116 -260 259c0 144 117 260 260 260s260 -116 260 -260zM980 672c191 0 221 -227 221 -374c0 -84 -53 -170 -145 -170h-576c-92 0 -145 86 -145 170c0 141 30 374 216 374h5c66 -39 133 -87 212 -87s146 48 212 87zM1664 928 +c0 -17 -15 -32 -32 -32h-96v-128h96c17 0 32 -15 32 -32v-192c0 -17 -15 -32 -32 -32h-96v-128h96c17 0 32 -15 32 -32v-192c0 -17 -15 -32 -32 -32h-96v-224c0 -88 -72 -160 -160 -160h-1216c-88 0 -160 72 -160 160v1472c0 88 72 160 160 160h1216c88 0 160 -72 160 -160 +v-224h96c17 0 32 -15 32 -32v-192zM1408 -96v1472c0 17 -15 32 -32 32h-1216c-17 0 -32 -15 -32 -32v-1472c0 -17 15 -32 32 -32h1216c17 0 32 15 32 32z" /> + <glyph glyph-name="check" unicode="" horiz-adv-x="1550" +d="M1550 970c0 -25 -10 -50 -28 -68l-724 -724l-136 -136c-18 -18 -43 -28 -68 -28s-50 10 -68 28l-136 136l-362 362c-18 18 -28 43 -28 68s10 50 28 68l136 136c18 18 43 28 68 28s50 -10 68 -28l294 -295l656 657c18 18 43 28 68 28s50 -10 68 -28l136 -136 +c18 -18 28 -43 28 -68z" /> + <glyph glyph-name="meetup" unicode="" horiz-adv-x="1847" +d="M1297 302c-11 72 -143 16 -151 95c-11 112 153 354 140 448c-12 84 -68 102 -117 103c-47 1 -59 -7 -75 -16c-10 -6 -23 -17 -41 1c-22 21 -39 41 -68 45c-43 7 -62 -7 -93 -34c-12 -10 -42 -45 -70 -32c-12 6 -54 27 -84 40c-57 25 -140 -16 -170 -70 +c-45 -80 -133 -396 -146 -438c-30 -93 38 -170 129 -165c39 2 64 16 89 61c14 26 146 377 156 394c7 12 31 28 51 18c20 -11 24 -33 21 -53c-4 -34 -98 -248 -101 -272c-12 -80 94 -93 135 -14c13 25 160 324 173 344c15 22 26 29 41 28c11 0 29 -3 25 -38 +c-5 -33 -123 -253 -136 -307c-16 -72 23 -145 87 -177c40 -20 219 -55 205 39zM346 86c4 -20 -8 -39 -28 -43c-19 -4 -38 8 -42 28c-4 19 8 39 27 43s39 -8 43 -28zM916 -177c16 -23 10 -54 -12 -70c-23 -16 -54 -10 -70 13c-15 23 -9 54 13 70c23 16 54 10 69 -13zM140 635 +c-24 -36 -72 -45 -107 -20c-35 24 -44 73 -20 108c24 36 72 45 107 21c35 -25 44 -73 20 -109zM1430 -42c25 -37 16 -88 -21 -114c-37 -25 -87 -16 -112 21s-16 88 20 114c37 26 87 16 113 -21zM1542 562c92 -151 53 -350 -92 -452c-61 -43 -130 -62 -199 -60 +c-42 -165 -243 -226 -368 -114c-4 -3 -9 -6 -13 -10c-137 -95 -323 -61 -418 78c-34 50 -51 107 -53 164c-229 38 -315 329 -144 489c-99 164 2 376 187 402c88 232 377 342 573 190c236 78 477 -103 458 -354c144 -44 185 -234 69 -333zM418 1222c18 -27 12 -64 -15 -83 +c-26 -18 -63 -12 -81 15s-12 64 15 83c26 18 63 12 81 -15zM577 1503c5 -22 -9 -44 -31 -49s-44 9 -49 32c-4 22 10 44 32 49s44 -9 48 -32zM1763 555c6 -27 -11 -53 -37 -58c-26 -6 -52 11 -57 37c-6 27 11 53 37 59c26 5 52 -12 57 -38zM1099 1448c21 -36 10 -84 -27 -106 +c-36 -22 -83 -10 -104 26c-22 37 -10 85 26 107s83 10 105 -27zM1845 792c5 -20 -8 -39 -27 -44c-20 -4 -39 9 -43 28c-4 20 8 40 28 44c19 4 38 -8 42 -28zM1654 1033c20 -30 13 -71 -16 -92c-30 -20 -71 -13 -91 17s-13 71 17 92c29 21 70 13 90 -17z" /> + <glyph glyph-name="sliders" unicode="" +d="M352 128v-128h-352v128h352zM704 256c35 0 64 -29 64 -64v-256c0 -35 -29 -64 -64 -64h-256c-35 0 -64 29 -64 64v256c0 35 29 64 64 64h256zM864 640v-128h-864v128h864zM224 1152v-128h-224v128h224zM1536 128v-128h-736v128h736zM576 1280c35 0 64 -29 64 -64v-256 +c0 -35 -29 -64 -64 -64h-256c-35 0 -64 29 -64 64v256c0 35 29 64 64 64h256zM1216 768c35 0 64 -29 64 -64v-256c0 -35 -29 -64 -64 -64h-256c-35 0 -64 29 -64 64v256c0 35 29 64 64 64h256zM1536 640v-128h-224v128h224zM1536 1152v-128h-864v128h864z" /> + <glyph glyph-name="file-pdf-o" unicode="" +d="M1468 1156c37 -37 68 -111 68 -164v-1152c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h896c53 0 127 -31 164 -68zM1024 1400v-376h376c-6 17 -15 34 -22 41l-313 313c-7 7 -24 16 -41 22zM1408 -128v1024h-416c-53 0 -96 43 -96 96v416 +h-768v-1536h1280zM894 465c25 -20 53 -38 84 -56c42 5 81 7 117 7c67 0 152 -8 177 -49c7 -10 13 -28 2 -52c-1 -1 -2 -3 -3 -4v-1c-3 -18 -18 -38 -71 -38c-64 0 -161 29 -245 73c-139 -15 -285 -46 -392 -83c-103 -176 -182 -262 -242 -262c-10 0 -19 2 -28 7l-24 12 +c-3 1 -4 3 -6 5c-5 5 -9 16 -6 36c10 46 64 123 188 188c8 5 18 2 23 -6c1 -1 2 -3 2 -4c31 51 67 116 107 197c45 90 80 178 104 262c-32 109 -42 221 -24 287c7 25 22 40 42 40h22c15 0 27 -5 35 -15c12 -14 15 -36 9 -68c-1 -3 -2 -6 -4 -8c1 -3 1 -5 1 -8v-30 +c-1 -63 -2 -123 -14 -192c35 -105 87 -190 146 -238zM318 54c30 14 73 57 137 158c-75 -58 -122 -124 -137 -158zM716 974c-10 -28 -10 -76 -2 -132c3 16 5 31 7 44c2 17 5 31 7 43c1 3 2 5 4 8c-1 1 -1 3 -2 5c-1 18 -7 29 -13 36c0 -2 -1 -3 -1 -4zM592 313 +c88 35 186 63 284 81c-10 8 -20 15 -29 23c-49 43 -93 103 -127 176c-19 -61 -47 -126 -83 -197c-15 -28 -30 -56 -45 -83zM1238 329c-5 5 -31 24 -140 24c49 -18 94 -28 124 -28c9 0 14 0 18 1c0 1 -1 2 -2 3z" /> + <glyph glyph-name="android" unicode="" horiz-adv-x="1408" +d="M493 1053c22 0 39 18 39 39s-17 39 -39 39c-21 0 -38 -18 -38 -39s17 -39 38 -39zM915 1053c21 0 38 18 38 39s-17 39 -38 39c-22 0 -39 -18 -39 -39s17 -39 39 -39zM103 869c56 0 102 -46 102 -102v-430c0 -57 -45 -103 -102 -103s-103 46 -103 103v430 +c0 56 46 102 103 102zM1163 850v-666c0 -61 -49 -110 -109 -110h-75v-227c0 -57 -46 -103 -103 -103s-103 46 -103 103v227h-138v-227c0 -57 -46 -103 -103 -103c-56 0 -102 46 -102 103l-1 227h-74c-61 0 -110 49 -110 110v666h918zM931 1255c140 -72 235 -210 235 -369 +h-925c0 159 95 297 236 369l-71 131c-4 7 -2 16 5 20c7 3 16 1 20 -6l72 -132c61 27 129 42 201 42s140 -15 201 -42l72 132c4 7 13 9 20 6c7 -4 9 -13 5 -20zM1408 767v-430c0 -57 -46 -103 -103 -103c-56 0 -102 46 -102 103v430c0 57 46 102 102 102 +c57 0 103 -45 103 -102z" /> + <glyph glyph-name="hubzilla" unicode="" horiz-adv-x="1587" +d="M1349 1363c86 -43 165 -125 207 -213c16 -40 34 -78 30 -170c-3 -83 -8 -115 -34 -170c-68 -146 -203 -243 -356 -253l-83 -6l-29 -115c-24 -96 -27 -129 -27 -129c28 -29 91 -47 117 -115c36 -69 32 -168 -14 -225c-75 -93 -187 -121 -286 -70c-90 47 -136 164 -108 266 +c7 26 -2 34 -109 104l-116 77l-43 -35c-203 -162 -499 -19 -498 242c0 168 133 299 304 298c86 0 138 -20 202 -78l47 -42l104 53l105 51l-11 37c-16 55 -12 176 7 238c21 74 87 166 150 212c128 94 302 111 441 43v0zM580 413l233 -160s71 60 167 68l60 254 +s-185 59 -237 189l-217 -102s52 -128 -6 -248v-1z" /> + <glyph glyph-name="stack-exchange" unicode="" horiz-adv-x="1238" +d="M1238 283v-66c0 -113 -88 -204 -196 -204h-57l-260 -269v269h-529c-108 0 -196 91 -196 204v66h1238zM1238 609v-255h-1238v255h1238zM1238 937v-255h-1238v255h1238zM1238 1077v-67h-1238v67c0 112 88 203 196 203h846c108 0 196 -91 196 -203z" /> + <glyph glyph-name="twitch" unicode="" horiz-adv-x="1592" +d="M796 1102v-434h-145v434h145zM1194 1102v-434h-145v434h145zM1194 342l253 254v795h-1194v-1049h326v-217l217 217h398zM1592 1536v-1013l-434 -434h-326l-217 -217h-217v217h-398v1158l109 289h1483z" /> + <glyph glyph-name="caret-right" unicode="" horiz-adv-x="576" +d="M576 640c0 -17 -7 -33 -19 -45l-448 -448c-12 -12 -28 -19 -45 -19c-35 0 -64 29 -64 64v896c0 35 29 64 64 64c17 0 33 -7 45 -19l448 -448c12 -12 19 -28 19 -45z" /> + <glyph glyph-name="tree" unicode="" horiz-adv-x="1472" +d="M1472 64c0 -35 -29 -64 -64 -64h-462c3 -64 11 -131 11 -196c0 -33 -27 -60 -61 -60h-320c-34 0 -61 27 -61 60c0 65 8 132 11 196h-462c-35 0 -64 29 -64 64c0 17 7 33 19 45l402 403h-229c-35 0 -64 29 -64 64c0 17 7 33 19 45l402 403h-197c-35 0 -64 29 -64 64 +c0 17 7 33 19 45l384 384c12 12 28 19 45 19s33 -7 45 -19l384 -384c12 -12 19 -28 19 -45c0 -35 -29 -64 -64 -64h-197l402 -403c12 -12 19 -28 19 -45c0 -35 -29 -64 -64 -64h-229l402 -403c12 -12 19 -28 19 -45z" /> + <glyph glyph-name="friendica" unicode="" horiz-adv-x="1520" +d="M0 1128c0 152 123 276 274 276h973c151 0 273 -124 273 -276v-980c0 -152 -122 -276 -273 -276h-973c-151 0 -274 124 -274 276v980zM1247 1343h-244v-368h-486v-310l485 3l1 -367h-486v-368h730c118 0 212 95 212 215v980c0 120 -94 215 -212 215z" /> + <glyph glyph-name="gratipay" unicode="" +d="M773 234l350 473c27 37 59 156 -43 223c-86 56 -168 13 -211 -37c-16 -18 -44 -40 -96 -40s-79 22 -95 40c-43 50 -125 93 -212 37c-101 -67 -69 -186 -42 -223zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" /> + <glyph glyph-name="map-marker" unicode="" horiz-adv-x="1024" +d="M768 896c0 141 -115 256 -256 256s-256 -115 -256 -256s115 -256 256 -256s256 115 256 256zM1024 896c0 -61 -7 -124 -33 -179l-364 -774c-21 -44 -67 -71 -115 -71s-94 27 -114 71l-365 774c-26 55 -33 118 -33 179c0 283 229 512 512 512s512 -229 512 -512z" /> + <glyph glyph-name="globe-e" unicode="" +d="M768 1404c204 0 399 -81 543 -225s225 -339 225 -543s-81 -399 -225 -543s-339 -225 -543 -225s-399 81 -543 225s-225 339 -225 543s81 399 225 543s339 225 543 225zM863 1165h-1h-6c-78 -1 -136 -19 -204 -29s-157 -10 -205 -29s-58 -39 -87 -58s-72 -30 -87 -58 +s0 -58 0 -87s-28 -73 0 -88s58 39 87 58s68 70 88 59s6 -8 0 -29s-54 -44 -56 -87s110 -78 73 -135c-37 -56 -202 50 -250 18s-19 -58 -29 -87s-40 -57 -29 -88s55 -37 87 -58s87 -59 88 -62s21 -106 29 -145c6 -34 3 -78 4 -120c44 -36 123 -82 176 -102 +c21 41 37 107 53 139c24 48 77 133 87 174s0 39 0 58s8 32 0 58s-40 58 -59 87s-37 69 -58 88s-49 19 -58 29s-4 9 -4 14s-5 8 5 15s36 9 58 0s39 -39 58 -58s27 -55 58 -58s58 39 87 58c29 20 74 35 107 -22c8 -16 43 -35 68 -35s22 42 30 58s24 37 48 41s28 -14 44 -30 +s30 -69 53 -69s22 43 30 59c15 34 6 65 57 116c19 19 50 29 57 57s-21 62 -29 86s-28 63 -28 88c0 21 27 25 63 44c-24 30 -67 73 -97 97c-22 1 -41 2 -55 4c-69 8 -176 29 -253 29zM1251 411c-32 1 -70 -43 -105 -60c-39 -19 -100 -32 -116 -59s0 -39 0 -58s-14 -44 0 -58 +s38 0 58 0s37 9 59 0c12 -5 23 -17 33 -29c40 34 96 98 125 142c-5 11 -10 21 -14 32c-10 29 5 74 -29 88c-4 2 -7 2 -11 2z" /> + <glyph glyph-name="american-sign-language-interpreting" unicode="" horiz-adv-x="2303" +d="M1032 576c-35 1 -68 21 -84 55c-22 45 -66 73 -116 73c-71 0 -128 -57 -128 -128c0 -34 12 -67 36 -89l10 -8c22 -20 51 -31 82 -31c50 0 94 28 116 73c16 34 49 54 84 55zM1600 704c0 34 -12 67 -36 89l-10 8c-22 20 -51 31 -82 31c-50 0 -94 -28 -116 -73 +c-16 -34 -49 -54 -84 -55c35 -1 68 -21 84 -55c22 -45 66 -73 116 -73c71 0 128 57 128 128zM1174 925c-23 -47 -81 -67 -128 -44c-42 21 -87 31 -134 31c-35 0 -68 -6 -99 -17c6 0 13 1 19 1c123 0 236 -72 289 -183c23 -48 2 -105 -46 -128c-12 -6 -25 -9 -39 -9 +c14 0 27 -3 39 -9c48 -23 69 -80 46 -128c-53 -111 -166 -183 -289 -183h-6c-15 2 -29 3 -44 4l-290 27l-239 -120c-10 -5 -19 -7 -29 -7c-23 0 -46 13 -57 35l-160 320c-15 31 -4 68 25 85l209 119l148 267c23 206 125 395 287 528c41 34 102 28 135 -13 +c34 -41 28 -101 -13 -135c-45 -38 -85 -81 -117 -128c78 53 168 89 267 101c53 7 101 -30 107 -83c7 -53 -30 -101 -83 -107c-58 -7 -112 -27 -159 -55c32 7 65 10 99 10c76 0 150 -17 218 -50c48 -24 68 -81 44 -129zM2137 1085l160 -320c15 -31 4 -68 -25 -85l-209 -119 +l-148 -267c-23 -206 -125 -395 -287 -528c-18 -15 -40 -22 -61 -22c-28 0 -55 12 -74 35c-34 41 -28 101 13 135c45 38 85 81 117 128c-78 -53 -168 -89 -267 -101c-4 -1 -8 -1 -12 -1c-48 0 -89 36 -95 84c-7 53 30 101 83 107c58 7 112 27 159 55c-32 -7 -65 -10 -99 -10 +c-76 0 -150 17 -218 50c-48 24 -68 81 -44 129c23 47 81 67 128 44c42 -21 87 -31 134 -31c35 0 68 6 99 17c-6 0 -13 -1 -19 -1c-123 0 -236 72 -289 183c-23 48 -2 105 46 128c12 6 25 9 39 9c-14 0 -27 3 -39 9c-48 23 -69 80 -46 128c53 111 166 183 289 183h7 +c14 -2 28 -3 42 -4l291 -27l239 120c10 5 19 7 29 7c23 0 46 -13 57 -35z" /> + <glyph glyph-name="binoculars" unicode="" horiz-adv-x="1792" +d="M704 1216v-768c0 -35 -29 -64 -64 -64v-576c0 -35 -29 -64 -64 -64h-512c-35 0 -64 29 -64 64v512l249 873c4 14 17 23 31 23h424zM1024 1216v-704h-256v704h256zM1792 320v-512c0 -35 -29 -64 -64 -64h-512c-35 0 -64 29 -64 64v576c-35 0 -64 29 -64 64v768h424 +c14 0 27 -9 31 -23zM736 1504v-224h-352v224c0 18 14 32 32 32h288c18 0 32 -14 32 -32zM1408 1504v-224h-352v224c0 18 14 32 32 32h288c18 0 32 -14 32 -32z" /> + <glyph glyph-name="sticky-note" unicode="" +d="M1024 288v-416h-928c-53 0 -96 43 -96 96v1344c0 53 43 96 96 96h1344c53 0 96 -43 96 -96v-928h-416c-53 0 -96 -43 -96 -96zM1152 256h381c-9 -48 -35 -102 -65 -132l-184 -184c-30 -30 -84 -56 -132 -65v381z" /> + <glyph glyph-name="user" unicode="" horiz-adv-x="1280" +d="M1280 137c0 -146 -96 -265 -213 -265h-854c-117 0 -213 119 -213 265c0 263 65 567 327 567c81 -79 191 -128 313 -128s232 49 313 128c262 0 327 -304 327 -567zM1024 1024c0 -212 -172 -384 -384 -384s-384 172 -384 384s172 384 384 384s384 -172 384 -384z" /> + <glyph glyph-name="php" unicode="" horiz-adv-x="2299" +d="M1149 1245c635 0 1150 -271 1150 -605s-515 -605 -1150 -605s-1149 271 -1149 605s514 605 1149 605zM1049 1081l-130 -627h125l74 359l100 -1c32 0 52 -6 62 -18s12 -33 6 -62l-58 -278h126l61 291c13 65 4 109 -27 132c-30 23 -77 36 -138 37h-111l35 167h-125z +M478 914v0l-129 -625h126l34 165h108c37 0 73 5 107 13s66 27 96 57c25 24 44 50 58 80s24 60 28 91c11 67 1 121 -31 160s-84 58 -155 59h-242zM1549 914l-130 -625h126l34 165h109c37 0 72 5 106 13s67 27 97 57c25 24 43 50 57 80s24 60 28 91c11 67 1 121 -31 160 +s-84 58 -155 59h-241zM623 815v0c48 1 88 -4 120 -13s43 -45 32 -106c-13 -73 -38 -115 -77 -127s-87 -18 -145 -17h-12c-3 0 -8 1 -11 1l54 261h18c7 0 14 0 21 1zM1693 815v0c48 1 88 -4 120 -13s44 -45 33 -106c-13 -73 -39 -115 -78 -127s-87 -18 -145 -17h-12 +c-3 0 -8 1 -11 1l54 261h18c7 0 14 0 21 1z" /> + <glyph glyph-name="ioxhost" unicode="" horiz-adv-x="2048" +d="M1463 704c0 -47 -38 -86 -86 -86h-702c-48 0 -86 39 -86 86s38 86 86 86h702c48 0 86 -39 86 -86zM1677 704c0 59 -8 115 -23 170h-982c-48 0 -86 38 -86 85c0 48 38 86 86 86h908c-115 187 -321 311 -555 311c-360 0 -653 -292 -653 -652c0 -59 8 -115 23 -170h982 +c48 0 86 -38 86 -85c0 -48 -38 -86 -86 -86h-908c115 -187 321 -311 556 -311c359 0 652 292 652 652zM2048 959c0 -47 -38 -85 -86 -85h-131c11 -55 17 -112 17 -170c0 -454 -369 -824 -823 -824c-333 0 -620 198 -750 483h-189c-48 0 -86 38 -86 86c0 47 38 85 86 85h132 +c-11 55 -17 112 -17 170c0 454 369 824 824 824c332 0 619 -198 749 -483h188c48 0 86 -38 86 -86z" /> + <glyph glyph-name="expand" unicode="" +d="M755 480c0 -8 -4 -17 -10 -23l-332 -332l144 -144c12 -12 19 -28 19 -45c0 -35 -29 -64 -64 -64h-448c-35 0 -64 29 -64 64v448c0 35 29 64 64 64c17 0 33 -7 45 -19l144 -144l332 332c6 6 15 10 23 10s17 -4 23 -10l114 -114c6 -6 10 -15 10 -23zM1536 1344v-448 +c0 -35 -29 -64 -64 -64c-17 0 -33 7 -45 19l-144 144l-332 -332c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-114 114c-6 6 -10 15 -10 23s4 17 10 23l332 332l-144 144c-12 12 -19 28 -19 45c0 35 29 64 64 64h448c35 0 64 -29 64 -64z" /> + <glyph glyph-name="discord-alt" unicode="" +d="M559 1212v0l13 -16c-237 -68 -346 -172 -346 -172s29 16 78 38c141 62 252 79 298 83c8 1 15 3 23 3c80 11 170 13 265 2c125 -14 259 -51 396 -126c0 0 -103 99 -327 167l18 21s181 4 370 -138c0 0 189 -343 189 -766c0 0 -111 -191 -402 -200c0 0 -48 56 -87 106 +c172 49 238 157 238 157c-54 -35 -105 -61 -151 -78c-66 -28 -129 -45 -191 -56c-126 -24 -242 -17 -341 1c-75 14 -139 36 -193 57c-30 12 -63 26 -96 44c-4 3 -8 4 -12 7c-3 1 -4 3 -5 4c-24 13 -37 22 -37 22s63 -105 230 -155c-39 -50 -88 -109 -88 -109 +c-291 9 -401 200 -401 200c0 423 189 766 189 766c189 142 370 138 370 138zM522 722v0c-75 0 -134 -66 -134 -146s60 -146 134 -146c75 0 134 66 134 146c1 80 -59 146 -134 146zM1002 722v0c-75 0 -134 -66 -134 -146s60 -146 134 -146c75 0 134 66 134 146 +s-59 146 -134 146z" /> + <glyph glyph-name="bitbucket-square" unicode="" +d="M848 666c0 57 -70 96 -118 67c-57 -27 -57 -119 1 -143c52 -31 125 16 117 76zM928 682c11 -88 -58 -174 -146 -182s-171 64 -175 153c-3 66 38 130 98 157c94 42 210 -26 223 -128zM1100 1073c-44 -45 -111 -51 -170 -58c-107 -14 -216 -13 -324 0 +c-59 8 -124 15 -170 58c28 40 78 48 123 55c135 24 273 23 408 1c48 -7 102 -15 133 -56zM1142 327c0 24 25 65 -9 75c-215 -142 -515 -142 -731 0l-12 -6l-5 -12c12 -70 23 -141 41 -210c41 -71 129 -95 204 -108c142 -26 299 -18 428 53c75 42 63 137 84 208zM1272 1020 +c4 24 9 53 -8 75c-38 48 -98 71 -155 88c-158 46 -325 52 -487 36c-77 -7 -154 -20 -226 -46c-54 -21 -127 -49 -136 -113c18 -150 47 -297 72 -446c8 -42 8 -92 46 -122c81 -62 184 -89 284 -100c148 -16 305 -5 440 63c38 20 82 46 90 92c28 157 55 314 80 473zM1536 1120 +v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" /> + <glyph glyph-name="hand-paper-o" unicode="" horiz-adv-x="1632" +d="M880 1408c-62 0 -112 -50 -112 -112v-656h-32v528c0 62 -50 112 -112 112s-112 -50 -112 -112v-784l-154 205c-24 32 -62 51 -102 51c-71 0 -128 -58 -128 -128c0 -28 9 -55 26 -77l384 -512c24 -32 62 -51 102 -51h688c46 0 86 33 95 78l76 405c3 19 5 39 5 59v498 +c0 62 -50 112 -112 112s-112 -50 -112 -112v-272h-32v528c0 62 -50 112 -112 112s-112 -50 -112 -112v-528h-32v656c0 62 -50 112 -112 112zM880 1536c90 0 173 -51 214 -132c14 3 28 4 42 4c132 0 240 -108 240 -240v-17c139 8 256 -99 256 -239v-498c0 -28 -3 -56 -8 -83 +l-76 -404c-19 -106 -112 -183 -220 -183h-688c-80 0 -157 39 -205 102l-384 512c-33 44 -51 99 -51 154c0 141 114 256 256 256c42 0 93 -10 128 -34v434c0 132 108 240 240 240c14 0 28 -1 42 -4c41 81 124 132 214 132z" /> + <glyph glyph-name="database" unicode="" +d="M768 768c301 0 603 54 768 170v-170c0 -141 -344 -256 -768 -256s-768 115 -768 256v170c165 -116 467 -170 768 -170zM768 0c301 0 603 54 768 170v-170c0 -141 -344 -256 -768 -256s-768 115 -768 256v170c165 -116 467 -170 768 -170zM768 384c301 0 603 54 768 170 +v-170c0 -141 -344 -256 -768 -256s-768 115 -768 256v170c165 -116 467 -170 768 -170zM768 1536c424 0 768 -115 768 -256v-128c0 -141 -344 -256 -768 -256s-768 115 -768 256v128c0 141 344 256 768 256z" /> + <glyph glyph-name="jirafeau" unicode="" +d="M1459 1408c43 0 77 -34 77 -77v-1382c0 -43 -34 -77 -77 -77h-923c18 109 27 134 50 210c31 103 92 108 92 108c49 11 74 31 224 -36s270 -72 270 -72v0c15 -19 71 -80 137 -85c90 -7 128 19 128 19s31 91 -38 176s-336 376 -343 403c0 0 -40 47 -69 58s-119 63 -135 130 +s-42 168 -33 215s22 152 -32 130s-31 -74 -40 -137s-52 -190 -112 -190c0 0 -87 150 -145 132s-108 -181 -63 -275c0 0 -210 -295 -393 -772c-20 14 -34 37 -34 63v1382c0 43 34 77 77 77h1382z" /> + <glyph glyph-name="user-circle-o" unicode="" horiz-adv-x="1792" +d="M896 1536c495 0 896 -401 896 -896c0 -492 -399 -896 -896 -896c-496 0 -896 403 -896 896c0 495 401 896 896 896zM1515 185c93 128 149 285 149 455c0 423 -345 768 -768 768s-768 -345 -768 -768c0 -170 56 -327 149 -455c36 179 123 327 306 327 +c81 -79 191 -128 313 -128s232 49 313 128c183 0 270 -148 306 -327zM1280 832c0 -212 -172 -384 -384 -384s-384 172 -384 384s172 384 384 384s384 -172 384 -384z" /> + <glyph glyph-name="hacker-news" unicode="" +d="M809 532l266 499h-112l-157 -312s-24 -48 -44 -92c-19 46 -42 92 -42 92l-155 312h-120l263 -493v-324h101v318zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" /> + <glyph glyph-name="edge" unicode="" horiz-adv-x="1654" +d="M0 741h1c52 414 335 796 841 795c307 0 560 -144 708 -409c76 -137 104 -283 104 -442v-188h-1125c5 -464 682 -448 974 -244v-377c-171 -103 -557 -192 -858 -77c-255 98 -433 363 -436 621c-4 333 165 554 436 680c-57 -72 -101 -150 -124 -285h635 +c37 379 -359 379 -359 379c-374 -13 -644 -231 -797 -453z" /> + <glyph glyph-name="calendar-plus-o" unicode="" horiz-adv-x="1664" +d="M1536 1280c70 0 128 -58 128 -128v-1280c0 -70 -58 -128 -128 -128h-1408c-70 0 -128 58 -128 128v1280c0 70 58 128 128 128h128v96c0 88 72 160 160 160h64c88 0 160 -72 160 -160v-96h384v96c0 88 72 160 160 160h64c88 0 160 -72 160 -160v-96h128zM1152 1376v-288 +c0 -18 14 -32 32 -32h64c18 0 32 14 32 32v288c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32zM384 1376v-288c0 -18 14 -32 32 -32h64c18 0 32 14 32 32v288c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32zM1536 -128v1024h-1408v-1024h1408zM896 448h224 +c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-224v-224c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v224h-224c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h224v224c0 18 14 32 32 32h64c18 0 32 -14 32 -32v-224z" /> + <glyph glyph-name="hand-lizard-o" unicode="" horiz-adv-x="2048" +d="M1151 1536c81 0 159 -39 207 -105l572 -781c77 -104 118 -229 118 -359v-355c0 -106 -86 -192 -192 -192h-384c-106 0 -192 86 -192 192v177l-286 143h-546c-106 0 -192 86 -192 192v32c0 159 129 288 288 288h420l42 128h-686c-133 0 -244 102 -255 234 +c-42 51 -65 116 -65 182v32c0 106 86 192 192 192h959zM1920 -64v355c0 101 -33 202 -93 284l-573 781c-24 32 -62 52 -103 52h-959c-35 0 -64 -29 -64 -64c0 -53 1 -90 36 -133c13 41 50 69 92 69h832v-32h-832c-35 0 -64 -29 -64 -64c0 -19 -1 -39 3 -58 +c11 -59 65 -102 125 -102h731c53 0 96 -43 96 -96c0 -10 -2 -21 -5 -30l-64 -192c-13 -39 -50 -66 -91 -66h-443c-88 0 -160 -72 -160 -160v-32c0 -35 29 -64 64 -64h561c10 0 20 -2 29 -7l317 -158c32 -17 53 -50 53 -86v-197c0 -35 29 -64 64 -64h384c35 0 64 29 64 64z +" /> + <glyph glyph-name="digitalocean" unicode="" horiz-adv-x="1535" +d="M245 169h-191v190h191v-190zM473 -59h-228v228h228v-228zM769 465v-296h-296v296h296zM768 -128v298c315 0 559 312 438 644c-44 123 -142 221 -265 265c-332 120 -644 -123 -644 -438h-297c0 502 485 894 1012 729c230 -72 414 -255 485 -485 +c165 -527 -226 -1013 -729 -1013z" /> + <glyph glyph-name="xing" unicode="" horiz-adv-x="1408" +d="M597 869c0 0 -10 -17 -257 -456c-13 -22 -30 -46 -65 -46h-239c-14 0 -25 7 -31 17s-7 23 0 36l253 448c1 0 1 0 0 1l-161 279c-7 13 -8 27 -1 37c6 10 18 15 32 15h239c36 0 54 -24 66 -45c163 -285 164 -286 164 -286zM1403 1511c7 -10 7 -24 0 -37l-528 -934 +c-1 0 -1 -1 0 -1l336 -615c7 -13 7 -27 1 -37c-7 -10 -18 -15 -32 -15h-239c-36 0 -55 24 -66 45c-339 621 -339 622 -339 622s17 30 531 942c13 23 28 45 64 45h241c14 0 25 -5 31 -15z" /> + <glyph glyph-name="youtube-square" unicode="" +d="M919 233v157c0 33 -10 50 -29 50c-11 0 -22 -5 -33 -16v-224c11 -11 22 -16 33 -16c19 0 29 16 29 49zM1103 355h66v34c0 34 -11 51 -33 51s-33 -17 -33 -51v-34zM532 621v-70h-80v-423h-74v423h-78v70h232zM733 495v-367h-67v40c-26 -30 -51 -45 -76 -45 +c-21 0 -36 9 -42 28c-4 11 -6 28 -6 54v290h66v-270c0 -15 0 -24 1 -26c1 -10 6 -15 15 -15c14 0 27 10 42 31v280h67zM985 384v-146c0 -33 -2 -58 -7 -73c-8 -28 -26 -42 -53 -42c-23 0 -46 14 -68 41v-36h-67v493h67v-161c21 26 44 40 68 40c27 0 45 -14 53 -42 +c5 -15 7 -39 7 -74zM1236 255v-9c0 -22 -1 -36 -2 -43c-2 -15 -7 -28 -15 -40c-18 -27 -46 -40 -80 -40c-35 0 -62 13 -81 38c-14 18 -21 47 -21 86v129c0 39 6 67 20 86c19 25 46 38 80 38c33 0 60 -13 78 -38c14 -19 21 -47 21 -86v-76h-133v-65c0 -34 11 -51 34 -51 +c16 0 26 9 30 26c0 4 1 19 1 45h68zM785 1079v-156c0 -34 -11 -51 -32 -51c-22 0 -32 17 -32 51v156c0 34 10 52 32 52c21 0 32 -18 32 -52zM1318 366c0 86 0 177 -19 260c-14 59 -62 102 -119 108c-136 15 -274 15 -412 15c-137 0 -275 0 -411 -15 +c-58 -6 -106 -49 -119 -108c-19 -83 -20 -174 -20 -260c0 -85 0 -176 20 -260c13 -58 61 -101 118 -108c137 -15 275 -15 412 -15s275 0 412 15c57 7 105 50 118 108c20 84 20 175 20 260zM563 1017l90 296h-75l-51 -195l-53 195h-78c15 -46 32 -92 47 -138 +c24 -70 39 -122 46 -158v-201h74v201zM852 936v130c0 39 -7 68 -21 87c-19 25 -45 38 -78 38c-34 0 -60 -13 -78 -38c-14 -19 -21 -48 -21 -87v-130c0 -39 7 -68 21 -87c18 -25 44 -38 78 -38c33 0 59 13 78 38c14 18 21 48 21 87zM1033 816h67v370h-67v-283 +c-15 -21 -29 -31 -42 -31c-9 0 -15 5 -16 16c-1 2 -1 10 -1 26v272h-67v-293c0 -26 2 -43 6 -55c7 -18 22 -27 43 -27c25 0 50 15 77 45v-40zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960 +c159 0 288 -129 288 -288z" /> + <glyph glyph-name="taxi" unicode="" horiz-adv-x="2048" +d="M1824 640c124 0 224 -100 224 -224v-384c0 -18 -14 -32 -32 -32h-96v-64c0 -106 -86 -192 -192 -192s-192 86 -192 192v64h-1024v-64c0 -106 -86 -192 -192 -192s-192 86 -192 192v64h-96c-18 0 -32 14 -32 32v384c0 124 100 224 224 224h28l105 419 +c31 126 153 221 283 221h128v224c0 18 14 32 32 32h448c18 0 32 -14 32 -32v-224h128c130 0 252 -95 283 -221l105 -419h28zM320 160c88 0 160 72 160 160s-72 160 -160 160s-160 -72 -160 -160s72 -160 160 -160zM516 640h1016l-89 357c-3 11 -23 27 -35 27h-768 +c-12 0 -32 -16 -35 -27zM1728 160c88 0 160 72 160 160s-72 160 -160 160s-160 -72 -160 -160s72 -160 160 -160z" /> + <glyph glyph-name="sort-desc" unicode="" horiz-adv-x="1024" +d="M1024 448c0 -17 -7 -33 -19 -45l-448 -448c-12 -12 -28 -19 -45 -19s-33 7 -45 19l-448 448c-12 12 -19 28 -19 45c0 35 29 64 64 64h896c35 0 64 -29 64 -64z" /> + <glyph glyph-name="rocket" unicode="" horiz-adv-x="1632" +d="M1408 1088c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96s96 43 96 96zM1632 1376c0 -332 -92 -553 -329 -791c-58 -57 -124 -116 -195 -176l-20 -379c-1 -10 -7 -20 -16 -26l-384 -224c-5 -3 -10 -4 -16 -4c-8 0 -16 3 -23 9l-64 64c-8 9 -11 21 -8 32l85 276 +l-281 281l-276 -85c-3 -1 -6 -1 -9 -1c-8 0 -17 3 -23 9l-64 64c-10 11 -12 27 -5 39l224 384c6 9 16 15 26 16l379 20c60 71 119 137 176 195c250 249 441 329 789 329c18 0 34 -14 34 -32z" /> + <glyph glyph-name="discord" unicode="" +d="M180 1516v0h1176c99 0 180 -81 180 -181v-1575l-189 167l-106 98l-112 105l46 -163h-995c-99 0 -180 81 -180 181v1187c0 100 81 181 180 181zM634 1107c0 0 -121 3 -247 -92c0 0 -126 -229 -126 -512c0 0 73 -128 267 -134c0 0 33 40 59 73c-111 33 -153 104 -153 104 +s8 -6 24 -15c1 -1 2 -2 4 -3c3 -2 5 -2 8 -4c22 -12 44 -22 64 -30c36 -14 79 -28 129 -38c66 -12 143 -17 227 -1c41 7 83 20 127 38c31 11 65 28 101 52c0 0 -44 -73 -159 -105c26 -33 58 -71 58 -71c194 6 269 134 269 134c0 283 -127 512 -127 512 +c-126 95 -246 92 -246 92l-12 -14c149 -46 218 -112 218 -112c-91 50 -181 75 -264 85c-63 7 -123 5 -177 -2c-5 0 -10 -1 -15 -2c-31 -3 -106 -14 -200 -55c-32 -15 -51 -26 -51 -26s72 69 230 115zM609 779c50 0 91 -43 90 -97c0 -54 -40 -98 -90 -98c-49 0 -89 44 -89 98 +s39 97 89 97zM930 779c50 0 89 -43 89 -97s-39 -98 -89 -98c-49 0 -90 44 -90 98s40 97 90 97z" /> + <glyph glyph-name="money" unicode="" horiz-adv-x="1920" +d="M768 384h384v96h-128v448h-114l-148 -137l77 -80c24 21 39 32 55 57h2v-288h-128v-96zM1280 640c0 -182 -110 -416 -320 -416s-320 234 -320 416s110 416 320 416s320 -234 320 -416zM1792 384v512c-141 0 -256 115 -256 256h-1152c0 -141 -115 -256 -256 -256v-512 +c141 0 256 -115 256 -256h1152c0 141 115 256 256 256zM1920 1216v-1152c0 -35 -29 -64 -64 -64h-1792c-35 0 -64 29 -64 64v1152c0 35 29 64 64 64h1792c35 0 64 -29 64 -64z" /> + <glyph glyph-name="laptop" unicode="" horiz-adv-x="1920" +d="M416 256c-88 0 -160 72 -160 160v704c0 88 72 160 160 160h1088c88 0 160 -72 160 -160v-704c0 -88 -72 -160 -160 -160h-1088zM384 1120v-704c0 -17 15 -32 32 -32h1088c17 0 32 15 32 32v704c0 17 -15 32 -32 32h-1088c-17 0 -32 -15 -32 -32zM1760 192h160v-96 +c0 -53 -72 -96 -160 -96h-1600c-88 0 -160 43 -160 96v96h1760zM1040 96c9 0 16 7 16 16s-7 16 -16 16h-160c-9 0 -16 -7 -16 -16s7 -16 16 -16h160z" /> + <glyph glyph-name="arrows-alt" unicode="" +d="M1283 995l-355 -355l355 -355l144 144c18 19 46 24 70 14c23 -10 39 -33 39 -59v-448c0 -35 -29 -64 -64 -64h-448c-26 0 -49 16 -59 40c-10 23 -5 51 14 69l144 144l-355 355l-355 -355l144 -144c19 -18 24 -46 14 -69c-10 -24 -33 -40 -59 -40h-448 +c-35 0 -64 29 -64 64v448c0 26 16 49 40 59c23 10 51 5 69 -14l144 -144l355 355l-355 355l-144 -144c-12 -12 -28 -19 -45 -19c-8 0 -17 2 -24 5c-24 10 -40 33 -40 59v448c0 35 29 64 64 64h448c26 0 49 -16 59 -40c10 -23 5 -51 -14 -69l-144 -144l355 -355l355 355 +l-144 144c-19 18 -24 46 -14 69c10 24 33 40 59 40h448c35 0 64 -29 64 -64v-448c0 -26 -16 -49 -39 -59c-8 -3 -17 -5 -25 -5c-17 0 -33 7 -45 19z" /> + <glyph glyph-name="thermometer-empty" unicode="" horiz-adv-x="1024" +d="M640 192c0 -106 -86 -192 -192 -192s-192 86 -192 192c0 105 85 192 192 192s192 -88 192 -192zM768 192c0 105 -50 197 -128 256v768c0 106 -86 192 -192 192s-192 -86 -192 -192v-768c-78 -59 -128 -151 -128 -256c0 -177 143 -320 320 -320s320 143 320 320zM896 192 +c0 -247 -201 -448 -448 -448s-448 201 -448 448c0 122 49 232 128 313v711c0 177 143 320 320 320s320 -143 320 -320v-711c79 -81 128 -191 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192v128h192z" /> + <glyph glyph-name="underline" unicode="" +d="M48 1313c-18 1 -33 1 -45 4l-3 88c13 1 26 1 40 1c35 0 73 -1 112 -4c94 -5 150 -7 166 -7c57 0 113 1 168 3c54 2 103 4 146 5c42 0 71 1 86 2l-1 -14l2 -64v-9c-40 -6 -81 -9 -124 -9c-40 0 -66 -8 -79 -25c-9 -10 -13 -54 -13 -132c0 -24 1 -43 1 -58l1 -229l14 -280 +c4 -81 20 -148 51 -202c23 -39 55 -70 96 -92c60 -32 119 -47 177 -47c68 0 132 9 191 28c35 11 68 27 99 51c31 23 53 44 65 64c26 40 43 79 53 114c14 49 21 125 21 229c0 179 -13 184 -28 410l-4 59c-3 43 -10 73 -24 88c-22 23 -48 35 -77 34l-100 -2l-14 3l2 86h84 +l205 -10c68 -3 133 3 196 10l18 -2c4 -25 6 -42 6 -51s-2 -19 -4 -31c-27 -7 -55 -12 -84 -13c-47 -7 -74 -12 -79 -17c-9 -9 -15 -22 -15 -41c0 -13 2 -33 3 -58c0 0 8 -18 22 -396c5 -151 -5 -253 -15 -304s-24 -92 -41 -122c-26 -44 -64 -85 -112 -123 +c-49 -37 -109 -67 -182 -89s-158 -33 -255 -33c-110 0 -205 15 -284 46s-139 72 -179 122s-68 115 -83 195c-11 55 -16 134 -16 237v333c0 126 -6 197 -17 213c-16 23 -65 37 -147 39zM1536 -96c0 -18 -14 -32 -32 -32h-1472c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h1472 +c18 0 32 -14 32 -32v-64z" /> + <glyph glyph-name="sun-o" unicode="" horiz-adv-x="1707" +d="M1430 640c0 318 -258 576 -576 576s-576 -258 -576 -576s258 -576 576 -576s576 258 576 576zM1706 363c-3 -10 -11 -17 -20 -20l-292 -96v-306c0 -10 -5 -20 -13 -26c-9 -6 -19 -8 -29 -4l-292 94l-180 -248c-6 -8 -16 -13 -26 -13s-20 5 -26 13l-180 248l-292 -94 +c-10 -4 -20 -2 -29 4c-8 6 -13 16 -13 26v306l-292 96c-9 3 -17 10 -20 20s-2 21 4 29l180 248l-180 248c-6 9 -7 19 -4 29s11 17 20 20l292 96v306c0 10 5 20 13 26c9 6 19 8 29 4l292 -94l180 248c12 16 40 16 52 0l180 -248l292 94c10 4 20 2 29 -4c8 -6 13 -16 13 -26 +v-306l292 -96c9 -3 17 -10 20 -20s2 -20 -4 -29l-180 -248l180 -248c6 -8 7 -19 4 -29z" /> + <glyph glyph-name="activitypub" unicode="" horiz-adv-x="2032" +d="M924 1280v-1280l-185 107v853l-739 -427v214zM1109 1280l923 -533v-214l-923 -533v213l739 427l-739 427v213zM1109 853l369 -213l-369 -213v426zM554 640v-427l-369 214z" /> + <glyph glyph-name="play-circle" unicode="" +d="M768 1408c424 0 768 -344 768 -768s-344 -768 -768 -768s-768 344 -768 768s344 768 768 768zM1152 585c20 11 32 32 32 55s-12 44 -32 55l-544 320c-19 12 -44 12 -64 1c-20 -12 -32 -33 -32 -56v-640c0 -23 12 -44 32 -56c10 -5 21 -8 32 -8s22 3 32 9z" /> + <glyph glyph-name="share-square-o" unicode="" horiz-adv-x="1664" +d="M1408 547v-259c0 -159 -129 -288 -288 -288h-832c-159 0 -288 129 -288 288v832c0 159 129 288 288 288h255c17 0 32 -14 32 -32c0 -16 -11 -29 -26 -32c-50 -17 -95 -37 -133 -60c-5 -2 -10 -4 -16 -4h-112c-88 0 -160 -72 -160 -160v-832c0 -88 72 -160 160 -160h832 +c88 0 160 72 160 160v214c0 12 7 23 18 29c20 9 38 22 54 37c9 9 23 13 35 8s21 -16 21 -29zM1645 1043l-384 -384c-12 -13 -28 -19 -45 -19c-8 0 -17 2 -25 5c-23 10 -39 33 -39 59v192h-160c-220 0 -360 -42 -438 -131c-81 -93 -105 -243 -74 -473c2 -14 -7 -28 -20 -34 +c-4 -1 -8 -2 -12 -2c-10 0 -20 5 -26 13c-7 10 -166 235 -166 435c0 268 84 576 736 576h160v192c0 26 16 49 39 59c8 3 17 5 25 5c17 0 33 -7 45 -19l384 -384c25 -25 25 -65 0 -90z" /> + <glyph glyph-name="street-view" unicode="" horiz-adv-x="1408" +d="M1408 0c0 -176 -365 -256 -704 -256s-704 80 -704 256c0 136 203 200 373 229c35 6 68 -17 74 -52s-17 -68 -52 -74c-206 -36 -264 -92 -267 -104c10 -34 202 -127 576 -127s566 93 576 129c-3 10 -61 66 -267 102c-35 6 -58 39 -52 74s39 58 74 52 +c170 -29 373 -93 373 -229zM1024 896v-384c0 -35 -29 -64 -64 -64h-64v-384c0 -35 -29 -64 -64 -64h-256c-35 0 -64 29 -64 64v384h-64c-35 0 -64 29 -64 64v384c0 71 57 128 128 128h384c71 0 128 -57 128 -128zM928 1280c0 -124 -100 -224 -224 -224s-224 100 -224 224 +s100 224 224 224s224 -100 224 -224z" /> + <glyph glyph-name="arrow-circle-up" unicode="" +d="M1284 641c0 17 -6 33 -18 45l-362 362l-91 91c-12 12 -28 18 -45 18s-33 -6 -45 -18l-91 -91l-362 -362c-12 -12 -18 -28 -18 -45s6 -33 18 -45l91 -91c12 -12 28 -18 45 -18s33 6 45 18l189 189v-502c0 -35 29 -64 64 -64h128c35 0 64 29 64 64v502l189 -189 +c12 -12 28 -19 45 -19s33 7 45 19l91 91c12 12 18 28 18 45zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" /> + <glyph glyph-name="podcast" unicode="" +d="M994 344c0 -66 -7 -132 -17 -197c-15 -104 -30 -211 -55 -313c-18 -73 -86 -90 -152 -90s-134 17 -152 90c-25 102 -40 209 -55 313c-10 65 -17 131 -17 197c0 135 109 168 224 168s224 -33 224 -168zM1536 768c0 -324 -200 -601 -484 -714c-11 -4 -23 6 -21 18 +c3 21 6 43 10 66c2 16 4 32 6 47c1 6 4 10 9 12c208 106 352 322 352 571c0 365 -306 659 -675 639c-338 -18 -607 -306 -605 -644c2 -249 147 -464 356 -568c5 -2 8 -7 9 -12c2 -14 4 -29 6 -45c4 -24 7 -46 11 -68c2 -12 -11 -22 -22 -17c-297 116 -504 412 -487 753 +c19 387 331 704 718 728c446 28 817 -326 817 -766zM994 800c0 -124 -100 -224 -224 -224s-224 100 -224 224s100 224 224 224s224 -100 224 -224zM1282 768c0 -165 -79 -313 -200 -406c-10 -8 -24 -1 -26 12c-3 28 -11 61 -29 92c-4 6 -3 14 3 20c76 70 124 170 124 282 +c0 226 -197 407 -428 382c-177 -20 -321 -166 -338 -344c-13 -126 37 -242 122 -320c6 -6 7 -14 3 -20c-18 -31 -26 -64 -29 -93c-2 -12 -16 -19 -26 -11c-124 96 -203 247 -200 417c6 266 222 488 487 500c294 14 537 -220 537 -511z" /> + <glyph glyph-name="hackster" unicode="" +d="M768 -128c-424 0 -768 344 -768 768s344 768 768 768s768 -344 768 -768s-344 -768 -768 -768zM517 887c-10 -3 -17 -13 -17 -23s8 -18 18 -18h113c17 0 31 14 31 31v9c0 3 0 5 -1 8c-4 16 -22 26 -38 22zM661 739v59v5c-2 9 -12 13 -21 11l-325 -88c-5 -1 -9 -7 -9 -12 +s4 -9 9 -9h151c17 0 31 -14 31 -31v-86c0 -9 8 -17 17 -17h324c17 0 31 -13 31 -30v-59v-5c2 -9 12 -13 21 -11l325 88c5 1 9 7 9 12s-4 9 -9 9h-152c-17 0 -30 14 -30 31v85c0 9 -8 17 -17 17h-324c-17 0 -31 14 -31 31v0zM891 989c-13 -4 -23 -16 -23 -30v-176 +c0 -17 14 -31 31 -31h101c17 0 30 14 30 31v203v0c0 2 0 6 -1 8c-4 16 -21 26 -37 22zM1013 386c10 3 17 13 17 23s-8 19 -18 19h-113c-17 0 -31 -14 -31 -31v-9c0 -3 0 -5 1 -8c4 -16 22 -26 38 -22zM639 285c13 4 23 16 23 30v176c0 17 -14 30 -31 30h-101 +c-17 0 -30 -13 -30 -30v-204c0 -3 0 -5 1 -8c4 -16 21 -25 37 -21z" /> + <glyph glyph-name="plus-square" unicode="" +d="M1280 576v128c0 35 -29 64 -64 64h-320v320c0 35 -29 64 -64 64h-128c-35 0 -64 -29 -64 -64v-320h-320c-35 0 -64 -29 -64 -64v-128c0 -35 29 -64 64 -64h320v-320c0 -35 29 -64 64 -64h128c35 0 64 29 64 64v320h320c35 0 64 29 64 64zM1536 1120v-960 +c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" /> + <glyph glyph-name="desktop" unicode="" horiz-adv-x="1920" +d="M1792 544v832c0 17 -15 32 -32 32h-1600c-17 0 -32 -15 -32 -32v-832c0 -17 15 -32 32 -32h1600c17 0 32 15 32 32zM1920 1376v-1088c0 -88 -72 -160 -160 -160h-544c0 -85 64 -157 64 -192s-29 -64 -64 -64h-512c-35 0 -64 29 -64 64c0 37 64 105 64 192h-544 +c-88 0 -160 72 -160 160v1088c0 88 72 160 160 160h1600c88 0 160 -72 160 -160z" /> + <glyph glyph-name="expeditedssl" unicode="" horiz-adv-x="1792" +d="M896 1472c-459 0 -832 -373 -832 -832s373 -832 832 -832s832 373 832 832s-373 832 -832 832zM896 1536c495 0 896 -401 896 -896s-401 -896 -896 -896s-896 401 -896 896s401 896 896 896zM496 704c9 0 16 -7 16 -16v-480c0 -9 -7 -16 -16 -16h-32c-9 0 -16 7 -16 16 +v480c0 9 7 16 16 16h32zM896 640c71 0 128 -57 128 -128c0 -47 -26 -88 -64 -110v-114c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v114c-38 22 -64 63 -64 110c0 71 57 128 128 128zM896 1408c424 0 768 -344 768 -768s-344 -768 -768 -768s-768 344 -768 768 +s344 768 768 768zM544 928v-96c0 -18 14 -32 32 -32h64c18 0 32 14 32 32v96c0 124 100 224 224 224s224 -100 224 -224v-96c0 -18 14 -32 32 -32h64c18 0 32 14 32 32v96c0 194 -158 352 -352 352s-352 -158 -352 -352zM1408 192v512c0 35 -29 64 -64 64h-896 +c-35 0 -64 -29 -64 -64v-512c0 -35 29 -64 64 -64h896c35 0 64 29 64 64z" /> + <glyph glyph-name="toggle-on" unicode="" horiz-adv-x="2048" +d="M0 640c0 353 287 640 640 640h768c353 0 640 -287 640 -640s-287 -640 -640 -640h-768c-353 0 -640 287 -640 640zM1408 128c282 0 512 230 512 512s-230 512 -512 512s-512 -230 -512 -512s230 -512 512 -512z" /> + <glyph glyph-name="minus-square" unicode="" +d="M1280 576v128c0 35 -29 64 -64 64h-896c-35 0 -64 -29 -64 -64v-128c0 -35 29 -64 64 -64h896c35 0 64 29 64 64zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" /> + <glyph glyph-name="adn" unicode="" +d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" /> + <glyph glyph-name="whatsapp" unicode="" +d="M985 562c17 0 180 -85 187 -97c2 -5 2 -11 2 -15c0 -25 -8 -53 -17 -76c-23 -56 -116 -92 -173 -92c-48 0 -147 42 -190 62c-143 65 -232 176 -318 303c-38 56 -72 125 -71 194v8c2 66 26 113 74 158c15 14 31 22 52 22c12 0 24 -3 37 -3c27 0 32 -8 42 -34 +c7 -17 58 -153 58 -163c0 -38 -69 -81 -69 -104c0 -5 2 -10 5 -15c22 -47 64 -101 102 -137c46 -44 95 -73 151 -101c7 -4 14 -7 22 -7c30 0 80 97 106 97zM782 32c346 0 628 282 628 628s-282 628 -628 628s-628 -282 -628 -628c0 -132 42 -261 120 -368l-79 -233l242 77 +c102 -67 223 -104 345 -104zM782 1414c416 0 754 -338 754 -754s-338 -754 -754 -754c-127 0 -253 32 -365 94l-417 -134l136 405c-71 117 -108 252 -108 389c0 416 338 754 754 754z" /> + <glyph glyph-name="puzzle-piece" unicode="" horiz-adv-x="1664" +d="M1664 438c0 -103 -59 -189 -168 -189c-122 0 -154 111 -264 111c-80 0 -110 -50 -110 -124c0 -78 32 -153 31 -230v-5c-11 0 -22 0 -33 -1c-103 -10 -207 -30 -311 -30c-71 0 -145 28 -145 110c0 110 111 142 111 264c0 109 -86 168 -189 168c-105 0 -202 -58 -202 -173 +c0 -127 97 -182 97 -251c0 -35 -22 -66 -46 -89c-31 -29 -75 -35 -117 -35c-82 0 -164 11 -245 24c-18 3 -37 5 -55 8l-13 2c-2 1 -5 1 -5 2v1024c4 -3 63 -10 73 -12c81 -13 163 -24 245 -24c42 0 86 6 117 35c24 23 46 54 46 89c0 69 -97 124 -97 251 +c0 115 97 173 203 173c102 0 188 -59 188 -168c0 -122 -111 -154 -111 -264c0 -82 74 -110 145 -110c115 0 229 26 343 32v-2c-3 -4 -10 -63 -12 -73c-13 -81 -24 -163 -24 -245c0 -42 6 -86 35 -117c23 -24 54 -46 89 -46c69 0 124 97 251 97c115 0 173 -97 173 -202z" /> + <glyph glyph-name="css3" unicode="" horiz-adv-x="1768" +d="M263 1408h1505l-266 -1333l-804 -267l-698 267l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208z" /> + <glyph glyph-name="skyatlas" unicode="" horiz-adv-x="2048" +d="M1430 953c0 0 -1 1 0 0zM1690 749c194 0 358 -145 358 -343c0 -211 -168 -366 -376 -366c-531 0 -629 799 -1151 799c-202 0 -349 -129 -349 -336c0 -214 160 -343 367 -343c136 0 291 57 401 136c18 13 54 52 73 52s35 -16 35 -35c0 -25 -42 -61 -60 -77 +c-131 -114 -321 -196 -495 -196c-267 0 -493 189 -493 464s216 477 489 477c593 0 712 -787 1158 -787c134 0 235 87 235 224c0 127 -98 223 -224 223c-56 0 -112 -37 -150 -37c-27 0 -51 23 -51 50c0 37 17 76 17 116c0 213 -163 367 -374 367c-170 0 -256 -118 -284 -118 +c-20 0 -36 16 -36 36c0 18 13 33 25 46c81 92 207 140 329 140c254 0 445 -187 445 -441c0 -22 -1 -44 -4 -66c38 10 77 15 115 15z" /> + <glyph glyph-name="level-down" unicode="" horiz-adv-x="1024" +d="M32 1280h704c18 0 32 -15 32 -33v-863h192c25 0 47 -15 58 -37c11 -23 7 -50 -9 -69l-320 -384c-24 -29 -74 -29 -98 0l-320 384c-16 19 -19 46 -9 69c11 22 33 37 58 37h192v640h-320c-9 0 -18 4 -25 11l-160 192c-8 9 -9 23 -4 34s17 19 29 19z" /> + <glyph glyph-name="stack-overflow" unicode="" horiz-adv-x="1514" +d="M1278 -96v480h160v-640h-1438v640h160v-480h1118zM336 428l33 157l783 -165l-33 -156zM439 802l67 146l725 -339l-67 -145zM640 1158l102 123l614 -513l-102 -123zM1037 1536l477 -641l-128 -96l-477 641zM319 65v159h800v-159h-800z" /> + <glyph glyph-name="check-square-o" unicode="" horiz-adv-x="1663" +d="M1408 606v-318c0 -159 -129 -288 -288 -288h-832c-159 0 -288 129 -288 288v832c0 159 129 288 288 288h832c40 0 80 -8 117 -25c9 -4 16 -13 18 -23c2 -11 -1 -21 -9 -29l-49 -49c-6 -6 -15 -10 -23 -10c-3 0 -6 1 -9 2c-15 4 -30 6 -45 6h-832 +c-88 0 -160 -72 -160 -160v-832c0 -88 72 -160 160 -160h832c88 0 160 72 160 160v254c0 8 3 16 9 22l64 64c7 7 15 10 23 10c4 0 8 -1 12 -3c12 -5 20 -16 20 -29zM1639 1095l-814 -814c-32 -32 -82 -32 -114 0l-430 430c-32 32 -32 82 0 114l110 110c32 32 82 32 114 0 +l263 -263l647 647c32 32 82 32 114 0l110 -110c32 -32 32 -82 0 -114z" /> + <glyph glyph-name="emby" unicode="" horiz-adv-x="1534" +d="M474 224l-62 -62l-412 415l356 356l-60 61l414 414l355 -355l58 57l411 -414l-352 -352l58 -58l-414 -414zM1091 633l-496 291v-578z" /> + <glyph glyph-name="hand-spock-o" unicode="" horiz-adv-x="1920" +d="M459 -256c-103 0 -192 70 -217 170l-101 401c-8 35 -13 72 -13 108c0 23 0 45 -5 67l-116 477c-5 19 -7 38 -7 57c0 124 94 226 217 239c22 113 119 193 235 193c111 0 207 -76 233 -184l83 -348l103 428c26 108 122 184 233 184c119 0 217 -86 236 -202 +c123 -14 212 -118 212 -241c0 -19 -3 -39 -7 -59l-123 -512c80 60 138 118 243 118c139 0 255 -113 255 -253c0 -84 -41 -162 -107 -212l-507 -380c-44 -33 -98 -51 -153 -51h-694zM1104 1408c-51 0 -96 -36 -108 -86l-164 -682h-127l-145 602c-12 50 -57 86 -108 86 +c-64 0 -112 -51 -112 -113c0 -10 1 -19 3 -28l132 -547h-26l-99 408c-12 49 -57 88 -109 88c-62 0 -113 -50 -113 -112c0 -9 1 -18 3 -26l116 -478c14 -58 4 -116 19 -174l100 -401c11 -43 49 -73 93 -73h694c27 0 54 9 76 26l507 379c34 26 56 67 56 110 +c0 70 -58 125 -127 125c-28 0 -55 -9 -77 -26l-307 -230v227c0 8 129 538 139 581c2 9 4 19 4 29c0 62 -47 115 -111 115c-52 0 -97 -36 -109 -86l-116 -482h-26l150 624c2 9 3 19 3 28c0 63 -46 116 -111 116z" /> + <glyph glyph-name="scuttlebutt" unicode="" horiz-adv-x="1709" +d="M760 -126c-31 4 -114 28 -131 38c-5 3 -12 10 -16 16l-8 10l-7 -5c-14 -9 -14 -9 -151 60c-70 36 -134 68 -141 71c-21 10 -30 25 -45 74c-5 17 -6 19 -12 21c-18 7 -84 50 -121 78c-27 21 -66 60 -70 70c-10 25 -31 91 -37 112c-18 60 -21 88 -21 178c0 60 0 68 4 76 +c5 11 24 29 46 43c29 19 128 68 192 96l8 4l-4 8c-3 5 -16 24 -29 42l-24 33h-10c-21 1 -28 3 -48 16s-21 13 -39 41c-56 87 -91 163 -95 205c-4 46 23 129 52 160c9 9 17 16 28 22c16 8 17 8 40 8c19 0 25 -1 35 -5c27 -11 44 -29 49 -50c2 -11 2 -17 -1 -43 +c-9 -68 -1 -127 21 -163c4 -6 16 -19 28 -29c19 -17 38 -37 38 -43c0 -7 4 -1 11 15c9 23 70 138 78 148l5 8l-2 25c-8 86 -8 113 0 139c5 18 16 33 31 39c26 12 96 16 121 8c15 -5 28 -14 35 -26c5 -7 6 -12 7 -27l1 -18l52 8c71 11 95 16 116 24c26 10 38 13 57 13 +c29 0 45 -6 104 -37c137 -72 176 -97 219 -139c24 -23 28 -31 49 -73c17 -34 19 -37 38 -57l20 -21l23 6c28 8 37 8 49 2c10 -5 22 -21 22 -29c0 -2 4 -9 9 -16c7 -10 24 -34 39 -58c0 0 6 1 12 3c13 5 27 6 38 1c4 -2 17 -10 28 -19c11 -8 20 -15 21 -15s12 -7 25 -15 +c13 -9 27 -17 32 -18s14 -6 20 -9c13 -8 27 -10 64 -13c15 -1 31 -4 35 -5c18 -5 46 -31 55 -51c8 -18 5 -43 -9 -65c-4 -6 -18 -21 -30 -33s-23 -23 -24 -26s1 -24 4 -47c8 -67 4 -101 -13 -127c-8 -12 -29 -26 -59 -40c-13 -6 -24 -13 -27 -15s-8 -14 -12 -26 +c-9 -26 -17 -44 -26 -54c-8 -10 -10 -18 -13 -57c-4 -53 -10 -71 -37 -99c-20 -21 -37 -29 -70 -39c-11 -3 -49 -16 -85 -28c-35 -12 -66 -22 -68 -22s-6 -5 -9 -11c-14 -25 -33 -48 -63 -75c-48 -43 -116 -83 -163 -97c-9 -3 -16 -7 -24 -14c-43 -38 -88 -56 -154 -62 +c-28 -2 -42 -3 -63 0zM820 -67c13 1 31 5 41 7c18 4 49 17 49 20c0 1 -9 6 -20 12s-37 22 -56 36c-70 48 -117 94 -124 121c-9 35 -9 157 1 321c2 29 3 52 2 53c-3 3 -131 99 -131 99c-2 -2 -20 -148 -25 -210c-5 -54 -7 -145 -4 -170c3 -21 10 -46 32 -105 +c24 -66 44 -109 63 -139l9 -14l26 -8c44 -15 83 -25 104 -25c5 0 20 1 33 2zM559 26c-15 35 -29 69 -47 122c-14 40 -15 45 -17 70c-6 75 4 212 26 365c4 29 7 55 7 57c0 3 -11 12 -33 28c-30 22 -50 32 -58 32c-5 0 -83 -100 -120 -153c-34 -49 -63 -103 -68 -122 +c-2 -10 42 -188 64 -258c16 -52 -1 -38 137 -108l120 -60s-5 12 -11 27zM988 8c27 8 80 38 113 63c21 16 45 38 44 39c-1 0 -24 -2 -51 -6c-28 -4 -58 -7 -68 -7c-45 0 -82 18 -99 48c-8 14 -22 51 -31 82c-7 24 -8 30 -9 64c-1 30 -3 43 -7 59c-6 22 -18 48 -26 55 +c-9 8 -48 36 -57 40c-5 2 -13 7 -18 10l-9 6l-1 -10c-4 -31 -7 -124 -7 -206c0 -107 -2 -99 22 -123c49 -49 155 -116 185 -117c4 0 13 1 19 3zM1086 191c27 4 59 9 71 11c31 6 92 24 138 41c22 8 49 17 61 20c39 11 51 21 55 44c1 8 2 8 -3 7c-48 -15 -87 -22 -143 -24 +c-94 -4 -148 8 -226 46c-23 12 -57 33 -74 47c-5 4 -9 7 -9 7s3 -13 6 -27c5 -20 7 -33 8 -62c2 -39 6 -57 22 -97c6 -14 7 -16 13 -18c12 -4 31 -2 81 5zM232 241c-1 2 -10 37 -20 78s-19 77 -20 79c-4 8 -3 30 3 48c18 54 75 143 164 253c11 13 19 25 19 26 +c0 3 -40 24 -53 27c-7 2 -20 6 -27 9c-13 5 -14 5 -22 1c-4 -2 -28 -13 -53 -24c-76 -34 -138 -68 -159 -84l-7 -5l1 -71c1 -78 3 -88 17 -138c6 -20 26 -79 36 -106c3 -8 33 -36 58 -55c20 -15 62 -42 64 -42c0 0 0 2 -1 4v0zM1306 380c32 4 65 11 87 20c16 7 40 20 47 27 +c5 5 12 18 11 20l-24 -2c-44 -4 -92 -5 -118 -2c-32 3 -55 10 -86 26c-59 29 -105 72 -127 117c-11 23 -13 31 -13 52c0 63 43 117 183 229c22 17 40 32 41 33c0 1 -7 14 -17 29l-18 28l-11 2c-11 2 -13 2 -44 -8c-41 -14 -52 -16 -104 -22c-23 -2 -48 -7 -55 -9 +c-17 -5 -40 -21 -57 -39c-19 -20 -75 -92 -90 -116c-19 -29 -19 -33 -11 -52c4 -9 13 -27 20 -41s16 -33 20 -43c6 -16 9 -25 23 -88c7 -34 14 -49 32 -69c31 -33 75 -60 131 -80c49 -17 105 -20 180 -12zM889 488c0 0 -1 6 -3 12s-6 26 -10 44c-8 41 -14 58 -29 86 +c-16 31 -34 71 -37 83c-3 14 1 37 9 58c10 24 35 62 74 111c54 68 87 98 126 115c19 8 40 13 80 17c18 2 35 4 38 5c5 1 5 1 -2 9c-11 13 -23 33 -36 62c-10 22 -16 31 -26 42c-29 31 -63 54 -150 100c-35 18 -68 36 -73 39c-14 9 -36 17 -46 17c-5 0 -19 -4 -31 -9 +c-25 -10 -61 -17 -144 -30c-29 -5 -53 -9 -54 -9c-3 -3 -2 -38 1 -62c7 -50 24 -108 42 -142c9 -18 10 -29 4 -39c-5 -8 -27 -28 -34 -31c-9 -4 -12 -25 -11 -72c0 -33 0 -38 6 -57c9 -29 14 -67 13 -106l-1 -32l86 -65c112 -84 134 -100 153 -111c9 -5 24 -15 34 -22 +c16 -12 21 -15 21 -13zM1392 530c61 4 104 12 148 30l26 11v13c1 12 -2 47 -4 49c0 1 -6 -1 -10 -3c-22 -12 -53 -16 -74 -9c-34 12 -72 52 -86 90c-5 13 -5 18 -4 34s1 21 7 34c8 18 25 39 39 51c6 5 11 9 11 10s-3 3 -7 4c-4 2 -14 8 -22 14l-14 11l-19 -16 +c-10 -9 -37 -32 -61 -51c-70 -55 -85 -67 -114 -98c-24 -24 -29 -32 -36 -46c-7 -13 -6 -18 -4 -28c10 -26 42 -57 80 -77c44 -24 66 -28 144 -23zM1533 717c27 16 74 54 62 49c-2 -1 -9 -2 -16 -3c-15 -1 -28 5 -38 17c-6 8 -8 8 -15 6c-18 -5 -43 -23 -51 -36 +c-4 -7 -5 -9 -2 -15c1 -4 8 -12 14 -19c11 -11 12 -12 20 -11c5 1 17 6 26 12zM525 805c-4 36 -5 39 -38 113c-9 21 -11 22 -17 22c-8 0 -16 4 -23 11c-3 3 -13 28 -23 55c-13 36 -18 48 -19 46c-4 -5 -29 -57 -35 -72c-10 -27 -13 -43 -19 -90c-4 -25 -7 -48 -7 -50 +c0 -3 5 -4 15 -7c8 -2 18 -7 23 -10s14 -7 20 -11s16 -10 21 -13s24 -10 41 -16c23 -8 35 -14 47 -22l16 -11v11c0 6 0 26 -2 44zM210 969c12 6 27 21 27 26c0 1 -11 11 -24 23c-40 34 -56 64 -67 125c-5 27 -5 80 0 114c4 24 4 25 0 27c-14 9 -30 11 -43 4 +c-9 -4 -10 -7 -21 -30c-22 -47 -28 -86 -19 -114c10 -32 40 -90 75 -146c26 -41 40 -47 72 -29zM519 1007c20 5 27 8 36 14c2 2 2 6 -4 22c-12 30 -23 69 -29 103c-7 36 -7 79 -3 124c3 27 2 70 -1 73c-5 5 -72 -1 -79 -7c-4 -4 -6 -29 -3 -62c-2 -41 16 -99 14 -134 +c-2 -25 0 -32 22 -93c14 -39 16 -45 20 -45c2 0 15 2 27 5z" /> + <glyph glyph-name="social-home" unicode="" horiz-adv-x="1486" +d="M491 894h482v-621h-482v621v0zM1050 538h341v-666h-341v666zM91 273v0v620h318v-620h-318zM975 -128h-882v326h882v-326v0zM1053 894h340v-279h-340v279zM1452 1109v0c20 -5 34 -22 34 -44c0 -26 -93 -93 -93 -93h-1300s-87 62 -92 83s5 42 25 51l624 292 +c16 9 99 9 112 0z" /> + <glyph glyph-name="leanpub" unicode="" horiz-adv-x="2048" +d="M1893 1144l155 -1272c-93 0 -173 19 -257 57c-125 57 -255 91 -393 91c-142 0 -273 -47 -374 -148c-101 101 -232 148 -374 148c-138 0 -268 -34 -393 -91c-81 -36 -163 -57 -252 -57h-5l155 1272c143 81 317 127 482 127c135 0 274 -28 387 -106c113 78 252 106 387 106 +c165 0 339 -46 482 -127zM1398 157c190 0 320 -51 492 -122l-124 1021c-112 51 -245 78 -368 78c-140 0 -271 -44 -374 -141c-103 97 -234 141 -374 141c-123 0 -256 -27 -368 -78l-124 -1021c172 71 302 122 492 122c137 0 258 -35 374 -108c116 73 237 108 374 108z +M1438 191l-40 1c-132 3 -261 -32 -374 -102c-113 70 -242 102 -374 102c-166 0 -299 -39 -450 -101l114 941c104 43 224 66 336 66c150 0 269 -48 374 -155c101 103 215 152 359 155z" /> + <glyph glyph-name="arrow-circle-left" unicode="" +d="M1280 576v128c0 35 -29 64 -64 64h-502l189 189c12 12 19 28 19 45s-7 33 -19 45l-91 91c-12 12 -28 18 -45 18s-33 -6 -45 -18l-362 -362l-91 -91c-12 -12 -18 -28 -18 -45s6 -33 18 -45l91 -91l362 -362c12 -12 28 -18 45 -18s33 6 45 18l91 91c12 12 18 28 18 45 +s-6 33 -18 45l-189 189h502c35 0 64 29 64 64zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" /> + <glyph glyph-name="exclamation-triangle" unicode="" horiz-adv-x="1792" +d="M1024 161v190c0 18 -14 33 -32 33h-192c-18 0 -32 -15 -32 -33v-190c0 -18 14 -33 32 -33h192c18 0 32 15 32 33zM1022 535l18 459c0 6 -3 14 -10 19c-6 5 -15 11 -24 11h-220c-9 0 -18 -6 -24 -11c-7 -5 -10 -15 -10 -21l17 -457c0 -13 15 -23 34 -23h185 +c18 0 33 10 34 23zM1008 1469l768 -1408c22 -39 21 -87 -2 -126s-65 -63 -110 -63h-1536c-45 0 -87 24 -110 63s-24 87 -2 126l768 1408c22 41 65 67 112 67s90 -26 112 -67z" /> + <glyph glyph-name="gift" unicode="" +d="M928 180v716h-320v-716c0 -35 29 -52 64 -52h192c35 0 64 17 64 52zM472 1024h195l-126 161c-11 13 -35 31 -69 31c-53 0 -96 -43 -96 -96s43 -96 96 -96zM1160 1120c0 53 -43 96 -96 96c-34 0 -58 -18 -69 -31l-125 -161h194c53 0 96 43 96 96zM1536 864v-320 +c0 -18 -14 -32 -32 -32h-96v-416c0 -53 -43 -96 -96 -96h-1088c-53 0 -96 43 -96 96v416h-96c-18 0 -32 14 -32 32v320c0 18 14 32 32 32h440c-124 0 -224 100 -224 224s100 224 224 224c67 0 129 -28 168 -77l128 -165l128 165c39 49 101 77 168 77 +c124 0 224 -100 224 -224s-100 -224 -224 -224h440c18 0 32 -14 32 -32z" /> + <glyph glyph-name="cogs" unicode="" horiz-adv-x="1920" +d="M896 640c0 141 -115 256 -256 256s-256 -115 -256 -256s115 -256 256 -256s256 115 256 256zM1664 128c0 70 -58 128 -128 128s-128 -58 -128 -128c0 -71 58 -128 128 -128c71 0 128 58 128 128zM1664 1152c0 70 -58 128 -128 128s-128 -58 -128 -128 +c0 -71 58 -128 128 -128c71 0 128 58 128 128zM1280 731v-185c0 -13 -10 -28 -23 -30l-155 -24c-8 -26 -19 -51 -32 -76c28 -40 58 -77 90 -115c4 -6 7 -12 7 -20c0 -7 -2 -14 -7 -19c-20 -27 -132 -149 -161 -149c-8 0 -15 3 -21 7l-115 90c-25 -13 -50 -23 -77 -31 +c-5 -51 -10 -106 -23 -155c-4 -14 -16 -24 -30 -24h-186c-14 0 -28 11 -30 25l-23 153c-26 8 -51 19 -75 31l-118 -89c-5 -5 -13 -7 -20 -7c-8 0 -15 3 -21 8c-26 24 -144 131 -144 160c0 7 3 13 7 19c29 38 59 75 88 114c-14 27 -26 54 -35 82l-152 24c-14 2 -24 15 -24 29 +v185c0 13 10 28 23 30l155 24c8 26 19 51 32 76c-28 40 -58 77 -90 115c-4 6 -7 13 -7 20s2 14 7 20c20 27 132 148 161 148c8 0 15 -3 21 -7l115 -90c25 13 50 23 77 32c5 50 10 105 23 154c4 14 16 24 30 24h186c14 0 28 -11 30 -25l23 -153c26 -8 51 -19 75 -31l118 89 +c6 5 13 7 20 7c8 0 15 -3 21 -8c26 -24 144 -132 144 -160c0 -7 -3 -13 -7 -19c-29 -39 -59 -75 -87 -114c13 -27 25 -54 34 -82l152 -23c14 -3 24 -16 24 -30zM1920 198v-140c0 -15 -129 -29 -149 -31c-8 -19 -18 -36 -30 -52c9 -20 51 -120 51 -138c0 -3 -1 -5 -4 -7 +c-12 -7 -119 -71 -124 -71c-13 0 -88 100 -98 115c-10 -1 -20 -2 -30 -2s-20 1 -30 2c-10 -15 -85 -115 -98 -115c-5 0 -112 64 -124 71c-3 2 -4 5 -4 7c0 17 42 118 51 138c-12 16 -22 33 -30 52c-20 2 -149 16 -149 31v140c0 15 129 29 149 31c8 18 18 36 30 52 +c-9 20 -51 121 -51 138c0 2 1 5 4 7c12 6 119 70 124 70c13 0 88 -99 98 -114c10 1 20 2 30 2s20 -1 30 -2c28 39 58 78 92 112l6 2c5 0 112 -63 124 -70c3 -2 4 -5 4 -7c0 -18 -42 -118 -51 -138c12 -16 22 -34 30 -52c20 -2 149 -16 149 -31zM1920 1222v-140 +c0 -15 -129 -29 -149 -31c-8 -19 -18 -36 -30 -52c9 -20 51 -120 51 -138c0 -3 -1 -5 -4 -7c-12 -7 -119 -71 -124 -71c-13 0 -88 100 -98 115c-10 -1 -20 -2 -30 -2s-20 1 -30 2c-10 -15 -85 -115 -98 -115c-5 0 -112 64 -124 71c-3 2 -4 5 -4 7c0 17 42 118 51 138 +c-12 16 -22 33 -30 52c-20 2 -149 16 -149 31v140c0 15 129 29 149 31c8 18 18 36 30 52c-9 20 -51 121 -51 138c0 2 1 5 4 7c12 6 119 70 124 70c13 0 88 -99 98 -114c10 1 20 2 30 2s20 -1 30 -2c28 39 58 78 92 112l6 2c5 0 112 -63 124 -70c3 -2 4 -5 4 -7 +c0 -18 -42 -118 -51 -138c12 -16 22 -34 30 -52c20 -2 149 -16 149 -31z" /> + <glyph glyph-name="hackaday" unicode="" horiz-adv-x="1686" +d="M215 1408c118 0 214 -95 215 -213v-2c0 -11 -1 -21 -3 -31l168 -149c-60 -45 -109 -106 -142 -178l-173 154c-21 -7 -42 -11 -65 -11c-119 0 -215 96 -215 215c0 14 1 28 4 42l138 -122l150 167l-134 120c18 5 37 8 57 8zM1247 436l162 -143c17 5 45 9 62 9v0 +c118 0 214 -95 215 -213v-2c0 -13 -2 -26 -4 -39l-139 123l-150 -166l140 -124c-20 -6 -41 -9 -62 -9c-119 0 -215 96 -215 215c0 12 1 24 3 35l-140 124c56 50 100 115 128 190zM1471 1408c20 0 39 -3 57 -8l-134 -120l150 -167l138 122c3 -14 4 -28 4 -42 +c0 -119 -96 -215 -215 -215c-23 0 -44 4 -65 11l-174 -154c-33 72 -81 133 -141 178l167 149c-2 10 -2 20 -2 31v2c1 118 97 213 215 213zM439 436v0c28 -75 71 -140 127 -190l-139 -124c2 -11 3 -23 3 -35c0 -119 -96 -215 -215 -215c-21 0 -42 3 -62 9l140 124l-150 166 +l-139 -123c-2 13 -4 26 -4 39v2c1 118 97 213 215 213v0c17 0 45 -4 62 -9zM843 1062c222 0 401 -199 401 -445c0 -153 -69 -288 -175 -368c8 -12 12 -26 12 -41c0 -42 -33 -76 -75 -76s-76 34 -76 76c0 4 0 8 1 12h-13c1 -3 0 -9 0 -12v0c0 -42 -33 -76 -75 -76 +s-76 34 -76 76c0 4 0 8 1 12h-10v-9c0 -43 -35 -79 -77 -79s-77 36 -77 79c0 15 4 28 11 40c-105 80 -173 214 -173 366c0 246 179 445 401 445zM670 730c-8 0 -15 -1 -22 -3c-28 -4 -52 -23 -69 -45c-15 -18 -26 -40 -26 -64c-2 -20 1 -39 5 -58c5 -23 21 -41 39 -54 +c8 -7 20 -16 31 -8c7 9 1 23 7 33c2 10 9 18 18 23c18 9 37 18 57 25c16 5 29 15 43 24c18 14 30 40 21 62c-10 18 -22 34 -39 46c-19 12 -42 19 -65 19zM1015 730c-23 0 -45 -7 -64 -19c-17 -12 -29 -28 -39 -46c-9 -22 3 -48 21 -62c14 -9 27 -19 43 -24 +c20 -7 38 -16 56 -25c9 -5 17 -13 19 -23c6 -10 0 -24 7 -33c11 -8 23 1 31 8c18 13 34 31 39 54c4 19 7 38 5 58c0 24 -11 46 -26 64c-17 22 -41 41 -69 45c-7 2 -15 3 -23 3zM844 502c-20 1 -44 -88 -40 -126c12 -51 16 36 40 36c23 -1 19 -88 37 -35 +c5 35 -16 124 -37 125z" /> + <glyph glyph-name="frown-o" unicode="" +d="M1134 307c11 -34 -8 -69 -41 -80c-34 -11 -70 8 -81 42c-33 107 -132 179 -244 179s-211 -72 -244 -179c-11 -34 -47 -53 -80 -42c-34 11 -53 46 -42 80c50 161 197 269 366 269s316 -108 366 -269zM640 896c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128 +s128 -57 128 -128zM1152 896c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128s128 -57 128 -128zM1408 640c0 353 -287 640 -640 640s-640 -287 -640 -640s287 -640 640 -640s640 287 640 640zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768 +s344 768 768 768s768 -344 768 -768z" /> + <glyph glyph-name="opera" unicode="" horiz-adv-x="1792" +d="M1493 1308c-105 70 -228 110 -359 110c-213 0 -401 -109 -533 -273c-96 -120 -163 -290 -168 -484v-42c5 -194 72 -364 168 -484c132 -164 320 -273 533 -273c131 0 254 40 359 110c-158 -142 -368 -228 -597 -228c-14 0 -29 0 -43 1c-475 22 -853 414 -853 895 +c0 495 401 896 896 896h3c228 -1 436 -87 594 -228zM1792 640c0 -261 -112 -495 -290 -659c-68 -41 -143 -63 -222 -63c-92 0 -179 30 -255 84c203 74 353 331 353 638c0 306 -149 563 -352 638c76 53 162 83 254 83c81 0 157 -23 226 -65c176 -164 286 -397 286 -656z" /> + <glyph glyph-name="viadeo" unicode="" horiz-adv-x="1278" +d="M1050 430c0 -143 -50 -269 -147 -374c-101 -110 -229 -161 -378 -161c-148 0 -277 50 -378 161c-97 105 -147 231 -147 374c0 297 224 540 525 540c62 0 124 -10 182 -31c-20 -39 -34 -82 -39 -126c-45 19 -94 28 -143 28c-227 0 -394 -194 -394 -414 +c0 -224 166 -407 394 -407s393 183 393 407c0 57 -10 113 -32 166c44 9 86 26 123 49c28 -67 41 -140 41 -212zM846 619c0 111 -19 221 -55 326c3 -34 3 -69 3 -103c0 -268 -53 -707 -342 -817c20 -3 41 -5 62 -5l14 1c216 136 318 346 318 598zM791 947v-2 +c-52 153 -124 301 -206 440c126 -85 195 -291 206 -438zM1035 744c-62 0 -117 33 -160 75c102 56 231 143 290 247c7 14 19 40 21 56c-58 -130 -206 -232 -344 -264c-22 34 -35 72 -35 113c0 48 24 112 60 147c41 39 102 59 157 74c80 22 145 84 180 159 +c52 -74 74 -164 74 -253c0 -45 -7 -127 -24 -170c-37 -90 -112 -184 -219 -184z" /> + <glyph glyph-name="battery-empty" unicode="" horiz-adv-x="2304" +d="M2176 960c71 0 128 -57 128 -128v-384c0 -71 -57 -128 -128 -128v-160c0 -88 -72 -160 -160 -160h-1856c-88 0 -160 72 -160 160v960c0 88 72 160 160 160h1856c88 0 160 -72 160 -160v-160zM2176 448v384h-128v288c0 18 -14 32 -32 32h-1856c-18 0 -32 -14 -32 -32v-960 +c0 -18 14 -32 32 -32h1856c18 0 32 14 32 32v288h128z" /> + <glyph glyph-name="freedombox" unicode="" horiz-adv-x="1816" +d="M152 1274v0h10c90 -2 180 -36 272 -79c4 -2 11 -5 15 -7c7 -3 13 -7 20 -10c116 -58 199 -126 267 -210l3 -3c2 -2 4 -7 6 -9l-255 -148l9 -492l37 465l50 -29l10 -491l37 464l49 -29l10 -490l37 463l50 -29l9 -488l37 461l50 -29l10 -487l37 466l422 245l-267 155 +c2 3 5 5 7 8s5 6 7 9c70 83 157 151 278 208c101 48 200 86 296 86h9c45 -1 84 -15 110 -44c80 -92 -8 -177 -39 -293c-41 -155 6 -321 -118 -429c-43 -37 -93 -47 -143 -52c65 -77 103 -183 82 -292c-4 -21 -10 -42 -18 -61c-6 -17 -13 -32 -22 -47l-9 -15 +c-2 -2 -3 -5 -5 -7c-63 -94 -168 -154 -281 -161c-6 0 -11 -1 -17 -1h-9c-15 0 -39 3 -53 5c-19 3 -49 12 -67 19c-3 1 -7 2 -9 3c-69 29 -124 80 -159 143c-2 3 -4 5 -5 8c-2 3 -5 3 -7 0c-1 -3 -3 -5 -5 -8s-2 -5 -4 -8c-48 -81 -131 -140 -231 -157c-12 -2 -23 -3 -35 -4 +c-6 0 -12 -1 -18 -1c-169 -3 -327 118 -361 292c-21 109 18 215 83 292c-50 5 -101 15 -144 52c-124 108 -78 274 -119 429c-31 116 -118 201 -38 293c26 29 65 43 110 44h9z" /> + <glyph glyph-name="file-epub" unicode="" +d="M723 132l458 458l70 -71c24 -24 24 -64 0 -88l-483 -483c-24 -24 -65 -24 -89 0l-483 483c-24 24 -24 64 0 88l483 484c24 24 65 24 89 0l298 -299l-343 -343l-114 114l229 229l-115 114l-343 -343zM1468 1156c37 -37 68 -111 68 -164v-1152c0 -53 -43 -96 -96 -96h-1344 +c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h896c53 0 127 -31 164 -68zM1024 1400v-376h376c-6 17 -15 34 -22 41l-313 313c-7 7 -24 16 -41 22zM1408 -128v1024h-416c-53 0 -96 43 -96 96v416h-768v-1536h1280z" /> + <glyph glyph-name="chevron-circle-left" unicode="" +d="M909 141l102 102c25 25 25 65 0 90l-307 307l307 307c25 25 25 65 0 90l-102 102c-25 25 -65 25 -90 0l-454 -454c-25 -25 -25 -65 0 -90l454 -454c25 -25 65 -25 90 0zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" /> + <glyph glyph-name="signal" unicode="" horiz-adv-x="1792" +d="M256 96v-192c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM640 224v-320c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v320c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM1024 480v-576c0 -18 -14 -32 -32 -32h-192 +c-18 0 -32 14 -32 32v576c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM1408 864v-960c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v960c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM1792 1376v-1472c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v1472 +c0 18 14 32 32 32h192c18 0 32 -14 32 -32z" /> + <glyph glyph-name="sitemap" unicode="" horiz-adv-x="1792" +d="M1792 288v-320c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v320c0 53 43 96 96 96h96v192h-512v-192h96c53 0 96 -43 96 -96v-320c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v320c0 53 43 96 96 96h96v192h-512v-192h96c53 0 96 -43 96 -96v-320 +c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v320c0 53 43 96 96 96h96v192c0 70 58 128 128 128h512v192h-96c-53 0 -96 43 -96 96v320c0 53 43 96 96 96h320c53 0 96 -43 96 -96v-320c0 -53 -43 -96 -96 -96h-96v-192h512c70 0 128 -58 128 -128v-192h96 +c53 0 96 -43 96 -96z" /> + <glyph glyph-name="wheelchair-alt" unicode="" horiz-adv-x="1399" +d="M1370 723c21 -22 32 -52 29 -82l-44 -551c-5 -56 -51 -98 -106 -98c-3 0 -6 0 -9 1c-59 4 -102 56 -98 114l35 429l-143 -8c35 -72 55 -154 55 -240c0 -144 -56 -275 -148 -372l-137 137c56 62 91 145 91 235c0 194 -157 351 -350 351c-91 0 -173 -35 -236 -92l-137 138 +c77 73 175 123 284 141l264 300l-149 87l-181 -161c-44 -40 -111 -36 -150 8s-35 111 8 150l239 213c34 31 84 36 124 12c487 -283 488 -283 488 -283c26 -15 41 -41 48 -68c10 -39 3 -83 -26 -117l-205 -232l371 20c31 2 61 -9 83 -32zM1172 1180c-98 0 -178 79 -178 178 +c0 98 80 178 178 178c99 0 179 -80 179 -178c0 -99 -80 -178 -179 -178zM545 -62c72 0 140 23 196 61l139 -139c-92 -73 -209 -116 -335 -116c-301 0 -545 244 -545 544c0 127 43 243 116 336l139 -139c-38 -56 -60 -124 -60 -197c0 -193 157 -350 350 -350z" /> + <glyph glyph-name="external-link-square" unicode="" +d="M1280 608v480c0 35 -29 64 -64 64h-480c-26 0 -49 -16 -59 -39c-10 -24 -5 -52 14 -70l144 -144l-534 -534c-25 -25 -25 -65 0 -90l102 -102c25 -25 65 -25 90 0l534 534l144 -144c12 -13 28 -19 45 -19c8 0 17 2 25 5c23 10 39 33 39 59zM1536 1120v-960 +c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" /> + <glyph glyph-name="google" unicode="" horiz-adv-x="1505" +d="M768 750h725c7 -39 12 -77 12 -128c0 -438 -294 -750 -737 -750c-425 0 -768 343 -768 768s343 768 768 768c207 0 381 -76 515 -201l-209 -201c-57 55 -157 119 -306 119c-262 0 -476 -217 -476 -485s214 -485 476 -485c304 0 418 218 436 331h-436v264z" /> + <glyph glyph-name="volume-off" unicode="" horiz-adv-x="768" +d="M768 1184v-1088c0 -35 -29 -64 -64 -64c-17 0 -33 7 -45 19l-333 333h-262c-35 0 -64 29 -64 64v384c0 35 29 64 64 64h262l333 333c12 12 28 19 45 19c35 0 64 -29 64 -64z" /> + <glyph glyph-name="twitter" unicode="" horiz-adv-x="1576" +d="M1576 1128c-44 -64 -99 -121 -162 -167c1 -14 1 -28 1 -42c0 -427 -325 -919 -919 -919c-183 0 -353 53 -496 145c26 -3 51 -4 78 -4c151 0 290 51 401 138c-142 3 -261 96 -302 224c20 -3 40 -5 61 -5c29 0 58 4 85 11c-148 30 -259 160 -259 317v4 +c43 -24 93 -39 146 -41c-87 58 -144 157 -144 269c0 60 16 115 44 163c159 -196 398 -324 666 -338c-5 24 -8 49 -8 74c0 178 144 323 323 323c93 0 177 -39 236 -102c73 14 143 41 205 78c-24 -75 -75 -138 -142 -178c65 7 128 25 186 50z" /> + <glyph glyph-name="battery-full" unicode="" horiz-adv-x="2304" +d="M1920 1024v-768h-1664v768h1664zM2048 448h128v384h-128v288c0 18 -14 32 -32 32h-1856c-18 0 -32 -14 -32 -32v-960c0 -18 14 -32 32 -32h1856c18 0 32 14 32 32v288zM2304 832v-384c0 -71 -57 -128 -128 -128v-160c0 -88 -72 -160 -160 -160h-1856 +c-88 0 -160 72 -160 160v960c0 88 72 160 160 160h1856c88 0 160 -72 160 -160v-160c71 0 128 -57 128 -128z" /> + <glyph glyph-name="deaf" unicode="" horiz-adv-x="1792" +d="M1056 704c0 124 -101 224 -224 224s-224 -100 -224 -224c0 -35 -29 -64 -64 -64s-64 29 -64 64c0 194 158 352 352 352s352 -158 352 -352c0 -35 -29 -64 -64 -64s-64 29 -64 64zM835 1280c318 0 576 -258 576 -576c0 -166 -78 -255 -146 -334 +c-63 -72 -113 -129 -113 -242c0 -212 -172 -384 -384 -384c-35 0 -64 29 -64 64s29 64 64 64c141 0 256 115 256 256c0 161 77 249 144 326c62 71 115 132 115 250c0 247 -201 448 -448 448s-448 -201 -448 -448c0 -35 -29 -64 -64 -64s-64 29 -64 64c0 318 258 576 576 576 +zM591 561l226 -226l-579 -579c-16 -16 -42 -16 -58 0l-168 168c-16 16 -16 42 0 58zM1612 1524l168 -168c16 -16 16 -42 0 -59l-233 -233l-26 -25l-71 -71c-43 100 -109 188 -195 258l91 91l207 207c17 16 43 16 59 0z" /> + <glyph glyph-name="window-close-o" unicode="" horiz-adv-x="1792" +d="M1257 425l-146 -146c-13 -13 -33 -13 -46 0l-169 169l-169 -169c-13 -13 -33 -13 -46 0l-146 146c-13 13 -13 33 0 46l169 169l-169 169c-13 13 -13 33 0 46l146 146c13 13 33 13 46 0l169 -169l169 169c13 13 33 13 46 0l146 -146c13 -13 13 -33 0 -46l-169 -169 +l169 -169c13 -13 13 -33 0 -46zM256 128h1280v1024h-1280v-1024zM1792 1248v-1216c0 -88 -72 -160 -160 -160h-1472c-88 0 -160 72 -160 160v1216c0 88 72 160 160 160h1472c88 0 160 -72 160 -160z" /> + <glyph glyph-name="phone" unicode="" horiz-adv-x="1408" +d="M1408 296c0 -36 -16 -106 -31 -139c-21 -49 -77 -81 -122 -106c-59 -32 -119 -51 -186 -51c-93 0 -177 38 -262 69c-61 22 -120 49 -175 83c-170 105 -375 310 -480 480c-34 55 -61 114 -83 175c-31 85 -69 169 -69 262c0 67 19 127 51 186c25 45 57 101 106 122 +c33 15 103 31 139 31c7 0 14 0 21 -3c21 -7 43 -56 53 -76c32 -57 63 -115 96 -171c16 -26 46 -58 46 -89c0 -61 -181 -150 -181 -204c0 -27 25 -62 39 -86c101 -182 227 -308 409 -409c24 -14 59 -39 86 -39c54 0 143 181 204 181c31 0 63 -30 89 -46 +c56 -33 114 -64 171 -96c20 -10 69 -32 76 -53c3 -7 3 -14 3 -21z" /> + <glyph glyph-name="mars-double" unicode="" horiz-adv-x="1920" +d="M1536 1120c0 18 14 32 32 32h288c35 0 64 -29 64 -64v-288c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v134l-254 -255c98 -123 147 -286 117 -461c-42 -243 -240 -434 -484 -468c-286 -40 -539 131 -626 380c-316 16 -565 288 -544 613c18 274 235 502 508 533 +c161 19 311 -31 426 -122l255 254h-134c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h288c35 0 64 -29 64 -64v-288c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v134l-254 -255c40 -50 71 -107 93 -169c124 -6 237 -52 328 -124l255 254h-134c-18 0 -32 14 -32 32v64z +M1024 704c0 20 -2 39 -4 58c-215 -33 -380 -218 -380 -442c0 -20 2 -39 4 -58c215 33 380 218 380 442zM128 704c0 -226 169 -413 387 -443c-2 19 -3 39 -3 59c0 282 204 517 473 566c-70 157 -227 266 -409 266c-247 0 -448 -201 -448 -448zM1088 -128 +c247 0 448 201 448 448c0 226 -169 413 -387 443c2 -19 3 -39 3 -59c0 -282 -204 -517 -473 -566c70 -157 227 -266 409 -266z" /> + <glyph glyph-name="maxcdn" unicode="" horiz-adv-x="1755" +d="M1745 763l-164 -763h-334l178 832c8 35 3 67 -15 88c-17 21 -47 33 -83 33h-169l-204 -953h-334l204 953h-286l-204 -953h-334l204 953l-153 327h1276c135 0 258 -56 337 -154c80 -98 109 -231 81 -363z" /> + <glyph glyph-name="hand-peace-o" unicode="" +d="M1288 889c37 0 74 -7 107 -23c96 -43 141 -122 141 -226v-177c0 -63 -8 -126 -23 -186l-85 -339c-28 -114 -130 -194 -248 -194h-668c-141 0 -256 115 -256 256v401l-239 628c-11 29 -17 60 -17 91c0 141 115 256 256 256c106 0 202 -66 239 -165l17 -44v113 +c0 141 115 256 256 256s256 -115 256 -256v-261c16 3 32 5 48 5c92 0 176 -53 216 -135zM1072 896c-44 0 -84 -26 -102 -66l-74 -163l-71 -155h55c67 0 126 -47 140 -112l154 338c7 14 10 30 10 46c0 62 -50 112 -112 112zM1293 761c-76 0 -100 -61 -127 -121l-132 -290 +c-7 -14 -10 -30 -10 -46c0 -62 50 -112 112 -112c44 0 84 26 102 66l160 352c5 10 9 26 9 38c0 67 -48 113 -114 113zM128 1120c0 -16 3 -31 8 -46l248 -650v-69l102 111c27 29 66 46 106 46h198l106 233v535c0 71 -57 128 -128 128s-128 -57 -128 -128v-640h-64l-200 526 +c-19 49 -67 82 -120 82c-71 0 -128 -58 -128 -128zM1180 -128c59 0 110 40 124 97l85 339c13 50 19 103 19 155v91l-141 -310c-23 -51 -75 -84 -131 -84c-70 0 -131 51 -142 121c-27 -35 -69 -57 -114 -57h-208v32h208c61 0 116 50 116 112c0 61 -46 112 -108 112h-296 +c-31 0 -61 -13 -82 -36l-126 -136v-308c0 -71 57 -128 128 -128h668z" /> + <glyph glyph-name="envira" unicode="" horiz-adv-x="1792" +d="M896 720c-127 240 -244 474 -577 632c-199 94 -21 -37 -21 -37c181 -125 264 -294 361 -479c126 -241 316 -559 577 -671c260 -112 137 -50 24 34c-113 85 -273 348 -364 521zM549 177c-361 286 -341 628 -549 1359c1911 0 1467 -1269 1469 -1465l323 -327h-104l-281 285 +c-156 -17 -498 -138 -858 148z" /> + <glyph glyph-name="lastfm-square" unicode="" +d="M1432 484c0 141 -114 205 -234 239c-55 15 -100 28 -120 88c-1 5 -6 24 -6 28c0 48 38 83 85 83c22 0 53 1 71 -15h-1c19 -14 28 -30 39 -51l93 71c-15 21 -30 46 -49 64c-47 42 -91 49 -153 49c-105 0 -204 -86 -204 -195c0 -8 1 -15 2 -23c22 -136 91 -178 213 -213 +c60 -17 145 -44 146 -118v-5c1 -80 -66 -128 -141 -128c-82 0 -135 78 -167 144c-116 239 -134 538 -478 538c-207 0 -393 -191 -386 -396v-1c7 -214 154 -403 380 -403c107 0 207 25 279 110c12 16 23 33 31 51l-60 109c-56 -106 -125 -152 -245 -152 +c-158 0 -267 140 -267 291c0 139 128 273 268 273c160 0 218 -83 274 -226c67 -172 139 -456 371 -456c139 0 259 101 259 244zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" /> + <glyph glyph-name="home" unicode="" horiz-adv-x="1612" +d="M1382 544v-480c0 -35 -29 -64 -64 -64h-384v384h-256v-384h-384c-35 0 -64 29 -64 64v480c0 2 1 4 1 6l575 474l575 -474c1 -2 1 -4 1 -6zM1605 613l-62 -74c-5 -6 -13 -10 -21 -11h-3c-8 0 -15 2 -21 7l-692 577l-692 -577c-7 -5 -15 -8 -24 -7c-8 1 -16 5 -21 11 +l-62 74c-11 13 -9 34 4 45l719 599c42 35 110 35 152 0l244 -204v195c0 18 14 32 32 32h192c18 0 32 -14 32 -32v-408l219 -182c13 -11 15 -32 4 -45z" /> + <glyph glyph-name="empire" unicode="" horiz-adv-x="1792" +d="M874 -102v-66c-282 8 -529 160 -668 385l58 34c21 -35 46 -68 73 -99l65 57c94 -107 222 -183 368 -212l-17 -86c39 -7 80 -12 121 -13zM276 428l-83 -28c14 -39 30 -76 49 -112l-57 -33c-62 114 -98 246 -98 385s36 271 98 385l57 -33c-19 -35 -36 -73 -49 -112l82 -28 +c-23 -66 -35 -138 -35 -212s13 -146 36 -212zM1528 251l58 -34c-139 -225 -386 -377 -668 -385v66c41 1 82 6 121 13l-17 86c146 29 274 105 368 212l65 -57c27 31 52 64 73 99zM1377 805l-233 -80c9 -27 14 -55 14 -85s-5 -58 -14 -85l232 -80c-21 -63 -55 -120 -98 -169 +l-185 162c-37 -43 -88 -73 -147 -85l48 -241c-31 -6 -64 -10 -98 -10s-67 4 -98 10l48 241c-59 12 -110 42 -147 85l-185 -162c-43 49 -77 106 -98 169l232 80c-9 27 -14 55 -14 85s5 58 14 85l-233 80c22 63 56 120 99 169l185 -162c37 43 88 74 147 86l-48 240 +c31 7 64 10 98 10s67 -3 98 -10l-48 -240c59 -12 110 -43 147 -86l185 162c43 -49 77 -106 99 -169zM874 1448v-66c-41 -1 -82 -5 -121 -13l17 -86c-146 -28 -274 -104 -368 -211l-65 56c-27 -30 -51 -63 -73 -98l-57 33c139 226 385 377 667 385zM1705 640 +c0 -139 -36 -271 -98 -385l-57 33c19 36 35 73 49 112l-83 28c23 66 36 138 36 212s-12 146 -35 212l82 28c-13 39 -30 77 -49 112l57 33c62 -114 98 -246 98 -385zM1585 1063l-57 -33c-22 35 -46 68 -73 98l-65 -56c-94 107 -222 183 -368 211l17 86c-39 8 -80 12 -121 13 +v66c282 -8 528 -159 667 -385zM1748 640c0 470 -382 852 -852 852s-852 -382 -852 -852s382 -852 852 -852s852 382 852 852zM1792 640c0 -495 -401 -896 -896 -896s-896 401 -896 896s401 896 896 896s896 -401 896 -896z" /> + <glyph glyph-name="server" unicode="" horiz-adv-x="1792" +d="M128 128h1024v128h-1024v-128zM128 640h1024v128h-1024v-128zM1696 192c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96s96 43 96 96zM128 1152h1024v128h-1024v-128zM1696 704c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96s96 43 96 96zM1696 1216 +c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96s96 43 96 96zM1792 384v-384h-1792v384h1792zM1792 896v-384h-1792v384h1792zM1792 1408v-384h-1792v384h1792z" /> + <glyph glyph-name="inkscape" unicode="" +d="M755 1398v0c47 0 95 -17 131 -52l588 -601c234 -234 -259 -288 -401 -371c-50 -51 153 -85 132 -147c-42 -126 -157 -45 -280 -171c-50 -51 95 -46 45 -97c-93 -68 -285 -115 -300 -32c-21 117 -135 68 -185 119s101 104 51 155s-299 97 -349 148s191 88 141 139 +c-138 68 -461 41 -269 278l567 580c34 35 82 52 129 52zM760 1343v0c-34 0 -68 -13 -93 -38c-49 -50 -140 -138 -219 -223c-45 -45 -40 -109 10 -109h123l80 139l49 -199l149 95l93 -49l22 131l111 -89c12 12 12 54 -9 76l-224 228c-24 25 -58 38 -92 38zM491 456 +c-74 0 219 -119 279 -103c27 14 40 34 21 38c-56 9 -285 56 -300 65zM1390 297c43 -1 86 -22 100 -63c0 -54 -212 -36 -212 -7c13 47 63 71 112 70zM409 172c26 0 50 -8 64 -26c-23 -61 -101 -115 -151 -72c-57 50 21 99 87 98zM1251 168c71 -14 85 -65 71 -79 +c-64 -38 -136 21 -71 79z" /> + <glyph glyph-name="search-minus" unicode="" horiz-adv-x="1664" +d="M1024 736v-64c0 -17 -15 -32 -32 -32h-576c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h576c17 0 32 -15 32 -32zM1152 704c0 247 -201 448 -448 448s-448 -201 -448 -448s201 -448 448 -448s448 201 448 448zM1664 -128c0 -71 -57 -128 -128 -128c-34 0 -67 14 -90 38 +l-343 342c-117 -81 -257 -124 -399 -124c-389 0 -704 315 -704 704s315 704 704 704s704 -315 704 -704c0 -142 -43 -282 -124 -399l343 -343c23 -23 37 -56 37 -90z" /> + <glyph glyph-name="leaf" unicode="" horiz-adv-x="1792" +d="M1280 832c0 35 -29 64 -64 64c-354 0 -582 -148 -813 -403c-12 -13 -19 -27 -19 -45c0 -35 29 -64 64 -64c18 0 32 7 45 19c49 44 93 92 141 137c181 163 336 228 582 228c35 0 64 29 64 64zM1792 1030c0 -64 -7 -129 -20 -193c-64 -311 -264 -513 -542 -651 +c-135 -68 -286 -108 -438 -108c-96 0 -195 16 -286 47c-48 16 -144 79 -184 79c-50 0 -110 -204 -197 -204c-63 0 -82 31 -109 77c-9 17 -16 23 -16 44c0 104 198 185 198 243c0 9 -26 62 -30 82c-6 34 -9 69 -9 104c0 318 253 545 537 639c205 68 641 -11 780 121 +c55 51 82 98 166 98c113 0 150 -293 150 -378z" /> + <glyph glyph-name="envelope-open-o" unicode="" horiz-adv-x="1792" +d="M1474 623l39 -51c11 -14 8 -33 -5 -44c-100 -78 -330 -255 -340 -263c-71 -58 -167 -138 -271 -137h-2c-104 0 -200 79 -271 137c-11 9 -233 180 -331 256c-14 11 -17 30 -6 44l37 52c11 15 32 18 46 6c68 -53 164 -127 306 -236c50 -38 149 -131 219 -131h2 +c70 0 169 93 219 131c147 113 245 188 313 242c14 11 34 8 45 -6zM1664 -96v928c-100 93 -85 85 -548 443c-50 39 -149 133 -219 133h-2c-70 0 -169 -94 -219 -133c-463 -358 -448 -350 -548 -443v-928c0 -17 15 -32 32 -32h1472c17 0 32 15 32 32zM1792 832v-928 +c0 -88 -72 -160 -160 -160h-1472c-88 0 -160 72 -160 160v928c0 36 15 70 41 94c205 190 441 355 583 472c70 58 167 138 271 138h2c104 0 201 -80 271 -138c132 -109 383 -286 583 -472c26 -24 41 -58 41 -94z" /> + <glyph glyph-name="exclamation-circle" unicode="" +d="M768 1408c424 0 768 -344 768 -768s-344 -768 -768 -768s-768 344 -768 768s344 768 768 768zM896 161v190c0 18 -14 33 -31 33h-192c-18 0 -33 -15 -33 -33v-190c0 -18 15 -33 33 -33h192c17 0 31 15 31 33zM894 505l18 621c0 7 -3 14 -10 18c-6 5 -15 8 -24 8h-220 +c-9 0 -18 -3 -24 -8c-7 -4 -10 -11 -10 -18l17 -621c0 -14 15 -25 34 -25h185c18 0 33 11 34 25z" /> + <glyph glyph-name="comments" unicode="" horiz-adv-x="1792" +d="M1408 768c0 -283 -315 -512 -704 -512c-61 0 -120 6 -176 16c-83 -59 -177 -102 -278 -128c-27 -7 -56 -12 -86 -16h-3c-15 0 -29 12 -32 29c-4 19 9 31 20 44c39 44 83 83 117 166c-162 94 -266 239 -266 401c0 283 315 512 704 512s704 -229 704 -512zM1792 512 +c0 -163 -104 -307 -266 -401c34 -83 78 -122 117 -166c11 -13 24 -25 20 -44c-4 -18 -19 -31 -35 -29c-30 4 -59 9 -86 16c-101 26 -195 69 -278 128c-56 -10 -115 -16 -176 -16c-181 0 -347 50 -472 132c29 -2 59 -4 88 -4c215 0 418 62 573 174c167 122 259 287 259 466 +c0 52 -8 103 -23 152c169 -93 279 -241 279 -408z" /> + <glyph glyph-name="moon" unicode="" horiz-adv-x="1471" +d="M1465 318c-125 -271 -399 -446 -697 -446c-423 0 -768 345 -768 768c0 415 325 752 739 767c28 1 51 -15 61 -39c11 -25 4 -54 -15 -72c-114 -104 -177 -246 -177 -400c0 -300 244 -544 544 -544c79 0 155 17 228 51c25 11 53 6 72 -13s24 -48 13 -72z" /> + <glyph glyph-name="facebook-official" unicode="" +d="M1451 1408c47 0 85 -38 85 -85v-1366c0 -47 -38 -85 -85 -85h-391v595h199l30 232h-229v148c0 67 18 112 115 112l122 1v207c-21 3 -94 9 -178 9c-177 0 -299 -108 -299 -306v-171h-200v-232h200v-595h-735c-47 0 -85 38 -85 85v1366c0 47 38 85 85 85h1366z" /> + <glyph glyph-name="clock-o" unicode="" +d="M896 992v-448c0 -18 -14 -32 -32 -32h-320c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h224v352c0 18 14 32 32 32h64c18 0 32 -14 32 -32zM1312 640c0 300 -244 544 -544 544s-544 -244 -544 -544s244 -544 544 -544s544 244 544 544zM1536 640 +c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" /> + <glyph glyph-name="caret-square-o-left" unicode="" +d="M1024 960v-640c0 -35 -29 -64 -64 -64c-13 0 -26 4 -37 12l-448 320c-17 12 -27 31 -27 52c0 20 10 40 27 52l448 320c11 8 24 12 37 12c35 0 64 -29 64 -64zM1280 160v960c0 17 -15 32 -32 32h-960c-17 0 -32 -15 -32 -32v-960c0 -17 15 -32 32 -32h960 +c17 0 32 15 32 32zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" /> + <glyph glyph-name="hand-scissors-o" unicode="" horiz-adv-x="1792" +d="M1073 -128h-177c-104 0 -183 45 -226 141c-15 32 -23 67 -23 102v5c-82 40 -135 124 -135 216c0 11 0 38 5 48h-261c-141 0 -256 115 -256 256s115 256 256 256h113l-44 17c-99 37 -165 133 -165 239c0 141 115 256 256 256c31 0 62 -6 91 -17l628 -239h401 +c141 0 256 -115 256 -256v-668c0 -118 -80 -220 -194 -248l-339 -85c-60 -15 -123 -23 -186 -23zM1024 583l-155 -71l-163 -74c-40 -18 -66 -58 -66 -102c0 -62 50 -112 112 -112c16 0 32 3 46 10l338 154c-65 14 -112 73 -112 140v55zM1344 272c0 62 -50 112 -112 112 +c-16 0 -32 -3 -46 -10l-290 -132c-60 -27 -121 -51 -121 -127c0 -66 46 -114 113 -114c12 0 28 4 38 9l352 160c40 18 66 58 66 102zM1112 1024l-650 248c-15 5 -30 8 -46 8c-70 0 -128 -57 -128 -128c0 -53 33 -101 82 -120l526 -200v-64h-640c-71 0 -128 -57 -128 -128 +s57 -128 128 -128h535l233 106v198c0 40 17 79 46 106l111 102h-69zM1073 0c52 0 105 6 155 19l339 85c57 14 97 65 97 124v668c0 71 -57 128 -128 128h-308l-136 -126c-23 -21 -36 -51 -36 -82v-296c0 -62 51 -108 112 -108c62 0 112 55 112 116v208h32v-208 +c0 -45 -22 -87 -57 -114c70 -11 121 -72 121 -142c0 -56 -33 -108 -84 -131l-310 -141h91z" /> + <glyph glyph-name="tumblr-square" unicode="" +d="M1136 75l-62 183c-24 -12 -69 -22 -103 -22c-102 -3 -123 71 -123 126v398h257v194h-256v326h-188c-3 0 -8 -3 -9 -10c-11 -99 -58 -275 -252 -345v-165h130v-418c0 -143 105 -347 384 -342c94 2 199 41 222 75zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960 +c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" /> + <glyph glyph-name="rub" unicode="" horiz-adv-x="1280" +d="M1043 971c0 134 -95 224 -236 224h-320v-448h320c141 0 236 90 236 224zM1280 971c0 -257 -186 -437 -453 -437h-340v-118h505c18 0 32 -14 32 -32v-128c0 -18 -14 -32 -32 -32h-505v-192c0 -18 -14 -32 -32 -32h-167c-18 0 -32 14 -32 32v192h-224c-18 0 -32 14 -32 32 +v128c0 18 14 32 32 32h224v118h-224c-18 0 -32 14 -32 32v149c0 18 14 32 32 32h224v629c0 18 14 32 32 32h539c267 0 453 -180 453 -437z" /> + <glyph glyph-name="chevron-circle-up" unicode="" +d="M1165 397l102 102c25 25 25 65 0 90l-454 454c-25 25 -65 25 -90 0l-454 -454c-25 -25 -25 -65 0 -90l102 -102c25 -25 65 -25 90 0l307 307l307 -307c25 -25 65 -25 90 0zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z +" /> + <glyph glyph-name="opencart" unicode="" horiz-adv-x="2304" +d="M1524 -25c0 -91 -73 -164 -164 -164s-165 73 -165 164s74 165 165 165s164 -74 164 -165zM775 -25c0 -91 -74 -164 -165 -164s-164 73 -164 164s73 165 164 165s165 -74 165 -165zM0 1469c295 -311 572 -357 1660 -357s610 -242 -62 -842c213 370 945 698 -255 680 +c-1151 -17 -1219 333 -1343 519z" /> + <glyph glyph-name="artstation" unicode="" horiz-adv-x="1533" +d="M601 1277v0h267c51 0 112 -37 136 -83l504 -878c16 -24 25 -53 25 -84c0 -35 -7 -53 -31 -94l-123 -213zM474 1058l348 -604h-695zM0 233v0h949l178 -309h-859c-53 0 -114 38 -138 85h-1z" /> + <glyph glyph-name="thumbs-up" unicode="" horiz-adv-x="1600" +d="M256 192c0 35 -29 64 -64 64c-36 0 -64 -29 -64 -64c0 -36 28 -64 64 -64c35 0 64 28 64 64zM416 704v-640c0 -35 -29 -64 -64 -64h-288c-35 0 -64 29 -64 64v640c0 35 29 64 64 64h288c35 0 64 -29 64 -64zM1600 704c0 -53 -21 -110 -55 -149c11 -32 15 -62 15 -76 +c2 -50 -13 -97 -43 -137c11 -37 11 -77 0 -117c-10 -37 -29 -70 -54 -94c6 -75 -11 -136 -49 -181c-43 -51 -109 -77 -197 -78h-129c-143 0 -278 47 -386 84c-63 22 -123 43 -158 44c-34 1 -64 29 -64 64v641c0 33 28 61 61 64c37 3 133 122 177 180c36 46 70 89 101 120 +c39 39 50 99 62 157c11 59 23 121 66 163c12 12 28 19 45 19c224 0 224 -179 224 -256c0 -82 -29 -140 -56 -192c-11 -22 -21 -32 -29 -64h277c104 0 192 -88 192 -192z" /> + <glyph glyph-name="vimeo-square" unicode="" +d="M1292 898c7 145 -47 218 -161 222c-154 5 -258 -82 -312 -261c28 12 55 19 82 19c56 0 81 -32 74 -96c-3 -38 -28 -94 -74 -167c-47 -74 -82 -110 -105 -110c-30 0 -56 56 -82 169c-8 34 -23 118 -45 255c-20 126 -73 185 -160 177c-36 -4 -92 -36 -164 -100 +c-54 -47 -107 -96 -162 -144l52 -67c50 34 79 52 87 52c38 0 74 -60 107 -179c30 -110 60 -219 90 -329c45 -119 99 -179 164 -179c104 0 232 98 383 294c146 188 222 336 226 444zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960 +c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" /> + <glyph glyph-name="arrow-circle-right" unicode="" +d="M1285 640c0 17 -6 33 -18 45l-91 91l-362 362c-12 12 -28 18 -45 18s-33 -6 -45 -18l-91 -91c-12 -12 -18 -28 -18 -45s6 -33 18 -45l189 -189h-502c-35 0 -64 -29 -64 -64v-128c0 -35 29 -64 64 -64h502l-189 -189c-12 -12 -19 -28 -19 -45s7 -33 19 -45l91 -91 +c12 -12 28 -18 45 -18s33 6 45 18l362 362l91 91c12 12 18 28 18 45zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" /> + <glyph glyph-name="bolt" unicode="" horiz-adv-x="896" +d="M885 970c11 -12 14 -29 7 -44l-540 -1157c-8 -15 -24 -25 -42 -25c-4 0 -9 1 -14 2c-22 7 -35 28 -30 49l197 808l-406 -101c-4 -1 -8 -1 -12 -1c-11 0 -23 4 -31 11c-12 10 -16 25 -13 39l201 825c5 19 23 32 44 32h328c25 0 45 -19 45 -42c0 -6 -2 -12 -5 -18 +l-171 -463l396 98c4 1 8 2 12 2c13 0 25 -6 34 -15z" /> + <glyph glyph-name="thermometer-quarter" unicode="" horiz-adv-x="1024" +d="M640 192c0 -106 -86 -192 -192 -192s-192 86 -192 192c0 80 50 153 128 181v139h128v-139c78 -28 128 -101 128 -181zM768 192c0 105 -50 197 -128 256v768c0 106 -86 192 -192 192s-192 -86 -192 -192v-768c-78 -59 -128 -151 -128 -256c0 -177 143 -320 320 -320 +s320 143 320 320zM896 192c0 -247 -201 -448 -448 -448s-448 201 -448 448c0 122 49 232 128 313v711c0 177 143 320 320 320s320 -143 320 -320v-711c79 -81 128 -191 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192v128h192z +" /> + <glyph glyph-name="hdd-o" unicode="" +d="M1040 320c0 -44 -36 -80 -80 -80s-80 36 -80 80s36 80 80 80s80 -36 80 -80zM1296 320c0 -44 -36 -80 -80 -80s-80 36 -80 80s36 80 80 80s80 -36 80 -80zM1408 160v320c0 17 -15 32 -32 32h-1216c-17 0 -32 -15 -32 -32v-320c0 -17 15 -32 32 -32h1216c17 0 32 15 32 32 +zM178 640h1180l-157 482c-5 17 -24 30 -42 30h-782c-18 0 -37 -13 -42 -30zM1536 480v-320c0 -88 -72 -160 -160 -160h-1216c-88 0 -160 72 -160 160v320c0 27 8 50 16 75l197 606c23 70 90 119 164 119h782c74 0 141 -49 164 -119l197 -606c8 -25 16 -48 16 -75z" /> + <glyph glyph-name="id-card-o" unicode="" horiz-adv-x="2048" +d="M896 324c0 -73 -48 -132 -107 -132h-426c-59 0 -107 59 -107 132c0 132 32 284 164 284c40 -40 95 -64 156 -64s116 24 156 64c132 0 164 -152 164 -284zM768 768c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM1792 352v-64 +c0 -18 -14 -32 -32 -32h-704c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h704c18 0 32 -14 32 -32zM1408 608v-64c0 -18 -14 -32 -32 -32h-320c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h320c18 0 32 -14 32 -32zM1792 608v-64c0 -18 -14 -32 -32 -32h-192 +c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM1792 864v-64c0 -18 -14 -32 -32 -32h-704c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h704c18 0 32 -14 32 -32zM1920 32v1120h-1792v-1120c0 -17 15 -32 32 -32h1728c17 0 32 15 32 32zM2048 1248v-1216 +c0 -88 -72 -160 -160 -160h-1728c-88 0 -160 72 -160 160v1216c0 88 72 160 160 160h1728c88 0 160 -72 160 -160z" /> + <glyph glyph-name="plug" unicode="" horiz-adv-x="1792" +d="M1755 1083c49 -50 49 -131 0 -181l-401 -400l150 -150l-160 -160c-219 -219 -553 -250 -801 -86l-362 -362h-181v181l362 362c-164 248 -133 582 86 801l160 160l150 -150l400 401c50 49 131 49 181 0c50 -50 50 -132 0 -181l-400 -401l234 -234l401 400 +c50 50 131 50 181 0z" /> + <glyph glyph-name="react" unicode="" horiz-adv-x="1755" +d="M1434 910v0c187 -64 321 -165 321 -269c0 -109 -143 -215 -341 -280c-11 -3 -21 -7 -32 -10c3 -13 7 -33 10 -46c39 -197 10 -360 -83 -413c-89 -52 -235 -1 -382 125c-16 14 -31 28 -46 43c-12 -12 -24 -22 -36 -33c-152 -133 -307 -187 -400 -134 +c-90 52 -118 203 -82 393c4 21 9 40 14 61c-16 4 -32 10 -47 15c-190 65 -330 172 -330 279c0 104 131 205 314 268c20 7 42 14 64 20c-5 19 -9 38 -13 57c-38 193 -11 348 79 400c94 55 250 -3 406 -142c8 -7 21 -20 29 -27c14 13 28 27 43 40c149 130 296 184 386 132 +c94 -54 121 -219 79 -423c-3 -13 -6 -25 -9 -38c15 -5 41 -13 56 -18zM970 1201v0c-14 -12 -27 -23 -40 -36c53 -57 101 -118 146 -182c77 -7 155 -20 231 -37c3 11 5 23 7 35c36 177 15 311 -43 344c-54 31 -173 -13 -301 -124zM524 553c-22 -52 -41 -104 -56 -153 +c52 -11 106 -19 159 -25c-19 29 -37 59 -54 89c-17 29 -33 59 -49 89zM524 726c15 30 32 61 49 90s35 59 53 87c-55 -7 -108 -16 -157 -27c15 -48 33 -99 55 -150zM563 640v0c23 -47 48 -93 74 -139c22 -38 59 -98 84 -134c50 -3 103 -5 157 -5s107 2 158 6 +c29 44 57 87 83 133c22 38 55 101 74 140c-23 47 -49 94 -75 139c-22 37 -59 96 -83 132c-51 4 -104 6 -157 6s-107 -2 -158 -6c-29 -44 -57 -87 -83 -133s-51 -92 -74 -139zM1182 464c-17 -29 -34 -59 -53 -88c54 6 108 16 161 28c-17 52 -35 102 -57 152 +c-16 -31 -34 -62 -51 -92zM1232 726c21 49 39 98 55 149c-49 11 -102 21 -157 28c15 -24 38 -63 52 -87c17 -29 34 -60 50 -90zM878 1112v0c-34 -37 -68 -79 -102 -123c28 1 74 3 102 3s74 -2 102 -3c-32 43 -66 84 -102 123zM481 1322c-54 -31 -76 -156 -44 -322 +c4 -18 8 -36 12 -53c76 17 154 29 231 36c45 64 94 125 147 182c-9 8 -17 16 -26 24c-135 119 -262 167 -320 133zM397 419c24 75 52 149 85 221c-33 71 -61 144 -84 218c-20 -6 -40 -12 -60 -19c-156 -55 -264 -135 -264 -198c7 -41 29 -78 64 -102 +c60 -48 143 -84 216 -107c14 -5 29 -9 43 -13zM796 83c11 10 22 19 33 30c-53 58 -103 119 -148 183c-79 6 -156 18 -233 34c-5 -19 -8 -38 -12 -57c-31 -163 -9 -284 46 -316c39 -15 83 -13 121 5c71 28 136 69 193 121zM880 166c36 40 70 81 102 125 +c-34 -2 -69 -3 -104 -3c-34 0 -68 1 -101 2c34 -45 68 -86 103 -124zM1328 63c11 76 9 153 -8 227c-2 12 -6 31 -9 42c-64 -14 -169 -31 -234 -36c-44 -64 -93 -126 -145 -184c15 -14 30 -27 44 -39c125 -108 241 -149 296 -117c33 26 53 65 56 107zM1391 432 +c171 57 291 143 291 210c0 62 -112 144 -272 199c-16 5 -34 11 -52 16c-23 -74 -51 -146 -84 -216c34 -71 64 -143 88 -218c10 3 19 6 29 9zM878 797c87 0 157 -70 157 -157s-70 -157 -157 -157s-157 70 -157 157s70 157 157 157z" /> + <glyph glyph-name="themeisle" unicode="" horiz-adv-x="1792" +d="M852 1227c0 -36 -23 -76 -62 -76c-40 0 -62 40 -62 76c0 35 22 76 62 76c39 0 62 -41 62 -76zM688 -149v114c0 39 -31 73 -71 73s-70 -34 -70 -73v-114c0 -39 30 -74 70 -74s71 34 71 74zM860 -149v114c0 39 -30 73 -70 73s-71 -34 -71 -73v-114c0 -39 31 -74 71 -74 +s70 35 70 74zM1034 -149v114c0 39 -31 73 -71 73s-71 -34 -71 -73v-114c0 -39 31 -74 71 -74s71 34 71 74zM1208 -149v114c0 39 -31 73 -71 73s-71 -34 -71 -73v-114c0 -39 31 -74 71 -74s71 35 71 74zM1476 535c-108 -207 -316 -359 -555 -359c-338 0 -562 296 -562 618 +c0 59 7 117 21 174c-70 -118 -104 -254 -104 -390c0 -211 87 -426 250 -563c18 34 52 57 91 57c35 0 68 -20 86 -50c19 30 51 50 87 50c35 0 68 -20 86 -50c19 30 52 50 87 50s68 -20 87 -50c18 30 51 50 86 50c38 0 73 -23 90 -56c152 127 240 322 250 519zM1326 564 +c0 50 -22 75 -72 75c-16 0 -32 -3 -47 -6c-50 -10 -99 -19 -149 -19c-158 0 -226 92 -226 243c0 69 13 137 30 204c-53 -81 -83 -178 -83 -275c0 -189 120 -371 324 -371c75 0 149 27 210 70c7 26 13 52 13 79zM884 1223c0 63 -44 129 -113 129s-113 -66 -113 -129 +c0 -64 44 -130 113 -130s113 66 113 130zM1513 884c0 188 -121 370 -324 370c-106 0 -205 -53 -276 -129c-25 -83 -48 -180 -48 -268c0 -133 53 -210 193 -210c48 0 95 9 142 19c18 3 35 6 53 6c69 0 104 -40 104 -108c0 -15 -1 -31 -4 -46c101 91 160 230 160 366z +M1792 667c0 -126 -40 -358 -127 -454c-80 -87 -306 -214 -423 -247l-4 -1v-114c0 -57 -44 -107 -102 -107c-35 0 -68 20 -86 50c-19 -30 -52 -50 -87 -50s-68 20 -87 50c-18 -30 -51 -50 -86 -50c-36 0 -68 20 -87 50c-18 -30 -51 -50 -86 -50c-66 0 -103 55 -103 115 +c-57 -43 -125 -68 -198 -68c-77 0 -152 29 -211 80c36 1 72 8 106 20c-73 20 -138 66 -182 127c23 -5 47 -7 71 -7c58 0 115 16 164 46c-77 77 -198 206 -240 306c-20 47 -24 110 -24 160c0 174 71 560 302 560c37 0 66 -17 81 -52c13 19 27 37 42 54c7 9 20 19 25 29 +c28 44 41 74 76 119c113 144 286 243 472 243c21 0 42 -1 62 -4c38 41 91 64 146 64c51 0 104 -21 140 -57c3 -3 5 -8 5 -12c0 -13 -36 -47 -45 -57c15 -5 55 -24 55 -42c0 -10 -10 -18 -16 -25c110 -97 173 -235 197 -378c15 18 36 30 60 30c37 0 73 -25 100 -49 +c73 -65 90 -186 90 -279z" /> + <glyph glyph-name="braille" unicode="" horiz-adv-x="2176" +d="M192 352c-88 0 -160 -72 -160 -160s72 -160 160 -160s160 72 160 160s-72 160 -160 160zM704 352c-88 0 -160 -72 -160 -160s72 -160 160 -160s160 72 160 160s-72 160 -160 160zM704 864c-88 0 -160 -72 -160 -160s72 -160 160 -160s160 72 160 160s-72 160 -160 160z +M1472 352c-88 0 -160 -72 -160 -160s72 -160 160 -160s160 72 160 160s-72 160 -160 160zM1984 352c-88 0 -160 -72 -160 -160s72 -160 160 -160s160 72 160 160s-72 160 -160 160zM1472 864c-88 0 -160 -72 -160 -160s72 -160 160 -160s160 72 160 160s-72 160 -160 160z +M1984 864c-88 0 -160 -72 -160 -160s72 -160 160 -160s160 72 160 160s-72 160 -160 160zM1984 1376c-88 0 -160 -72 -160 -160s72 -160 160 -160s160 72 160 160s-72 160 -160 160zM384 192c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192z +M896 192c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM384 704c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM896 704c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192z +M384 1216c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM1664 192c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM896 1216c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192 +zM2176 192c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM1664 704c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM2176 704c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192 +s192 -86 192 -192zM1664 1216c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM2176 1216c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192z" /> + <glyph glyph-name="industry" unicode="" horiz-adv-x="1792" +d="M448 1536c35 0 64 -29 64 -64v-891l536 429c11 9 26 14 40 14c35 0 64 -29 64 -64v-379l536 429c11 9 26 14 40 14c35 0 64 -29 64 -64v-1152c0 -35 -29 -64 -64 -64h-1664c-35 0 -64 29 -64 64v1664c0 35 29 64 64 64h384z" /> + <glyph glyph-name="map-o" unicode="" horiz-adv-x="2048" +d="M2020 1525c17 -12 28 -32 28 -53v-1408c0 -26 -16 -50 -40 -59l-640 -256c-16 -7 -32 -7 -48 0l-616 246l-616 -246c-8 -4 -16 -5 -24 -5c-13 0 -25 4 -36 11c-17 12 -28 32 -28 53v1408c0 26 16 50 40 59l640 256c16 7 32 7 48 0l616 -246l616 246c20 8 42 6 60 -6z +M736 1390v-1270l576 -230v1270zM128 1173v-1270l544 217v1270zM1920 107v1270l-544 -217v-1270z" /> + <glyph glyph-name="krw" unicode="" horiz-adv-x="1792" +d="M514 341l81 299h-159l75 -300c1 -2 1 -4 2 -6c0 2 1 5 1 7zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299c1 -3 1 -5 2 -7c0 2 1 4 1 6zM1382 768l33 128h-297l34 -128h230zM1792 736v-64c0 -18 -14 -32 -32 -32h-213 +l-164 -616c-4 -14 -17 -24 -31 -24h-159c-14 0 -27 10 -31 24l-166 616h-209l-167 -616c-4 -14 -16 -24 -31 -24h-159c-14 0 -27 10 -30 24l-160 616h-208c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h175l-33 128h-142c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h109l-89 344 +c-3 10 -1 20 5 28c6 7 16 12 26 12h137c15 0 28 -10 31 -24l90 -360h359l97 360c4 14 17 24 31 24h126c15 0 27 -10 31 -24l98 -360h365l93 360c3 14 16 24 31 24h137c10 0 20 -5 26 -12c6 -8 8 -19 5 -28l-91 -344h111c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-145 +l-34 -128h179c18 0 32 -14 32 -32z" /> + <glyph glyph-name="joomla" unicode="" +d="M1070 463l-160 -160l-151 -152l-30 -30c-88 -87 -211 -117 -323 -89c-21 -92 -103 -160 -201 -160c-113 0 -205 92 -205 206c0 97 67 179 158 200c-29 113 1 237 89 325l12 12l151 -152l-11 -11c-50 -49 -49 -129 0 -179c49 -49 129 -49 178 0l30 30l151 152l161 160z +M729 1145l12 -12l-152 -152l-12 12c-49 49 -129 49 -178 0s-49 -130 0 -179l29 -29l152 -152l160 -160l-151 -152l-161 160l-151 152l-30 30c-92 91 -120 222 -85 339c-92 20 -160 102 -160 200c0 114 92 206 205 206c103 0 187 -75 203 -172c111 26 232 -5 319 -91z +M1536 78c0 -114 -92 -206 -205 -206c-100 0 -183 71 -202 165c-116 -36 -249 -8 -341 84l-11 12l151 152l12 -12c49 -49 129 -49 178 0s49 129 0 178l-30 30l-152 152l-160 160l152 152l160 -160l152 -152l29 -30c87 -87 118 -210 90 -322c100 -14 177 -99 177 -203z +M1534 1202c0 -104 -78 -190 -178 -204c33 -115 4 -244 -87 -335l-12 -12l-151 152l12 12c49 49 49 129 0 178s-129 49 -178 0l-30 -30l-152 -152l-160 -160l-152 152l161 160l152 152l29 30c91 91 221 120 337 86c14 100 100 177 204 177c113 0 205 -92 205 -206z" /> + <glyph glyph-name="ethereum" unicode="" horiz-adv-x="1064" +d="M1064 623l-532 -325l-532 325l532 913zM532 194l532 325l-532 -775l-532 775z" /> + <glyph glyph-name="plus" unicode="" horiz-adv-x="1408" +d="M1408 800v-192c0 -53 -43 -96 -96 -96h-416v-416c0 -53 -43 -96 -96 -96h-192c-53 0 -96 43 -96 96v416h-416c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h416v416c0 53 43 96 96 96h192c53 0 96 -43 96 -96v-416h416c53 0 96 -43 96 -96z" /> + <glyph glyph-name="list-ul" unicode="" horiz-adv-x="1792" +d="M384 128c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM384 640c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM1792 224v-192c0 -17 -15 -32 -32 -32h-1216c-17 0 -32 15 -32 32v192c0 17 15 32 32 32 +h1216c17 0 32 -15 32 -32zM384 1152c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM1792 736v-192c0 -17 -15 -32 -32 -32h-1216c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1216c17 0 32 -15 32 -32zM1792 1248v-192 +c0 -17 -15 -32 -32 -32h-1216c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1216c17 0 32 -15 32 -32z" /> + <glyph glyph-name="play-circle-o" unicode="" +d="M1184 640c0 -23 -12 -44 -32 -55l-544 -320c-10 -6 -21 -9 -32 -9s-22 3 -32 8c-20 12 -32 33 -32 56v640c0 23 12 44 32 56c20 11 45 11 64 -1l544 -320c20 -11 32 -32 32 -55zM1312 640c0 300 -244 544 -544 544s-544 -244 -544 -544s244 -544 544 -544 +s544 244 544 544zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" /> + <glyph glyph-name="joplin" unicode="" +d="M288 1408h960c159 0 288 -129 288 -288v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288zM737 1171v-148l43 -1c59 -2 70 -6 81 -30c4 -10 5 -13 5 -296c0 -323 0 -323 -16 -362c-16 -38 -48 -69 -87 -83 +c-13 -5 -21 -5 -43 -6c-33 -1 -53 2 -80 15c-30 14 -50 37 -62 69c-9 24 -10 34 -12 88c-2 51 -1 56 -7 70c-9 23 -25 45 -40 56c-24 18 -49 24 -87 22c-40 -2 -68 -13 -95 -41c-23 -23 -35 -44 -44 -75c-4 -15 -5 -23 -5 -54c0 -38 1 -46 11 -79c26 -82 92 -156 178 -199 +c46 -23 85 -35 155 -44v0c20 -3 119 -3 142 0c87 10 150 32 208 71c73 49 127 125 142 199c8 40 9 47 10 343l1 291l6 13c6 15 15 24 29 28c5 2 28 3 52 4l43 1v74l-1 73l-263 1h-264z" /> + <glyph glyph-name="mars-stroke" unicode="" +d="M1472 1408c35 0 64 -29 64 -64v-416c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v262l-213 -214l140 -140c12 -13 12 -33 0 -45l-46 -46c-12 -12 -32 -12 -45 0l-140 141l-78 -79c79 -98 126 -223 126 -359c0 -318 -258 -576 -576 -576s-576 258 -576 576 +s258 576 576 576c136 0 261 -47 359 -126l78 78l-172 172c-12 13 -12 33 0 45l46 46c12 12 32 12 45 0l172 -172l213 213h-261c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h416zM576 0c247 0 448 201 448 448s-201 448 -448 448s-448 -201 -448 -448s201 -448 448 -448z" /> + <glyph glyph-name="road" unicode="" horiz-adv-x="1820" +d="M1061 540v4l-24 320c-1 18 -17 32 -34 32h-186c-17 0 -33 -14 -34 -32l-24 -320v-4c-1 -16 14 -28 29 -28h244c15 0 30 12 29 28zM1820 73c0 -29 -8 -73 -46 -73h-704c17 0 31 14 30 32l-20 256c-1 18 -17 32 -34 32h-272c-17 0 -33 -14 -34 -32l-20 -256 +c-1 -18 13 -32 30 -32h-704c-38 0 -46 44 -46 73c0 40 11 80 26 116l417 1044c10 25 37 47 64 47h339c-17 0 -33 -14 -34 -32l-15 -192c-1 -18 12 -32 30 -32h166c18 0 31 14 30 32l-15 192c-1 18 -17 32 -34 32h339c27 0 54 -22 64 -47l417 -1044c15 -36 26 -76 26 -116z +" /> + <glyph glyph-name="volume-down" unicode="" horiz-adv-x="1152" +d="M768 1184v-1088c0 -35 -29 -64 -64 -64c-17 0 -33 7 -45 19l-333 333h-262c-35 0 -64 29 -64 64v384c0 35 29 64 64 64h262l333 333c12 12 28 19 45 19c35 0 64 -29 64 -64zM1152 640c0 -100 -61 -197 -155 -235c-8 -4 -17 -5 -25 -5c-35 0 -64 28 -64 64 +c0 76 116 55 116 176s-116 100 -116 176c0 36 29 64 64 64c8 0 17 -1 25 -5c94 -37 155 -135 155 -235z" /> + <glyph glyph-name="question-circle" unicode="" +d="M896 160v192c0 18 -14 32 -32 32h-192c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h192c18 0 32 14 32 32zM1152 832c0 183 -192 320 -364 320c-163 0 -285 -70 -371 -213c-9 -14 -5 -32 8 -42l132 -100c5 -4 12 -6 19 -6c9 0 19 4 25 12c47 60 67 78 86 92 +c17 12 50 24 86 24c64 0 123 -41 123 -85c0 -52 -27 -78 -88 -106c-71 -32 -168 -115 -168 -212v-36c0 -18 14 -32 32 -32h192c18 0 32 14 32 32c0 23 29 72 76 99c76 43 180 101 180 253zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768 +s768 -344 768 -768z" /> + <glyph glyph-name="paypal" unicode="" horiz-adv-x="1519" +d="M1510 890c13 -60 10 -129 -4 -204c-65 -330 -284 -444 -565 -444h-44c-34 0 -62 -25 -68 -59l-4 -19l-55 -346l-2 -15c-7 -34 -35 -59 -69 -59h-251c-28 0 -46 23 -42 51c18 112 35 224 53 336s36 223 54 335c3 24 19 37 43 37c40 0 80 1 131 0c72 -1 155 3 236 21 +c108 24 206 68 287 144c73 68 122 152 155 246c15 44 27 88 35 133c2 12 5 10 12 5c55 -41 86 -96 98 -162zM1338 1172c0 -82 -19 -160 -46 -236c-52 -151 -150 -259 -302 -315c-81 -29 -166 -41 -252 -42c-60 -1 -120 0 -180 0c-65 0 -106 -32 -118 -96 +c-14 -76 -69 -430 -85 -530c-1 -7 -4 -10 -12 -10h-295c-30 0 -52 26 -48 55l232 1471c6 38 40 67 79 67h598c43 0 142 -19 209 -45c142 -55 220 -167 220 -319z" /> + <glyph glyph-name="child" unicode="" horiz-adv-x="1152" +d="M1124 988l-292 -292v-824c0 -62 -50 -112 -112 -112s-112 50 -112 112v384h-64v-384c0 -62 -50 -112 -112 -112s-112 50 -112 112v824l-292 292c-37 38 -37 98 0 136c38 37 98 37 136 0l228 -228h368l228 228c38 37 98 37 136 0c37 -38 37 -98 0 -136zM800 1152 +c0 -124 -100 -224 -224 -224s-224 100 -224 224s100 224 224 224s224 -100 224 -224z" /> + <glyph glyph-name="fork-awesome" unicode="" horiz-adv-x="1533" +d="M766 1404v0c423 0 767 -343 767 -766v-1v-2c0 -8 -1 -17 -1 -25v-2c-14 -388 -318 -703 -701 -735v1c-18 -2 -47 -2 -65 -2s-47 1 -65 3v-2c-383 32 -685 347 -700 735v2c0 8 -1 17 -1 25v2v1c0 423 343 766 766 766zM594 1085h-66c-35 -251 -54 -525 -29 -712 +s145 -157 181 -351c5 -29 10 -59 14 -89c20 -2 52 -4 72 -4s52 2 72 4c4 30 9 60 14 89c36 194 156 164 181 351s6 456 -28 712h-65c3 -190 12 -430 -8 -640c-8 -89 -103 -87 -108 0c-13 208 -15 428 -26 639h-64c-11 -211 -18 -431 -26 -643c-3 -82 -100 -81 -108 0 +c-19 208 -10 453 -6 644z" /> + <glyph glyph-name="angle-double-up" unicode="" horiz-adv-x="998" +d="M998 224c0 -8 -4 -17 -10 -23l-50 -50c-6 -6 -14 -10 -23 -10c-8 0 -17 4 -23 10l-393 393l-393 -393c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-50 50c-6 6 -10 15 -10 23s4 17 10 23l466 466c6 6 15 10 23 10s17 -4 23 -10l466 -466c6 -6 10 -15 10 -23zM998 608 +c0 -8 -4 -17 -10 -23l-50 -50c-6 -6 -14 -10 -23 -10c-8 0 -17 4 -23 10l-393 393l-393 -393c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-50 50c-6 6 -10 15 -10 23s4 17 10 23l466 466c6 6 15 10 23 10s17 -4 23 -10l466 -466c6 -6 10 -15 10 -23z" /> + <glyph glyph-name="bath" unicode="" horiz-adv-x="1792" +d="M1664 448v-192c0 -114 -50 -215 -128 -286v-194c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v118c-40 -14 -83 -22 -128 -22h-768c-45 0 -88 8 -128 22v-110c0 -22 -14 -40 -32 -40h-64c-18 0 -32 18 -32 40v186c-78 71 -128 172 -128 286v192h1536zM704 864 +c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32zM768 928c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32zM704 992c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32zM832 992c0 -18 -14 -32 -32 -32s-32 14 -32 32 +s14 32 32 32s32 -14 32 -32zM768 1056c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32zM704 1120c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32zM1792 608v-64c0 -18 -14 -32 -32 -32h-1728c-18 0 -32 14 -32 32v64c0 18 14 32 32 32 +h96v640c0 141 115 256 256 256c72 0 137 -30 184 -78c62 25 136 16 191 -27l22 22c6 6 16 6 22 0l42 -42c6 -6 6 -16 0 -22l-314 -314c-6 -6 -16 -6 -22 0l-42 42c-6 6 -6 16 0 22l22 22c-48 61 -54 145 -17 212c-23 22 -54 35 -88 35c-71 0 -128 -57 -128 -128v-640h1504 +c18 0 32 -14 32 -32zM896 1056c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32zM832 1120c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32zM768 1184c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32zM960 1120 +c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32zM896 1184c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32zM832 1248c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32zM1024 1184c0 -18 -14 -32 -32 -32s-32 14 -32 32 +s14 32 32 32s32 -14 32 -32zM960 1248c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32zM1088 1248c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32z" /> + <glyph glyph-name="reply-all" unicode="" horiz-adv-x="1792" +d="M640 454v-70c0 -26 -16 -49 -39 -59c-8 -3 -17 -5 -25 -5c-17 0 -33 6 -45 19l-512 512c-25 25 -25 65 0 90l512 512c18 19 46 24 70 14c23 -10 39 -33 39 -59v-69l-397 -398c-25 -25 -25 -65 0 -90zM1792 416c0 -208 -157 -514 -164 -527c-5 -11 -16 -17 -28 -17 +c-3 0 -6 0 -9 1c-15 5 -24 19 -23 34c29 273 -5 453 -106 565c-85 95 -223 146 -438 163v-251c0 -26 -16 -49 -39 -59c-8 -3 -17 -5 -25 -5c-17 0 -33 6 -45 19l-512 512c-25 25 -25 65 0 90l512 512c18 19 46 24 70 14c23 -10 39 -33 39 -59v-262c276 -19 473 -92 599 -221 +c151 -155 169 -365 169 -509z" /> + <glyph glyph-name="patreon" unicode="" +d="M985 1341c-305 0 -553 -248 -553 -553c0 -304 248 -551 553 -551c304 0 551 247 551 551c0 305 -247 553 -551 553zM270 -132h-270v1473h270v-1473z" /> + <glyph glyph-name="inbox" unicode="" +d="M1023 576h316c-2 5 -3 11 -5 16l-212 496h-708l-212 -496c-2 -5 -3 -11 -5 -16h316l95 -192h320zM1536 546v-482c0 -35 -29 -64 -64 -64h-1408c-35 0 -64 29 -64 64v482c0 36 11 89 25 123l238 552c14 33 54 59 89 59h832c35 0 75 -26 89 -59l238 -552 +c14 -34 25 -87 25 -123z" /> + <glyph glyph-name="female" unicode="" horiz-adv-x="1280" +d="M1280 480c0 -53 -43 -96 -96 -96c-32 0 -62 16 -80 43l-227 341h-45v-132l247 -411c6 -10 9 -21 9 -33c0 -35 -29 -64 -64 -64h-192v-272c0 -62 -50 -112 -112 -112h-160c-61 0 -112 50 -112 112v272h-192c-35 0 -64 29 -64 64c0 12 3 23 9 33l247 411v132h-45l-227 -341 +c-18 -27 -48 -43 -80 -43c-53 0 -96 43 -96 96c0 19 6 38 16 53l256 384c40 59 102 107 176 107h384c74 0 136 -48 176 -107l256 -384c10 -15 16 -34 16 -53zM864 1280c0 -124 -100 -224 -224 -224s-224 100 -224 224s100 224 224 224s224 -100 224 -224z" /> + <glyph glyph-name="gavel" unicode="" horiz-adv-x="1731" +d="M1731 0c0 -34 -14 -67 -37 -90l-107 -108c-24 -23 -57 -37 -91 -37s-67 14 -90 37l-363 364c-24 23 -38 56 -38 90c0 38 16 69 43 96l-256 256l-126 -126c-9 -9 -21 -14 -34 -14s-25 5 -34 14c30 -30 58 -52 58 -98c0 -26 -10 -49 -28 -68c-34 -36 -70 -84 -124 -84 +c-25 0 -50 10 -68 28l-408 408c-18 18 -28 43 -28 68c0 54 48 90 84 124c19 18 42 28 68 28c46 0 68 -28 98 -58c-9 9 -14 21 -14 34s5 25 14 34l348 348c9 9 21 14 34 14s25 -5 34 -14c-30 30 -58 52 -58 98c0 26 10 49 28 68c34 36 70 84 124 84c25 0 50 -10 68 -28 +l408 -408c18 -18 28 -43 28 -68c0 -54 -48 -90 -84 -124c-19 -18 -42 -28 -68 -28c-46 0 -68 28 -98 58c9 -9 14 -21 14 -34s-5 -25 -14 -34l-126 -126l256 -256c27 27 58 43 96 43c34 0 67 -14 91 -37l363 -363c23 -24 37 -57 37 -91z" /> + <glyph glyph-name="jsfiddle" unicode="" horiz-adv-x="2048" +d="M1800 764c145 -60 248 -202 248 -367c0 -219 -181 -397 -403 -397c-8 0 -15 1 -22 1h-1217c-224 13 -406 184 -406 406c0 149 81 279 202 350c-8 26 -12 53 -12 82c0 153 125 277 281 277c64 0 124 -22 172 -58c98 202 306 342 549 342c337 0 609 -269 609 -600 +c0 -12 -1 -24 -1 -36zM468 498c0 -169 133 -264 292 -264c98 0 169 31 240 99c-29 36 -61 71 -91 107c-41 -40 -86 -65 -144 -65c-71 0 -132 47 -132 121c0 73 61 121 130 121c220 0 267 -384 587 -384c156 0 288 98 288 262c0 166 -133 263 -291 263 +c-98 0 -171 -28 -241 -97c32 -35 62 -72 93 -108c40 39 85 64 142 64c66 0 132 -47 132 -117c0 -77 -56 -126 -131 -126c-213 0 -270 384 -582 384c-155 0 -292 -95 -292 -260z" /> + <glyph glyph-name="git" unicode="" horiz-adv-x="1656" +d="M527 22c0 88 -97 100 -165 100c-71 0 -158 -15 -158 -104c0 -90 103 -101 172 -101c73 0 151 18 151 105zM468 777c0 75 -36 143 -119 143c-92 0 -124 -61 -124 -145c0 -83 36 -135 124 -135c87 0 119 56 119 137zM737 1101v-202c-26 -9 -52 -16 -79 -22 +c10 -27 16 -55 16 -84c0 -169 -104 -298 -270 -329c-50 -10 -79 -31 -79 -85c0 -153 404 -49 404 -331c0 -229 -155 -304 -363 -304c-171 0 -366 57 -366 263c0 120 73 189 182 225v4c-46 28 -67 72 -67 126c0 51 11 114 63 137v4c-101 34 -167 173 -167 274 +c0 187 145 324 330 324c62 0 124 -16 178 -47c75 0 149 20 218 47zM1055 220h-222c4 45 4 89 4 134v609c0 43 1 86 -4 128h222c-5 -41 -4 -83 -4 -124v-613c0 -45 0 -89 4 -134zM1656 442v-196c-53 -29 -114 -39 -174 -39c-214 0 -239 169 -239 343v351h2v4 +c-13 0 -25 2 -37 2c-20 0 -40 -3 -59 -6v190h96v76c0 30 -1 60 -6 89h227c-8 -55 -6 -110 -6 -165h171v-190c-29 0 -58 4 -86 4h-85v-365c0 -59 13 -131 87 -131c39 0 77 11 109 33zM1080 1389c0 -75 -58 -145 -135 -145c-79 0 -138 69 -138 145c0 77 58 147 138 147 +c79 0 135 -72 135 -147z" /> + <glyph glyph-name="signalapp" unicode="" horiz-adv-x="1652" +d="M710 1400c32 4 84 8 116 8v0c27 0 53 -2 80 -4l-3 -42c-21 2 -56 3 -77 3c-31 0 -81 -3 -111 -7zM977 1351l8 43c54 -10 138 -36 188 -58l-17 -39c-48 21 -128 45 -179 54zM446 1321c49 24 133 54 186 66l10 -42c-51 -11 -130 -39 -177 -62zM1223 1264l21 37 +c48 -27 120 -78 160 -115l-29 -32c-38 35 -106 85 -152 110zM222 1161c39 39 108 93 155 122l22 -36c-44 -27 -110 -79 -147 -116l-30 30v0zM1427 1101l32 28c37 -41 87 -114 112 -163l-38 -20c-24 46 -71 116 -106 155v0zM65 934c23 50 69 125 104 168l33 -27 +c-33 -40 -77 -112 -98 -159zM1564 878l39 15c20 -52 41 -138 46 -193l-43 -4c-5 52 -23 133 -42 182zM0 664c3 55 19 143 36 196l41 -14c-16 -49 -32 -132 -34 -184zM1582 436c14 50 26 133 27 185h43c-1 -55 -14 -144 -29 -197zM-0 585l43 2c2 -70 10 -131 23 -187l-42 -11 +c-14 59 -22 123 -24 196zM1464 203c32 41 73 114 93 162l40 -16c-21 -51 -66 -128 -99 -172zM47 313l40 15c22 -60 52 -113 92 -160l-33 -28c-43 51 -75 108 -99 173v0zM1273 26c44 28 107 82 143 120l31 -29c-37 -40 -105 -97 -151 -127zM202 82l28 32 +c12 -11 34 -28 47 -38c4 -3 6 -7 7 -11l40 -125l-41 -13l-37 118c-13 10 -32 26 -44 37v0zM1033 -80c50 13 129 44 175 68l20 -39c-48 -25 -131 -56 -184 -70zM644 -86c2 1 7 2 9 2s3 -1 5 -1c17 -5 31 -8 42 -11l-9 -42c-10 2 -27 7 -37 10l-128 -57l-18 40l136 59v0z +M826 -106c45 0 90 4 134 11l7 -42c-39 -6 -102 -12 -141 -12c-22 0 -40 0 -55 1l2 43c15 -1 31 -1 53 -1v0zM357 -256v0v0c-9 0 -17 7 -20 15l-30 93l41 13l23 -70l67 29l17 -39l-89 -39c-2 -1 -7 -2 -9 -2zM442 -65c-11 0 -21 8 -22 19l-16 213c-70 53 -124 122 -161 204 +c-37 81 -56 171 -56 268c0 332 292 602 651 602s651 -270 651 -602s-292 -602 -651 -602c-60 0 -119 8 -176 23l-209 -123c-3 -2 -7 -2 -11 -2v0z" /> + <glyph glyph-name="share-square" unicode="" +d="M1005 435l352 352c25 25 25 65 0 90l-352 352c-18 19 -46 24 -69 14c-24 -10 -40 -33 -40 -59v-160c-574 0 -640 -329 -640 -576c0 -201 161 -396 167 -404c7 -8 16 -12 25 -12c4 0 9 1 13 3c13 5 21 19 19 33c-30 241 -11 391 62 473c61 69 167 99 354 99v-160 +c0 -26 16 -49 40 -59c7 -3 16 -5 24 -5c17 0 33 7 45 19zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" /> + <glyph glyph-name="thermometer-half" unicode="" horiz-adv-x="1024" +d="M640 192c0 -106 -86 -192 -192 -192s-192 86 -192 192c0 80 50 153 128 181v395h128v-395c78 -28 128 -101 128 -181zM768 192c0 105 -50 197 -128 256v768c0 106 -86 192 -192 192s-192 -86 -192 -192v-768c-78 -59 -128 -151 -128 -256c0 -177 143 -320 320 -320 +s320 143 320 320zM896 192c0 -247 -201 -448 -448 -448s-448 201 -448 448c0 122 49 232 128 313v711c0 177 143 320 320 320s320 -143 320 -320v-711c79 -81 128 -191 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192v128h192z +" /> + <glyph glyph-name="question" unicode="" horiz-adv-x="924" +d="M608 280v-240c0 -22 -18 -40 -40 -40h-240c-22 0 -40 18 -40 40v240c0 22 18 40 40 40h240c22 0 40 -18 40 -40zM924 880c0 -190 -129 -263 -224 -316c-59 -34 -96 -103 -96 -132c0 -22 -17 -48 -40 -48h-240c-22 0 -36 34 -36 56v45c0 121 120 225 208 265 +c77 35 109 68 109 132c0 56 -73 106 -154 106c-45 0 -86 -14 -108 -29c-24 -17 -48 -41 -107 -115c-8 -10 -20 -16 -31 -16c-9 0 -17 3 -25 8l-164 125c-17 13 -21 35 -10 53c108 179 260 266 464 266c214 0 454 -171 454 -400z" /> + <glyph glyph-name="low-vision" unicode="" horiz-adv-x="1792" +d="M335 180c-2 0 -4 1 -6 2c-117 78 -234 206 -308 325c-14 20 -21 44 -21 69c0 52 36 94 65 133c116 158 271 288 452 365c-15 27 -110 193 -110 211c0 12 7 23 17 29c20 11 110 64 128 64c11 0 22 -6 28 -16l124 -229c63 13 128 19 192 19c362 0 684 -205 876 -507 +c13 -20 20 -44 20 -69s-7 -49 -20 -69c-119 -187 -293 -342 -497 -429c15 -27 110 -193 110 -211c0 -12 -6 -23 -17 -29c-20 -11 -110 -64 -127 -64c-12 0 -23 6 -29 16l-124 229l-64 119l-444 820l7 7c-34 -14 -67 -29 -99 -47c12 -23 489 -899 489 -906c0 -5 -4 -8 -9 -9 +c-22 -5 -50 -3 -72 -3c-11 0 -56 -2 -60 7l-456 841c-29 -21 -56 -44 -82 -68c22 -39 404 -742 404 -748c0 -8 -5 -10 -11 -10c-17 0 -150 41 -155 50l-106 197l-224 413c-28 -34 -54 -69 -78 -106c13 -19 30 -39 41 -59c14 -26 176 -321 176 -327c0 -5 -5 -10 -10 -10z +M1165 282l49 -91c187 76 341 216 450 385c-111 171 -269 313 -459 389c89 -85 139 -202 139 -325c0 -141 -66 -274 -179 -358zM848 896c0 -26 22 -48 48 -48c55 0 108 -22 147 -61s61 -92 61 -147c0 -26 22 -48 48 -48s48 22 48 48c0 168 -136 304 -304 304 +c-26 0 -48 -22 -48 -48zM1214 961l-9 4l7 -7z" /> + <glyph glyph-name="camera" unicode="" horiz-adv-x="1920" +d="M960 864c159 0 288 -129 288 -288s-129 -288 -288 -288s-288 129 -288 288s129 288 288 288zM1664 1280c141 0 256 -115 256 -256v-896c0 -141 -115 -256 -256 -256h-1408c-141 0 -256 115 -256 256v896c0 141 115 256 256 256h224l51 136c25 66 103 120 173 120h512 +c70 0 148 -54 173 -120l51 -136h224zM960 128c247 0 448 201 448 448s-201 448 -448 448s-448 -201 -448 -448s201 -448 448 -448z" /> + <glyph glyph-name="wordpress" unicode="" horiz-adv-x="1792" +d="M127 640c0 111 24 217 67 313l367 -1005c-257 125 -434 388 -434 692zM1415 679c0 -66 -27 -142 -59 -249l-76 -256l-278 826s46 3 88 8c41 5 36 66 -5 63c-125 -9 -205 -10 -205 -10s-75 1 -202 10c-42 3 -47 -60 -5 -63c39 -4 80 -8 80 -8l120 -328l-168 -504l-280 832 +s46 3 88 8c41 5 36 66 -5 63c-124 -9 -205 -10 -205 -10c-14 0 -31 1 -49 1c137 209 373 347 642 347c200 0 382 -77 519 -202h-10c-75 0 -129 -65 -129 -136c0 -63 37 -116 76 -180c30 -51 63 -117 63 -212zM909 573l237 -647c1 -4 3 -8 5 -11c-80 -28 -165 -44 -255 -44 +c-75 0 -148 11 -217 32zM1570 1009c60 -110 95 -235 95 -369c0 -284 -154 -531 -383 -664l235 678c39 112 59 198 59 276c0 28 -2 54 -6 79zM896 1536c494 0 896 -402 896 -896s-402 -896 -896 -896s-896 402 -896 896s402 896 896 896zM896 -215c471 0 855 384 855 855 +s-384 855 -855 855s-855 -384 -855 -855s384 -855 855 -855z" /> + <glyph glyph-name="italic" unicode="" horiz-adv-x="1024" +d="M0 -126l17 85c64 20 133 28 193 59c23 29 34 66 41 101c13 68 231 1049 228 1129v25c-55 30 -122 22 -182 32l19 103c129 -6 260 -16 390 -16c106 0 212 10 318 16c-4 -30 -11 -60 -19 -89c-69 -24 -142 -35 -210 -62c-22 -54 -27 -113 -37 -170 +c-48 -259 -112 -518 -165 -775c-10 -48 -59 -247 -55 -289l1 -18c61 -14 123 -21 185 -31c-2 -33 -8 -66 -16 -99c-22 0 -43 -3 -65 -3c-57 0 -116 19 -173 20c-69 1 -138 2 -206 2c-89 0 -176 -15 -264 -20z" /> + <glyph glyph-name="forward" unicode="" horiz-adv-x="1542" +d="M45 -115c-25 -25 -45 -16 -45 19v1472c0 35 20 44 45 19l710 -710c6 -6 10 -12 13 -19v710c0 35 20 44 45 19l710 -710c25 -25 25 -65 0 -90l-710 -710c-25 -25 -45 -16 -45 19v710c-3 -7 -7 -13 -13 -19z" /> + <glyph glyph-name="steam-square" unicode="" +d="M1242 889c0 106 -87 193 -194 193c-106 0 -193 -87 -193 -193c0 -107 87 -193 193 -193c107 0 194 86 194 193zM632 301c0 -110 -88 -198 -198 -198c-76 0 -142 43 -175 106c33 -13 65 -26 98 -40c80 -32 172 7 205 88c32 80 -7 172 -88 204l-82 33c13 3 28 5 42 5 +c110 0 198 -88 198 -198zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v153l172 -69c26 -121 134 -212 262 -212c140 0 255 107 268 243l345 252c200 0 361 162 361 360c0 200 -161 361 -361 361c-197 0 -358 -160 -360 -357l-225 -322 +c-9 1 -18 1 -28 1c-50 0 -97 -13 -137 -37l-297 119v468c0 159 129 288 288 288h960c159 0 288 -129 288 -288zM1289 887c0 -133 -108 -241 -242 -241c-133 0 -241 108 -241 241c0 134 108 242 241 242c134 0 242 -108 242 -242z" /> + <glyph glyph-name="medium-square" unicode="" +d="M0 1404h1536v-1536h-1536v1536zM257 1057v-17l97 -116c7 -7 13 -20 13 -30v-4v-456v-9c0 -12 -6 -28 -14 -36l-109 -132v-17h308v17l-109 132c-9 9 -15 26 -15 38v7v395l270 -589h31l232 589v-469c0 -13 0 -16 -8 -24l-84 -80v-18h405v18l-80 79c-5 4 -10 12 -10 19 +c0 1 1 3 1 4v580c0 1 -1 3 -1 4c0 7 5 15 10 19l82 79v17h-285l-203 -507l-232 507h-299z" /> + <glyph glyph-name="sort-numeric-desc" unicode="" horiz-adv-x="1454" +d="M1314 1247c0 82 -67 169 -147 169c-70 0 -114 -57 -114 -131c0 -72 46 -133 141 -133c65 0 120 39 120 95zM704 96c0 -9 -4 -17 -10 -24l-319 -319c-7 -6 -15 -9 -23 -9s-16 3 -23 9l-320 320c-9 10 -12 23 -7 35s17 20 30 20h192v1376c0 18 14 32 32 32h192 +c18 0 32 -14 32 -32v-1376h192c18 0 32 -14 32 -32zM1424 -142v-114h-469v114h167v432c0 13 1 26 1 36v16h-2l-7 -12c-5 -8 -13 -18 -26 -31l-62 -58l-82 86l192 185h123v-654h165zM1454 1189c0 -202 -110 -421 -348 -421c-45 0 -82 7 -108 16c-16 5 -30 10 -42 15l39 113 +c9 -4 20 -8 31 -11c20 -7 46 -13 75 -13c120 0 182 100 201 204h-2c-28 -30 -87 -51 -146 -51c-145 0 -240 114 -240 244c0 138 106 251 253 251c159 0 287 -130 287 -347z" /> + <glyph glyph-name="video-camera" unicode="" horiz-adv-x="1792" +d="M1792 1184v-1088c0 -26 -16 -49 -39 -59c-8 -3 -17 -5 -25 -5c-17 0 -33 6 -45 19l-403 403v-166c0 -159 -129 -288 -288 -288h-704c-159 0 -288 129 -288 288v704c0 159 129 288 288 288h704c159 0 288 -129 288 -288v-165l403 402c12 13 28 19 45 19c8 0 17 -2 25 -5 +c23 -10 39 -33 39 -59z" /> + <glyph glyph-name="thumbs-down" unicode="" horiz-adv-x="1600" +d="M256 960c0 36 -29 64 -64 64c-36 0 -64 -28 -64 -64c0 -35 28 -64 64 -64c35 0 64 29 64 64zM416 448c0 -35 -29 -64 -64 -64h-288c-35 0 -64 29 -64 64v640c0 35 29 64 64 64h288c35 0 64 -29 64 -64v-640zM1545 597c34 -38 55 -96 55 -149c-1 -104 -88 -192 -192 -192 +h-277c8 -32 18 -42 29 -64c26 -52 56 -110 56 -192c0 -77 0 -256 -224 -256c-17 0 -33 7 -45 19c-43 42 -55 104 -66 163c-12 58 -23 118 -62 157c-31 31 -65 74 -101 120c-44 58 -140 177 -177 180c-33 3 -61 31 -61 64v641c0 35 30 63 64 64c35 1 95 22 158 44 +c108 37 243 84 386 84h129c88 -1 154 -27 197 -78c38 -45 55 -106 49 -181c25 -24 44 -57 54 -94c11 -40 11 -80 0 -117c30 -40 45 -87 43 -137c0 -14 -4 -44 -15 -76z" /> + <glyph glyph-name="medium" unicode="" +d="M182 999v6c0 15 -8 34 -19 44l-144 173v26h446l344 -755l302 755h425v-26l-123 -117c-8 -6 -14 -19 -14 -29c0 -2 1 -4 1 -6v-864c0 -2 -1 -4 -1 -6c0 -10 6 -23 14 -29l120 -117v-26h-602v26l124 120c12 12 12 16 12 35v698l-345 -876h-47l-401 876v-587 +c0 -3 -1 -8 -1 -11c0 -18 10 -44 23 -57l162 -195v-26h-458v26l161 195c12 13 22 38 22 55c0 4 0 9 -1 13v679z" /> + <glyph glyph-name="chevron-right" unicode="" horiz-adv-x="1036" +d="M1017 659l-742 -742c-25 -25 -65 -25 -90 0l-166 166c-25 25 -25 65 0 90l531 531l-531 531c-25 25 -25 65 0 90l166 166c25 25 65 25 90 0l742 -742c25 -25 25 -65 0 -90z" /> + <glyph glyph-name="bus" unicode="" +d="M384 320c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1408 320c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1362 716l-72 384c-6 30 -32 52 -63 52h-918c-31 0 -57 -22 -63 -52l-72 -384 +c-7 -40 23 -76 63 -76h1062c40 0 70 36 63 76zM1136 1328c0 27 -21 48 -48 48h-640c-26 0 -48 -21 -48 -48s22 -48 48 -48h640c27 0 48 21 48 48zM1536 603v-603h-128v-128c0 -71 -57 -128 -128 -128s-128 57 -128 128v128h-768v-128c0 -71 -57 -128 -128 -128 +s-128 57 -128 128v128h-128v603c0 82 7 143 25 223l103 454c19 160 299 256 640 256s621 -96 640 -256l105 -454c18 -80 23 -141 23 -223z" /> + <glyph glyph-name="registered" unicode="" horiz-adv-x="1792" +d="M1042 833c0 58 -20 99 -60 121c-20 11 -48 18 -117 18h-123v-281h162c88 0 138 52 138 142zM1094 548l205 -373c5 -10 5 -22 -1 -31c-5 -10 -16 -16 -27 -16h-152c-12 0 -23 6 -28 17l-194 365h-155v-350c0 -18 -14 -32 -32 -32h-134c-18 0 -32 14 -32 32v960 +c0 18 14 32 32 32h294c105 0 151 -9 190 -24c113 -42 183 -153 183 -289c0 -123 -61 -227 -158 -275c3 -5 6 -10 9 -16zM896 1376c-406 0 -736 -330 -736 -736s330 -736 736 -736s736 330 736 736s-330 736 -736 736zM1792 640c0 -495 -401 -896 -896 -896 +s-896 401 -896 896s401 896 896 896s896 -401 896 -896z" /> + <glyph glyph-name="mars" unicode="" +d="M1472 1408c35 0 64 -29 64 -64v-416c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v262l-382 -383c79 -98 126 -223 126 -359c0 -318 -258 -576 -576 -576s-576 258 -576 576s258 576 576 576c136 0 261 -47 359 -126l382 382h-261c-18 0 -32 14 -32 32v64 +c0 18 14 32 32 32h416zM576 0c247 0 448 201 448 448s-201 448 -448 448s-448 -201 -448 -448s201 -448 448 -448z" /> + <glyph glyph-name="hand-rock-o" unicode="" +d="M768 1152c-71 0 -128 -57 -128 -128v-128h-32v93c0 63 -48 115 -112 115c-62 0 -112 -50 -112 -112v-429l-32 30v172c0 63 -48 115 -112 115c-62 0 -112 -50 -112 -112v-224c0 -31 13 -60 35 -82l310 -296c29 -29 39 -62 39 -102c0 -35 29 -64 64 -64h640 +c35 0 64 29 64 64v25c0 26 3 52 10 77l108 436c7 25 10 51 10 77v246c0 63 -48 115 -112 115c-62 0 -112 -50 -112 -112v-32h-32v125c0 53 -36 102 -89 113c-7 1 -15 2 -23 2c-62 0 -112 -50 -112 -112v-128h-32v122c0 67 -48 126 -115 133c-5 1 -9 1 -13 1zM768 1280 +c54 0 106 -17 149 -50c37 22 80 34 123 34c79 0 152 -38 197 -103c19 5 39 7 59 7c134 0 240 -110 240 -243v-246c0 -36 -5 -73 -13 -108l-109 -436c-6 -24 -6 -47 -6 -71c0 -106 -86 -192 -192 -192h-640c-114 0 -192 91 -192 201l-308 296c-47 45 -76 109 -76 175v224 +c0 132 108 240 240 240c6 0 11 0 16 -1c8 127 114 225 240 225c34 0 67 -7 98 -21c47 45 109 69 174 69z" /> + <glyph glyph-name="window-close" unicode="" horiz-adv-x="1792" +d="M1175 215l146 146c13 13 13 33 0 46l-233 233l233 233c13 13 13 33 0 46l-146 146c-13 13 -33 13 -46 0l-233 -233l-233 233c-13 13 -33 13 -46 0l-146 -146c-13 -13 -13 -33 0 -46l233 -233l-233 -233c-13 -13 -13 -33 0 -46l146 -146c13 -13 33 -13 46 0l233 233 +l233 -233c13 -13 33 -13 46 0zM1792 1248v-1216c0 -88 -72 -160 -160 -160h-1472c-88 0 -160 72 -160 160v1216c0 88 72 160 160 160h1472c88 0 160 -72 160 -160z" /> + <glyph glyph-name="link" unicode="" horiz-adv-x="1632" +d="M1440 320c0 26 -10 50 -28 68l-208 208c-18 18 -43 28 -68 28c-29 0 -52 -11 -72 -32c33 -33 72 -61 72 -112c0 -53 -43 -96 -96 -96c-51 0 -79 39 -112 72c-21 -20 -33 -43 -33 -73c0 -25 10 -50 28 -68l206 -207c18 -18 43 -27 68 -27s50 9 68 26l147 146 +c18 18 28 42 28 67zM737 1025c0 25 -10 50 -28 68l-206 207c-18 18 -43 28 -68 28s-50 -10 -68 -27l-147 -146c-18 -18 -28 -42 -28 -67c0 -26 10 -50 28 -68l208 -208c18 -18 43 -27 68 -27c29 0 52 10 72 31c-33 33 -72 61 -72 112c0 53 43 96 96 96c51 0 79 -39 112 -72 +c21 20 33 43 33 73zM1632 320c0 -76 -31 -150 -85 -203l-147 -146c-54 -54 -127 -83 -203 -83c-77 0 -150 30 -204 85l-206 207c-54 54 -83 127 -83 203c0 79 32 154 88 209l-88 88c-55 -56 -129 -88 -208 -88c-76 0 -150 30 -204 84l-208 208c-55 55 -84 127 -84 204 +c0 76 31 150 85 203l147 146c54 54 127 83 203 83c77 0 150 -30 204 -85l206 -207c54 -54 83 -127 83 -203c0 -79 -32 -154 -88 -209l88 -88c55 56 129 88 208 88c76 0 150 -30 204 -84l208 -208c55 -55 84 -127 84 -204z" /> + <glyph glyph-name="window-minimize" unicode="" horiz-adv-x="1792" +d="M1792 224v-192c0 -88 -72 -160 -160 -160h-1472c-88 0 -160 72 -160 160v192c0 88 72 160 160 160h1472c88 0 160 -72 160 -160z" /> + <glyph glyph-name="eyedropper" unicode="" horiz-adv-x="1792" +d="M1698 1442c125 -125 126 -328 0 -452l-225 -223l104 -104c13 -13 13 -33 0 -46l-210 -210c-13 -13 -33 -13 -46 0l-105 105l-603 -603c-24 -24 -56 -37 -90 -37h-203l-256 -128l-64 64l128 256v203c0 34 13 66 37 90l603 603l-105 105c-13 13 -13 33 0 46l210 210 +c13 13 33 13 46 0l104 -104l223 225c124 126 327 125 452 0zM512 64l576 576l-192 192l-576 -576v-192h192z" /> + <glyph glyph-name="bug" unicode="" horiz-adv-x="1600" +d="M1600 576c0 -35 -29 -64 -64 -64h-224c0 -125 -27 -219 -67 -290l208 -209c25 -25 25 -65 0 -90c-12 -13 -29 -19 -45 -19s-33 6 -45 19l-198 197s-131 -120 -301 -120v896h-128v-896c-181 0 -313 132 -313 132l-183 -207c-13 -14 -30 -21 -48 -21c-15 0 -30 5 -43 16 +c-26 24 -28 64 -5 91l202 227c-35 69 -58 158 -58 274h-224c-35 0 -64 29 -64 64s29 64 64 64h224v294l-173 173c-25 25 -25 65 0 90s65 25 90 0l173 -173h844l173 173c25 25 65 25 90 0s25 -65 0 -90l-173 -173v-294h224c35 0 64 -29 64 -64zM1120 1152h-640 +c0 177 143 320 320 320s320 -143 320 -320z" /> + <glyph glyph-name="angellist" unicode="" horiz-adv-x="1258" +d="M942 1158l-114 -328l117 -21c30 82 165 451 165 518c0 25 -8 56 -38 56c-56 0 -116 -182 -130 -225zM643 471c11 -29 23 -58 33 -88c22 25 45 48 71 67c-35 7 -70 10 -104 21zM351 1367c0 -102 121 -420 159 -521c14 8 32 10 49 10c24 0 51 -3 75 -5l-121 351 +c-13 38 -71 220 -123 220c-27 0 -39 -32 -39 -55zM272 608c0 -73 196 -342 269 -342c20 0 37 22 37 40c0 23 -23 80 -32 102c-26 67 -121 274 -203 274c-27 0 -71 -47 -71 -74zM114 273c0 -36 12 -71 25 -104c79 -195 257 -309 465 -309c152 0 280 58 382 170 +c108 120 152 268 152 427c0 56 1 145 -43 185c-84 74 -369 102 -482 102c-14 0 -38 -1 -49 -11c-12 -5 -12 -24 -12 -35c0 -153 323 -139 420 -139c19 0 28 -5 40 -19c13 -16 17 -35 19 -55c-26 -26 -62 -41 -96 -54c-33 -12 -65 -25 -93 -46c-77 -56 -153 -152 -153 -251 +c0 -62 37 -115 37 -176c0 -1 -7 -23 -7 -26c-114 8 -142 121 -146 216c-12 -3 -28 -2 -41 -2c2 -7 2 -14 2 -21c0 -73 -65 -126 -135 -126c-108 0 -251 127 -251 237c0 30 13 47 33 67c20 -25 41 -50 60 -76c29 -39 79 -104 133 -104c14 0 41 12 41 29 +c0 45 -164 256 -204 256c-63 0 -97 -83 -97 -135zM0 264c0 130 50 216 179 251c-11 29 -28 73 -28 104c0 82 101 184 183 184c24 0 48 -7 70 -15c-42 119 -163 454 -163 567c0 101 51 181 160 181c140 0 299 -504 333 -604c44 110 182 571 338 571c98 0 153 -78 153 -171 +c0 -106 -118 -436 -159 -550c168 -41 192 -177 192 -328c0 -400 -255 -710 -668 -710c-76 0 -151 15 -223 42c-190 72 -367 267 -367 478z" /> + <glyph glyph-name="chain-broken" unicode="" horiz-adv-x="1664" +d="M439 265l-256 -256c-7 -6 -15 -9 -23 -9s-16 3 -23 9c-12 13 -12 33 0 46l256 256c13 12 33 12 46 0c12 -13 12 -33 0 -46zM608 224v-320c0 -18 -14 -32 -32 -32s-32 14 -32 32v320c0 18 14 32 32 32s32 -14 32 -32zM384 448c0 -18 -14 -32 -32 -32h-320 +c-18 0 -32 14 -32 32s14 32 32 32h320c18 0 32 -14 32 -32zM1648 320c0 -77 -30 -149 -85 -203l-147 -146c-54 -54 -126 -83 -203 -83s-150 30 -204 85l-334 335c-17 17 -30 36 -42 56l239 18l273 -274c36 -36 100 -37 136 -1l147 146c18 18 28 42 28 67c0 26 -10 50 -28 68 +l-274 275l18 239c20 -12 39 -25 56 -42l336 -336c54 -55 84 -127 84 -204zM1031 1044l-239 -18l-273 274c-18 18 -42 28 -68 28s-50 -10 -68 -27l-147 -146c-18 -18 -28 -42 -28 -67c0 -26 10 -50 28 -68l274 -274l-18 -240c-20 12 -39 25 -56 42l-336 336 +c-54 55 -84 127 -84 204s30 149 85 203l147 146c54 54 126 83 203 83s150 -30 204 -85l334 -335c17 -17 30 -36 42 -56zM1664 960c0 -18 -14 -32 -32 -32h-320c-18 0 -32 14 -32 32s14 32 32 32h320c18 0 32 -14 32 -32zM1120 1504v-320c0 -18 -14 -32 -32 -32 +s-32 14 -32 32v320c0 18 14 32 32 32s32 -14 32 -32zM1527 1353l-256 -256c-7 -6 -15 -9 -23 -9s-16 3 -23 9c-12 13 -12 33 0 46l256 256c13 12 33 12 46 0c12 -13 12 -33 0 -46z" /> + <glyph glyph-name="info" unicode="" horiz-adv-x="640" +d="M640 192v-128c0 -35 -29 -64 -64 -64h-512c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h64v384h-64c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h384c35 0 64 -29 64 -64v-576h64c35 0 64 -29 64 -64zM512 1344v-192c0 -35 -29 -64 -64 -64h-256c-35 0 -64 29 -64 64v192 +c0 35 29 64 64 64h256c35 0 64 -29 64 -64z" /> + <glyph glyph-name="tumblr" unicode="" horiz-adv-x="956" +d="M876 207l80 -237c-30 -45 -166 -96 -288 -98c-363 -6 -500 258 -500 444v544h-168v215c252 91 313 319 327 449c1 8 8 12 12 12h244v-424h333v-252h-334v-518c0 -70 26 -167 160 -164c44 1 103 14 134 29z" /> + <glyph glyph-name="line-chart" unicode="" horiz-adv-x="2048" +d="M2048 0v-128h-2048v1536h128v-1408h1920zM1920 1248v-435c0 -28 -34 -43 -55 -22l-121 121l-633 -633c-13 -13 -33 -13 -46 0l-233 233l-416 -416l-192 192l585 585c13 13 33 13 46 0l233 -233l464 464l-121 121c-21 21 -6 55 22 55h435c18 0 32 -14 32 -32z" /> + <glyph glyph-name="long-arrow-up" unicode="" horiz-adv-x="767" +d="M765 1043c-5 -11 -16 -19 -29 -19h-224v-1248c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v1248h-224c-13 0 -24 7 -29 19s-3 25 5 35l350 384c6 6 14 10 23 10s18 -4 24 -10l355 -384c8 -10 10 -23 5 -35z" /> + <glyph glyph-name="simplybuilt" unicode="" horiz-adv-x="2048" +d="M863 504c0 150 -121 271 -271 271c-149 0 -270 -121 -270 -271c0 -149 121 -270 270 -270c150 0 271 121 271 270zM1726 505c0 149 -121 270 -270 270c-150 0 -271 -121 -271 -270c0 -150 121 -271 271 -271c149 0 270 121 270 271zM2048 1314v-1348 +c0 -59 -48 -107 -108 -107h-1832c-60 0 -108 48 -108 107v1348c0 59 48 107 108 107h431c59 0 108 -48 108 -107v-161h754v161c0 59 49 107 108 107h431c60 0 108 -48 108 -107z" /> + <glyph glyph-name="trash" unicode="" horiz-adv-x="1408" +d="M512 160v704c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-704c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM768 160v704c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-704c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM1024 160v704c0 18 -14 32 -32 32h-64 +c-18 0 -32 -14 -32 -32v-704c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM480 1152h448l-48 117c-3 4 -12 10 -17 11h-317c-6 -1 -14 -7 -17 -11zM1408 1120v-64c0 -18 -14 -32 -32 -32h-96v-948c0 -110 -72 -204 -160 -204h-832c-88 0 -160 90 -160 200v952h-96 +c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h309l70 167c20 49 80 89 133 89h320c53 0 113 -40 133 -89l70 -167h309c18 0 32 -14 32 -32z" /> + <glyph glyph-name="free-code-camp" unicode="" horiz-adv-x="2304" +d="M453 -101c0 -28 -25 -54 -53 -54c-4 0 -9 2 -13 3c-56 13 -128 97 -162 140c-156 197 -225 427 -225 676c0 232 70 431 213 614c33 43 131 156 189 156c25 0 51 -20 51 -46c0 -30 -44 -71 -63 -90c-55 -57 -106 -115 -147 -184c-85 -142 -119 -284 -119 -449 +c0 -177 33 -337 123 -491c38 -65 83 -119 136 -173c21 -23 70 -68 70 -102zM1796 33c0 -37 -25 -68 -64 -68h-1081c-35 0 -64 29 -64 64c0 37 25 68 64 68h1081c35 0 64 -29 64 -64zM1581 644c0 -84 -19 -162 -67 -233c-33 -49 -100 -112 -153 -139c-8 -5 -18 -10 -27 -10 +c-8 0 -23 9 -23 18c0 29 122 98 122 232c0 44 -11 93 -35 130c-7 10 -32 42 -46 42c-3 0 -3 -2 -3 -5c0 -24 15 -47 15 -72c0 -32 -39 -48 -66 -48c-47 0 -66 33 -66 76c0 29 3 59 3 88c0 21 -1 27 -10 46c-14 27 -60 82 -93 82c-9 0 -12 0 -12 -9c0 -14 32 -29 32 -80 +c0 -133 -183 -157 -183 -290c0 -60 8 -110 42 -160c21 -31 44 -49 79 -63c9 -3 18 -4 18 -15s-9 -16 -18 -16c-5 0 -28 9 -33 11c-154 56 -271 190 -271 358c0 199 239 373 239 564c0 37 -6 63 -25 94c-11 18 -38 53 -56 64c-8 4 -19 11 -19 21c0 17 29 20 41 20 +c36 0 77 -13 110 -29c139 -66 168 -167 192 -307c6 -33 18 -138 66 -138c31 0 51 21 51 51c0 45 -40 94 -40 119c0 7 4 10 10 10c25 0 77 -53 93 -70c97 -103 133 -203 133 -342zM2304 615c0 -176 -47 -352 -138 -503c-42 -70 -180 -266 -271 -266c-21 0 -46 26 -46 47 +c0 34 117 143 146 180c124 156 183 332 183 531c0 164 -20 297 -93 446c-45 92 -92 154 -163 228c-23 24 -73 69 -73 105c0 25 26 52 51 52c66 0 161 -122 196 -169c134 -180 191 -365 206 -587c1 -21 2 -43 2 -64z" /> + <glyph glyph-name="windows" unicode="" horiz-adv-x="1664" +d="M682 530v-651l-682 94v557h682zM682 1273v-659h-682v565zM1664 530v-786l-907 125v661h907zM1664 1408v-794h-907v669z" /> + <glyph glyph-name="calendar-o" unicode="" horiz-adv-x="1664" +d="M128 -128h1408v1024h-1408v-1024zM512 1088v288c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-288c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM1280 1088v288c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-288c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM1664 1152 +v-1280c0 -70 -58 -128 -128 -128h-1408c-70 0 -128 58 -128 128v1280c0 70 58 128 128 128h128v96c0 88 72 160 160 160h64c88 0 160 -72 160 -160v-96h384v96c0 88 72 160 160 160h64c88 0 160 -72 160 -160v-96h128c70 0 128 -58 128 -128z" /> + <glyph glyph-name="suitcase" unicode="" horiz-adv-x="1792" +d="M640 1152h512v128h-512v-128zM288 1152v-1280h-64c-123 0 -224 101 -224 224v832c0 123 101 224 224 224h64zM1408 1152v-1280h-1024v1280h128v160c0 53 43 96 96 96h576c53 0 96 -43 96 -96v-160h128zM1792 928v-832c0 -123 -101 -224 -224 -224h-64v1280h64 +c123 0 224 -101 224 -224z" /> + <glyph glyph-name="arrow-circle-o-up" unicode="" +d="M1118 660c-5 -12 -17 -20 -30 -20h-192v-352c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v352h-192c-18 0 -32 14 -32 32c0 9 4 17 10 24l319 319c7 6 15 9 23 9s16 -3 23 -9l320 -320c9 -10 12 -23 7 -35zM768 1184c-300 0 -544 -244 -544 -544s244 -544 544 -544 +s544 244 544 544s-244 544 -544 544zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" /> + <glyph glyph-name="arrow-up" unicode="" horiz-adv-x="1558" +d="M1558 565c0 -34 -14 -66 -37 -90l-75 -75c-24 -24 -57 -38 -91 -38s-67 14 -90 38l-294 293v-704c0 -72 -60 -117 -128 -117h-128c-68 0 -128 45 -128 117v704l-294 -293c-23 -24 -56 -38 -90 -38s-67 14 -90 38l-75 75c-24 24 -38 56 -38 90s14 67 38 91l651 651 +c23 24 56 37 90 37s67 -13 91 -37l651 -651c23 -24 37 -57 37 -91z" /> + <glyph glyph-name="venus-mars" unicode="" horiz-adv-x="2048" +d="M1664 1504c0 18 14 32 32 32h288c35 0 64 -29 64 -64v-288c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v134l-254 -255c98 -123 147 -286 117 -461c-42 -240 -237 -431 -478 -467c-152 -23 -295 14 -409 90c-75 -50 -162 -83 -256 -93v-132h96c18 0 32 -14 32 -32 +v-64c0 -18 -14 -32 -32 -32h-96v-96c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v96h-96c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h96v132c-314 35 -553 323 -506 654c34 249 232 449 480 487c153 23 296 -14 410 -90c92 61 202 97 320 97c136 0 261 -48 359 -126 +l255 254h-134c-18 0 -32 14 -32 32v64zM896 391c79 81 128 191 128 313s-49 232 -128 313c-79 -81 -128 -191 -128 -313s49 -232 128 -313zM128 704c0 -247 201 -448 448 -448c79 0 154 21 218 57c-95 103 -154 240 -154 391s59 288 154 391c-64 36 -139 57 -218 57 +c-247 0 -448 -201 -448 -448zM1216 256c247 0 448 201 448 448s-201 448 -448 448c-79 0 -154 -21 -218 -57c95 -103 154 -240 154 -391s-59 -288 -154 -391c64 -36 139 -57 218 -57z" /> + <glyph glyph-name="pause-circle" unicode="" +d="M704 352v576c0 18 -14 32 -32 32h-256c-18 0 -32 -14 -32 -32v-576c0 -18 14 -32 32 -32h256c18 0 32 14 32 32zM1152 352v576c0 18 -14 32 -32 32h-256c-18 0 -32 -14 -32 -32v-576c0 -18 14 -32 32 -32h256c18 0 32 14 32 32zM1536 640c0 -424 -344 -768 -768 -768 +s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" /> + <glyph glyph-name="shopping-cart" unicode="" horiz-adv-x="1664" +d="M640 0c0 -70 -58 -128 -128 -128s-128 58 -128 128s58 128 128 128s128 -58 128 -128zM1536 0c0 -70 -58 -128 -128 -128s-128 58 -128 128s58 128 128 128s128 -58 128 -128zM1664 1088v-512c0 -32 -25 -60 -57 -64l-1044 -122c5 -23 13 -46 13 -70 +c0 -23 -14 -44 -24 -64h920c35 0 64 -29 64 -64s-29 -64 -64 -64h-1024c-35 0 -64 29 -64 64c0 31 45 106 61 137l-177 823h-204c-35 0 -64 29 -64 64s29 64 64 64h256c67 0 69 -80 79 -128h1201c35 0 64 -29 64 -64z" /> + <glyph glyph-name="files-o" unicode="" horiz-adv-x="1792" +d="M1696 1152c53 0 96 -43 96 -96v-1216c0 -53 -43 -96 -96 -96h-960c-53 0 -96 43 -96 96v288h-544c-53 0 -96 43 -96 96v672c0 53 31 127 68 164l408 408c37 37 111 68 164 68h416c53 0 96 -43 96 -96v-328c39 23 89 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323 +l-299 -299h299v299zM708 676l316 316v416h-384v-416c0 -53 -43 -96 -96 -96h-416v-640h512v256c0 53 31 127 68 164zM1664 -128v1152h-384v-416c0 -53 -43 -96 -96 -96h-416v-640h896z" /> + <glyph glyph-name="mastodon-square" unicode="" +d="M288 1408h960c159 0 288 -129 288 -288v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288zM766 1189v0c-140 -1 -275 -17 -354 -53c0 0 -156 -70 -156 -308c0 -55 -1 -119 1 -188c6 -233 43 -463 258 -520 +c99 -26 184 -32 253 -28c124 7 195 45 195 45l-5 90s-88 -28 -188 -25c-99 3 -204 11 -220 133c-1 11 -2 22 -2 34c0 0 97 -24 220 -30c75 -3 146 4 218 13c138 16 257 102 272 179c24 122 22 297 22 297c0 238 -156 308 -156 308c-79 36 -214 52 -354 53h-4zM608 1003v0 +c58 0 103 -23 132 -68l28 -47l28 47c29 45 74 68 132 68c51 0 92 -18 123 -53c31 -34 45 -81 45 -140v-288h-114v280c0 59 -25 88 -75 88c-55 0 -82 -35 -82 -105v-153h-114v153c0 70 -27 105 -82 105c-50 0 -75 -29 -75 -88v-280h-114v288c0 59 15 105 45 140 +c31 35 72 53 123 53z" /> + <glyph glyph-name="th-large" unicode="" horiz-adv-x="1664" +d="M768 512v-384c0 -70 -58 -128 -128 -128h-512c-70 0 -128 58 -128 128v384c0 70 58 128 128 128h512c70 0 128 -58 128 -128zM768 1280v-384c0 -70 -58 -128 -128 -128h-512c-70 0 -128 58 -128 128v384c0 70 58 128 128 128h512c70 0 128 -58 128 -128zM1664 512v-384 +c0 -70 -58 -128 -128 -128h-512c-70 0 -128 58 -128 128v384c0 70 58 128 128 128h512c70 0 128 -58 128 -128zM1664 1280v-384c0 -70 -58 -128 -128 -128h-512c-70 0 -128 58 -128 128v384c0 70 58 128 128 128h512c70 0 128 -58 128 -128z" /> + <glyph glyph-name="at" unicode="" +d="M972 761c0 144 -75 230 -201 230c-166 0 -344 -165 -344 -432c0 -149 74 -234 204 -234c201 0 341 230 341 436zM1536 640c0 -311 -222 -428 -412 -434c-13 0 -18 -1 -32 -1c-62 0 -111 18 -142 53c-19 22 -30 50 -33 83c-62 -78 -170 -154 -305 -154 +c-215 0 -338 133 -338 365c0 319 221 578 491 578c117 0 211 -50 261 -135l2 19l11 56c1 8 8 18 15 18h118c5 0 10 -7 13 -11c3 -3 4 -11 3 -16l-120 -614c-4 -19 -5 -34 -5 -48c0 -54 16 -65 57 -65c68 2 288 30 288 306c0 389 -251 640 -640 640 +c-353 0 -640 -287 -640 -640s287 -640 640 -640c147 0 291 51 405 144c14 12 34 10 45 -4l41 -49c5 -7 8 -15 7 -24c-1 -8 -5 -16 -12 -22c-136 -111 -309 -173 -486 -173c-423 0 -768 345 -768 768s345 768 768 768c459 0 768 -309 768 -768z" /> + <glyph glyph-name="file" unicode="" +d="M1024 1024v472c14 -9 26 -18 36 -28l408 -408c10 -10 19 -22 28 -36h-472zM896 992c0 -53 43 -96 96 -96h544v-1056c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h800v-544z" /> + <glyph glyph-name="star-half" unicode="" horiz-adv-x="832" +d="M832 1504v-1339l-449 -236c-13 -7 -26 -12 -40 -12c-29 0 -42 24 -42 50c0 7 1 13 2 20l86 500l-364 354c-12 13 -25 30 -25 48c0 30 31 42 56 46l502 73l225 455c9 19 26 41 49 41z" /> + <glyph glyph-name="futbol-o" unicode="" horiz-adv-x="1792" +d="M609 720l287 208l287 -208l-109 -336h-355zM896 1536c495 0 896 -401 896 -896s-401 -896 -896 -896s-896 401 -896 896s401 896 896 896zM1515 186c94 128 149 284 149 454v3l-102 -89l-240 224l63 323l134 -12c-95 131 -231 232 -389 282l53 -124l-287 -159l-287 159 +l53 124c-158 -50 -294 -151 -389 -282l135 12l62 -323l-240 -224l-102 89v-3c0 -170 55 -326 149 -454l30 132l326 -40l139 -298l-116 -69c75 -25 156 -39 240 -39s165 14 240 39l-116 69l139 298l326 40z" /> + <glyph glyph-name="flag-checkered" unicode="" horiz-adv-x="1728" +d="M768 536v192c-122 -11 -269 -60 -384 -117v-185c116 54 260 100 384 110zM768 954v197c-126 -6 -274 -65 -384 -126v-189c118 61 260 113 384 118zM1600 491v184c-91 -45 -250 -112 -384 -71v224c-13 4 -26 9 -39 15c-115 58 -209 112 -360 112c-16 0 -32 -1 -49 -3v-222 +h19c151 0 275 -54 390 -111c13 -6 26 -11 39 -15v-188c27 -11 57 -17 91 -17c111 0 231 59 293 92zM1600 918v189c-80 -43 -192 -91 -306 -91c-27 0 -53 2 -78 8v-196c134 -38 293 39 384 90zM256 1280c0 -47 -26 -88 -64 -110v-1266c0 -18 -14 -32 -32 -32h-64 +c-18 0 -32 14 -32 32v1266c-38 22 -64 63 -64 110c0 71 57 128 128 128s128 -57 128 -128zM1728 1216v-763c0 -24 -14 -46 -35 -57c-4 -2 -10 -5 -17 -9c-64 -34 -215 -116 -369 -116c-59 0 -112 12 -158 35l-28 14c-101 51 -181 91 -304 91c-144 0 -347 -75 -464 -146 +c-10 -6 -22 -9 -33 -9s-22 3 -32 8c-20 12 -32 33 -32 56v742c0 22 12 43 31 55c64 38 290 163 500 163c167 0 303 -61 418 -117c26 -13 56 -19 89 -19c118 0 248 75 310 112c13 7 24 13 31 17c20 10 43 9 62 -2c19 -12 31 -33 31 -55z" /> + <glyph glyph-name="genderless" unicode="" horiz-adv-x="1152" +d="M1024 576c0 247 -201 448 -448 448s-448 -201 -448 -448s201 -448 448 -448s448 201 448 448zM1152 576c0 -318 -258 -576 -576 -576s-576 258 -576 576s258 576 576 576s576 -258 576 -576z" /> + <glyph glyph-name="archive" unicode="" horiz-adv-x="1664" +d="M1024 704c0 35 -29 64 -64 64h-256c-35 0 -64 -29 -64 -64s29 -64 64 -64h256c35 0 64 29 64 64zM1600 896v-960c0 -35 -29 -64 -64 -64h-1408c-35 0 -64 29 -64 64v960c0 35 29 64 64 64h1408c35 0 64 -29 64 -64zM1664 1344v-256c0 -35 -29 -64 -64 -64h-1536 +c-35 0 -64 29 -64 64v256c0 35 29 64 64 64h1536c35 0 64 -29 64 -64z" /> + <glyph glyph-name="film" unicode="" horiz-adv-x="1920" +d="M384 -64v128c0 35 -29 64 -64 64h-128c-35 0 -64 -29 -64 -64v-128c0 -35 29 -64 64 -64h128c35 0 64 29 64 64zM384 320v128c0 35 -29 64 -64 64h-128c-35 0 -64 -29 -64 -64v-128c0 -35 29 -64 64 -64h128c35 0 64 29 64 64zM384 704v128c0 35 -29 64 -64 64h-128 +c-35 0 -64 -29 -64 -64v-128c0 -35 29 -64 64 -64h128c35 0 64 29 64 64zM1408 -64v512c0 35 -29 64 -64 64h-768c-35 0 -64 -29 -64 -64v-512c0 -35 29 -64 64 -64h768c35 0 64 29 64 64zM384 1088v128c0 35 -29 64 -64 64h-128c-35 0 -64 -29 -64 -64v-128 +c0 -35 29 -64 64 -64h128c35 0 64 29 64 64zM1792 -64v128c0 35 -29 64 -64 64h-128c-35 0 -64 -29 -64 -64v-128c0 -35 29 -64 64 -64h128c35 0 64 29 64 64zM1408 704v512c0 35 -29 64 -64 64h-768c-35 0 -64 -29 -64 -64v-512c0 -35 29 -64 64 -64h768c35 0 64 29 64 64z +M1792 320v128c0 35 -29 64 -64 64h-128c-35 0 -64 -29 -64 -64v-128c0 -35 29 -64 64 -64h128c35 0 64 29 64 64zM1792 704v128c0 35 -29 64 -64 64h-128c-35 0 -64 -29 -64 -64v-128c0 -35 29 -64 64 -64h128c35 0 64 29 64 64zM1792 1088v128c0 35 -29 64 -64 64h-128 +c-35 0 -64 -29 -64 -64v-128c0 -35 29 -64 64 -64h128c35 0 64 29 64 64zM1920 1248v-1344c0 -88 -72 -160 -160 -160h-1600c-88 0 -160 72 -160 160v1344c0 88 72 160 160 160h1600c88 0 160 -72 160 -160z" /> + <glyph glyph-name="power-off" unicode="" +d="M1536 640c0 -423 -345 -768 -768 -768s-768 345 -768 768c0 243 112 467 307 613c57 43 137 32 179 -25c43 -56 31 -137 -25 -179c-130 -98 -205 -247 -205 -409c0 -282 230 -512 512 -512s512 230 512 512c0 162 -75 311 -205 409c-56 42 -68 123 -25 179 +c42 57 123 68 179 25c195 -146 307 -370 307 -613zM896 1408v-640c0 -70 -58 -128 -128 -128s-128 58 -128 128v640c0 70 58 128 128 128s128 -58 128 -128z" /> + <glyph glyph-name="percent" unicode="" +d="M1280 256c0 70 -58 128 -128 128s-128 -58 -128 -128s58 -128 128 -128s128 58 128 128zM512 1024c0 70 -58 128 -128 128s-128 -58 -128 -128s58 -128 128 -128s128 58 128 128zM1536 256c0 -212 -172 -384 -384 -384s-384 172 -384 384s172 384 384 384 +s384 -172 384 -384zM1440 1344c0 -14 -5 -27 -13 -38l-1056 -1408c-12 -16 -31 -26 -51 -26h-160c-35 0 -64 29 -64 64c0 14 5 27 13 38l1056 1408c12 16 31 26 51 26h160c35 0 64 -29 64 -64zM768 1024c0 -212 -172 -384 -384 -384s-384 172 -384 384s172 384 384 384 +s384 -172 384 -384z" /> + <glyph glyph-name="google-wallet" unicode="" horiz-adv-x="1756" +d="M405 864c20 0 40 -10 52 -26c175 -239 297 -495 362 -774h-446c-80 278 -198 532 -367 749c-16 21 0 51 26 51h373zM964 507c-33 -135 -75 -266 -125 -393c-53 209 -138 405 -256 594c26 145 41 294 44 449c141 -227 253 -443 337 -650zM1063 1216 +c299 -412 521 -920 569 -1472h-451c-33 534 -279 1040 -553 1472h435zM1756 640c0 -278 -38 -570 -101 -812c-44 370 -166 738 -359 1083c-17 202 -53 398 -106 584c-5 21 10 41 31 41h359c28 0 54 -19 61 -46c76 -270 115 -556 115 -850z" /> + <glyph glyph-name="book" unicode="" horiz-adv-x="1664" +d="M1639 1058c25 -36 32 -83 18 -129l-275 -906c-25 -85 -113 -151 -199 -151h-923c-102 0 -211 81 -248 185c-16 45 -16 89 -2 127c2 20 6 40 7 64c1 16 -8 29 -6 41c4 24 25 41 41 68c30 50 64 131 75 183c5 19 -5 41 0 58c5 19 24 33 34 51c27 46 62 135 67 182 +c2 21 -8 44 -2 60c7 23 29 33 44 53c24 33 64 128 70 181c2 17 -8 34 -5 52c4 19 28 39 44 62c42 62 50 199 177 163l-1 -3c17 4 34 9 51 9h761c47 0 89 -21 114 -56c26 -36 32 -83 18 -130l-274 -906c-47 -154 -73 -188 -200 -188h-869c-13 0 -29 -3 -38 -15 +c-8 -12 -9 -21 -1 -43c20 -58 89 -70 144 -70h923c37 0 80 21 91 57l300 987c6 19 6 39 5 57c23 -9 44 -23 59 -43zM575 1056c-6 -18 4 -32 22 -32h608c17 0 36 14 42 32l21 64c6 18 -4 32 -22 32h-608c-17 0 -36 -14 -42 -32zM492 800c-6 -18 4 -32 22 -32h608 +c17 0 36 14 42 32l21 64c6 18 -4 32 -22 32h-608c-17 0 -36 -14 -42 -32z" /> + <glyph glyph-name="thermometer-three-quarters" unicode="" horiz-adv-x="1024" +d="M640 192c0 -106 -86 -192 -192 -192s-192 86 -192 192c0 80 50 153 128 181v651h128v-651c78 -28 128 -101 128 -181zM768 192c0 105 -50 197 -128 256v768c0 106 -86 192 -192 192s-192 -86 -192 -192v-768c-78 -59 -128 -151 -128 -256c0 -177 143 -320 320 -320 +s320 143 320 320zM896 192c0 -247 -201 -448 -448 -448s-448 201 -448 448c0 122 49 232 128 313v711c0 177 143 320 320 320s320 -143 320 -320v-711c79 -81 128 -191 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192v128h192z +" /> + <glyph glyph-name="transgender" unicode="" horiz-adv-x="1408" +d="M1024 1504c0 18 14 32 32 32h288c35 0 64 -29 64 -64v-288c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v134l-254 -255c78 -98 126 -223 126 -359c0 -296 -224 -540 -512 -572v-132h96c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-96v-96c0 -18 -14 -32 -32 -32 +h-64c-18 0 -32 14 -32 32v96h-96c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h96v132c-302 33 -535 302 -510 618c21 272 237 495 507 526c162 19 312 -31 426 -122l255 254h-134c-18 0 -32 14 -32 32v64zM576 256c247 0 448 201 448 448s-201 448 -448 448 +s-448 -201 -448 -448s201 -448 448 -448z" /> + <glyph glyph-name="cloud-upload" unicode="" horiz-adv-x="1920" +d="M1280 672c0 8 -3 17 -9 23l-352 352c-6 6 -14 9 -23 9c-8 0 -17 -3 -23 -9l-351 -351c-6 -7 -10 -15 -10 -24c0 -18 14 -32 32 -32h224v-352c0 -17 15 -32 32 -32h192c17 0 32 15 32 32v352h224c18 0 32 15 32 32zM1920 384c0 -212 -172 -384 -384 -384h-1088 +c-247 0 -448 201 -448 448c0 174 101 332 258 405c-1 15 -2 29 -2 43c0 283 229 512 512 512c208 0 395 -126 474 -318c46 40 105 62 166 62c141 0 256 -115 256 -256c0 -49 -14 -97 -41 -138c174 -41 297 -196 297 -374z" /> + <glyph glyph-name="bullseye" unicode="" +d="M1024 640c0 -141 -115 -256 -256 -256s-256 115 -256 256s115 256 256 256s256 -115 256 -256zM1152 640c0 212 -172 384 -384 384s-384 -172 -384 -384s172 -384 384 -384s384 172 384 384zM1280 640c0 -283 -229 -512 -512 -512s-512 229 -512 512s229 512 512 512 +s512 -229 512 -512zM1408 640c0 353 -287 640 -640 640s-640 -287 -640 -640s287 -640 640 -640s640 287 640 640zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" /> + <glyph glyph-name="openid" unicode="" horiz-adv-x="1792" +d="M1086 1536v-1536l-272 -128c-460 41 -814 286 -814 583c0 286 330 524 767 577v-172c-286 -50 -496 -212 -496 -405c0 -204 234 -373 543 -412v1360zM1755 954l37 -390l-525 114l147 83c-78 46 -174 80 -280 99v172c185 -22 351 -78 481 -157z" /> + <glyph glyph-name="repeat" unicode="" +d="M1536 1280v-448c0 -35 -29 -64 -64 -64h-448c-26 0 -49 16 -59 40c-10 23 -5 51 14 69l138 138c-94 87 -218 137 -349 137c-282 0 -512 -230 -512 -512s230 -512 512 -512c159 0 306 72 404 199c5 7 14 11 23 12c9 0 18 -3 25 -9l137 -138c12 -11 12 -30 2 -43 +c-146 -176 -362 -277 -591 -277c-423 0 -768 345 -768 768s345 768 768 768c197 0 388 -79 529 -212l130 129c18 19 46 24 70 14c23 -10 39 -33 39 -59z" /> + <glyph glyph-name="star" unicode="" horiz-adv-x="1664" +d="M1664 889c0 -18 -13 -35 -26 -48l-363 -354l86 -500c1 -7 1 -13 1 -20c0 -26 -12 -50 -41 -50c-14 0 -28 5 -40 12l-449 236l-449 -236c-13 -7 -26 -12 -40 -12c-29 0 -42 24 -42 50c0 7 1 13 2 20l86 500l-364 354c-12 13 -25 30 -25 48c0 30 31 42 56 46l502 73 +l225 455c9 19 26 41 49 41s40 -22 49 -41l225 -455l502 -73c24 -4 56 -16 56 -46z" /> + <glyph glyph-name="users" unicode="" horiz-adv-x="1920" +d="M593 640c-104 -3 -198 -48 -265 -128h-134c-100 0 -194 48 -194 159c0 81 -3 353 124 353c21 0 125 -85 260 -85c46 0 90 8 133 23c-3 -22 -5 -44 -5 -66c0 -91 29 -181 81 -256zM1664 3c0 -162 -107 -259 -267 -259h-874c-160 0 -267 97 -267 259c0 226 53 573 346 573 +c34 0 158 -139 358 -139s324 139 358 139c293 0 346 -347 346 -573zM640 1280c0 -141 -115 -256 -256 -256s-256 115 -256 256s115 256 256 256s256 -115 256 -256zM1344 896c0 -212 -172 -384 -384 -384s-384 172 -384 384s172 384 384 384s384 -172 384 -384zM1920 671 +c0 -111 -94 -159 -194 -159h-134c-67 80 -161 125 -265 128c52 75 81 165 81 256c0 22 -2 44 -5 66c43 -15 87 -23 133 -23c135 0 239 85 260 85c127 0 124 -272 124 -353zM1792 1280c0 -141 -115 -256 -256 -256s-256 115 -256 256s115 256 256 256s256 -115 256 -256z" /> + <glyph glyph-name="transgender-alt" unicode="" horiz-adv-x="1664" +d="M1280 1504c0 18 14 32 32 32h288c35 0 64 -29 64 -64v-288c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v134l-254 -255c78 -98 126 -223 126 -359c0 -296 -224 -540 -512 -572v-132h96c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-96v-96c0 -18 -14 -32 -32 -32 +h-64c-18 0 -32 14 -32 32v96h-96c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h96v132c-288 32 -512 276 -512 572c0 136 48 261 126 359l-52 53l-101 -111c-12 -13 -32 -14 -45 -3l-48 44c-13 11 -14 32 -2 45l105 115l-111 112v-134c0 -18 -14 -32 -32 -32h-64 +c-18 0 -32 14 -32 32v288c0 35 29 64 64 64h288c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-133l106 -107l86 94c12 13 32 14 45 3l48 -44c13 -11 14 -32 2 -45l-90 -99l57 -56c98 78 223 126 359 126s261 -48 359 -126l255 254h-134c-18 0 -32 14 -32 32v64zM832 256 +c247 0 448 201 448 448s-201 448 -448 448s-448 -201 -448 -448s201 -448 448 -448z" /> + <glyph glyph-name="chevron-up" unicode="" horiz-adv-x="1612" +d="M1593 205l-166 -165c-25 -25 -65 -25 -90 0l-531 531l-531 -531c-25 -25 -65 -25 -90 0l-166 165c-25 25 -25 66 0 91l742 741c25 25 65 25 90 0l742 -741c25 -25 25 -66 0 -91z" /> + <glyph glyph-name="asterisk" unicode="" horiz-adv-x="1428" +d="M1364 486c61 -35 82 -114 47 -175l-64 -110c-35 -61 -114 -82 -175 -47l-266 153v-307c0 -70 -58 -128 -128 -128h-128c-70 0 -128 58 -128 128v307l-266 -153c-61 -35 -140 -14 -175 47l-64 110c-35 61 -14 140 47 175l266 154l-266 154c-61 35 -82 114 -47 175l64 110 +c35 61 114 82 175 47l266 -153v307c0 70 58 128 128 128h128c70 0 128 -58 128 -128v-307l266 153c61 35 140 14 175 -47l64 -110c35 -61 14 -140 -47 -175l-266 -154z" /> + <glyph glyph-name="plus-circle" unicode="" +d="M1216 576v128c0 35 -29 64 -64 64h-256v256c0 35 -29 64 -64 64h-128c-35 0 -64 -29 -64 -64v-256h-256c-35 0 -64 -29 -64 -64v-128c0 -35 29 -64 64 -64h256v-256c0 -35 29 -64 64 -64h128c35 0 64 29 64 64v256h256c35 0 64 29 64 64zM1536 640 +c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" /> + <glyph glyph-name="cart-arrow-down" unicode="" horiz-adv-x="1664" +d="M1280 832c0 35 -29 64 -64 64c-17 0 -33 -7 -45 -19l-147 -146v293c0 35 -29 64 -64 64s-64 -29 -64 -64v-293l-147 146c-12 12 -28 19 -45 19c-35 0 -64 -29 -64 -64c0 -17 7 -33 19 -45l256 -256c12 -12 28 -19 45 -19s33 7 45 19l256 256c12 12 19 28 19 45zM640 0 +c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128s128 -57 128 -128zM1536 0c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128s128 -57 128 -128zM1664 1088v-512c0 -32 -24 -60 -57 -64l-1044 -122c4 -22 13 -47 13 -70s-14 -44 -24 -64h920 +c35 0 64 -29 64 -64s-29 -64 -64 -64h-1024c-35 0 -64 29 -64 64c0 31 47 108 61 137l-177 823h-204c-35 0 -64 29 -64 64s29 64 64 64h256c68 0 69 -80 79 -128h1201c35 0 64 -29 64 -64z" /> + <glyph glyph-name="dropbox" unicode="" horiz-adv-x="1664" +d="M338 829l494 -305l-342 -285l-490 319zM1324 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM490 1418l342 -285l-494 -304l-338 270zM1326 829l338 -271l-489 -319l-343 285zM1175 1418l489 -319l-338 -270l-494 304z" /> + <glyph glyph-name="debian" unicode="" horiz-adv-x="1440" +d="M1 954c3 22 -11 29 15 62c-4 -17 -6 -33 -15 -62zM61 1152c0 -18 30 18 8 -31c-40 -28 -3 -12 -8 31zM754 1527c20 7 49 4 70 9c-28 -2 -55 -3 -82 -7l12 -2zM1399 728c-8 -61 -27 -121 -56 -176c26 52 43 108 51 165zM582 550l10 -27c-12 21 -26 42 -33 66 +c7 -14 13 -28 23 -39zM536 548c25 -47 38 -61 56 -96c-25 21 -40 49 -60 76zM1274 762c2 -48 -15 -72 -29 -113l-25 -13c-21 -41 2 -26 -13 -58c-33 -29 -100 -91 -121 -97c-16 0 11 19 14 26c-44 -30 -36 -46 -103 -64l-2 4c-166 -78 -395 76 -392 287 +c-2 -13 -5 -10 -9 -15c-9 108 50 218 149 262c97 48 210 28 279 -37c-38 50 -113 103 -203 98c-88 -1 -171 -57 -198 -118c-45 -28 -49 -109 -69 -124c-26 -194 49 -277 178 -376c20 -14 5 -16 8 -26c-43 20 -82 50 -114 87c17 -25 35 -49 59 -68c-40 14 -93 98 -109 101 +c69 -124 282 -218 393 -172c-51 -2 -117 -1 -175 20c-24 12 -57 39 -51 44c152 -57 308 -43 439 62c33 26 70 70 81 71c-16 -24 2 -12 -10 -33c33 54 -14 22 35 93l18 -25c-7 45 55 99 49 169c14 22 16 -23 1 -73c21 55 5 65 10 110c6 -15 14 -32 18 -48 +c-14 53 14 89 21 120c-7 3 -22 -23 -25 40c0 27 8 14 11 21c-5 3 -19 24 -28 64c6 9 17 -25 25 -26c-5 32 -15 57 -15 81c-25 51 -9 -7 -29 22c-26 82 22 19 25 56c40 -58 63 -147 73 -184c-8 45 -21 89 -37 131c12 -5 -19 93 16 28c-38 138 -161 266 -274 327 +c14 -13 31 -29 25 -31c-56 34 -46 37 -54 51c-46 19 -49 -1 -79 0c-86 46 -103 40 -183 69l4 -17c-57 19 -67 -7 -129 0c-4 3 20 11 39 14c-55 -7 -53 11 -107 -2c13 9 28 15 42 23c-45 -3 -107 -26 -88 -5c-74 -33 -205 -78 -278 -147l-2 15c-34 -40 -147 -121 -156 -173 +l-9 -2c-17 -30 -29 -64 -43 -94c-23 -39 -33 -15 -30 -21c-45 -91 -68 -168 -87 -231c14 -21 1 -123 6 -206c-23 -408 286 -804 624 -896c50 -18 123 -17 186 -19c-74 21 -84 11 -156 36c-52 24 -63 53 -100 85l15 -26c-72 26 -42 31 -101 50l16 20c-23 2 -62 40 -73 61 +l-25 -1c-31 38 -47 65 -46 86l-8 -15c-9 16 -114 142 -60 113c-10 9 -23 15 -37 41l11 13c-26 33 -48 76 -46 90c14 -19 23 -22 32 -25c-65 162 -68 9 -118 165l10 1c-8 12 -13 25 -19 38l5 45c-47 54 -14 232 -7 329c5 39 40 81 66 147l-16 3c31 53 174 214 241 206 +c32 41 -6 1 -12 11c71 74 93 52 141 65c52 31 -45 -13 -20 11c89 23 63 52 180 64c12 -7 -28 -11 -38 -20c75 36 235 28 340 -20c122 -57 259 -225 264 -383l6 -2c-3 -63 10 -135 -12 -202l15 32zM779 1504l-11 -2l11 1v1zM748 1513c53 -2 48 -5 31 -9c3 4 -15 6 -31 9z +M1079 782c-5 -22 -10 13 -16 16c5 20 20 37 16 -16zM1020 629c18 24 30 51 35 79c-4 -20 -15 -37 -25 -55c-56 -35 -5 21 0 42c-60 -75 -8 -45 -10 -66zM860 589c-30 0 6 -15 45 -21c8 7 21 18 29 25c-24 -6 -49 -6 -74 -4z" /> + <glyph glyph-name="newspaper-o" unicode="" horiz-adv-x="2048" +d="M1024 1024h-384v-384h384v384zM1152 384v-128h-640v128h640zM1152 1152v-640h-640v640h640zM1792 384v-128h-512v128h512zM1792 640v-128h-512v128h512zM1792 896v-128h-512v128h512zM1792 1152v-128h-512v128h512zM256 192v960h-128v-960c0 -35 29 -64 64 -64 +s64 29 64 64zM1920 192v1088h-1536v-1088c0 -22 -4 -44 -11 -64h1483c35 0 64 29 64 64zM2048 1408v-1216c0 -106 -86 -192 -192 -192h-1664c-106 0 -192 86 -192 192v1088h256v128h1792z" /> + <glyph glyph-name="building" unicode="" horiz-adv-x="1408" +d="M1344 1536c35 0 64 -29 64 -64v-1664c0 -35 -29 -64 -64 -64h-1280c-35 0 -64 29 -64 64v1664c0 35 29 64 64 64h1280zM512 1248v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32zM512 992v-64c0 -18 14 -32 32 -32h64 +c18 0 32 14 32 32v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32zM512 736v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32zM512 480v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32v64c0 18 -14 32 -32 32h-64 +c-18 0 -32 -14 -32 -32zM384 160v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM384 416v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM384 672v64 +c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM384 928v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM384 1184v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-64 +c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM896 -96v192c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h320c18 0 32 14 32 32zM896 416v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32z +M896 672v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM896 928v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM896 1184v64c0 18 -14 32 -32 32h-64 +c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM1152 160v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM1152 416v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h64 +c18 0 32 14 32 32zM1152 672v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM1152 928v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM1152 1184v64c0 18 -14 32 -32 32 +h-64c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32z" /> + <glyph glyph-name="bitbucket" unicode="" horiz-adv-x="1408" +d="M815 677c11 -84 -91 -150 -162 -107c-80 35 -80 162 -2 198c67 41 164 -13 164 -91zM926 698c-18 142 -179 236 -310 177c-83 -37 -139 -125 -135 -218c5 -122 121 -222 243 -211s217 130 202 252zM1165 1240c-44 58 -119 68 -185 79c-187 30 -379 31 -566 -2 +c-62 -10 -132 -21 -171 -77c64 -60 155 -69 237 -79c148 -19 300 -20 448 -1c83 10 175 18 237 80zM1222 205c-28 -98 -12 -230 -116 -287c-179 -99 -396 -110 -593 -75c-104 19 -226 52 -283 150c-25 96 -41 194 -57 292l6 16l18 9c298 -197 715 -197 1014 0 +c47 -14 12 -71 11 -105zM1403 1166c-34 -219 -73 -437 -111 -655c-11 -64 -73 -100 -125 -127c-187 -94 -405 -110 -610 -88c-139 15 -281 52 -394 139c-53 41 -53 111 -63 170c-35 205 -75 410 -100 617c12 90 113 129 188 157c100 37 207 54 313 64c226 22 457 14 676 -50 +c78 -23 162 -55 215 -122c24 -31 16 -70 11 -105z" /> + <glyph glyph-name="yelp" unicode="" horiz-adv-x="1366" +d="M688 217v-127c-1 -282 -1 -292 -6 -305c-8 -21 -26 -35 -51 -40c-72 -12 -297 71 -344 127c-10 11 -15 24 -17 36c-1 9 1 18 4 26c5 14 14 25 215 263c0 0 1 0 60 70c20 25 56 33 89 21c33 -13 51 -41 50 -71zM539 468c-2 -35 -22 -61 -52 -70l-120 -39 +c-269 -86 -278 -88 -292 -88c-22 1 -42 14 -54 36c-8 16 -14 43 -17 75c-11 98 2 245 31 291c14 22 34 33 56 32c15 0 27 -6 317 -124c0 0 -1 -1 84 -34c30 -12 49 -43 47 -79zM1365 171c-10 -72 -159 -261 -227 -288c-23 -9 -46 -7 -63 7c-12 9 -24 27 -184 287l-47 77 +c-18 28 -15 64 8 92c22 27 54 36 83 26c0 0 1 -1 119 -40c269 -88 278 -91 289 -100c18 -14 26 -35 22 -61zM693 803c5 -104 -39 -117 -54 -122c-14 -4 -58 -17 -114 71c-368 581 -378 598 -378 598c-5 21 1 44 19 62c55 57 354 141 432 121c25 -6 43 -22 49 -45 +c4 -25 40 -564 46 -685zM1355 695c2 -25 -7 -46 -26 -59c-12 -8 -24 -12 -329 -86c-49 -11 -76 -18 -91 -23l1 2c-30 -8 -64 6 -83 36s-18 63 0 87c0 0 1 1 75 102c164 224 172 235 184 243c19 13 42 13 65 2c65 -31 196 -226 204 -301v-3z" /> + <glyph glyph-name="neuter" unicode="" horiz-adv-x="1152" +d="M1152 960c0 -296 -224 -540 -512 -572v-612c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v612c-288 32 -512 276 -512 572c0 318 258 576 576 576s576 -258 576 -576zM576 512c247 0 448 201 448 448s-201 448 -448 448s-448 -201 -448 -448s201 -448 448 -448z" /> + <glyph glyph-name="behance-square" unicode="" +d="M1248 1408c159 0 288 -129 288 -288v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960zM499 1041h-371v-787h382c143 0 277 68 277 228c0 99 -47 172 -143 200c70 34 107 85 107 164c0 157 -117 195 -252 195zM477 723 +h-176v184h163c62 0 119 -17 119 -90c0 -67 -44 -94 -106 -94zM486 388h-185v217h189c76 0 124 -33 124 -113s-57 -104 -128 -104zM1136 356c-92 0 -140 54 -140 145h411c1 10 1 20 1 30c0 168 -99 309 -278 309c-173 0 -292 -131 -292 -302c0 -178 112 -299 292 -299 +c137 0 225 61 267 191h-138c-15 -48 -76 -74 -123 -74zM1126 722c78 0 117 -47 124 -122h-254c5 75 55 122 130 122zM964 988v-77h319v77h-319z" /> + <glyph glyph-name="wifi" unicode="" horiz-adv-x="1964" +d="M982 13c-26 0 -166 140 -166 167c0 49 128 76 166 76s166 -27 166 -76c0 -27 -140 -167 -166 -167zM1252 284c-14 0 -123 100 -270 100c-148 0 -255 -100 -270 -100c-24 0 -169 144 -169 168c0 9 4 17 10 23c107 106 281 165 429 165s322 -59 429 -165 +c6 -6 10 -14 10 -23c0 -24 -145 -168 -169 -168zM1525 556c-8 0 -17 4 -23 8c-165 128 -304 204 -520 204c-302 0 -532 -212 -543 -212c-23 0 -167 144 -167 168c0 8 4 16 10 22c179 179 449 278 700 278s521 -99 700 -278c6 -6 10 -14 10 -22c0 -24 -144 -168 -167 -168z +M1796 827c-8 0 -16 4 -22 9c-231 203 -480 316 -792 316s-561 -113 -792 -316c-6 -5 -14 -9 -22 -9c-23 0 -168 144 -168 168c0 9 4 17 10 23c253 251 618 390 972 390s719 -139 972 -390c6 -6 10 -14 10 -23c0 -24 -145 -168 -168 -168z" /> + <glyph glyph-name="youtube" unicode="" horiz-adv-x="1482" +d="M944 292v-211c0 -45 -13 -67 -39 -67c-15 0 -30 7 -45 22v301c15 15 30 22 45 22c26 0 39 -23 39 -67zM1282 291v-46h-90v46c0 45 15 68 45 68s45 -23 45 -68zM316 509h107v94h-312v-94h105v-569h100v569zM604 -60h89v494h-89v-378c-20 -28 -39 -42 -57 -42 +c-12 0 -19 7 -21 21c-1 3 -1 14 -1 35v364h-89v-391c0 -35 3 -58 8 -73c8 -25 29 -37 58 -37c32 0 66 20 102 61v-54zM1033 88v197c0 46 -2 79 -9 99c-11 37 -36 56 -71 56c-33 0 -64 -18 -93 -54v217h-89v-663h89v48c30 -37 61 -55 93 -55c35 0 60 19 71 55 +c7 21 9 54 9 100zM1371 98v13h-91c0 -36 -1 -56 -2 -61c-5 -24 -18 -36 -40 -36c-31 0 -46 23 -46 69v87h179v103c0 53 -9 91 -27 116c-26 34 -61 51 -106 51c-46 0 -81 -17 -107 -51c-19 -25 -28 -63 -28 -116v-173c0 -53 10 -92 29 -116c26 -34 61 -51 108 -51 +s84 18 108 53c11 16 19 34 21 54c2 9 2 29 2 58zM763 1011v210c0 46 -13 69 -43 69c-29 0 -43 -23 -43 -69v-210c0 -46 14 -70 43 -70c30 0 43 24 43 70zM1482 260c0 -115 -1 -238 -26 -350c-19 -79 -83 -137 -160 -145c-184 -21 -370 -21 -555 -21s-371 0 -555 21 +c-77 8 -142 66 -160 145c-26 112 -26 235 -26 350c0 116 1 238 26 350c19 79 83 137 161 146c183 20 369 20 554 20s371 0 555 -20c77 -9 142 -67 160 -146c26 -112 26 -234 26 -350zM484 1536h102l-121 -399v-271h-100v271c-9 49 -29 119 -61 212c-22 62 -44 125 -65 187 +h106l71 -263zM854 1203v-175c0 -53 -9 -93 -28 -118c-25 -34 -60 -51 -106 -51c-45 0 -80 17 -105 51c-19 26 -28 65 -28 118v175c0 53 9 92 28 117c25 34 60 51 105 51c46 0 81 -17 106 -51c19 -25 28 -64 28 -117zM1189 1365v-499h-91v55c-36 -42 -70 -62 -103 -62 +c-29 0 -50 12 -59 37c-5 15 -8 39 -8 75v394h91v-367c0 -21 0 -33 1 -35c2 -14 9 -22 21 -22c18 0 37 14 57 43v381h91z" /> + <glyph glyph-name="angle-double-down" unicode="" horiz-adv-x="998" +d="M998 672c0 -8 -4 -17 -10 -23l-466 -466c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-466 466c-6 6 -10 15 -10 23s4 17 10 23l50 50c6 6 14 10 23 10c8 0 17 -4 23 -10l393 -393l393 393c6 6 15 10 23 10s17 -4 23 -10l50 -50c6 -6 10 -15 10 -23zM998 1056 +c0 -8 -4 -17 -10 -23l-466 -466c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-466 466c-6 6 -10 15 -10 23s4 17 10 23l50 50c6 6 14 10 23 10c8 0 17 -4 23 -10l393 -393l393 393c6 6 15 10 23 10s17 -4 23 -10l50 -50c6 -6 10 -15 10 -23z" /> + <glyph glyph-name="sort-alpha-asc" unicode="" horiz-adv-x="1629" +d="M1159 1128h177l-72 218l-12 47c-1 8 -2 14 -2 20h-4l-3 -20c-3 -12 -4 -27 -11 -47zM704 96c0 -9 -4 -17 -10 -24l-319 -319c-7 -6 -15 -9 -23 -9s-16 3 -23 9l-320 320c-9 10 -12 23 -7 35s17 20 30 20h192v1376c0 18 14 32 32 32h192c18 0 32 -14 32 -32v-1376h192 +c18 0 32 -14 32 -32zM1540 -23v-233h-584v90l369 529c8 12 16 22 21 27l11 9v3c-4 0 -8 -1 -14 -1c-8 -2 -18 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530c-6 -9 -14 -18 -21 -26l-11 -11v-2l14 2c9 2 18 2 30 2h248v119h121zM1629 874v-106h-288v106h75l-47 144h-243 +l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70z" /> + <glyph glyph-name="area-chart" unicode="" horiz-adv-x="2048" +d="M2048 0v-128h-2048v1536h128v-1408h1920zM1664 1024l256 -896h-1664v576l448 576l576 -576z" /> + <glyph glyph-name="dev-to" unicode="" +d="M39 1403v0c13 5 121 6 735 5c717 -1 721 -1 734 -9c7 -5 15 -14 20 -21c8 -13 8 -16 8 -739s0 -726 -8 -739c-5 -7 -13 -15 -20 -20c-13 -8 -16 -8 -739 -8s-726 0 -739 8c-7 5 -16 13 -21 20c-8 13 -8 16 -9 731c0 490 0 723 3 733c5 19 18 33 36 39zM404 935 +c-18 4 -53 6 -119 6h-93v-603h84c46 0 96 1 111 3c72 9 131 63 144 132c5 26 5 306 0 332c-6 31 -20 59 -43 83c-25 26 -50 40 -84 47zM897 886v55h-118c-92 0 -121 -2 -133 -6c-20 -7 -42 -30 -47 -50c-3 -11 -4 -89 -3 -254c1 -265 -1 -250 27 -274c20 -17 39 -19 163 -19 +h111v109l-95 1l-96 1l-1 69v69h116v109h-116v136h192v54zM1081 933c-3 8 -4 8 -62 8h-59l3 -10c26 -106 136 -514 143 -528c11 -23 33 -49 49 -57c18 -9 47 -7 67 4c16 9 45 45 50 62c8 25 138 522 138 525s-16 4 -60 3l-58 -1l-52 -198c-28 -109 -52 -199 -53 -202 +s-24 83 -52 190s-52 199 -54 204zM301 639v193l41 -1c37 -2 42 -2 56 -11c28 -18 27 -18 27 -178c0 -164 0 -166 -29 -183c-15 -9 -22 -10 -56 -11l-39 -2v193z" /> + <glyph glyph-name="stethoscope" unicode="" horiz-adv-x="1408" +d="M1280 832c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1408 832c0 -84 -53 -154 -128 -181v-395c0 -212 -201 -384 -448 -384s-448 172 -448 384v132c-217 27 -384 187 -384 380v512c0 35 29 64 64 64c6 0 11 -1 16 -2c22 39 64 66 112 66 +c71 0 128 -57 128 -128s-57 -128 -128 -128c-23 0 -45 7 -64 18v-402c0 -141 144 -256 320 -256s320 115 320 256v402c-19 -11 -41 -18 -64 -18c-71 0 -128 57 -128 128s57 128 128 128c48 0 90 -27 112 -66c5 1 10 2 16 2c35 0 64 -29 64 -64v-512 +c0 -193 -167 -353 -384 -380v-132c0 -141 144 -256 320 -256s320 115 320 256v395c-75 27 -128 97 -128 181c0 106 86 192 192 192s192 -86 192 -192z" /> + <glyph glyph-name="step-forward" unicode="" horiz-adv-x="1024" +d="M45 -115c-25 -25 -45 -16 -45 19v1472c0 35 20 44 45 19l710 -710c6 -6 10 -12 13 -19v678c0 35 29 64 64 64h128c35 0 64 -29 64 -64v-1408c0 -35 -29 -64 -64 -64h-128c-35 0 -64 29 -64 64v678c-3 -7 -7 -13 -13 -19z" /> + <glyph glyph-name="backward" unicode="" horiz-adv-x="1542" +d="M1497 1395c25 25 45 16 45 -19v-1472c0 -35 -20 -44 -45 -19l-710 710c-6 6 -10 12 -13 19v-710c0 -35 -20 -44 -45 -19l-710 710c-25 25 -25 65 0 90l710 710c25 25 45 16 45 -19v-710c3 7 7 13 13 19z" /> + </font> +</defs></svg> diff --git a/themes/learn4/fonts/forkawesome-webfont.ttf b/themes/learn4/fonts/forkawesome-webfont.ttf new file mode 100644 index 00000000..6cf62efb Binary files /dev/null and b/themes/learn4/fonts/forkawesome-webfont.ttf differ diff --git a/themes/learn4/fonts/forkawesome-webfont.woff b/themes/learn4/fonts/forkawesome-webfont.woff new file mode 100644 index 00000000..477da445 Binary files /dev/null and b/themes/learn4/fonts/forkawesome-webfont.woff differ diff --git a/themes/learn4/fonts/forkawesome-webfont.woff2 b/themes/learn4/fonts/forkawesome-webfont.woff2 new file mode 100644 index 00000000..f3520b53 Binary files /dev/null and b/themes/learn4/fonts/forkawesome-webfont.woff2 differ diff --git a/themes/learn4/fonts/hack-regular-subset.woff b/themes/learn4/fonts/hack-regular-subset.woff new file mode 100644 index 00000000..85583a52 Binary files /dev/null and b/themes/learn4/fonts/hack-regular-subset.woff differ diff --git a/themes/learn4/fonts/hack-regular-subset.woff2 b/themes/learn4/fonts/hack-regular-subset.woff2 new file mode 100644 index 00000000..1e3abb96 Binary files /dev/null and b/themes/learn4/fonts/hack-regular-subset.woff2 differ diff --git a/themes/learn4/fonts/metropolis-bold-webfont.woff b/themes/learn4/fonts/metropolis-bold-webfont.woff new file mode 100644 index 00000000..c566402d Binary files /dev/null and b/themes/learn4/fonts/metropolis-bold-webfont.woff differ diff --git a/themes/learn4/fonts/metropolis-bold-webfont.woff2 b/themes/learn4/fonts/metropolis-bold-webfont.woff2 new file mode 100644 index 00000000..fccea4d2 Binary files /dev/null and b/themes/learn4/fonts/metropolis-bold-webfont.woff2 differ diff --git a/themes/learn4/gulpfile.js b/themes/learn4/gulpfile.js new file mode 100644 index 00000000..74e7bed2 --- /dev/null +++ b/themes/learn4/gulpfile.js @@ -0,0 +1,43 @@ +var gulp = require('gulp'); +var sass = require('gulp-sass'); +var cleancss = require('gulp-clean-css'); +var csscomb = require('gulp-csscomb'); +var rename = require('gulp-rename'); +var autoprefixer = require('gulp-autoprefixer'); +var sourcemaps = require('gulp-sourcemaps'); + +// configure the paths +var watch_dir = './scss/**/*.scss'; +var src_dir = './scss/*.scss'; +var dest_dir = './css-compiled'; + +var paths = { + source: src_dir +}; + +function watch() { + return gulp.watch(watch_dir, build); +} + +function build() { + return gulp.src(paths.source) + .pipe(sourcemaps.init()) + .pipe(sass({ + outputStyle: 'compact', + precision: 10 + }).on('error', sass.logError) + ) + .pipe(sourcemaps.write()) + .pipe(autoprefixer()) + .pipe(gulp.dest(dest_dir)) + .pipe(csscomb()) + .pipe(cleancss()) + .pipe(rename({ + suffix: '.min' + })) + .pipe(gulp.dest(dest_dir)); +} + +exports.watch = watch; +exports.build = build; +exports.default = build; diff --git a/themes/learn4/images/favicon.png b/themes/learn4/images/favicon.png new file mode 100644 index 00000000..85526cf4 Binary files /dev/null and b/themes/learn4/images/favicon.png differ diff --git a/themes/learn4/images/grav-logo.svg b/themes/learn4/images/grav-logo.svg new file mode 100644 index 00000000..845a9944 --- /dev/null +++ b/themes/learn4/images/grav-logo.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" viewBox="0 0 504 140" clip-rule="evenodd"><path d="M235.83 71.56h-7.98c-1.2 0-2.2 1-2.2 2.2V89.1l-.15.13c-4.7 3.96-10.64 6.14-16.72 6.14-14.36 0-26.04-11.68-26.04-26.04s11.68-26.04 26.04-26.04c5.58 0 10.92 1.76 15.44 5.1.87.66 2.1.57 2.86-.2l5.7-5.7c.44-.44.67-1.05.63-1.68-.02-.62-.32-1.2-.82-1.6-6.76-5.35-15.2-8.3-23.8-8.3-21.18 0-38.42 17.23-38.42 38.4 0 21.2 17.24 38.42 38.42 38.42 10.93 0 21.4-4.7 28.7-12.9.35-.4.55-.93.55-1.47v-19.6c0-1.22-.98-2.2-2.2-2.2M502.8 34.44c-.4-.6-1.1-.98-1.84-.98h-8.7c-.87 0-1.66.52-2 1.32l-24.5 56.84-24.9-56.85c-.36-.8-1.15-1.3-2.02-1.3h-8.72c-.74 0-1.44.36-1.84.98-.4.62-.48 1.4-.17 2.1l30.2 68.85c.34.8 1.13 1.32 2 1.32h11c.88 0 1.67-.53 2.02-1.33l29.66-68.87c.3-.68.22-1.47-.2-2.1"/><path d="M388.68 34.77c-.35-.8-1.14-1.32-2-1.32h-11c-.88 0-1.67.53-2.02 1.33L344 103.64c-.3.68-.22 1.47.18 2.08.4.62 1.1 1 1.84 1h8.7c.86 0 1.66-.53 2-1.33l24.5-56.86 24.9 56.86c.36.8 1.15 1.32 2.02 1.32h8.72c.74 0 1.44-.38 1.84-1 .4-.62.47-1.4.17-2.1l-30.2-68.85zM309.2 81.52l.47-.22c8.68-4.2 14.28-13.1 14.28-22.67 0-13.88-11.3-25.18-25.17-25.18H266.9c-1.2 0-2.2 1-2.2 2.2v68.86c0 1.23 1 2.22 2.2 2.22h8c1.2 0 2.2-1 2.2-2.2V45.8h21.68c7.05 0 12.8 5.75 12.8 12.8 0 5.9-4 11-9.73 12.42-1.04.26-2.07.4-3.07.4h-7.98c-.83 0-1.6.46-1.96 1.2-.38.73-.3 1.62.2 2.3l22.6 30.87c.42.58 1.08.92 1.78.92h9.9c.84 0 1.6-.47 1.97-1.2.37-.75.3-1.64-.2-2.3l-15.9-21.7zM107.2 80.97c-7.26-4.8-11.4-8.85-15.02-16.1-2.47 4.97-8.24 12.37-17.96 18.2-4.86 15.1-27.96 44-35.43 39.9-2.22-1.2-2.64-2.8-2.15-4.45.54-4.13 9.08-13.62 9.08-13.62s.18 2 2.92 6.18c-3.6-11.2 5.96-25.03 8.5-29.73 3.98-1.27 4.27-6.4 4.27-6.4.26-7.9-3.28-13.63-6.7-17.05 2.46 3 3.25 7.54 3.37 11.7v.02c0 .47 0 .93 0 1.4-.12 3.43-1.16 8.18-3.38 8.18v.03c-2.28-.1-5.1.4-7.63 1.18l-5.6 1.34s2.98-.13 4.6 1.25c-1.8 2.9-5.78 6.53-10.22 8.58-6.45 3-8.3-2.96-5.03-6.84.8-.94 1.62-1.74 2.38-2.4-.5-.5-.8-1.2-.88-2.06 0 0 0 0 0-.02-.46-1.97-.2-4.54 2.6-8.62.54-.86 1.2-1.75 2-2.65.02-.04.04-.07.07-.1.03-.04.07-.08.1-.12.02-.02.04-.04.06-.06.2-.23.42-.45.64-.67 3.34-3.4 8.6-6.96 16.9-10.15C64.4 43.68 67.94 41 67.94 41c1.07-1.1 2.94-2.45 3.63-2.8-5.05-8.77-6.07-21.15-4.75-24.5-.1.2-.2.38-.3.57.5-1.14.83-1.5 1.34-2.1 1.38-1.64 6.06-2.5 7.74.96.9 1.84 1.06 4.23 1.03 6.02-3.7-.2-7.06 4.04-7.06 4.04s3.07-1.46 6.88-1.5c0 0 1 .9 2.28 2.56-1.7 3.2-4.52 10.02-2.5 17.16.35 1.4.86 2.62 1.5 3.65.02.05.04.1.07.14.05.07.1.13.14.2 3.37 5.06 9.54 5.66 9.54 5.66-2.9-1.45-5.27-3.76-6.8-6.56-.82-1.5-1.3-2.77-1.6-3.77-1.64-6.3.77-10 2.14-12.47 3.17-4.9 8.95-7.9 15.15-7.18 8.72 1 14.97 8.86 13.98 17.57-.6 5.32-3.78 9.72-8.15 12.12 1.05 2.84-.07 6.28-.07 6.28 2.64 3.32 2.76 5.23 2.67 7-3.36-.55-6.62 1.7-6.62 1.7s6.48-1.53 10.24 1.82c2.44 2.64 4.08 5 5.05 6.77 1.4 2.5 7.86 2.68 7.12 7.2-.74 4.5-5.68 4.53-13.4-.57M69.56 0C31.15 0 0 31.15 0 69.57c0 38.42 31.15 69.57 69.57 69.57 38.42 0 69.57-31.15 69.57-69.57C139.14 31.15 108 0 69.57 0M73.8 51.7c.8-.82.8-2.14 0-2.95-.82-.82-2.14-.82-2.95 0-.82.8-.82 2.13 0 2.94.8.8 2.13.8 2.95 0M66.45 53.15c-.82.8-.82 2.13 0 2.95.8.8 2.13.8 2.94 0 .8-.82.8-2.14 0-2.95-.82-.8-2.14-.8-2.95 0"/><path d="M79.23 54.23c-1.27-1.27-3.34-1.27-4.6 0l-2.72 2.7c-1.27 1.3-1.27 3.35 0 4.63l3 2.97c1.26 1.28 3.32 1.28 4.6 0l2.7-2.7c1.28-1.28 1.28-3.35 0-4.62l-2.97-2.97zM95.76 41.44c-2.15-2.57 1.87-7.25 4.4-4.46 4.64 5.15-2.25 7.04-4.4 4.46m9.24 2.7c3.45-6.56-1.42-10.4-4.77-13.53-5.36-5.03-10.7-7.2-16.8-.23-6.1 6.98-2.24 15.07 3.35 19.06 5.58 4 14.78 1.25 18.22-5.3"/></svg> \ No newline at end of file diff --git a/themes/learn4/images/logo/0.png b/themes/learn4/images/logo/0.png new file mode 100644 index 00000000..582a1e15 Binary files /dev/null and b/themes/learn4/images/logo/0.png differ diff --git a/themes/learn4/images/logo/airtable.svg b/themes/learn4/images/logo/airtable.svg new file mode 100644 index 00000000..867c3b5a --- /dev/null +++ b/themes/learn4/images/logo/airtable.svg @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg width="256px" height="215px" viewBox="0 0 256 215" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid"> + <g> + <path d="M114.25873,2.70101695 L18.8604023,42.1756384 C13.5552723,44.3711638 13.6102328,51.9065311 18.9486282,54.0225085 L114.746142,92.0117514 C123.163769,95.3498757 132.537419,95.3498757 140.9536,92.0117514 L236.75256,54.0225085 C242.08951,51.9065311 242.145916,44.3711638 236.83934,42.1756384 L141.442459,2.70101695 C132.738459,-0.900338983 122.961284,-0.900338983 114.25873,2.70101695" fill="#FFBF00"></path> + <path d="M136.349071,112.756863 L136.349071,207.659101 C136.349071,212.173089 140.900664,215.263892 145.096461,213.600615 L251.844122,172.166219 C254.281184,171.200072 255.879376,168.845451 255.879376,166.224705 L255.879376,71.3224678 C255.879376,66.8084791 251.327783,63.7176768 247.131986,65.3809537 L140.384325,106.815349 C137.94871,107.781496 136.349071,110.136118 136.349071,112.756863" fill="#26B5F8"></path> + <path d="M111.422771,117.65355 L79.742409,132.949912 L76.5257763,134.504714 L9.65047684,166.548104 C5.4112904,168.593211 0.000578531073,165.503855 0.000578531073,160.794612 L0.000578531073,71.7210757 C0.000578531073,70.0173017 0.874160452,68.5463864 2.04568588,67.4384994 C2.53454463,66.9481944 3.08848814,66.5446689 3.66412655,66.2250305 C5.26231864,65.2661153 7.54173107,65.0101153 9.47981017,65.7766689 L110.890522,105.957098 C116.045234,108.002206 116.450206,115.225166 111.422771,117.65355" fill="#ED3049"></path> + <path d="M111.422771,117.65355 L79.742409,132.949912 L2.04568588,67.4384994 C2.53454463,66.9481944 3.08848814,66.5446689 3.66412655,66.2250305 C5.26231864,65.2661153 7.54173107,65.0101153 9.47981017,65.7766689 L110.890522,105.957098 C116.045234,108.002206 116.450206,115.225166 111.422771,117.65355" fill-opacity="0.25" fill="#000000"></path> + </g> +</svg> diff --git a/themes/learn4/images/logo/logo.svg b/themes/learn4/images/logo/logo.svg new file mode 100644 index 00000000..d63e31f1 --- /dev/null +++ b/themes/learn4/images/logo/logo.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="640" height="200" viewBox="0 0 640 200" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><filter id="a"><feOffset dy="-200" in="SourceGraphic" result="b"></feOffset><feColorMatrix in="b" result="b" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0"></feColorMatrix><feComposite in="SourceGraphic" in2="b" operator="in"></feComposite></filter></defs><image width="100%" height="200%" xlink:href="data:image/jpeg;base64,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" filter="url(#a)"></image></svg> \ No newline at end of file diff --git a/themes/learn4/images/logo/screenshot.jpg b/themes/learn4/images/logo/screenshot.jpg new file mode 100644 index 00000000..6698e272 Binary files /dev/null and b/themes/learn4/images/logo/screenshot.jpg differ diff --git a/themes/learn4/js/learn4.js b/themes/learn4/js/learn4.js new file mode 100644 index 00000000..073d7f76 --- /dev/null +++ b/themes/learn4/js/learn4.js @@ -0,0 +1,37 @@ +!function(a){var n={};function r(e){if(n[e])return n[e].exports;var t=n[e]={i:e,l:!1,exports:{}};return a[e].call(t.exports,t,t.exports,r),t.l=!0,t.exports}r.m=a,r.c=n,r.d=function(e,t,a){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:a})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var a=Object.create(null);if(r.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var n in t)r.d(a,n,function(e){return t[e]}.bind(null,n));return a},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s="./app/main.js")}({"./app/history.js": +/*!************************!*\ + !*** ./app/history.js ***! + \************************/ +/*! no static exports found */function(e,t,a){"use strict";var n,r=a(/*! jquery */"jquery");(0,((n=r)&&n.__esModule?n:{default:n}).default)(document).on("click","[data-clear-history-toggle]",function(e){e.preventDefault(),window.sessionStorage.clear(),window.location.reload()})},"./app/main.js": +/*!*********************!*\ + !*** ./app/main.js ***! + \*********************/ +/*! no static exports found */function(e,t,a){"use strict";var n,r=a(/*! jquery */"jquery"),i=(n=r)&&n.__esModule?n:{default:n};a(/*! ./utils */"./app/utils/index.js"),a(/*! ./toc */"./app/toc.js"),a(/*! ./history */"./app/history.js"),a(/*! ./search */"./app/search.js"),a(/*! ./nav */"./app/nav.js"),(0,i.default)(window).on("load",function(){for(var e in window.sessionStorage.setItem((0,i.default)("body").data("url"),"1"),window.sessionStorage)"1"===window.sessionStorage.getItem(e)&&(0,i.default)('[data-nav-id="'+e+'"]').addClass("visited");(0,i.default)(".highlightable").highlight(window.sessionStorage.getItem("search-value"),{element:"mark"})})},"./app/nav.js": +/*!********************!*\ + !*** ./app/nav.js ***! + \********************/ +/*! no static exports found */function(e,t,a){"use strict";var n,r=a(/*! jquery */"jquery"),i=(n=r)&&n.__esModule?n:{default:n};window.sessionStorage.getItem("search-value")&&((0,i.default)(document.body).removeClass("searchbox-hidden"),(0,i.default)("[data-search-input]").val(sessionStorage.getItem("search-value")).trigger("input")),(0,i.default)(document).on("click",".nav-prev, .nav-next",function(e){var t=(0,i.default)(e.currentTarget);window.location.href=t.attr("href")}),(0,i.default)(document).on("keydown",function(e){var t=37===e.which?(0,i.default)("a.nav-prev"):39===e.which?(0,i.default)("a.nav-next"):null;t&&t.click()})},"./app/search.js": +/*!***********************!*\ + !*** ./app/search.js ***! + \***********************/ +/*! no static exports found */function(e,t,a){"use strict";var n,r=a(/*! jquery */"jquery"),s=(n=r)&&n.__esModule?n:{default:n};var l=void 0;(0,s.default)(document).on("input","[data-search-input]",function(e){var t=(0,s.default)(e.currentTarget),a=t.val(),n=(0,s.default)("[data-nav-id]");n.removeClass("search-match");var r=(0,s.default)("ul.topics"),i=(0,s.default)(".highlightable");if(!a.length)return r.removeClass("searched"),n.css("display","block"),window.sessionStorage.removeItem("search-value"),void i.unhighlight({element:"mark"});window.sessionStorage.setItem("search-value",a),i.unhighlight({element:"mark"}).highlight(a,{element:"mark"}),l&&l.abort&&l.abort(),l=s.default.ajax({url:t.data("search-input")+":"+a}).done(function(e){e&&e.results&&e.results.length&&(n.css("display","none"),r.addClass("searched"),e.results.forEach(function(e){var t=(0,s.default)('[data-nav-id="'+e+'"]');t.css("display","block").addClass("search-match"),t.parents("li").css("display","block")}))})}),(0,s.default)(document).on("click","[data-search-clear]",function(){(0,s.default)("[data-search-input]").val("").trigger("input"),window.sessionStorage.removeItem("search-input"),(0,s.default)(".highlightable").unhighlight({element:"mark"})})},"./app/toc.js": +/*!********************!*\ + !*** ./app/toc.js ***! + \********************/ +/*! no static exports found */function(e,t,a){"use strict";var n,r=a(/*! jquery */"jquery"),i=(n=r)&&n.__esModule?n:{default:n};(0,i.default)(document).on("click",".toc-toggle",function(){(0,i.default)(".page-toc").toggleClass("toc-closed")})},"./app/utils/highlight.js": +/*!********************************!*\ + !*** ./app/utils/highlight.js ***! + \********************************/ +/*! no static exports found */function(e,t,a){"use strict";var n,r=a(/*! jquery */"jquery"),u=(n=r)&&n.__esModule?n:{default:n};u.default.extend({highlight:function(e,t,a,n){if(3===e.nodeType){var r=e.data.match(t);if(r){var i=document.createElement(a||"span");i.className=n||"highlight";var s=e.splitText(r.index);s.splitText(r[0].length);var l=s.cloneNode(!0);return i.appendChild(l),s.parentNode.replaceChild(i,s),1}}else if(1===e.nodeType&&e.childNodes&&!/(script|style)/i.test(e.tagName)&&(e.tagName!==a.toUpperCase()||e.className!==n))for(var o=0;o<e.childNodes.length;o++)o+=u.default.highlight(e.childNodes[o],t,a,n);return 0}}),u.default.fn.unhighlight=function(e){var t={className:"highlight",element:"span"};return u.default.extend(t,e),this.find(t.element+"."+t.className).each(function(){var e=this.parentNode;e.replaceChild(this.firstChild,this),e.normalize()}).end()},u.default.fn.highlight=function(e,t){var a={className:"highlight",element:"span",caseSensitive:!1,wordsOnly:!1};if(u.default.extend(a,t),e){if(e.constructor===String&&(e=[e]),e=u.default.grep(e,function(e){return""!==e}),0===(e=u.default.map(e,function(e){return e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")})).length)return this;var n=a.caseSensitive?"":"i",r="("+e.join("|")+")";a.wordsOnly&&(r="\\b"+r+"\\b");var i=new RegExp(r,n);return this.each(function(){u.default.highlight(this,i,a.element,a.className)})}}},"./app/utils/index.js": +/*!****************************!*\ + !*** ./app/utils/index.js ***! + \****************************/ +/*! no static exports found */function(e,t,a){"use strict";a(/*! ./highlight */"./app/utils/highlight.js"),a(/*! ./progress */"./app/utils/progress.js")},"./app/utils/progress.js": +/*!*******************************!*\ + !*** ./app/utils/progress.js ***! + \*******************************/ +/*! no static exports found */function(e,t,a){"use strict";var n=document.documentElement,r=document.body,i="scrollTop",s="scrollHeight",l=document.querySelector(".progress"),o=void 0;document.addEventListener("scroll",function(){o=(n[i]||r[i])/((n[s]||r[s])-n.clientHeight)*100,l.style.setProperty("--scroll",o+"%")})},jquery: +/*!*************************!*\ + !*** external "jQuery" ***! + \*************************/ +/*! no static exports found */function(e,t){e.exports=jQuery}}); \ No newline at end of file diff --git a/themes/learn4/js/vendor.js b/themes/learn4/js/vendor.js new file mode 100644 index 00000000..f312fe97 --- /dev/null +++ b/themes/learn4/js/vendor.js @@ -0,0 +1,822 @@ +(window["webpackJsonp"] = window["webpackJsonp"] || []).push([["vendor"],{ + +/***/ "./node_modules/can-use-dom/index.js": +/*!*******************************************!*\ + !*** ./node_modules/can-use-dom/index.js ***! + \*******************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("var canUseDOM = !!(\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement\n);\n\nmodule.exports = canUseDOM;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FuLXVzZS1kb20vaW5kZXguanM/MDMxMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2Nhbi11c2UtZG9tL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGNhblVzZURPTSA9ICEhKFxuICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICB3aW5kb3cuZG9jdW1lbnQgJiZcbiAgd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnRcbik7XG5cbm1vZHVsZS5leHBvcnRzID0gY2FuVXNlRE9NOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/can-use-dom/index.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_a-function.js": +/*!*****************************************************!*\ + !*** ./node_modules/core-js/modules/_a-function.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hLWZ1bmN0aW9uLmpzP2Q4ZTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hLWZ1bmN0aW9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_a-function.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_add-to-unscopables.js": +/*!*************************************************************!*\ + !*** ./node_modules/core-js/modules/_add-to-unscopables.js ***! + \*************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/modules/_wks.js\")('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) __webpack_require__(/*! ./_hide */ \"./node_modules/core-js/modules/_hide.js\")(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hZGQtdG8tdW5zY29wYWJsZXMuanM/OWM2YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLHNEQUFRO0FBQ2xDO0FBQ0EsMENBQTBDLG1CQUFPLENBQUMsd0RBQVMsNkJBQTZCO0FBQ3hGO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FkZC10by11bnNjb3BhYmxlcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIyLjEuMy4zMSBBcnJheS5wcm90b3R5cGVbQEB1bnNjb3BhYmxlc11cbnZhciBVTlNDT1BBQkxFUyA9IHJlcXVpcmUoJy4vX3drcycpKCd1bnNjb3BhYmxlcycpO1xudmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5pZiAoQXJyYXlQcm90b1tVTlNDT1BBQkxFU10gPT0gdW5kZWZpbmVkKSByZXF1aXJlKCcuL19oaWRlJykoQXJyYXlQcm90bywgVU5TQ09QQUJMRVMsIHt9KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICBBcnJheVByb3RvW1VOU0NPUEFCTEVTXVtrZXldID0gdHJ1ZTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_add-to-unscopables.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_advance-string-index.js": +/*!***************************************************************!*\ + !*** ./node_modules/core-js/modules/_advance-string-index.js ***! + \***************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar at = __webpack_require__(/*! ./_string-at */ \"./node_modules/core-js/modules/_string-at.js\")(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? at(S, index).length : 1);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hZHZhbmNlLXN0cmluZy1pbmRleC5qcz8wMzkwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsU0FBUyxtQkFBTyxDQUFDLGtFQUFjOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWR2YW5jZS1zdHJpbmctaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuIC8vIGBBZHZhbmNlU3RyaW5nSW5kZXhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChTLCBpbmRleCwgdW5pY29kZSkge1xuICByZXR1cm4gaW5kZXggKyAodW5pY29kZSA/IGF0KFMsIGluZGV4KS5sZW5ndGggOiAxKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_advance-string-index.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_an-object.js": +/*!****************************************************!*\ + !*** ./node_modules/core-js/modules/_an-object.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("var isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hbi1vYmplY3QuanM/Y2I3YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsa0VBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hbi1vYmplY3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhbiBvYmplY3QhJyk7XG4gIHJldHVybiBpdDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_an-object.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_array-includes.js": +/*!*********************************************************!*\ + !*** ./node_modules/core-js/modules/_array-includes.js ***! + \*********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"./node_modules/core-js/modules/_to-iobject.js\");\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/core-js/modules/_to-length.js\");\nvar toAbsoluteIndex = __webpack_require__(/*! ./_to-absolute-index */ \"./node_modules/core-js/modules/_to-absolute-index.js\");\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1pbmNsdWRlcy5qcz9jMzY2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxvRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsa0VBQWM7QUFDckMsc0JBQXNCLG1CQUFPLENBQUMsa0ZBQXNCO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxZQUFZLGVBQWU7QUFDaEM7QUFDQSxLQUFLO0FBQ0w7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWluY2x1ZGVzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZmFsc2UgLT4gQXJyYXkjaW5kZXhPZlxuLy8gdHJ1ZSAgLT4gQXJyYXkjaW5jbHVkZXNcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pIHtcbiAgICAgIGlmIChPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_array-includes.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_classof.js": +/*!**************************************************!*\ + !*** ./node_modules/core-js/modules/_classof.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = __webpack_require__(/*! ./_cof */ \"./node_modules/core-js/modules/_cof.js\");\nvar TAG = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/modules/_wks.js\")('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jbGFzc29mLmpzPzIzYzYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxVQUFVLG1CQUFPLENBQUMsc0RBQVE7QUFDMUIsVUFBVSxtQkFBTyxDQUFDLHNEQUFRO0FBQzFCO0FBQ0EsMkJBQTJCLGtCQUFrQixFQUFFOztBQUUvQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsWUFBWTtBQUNmOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY2xhc3NvZi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGdldHRpbmcgdGFnIGZyb20gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG4vLyBFUzMgd3JvbmcgaGVyZVxudmFyIEFSRyA9IGNvZihmdW5jdGlvbiAoKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgTywgVCwgQjtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKFQgPSB0cnlHZXQoTyA9IE9iamVjdChpdCksIFRBRykpID09ICdzdHJpbmcnID8gVFxuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQVJHID8gY29mKE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKEIgPSBjb2YoTykpID09ICdPYmplY3QnICYmIHR5cGVvZiBPLmNhbGxlZSA9PSAnZnVuY3Rpb24nID8gJ0FyZ3VtZW50cycgOiBCO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_classof.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_cof.js": +/*!**********************************************!*\ + !*** ./node_modules/core-js/modules/_cof.js ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2YuanM/MmQ5NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvZi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChpdCkuc2xpY2UoOCwgLTEpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_cof.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_core.js": +/*!***********************************************!*\ + !*** ./node_modules/core-js/modules/_core.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("var core = module.exports = { version: '2.6.5' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb3JlLmpzPzgzNzgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNkJBQTZCO0FBQzdCLHVDQUF1QyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvcmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0geyB2ZXJzaW9uOiAnMi42LjUnIH07XG5pZiAodHlwZW9mIF9fZSA9PSAnbnVtYmVyJykgX19lID0gY29yZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_core.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_create-property.js": +/*!**********************************************************!*\ + !*** ./node_modules/core-js/modules/_create-property.js ***! + \**********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar $defineProperty = __webpack_require__(/*! ./_object-dp */ \"./node_modules/core-js/modules/_object-dp.js\");\nvar createDesc = __webpack_require__(/*! ./_property-desc */ \"./node_modules/core-js/modules/_property-desc.js\");\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jcmVhdGUtcHJvcGVydHkuanM/ZjFhZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLHNCQUFzQixtQkFBTyxDQUFDLGtFQUFjO0FBQzVDLGlCQUFpQixtQkFBTyxDQUFDLDBFQUFrQjs7QUFFM0M7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jcmVhdGUtcHJvcGVydHkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBpbmRleCwgdmFsdWUpIHtcbiAgaWYgKGluZGV4IGluIG9iamVjdCkgJGRlZmluZVByb3BlcnR5LmYob2JqZWN0LCBpbmRleCwgY3JlYXRlRGVzYygwLCB2YWx1ZSkpO1xuICBlbHNlIG9iamVjdFtpbmRleF0gPSB2YWx1ZTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_create-property.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_ctx.js": +/*!**********************************************!*\ + !*** ./node_modules/core-js/modules/_ctx.js ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("// optional / simple context binding\nvar aFunction = __webpack_require__(/*! ./_a-function */ \"./node_modules/core-js/modules/_a-function.js\");\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jdHguanM/OWI0MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGdCQUFnQixtQkFBTyxDQUFDLG9FQUFlO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2N0eC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_ctx.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_defined.js": +/*!**************************************************!*\ + !*** ./node_modules/core-js/modules/_defined.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kZWZpbmVkLmpzP2JlMTMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RlZmluZWQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyA3LjIuMSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_defined.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_descriptors.js": +/*!******************************************************!*\ + !*** ./node_modules/core-js/modules/_descriptors.js ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("// Thank's IE8 for his funny defineProperty\nmodule.exports = !__webpack_require__(/*! ./_fails */ \"./node_modules/core-js/modules/_fails.js\")(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kZXNjcmlwdG9ycy5qcz85ZTFlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0Esa0JBQWtCLG1CQUFPLENBQUMsMERBQVU7QUFDcEMsaUNBQWlDLFFBQVEsbUJBQW1CLFVBQVUsRUFBRSxFQUFFO0FBQzFFLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kZXNjcmlwdG9ycy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_descriptors.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_dom-create.js": +/*!*****************************************************!*\ + !*** ./node_modules/core-js/modules/_dom-create.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("var isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\nvar document = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\").document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kb20tY3JlYXRlLmpzPzIzMGUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLGtFQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyw0REFBVztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBpcyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpcyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_dom-create.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_enum-bug-keys.js": +/*!********************************************************!*\ + !*** ./node_modules/core-js/modules/_enum-bug-keys.js ***! + \********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19lbnVtLWJ1Zy1rZXlzLmpzP2UxMWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19lbnVtLWJ1Zy1rZXlzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gSUUgOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSAoXG4gICdjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YnXG4pLnNwbGl0KCcsJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_enum-bug-keys.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_export.js": +/*!*************************************************!*\ + !*** ./node_modules/core-js/modules/_export.js ***! + \*************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("var global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\");\nvar core = __webpack_require__(/*! ./_core */ \"./node_modules/core-js/modules/_core.js\");\nvar hide = __webpack_require__(/*! ./_hide */ \"./node_modules/core-js/modules/_hide.js\");\nvar redefine = __webpack_require__(/*! ./_redefine */ \"./node_modules/core-js/modules/_redefine.js\");\nvar ctx = __webpack_require__(/*! ./_ctx */ \"./node_modules/core-js/modules/_ctx.js\");\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19leHBvcnQuanM/NWNhMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxhQUFhLG1CQUFPLENBQUMsNERBQVc7QUFDaEMsV0FBVyxtQkFBTyxDQUFDLHdEQUFTO0FBQzVCLFdBQVcsbUJBQU8sQ0FBQyx3REFBUztBQUM1QixlQUFlLG1CQUFPLENBQUMsZ0VBQWE7QUFDcEMsVUFBVSxtQkFBTyxDQUFDLHNEQUFRO0FBQzFCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtGQUFrRix1QkFBdUI7QUFDekcsaUVBQWlFO0FBQ2pFLCtEQUErRDtBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2QsY0FBYztBQUNkLGNBQWM7QUFDZCxjQUFjO0FBQ2QsZUFBZTtBQUNmLGVBQWU7QUFDZixlQUFlO0FBQ2YsZ0JBQWdCO0FBQ2hCIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZXhwb3J0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbnZhciAkZXhwb3J0ID0gZnVuY3Rpb24gKHR5cGUsIG5hbWUsIHNvdXJjZSkge1xuICB2YXIgSVNfRk9SQ0VEID0gdHlwZSAmICRleHBvcnQuRjtcbiAgdmFyIElTX0dMT0JBTCA9IHR5cGUgJiAkZXhwb3J0Lkc7XG4gIHZhciBJU19TVEFUSUMgPSB0eXBlICYgJGV4cG9ydC5TO1xuICB2YXIgSVNfUFJPVE8gPSB0eXBlICYgJGV4cG9ydC5QO1xuICB2YXIgSVNfQklORCA9IHR5cGUgJiAkZXhwb3J0LkI7XG4gIHZhciB0YXJnZXQgPSBJU19HTE9CQUwgPyBnbG9iYWwgOiBJU19TVEFUSUMgPyBnbG9iYWxbbmFtZV0gfHwgKGdsb2JhbFtuYW1lXSA9IHt9KSA6IChnbG9iYWxbbmFtZV0gfHwge30pW1BST1RPVFlQRV07XG4gIHZhciBleHBvcnRzID0gSVNfR0xPQkFMID8gY29yZSA6IGNvcmVbbmFtZV0gfHwgKGNvcmVbbmFtZV0gPSB7fSk7XG4gIHZhciBleHBQcm90byA9IGV4cG9ydHNbUFJPVE9UWVBFXSB8fCAoZXhwb3J0c1tQUk9UT1RZUEVdID0ge30pO1xuICB2YXIga2V5LCBvd24sIG91dCwgZXhwO1xuICBpZiAoSVNfR0xPQkFMKSBzb3VyY2UgPSBuYW1lO1xuICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcbiAgICBvd24gPSAhSVNfRk9SQ0VEICYmIHRhcmdldCAmJiB0YXJnZXRba2V5XSAhPT0gdW5kZWZpbmVkO1xuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgcGFzc2VkXG4gICAgb3V0ID0gKG93biA/IHRhcmdldCA6IHNvdXJjZSlba2V5XTtcbiAgICAvLyBiaW5kIHRpbWVycyB0byBnbG9iYWwgZm9yIGNhbGwgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIGV4cCA9IElTX0JJTkQgJiYgb3duID8gY3R4KG91dCwgZ2xvYmFsKSA6IElTX1BST1RPICYmIHR5cGVvZiBvdXQgPT0gJ2Z1bmN0aW9uJyA/IGN0eChGdW5jdGlvbi5jYWxsLCBvdXQpIDogb3V0O1xuICAgIC8vIGV4dGVuZCBnbG9iYWxcbiAgICBpZiAodGFyZ2V0KSByZWRlZmluZSh0YXJnZXQsIGtleSwgb3V0LCB0eXBlICYgJGV4cG9ydC5VKTtcbiAgICAvLyBleHBvcnRcbiAgICBpZiAoZXhwb3J0c1trZXldICE9IG91dCkgaGlkZShleHBvcnRzLCBrZXksIGV4cCk7XG4gICAgaWYgKElTX1BST1RPICYmIGV4cFByb3RvW2tleV0gIT0gb3V0KSBleHBQcm90b1trZXldID0gb3V0O1xuICB9XG59O1xuZ2xvYmFsLmNvcmUgPSBjb3JlO1xuLy8gdHlwZSBiaXRtYXBcbiRleHBvcnQuRiA9IDE7ICAgLy8gZm9yY2VkXG4kZXhwb3J0LkcgPSAyOyAgIC8vIGdsb2JhbFxuJGV4cG9ydC5TID0gNDsgICAvLyBzdGF0aWNcbiRleHBvcnQuUCA9IDg7ICAgLy8gcHJvdG9cbiRleHBvcnQuQiA9IDE2OyAgLy8gYmluZFxuJGV4cG9ydC5XID0gMzI7ICAvLyB3cmFwXG4kZXhwb3J0LlUgPSA2NDsgIC8vIHNhZmVcbiRleHBvcnQuUiA9IDEyODsgLy8gcmVhbCBwcm90byBtZXRob2QgZm9yIGBsaWJyYXJ5YFxubW9kdWxlLmV4cG9ydHMgPSAkZXhwb3J0O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_export.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_fails.js": +/*!************************************************!*\ + !*** ./node_modules/core-js/modules/_fails.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mYWlscy5qcz83OWU1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mYWlscy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_fails.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_fix-re-wks.js": +/*!*****************************************************!*\ + !*** ./node_modules/core-js/modules/_fix-re-wks.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\n__webpack_require__(/*! ./es6.regexp.exec */ \"./node_modules/core-js/modules/es6.regexp.exec.js\");\nvar redefine = __webpack_require__(/*! ./_redefine */ \"./node_modules/core-js/modules/_redefine.js\");\nvar hide = __webpack_require__(/*! ./_hide */ \"./node_modules/core-js/modules/_hide.js\");\nvar fails = __webpack_require__(/*! ./_fails */ \"./node_modules/core-js/modules/_fails.js\");\nvar defined = __webpack_require__(/*! ./_defined */ \"./node_modules/core-js/modules/_defined.js\");\nvar wks = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/modules/_wks.js\");\nvar regexpExec = __webpack_require__(/*! ./_regexp-exec */ \"./node_modules/core-js/modules/_regexp-exec.js\");\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$<a>') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n re.exec = function () { execCalled = true; return null; };\n if (KEY === 'split') {\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n }\n re[SYMBOL]('');\n return !execCalled;\n }) : undefined;\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var fns = exec(\n defined,\n SYMBOL,\n ''[KEY],\n function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }\n );\n var strfn = fns[0];\n var rxfn = fns[1];\n\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19maXgtcmUtd2tzLmpzPzIxNGYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixtQkFBTyxDQUFDLDRFQUFtQjtBQUMzQixlQUFlLG1CQUFPLENBQUMsZ0VBQWE7QUFDcEMsV0FBVyxtQkFBTyxDQUFDLHdEQUFTO0FBQzVCLFlBQVksbUJBQU8sQ0FBQywwREFBVTtBQUM5QixjQUFjLG1CQUFPLENBQUMsOERBQVk7QUFDbEMsVUFBVSxtQkFBTyxDQUFDLHNEQUFRO0FBQzFCLGlCQUFpQixtQkFBTyxDQUFDLHNFQUFnQjs7QUFFekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5Qiw0Q0FBNEM7QUFDckU7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsVUFBVTtBQUN2QztBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsbUJBQW1CLGFBQWE7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsV0FBVztBQUN4RDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MscUNBQXFDO0FBQ3JFO0FBQ0E7QUFDQSwyQkFBMkIsZ0NBQWdDO0FBQzNEO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZpeC1yZS13a3MuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuL2VzNi5yZWdleHAuZXhlYycpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYycpO1xuXG52YXIgU1BFQ0lFUyA9IHdrcygnc3BlY2llcycpO1xuXG52YXIgUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyAjcmVwbGFjZSBuZWVkcyBidWlsdC1pbiBzdXBwb3J0IGZvciBuYW1lZCBncm91cHMuXG4gIC8vICNtYXRjaCB3b3JrcyBmaW5lIGJlY2F1c2UgaXQganVzdCByZXR1cm4gdGhlIGV4ZWMgcmVzdWx0cywgZXZlbiBpZiBpdCBoYXNcbiAgLy8gYSBcImdyb3BzXCIgcHJvcGVydHkuXG4gIHZhciByZSA9IC8uLztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgcmVzdWx0Lmdyb3VwcyA9IHsgYTogJzcnIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgcmV0dXJuICcnLnJlcGxhY2UocmUsICckPGE+JykgIT09ICc3Jztcbn0pO1xuXG52YXIgU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDID0gKGZ1bmN0aW9uICgpIHtcbiAgLy8gQ2hyb21lIDUxIGhhcyBhIGJ1Z2d5IFwic3BsaXRcIiBpbXBsZW1lbnRhdGlvbiB3aGVuIFJlZ0V4cCNleGVjICE9PSBuYXRpdmVFeGVjXG4gIHZhciByZSA9IC8oPzopLztcbiAgdmFyIG9yaWdpbmFsRXhlYyA9IHJlLmV4ZWM7XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBvcmlnaW5hbEV4ZWMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcbiAgdmFyIHJlc3VsdCA9ICdhYicuc3BsaXQocmUpO1xuICByZXR1cm4gcmVzdWx0Lmxlbmd0aCA9PT0gMiAmJiByZXN1bHRbMF0gPT09ICdhJyAmJiByZXN1bHRbMV0gPT09ICdiJztcbn0pKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgbGVuZ3RoLCBleGVjKSB7XG4gIHZhciBTWU1CT0wgPSB3a3MoS0VZKTtcblxuICB2YXIgREVMRUdBVEVTX1RPX1NZTUJPTCA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3RyaW5nIG1ldGhvZHMgY2FsbCBzeW1ib2wtbmFtZWQgUmVnRXAgbWV0aG9kc1xuICAgIHZhciBPID0ge307XG4gICAgT1tTWU1CT0xdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfTtcbiAgICByZXR1cm4gJydbS0VZXShPKSAhPSA3O1xuICB9KTtcblxuICB2YXIgREVMRUdBVEVTX1RPX0VYRUMgPSBERUxFR0FURVNfVE9fU1lNQk9MID8gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTeW1ib2wtbmFtZWQgUmVnRXhwIG1ldGhvZHMgY2FsbCAuZXhlY1xuICAgIHZhciBleGVjQ2FsbGVkID0gZmFsc2U7XG4gICAgdmFyIHJlID0gL2EvO1xuICAgIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7IGV4ZWNDYWxsZWQgPSB0cnVlOyByZXR1cm4gbnVsbDsgfTtcbiAgICBpZiAoS0VZID09PSAnc3BsaXQnKSB7XG4gICAgICAvLyBSZWdFeHBbQEBzcGxpdF0gZG9lc24ndCBjYWxsIHRoZSByZWdleCdzIGV4ZWMgbWV0aG9kLCBidXQgZmlyc3QgY3JlYXRlc1xuICAgICAgLy8gYSBuZXcgb25lLiBXZSBuZWVkIHRvIHJldHVybiB0aGUgcGF0Y2hlZCByZWdleCB3aGVuIGNyZWF0aW5nIHRoZSBuZXcgb25lLlxuICAgICAgcmUuY29uc3RydWN0b3IgPSB7fTtcbiAgICAgIHJlLmNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmU7IH07XG4gICAgfVxuICAgIHJlW1NZTUJPTF0oJycpO1xuICAgIHJldHVybiAhZXhlY0NhbGxlZDtcbiAgfSkgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKFxuICAgICFERUxFR0FURVNfVE9fU1lNQk9MIHx8XG4gICAgIURFTEVHQVRFU19UT19FWEVDIHx8XG4gICAgKEtFWSA9PT0gJ3JlcGxhY2UnICYmICFSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUykgfHxcbiAgICAoS0VZID09PSAnc3BsaXQnICYmICFTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMpXG4gICkge1xuICAgIHZhciBuYXRpdmVSZWdFeHBNZXRob2QgPSAvLi9bU1lNQk9MXTtcbiAgICB2YXIgZm5zID0gZXhlYyhcbiAgICAgIGRlZmluZWQsXG4gICAgICBTWU1CT0wsXG4gICAgICAnJ1tLRVldLFxuICAgICAgZnVuY3Rpb24gbWF5YmVDYWxsTmF0aXZlKG5hdGl2ZU1ldGhvZCwgcmVnZXhwLCBzdHIsIGFyZzIsIGZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgIGlmIChyZWdleHAuZXhlYyA9PT0gcmVnZXhwRXhlYykge1xuICAgICAgICAgIGlmIChERUxFR0FURVNfVE9fU1lNQk9MICYmICFmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgICAgICAgLy8gVGhlIG5hdGl2ZSBTdHJpbmcgbWV0aG9kIGFscmVhZHkgZGVsZWdhdGVzIHRvIEBAbWV0aG9kICh0aGlzXG4gICAgICAgICAgICAvLyBwb2x5ZmlsbGVkIGZ1bmN0aW9uKSwgbGVhc2luZyB0byBpbmZpbml0ZSByZWN1cnNpb24uXG4gICAgICAgICAgICAvLyBXZSBhdm9pZCBpdCBieSBkaXJlY3RseSBjYWxsaW5nIHRoZSBuYXRpdmUgQEBtZXRob2QgbWV0aG9kLlxuICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG5hdGl2ZVJlZ0V4cE1ldGhvZC5jYWxsKHJlZ2V4cCwgc3RyLCBhcmcyKSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlTWV0aG9kLmNhbGwoc3RyLCByZWdleHAsIGFyZzIpIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UgfTtcbiAgICAgIH1cbiAgICApO1xuICAgIHZhciBzdHJmbiA9IGZuc1swXTtcbiAgICB2YXIgcnhmbiA9IGZuc1sxXTtcblxuICAgIHJlZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIEtFWSwgc3RyZm4pO1xuICAgIGhpZGUoUmVnRXhwLnByb3RvdHlwZSwgU1lNQk9MLCBsZW5ndGggPT0gMlxuICAgICAgLy8gMjEuMi41LjggUmVnRXhwLnByb3RvdHlwZVtAQHJlcGxhY2VdKHN0cmluZywgcmVwbGFjZVZhbHVlKVxuICAgICAgLy8gMjEuMi41LjExIFJlZ0V4cC5wcm90b3R5cGVbQEBzcGxpdF0oc3RyaW5nLCBsaW1pdClcbiAgICAgID8gZnVuY3Rpb24gKHN0cmluZywgYXJnKSB7IHJldHVybiByeGZuLmNhbGwoc3RyaW5nLCB0aGlzLCBhcmcpOyB9XG4gICAgICAvLyAyMS4yLjUuNiBSZWdFeHAucHJvdG90eXBlW0BAbWF0Y2hdKHN0cmluZylcbiAgICAgIC8vIDIxLjIuNS45IFJlZ0V4cC5wcm90b3R5cGVbQEBzZWFyY2hdKHN0cmluZylcbiAgICAgIDogZnVuY3Rpb24gKHN0cmluZykgeyByZXR1cm4gcnhmbi5jYWxsKHN0cmluZywgdGhpcyk7IH1cbiAgICApO1xuICB9XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_fix-re-wks.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_flags.js": +/*!************************************************!*\ + !*** ./node_modules/core-js/modules/_flags.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mbGFncy5qcz8wYmZiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxlQUFlLG1CQUFPLENBQUMsa0VBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mbGFncy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDIxLjIuNS4zIGdldCBSZWdFeHAucHJvdG90eXBlLmZsYWdzXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGF0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKHRoYXQuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcbiAgaWYgKHRoYXQubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAodGhhdC51bmljb2RlKSByZXN1bHQgKz0gJ3UnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_flags.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_function-to-string.js": +/*!*************************************************************!*\ + !*** ./node_modules/core-js/modules/_function-to-string.js ***! + \*************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("module.exports = __webpack_require__(/*! ./_shared */ \"./node_modules/core-js/modules/_shared.js\")('native-function-to-string', Function.toString);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mdW5jdGlvbi10by1zdHJpbmcuanM/ZmE1YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQkFBaUIsbUJBQU8sQ0FBQyw0REFBVyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2Z1bmN0aW9uLXRvLXN0cmluZy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ25hdGl2ZS1mdW5jdGlvbi10by1zdHJpbmcnLCBGdW5jdGlvbi50b1N0cmluZyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_function-to-string.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_global.js": +/*!*************************************************!*\ + !*** ./node_modules/core-js/modules/_global.js ***! + \*************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19nbG9iYWwuanM/NzcyNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZ2xvYmFsLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbnZhciBnbG9iYWwgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT0gTWF0aFxuICA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgOiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuaWYgKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpIF9fZyA9IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_global.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_has.js": +/*!**********************************************!*\ + !*** ./node_modules/core-js/modules/_has.js ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19oYXMuanM/NjlhOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGFzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGl0LCBrZXkpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_has.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_hide.js": +/*!***********************************************!*\ + !*** ./node_modules/core-js/modules/_hide.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("var dP = __webpack_require__(/*! ./_object-dp */ \"./node_modules/core-js/modules/_object-dp.js\");\nvar createDesc = __webpack_require__(/*! ./_property-desc */ \"./node_modules/core-js/modules/_property-desc.js\");\nmodule.exports = __webpack_require__(/*! ./_descriptors */ \"./node_modules/core-js/modules/_descriptors.js\") ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19oaWRlLmpzPzMyZTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxtQkFBTyxDQUFDLGtFQUFjO0FBQy9CLGlCQUFpQixtQkFBTyxDQUFDLDBFQUFrQjtBQUMzQyxpQkFBaUIsbUJBQU8sQ0FBQyxzRUFBZ0I7QUFDekM7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGlkZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkUC5mKG9iamVjdCwga2V5LCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_hide.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_html.js": +/*!***********************************************!*\ + !*** ./node_modules/core-js/modules/_html.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("var document = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\").document;\nmodule.exports = document && document.documentElement;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19odG1sLmpzP2ZhYjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLDREQUFXO0FBQ2xDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faHRtbC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xubW9kdWxlLmV4cG9ydHMgPSBkb2N1bWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_html.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_ie8-dom-define.js": +/*!*********************************************************!*\ + !*** ./node_modules/core-js/modules/_ie8-dom-define.js ***! + \*********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("module.exports = !__webpack_require__(/*! ./_descriptors */ \"./node_modules/core-js/modules/_descriptors.js\") && !__webpack_require__(/*! ./_fails */ \"./node_modules/core-js/modules/_fails.js\")(function () {\n return Object.defineProperty(__webpack_require__(/*! ./_dom-create */ \"./node_modules/core-js/modules/_dom-create.js\")('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pZTgtZG9tLWRlZmluZS5qcz9jNjlhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGtCQUFrQixtQkFBTyxDQUFDLHNFQUFnQixNQUFNLG1CQUFPLENBQUMsMERBQVU7QUFDbEUsK0JBQStCLG1CQUFPLENBQUMsb0VBQWUsZ0JBQWdCLG1CQUFtQixVQUFVLEVBQUUsRUFBRTtBQUN2RyxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2RpdicpLCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_ie8-dom-define.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_iobject.js": +/*!**************************************************!*\ + !*** ./node_modules/core-js/modules/_iobject.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = __webpack_require__(/*! ./_cof */ \"./node_modules/core-js/modules/_cof.js\");\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pb2JqZWN0LmpzPzYyNmEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxVQUFVLG1CQUFPLENBQUMsc0RBQVE7QUFDMUI7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pb2JqZWN0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3NcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCkgPyBPYmplY3QgOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNvZihpdCkgPT0gJ1N0cmluZycgPyBpdC5zcGxpdCgnJykgOiBPYmplY3QoaXQpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_iobject.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_is-array-iter.js": +/*!********************************************************!*\ + !*** ./node_modules/core-js/modules/_is-array-iter.js ***! + \********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("// check on default Array iterator\nvar Iterators = __webpack_require__(/*! ./_iterators */ \"./node_modules/core-js/modules/_iterators.js\");\nvar ITERATOR = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/modules/_wks.js\")('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1hcnJheS1pdGVyLmpzPzMzYTQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxrRUFBYztBQUN0QyxlQUFlLG1CQUFPLENBQUMsc0RBQVE7QUFDL0I7O0FBRUE7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGNoZWNrIG9uIGRlZmF1bHQgQXJyYXkgaXRlcmF0b3JcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG9bSVRFUkFUT1JdID09PSBpdCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_is-array-iter.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_is-object.js": +/*!****************************************************!*\ + !*** ./node_modules/core-js/modules/_is-object.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1vYmplY3QuanM/ZDNmNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1vYmplY3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_is-object.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_iter-call.js": +/*!****************************************************!*\ + !*** ./node_modules/core-js/modules/_iter-call.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("// call something on iterator step with safe closing on error\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWNhbGwuanM/MWZhOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxrRUFBYztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1jYWxsLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gY2FsbCBzb21ldGhpbmcgb24gaXRlcmF0b3Igc3RlcCB3aXRoIHNhZmUgY2xvc2luZyBvbiBlcnJvclxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgZm4sIHZhbHVlLCBlbnRyaWVzKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGVudHJpZXMgPyBmbihhbk9iamVjdCh2YWx1ZSlbMF0sIHZhbHVlWzFdKSA6IGZuKHZhbHVlKTtcbiAgLy8gNy40LjYgSXRlcmF0b3JDbG9zZShpdGVyYXRvciwgY29tcGxldGlvbilcbiAgfSBjYXRjaCAoZSkge1xuICAgIHZhciByZXQgPSBpdGVyYXRvclsncmV0dXJuJ107XG4gICAgaWYgKHJldCAhPT0gdW5kZWZpbmVkKSBhbk9iamVjdChyZXQuY2FsbChpdGVyYXRvcikpO1xuICAgIHRocm93IGU7XG4gIH1cbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_iter-call.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_iter-create.js": +/*!******************************************************!*\ + !*** ./node_modules/core-js/modules/_iter-create.js ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar create = __webpack_require__(/*! ./_object-create */ \"./node_modules/core-js/modules/_object-create.js\");\nvar descriptor = __webpack_require__(/*! ./_property-desc */ \"./node_modules/core-js/modules/_property-desc.js\");\nvar setToStringTag = __webpack_require__(/*! ./_set-to-string-tag */ \"./node_modules/core-js/modules/_set-to-string-tag.js\");\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\n__webpack_require__(/*! ./_hide */ \"./node_modules/core-js/modules/_hide.js\")(IteratorPrototype, __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/modules/_wks.js\")('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWNyZWF0ZS5qcz80MWEwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsYUFBYSxtQkFBTyxDQUFDLDBFQUFrQjtBQUN2QyxpQkFBaUIsbUJBQU8sQ0FBQywwRUFBa0I7QUFDM0MscUJBQXFCLG1CQUFPLENBQUMsa0ZBQXNCO0FBQ25EOztBQUVBO0FBQ0EsbUJBQU8sQ0FBQyx3REFBUyxxQkFBcUIsbUJBQU8sQ0FBQyxzREFBUSw0QkFBNEIsYUFBYSxFQUFFOztBQUVqRztBQUNBLHFEQUFxRCw0QkFBNEI7QUFDakY7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItY3JlYXRlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBkZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4vLyAyNS4xLjIuMS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faGlkZScpKEl0ZXJhdG9yUHJvdG90eXBlLCByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBkZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgTkFNRSArICcgSXRlcmF0b3InKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_iter-create.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_iter-define.js": +/*!******************************************************!*\ + !*** ./node_modules/core-js/modules/_iter-define.js ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar LIBRARY = __webpack_require__(/*! ./_library */ \"./node_modules/core-js/modules/_library.js\");\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar redefine = __webpack_require__(/*! ./_redefine */ \"./node_modules/core-js/modules/_redefine.js\");\nvar hide = __webpack_require__(/*! ./_hide */ \"./node_modules/core-js/modules/_hide.js\");\nvar Iterators = __webpack_require__(/*! ./_iterators */ \"./node_modules/core-js/modules/_iterators.js\");\nvar $iterCreate = __webpack_require__(/*! ./_iter-create */ \"./node_modules/core-js/modules/_iter-create.js\");\nvar setToStringTag = __webpack_require__(/*! ./_set-to-string-tag */ \"./node_modules/core-js/modules/_set-to-string-tag.js\");\nvar getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ \"./node_modules/core-js/modules/_object-gpo.js\");\nvar ITERATOR = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/modules/_wks.js\")('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWRlZmluZS5qcz8wMWY5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLDhEQUFZO0FBQ2xDLGNBQWMsbUJBQU8sQ0FBQyw0REFBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsZ0VBQWE7QUFDcEMsV0FBVyxtQkFBTyxDQUFDLHdEQUFTO0FBQzVCLGdCQUFnQixtQkFBTyxDQUFDLGtFQUFjO0FBQ3RDLGtCQUFrQixtQkFBTyxDQUFDLHNFQUFnQjtBQUMxQyxxQkFBcUIsbUJBQU8sQ0FBQyxrRkFBc0I7QUFDbkQscUJBQXFCLG1CQUFPLENBQUMsb0VBQWU7QUFDNUMsZUFBZSxtQkFBTyxDQUFDLHNEQUFRO0FBQy9CLDhDQUE4QztBQUM5QztBQUNBO0FBQ0E7O0FBRUEsOEJBQThCLGFBQWE7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsb0NBQW9DO0FBQzdFLDZDQUE2QyxvQ0FBb0M7QUFDakYsS0FBSyw0QkFBNEIsb0NBQW9DO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsbUJBQW1CO0FBQ25DO0FBQ0E7QUFDQSxrQ0FBa0MsMkJBQTJCO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItZGVmaW5lLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyICRpdGVyQ3JlYXRlID0gcmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBCVUdHWSA9ICEoW10ua2V5cyAmJiAnbmV4dCcgaW4gW10ua2V5cygpKTsgLy8gU2FmYXJpIGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxudmFyIEZGX0lURVJBVE9SID0gJ0BAaXRlcmF0b3InO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQmFzZSwgTkFNRSwgQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gICRpdGVyQ3JlYXRlKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcbiAgdmFyIGdldE1ldGhvZCA9IGZ1bmN0aW9uIChraW5kKSB7XG4gICAgaWYgKCFCVUdHWSAmJiBraW5kIGluIHByb3RvKSByZXR1cm4gcHJvdG9ba2luZF07XG4gICAgc3dpdGNoIChraW5kKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgfSByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgfTtcbiAgdmFyIFRBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIERFRl9WQUxVRVMgPSBERUZBVUxUID09IFZBTFVFUztcbiAgdmFyIFZBTFVFU19CVUcgPSBmYWxzZTtcbiAgdmFyIHByb3RvID0gQmFzZS5wcm90b3R5cGU7XG4gIHZhciAkbmF0aXZlID0gcHJvdG9bSVRFUkFUT1JdIHx8IHByb3RvW0ZGX0lURVJBVE9SXSB8fCBERUZBVUxUICYmIHByb3RvW0RFRkFVTFRdO1xuICB2YXIgJGRlZmF1bHQgPSAkbmF0aXZlIHx8IGdldE1ldGhvZChERUZBVUxUKTtcbiAgdmFyICRlbnRyaWVzID0gREVGQVVMVCA/ICFERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoJ2VudHJpZXMnKSA6IHVuZGVmaW5lZDtcbiAgdmFyICRhbnlOYXRpdmUgPSBOQU1FID09ICdBcnJheScgPyBwcm90by5lbnRyaWVzIHx8ICRuYXRpdmUgOiAkbmF0aXZlO1xuICB2YXIgbWV0aG9kcywga2V5LCBJdGVyYXRvclByb3RvdHlwZTtcbiAgLy8gRml4IG5hdGl2ZVxuICBpZiAoJGFueU5hdGl2ZSkge1xuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoJGFueU5hdGl2ZS5jYWxsKG5ldyBCYXNlKCkpKTtcbiAgICBpZiAoSXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgSXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JQcm90b3R5cGUsIFRBRywgdHJ1ZSk7XG4gICAgICAvLyBmaXggZm9yIHNvbWUgb2xkIGVuZ2luZXNcbiAgICAgIGlmICghTElCUkFSWSAmJiB0eXBlb2YgSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdICE9ICdmdW5jdGlvbicpIGhpZGUoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICB9XG4gIH1cbiAgLy8gZml4IEFycmF5I3t2YWx1ZXMsIEBAaXRlcmF0b3J9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoREVGX1ZBTFVFUyAmJiAkbmF0aXZlICYmICRuYXRpdmUubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgVkFMVUVTX0JVRyA9IHRydWU7XG4gICAgJGRlZmF1bHQgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiAkbmF0aXZlLmNhbGwodGhpcyk7IH07XG4gIH1cbiAgLy8gRGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUxJQlJBUlkgfHwgRk9SQ0VEKSAmJiAoQlVHR1kgfHwgVkFMVUVTX0JVRyB8fCAhcHJvdG9bSVRFUkFUT1JdKSkge1xuICAgIGhpZGUocHJvdG8sIElURVJBVE9SLCAkZGVmYXVsdCk7XG4gIH1cbiAgLy8gUGx1ZyBmb3IgbGlicmFyeVxuICBJdGVyYXRvcnNbTkFNRV0gPSAkZGVmYXVsdDtcbiAgSXRlcmF0b3JzW1RBR10gPSByZXR1cm5UaGlzO1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IERFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiAkZW50cmllc1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkgZm9yIChrZXkgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKCEoa2V5IGluIHByb3RvKSkgcmVkZWZpbmUocHJvdG8sIGtleSwgbWV0aG9kc1trZXldKTtcbiAgICB9IGVsc2UgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoQlVHR1kgfHwgVkFMVUVTX0JVRyksIE5BTUUsIG1ldGhvZHMpO1xuICB9XG4gIHJldHVybiBtZXRob2RzO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_iter-define.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_iter-detect.js": +/*!******************************************************!*\ + !*** ./node_modules/core-js/modules/_iter-detect.js ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("var ITERATOR = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/modules/_wks.js\")('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWRldGVjdC5qcz81Y2M1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxzREFBUTtBQUMvQjs7QUFFQTtBQUNBO0FBQ0EsaUNBQWlDLHFCQUFxQjtBQUN0RDtBQUNBLGlDQUFpQyxTQUFTLEVBQUU7QUFDNUMsQ0FBQyxZQUFZOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixTQUFTLHFCQUFxQjtBQUMzRCxpQ0FBaUMsYUFBYTtBQUM5QztBQUNBLEdBQUcsWUFBWTtBQUNmO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWRldGVjdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIFNBRkVfQ0xPU0lORyA9IGZhbHNlO1xuXG50cnkge1xuICB2YXIgcml0ZXIgPSBbN11bSVRFUkFUT1JdKCk7XG4gIHJpdGVyWydyZXR1cm4nXSA9IGZ1bmN0aW9uICgpIHsgU0FGRV9DTE9TSU5HID0gdHJ1ZTsgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcbiAgQXJyYXkuZnJvbShyaXRlciwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjLCBza2lwQ2xvc2luZykge1xuICBpZiAoIXNraXBDbG9zaW5nICYmICFTQUZFX0NMT1NJTkcpIHJldHVybiBmYWxzZTtcbiAgdmFyIHNhZmUgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gWzddO1xuICAgIHZhciBpdGVyID0gYXJyW0lURVJBVE9SXSgpO1xuICAgIGl0ZXIubmV4dCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHsgZG9uZTogc2FmZSA9IHRydWUgfTsgfTtcbiAgICBhcnJbSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcjsgfTtcbiAgICBleGVjKGFycik7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gc2FmZTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_iter-detect.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_iter-step.js": +/*!****************************************************!*\ + !*** ./node_modules/core-js/modules/_iter-step.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLXN0ZXAuanM/ZDUzYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFVBQVU7QUFDViIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItc3RlcC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGRvbmUsIHZhbHVlKSB7XG4gIHJldHVybiB7IHZhbHVlOiB2YWx1ZSwgZG9uZTogISFkb25lIH07XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_iter-step.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_iterators.js": +/*!****************************************************!*\ + !*** ./node_modules/core-js/modules/_iterators.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("module.exports = {};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyYXRvcnMuanM/ODRmMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXJhdG9ycy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0ge307XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_iterators.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_library.js": +/*!**************************************************!*\ + !*** ./node_modules/core-js/modules/_library.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("module.exports = false;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19saWJyYXJ5LmpzPzJkMDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19saWJyYXJ5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_library.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_object-create.js": +/*!********************************************************!*\ + !*** ./node_modules/core-js/modules/_object-create.js ***! + \********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\nvar dPs = __webpack_require__(/*! ./_object-dps */ \"./node_modules/core-js/modules/_object-dps.js\");\nvar enumBugKeys = __webpack_require__(/*! ./_enum-bug-keys */ \"./node_modules/core-js/modules/_enum-bug-keys.js\");\nvar IE_PROTO = __webpack_require__(/*! ./_shared-key */ \"./node_modules/core-js/modules/_shared-key.js\")('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = __webpack_require__(/*! ./_dom-create */ \"./node_modules/core-js/modules/_dom-create.js\")('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n __webpack_require__(/*! ./_html */ \"./node_modules/core-js/modules/_html.js\").appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzPzJhZWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxlQUFlLG1CQUFPLENBQUMsa0VBQWM7QUFDckMsVUFBVSxtQkFBTyxDQUFDLG9FQUFlO0FBQ2pDLGtCQUFrQixtQkFBTyxDQUFDLDBFQUFrQjtBQUM1QyxlQUFlLG1CQUFPLENBQUMsb0VBQWU7QUFDdEMseUJBQXlCO0FBQ3pCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxvRUFBZTtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxtQkFBTyxDQUFDLHdEQUFTO0FBQ25CLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjIgLyAxNS4yLjMuNSBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBkUHMgPSByZXF1aXJlKCcuL19vYmplY3QtZHBzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG52YXIgRW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBjcmVhdGVEaWN0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdpZnJhbWUnKTtcbiAgdmFyIGkgPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHZhciBsdCA9ICc8JztcbiAgdmFyIGd0ID0gJz4nO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXF1aXJlKCcuL19odG1sJykuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lLnNyYyA9ICdqYXZhc2NyaXB0Oic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2NyaXB0LXVybFxuICAvLyBjcmVhdGVEaWN0ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuT2JqZWN0O1xuICAvLyBodG1sLnJlbW92ZUNoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUobHQgKyAnc2NyaXB0JyArIGd0ICsgJ2RvY3VtZW50LkY9T2JqZWN0JyArIGx0ICsgJy9zY3JpcHQnICsgZ3QpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICBjcmVhdGVEaWN0ID0gaWZyYW1lRG9jdW1lbnQuRjtcbiAgd2hpbGUgKGktLSkgZGVsZXRlIGNyZWF0ZURpY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tpXV07XG4gIHJldHVybiBjcmVhdGVEaWN0KCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5KCk7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gY3JlYXRlRGljdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZFBzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_object-create.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_object-dp.js": +/*!****************************************************!*\ + !*** ./node_modules/core-js/modules/_object-dp.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("var anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\nvar IE8_DOM_DEFINE = __webpack_require__(/*! ./_ie8-dom-define */ \"./node_modules/core-js/modules/_ie8-dom-define.js\");\nvar toPrimitive = __webpack_require__(/*! ./_to-primitive */ \"./node_modules/core-js/modules/_to-primitive.js\");\nvar dP = Object.defineProperty;\n\nexports.f = __webpack_require__(/*! ./_descriptors */ \"./node_modules/core-js/modules/_descriptors.js\") ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZHAuanM/ODZjYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsa0VBQWM7QUFDckMscUJBQXFCLG1CQUFPLENBQUMsNEVBQW1CO0FBQ2hELGtCQUFrQixtQkFBTyxDQUFDLHdFQUFpQjtBQUMzQzs7QUFFQSxZQUFZLG1CQUFPLENBQUMsc0VBQWdCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLFlBQVk7QUFDZjtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGRQID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBkUChPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_object-dp.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_object-dps.js": +/*!*****************************************************!*\ + !*** ./node_modules/core-js/modules/_object-dps.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("var dP = __webpack_require__(/*! ./_object-dp */ \"./node_modules/core-js/modules/_object-dp.js\");\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\nvar getKeys = __webpack_require__(/*! ./_object-keys */ \"./node_modules/core-js/modules/_object-keys.js\");\n\nmodule.exports = __webpack_require__(/*! ./_descriptors */ \"./node_modules/core-js/modules/_descriptors.js\") ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZHBzLmpzPzE0OTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxtQkFBTyxDQUFDLGtFQUFjO0FBQy9CLGVBQWUsbUJBQU8sQ0FBQyxrRUFBYztBQUNyQyxjQUFjLG1CQUFPLENBQUMsc0VBQWdCOztBQUV0QyxpQkFBaUIsbUJBQU8sQ0FBQyxzRUFBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcHMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleXMgPSBnZXRLZXlzKFByb3BlcnRpZXMpO1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpID0gMDtcbiAgdmFyIFA7XG4gIHdoaWxlIChsZW5ndGggPiBpKSBkUC5mKE8sIFAgPSBrZXlzW2krK10sIFByb3BlcnRpZXNbUF0pO1xuICByZXR1cm4gTztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_object-dps.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_object-gpo.js": +/*!*****************************************************!*\ + !*** ./node_modules/core-js/modules/_object-gpo.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = __webpack_require__(/*! ./_has */ \"./node_modules/core-js/modules/_has.js\");\nvar toObject = __webpack_require__(/*! ./_to-object */ \"./node_modules/core-js/modules/_to-object.js\");\nvar IE_PROTO = __webpack_require__(/*! ./_shared-key */ \"./node_modules/core-js/modules/_shared-key.js\")('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ3BvLmpzPzM4ZmQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxVQUFVLG1CQUFPLENBQUMsc0RBQVE7QUFDMUIsZUFBZSxtQkFBTyxDQUFDLGtFQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxvRUFBZTtBQUN0Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdwby5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi45IC8gMTUuMi4zLjIgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90byA6IG51bGw7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_object-gpo.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_object-keys-internal.js": +/*!***************************************************************!*\ + !*** ./node_modules/core-js/modules/_object-keys-internal.js ***! + \***************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("var has = __webpack_require__(/*! ./_has */ \"./node_modules/core-js/modules/_has.js\");\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"./node_modules/core-js/modules/_to-iobject.js\");\nvar arrayIndexOf = __webpack_require__(/*! ./_array-includes */ \"./node_modules/core-js/modules/_array-includes.js\")(false);\nvar IE_PROTO = __webpack_require__(/*! ./_shared-key */ \"./node_modules/core-js/modules/_shared-key.js\")('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qta2V5cy1pbnRlcm5hbC5qcz9jZTEwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVUsbUJBQU8sQ0FBQyxzREFBUTtBQUMxQixnQkFBZ0IsbUJBQU8sQ0FBQyxvRUFBZTtBQUN2QyxtQkFBbUIsbUJBQU8sQ0FBQyw0RUFBbUI7QUFDOUMsZUFBZSxtQkFBTyxDQUFDLG9FQUFlOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qta2V5cy1pbnRlcm5hbC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgYXJyYXlJbmRleE9mID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKShmYWxzZSk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0lPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pIGlmIChrZXkgIT0gSUVfUFJPVE8pIGhhcyhPLCBrZXkpICYmIHJlc3VsdC5wdXNoKGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXMoTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+YXJyYXlJbmRleE9mKHJlc3VsdCwga2V5KSB8fCByZXN1bHQucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_object-keys-internal.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_object-keys.js": +/*!******************************************************!*\ + !*** ./node_modules/core-js/modules/_object-keys.js ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = __webpack_require__(/*! ./_object-keys-internal */ \"./node_modules/core-js/modules/_object-keys-internal.js\");\nvar enumBugKeys = __webpack_require__(/*! ./_enum-bug-keys */ \"./node_modules/core-js/modules/_enum-bug-keys.js\");\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qta2V5cy5qcz8wZDU4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsWUFBWSxtQkFBTyxDQUFDLHdGQUF5QjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQywwRUFBa0I7O0FBRTVDO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjE0IC8gMTUuMi4zLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gJGtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_object-keys.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_property-desc.js": +/*!********************************************************!*\ + !*** ./node_modules/core-js/modules/_property-desc.js ***! + \********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzPzQ2MzAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Byb3BlcnR5LWRlc2MuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_property-desc.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_redefine.js": +/*!***************************************************!*\ + !*** ./node_modules/core-js/modules/_redefine.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("var global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\");\nvar hide = __webpack_require__(/*! ./_hide */ \"./node_modules/core-js/modules/_hide.js\");\nvar has = __webpack_require__(/*! ./_has */ \"./node_modules/core-js/modules/_has.js\");\nvar SRC = __webpack_require__(/*! ./_uid */ \"./node_modules/core-js/modules/_uid.js\")('src');\nvar $toString = __webpack_require__(/*! ./_function-to-string */ \"./node_modules/core-js/modules/_function-to-string.js\");\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\n__webpack_require__(/*! ./_core */ \"./node_modules/core-js/modules/_core.js\").inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWRlZmluZS5qcz8yYWJhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGFBQWEsbUJBQU8sQ0FBQyw0REFBVztBQUNoQyxXQUFXLG1CQUFPLENBQUMsd0RBQVM7QUFDNUIsVUFBVSxtQkFBTyxDQUFDLHNEQUFRO0FBQzFCLFVBQVUsbUJBQU8sQ0FBQyxzREFBUTtBQUMxQixnQkFBZ0IsbUJBQU8sQ0FBQyxvRkFBdUI7QUFDL0M7QUFDQTs7QUFFQSxtQkFBTyxDQUFDLHdEQUFTO0FBQ2pCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBTUkMgPSByZXF1aXJlKCcuL191aWQnKSgnc3JjJyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi9fZnVuY3Rpb24tdG8tc3RyaW5nJyk7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciBUUEwgPSAoJycgKyAkdG9TdHJpbmcpLnNwbGl0KFRPX1NUUklORyk7XG5cbnJlcXVpcmUoJy4vX2NvcmUnKS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiAkdG9TdHJpbmcuY2FsbChpdCk7XG59O1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWwsIHNhZmUpIHtcbiAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2YgdmFsID09ICdmdW5jdGlvbic7XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCAnbmFtZScpIHx8IGhpZGUodmFsLCAnbmFtZScsIGtleSk7XG4gIGlmIChPW2tleV0gPT09IHZhbCkgcmV0dXJuO1xuICBpZiAoaXNGdW5jdGlvbikgaGFzKHZhbCwgU1JDKSB8fCBoaWRlKHZhbCwgU1JDLCBPW2tleV0gPyAnJyArIE9ba2V5XSA6IFRQTC5qb2luKFN0cmluZyhrZXkpKSk7XG4gIGlmIChPID09PSBnbG9iYWwpIHtcbiAgICBPW2tleV0gPSB2YWw7XG4gIH0gZWxzZSBpZiAoIXNhZmUpIHtcbiAgICBkZWxldGUgT1trZXldO1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9IGVsc2UgaWYgKE9ba2V5XSkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIHtcbiAgICBoaWRlKE8sIGtleSwgdmFsKTtcbiAgfVxuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG59KShGdW5jdGlvbi5wcm90b3R5cGUsIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nICYmIHRoaXNbU1JDXSB8fCAkdG9TdHJpbmcuY2FsbCh0aGlzKTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_redefine.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_regexp-exec-abstract.js": +/*!***************************************************************!*\ + !*** ./node_modules/core-js/modules/_regexp-exec-abstract.js ***! + \***************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\n\nvar classof = __webpack_require__(/*! ./_classof */ \"./node_modules/core-js/modules/_classof.js\");\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw new TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n if (classof(R) !== 'RegExp') {\n throw new TypeError('RegExp#exec called on incompatible receiver');\n }\n return builtinExec.call(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWdleHAtZXhlYy1hYnN0cmFjdC5qcz81ZjFiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLGNBQWMsbUJBQU8sQ0FBQyw4REFBWTtBQUNsQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZ2V4cC1leGVjLWFic3RyYWN0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBidWlsdGluRXhlYyA9IFJlZ0V4cC5wcm90b3R5cGUuZXhlYztcblxuIC8vIGBSZWdFeHBFeGVjYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cGV4ZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFIsIFMpIHtcbiAgdmFyIGV4ZWMgPSBSLmV4ZWM7XG4gIGlmICh0eXBlb2YgZXhlYyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciByZXN1bHQgPSBleGVjLmNhbGwoUiwgUyk7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWdFeHAgZXhlYyBtZXRob2QgcmV0dXJuZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYW4gT2JqZWN0IG9yIG51bGwnKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoY2xhc3NvZihSKSAhPT0gJ1JlZ0V4cCcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyJyk7XG4gIH1cbiAgcmV0dXJuIGJ1aWx0aW5FeGVjLmNhbGwoUiwgUyk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_regexp-exec-abstract.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_regexp-exec.js": +/*!******************************************************!*\ + !*** ./node_modules/core-js/modules/_regexp-exec.js ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\n\nvar regexpFlags = __webpack_require__(/*! ./_flags */ \"./node_modules/core-js/modules/_flags.js\");\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/,\n re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n match = nativeExec.call(re, str);\n\n if (UPDATES_LAST_INDEX_WRONG && match) {\n re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n // eslint-disable-next-line no-loop-func\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWdleHAtZXhlYy5qcz81MjBhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLGtCQUFrQixtQkFBTyxDQUFDLDBEQUFVOztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLDBCQUEwQjtBQUM3QztBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZ2V4cC1leGVjLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVnZXhwRmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xuXG52YXIgbmF0aXZlRXhlYyA9IFJlZ0V4cC5wcm90b3R5cGUuZXhlYztcbi8vIFRoaXMgYWx3YXlzIHJlZmVycyB0byB0aGUgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBiZWNhdXNlIHRoZVxuLy8gU3RyaW5nI3JlcGxhY2UgcG9seWZpbGwgdXNlcyAuL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMuanMsXG4vLyB3aGljaCBsb2FkcyB0aGlzIGZpbGUgYmVmb3JlIHBhdGNoaW5nIHRoZSBtZXRob2QuXG52YXIgbmF0aXZlUmVwbGFjZSA9IFN0cmluZy5wcm90b3R5cGUucmVwbGFjZTtcblxudmFyIHBhdGNoZWRFeGVjID0gbmF0aXZlRXhlYztcblxudmFyIExBU1RfSU5ERVggPSAnbGFzdEluZGV4JztcblxudmFyIFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciByZTEgPSAvYS8sXG4gICAgICByZTIgPSAvYiovZztcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMSwgJ2EnKTtcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMiwgJ2EnKTtcbiAgcmV0dXJuIHJlMVtMQVNUX0lOREVYXSAhPT0gMCB8fCByZTJbTEFTVF9JTkRFWF0gIT09IDA7XG59KSgpO1xuXG4vLyBub25wYXJ0aWNpcGF0aW5nIGNhcHR1cmluZyBncm91cCwgY29waWVkIGZyb20gZXM1LXNoaW0ncyBTdHJpbmcjc3BsaXQgcGF0Y2guXG52YXIgTlBDR19JTkNMVURFRCA9IC8oKT8/Ly5leGVjKCcnKVsxXSAhPT0gdW5kZWZpbmVkO1xuXG52YXIgUEFUQ0ggPSBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgfHwgTlBDR19JTkNMVURFRDtcblxuaWYgKFBBVENIKSB7XG4gIHBhdGNoZWRFeGVjID0gZnVuY3Rpb24gZXhlYyhzdHIpIHtcbiAgICB2YXIgcmUgPSB0aGlzO1xuICAgIHZhciBsYXN0SW5kZXgsIHJlQ29weSwgbWF0Y2gsIGk7XG5cbiAgICBpZiAoTlBDR19JTkNMVURFRCkge1xuICAgICAgcmVDb3B5ID0gbmV3IFJlZ0V4cCgnXicgKyByZS5zb3VyY2UgKyAnJCg/IVxcXFxzKScsIHJlZ2V4cEZsYWdzLmNhbGwocmUpKTtcbiAgICB9XG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORykgbGFzdEluZGV4ID0gcmVbTEFTVF9JTkRFWF07XG5cbiAgICBtYXRjaCA9IG5hdGl2ZUV4ZWMuY2FsbChyZSwgc3RyKTtcblxuICAgIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgJiYgbWF0Y2gpIHtcbiAgICAgIHJlW0xBU1RfSU5ERVhdID0gcmUuZ2xvYmFsID8gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggOiBsYXN0SW5kZXg7XG4gICAgfVxuICAgIGlmIChOUENHX0lOQ0xVREVEICYmIG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIEZpeCBicm93c2VycyB3aG9zZSBgZXhlY2AgbWV0aG9kcyBkb24ndCBjb25zaXN0ZW50bHkgcmV0dXJuIGB1bmRlZmluZWRgXG4gICAgICAvLyBmb3IgTlBDRywgbGlrZSBJRTguIE5PVEU6IFRoaXMgZG9lc24nIHdvcmsgZm9yIC8oLj8pPy9cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgICAgIG5hdGl2ZVJlcGxhY2UuY2FsbChtYXRjaFswXSwgcmVDb3B5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMjsgaSsrKSB7XG4gICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSA9PT0gdW5kZWZpbmVkKSBtYXRjaFtpXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGNoZWRFeGVjO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_regexp-exec.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_set-to-string-tag.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js/modules/_set-to-string-tag.js ***! + \************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("var def = __webpack_require__(/*! ./_object-dp */ \"./node_modules/core-js/modules/_object-dp.js\").f;\nvar has = __webpack_require__(/*! ./_has */ \"./node_modules/core-js/modules/_has.js\");\nvar TAG = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/modules/_wks.js\")('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtdG8tc3RyaW5nLXRhZy5qcz83ZjIwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVUsbUJBQU8sQ0FBQyxrRUFBYztBQUNoQyxVQUFVLG1CQUFPLENBQUMsc0RBQVE7QUFDMUIsVUFBVSxtQkFBTyxDQUFDLHNEQUFROztBQUUxQjtBQUNBLG9FQUFvRSxpQ0FBaUM7QUFDckciLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtdG8tc3RyaW5nLXRhZy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBkZWYgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgdGFnLCBzdGF0KSB7XG4gIGlmIChpdCAmJiAhaGFzKGl0ID0gc3RhdCA/IGl0IDogaXQucHJvdG90eXBlLCBUQUcpKSBkZWYoaXQsIFRBRywgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiB0YWcgfSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_set-to-string-tag.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_shared-key.js": +/*!*****************************************************!*\ + !*** ./node_modules/core-js/modules/_shared-key.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("var shared = __webpack_require__(/*! ./_shared */ \"./node_modules/core-js/modules/_shared.js\")('keys');\nvar uid = __webpack_require__(/*! ./_uid */ \"./node_modules/core-js/modules/_uid.js\");\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zaGFyZWQta2V5LmpzPzYxM2IiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYSxtQkFBTyxDQUFDLDREQUFXO0FBQ2hDLFVBQVUsbUJBQU8sQ0FBQyxzREFBUTtBQUMxQjtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zaGFyZWQta2V5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCdrZXlzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIHNoYXJlZFtrZXldIHx8IChzaGFyZWRba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_shared-key.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_shared.js": +/*!*************************************************!*\ + !*** ./node_modules/core-js/modules/_shared.js ***! + \*************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("var core = __webpack_require__(/*! ./_core */ \"./node_modules/core-js/modules/_core.js\");\nvar global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\");\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: __webpack_require__(/*! ./_library */ \"./node_modules/core-js/modules/_library.js\") ? 'pure' : 'global',\n copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zaGFyZWQuanM/NTUzNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxXQUFXLG1CQUFPLENBQUMsd0RBQVM7QUFDNUIsYUFBYSxtQkFBTyxDQUFDLDREQUFXO0FBQ2hDO0FBQ0Esa0RBQWtEOztBQUVsRDtBQUNBLHFFQUFxRTtBQUNyRSxDQUFDO0FBQ0Q7QUFDQSxRQUFRLG1CQUFPLENBQUMsOERBQVk7QUFDNUI7QUFDQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCAoZ2xvYmFsW1NIQVJFRF0gPSB7fSk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiBjb3JlLnZlcnNpb24sXG4gIG1vZGU6IHJlcXVpcmUoJy4vX2xpYnJhcnknKSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE5IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJ1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_shared.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_string-at.js": +/*!****************************************************!*\ + !*** ./node_modules/core-js/modules/_string-at.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("var toInteger = __webpack_require__(/*! ./_to-integer */ \"./node_modules/core-js/modules/_to-integer.js\");\nvar defined = __webpack_require__(/*! ./_defined */ \"./node_modules/core-js/modules/_defined.js\");\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctYXQuanM/MDJmNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnQkFBZ0IsbUJBQU8sQ0FBQyxvRUFBZTtBQUN2QyxjQUFjLG1CQUFPLENBQUMsOERBQVk7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWF0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuLy8gdHJ1ZSAgLT4gU3RyaW5nI2F0XG4vLyBmYWxzZSAtPiBTdHJpbmcjY29kZVBvaW50QXRcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFRPX1NUUklORykge1xuICByZXR1cm4gZnVuY3Rpb24gKHRoYXQsIHBvcykge1xuICAgIHZhciBzID0gU3RyaW5nKGRlZmluZWQodGhhdCkpO1xuICAgIHZhciBpID0gdG9JbnRlZ2VyKHBvcyk7XG4gICAgdmFyIGwgPSBzLmxlbmd0aDtcbiAgICB2YXIgYSwgYjtcbiAgICBpZiAoaSA8IDAgfHwgaSA+PSBsKSByZXR1cm4gVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgYSA9IHMuY2hhckNvZGVBdChpKTtcbiAgICByZXR1cm4gYSA8IDB4ZDgwMCB8fCBhID4gMHhkYmZmIHx8IGkgKyAxID09PSBsIHx8IChiID0gcy5jaGFyQ29kZUF0KGkgKyAxKSkgPCAweGRjMDAgfHwgYiA+IDB4ZGZmZlxuICAgICAgPyBUT19TVFJJTkcgPyBzLmNoYXJBdChpKSA6IGFcbiAgICAgIDogVE9fU1RSSU5HID8gcy5zbGljZShpLCBpICsgMikgOiAoYSAtIDB4ZDgwMCA8PCAxMCkgKyAoYiAtIDB4ZGMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_string-at.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_to-absolute-index.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js/modules/_to-absolute-index.js ***! + \************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("var toInteger = __webpack_require__(/*! ./_to-integer */ \"./node_modules/core-js/modules/_to-integer.js\");\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1hYnNvbHV0ZS1pbmRleC5qcz83N2YxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGdCQUFnQixtQkFBTyxDQUFDLG9FQUFlO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWFic29sdXRlLWluZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgaW5kZXggPSB0b0ludGVnZXIoaW5kZXgpO1xuICByZXR1cm4gaW5kZXggPCAwID8gbWF4KGluZGV4ICsgbGVuZ3RoLCAwKSA6IG1pbihpbmRleCwgbGVuZ3RoKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_to-absolute-index.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_to-integer.js": +/*!*****************************************************!*\ + !*** ./node_modules/core-js/modules/_to-integer.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pbnRlZ2VyLmpzPzQ1ODgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW50ZWdlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS40IFRvSW50ZWdlclxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_to-integer.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_to-iobject.js": +/*!*****************************************************!*\ + !*** ./node_modules/core-js/modules/_to-iobject.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = __webpack_require__(/*! ./_iobject */ \"./node_modules/core-js/modules/_iobject.js\");\nvar defined = __webpack_require__(/*! ./_defined */ \"./node_modules/core-js/modules/_defined.js\");\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pb2JqZWN0LmpzPzY4MjEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsOERBQVk7QUFDbEMsY0FBYyxtQkFBTyxDQUFDLDhEQUFZO0FBQ2xDO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWlvYmplY3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0byBpbmRleGVkIG9iamVjdCwgdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSU9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_to-iobject.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_to-length.js": +/*!****************************************************!*\ + !*** ./node_modules/core-js/modules/_to-length.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("// 7.1.15 ToLength\nvar toInteger = __webpack_require__(/*! ./_to-integer */ \"./node_modules/core-js/modules/_to-integer.js\");\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1sZW5ndGguanM/OWRlZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGdCQUFnQixtQkFBTyxDQUFDLG9FQUFlO0FBQ3ZDO0FBQ0E7QUFDQSwyREFBMkQ7QUFDM0QiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1sZW5ndGguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyA3LjEuMTUgVG9MZW5ndGhcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPiAwID8gbWluKHRvSW50ZWdlcihpdCksIDB4MWZmZmZmZmZmZmZmZmYpIDogMDsgLy8gcG93KDIsIDUzKSAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_to-length.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_to-object.js": +/*!****************************************************!*\ + !*** ./node_modules/core-js/modules/_to-object.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("// 7.1.13 ToObject(argument)\nvar defined = __webpack_require__(/*! ./_defined */ \"./node_modules/core-js/modules/_defined.js\");\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1vYmplY3QuanM/NGJmOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyw4REFBWTtBQUNsQztBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1vYmplY3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyA3LjEuMTMgVG9PYmplY3QoYXJndW1lbnQpXG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_to-object.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_to-primitive.js": +/*!*******************************************************!*\ + !*** ./node_modules/core-js/modules/_to-primitive.js ***! + \*******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1wcmltaXRpdmUuanM/NmE5OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxrRUFBYztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLXByaW1pdGl2ZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS4xIFRvUHJpbWl0aXZlKGlucHV0IFssIFByZWZlcnJlZFR5cGVdKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBTKSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gaXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAoUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpdC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICghUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_to-primitive.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_uid.js": +/*!**********************************************!*\ + !*** ./node_modules/core-js/modules/_uid.js ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL191aWQuanM/Y2E1YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdWlkLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGlkID0gMDtcbnZhciBweCA9IE1hdGgucmFuZG9tKCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJy5jb25jYXQoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSwgJylfJywgKCsraWQgKyBweCkudG9TdHJpbmcoMzYpKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_uid.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_wks.js": +/*!**********************************************!*\ + !*** ./node_modules/core-js/modules/_wks.js ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("var store = __webpack_require__(/*! ./_shared */ \"./node_modules/core-js/modules/_shared.js\")('wks');\nvar uid = __webpack_require__(/*! ./_uid */ \"./node_modules/core-js/modules/_uid.js\");\nvar Symbol = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\").Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MuanM/MmI0YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLG1CQUFPLENBQUMsNERBQVc7QUFDL0IsVUFBVSxtQkFBTyxDQUFDLHNEQUFRO0FBQzFCLGFBQWEsbUJBQU8sQ0FBQyw0REFBVztBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3drcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBzdG9yZSA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCd3a3MnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5TeW1ib2w7XG52YXIgVVNFX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcblxudmFyICRleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gc3RvcmVbbmFtZV0gfHwgKHN0b3JlW25hbWVdID1cbiAgICBVU0VfU1lNQk9MICYmIFN5bWJvbFtuYW1lXSB8fCAoVVNFX1NZTUJPTCA/IFN5bWJvbCA6IHVpZCkoJ1N5bWJvbC4nICsgbmFtZSkpO1xufTtcblxuJGV4cG9ydHMuc3RvcmUgPSBzdG9yZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_wks.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/core.get-iterator-method.js": +/*!******************************************************************!*\ + !*** ./node_modules/core-js/modules/core.get-iterator-method.js ***! + \******************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("var classof = __webpack_require__(/*! ./_classof */ \"./node_modules/core-js/modules/_classof.js\");\nvar ITERATOR = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/modules/_wks.js\")('iterator');\nvar Iterators = __webpack_require__(/*! ./_iterators */ \"./node_modules/core-js/modules/_iterators.js\");\nmodule.exports = __webpack_require__(/*! ./_core */ \"./node_modules/core-js/modules/_core.js\").getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcz8yN2VlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyw4REFBWTtBQUNsQyxlQUFlLG1CQUFPLENBQUMsc0RBQVE7QUFDL0IsZ0JBQWdCLG1CQUFPLENBQUMsa0VBQWM7QUFDdEMsaUJBQWlCLG1CQUFPLENBQUMsd0RBQVM7QUFDbEM7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvcmUnKS5nZXRJdGVyYXRvck1ldGhvZCA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgIT0gdW5kZWZpbmVkKSByZXR1cm4gaXRbSVRFUkFUT1JdXG4gICAgfHwgaXRbJ0BAaXRlcmF0b3InXVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/core.get-iterator-method.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.array.from.js": +/*!********************************************************!*\ + !*** ./node_modules/core-js/modules/es6.array.from.js ***! + \********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar ctx = __webpack_require__(/*! ./_ctx */ \"./node_modules/core-js/modules/_ctx.js\");\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar toObject = __webpack_require__(/*! ./_to-object */ \"./node_modules/core-js/modules/_to-object.js\");\nvar call = __webpack_require__(/*! ./_iter-call */ \"./node_modules/core-js/modules/_iter-call.js\");\nvar isArrayIter = __webpack_require__(/*! ./_is-array-iter */ \"./node_modules/core-js/modules/_is-array-iter.js\");\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/core-js/modules/_to-length.js\");\nvar createProperty = __webpack_require__(/*! ./_create-property */ \"./node_modules/core-js/modules/_create-property.js\");\nvar getIterFn = __webpack_require__(/*! ./core.get-iterator-method */ \"./node_modules/core-js/modules/core.get-iterator-method.js\");\n\n$export($export.S + $export.F * !__webpack_require__(/*! ./_iter-detect */ \"./node_modules/core-js/modules/_iter-detect.js\")(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5mcm9tLmpzPzFjNGMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixVQUFVLG1CQUFPLENBQUMsc0RBQVE7QUFDMUIsY0FBYyxtQkFBTyxDQUFDLDREQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxrRUFBYztBQUNyQyxXQUFXLG1CQUFPLENBQUMsa0VBQWM7QUFDakMsa0JBQWtCLG1CQUFPLENBQUMsMEVBQWtCO0FBQzVDLGVBQWUsbUJBQU8sQ0FBQyxrRUFBYztBQUNyQyxxQkFBcUIsbUJBQU8sQ0FBQyw4RUFBb0I7QUFDakQsZ0JBQWdCLG1CQUFPLENBQUMsOEZBQTRCOztBQUVwRCxpQ0FBaUMsbUJBQU8sQ0FBQyxzRUFBZ0IsbUJBQW1CLGtCQUFrQixFQUFFO0FBQ2hHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVELGdDQUFnQztBQUN2RjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0Esa0NBQWtDLGdCQUFnQjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZnJvbS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi9faXRlci1jYWxsJyk7XG52YXIgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0JykoZnVuY3Rpb24gKGl0ZXIpIHsgQXJyYXkuZnJvbShpdGVyKTsgfSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4yLjEgQXJyYXkuZnJvbShhcnJheUxpa2UsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICBmcm9tOiBmdW5jdGlvbiBmcm9tKGFycmF5TGlrZSAvKiAsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgIHZhciBDID0gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIG1hcGZuID0gYUxlbiA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGl0ZXJGbiA9IGdldEl0ZXJGbihPKTtcbiAgICB2YXIgbGVuZ3RoLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yO1xuICAgIGlmIChtYXBwaW5nKSBtYXBmbiA9IGN0eChtYXBmbiwgYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQsIDIpO1xuICAgIC8vIGlmIG9iamVjdCBpc24ndCBpdGVyYWJsZSBvciBpdCdzIGFycmF5IHdpdGggZGVmYXVsdCBpdGVyYXRvciAtIHVzZSBzaW1wbGUgY2FzZVxuICAgIGlmIChpdGVyRm4gIT0gdW5kZWZpbmVkICYmICEoQyA9PSBBcnJheSAmJiBpc0FycmF5SXRlcihpdGVyRm4pKSkge1xuICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCByZXN1bHQgPSBuZXcgQygpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGluZGV4KyspIHtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IGNhbGwoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgICBmb3IgKHJlc3VsdCA9IG5ldyBDKGxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQubGVuZ3RoID0gaW5kZXg7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.array.from.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.array.iterator.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js/modules/es6.array.iterator.js ***! + \************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar addToUnscopables = __webpack_require__(/*! ./_add-to-unscopables */ \"./node_modules/core-js/modules/_add-to-unscopables.js\");\nvar step = __webpack_require__(/*! ./_iter-step */ \"./node_modules/core-js/modules/_iter-step.js\");\nvar Iterators = __webpack_require__(/*! ./_iterators */ \"./node_modules/core-js/modules/_iterators.js\");\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"./node_modules/core-js/modules/_to-iobject.js\");\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = __webpack_require__(/*! ./_iter-define */ \"./node_modules/core-js/modules/_iter-define.js\")(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvci5qcz9jYWRmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsdUJBQXVCLG1CQUFPLENBQUMsb0ZBQXVCO0FBQ3RELFdBQVcsbUJBQU8sQ0FBQyxrRUFBYztBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQyxrRUFBYztBQUN0QyxnQkFBZ0IsbUJBQU8sQ0FBQyxvRUFBZTs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsbUJBQU8sQ0FBQyxzRUFBZ0I7QUFDekMsZ0NBQWdDO0FBQ2hDLGNBQWM7QUFDZCxpQkFBaUI7QUFDakI7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3IuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIHN0ZXAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG5cbi8vIDIyLjEuMy40IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzKClcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUua2V5cygpXG4vLyAyMi4xLjMuMjkgQXJyYXkucHJvdG90eXBlLnZhbHVlcygpXG4vLyAyMi4xLjMuMzAgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmRcbi8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBraW5kID0gdGhpcy5faztcbiAgdmFyIGluZGV4ID0gdGhpcy5faSsrO1xuICBpZiAoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpIHtcbiAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzdGVwKDEpO1xuICB9XG4gIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgaW5kZXgpO1xuICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgT1tpbmRleF0pO1xuICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJSAoOS40LjQuNiwgOS40LjQuNylcbkl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.array.iterator.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.function.name.js": +/*!***********************************************************!*\ + !*** ./node_modules/core-js/modules/es6.function.name.js ***! + \***********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("var dP = __webpack_require__(/*! ./_object-dp */ \"./node_modules/core-js/modules/_object-dp.js\").f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || __webpack_require__(/*! ./_descriptors */ \"./node_modules/core-js/modules/_descriptors.js\") && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5uYW1lLmpzPzdmN2YiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxtQkFBTyxDQUFDLGtFQUFjO0FBQy9CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLHNFQUFnQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgRlByb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIG5hbWVSRSA9IC9eXFxzKmZ1bmN0aW9uIChbXiAoXSopLztcbnZhciBOQU1FID0gJ25hbWUnO1xuXG4vLyAxOS4yLjQuMiBuYW1lXG5OQU1FIGluIEZQcm90byB8fCByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmIGRQKEZQcm90bywgTkFNRSwge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKCcnICsgdGhpcykubWF0Y2gobmFtZVJFKVsxXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.function.name.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.regexp.exec.js": +/*!*********************************************************!*\ + !*** ./node_modules/core-js/modules/es6.regexp.exec.js ***! + \*********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar regexpExec = __webpack_require__(/*! ./_regexp-exec */ \"./node_modules/core-js/modules/_regexp-exec.js\");\n__webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\")({\n target: 'RegExp',\n proto: true,\n forced: regexpExec !== /./.exec\n}, {\n exec: regexpExec\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuZXhlYy5qcz9iMGM1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsaUJBQWlCLG1CQUFPLENBQUMsc0VBQWdCO0FBQ3pDLG1CQUFPLENBQUMsNERBQVc7QUFDbkI7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5leGVjLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYycpO1xucmVxdWlyZSgnLi9fZXhwb3J0Jykoe1xuICB0YXJnZXQ6ICdSZWdFeHAnLFxuICBwcm90bzogdHJ1ZSxcbiAgZm9yY2VkOiByZWdleHBFeGVjICE9PSAvLi8uZXhlY1xufSwge1xuICBleGVjOiByZWdleHBFeGVjXG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.regexp.exec.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.regexp.match.js": +/*!**********************************************************!*\ + !*** ./node_modules/core-js/modules/es6.regexp.match.js ***! + \**********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/core-js/modules/_to-length.js\");\nvar advanceStringIndex = __webpack_require__(/*! ./_advance-string-index */ \"./node_modules/core-js/modules/_advance-string-index.js\");\nvar regExpExec = __webpack_require__(/*! ./_regexp-exec-abstract */ \"./node_modules/core-js/modules/_regexp-exec-abstract.js\");\n\n// @@match logic\n__webpack_require__(/*! ./_fix-re-wks */ \"./node_modules/core-js/modules/_fix-re-wks.js\")('match', 1, function (defined, MATCH, $match, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative($match, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n if (!rx.global) return regExpExec(rx, S);\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = String(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAubWF0Y2guanM/NDkxNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsa0VBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLGtFQUFjO0FBQ3JDLHlCQUF5QixtQkFBTyxDQUFDLHdGQUF5QjtBQUMxRCxpQkFBaUIsbUJBQU8sQ0FBQyx3RkFBeUI7O0FBRWxEO0FBQ0EsbUJBQU8sQ0FBQyxvRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAubWF0Y2guanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBtYXRjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdtYXRjaCcsIDEsIGZ1bmN0aW9uIChkZWZpbmVkLCBNQVRDSCwgJG1hdGNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5tYXRjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5tYXRjaFxuICAgIGZ1bmN0aW9uIG1hdGNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtNQVRDSF07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZCA/IGZuLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtNQVRDSF0oU3RyaW5nKE8pKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAbWF0Y2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAbWF0Y2hcbiAgICBmdW5jdGlvbiAocmVnZXhwKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRtYXRjaCwgcmVnZXhwLCB0aGlzKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIGlmICghcnguZ2xvYmFsKSByZXR1cm4gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB2YXIgbiA9IDA7XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgd2hpbGUgKChyZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKSkgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIEFbbl0gPSBtYXRjaFN0cjtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgICAgbisrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG4gPT09IDAgPyBudWxsIDogQTtcbiAgICB9XG4gIF07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.regexp.match.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.regexp.replace.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js/modules/es6.regexp.replace.js ***! + \************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\nvar toObject = __webpack_require__(/*! ./_to-object */ \"./node_modules/core-js/modules/_to-object.js\");\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/core-js/modules/_to-length.js\");\nvar toInteger = __webpack_require__(/*! ./_to-integer */ \"./node_modules/core-js/modules/_to-integer.js\");\nvar advanceStringIndex = __webpack_require__(/*! ./_advance-string-index */ \"./node_modules/core-js/modules/_advance-string-index.js\");\nvar regExpExec = __webpack_require__(/*! ./_regexp-exec-abstract */ \"./node_modules/core-js/modules/_regexp-exec-abstract.js\");\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\n__webpack_require__(/*! ./_fix-re-wks */ \"./node_modules/core-js/modules/_fix-re-wks.js\")('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n var res = maybeCallNative($replace, regexp, this, replaceValue);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n results.push(result);\n if (!global) break;\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return $replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAucmVwbGFjZS5qcz9hNDgxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLGVBQWUsbUJBQU8sQ0FBQyxrRUFBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsa0VBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLGtFQUFjO0FBQ3JDLGdCQUFnQixtQkFBTyxDQUFDLG9FQUFlO0FBQ3ZDLHlCQUF5QixtQkFBTyxDQUFDLHdGQUF5QjtBQUMxRCxpQkFBaUIsbUJBQU8sQ0FBQyx3RkFBeUI7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQkFBTyxDQUFDLG9FQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsb0JBQW9CO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAucmVwbGFjZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBTVUJTVElUVVRJT05fU1lNQk9MUyA9IC9cXCQoWyQmYCddfFxcZFxcZD98PFtePl0qPikvZztcbnZhciBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRCA9IC9cXCQoWyQmYCddfFxcZFxcZD8pL2c7XG5cbnZhciBtYXliZVRvU3RyaW5nID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gaXQgOiBTdHJpbmcoaXQpO1xufTtcblxuLy8gQEByZXBsYWNlIGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ3JlcGxhY2UnLCAyLCBmdW5jdGlvbiAoZGVmaW5lZCwgUkVQTEFDRSwgJHJlcGxhY2UsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUucmVwbGFjZVxuICAgIGZ1bmN0aW9uIHJlcGxhY2Uoc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gc2VhcmNoVmFsdWUgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc2VhcmNoVmFsdWVbUkVQTEFDRV07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZFxuICAgICAgICA/IGZuLmNhbGwoc2VhcmNoVmFsdWUsIE8sIHJlcGxhY2VWYWx1ZSlcbiAgICAgICAgOiAkcmVwbGFjZS5jYWxsKFN0cmluZyhPKSwgc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHJlcGxhY2VdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAcmVwbGFjZVxuICAgIGZ1bmN0aW9uIChyZWdleHAsIHJlcGxhY2VWYWx1ZSkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZSgkcmVwbGFjZSwgcmVnZXhwLCB0aGlzLCByZXBsYWNlVmFsdWUpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuXG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgZnVuY3Rpb25hbFJlcGxhY2UgPSB0eXBlb2YgcmVwbGFjZVZhbHVlID09PSAnZnVuY3Rpb24nO1xuICAgICAgaWYgKCFmdW5jdGlvbmFsUmVwbGFjZSkgcmVwbGFjZVZhbHVlID0gU3RyaW5nKHJlcGxhY2VWYWx1ZSk7XG4gICAgICB2YXIgZ2xvYmFsID0gcnguZ2xvYmFsO1xuICAgICAgaWYgKGdsb2JhbCkge1xuICAgICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgICByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkgYnJlYWs7XG4gICAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpO1xuICAgICAgICBpZiAoIWdsb2JhbCkgYnJlYWs7XG4gICAgICAgIHZhciBtYXRjaFN0ciA9IFN0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICBpZiAobWF0Y2hTdHIgPT09ICcnKSByeC5sYXN0SW5kZXggPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgdG9MZW5ndGgocngubGFzdEluZGV4KSwgZnVsbFVuaWNvZGUpO1xuICAgICAgfVxuICAgICAgdmFyIGFjY3VtdWxhdGVkUmVzdWx0ID0gJyc7XG4gICAgICB2YXIgbmV4dFNvdXJjZVBvc2l0aW9uID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXN1bHQgPSByZXN1bHRzW2ldO1xuICAgICAgICB2YXIgbWF0Y2hlZCA9IFN0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICB2YXIgcG9zaXRpb24gPSBtYXgobWluKHRvSW50ZWdlcihyZXN1bHQuaW5kZXgpLCBTLmxlbmd0aCksIDApO1xuICAgICAgICB2YXIgY2FwdHVyZXMgPSBbXTtcbiAgICAgICAgLy8gTk9URTogVGhpcyBpcyBlcXVpdmFsZW50IHRvXG4gICAgICAgIC8vICAgY2FwdHVyZXMgPSByZXN1bHQuc2xpY2UoMSkubWFwKG1heWJlVG9TdHJpbmcpXG4gICAgICAgIC8vIGJ1dCBmb3Igc29tZSByZWFzb24gYG5hdGl2ZVNsaWNlLmNhbGwocmVzdWx0LCAxLCByZXN1bHQubGVuZ3RoKWAgKGNhbGxlZCBpblxuICAgICAgICAvLyB0aGUgc2xpY2UgcG9seWZpbGwgd2hlbiBzbGljaW5nIG5hdGl2ZSBhcnJheXMpIFwiZG9lc24ndCB3b3JrXCIgaW4gc2FmYXJpIDkgYW5kXG4gICAgICAgIC8vIGNhdXNlcyBhIGNyYXNoIChodHRwczovL3Bhc3RlYmluLmNvbS9OMjFRemVRQSkgd2hlbiB0cnlpbmcgdG8gZGVidWcgaXQuXG4gICAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgcmVzdWx0Lmxlbmd0aDsgaisrKSBjYXB0dXJlcy5wdXNoKG1heWJlVG9TdHJpbmcocmVzdWx0W2pdKSk7XG4gICAgICAgIHZhciBuYW1lZENhcHR1cmVzID0gcmVzdWx0Lmdyb3VwcztcbiAgICAgICAgaWYgKGZ1bmN0aW9uYWxSZXBsYWNlKSB7XG4gICAgICAgICAgdmFyIHJlcGxhY2VyQXJncyA9IFttYXRjaGVkXS5jb25jYXQoY2FwdHVyZXMsIHBvc2l0aW9uLCBTKTtcbiAgICAgICAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSByZXBsYWNlckFyZ3MucHVzaChuYW1lZENhcHR1cmVzKTtcbiAgICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSBTdHJpbmcocmVwbGFjZVZhbHVlLmFwcGx5KHVuZGVmaW5lZCwgcmVwbGFjZXJBcmdzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVwbGFjZW1lbnQgPSBnZXRTdWJzdGl0dXRpb24obWF0Y2hlZCwgUywgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb3NpdGlvbiA+PSBuZXh0U291cmNlUG9zaXRpb24pIHtcbiAgICAgICAgICBhY2N1bXVsYXRlZFJlc3VsdCArPSBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbiwgcG9zaXRpb24pICsgcmVwbGFjZW1lbnQ7XG4gICAgICAgICAgbmV4dFNvdXJjZVBvc2l0aW9uID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFjY3VtdWxhdGVkUmVzdWx0ICsgUy5zbGljZShuZXh0U291cmNlUG9zaXRpb24pO1xuICAgIH1cbiAgXTtcblxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWdldHN1YnN0aXR1dGlvblxuICBmdW5jdGlvbiBnZXRTdWJzdGl0dXRpb24obWF0Y2hlZCwgc3RyLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VtZW50KSB7XG4gICAgdmFyIHRhaWxQb3MgPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgIHZhciBtID0gY2FwdHVyZXMubGVuZ3RoO1xuICAgIHZhciBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFNfTk9fTkFNRUQ7XG4gICAgaWYgKG5hbWVkQ2FwdHVyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbmFtZWRDYXB0dXJlcyA9IHRvT2JqZWN0KG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTO1xuICAgIH1cbiAgICByZXR1cm4gJHJlcGxhY2UuY2FsbChyZXBsYWNlbWVudCwgc3ltYm9scywgZnVuY3Rpb24gKG1hdGNoLCBjaCkge1xuICAgICAgdmFyIGNhcHR1cmU7XG4gICAgICBzd2l0Y2ggKGNoLmNoYXJBdCgwKSkge1xuICAgICAgICBjYXNlICckJzogcmV0dXJuICckJztcbiAgICAgICAgY2FzZSAnJic6IHJldHVybiBtYXRjaGVkO1xuICAgICAgICBjYXNlICdgJzogcmV0dXJuIHN0ci5zbGljZSgwLCBwb3NpdGlvbik7XG4gICAgICAgIGNhc2UgXCInXCI6IHJldHVybiBzdHIuc2xpY2UodGFpbFBvcyk7XG4gICAgICAgIGNhc2UgJzwnOlxuICAgICAgICAgIGNhcHR1cmUgPSBuYW1lZENhcHR1cmVzW2NoLnNsaWNlKDEsIC0xKV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6IC8vIFxcZFxcZD9cbiAgICAgICAgICB2YXIgbiA9ICtjaDtcbiAgICAgICAgICBpZiAobiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIGlmIChuID4gbSkge1xuICAgICAgICAgICAgdmFyIGYgPSBmbG9vcihuIC8gMTApO1xuICAgICAgICAgICAgaWYgKGYgPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgICAgIGlmIChmIDw9IG0pIHJldHVybiBjYXB0dXJlc1tmIC0gMV0gPT09IHVuZGVmaW5lZCA/IGNoLmNoYXJBdCgxKSA6IGNhcHR1cmVzW2YgLSAxXSArIGNoLmNoYXJBdCgxKTtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FwdHVyZSA9IGNhcHR1cmVzW24gLSAxXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjYXB0dXJlID09PSB1bmRlZmluZWQgPyAnJyA6IGNhcHR1cmU7XG4gICAgfSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.regexp.replace.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.string.iterator.js": +/*!*************************************************************!*\ + !*** ./node_modules/core-js/modules/es6.string.iterator.js ***! + \*************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar $at = __webpack_require__(/*! ./_string-at */ \"./node_modules/core-js/modules/_string-at.js\")(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\n__webpack_require__(/*! ./_iter-define */ \"./node_modules/core-js/modules/_iter-define.js\")(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3IuanM/NWRmMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFVBQVUsbUJBQU8sQ0FBQyxrRUFBYzs7QUFFaEM7QUFDQSxtQkFBTyxDQUFDLHNFQUFnQjtBQUN4Qiw2QkFBNkI7QUFDN0IsY0FBYztBQUNkO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0EsVUFBVTtBQUNWLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3IuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbi8vIDIxLjEuMy4yNyBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJykoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHRoaXMuX3QgPSBTdHJpbmcoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbi8vIDIxLjEuNS4yLjEgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIE8gPSB0aGlzLl90O1xuICB2YXIgaW5kZXggPSB0aGlzLl9pO1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBPLmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICBwb2ludCA9ICRhdChPLCBpbmRleCk7XG4gIHRoaXMuX2kgKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4geyB2YWx1ZTogcG9pbnQsIGRvbmU6IGZhbHNlIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.string.iterator.js\n"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/web.dom.iterable.js": +/*!**********************************************************!*\ + !*** ./node_modules/core-js/modules/web.dom.iterable.js ***! + \**********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("var $iterators = __webpack_require__(/*! ./es6.array.iterator */ \"./node_modules/core-js/modules/es6.array.iterator.js\");\nvar getKeys = __webpack_require__(/*! ./_object-keys */ \"./node_modules/core-js/modules/_object-keys.js\");\nvar redefine = __webpack_require__(/*! ./_redefine */ \"./node_modules/core-js/modules/_redefine.js\");\nvar global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\");\nvar hide = __webpack_require__(/*! ./_hide */ \"./node_modules/core-js/modules/_hide.js\");\nvar Iterators = __webpack_require__(/*! ./_iterators */ \"./node_modules/core-js/modules/_iterators.js\");\nvar wks = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/modules/_wks.js\");\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUuanM/YWM2YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQkFBaUIsbUJBQU8sQ0FBQyxrRkFBc0I7QUFDL0MsY0FBYyxtQkFBTyxDQUFDLHNFQUFnQjtBQUN0QyxlQUFlLG1CQUFPLENBQUMsZ0VBQWE7QUFDcEMsYUFBYSxtQkFBTyxDQUFDLDREQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQyx3REFBUztBQUM1QixnQkFBZ0IsbUJBQU8sQ0FBQyxrRUFBYztBQUN0QyxVQUFVLG1CQUFPLENBQUMsc0RBQVE7QUFDMUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvREFBb0Qsd0JBQXdCO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkaXRlcmF0b3JzID0gcmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciBJVEVSQVRPUiA9IHdrcygnaXRlcmF0b3InKTtcbnZhciBUT19TVFJJTkdfVEFHID0gd2tzKCd0b1N0cmluZ1RhZycpO1xudmFyIEFycmF5VmFsdWVzID0gSXRlcmF0b3JzLkFycmF5O1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBDU1NSdWxlTGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIENTU1N0eWxlRGVjbGFyYXRpb246IGZhbHNlLFxuICBDU1NWYWx1ZUxpc3Q6IGZhbHNlLFxuICBDbGllbnRSZWN0TGlzdDogZmFsc2UsXG4gIERPTVJlY3RMaXN0OiBmYWxzZSxcbiAgRE9NU3RyaW5nTGlzdDogZmFsc2UsXG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgRGF0YVRyYW5zZmVySXRlbUxpc3Q6IGZhbHNlLFxuICBGaWxlTGlzdDogZmFsc2UsXG4gIEhUTUxBbGxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgSFRNTENvbGxlY3Rpb246IGZhbHNlLFxuICBIVE1MRm9ybUVsZW1lbnQ6IGZhbHNlLFxuICBIVE1MU2VsZWN0RWxlbWVudDogZmFsc2UsXG4gIE1lZGlhTGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIE1pbWVUeXBlQXJyYXk6IGZhbHNlLFxuICBOYW1lZE5vZGVNYXA6IGZhbHNlLFxuICBOb2RlTGlzdDogdHJ1ZSxcbiAgUGFpbnRSZXF1ZXN0TGlzdDogZmFsc2UsXG4gIFBsdWdpbjogZmFsc2UsXG4gIFBsdWdpbkFycmF5OiBmYWxzZSxcbiAgU1ZHTGVuZ3RoTGlzdDogZmFsc2UsXG4gIFNWR051bWJlckxpc3Q6IGZhbHNlLFxuICBTVkdQYXRoU2VnTGlzdDogZmFsc2UsXG4gIFNWR1BvaW50TGlzdDogZmFsc2UsXG4gIFNWR1N0cmluZ0xpc3Q6IGZhbHNlLFxuICBTVkdUcmFuc2Zvcm1MaXN0OiBmYWxzZSxcbiAgU291cmNlQnVmZmVyTGlzdDogZmFsc2UsXG4gIFN0eWxlU2hlZXRMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgVGV4dFRyYWNrQ3VlTGlzdDogZmFsc2UsXG4gIFRleHRUcmFja0xpc3Q6IGZhbHNlLFxuICBUb3VjaExpc3Q6IGZhbHNlXG59O1xuXG5mb3IgKHZhciBjb2xsZWN0aW9ucyA9IGdldEtleXMoRE9NSXRlcmFibGVzKSwgaSA9IDA7IGkgPCBjb2xsZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICB2YXIgTkFNRSA9IGNvbGxlY3Rpb25zW2ldO1xuICB2YXIgZXhwbGljaXQgPSBET01JdGVyYWJsZXNbTkFNRV07XG4gIHZhciBDb2xsZWN0aW9uID0gZ2xvYmFsW05BTUVdO1xuICB2YXIgcHJvdG8gPSBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlO1xuICB2YXIga2V5O1xuICBpZiAocHJvdG8pIHtcbiAgICBpZiAoIXByb3RvW0lURVJBVE9SXSkgaGlkZShwcm90bywgSVRFUkFUT1IsIEFycmF5VmFsdWVzKTtcbiAgICBpZiAoIXByb3RvW1RPX1NUUklOR19UQUddKSBoaWRlKHByb3RvLCBUT19TVFJJTkdfVEFHLCBOQU1FKTtcbiAgICBJdGVyYXRvcnNbTkFNRV0gPSBBcnJheVZhbHVlcztcbiAgICBpZiAoZXhwbGljaXQpIGZvciAoa2V5IGluICRpdGVyYXRvcnMpIGlmICghcHJvdG9ba2V5XSkgcmVkZWZpbmUocHJvdG8sIGtleSwgJGl0ZXJhdG9yc1trZXldLCB0cnVlKTtcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/web.dom.iterable.js\n"); + +/***/ }), + +/***/ "./node_modules/lodash.debounce/index.js": +/*!***********************************************!*\ + !*** ./node_modules/lodash.debounce/index.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("/* WEBPACK VAR INJECTION */(function(global) {/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLmRlYm91bmNlL2luZGV4LmpzP2Y3ZmUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPLFlBQVk7QUFDOUIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsOENBQThDLGtCQUFrQjtBQUNoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsRUFBRTtBQUNiLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxFQUFFO0FBQ2IsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsRUFBRTtBQUNiLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUU7QUFDYixhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoLmRlYm91bmNlL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBsb2Rhc2ggKEN1c3RvbSBCdWlsZCkgPGh0dHBzOi8vbG9kYXNoLmNvbS8+XG4gKiBCdWlsZDogYGxvZGFzaCBtb2R1bGFyaXplIGV4cG9ydHM9XCJucG1cIiAtbyAuL2BcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIDxodHRwczovL2pxdWVyeS5vcmcvPlxuICogUmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPlxuICogQmFzZWQgb24gVW5kZXJzY29yZS5qcyAxLjguMyA8aHR0cDovL3VuZGVyc2NvcmVqcy5vcmcvTElDRU5TRT5cbiAqIENvcHlyaWdodCBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuICovXG5cbi8qKiBVc2VkIGFzIHRoZSBgVHlwZUVycm9yYCBtZXNzYWdlIGZvciBcIkZ1bmN0aW9uc1wiIG1ldGhvZHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBOQU4gPSAwIC8gMDtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG4vKiogVXNlZCB0byBtYXRjaCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlLiAqL1xudmFyIHJlVHJpbSA9IC9eXFxzK3xcXHMrJC9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgYmFkIHNpZ25lZCBoZXhhZGVjaW1hbCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNCYWRIZXggPSAvXlstK10weFswLTlhLWZdKyQvaTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGJpbmFyeSBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNCaW5hcnkgPSAvXjBiWzAxXSskL2k7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvY3RhbCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNPY3RhbCA9IC9eMG9bMC03XSskL2k7XG5cbi8qKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB3aXRob3V0IGEgZGVwZW5kZW5jeSBvbiBgcm9vdGAuICovXG52YXIgZnJlZVBhcnNlSW50ID0gcGFyc2VJbnQ7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heCxcbiAgICBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLyoqXG4gKiBHZXRzIHRoZSB0aW1lc3RhbXAgb2YgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdGhhdCBoYXZlIGVsYXBzZWQgc2luY2VcbiAqIHRoZSBVbml4IGVwb2NoICgxIEphbnVhcnkgMTk3MCAwMDowMDowMCBVVEMpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBEYXRlXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSB0aW1lc3RhbXAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZGVmZXIoZnVuY3Rpb24oc3RhbXApIHtcbiAqICAgY29uc29sZS5sb2coXy5ub3coKSAtIHN0YW1wKTtcbiAqIH0sIF8ubm93KCkpO1xuICogLy8gPT4gTG9ncyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpdCB0b29rIGZvciB0aGUgZGVmZXJyZWQgaW52b2NhdGlvbi5cbiAqL1xudmFyIG5vdyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gcm9vdC5EYXRlLm5vdygpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZGVib3VuY2VkIGZ1bmN0aW9uIHRoYXQgZGVsYXlzIGludm9raW5nIGBmdW5jYCB1bnRpbCBhZnRlciBgd2FpdGBcbiAqIG1pbGxpc2Vjb25kcyBoYXZlIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgdGltZSB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uIHdhc1xuICogaW52b2tlZC4gVGhlIGRlYm91bmNlZCBmdW5jdGlvbiBjb21lcyB3aXRoIGEgYGNhbmNlbGAgbWV0aG9kIHRvIGNhbmNlbFxuICogZGVsYXllZCBgZnVuY2AgaW52b2NhdGlvbnMgYW5kIGEgYGZsdXNoYCBtZXRob2QgdG8gaW1tZWRpYXRlbHkgaW52b2tlIHRoZW0uXG4gKiBQcm92aWRlIGBvcHRpb25zYCB0byBpbmRpY2F0ZSB3aGV0aGVyIGBmdW5jYCBzaG91bGQgYmUgaW52b2tlZCBvbiB0aGVcbiAqIGxlYWRpbmcgYW5kL29yIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIGB3YWl0YCB0aW1lb3V0LiBUaGUgYGZ1bmNgIGlzIGludm9rZWRcbiAqIHdpdGggdGhlIGxhc3QgYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24uIFN1YnNlcXVlbnRcbiAqIGNhbGxzIHRvIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYGZ1bmNgXG4gKiBpbnZvY2F0aW9uLlxuICpcbiAqICoqTm90ZToqKiBJZiBgbGVhZGluZ2AgYW5kIGB0cmFpbGluZ2Agb3B0aW9ucyBhcmUgYHRydWVgLCBgZnVuY2AgaXNcbiAqIGludm9rZWQgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQgb25seSBpZiB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uXG4gKiBpcyBpbnZva2VkIG1vcmUgdGhhbiBvbmNlIGR1cmluZyB0aGUgYHdhaXRgIHRpbWVvdXQuXG4gKlxuICogSWYgYHdhaXRgIGlzIGAwYCBhbmQgYGxlYWRpbmdgIGlzIGBmYWxzZWAsIGBmdW5jYCBpbnZvY2F0aW9uIGlzIGRlZmVycmVkXG4gKiB1bnRpbCB0byB0aGUgbmV4dCB0aWNrLCBzaW1pbGFyIHRvIGBzZXRUaW1lb3V0YCB3aXRoIGEgdGltZW91dCBvZiBgMGAuXG4gKlxuICogU2VlIFtEYXZpZCBDb3JiYWNobydzIGFydGljbGVdKGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vZGVib3VuY2luZy10aHJvdHRsaW5nLWV4cGxhaW5lZC1leGFtcGxlcy8pXG4gKiBmb3IgZGV0YWlscyBvdmVyIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGBfLmRlYm91bmNlYCBhbmQgYF8udGhyb3R0bGVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZGVib3VuY2UuXG4gKiBAcGFyYW0ge251bWJlcn0gW3dhaXQ9MF0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zIG9iamVjdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubGVhZGluZz1mYWxzZV1cbiAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSBsZWFkaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4V2FpdF1cbiAqICBUaGUgbWF4aW11bSB0aW1lIGBmdW5jYCBpcyBhbGxvd2VkIHRvIGJlIGRlbGF5ZWQgYmVmb3JlIGl0J3MgaW52b2tlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudHJhaWxpbmc9dHJ1ZV1cbiAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZGVib3VuY2VkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyBBdm9pZCBjb3N0bHkgY2FsY3VsYXRpb25zIHdoaWxlIHRoZSB3aW5kb3cgc2l6ZSBpcyBpbiBmbHV4LlxuICogalF1ZXJ5KHdpbmRvdykub24oJ3Jlc2l6ZScsIF8uZGVib3VuY2UoY2FsY3VsYXRlTGF5b3V0LCAxNTApKTtcbiAqXG4gKiAvLyBJbnZva2UgYHNlbmRNYWlsYCB3aGVuIGNsaWNrZWQsIGRlYm91bmNpbmcgc3Vic2VxdWVudCBjYWxscy5cbiAqIGpRdWVyeShlbGVtZW50KS5vbignY2xpY2snLCBfLmRlYm91bmNlKHNlbmRNYWlsLCAzMDAsIHtcbiAqICAgJ2xlYWRpbmcnOiB0cnVlLFxuICogICAndHJhaWxpbmcnOiBmYWxzZVxuICogfSkpO1xuICpcbiAqIC8vIEVuc3VyZSBgYmF0Y2hMb2dgIGlzIGludm9rZWQgb25jZSBhZnRlciAxIHNlY29uZCBvZiBkZWJvdW5jZWQgY2FsbHMuXG4gKiB2YXIgZGVib3VuY2VkID0gXy5kZWJvdW5jZShiYXRjaExvZywgMjUwLCB7ICdtYXhXYWl0JzogMTAwMCB9KTtcbiAqIHZhciBzb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoJy9zdHJlYW0nKTtcbiAqIGpRdWVyeShzb3VyY2UpLm9uKCdtZXNzYWdlJywgZGVib3VuY2VkKTtcbiAqXG4gKiAvLyBDYW5jZWwgdGhlIHRyYWlsaW5nIGRlYm91bmNlZCBpbnZvY2F0aW9uLlxuICogalF1ZXJ5KHdpbmRvdykub24oJ3BvcHN0YXRlJywgZGVib3VuY2VkLmNhbmNlbCk7XG4gKi9cbmZ1bmN0aW9uIGRlYm91bmNlKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHtcbiAgdmFyIGxhc3RBcmdzLFxuICAgICAgbGFzdFRoaXMsXG4gICAgICBtYXhXYWl0LFxuICAgICAgcmVzdWx0LFxuICAgICAgdGltZXJJZCxcbiAgICAgIGxhc3RDYWxsVGltZSxcbiAgICAgIGxhc3RJbnZva2VUaW1lID0gMCxcbiAgICAgIGxlYWRpbmcgPSBmYWxzZSxcbiAgICAgIG1heGluZyA9IGZhbHNlLFxuICAgICAgdHJhaWxpbmcgPSB0cnVlO1xuXG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHdhaXQgPSB0b051bWJlcih3YWl0KSB8fCAwO1xuICBpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcbiAgICBsZWFkaW5nID0gISFvcHRpb25zLmxlYWRpbmc7XG4gICAgbWF4aW5nID0gJ21heFdhaXQnIGluIG9wdGlvbnM7XG4gICAgbWF4V2FpdCA9IG1heGluZyA/IG5hdGl2ZU1heCh0b051bWJlcihvcHRpb25zLm1heFdhaXQpIHx8IDAsIHdhaXQpIDogbWF4V2FpdDtcbiAgICB0cmFpbGluZyA9ICd0cmFpbGluZycgaW4gb3B0aW9ucyA/ICEhb3B0aW9ucy50cmFpbGluZyA6IHRyYWlsaW5nO1xuICB9XG5cbiAgZnVuY3Rpb24gaW52b2tlRnVuYyh0aW1lKSB7XG4gICAgdmFyIGFyZ3MgPSBsYXN0QXJncyxcbiAgICAgICAgdGhpc0FyZyA9IGxhc3RUaGlzO1xuXG4gICAgbGFzdEFyZ3MgPSBsYXN0VGhpcyA9IHVuZGVmaW5lZDtcbiAgICBsYXN0SW52b2tlVGltZSA9IHRpbWU7XG4gICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gbGVhZGluZ0VkZ2UodGltZSkge1xuICAgIC8vIFJlc2V0IGFueSBgbWF4V2FpdGAgdGltZXIuXG4gICAgbGFzdEludm9rZVRpbWUgPSB0aW1lO1xuICAgIC8vIFN0YXJ0IHRoZSB0aW1lciBmb3IgdGhlIHRyYWlsaW5nIGVkZ2UuXG4gICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCB3YWl0KTtcbiAgICAvLyBJbnZva2UgdGhlIGxlYWRpbmcgZWRnZS5cbiAgICByZXR1cm4gbGVhZGluZyA/IGludm9rZUZ1bmModGltZSkgOiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiByZW1haW5pbmdXYWl0KHRpbWUpIHtcbiAgICB2YXIgdGltZVNpbmNlTGFzdENhbGwgPSB0aW1lIC0gbGFzdENhbGxUaW1lLFxuICAgICAgICB0aW1lU2luY2VMYXN0SW52b2tlID0gdGltZSAtIGxhc3RJbnZva2VUaW1lLFxuICAgICAgICByZXN1bHQgPSB3YWl0IC0gdGltZVNpbmNlTGFzdENhbGw7XG5cbiAgICByZXR1cm4gbWF4aW5nID8gbmF0aXZlTWluKHJlc3VsdCwgbWF4V2FpdCAtIHRpbWVTaW5jZUxhc3RJbnZva2UpIDogcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gc2hvdWxkSW52b2tlKHRpbWUpIHtcbiAgICB2YXIgdGltZVNpbmNlTGFzdENhbGwgPSB0aW1lIC0gbGFzdENhbGxUaW1lLFxuICAgICAgICB0aW1lU2luY2VMYXN0SW52b2tlID0gdGltZSAtIGxhc3RJbnZva2VUaW1lO1xuXG4gICAgLy8gRWl0aGVyIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwsIGFjdGl2aXR5IGhhcyBzdG9wcGVkIGFuZCB3ZSdyZSBhdCB0aGVcbiAgICAvLyB0cmFpbGluZyBlZGdlLCB0aGUgc3lzdGVtIHRpbWUgaGFzIGdvbmUgYmFja3dhcmRzIGFuZCB3ZSdyZSB0cmVhdGluZ1xuICAgIC8vIGl0IGFzIHRoZSB0cmFpbGluZyBlZGdlLCBvciB3ZSd2ZSBoaXQgdGhlIGBtYXhXYWl0YCBsaW1pdC5cbiAgICByZXR1cm4gKGxhc3RDYWxsVGltZSA9PT0gdW5kZWZpbmVkIHx8ICh0aW1lU2luY2VMYXN0Q2FsbCA+PSB3YWl0KSB8fFxuICAgICAgKHRpbWVTaW5jZUxhc3RDYWxsIDwgMCkgfHwgKG1heGluZyAmJiB0aW1lU2luY2VMYXN0SW52b2tlID49IG1heFdhaXQpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRpbWVyRXhwaXJlZCgpIHtcbiAgICB2YXIgdGltZSA9IG5vdygpO1xuICAgIGlmIChzaG91bGRJbnZva2UodGltZSkpIHtcbiAgICAgIHJldHVybiB0cmFpbGluZ0VkZ2UodGltZSk7XG4gICAgfVxuICAgIC8vIFJlc3RhcnQgdGhlIHRpbWVyLlxuICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgcmVtYWluaW5nV2FpdCh0aW1lKSk7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFpbGluZ0VkZ2UodGltZSkge1xuICAgIHRpbWVySWQgPSB1bmRlZmluZWQ7XG5cbiAgICAvLyBPbmx5IGludm9rZSBpZiB3ZSBoYXZlIGBsYXN0QXJnc2Agd2hpY2ggbWVhbnMgYGZ1bmNgIGhhcyBiZWVuXG4gICAgLy8gZGVib3VuY2VkIGF0IGxlYXN0IG9uY2UuXG4gICAgaWYgKHRyYWlsaW5nICYmIGxhc3RBcmdzKSB7XG4gICAgICByZXR1cm4gaW52b2tlRnVuYyh0aW1lKTtcbiAgICB9XG4gICAgbGFzdEFyZ3MgPSBsYXN0VGhpcyA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgIGlmICh0aW1lcklkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcklkKTtcbiAgICB9XG4gICAgbGFzdEludm9rZVRpbWUgPSAwO1xuICAgIGxhc3RBcmdzID0gbGFzdENhbGxUaW1lID0gbGFzdFRoaXMgPSB0aW1lcklkID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgcmV0dXJuIHRpbWVySWQgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IHRyYWlsaW5nRWRnZShub3coKSk7XG4gIH1cblxuICBmdW5jdGlvbiBkZWJvdW5jZWQoKSB7XG4gICAgdmFyIHRpbWUgPSBub3coKSxcbiAgICAgICAgaXNJbnZva2luZyA9IHNob3VsZEludm9rZSh0aW1lKTtcblxuICAgIGxhc3RBcmdzID0gYXJndW1lbnRzO1xuICAgIGxhc3RUaGlzID0gdGhpcztcbiAgICBsYXN0Q2FsbFRpbWUgPSB0aW1lO1xuXG4gICAgaWYgKGlzSW52b2tpbmcpIHtcbiAgICAgIGlmICh0aW1lcklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGxlYWRpbmdFZGdlKGxhc3RDYWxsVGltZSk7XG4gICAgICB9XG4gICAgICBpZiAobWF4aW5nKSB7XG4gICAgICAgIC8vIEhhbmRsZSBpbnZvY2F0aW9ucyBpbiBhIHRpZ2h0IGxvb3AuXG4gICAgICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgd2FpdCk7XG4gICAgICAgIHJldHVybiBpbnZva2VGdW5jKGxhc3RDYWxsVGltZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aW1lcklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgd2FpdCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgZGVib3VuY2VkLmNhbmNlbCA9IGNhbmNlbDtcbiAgZGVib3VuY2VkLmZsdXNoID0gZmx1c2g7XG4gIHJldHVybiBkZWJvdW5jZWQ7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gISF2YWx1ZSAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgb2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgbnVtYmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbnVtYmVyLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvTnVtYmVyKDMuMik7XG4gKiAvLyA9PiAzLjJcbiAqXG4gKiBfLnRvTnVtYmVyKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gNWUtMzI0XG4gKlxuICogXy50b051bWJlcihJbmZpbml0eSk7XG4gKiAvLyA9PiBJbmZpbml0eVxuICpcbiAqIF8udG9OdW1iZXIoJzMuMicpO1xuICogLy8gPT4gMy4yXG4gKi9cbmZ1bmN0aW9uIHRvTnVtYmVyKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiBOQU47XG4gIH1cbiAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHZhciBvdGhlciA9IHR5cGVvZiB2YWx1ZS52YWx1ZU9mID09ICdmdW5jdGlvbicgPyB2YWx1ZS52YWx1ZU9mKCkgOiB2YWx1ZTtcbiAgICB2YWx1ZSA9IGlzT2JqZWN0KG90aGVyKSA/IChvdGhlciArICcnKSA6IG90aGVyO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IDAgPyB2YWx1ZSA6ICt2YWx1ZTtcbiAgfVxuICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UocmVUcmltLCAnJyk7XG4gIHZhciBpc0JpbmFyeSA9IHJlSXNCaW5hcnkudGVzdCh2YWx1ZSk7XG4gIHJldHVybiAoaXNCaW5hcnkgfHwgcmVJc09jdGFsLnRlc3QodmFsdWUpKVxuICAgID8gZnJlZVBhcnNlSW50KHZhbHVlLnNsaWNlKDIpLCBpc0JpbmFyeSA/IDIgOiA4KVxuICAgIDogKHJlSXNCYWRIZXgudGVzdCh2YWx1ZSkgPyBOQU4gOiArdmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlYm91bmNlO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash.debounce/index.js\n"); + +/***/ }), + +/***/ "./node_modules/lodash.memoize/index.js": +/*!**********************************************!*\ + !*** ./node_modules/lodash.memoize/index.js ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("/* WEBPACK VAR INJECTION */(function(global) {/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n nativeCreate = getNative(Object, 'create');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result);\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Assign cache to `_.memoize`.\nmemoize.Cache = MapCache;\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\nmodule.exports = memoize;\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLm1lbW9pemUvaW5kZXguanM/YmIyMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7O0FBRXBDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsRUFBRTtBQUNmO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxFQUFFO0FBQ2IsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUU7QUFDYixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUU7QUFDYixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoLm1lbW9pemUvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGxvZGFzaCAoQ3VzdG9tIEJ1aWxkKSA8aHR0cHM6Ly9sb2Rhc2guY29tLz5cbiAqIEJ1aWxkOiBgbG9kYXNoIG1vZHVsYXJpemUgZXhwb3J0cz1cIm5wbVwiIC1vIC4vYFxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMgPGh0dHBzOi8vanF1ZXJ5Lm9yZy8+XG4gKiBSZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZSA8aHR0cHM6Ly9sb2Rhc2guY29tL2xpY2Vuc2U+XG4gKiBCYXNlZCBvbiBVbmRlcnNjb3JlLmpzIDEuOC4zIDxodHRwOi8vdW5kZXJzY29yZWpzLm9yZy9MSUNFTlNFPlxuICogQ29weXJpZ2h0IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzXG4gKi9cblxuLyoqIFVzZWQgYXMgdGhlIGBUeXBlRXJyb3JgIG1lc3NhZ2UgZm9yIFwiRnVuY3Rpb25zXCIgbWV0aG9kcy4gKi9cbnZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSc7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2c7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpKS4gKi9cbnZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xudmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XG5cbi8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xudmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgaG9zdCBvYmplY3QgaW4gSUUgPCA5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgaG9zdCBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNIb3N0T2JqZWN0KHZhbHVlKSB7XG4gIC8vIE1hbnkgaG9zdCBvYmplY3RzIGFyZSBgT2JqZWN0YCBvYmplY3RzIHRoYXQgY2FuIGNvZXJjZSB0byBzdHJpbmdzXG4gIC8vIGRlc3BpdGUgaGF2aW5nIGltcHJvcGVybHkgZGVmaW5lZCBgdG9TdHJpbmdgIG1ldGhvZHMuXG4gIHZhciByZXN1bHQgPSBmYWxzZTtcbiAgaWYgKHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlLnRvU3RyaW5nICE9ICdmdW5jdGlvbicpIHtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gISEodmFsdWUgKyAnJyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZSxcbiAgICBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG52YXIgY29yZUpzRGF0YSA9IHJvb3RbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWV0aG9kcyBtYXNxdWVyYWRpbmcgYXMgbmF0aXZlLiAqL1xudmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gIHJldHVybiB1aWQgPyAoJ1N5bWJvbChzcmMpXzEuJyArIHVpZCkgOiAnJztcbn0oKSk7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBvYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaWYgYSBtZXRob2QgaXMgbmF0aXZlLiAqL1xudmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcbiAgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXCQmJylcbiAgLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csICckMS4qPycpICsgJyQnXG4pO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzcGxpY2UgPSBhcnJheVByb3RvLnNwbGljZTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIE1hcCA9IGdldE5hdGl2ZShyb290LCAnTWFwJyksXG4gICAgbmF0aXZlQ3JlYXRlID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2NyZWF0ZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBoYXNoIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gSGFzaChlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA/IGVudHJpZXMubGVuZ3RoIDogMDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgSGFzaFxuICovXG5mdW5jdGlvbiBoYXNoQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuYXRpdmVDcmVhdGUgPyBuYXRpdmVDcmVhdGUobnVsbCkgOiB7fTtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XG4gIHJldHVybiB0aGlzLmhhcyhrZXkpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleV07XG59XG5cbi8qKlxuICogR2V0cyB0aGUgaGFzaCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBoYXNoR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChuYXRpdmVDcmVhdGUpIHtcbiAgICB2YXIgcmVzdWx0ID0gZGF0YVtrZXldO1xuICAgIHJldHVybiByZXN1bHQgPT09IEhBU0hfVU5ERUZJTkVEID8gdW5kZWZpbmVkIDogcmVzdWx0O1xuICB9XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSkgPyBkYXRhW2tleV0gOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgaGFzaCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaEhhcyhrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICByZXR1cm4gbmF0aXZlQ3JlYXRlID8gZGF0YVtrZXldICE9PSB1bmRlZmluZWQgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgaGFzaCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGhhc2ggaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGhhc2hTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGRhdGFba2V5XSA9IChuYXRpdmVDcmVhdGUgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyBIQVNIX1VOREVGSU5FRCA6IHZhbHVlO1xuICByZXR1cm4gdGhpcztcbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYEhhc2hgLlxuSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBoYXNoQ2xlYXI7XG5IYXNoLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBoYXNoRGVsZXRlO1xuSGFzaC5wcm90b3R5cGUuZ2V0ID0gaGFzaEdldDtcbkhhc2gucHJvdG90eXBlLmhhcyA9IGhhc2hIYXM7XG5IYXNoLnByb3RvdHlwZS5zZXQgPSBoYXNoU2V0O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gbGlzdCBjYWNoZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIExpc3RDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA/IGVudHJpZXMubGVuZ3RoIDogMDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gW107XG59XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBsYXN0SW5kZXggPSBkYXRhLmxlbmd0aCAtIDE7XG4gIGlmIChpbmRleCA9PSBsYXN0SW5kZXgpIHtcbiAgICBkYXRhLnBvcCgpO1xuICB9IGVsc2Uge1xuICAgIHNwbGljZS5jYWxsKGRhdGEsIGluZGV4LCAxKTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiBkYXRhW2luZGV4XVsxXTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGFzc29jSW5kZXhPZih0aGlzLl9fZGF0YV9fLCBrZXkpID4gLTE7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgbGlzdCBjYWNoZSBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbGlzdCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgZGF0YS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0gZWxzZSB7XG4gICAgZGF0YVtpbmRleF1bMV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYExpc3RDYWNoZWAuXG5MaXN0Q2FjaGUucHJvdG90eXBlLmNsZWFyID0gbGlzdENhY2hlQ2xlYXI7XG5MaXN0Q2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IGxpc3RDYWNoZURlbGV0ZTtcbkxpc3RDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbGlzdENhY2hlR2V0O1xuTGlzdENhY2hlLnByb3RvdHlwZS5oYXMgPSBsaXN0Q2FjaGVIYXM7XG5MaXN0Q2FjaGUucHJvdG90eXBlLnNldCA9IGxpc3RDYWNoZVNldDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbWFwIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIE1hcENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID8gZW50cmllcy5sZW5ndGggOiAwO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbWFwLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSB7XG4gICAgJ2hhc2gnOiBuZXcgSGFzaCxcbiAgICAnbWFwJzogbmV3IChNYXAgfHwgTGlzdENhY2hlKSxcbiAgICAnc3RyaW5nJzogbmV3IEhhc2hcbiAgfTtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbWFwLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlRGVsZXRlKGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpWydkZWxldGUnXShrZXkpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIG1hcCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVHZXQoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuZ2V0KGtleSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbWFwIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuaGFzKGtleSk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgbWFwIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG1hcCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICBnZXRNYXBEYXRhKHRoaXMsIGtleSkuc2V0KGtleSwgdmFsdWUpO1xuICByZXR1cm4gdGhpcztcbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYE1hcENhY2hlYC5cbk1hcENhY2hlLnByb3RvdHlwZS5jbGVhciA9IG1hcENhY2hlQ2xlYXI7XG5NYXBDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbWFwQ2FjaGVEZWxldGU7XG5NYXBDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbWFwQ2FjaGVHZXQ7XG5NYXBDYWNoZS5wcm90b3R5cGUuaGFzID0gbWFwQ2FjaGVIYXM7XG5NYXBDYWNoZS5wcm90b3R5cGUuc2V0ID0gbWFwQ2FjaGVTZXQ7XG5cbi8qKlxuICogR2V0cyB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIGBrZXlgIGlzIGZvdW5kIGluIGBhcnJheWAgb2Yga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0ga2V5IFRoZSBrZXkgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIGFzc29jSW5kZXhPZihhcnJheSwga2V5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGlmIChlcShhcnJheVtsZW5ndGhdWzBdLCBrZXkpKSB7XG4gICAgICByZXR1cm4gbGVuZ3RoO1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYXRpdmVgIHdpdGhvdXQgYmFkIHNoaW0gY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpIHx8IGlzTWFza2VkKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcGF0dGVybiA9IChpc0Z1bmN0aW9uKHZhbHVlKSB8fCBpc0hvc3RPYmplY3QodmFsdWUpKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XG4gIHJldHVybiBwYXR0ZXJuLnRlc3QodG9Tb3VyY2UodmFsdWUpKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBkYXRhIGZvciBgbWFwYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUgcmVmZXJlbmNlIGtleS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXAgZGF0YS5cbiAqL1xuZnVuY3Rpb24gZ2V0TWFwRGF0YShtYXAsIGtleSkge1xuICB2YXIgZGF0YSA9IG1hcC5fX2RhdGFfXztcbiAgcmV0dXJuIGlzS2V5YWJsZShrZXkpXG4gICAgPyBkYXRhW3R5cGVvZiBrZXkgPT0gJ3N0cmluZycgPyAnc3RyaW5nJyA6ICdoYXNoJ11cbiAgICA6IGRhdGEubWFwO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBtZXRob2QgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZ1bmN0aW9uIGlmIGl0J3MgbmF0aXZlLCBlbHNlIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBnZXROYXRpdmUob2JqZWN0LCBrZXkpIHtcbiAgdmFyIHZhbHVlID0gZ2V0VmFsdWUob2JqZWN0LCBrZXkpO1xuICByZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzb3VyY2UgY29kZS5cbiAqL1xuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xuICBpZiAoZnVuYyAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgbWVtb2l6ZXMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuIElmIGByZXNvbHZlcmAgaXNcbiAqIHByb3ZpZGVkLCBpdCBkZXRlcm1pbmVzIHRoZSBjYWNoZSBrZXkgZm9yIHN0b3JpbmcgdGhlIHJlc3VsdCBiYXNlZCBvbiB0aGVcbiAqIGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uIEJ5IGRlZmF1bHQsIHRoZSBmaXJzdCBhcmd1bWVudFxuICogcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uIGlzIHVzZWQgYXMgdGhlIG1hcCBjYWNoZSBrZXkuIFRoZSBgZnVuY2BcbiAqIGlzIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgdGhlIG1lbW9pemVkIGZ1bmN0aW9uLlxuICpcbiAqICoqTm90ZToqKiBUaGUgY2FjaGUgaXMgZXhwb3NlZCBhcyB0aGUgYGNhY2hlYCBwcm9wZXJ0eSBvbiB0aGUgbWVtb2l6ZWRcbiAqIGZ1bmN0aW9uLiBJdHMgY3JlYXRpb24gbWF5IGJlIGN1c3RvbWl6ZWQgYnkgcmVwbGFjaW5nIHRoZSBgXy5tZW1vaXplLkNhY2hlYFxuICogY29uc3RydWN0b3Igd2l0aCBvbmUgd2hvc2UgaW5zdGFuY2VzIGltcGxlbWVudCB0aGVcbiAqIFtgTWFwYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcHJvcGVydGllcy1vZi10aGUtbWFwLXByb3RvdHlwZS1vYmplY3QpXG4gKiBtZXRob2QgaW50ZXJmYWNlIG9mIGBkZWxldGVgLCBgZ2V0YCwgYGhhc2AsIGFuZCBgc2V0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtyZXNvbHZlcl0gVGhlIGZ1bmN0aW9uIHRvIHJlc29sdmUgdGhlIGNhY2hlIGtleS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogMiB9O1xuICogdmFyIG90aGVyID0geyAnYyc6IDMsICdkJzogNCB9O1xuICpcbiAqIHZhciB2YWx1ZXMgPSBfLm1lbW9pemUoXy52YWx1ZXMpO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqXG4gKiB2YWx1ZXMob3RoZXIpO1xuICogLy8gPT4gWzMsIDRdXG4gKlxuICogb2JqZWN0LmEgPSAyO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqXG4gKiAvLyBNb2RpZnkgdGhlIHJlc3VsdCBjYWNoZS5cbiAqIHZhbHVlcy5jYWNoZS5zZXQob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWydhJywgJ2InXVxuICpcbiAqIC8vIFJlcGxhY2UgYF8ubWVtb2l6ZS5DYWNoZWAuXG4gKiBfLm1lbW9pemUuQ2FjaGUgPSBXZWFrTWFwO1xuICovXG5mdW5jdGlvbiBtZW1vaXplKGZ1bmMsIHJlc29sdmVyKSB7XG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nIHx8IChyZXNvbHZlciAmJiB0eXBlb2YgcmVzb2x2ZXIgIT0gJ2Z1bmN0aW9uJykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gIH1cbiAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGtleSA9IHJlc29sdmVyID8gcmVzb2x2ZXIuYXBwbHkodGhpcywgYXJncykgOiBhcmdzWzBdLFxuICAgICAgICBjYWNoZSA9IG1lbW9pemVkLmNhY2hlO1xuXG4gICAgaWYgKGNhY2hlLmhhcyhrZXkpKSB7XG4gICAgICByZXR1cm4gY2FjaGUuZ2V0KGtleSk7XG4gICAgfVxuICAgIHZhciByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIG1lbW9pemVkLmNhY2hlID0gY2FjaGUuc2V0KGtleSwgcmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICBtZW1vaXplZC5jYWNoZSA9IG5ldyAobWVtb2l6ZS5DYWNoZSB8fCBNYXBDYWNoZSk7XG4gIHJldHVybiBtZW1vaXplZDtcbn1cblxuLy8gQXNzaWduIGNhY2hlIHRvIGBfLm1lbW9pemVgLlxubWVtb2l6ZS5DYWNoZSA9IE1hcENhY2hlO1xuXG4vKipcbiAqIFBlcmZvcm1zIGFcbiAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5lcShvYmplY3QsIG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcSgnYScsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcSgnYScsIE9iamVjdCgnYScpKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcShOYU4sIE5hTik7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGVxKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gIC8vIGluIFNhZmFyaSA4LTkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXkgYW5kIG90aGVyIGNvbnN0cnVjdG9ycy5cbiAgdmFyIHRhZyA9IGlzT2JqZWN0KHZhbHVlKSA/IG9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpIDogJyc7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxuICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChfLm5vb3ApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuICEhdmFsdWUgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtZW1vaXplO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash.memoize/index.js\n"); + +/***/ }), + +/***/ "./node_modules/lodash.throttle/index.js": +/*!***********************************************!*\ + !*** ./node_modules/lodash.throttle/index.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("/* WEBPACK VAR INJECTION */(function(global) {/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = throttle;\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLnRocm90dGxlL2luZGV4LmpzPzg0YTIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPLFlBQVk7QUFDOUIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsOENBQThDLGtCQUFrQjtBQUNoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPLFlBQVk7QUFDOUIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRCxvQkFBb0I7QUFDdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsRUFBRTtBQUNiLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxFQUFFO0FBQ2IsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsRUFBRTtBQUNiLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUU7QUFDYixhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoLnRocm90dGxlL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBsb2Rhc2ggKEN1c3RvbSBCdWlsZCkgPGh0dHBzOi8vbG9kYXNoLmNvbS8+XG4gKiBCdWlsZDogYGxvZGFzaCBtb2R1bGFyaXplIGV4cG9ydHM9XCJucG1cIiAtbyAuL2BcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIDxodHRwczovL2pxdWVyeS5vcmcvPlxuICogUmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPlxuICogQmFzZWQgb24gVW5kZXJzY29yZS5qcyAxLjguMyA8aHR0cDovL3VuZGVyc2NvcmVqcy5vcmcvTElDRU5TRT5cbiAqIENvcHlyaWdodCBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuICovXG5cbi8qKiBVc2VkIGFzIHRoZSBgVHlwZUVycm9yYCBtZXNzYWdlIGZvciBcIkZ1bmN0aW9uc1wiIG1ldGhvZHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBOQU4gPSAwIC8gMDtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG4vKiogVXNlZCB0byBtYXRjaCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlLiAqL1xudmFyIHJlVHJpbSA9IC9eXFxzK3xcXHMrJC9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgYmFkIHNpZ25lZCBoZXhhZGVjaW1hbCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNCYWRIZXggPSAvXlstK10weFswLTlhLWZdKyQvaTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGJpbmFyeSBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNCaW5hcnkgPSAvXjBiWzAxXSskL2k7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvY3RhbCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNPY3RhbCA9IC9eMG9bMC03XSskL2k7XG5cbi8qKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB3aXRob3V0IGEgZGVwZW5kZW5jeSBvbiBgcm9vdGAuICovXG52YXIgZnJlZVBhcnNlSW50ID0gcGFyc2VJbnQ7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heCxcbiAgICBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLyoqXG4gKiBHZXRzIHRoZSB0aW1lc3RhbXAgb2YgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdGhhdCBoYXZlIGVsYXBzZWQgc2luY2VcbiAqIHRoZSBVbml4IGVwb2NoICgxIEphbnVhcnkgMTk3MCAwMDowMDowMCBVVEMpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBEYXRlXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSB0aW1lc3RhbXAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZGVmZXIoZnVuY3Rpb24oc3RhbXApIHtcbiAqICAgY29uc29sZS5sb2coXy5ub3coKSAtIHN0YW1wKTtcbiAqIH0sIF8ubm93KCkpO1xuICogLy8gPT4gTG9ncyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpdCB0b29rIGZvciB0aGUgZGVmZXJyZWQgaW52b2NhdGlvbi5cbiAqL1xudmFyIG5vdyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gcm9vdC5EYXRlLm5vdygpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZGVib3VuY2VkIGZ1bmN0aW9uIHRoYXQgZGVsYXlzIGludm9raW5nIGBmdW5jYCB1bnRpbCBhZnRlciBgd2FpdGBcbiAqIG1pbGxpc2Vjb25kcyBoYXZlIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgdGltZSB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uIHdhc1xuICogaW52b2tlZC4gVGhlIGRlYm91bmNlZCBmdW5jdGlvbiBjb21lcyB3aXRoIGEgYGNhbmNlbGAgbWV0aG9kIHRvIGNhbmNlbFxuICogZGVsYXllZCBgZnVuY2AgaW52b2NhdGlvbnMgYW5kIGEgYGZsdXNoYCBtZXRob2QgdG8gaW1tZWRpYXRlbHkgaW52b2tlIHRoZW0uXG4gKiBQcm92aWRlIGBvcHRpb25zYCB0byBpbmRpY2F0ZSB3aGV0aGVyIGBmdW5jYCBzaG91bGQgYmUgaW52b2tlZCBvbiB0aGVcbiAqIGxlYWRpbmcgYW5kL29yIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIGB3YWl0YCB0aW1lb3V0LiBUaGUgYGZ1bmNgIGlzIGludm9rZWRcbiAqIHdpdGggdGhlIGxhc3QgYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24uIFN1YnNlcXVlbnRcbiAqIGNhbGxzIHRvIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYGZ1bmNgXG4gKiBpbnZvY2F0aW9uLlxuICpcbiAqICoqTm90ZToqKiBJZiBgbGVhZGluZ2AgYW5kIGB0cmFpbGluZ2Agb3B0aW9ucyBhcmUgYHRydWVgLCBgZnVuY2AgaXNcbiAqIGludm9rZWQgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQgb25seSBpZiB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uXG4gKiBpcyBpbnZva2VkIG1vcmUgdGhhbiBvbmNlIGR1cmluZyB0aGUgYHdhaXRgIHRpbWVvdXQuXG4gKlxuICogSWYgYHdhaXRgIGlzIGAwYCBhbmQgYGxlYWRpbmdgIGlzIGBmYWxzZWAsIGBmdW5jYCBpbnZvY2F0aW9uIGlzIGRlZmVycmVkXG4gKiB1bnRpbCB0byB0aGUgbmV4dCB0aWNrLCBzaW1pbGFyIHRvIGBzZXRUaW1lb3V0YCB3aXRoIGEgdGltZW91dCBvZiBgMGAuXG4gKlxuICogU2VlIFtEYXZpZCBDb3JiYWNobydzIGFydGljbGVdKGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vZGVib3VuY2luZy10aHJvdHRsaW5nLWV4cGxhaW5lZC1leGFtcGxlcy8pXG4gKiBmb3IgZGV0YWlscyBvdmVyIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGBfLmRlYm91bmNlYCBhbmQgYF8udGhyb3R0bGVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZGVib3VuY2UuXG4gKiBAcGFyYW0ge251bWJlcn0gW3dhaXQ9MF0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zIG9iamVjdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubGVhZGluZz1mYWxzZV1cbiAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSBsZWFkaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4V2FpdF1cbiAqICBUaGUgbWF4aW11bSB0aW1lIGBmdW5jYCBpcyBhbGxvd2VkIHRvIGJlIGRlbGF5ZWQgYmVmb3JlIGl0J3MgaW52b2tlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudHJhaWxpbmc9dHJ1ZV1cbiAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZGVib3VuY2VkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyBBdm9pZCBjb3N0bHkgY2FsY3VsYXRpb25zIHdoaWxlIHRoZSB3aW5kb3cgc2l6ZSBpcyBpbiBmbHV4LlxuICogalF1ZXJ5KHdpbmRvdykub24oJ3Jlc2l6ZScsIF8uZGVib3VuY2UoY2FsY3VsYXRlTGF5b3V0LCAxNTApKTtcbiAqXG4gKiAvLyBJbnZva2UgYHNlbmRNYWlsYCB3aGVuIGNsaWNrZWQsIGRlYm91bmNpbmcgc3Vic2VxdWVudCBjYWxscy5cbiAqIGpRdWVyeShlbGVtZW50KS5vbignY2xpY2snLCBfLmRlYm91bmNlKHNlbmRNYWlsLCAzMDAsIHtcbiAqICAgJ2xlYWRpbmcnOiB0cnVlLFxuICogICAndHJhaWxpbmcnOiBmYWxzZVxuICogfSkpO1xuICpcbiAqIC8vIEVuc3VyZSBgYmF0Y2hMb2dgIGlzIGludm9rZWQgb25jZSBhZnRlciAxIHNlY29uZCBvZiBkZWJvdW5jZWQgY2FsbHMuXG4gKiB2YXIgZGVib3VuY2VkID0gXy5kZWJvdW5jZShiYXRjaExvZywgMjUwLCB7ICdtYXhXYWl0JzogMTAwMCB9KTtcbiAqIHZhciBzb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoJy9zdHJlYW0nKTtcbiAqIGpRdWVyeShzb3VyY2UpLm9uKCdtZXNzYWdlJywgZGVib3VuY2VkKTtcbiAqXG4gKiAvLyBDYW5jZWwgdGhlIHRyYWlsaW5nIGRlYm91bmNlZCBpbnZvY2F0aW9uLlxuICogalF1ZXJ5KHdpbmRvdykub24oJ3BvcHN0YXRlJywgZGVib3VuY2VkLmNhbmNlbCk7XG4gKi9cbmZ1bmN0aW9uIGRlYm91bmNlKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHtcbiAgdmFyIGxhc3RBcmdzLFxuICAgICAgbGFzdFRoaXMsXG4gICAgICBtYXhXYWl0LFxuICAgICAgcmVzdWx0LFxuICAgICAgdGltZXJJZCxcbiAgICAgIGxhc3RDYWxsVGltZSxcbiAgICAgIGxhc3RJbnZva2VUaW1lID0gMCxcbiAgICAgIGxlYWRpbmcgPSBmYWxzZSxcbiAgICAgIG1heGluZyA9IGZhbHNlLFxuICAgICAgdHJhaWxpbmcgPSB0cnVlO1xuXG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHdhaXQgPSB0b051bWJlcih3YWl0KSB8fCAwO1xuICBpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcbiAgICBsZWFkaW5nID0gISFvcHRpb25zLmxlYWRpbmc7XG4gICAgbWF4aW5nID0gJ21heFdhaXQnIGluIG9wdGlvbnM7XG4gICAgbWF4V2FpdCA9IG1heGluZyA/IG5hdGl2ZU1heCh0b051bWJlcihvcHRpb25zLm1heFdhaXQpIHx8IDAsIHdhaXQpIDogbWF4V2FpdDtcbiAgICB0cmFpbGluZyA9ICd0cmFpbGluZycgaW4gb3B0aW9ucyA/ICEhb3B0aW9ucy50cmFpbGluZyA6IHRyYWlsaW5nO1xuICB9XG5cbiAgZnVuY3Rpb24gaW52b2tlRnVuYyh0aW1lKSB7XG4gICAgdmFyIGFyZ3MgPSBsYXN0QXJncyxcbiAgICAgICAgdGhpc0FyZyA9IGxhc3RUaGlzO1xuXG4gICAgbGFzdEFyZ3MgPSBsYXN0VGhpcyA9IHVuZGVmaW5lZDtcbiAgICBsYXN0SW52b2tlVGltZSA9IHRpbWU7XG4gICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gbGVhZGluZ0VkZ2UodGltZSkge1xuICAgIC8vIFJlc2V0IGFueSBgbWF4V2FpdGAgdGltZXIuXG4gICAgbGFzdEludm9rZVRpbWUgPSB0aW1lO1xuICAgIC8vIFN0YXJ0IHRoZSB0aW1lciBmb3IgdGhlIHRyYWlsaW5nIGVkZ2UuXG4gICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCB3YWl0KTtcbiAgICAvLyBJbnZva2UgdGhlIGxlYWRpbmcgZWRnZS5cbiAgICByZXR1cm4gbGVhZGluZyA/IGludm9rZUZ1bmModGltZSkgOiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiByZW1haW5pbmdXYWl0KHRpbWUpIHtcbiAgICB2YXIgdGltZVNpbmNlTGFzdENhbGwgPSB0aW1lIC0gbGFzdENhbGxUaW1lLFxuICAgICAgICB0aW1lU2luY2VMYXN0SW52b2tlID0gdGltZSAtIGxhc3RJbnZva2VUaW1lLFxuICAgICAgICByZXN1bHQgPSB3YWl0IC0gdGltZVNpbmNlTGFzdENhbGw7XG5cbiAgICByZXR1cm4gbWF4aW5nID8gbmF0aXZlTWluKHJlc3VsdCwgbWF4V2FpdCAtIHRpbWVTaW5jZUxhc3RJbnZva2UpIDogcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gc2hvdWxkSW52b2tlKHRpbWUpIHtcbiAgICB2YXIgdGltZVNpbmNlTGFzdENhbGwgPSB0aW1lIC0gbGFzdENhbGxUaW1lLFxuICAgICAgICB0aW1lU2luY2VMYXN0SW52b2tlID0gdGltZSAtIGxhc3RJbnZva2VUaW1lO1xuXG4gICAgLy8gRWl0aGVyIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwsIGFjdGl2aXR5IGhhcyBzdG9wcGVkIGFuZCB3ZSdyZSBhdCB0aGVcbiAgICAvLyB0cmFpbGluZyBlZGdlLCB0aGUgc3lzdGVtIHRpbWUgaGFzIGdvbmUgYmFja3dhcmRzIGFuZCB3ZSdyZSB0cmVhdGluZ1xuICAgIC8vIGl0IGFzIHRoZSB0cmFpbGluZyBlZGdlLCBvciB3ZSd2ZSBoaXQgdGhlIGBtYXhXYWl0YCBsaW1pdC5cbiAgICByZXR1cm4gKGxhc3RDYWxsVGltZSA9PT0gdW5kZWZpbmVkIHx8ICh0aW1lU2luY2VMYXN0Q2FsbCA+PSB3YWl0KSB8fFxuICAgICAgKHRpbWVTaW5jZUxhc3RDYWxsIDwgMCkgfHwgKG1heGluZyAmJiB0aW1lU2luY2VMYXN0SW52b2tlID49IG1heFdhaXQpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRpbWVyRXhwaXJlZCgpIHtcbiAgICB2YXIgdGltZSA9IG5vdygpO1xuICAgIGlmIChzaG91bGRJbnZva2UodGltZSkpIHtcbiAgICAgIHJldHVybiB0cmFpbGluZ0VkZ2UodGltZSk7XG4gICAgfVxuICAgIC8vIFJlc3RhcnQgdGhlIHRpbWVyLlxuICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgcmVtYWluaW5nV2FpdCh0aW1lKSk7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFpbGluZ0VkZ2UodGltZSkge1xuICAgIHRpbWVySWQgPSB1bmRlZmluZWQ7XG5cbiAgICAvLyBPbmx5IGludm9rZSBpZiB3ZSBoYXZlIGBsYXN0QXJnc2Agd2hpY2ggbWVhbnMgYGZ1bmNgIGhhcyBiZWVuXG4gICAgLy8gZGVib3VuY2VkIGF0IGxlYXN0IG9uY2UuXG4gICAgaWYgKHRyYWlsaW5nICYmIGxhc3RBcmdzKSB7XG4gICAgICByZXR1cm4gaW52b2tlRnVuYyh0aW1lKTtcbiAgICB9XG4gICAgbGFzdEFyZ3MgPSBsYXN0VGhpcyA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgIGlmICh0aW1lcklkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcklkKTtcbiAgICB9XG4gICAgbGFzdEludm9rZVRpbWUgPSAwO1xuICAgIGxhc3RBcmdzID0gbGFzdENhbGxUaW1lID0gbGFzdFRoaXMgPSB0aW1lcklkID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgcmV0dXJuIHRpbWVySWQgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IHRyYWlsaW5nRWRnZShub3coKSk7XG4gIH1cblxuICBmdW5jdGlvbiBkZWJvdW5jZWQoKSB7XG4gICAgdmFyIHRpbWUgPSBub3coKSxcbiAgICAgICAgaXNJbnZva2luZyA9IHNob3VsZEludm9rZSh0aW1lKTtcblxuICAgIGxhc3RBcmdzID0gYXJndW1lbnRzO1xuICAgIGxhc3RUaGlzID0gdGhpcztcbiAgICBsYXN0Q2FsbFRpbWUgPSB0aW1lO1xuXG4gICAgaWYgKGlzSW52b2tpbmcpIHtcbiAgICAgIGlmICh0aW1lcklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGxlYWRpbmdFZGdlKGxhc3RDYWxsVGltZSk7XG4gICAgICB9XG4gICAgICBpZiAobWF4aW5nKSB7XG4gICAgICAgIC8vIEhhbmRsZSBpbnZvY2F0aW9ucyBpbiBhIHRpZ2h0IGxvb3AuXG4gICAgICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgd2FpdCk7XG4gICAgICAgIHJldHVybiBpbnZva2VGdW5jKGxhc3RDYWxsVGltZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aW1lcklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgd2FpdCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgZGVib3VuY2VkLmNhbmNlbCA9IGNhbmNlbDtcbiAgZGVib3VuY2VkLmZsdXNoID0gZmx1c2g7XG4gIHJldHVybiBkZWJvdW5jZWQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHRocm90dGxlZCBmdW5jdGlvbiB0aGF0IG9ubHkgaW52b2tlcyBgZnVuY2AgYXQgbW9zdCBvbmNlIHBlclxuICogZXZlcnkgYHdhaXRgIG1pbGxpc2Vjb25kcy4gVGhlIHRocm90dGxlZCBmdW5jdGlvbiBjb21lcyB3aXRoIGEgYGNhbmNlbGBcbiAqIG1ldGhvZCB0byBjYW5jZWwgZGVsYXllZCBgZnVuY2AgaW52b2NhdGlvbnMgYW5kIGEgYGZsdXNoYCBtZXRob2QgdG9cbiAqIGltbWVkaWF0ZWx5IGludm9rZSB0aGVtLiBQcm92aWRlIGBvcHRpb25zYCB0byBpbmRpY2F0ZSB3aGV0aGVyIGBmdW5jYFxuICogc2hvdWxkIGJlIGludm9rZWQgb24gdGhlIGxlYWRpbmcgYW5kL29yIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIGB3YWl0YFxuICogdGltZW91dC4gVGhlIGBmdW5jYCBpcyBpbnZva2VkIHdpdGggdGhlIGxhc3QgYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZVxuICogdGhyb3R0bGVkIGZ1bmN0aW9uLiBTdWJzZXF1ZW50IGNhbGxzIHRvIHRoZSB0aHJvdHRsZWQgZnVuY3Rpb24gcmV0dXJuIHRoZVxuICogcmVzdWx0IG9mIHRoZSBsYXN0IGBmdW5jYCBpbnZvY2F0aW9uLlxuICpcbiAqICoqTm90ZToqKiBJZiBgbGVhZGluZ2AgYW5kIGB0cmFpbGluZ2Agb3B0aW9ucyBhcmUgYHRydWVgLCBgZnVuY2AgaXNcbiAqIGludm9rZWQgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQgb25seSBpZiB0aGUgdGhyb3R0bGVkIGZ1bmN0aW9uXG4gKiBpcyBpbnZva2VkIG1vcmUgdGhhbiBvbmNlIGR1cmluZyB0aGUgYHdhaXRgIHRpbWVvdXQuXG4gKlxuICogSWYgYHdhaXRgIGlzIGAwYCBhbmQgYGxlYWRpbmdgIGlzIGBmYWxzZWAsIGBmdW5jYCBpbnZvY2F0aW9uIGlzIGRlZmVycmVkXG4gKiB1bnRpbCB0byB0aGUgbmV4dCB0aWNrLCBzaW1pbGFyIHRvIGBzZXRUaW1lb3V0YCB3aXRoIGEgdGltZW91dCBvZiBgMGAuXG4gKlxuICogU2VlIFtEYXZpZCBDb3JiYWNobydzIGFydGljbGVdKGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vZGVib3VuY2luZy10aHJvdHRsaW5nLWV4cGxhaW5lZC1leGFtcGxlcy8pXG4gKiBmb3IgZGV0YWlscyBvdmVyIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGBfLnRocm90dGxlYCBhbmQgYF8uZGVib3VuY2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gdGhyb3R0bGUuXG4gKiBAcGFyYW0ge251bWJlcn0gW3dhaXQ9MF0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhyb3R0bGUgaW52b2NhdGlvbnMgdG8uXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zIG9iamVjdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubGVhZGluZz10cnVlXVxuICogIFNwZWNpZnkgaW52b2tpbmcgb24gdGhlIGxlYWRpbmcgZWRnZSBvZiB0aGUgdGltZW91dC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudHJhaWxpbmc9dHJ1ZV1cbiAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgdGhyb3R0bGVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyBBdm9pZCBleGNlc3NpdmVseSB1cGRhdGluZyB0aGUgcG9zaXRpb24gd2hpbGUgc2Nyb2xsaW5nLlxuICogalF1ZXJ5KHdpbmRvdykub24oJ3Njcm9sbCcsIF8udGhyb3R0bGUodXBkYXRlUG9zaXRpb24sIDEwMCkpO1xuICpcbiAqIC8vIEludm9rZSBgcmVuZXdUb2tlbmAgd2hlbiB0aGUgY2xpY2sgZXZlbnQgaXMgZmlyZWQsIGJ1dCBub3QgbW9yZSB0aGFuIG9uY2UgZXZlcnkgNSBtaW51dGVzLlxuICogdmFyIHRocm90dGxlZCA9IF8udGhyb3R0bGUocmVuZXdUb2tlbiwgMzAwMDAwLCB7ICd0cmFpbGluZyc6IGZhbHNlIH0pO1xuICogalF1ZXJ5KGVsZW1lbnQpLm9uKCdjbGljaycsIHRocm90dGxlZCk7XG4gKlxuICogLy8gQ2FuY2VsIHRoZSB0cmFpbGluZyB0aHJvdHRsZWQgaW52b2NhdGlvbi5cbiAqIGpRdWVyeSh3aW5kb3cpLm9uKCdwb3BzdGF0ZScsIHRocm90dGxlZC5jYW5jZWwpO1xuICovXG5mdW5jdGlvbiB0aHJvdHRsZShmdW5jLCB3YWl0LCBvcHRpb25zKSB7XG4gIHZhciBsZWFkaW5nID0gdHJ1ZSxcbiAgICAgIHRyYWlsaW5nID0gdHJ1ZTtcblxuICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICBpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcbiAgICBsZWFkaW5nID0gJ2xlYWRpbmcnIGluIG9wdGlvbnMgPyAhIW9wdGlvbnMubGVhZGluZyA6IGxlYWRpbmc7XG4gICAgdHJhaWxpbmcgPSAndHJhaWxpbmcnIGluIG9wdGlvbnMgPyAhIW9wdGlvbnMudHJhaWxpbmcgOiB0cmFpbGluZztcbiAgfVxuICByZXR1cm4gZGVib3VuY2UoZnVuYywgd2FpdCwge1xuICAgICdsZWFkaW5nJzogbGVhZGluZyxcbiAgICAnbWF4V2FpdCc6IHdhaXQsXG4gICAgJ3RyYWlsaW5nJzogdHJhaWxpbmdcbiAgfSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gISF2YWx1ZSAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgb2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgbnVtYmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbnVtYmVyLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvTnVtYmVyKDMuMik7XG4gKiAvLyA9PiAzLjJcbiAqXG4gKiBfLnRvTnVtYmVyKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gNWUtMzI0XG4gKlxuICogXy50b051bWJlcihJbmZpbml0eSk7XG4gKiAvLyA9PiBJbmZpbml0eVxuICpcbiAqIF8udG9OdW1iZXIoJzMuMicpO1xuICogLy8gPT4gMy4yXG4gKi9cbmZ1bmN0aW9uIHRvTnVtYmVyKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiBOQU47XG4gIH1cbiAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHZhciBvdGhlciA9IHR5cGVvZiB2YWx1ZS52YWx1ZU9mID09ICdmdW5jdGlvbicgPyB2YWx1ZS52YWx1ZU9mKCkgOiB2YWx1ZTtcbiAgICB2YWx1ZSA9IGlzT2JqZWN0KG90aGVyKSA/IChvdGhlciArICcnKSA6IG90aGVyO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IDAgPyB2YWx1ZSA6ICt2YWx1ZTtcbiAgfVxuICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UocmVUcmltLCAnJyk7XG4gIHZhciBpc0JpbmFyeSA9IHJlSXNCaW5hcnkudGVzdCh2YWx1ZSk7XG4gIHJldHVybiAoaXNCaW5hcnkgfHwgcmVJc09jdGFsLnRlc3QodmFsdWUpKVxuICAgID8gZnJlZVBhcnNlSW50KHZhbHVlLnNsaWNlKDIpLCBpc0JpbmFyeSA/IDIgOiA4KVxuICAgIDogKHJlSXNCYWRIZXgudGVzdCh2YWx1ZSkgPyBOQU4gOiArdmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRocm90dGxlO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash.throttle/index.js\n"); + +/***/ }), + +/***/ "./node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js": +/*!*************************************************************************!*\ + !*** ./node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js ***! + \*************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(global) {/**\r\n * A collection of shims that provide minimal functionality of the ES6 collections.\r\n *\r\n * These implementations are not meant to be used outside of the ResizeObserver\r\n * modules as they cover only a limited range of use cases.\r\n */\r\n/* eslint-disable require-jsdoc, valid-jsdoc */\r\nvar MapShim = (function () {\r\n if (typeof Map !== 'undefined') {\r\n return Map;\r\n }\r\n /**\r\n * Returns index in provided array that matches the specified key.\r\n *\r\n * @param {Array<Array>} arr\r\n * @param {*} key\r\n * @returns {number}\r\n */\r\n function getIndex(arr, key) {\r\n var result = -1;\r\n arr.some(function (entry, index) {\r\n if (entry[0] === key) {\r\n result = index;\r\n return true;\r\n }\r\n return false;\r\n });\r\n return result;\r\n }\r\n return /** @class */ (function () {\r\n function class_1() {\r\n this.__entries__ = [];\r\n }\r\n Object.defineProperty(class_1.prototype, \"size\", {\r\n /**\r\n * @returns {boolean}\r\n */\r\n get: function () {\r\n return this.__entries__.length;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @param {*} key\r\n * @returns {*}\r\n */\r\n class_1.prototype.get = function (key) {\r\n var index = getIndex(this.__entries__, key);\r\n var entry = this.__entries__[index];\r\n return entry && entry[1];\r\n };\r\n /**\r\n * @param {*} key\r\n * @param {*} value\r\n * @returns {void}\r\n */\r\n class_1.prototype.set = function (key, value) {\r\n var index = getIndex(this.__entries__, key);\r\n if (~index) {\r\n this.__entries__[index][1] = value;\r\n }\r\n else {\r\n this.__entries__.push([key, value]);\r\n }\r\n };\r\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\r\n class_1.prototype.delete = function (key) {\r\n var entries = this.__entries__;\r\n var index = getIndex(entries, key);\r\n if (~index) {\r\n entries.splice(index, 1);\r\n }\r\n };\r\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\r\n class_1.prototype.has = function (key) {\r\n return !!~getIndex(this.__entries__, key);\r\n };\r\n /**\r\n * @returns {void}\r\n */\r\n class_1.prototype.clear = function () {\r\n this.__entries__.splice(0);\r\n };\r\n /**\r\n * @param {Function} callback\r\n * @param {*} [ctx=null]\r\n * @returns {void}\r\n */\r\n class_1.prototype.forEach = function (callback, ctx) {\r\n if (ctx === void 0) { ctx = null; }\r\n for (var _i = 0, _a = this.__entries__; _i < _a.length; _i++) {\r\n var entry = _a[_i];\r\n callback.call(ctx, entry[1], entry[0]);\r\n }\r\n };\r\n return class_1;\r\n }());\r\n})();\n\n/**\r\n * Detects whether window and document objects are available in current environment.\r\n */\r\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && window.document === document;\n\n// Returns global object of a current environment.\r\nvar global$1 = (function () {\r\n if (typeof global !== 'undefined' && global.Math === Math) {\r\n return global;\r\n }\r\n if (typeof self !== 'undefined' && self.Math === Math) {\r\n return self;\r\n }\r\n if (typeof window !== 'undefined' && window.Math === Math) {\r\n return window;\r\n }\r\n // eslint-disable-next-line no-new-func\r\n return Function('return this')();\r\n})();\n\n/**\r\n * A shim for the requestAnimationFrame which falls back to the setTimeout if\r\n * first one is not supported.\r\n *\r\n * @returns {number} Requests' identifier.\r\n */\r\nvar requestAnimationFrame$1 = (function () {\r\n if (typeof requestAnimationFrame === 'function') {\r\n // It's required to use a bounded function because IE sometimes throws\r\n // an \"Invalid calling object\" error if rAF is invoked without the global\r\n // object on the left hand side.\r\n return requestAnimationFrame.bind(global$1);\r\n }\r\n return function (callback) { return setTimeout(function () { return callback(Date.now()); }, 1000 / 60); };\r\n})();\n\n// Defines minimum timeout before adding a trailing call.\r\nvar trailingTimeout = 2;\r\n/**\r\n * Creates a wrapper function which ensures that provided callback will be\r\n * invoked only once during the specified delay period.\r\n *\r\n * @param {Function} callback - Function to be invoked after the delay period.\r\n * @param {number} delay - Delay after which to invoke callback.\r\n * @returns {Function}\r\n */\r\nfunction throttle (callback, delay) {\r\n var leadingCall = false, trailingCall = false, lastCallTime = 0;\r\n /**\r\n * Invokes the original callback function and schedules new invocation if\r\n * the \"proxy\" was called during current request.\r\n *\r\n * @returns {void}\r\n */\r\n function resolvePending() {\r\n if (leadingCall) {\r\n leadingCall = false;\r\n callback();\r\n }\r\n if (trailingCall) {\r\n proxy();\r\n }\r\n }\r\n /**\r\n * Callback invoked after the specified delay. It will further postpone\r\n * invocation of the original function delegating it to the\r\n * requestAnimationFrame.\r\n *\r\n * @returns {void}\r\n */\r\n function timeoutCallback() {\r\n requestAnimationFrame$1(resolvePending);\r\n }\r\n /**\r\n * Schedules invocation of the original function.\r\n *\r\n * @returns {void}\r\n */\r\n function proxy() {\r\n var timeStamp = Date.now();\r\n if (leadingCall) {\r\n // Reject immediately following calls.\r\n if (timeStamp - lastCallTime < trailingTimeout) {\r\n return;\r\n }\r\n // Schedule new call to be in invoked when the pending one is resolved.\r\n // This is important for \"transitions\" which never actually start\r\n // immediately so there is a chance that we might miss one if change\r\n // happens amids the pending invocation.\r\n trailingCall = true;\r\n }\r\n else {\r\n leadingCall = true;\r\n trailingCall = false;\r\n setTimeout(timeoutCallback, delay);\r\n }\r\n lastCallTime = timeStamp;\r\n }\r\n return proxy;\r\n}\n\n// Minimum delay before invoking the update of observers.\r\nvar REFRESH_DELAY = 20;\r\n// A list of substrings of CSS properties used to find transition events that\r\n// might affect dimensions of observed elements.\r\nvar transitionKeys = ['top', 'right', 'bottom', 'left', 'width', 'height', 'size', 'weight'];\r\n// Check if MutationObserver is available.\r\nvar mutationObserverSupported = typeof MutationObserver !== 'undefined';\r\n/**\r\n * Singleton controller class which handles updates of ResizeObserver instances.\r\n */\r\nvar ResizeObserverController = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserverController.\r\n *\r\n * @private\r\n */\r\n function ResizeObserverController() {\r\n /**\r\n * Indicates whether DOM listeners have been added.\r\n *\r\n * @private {boolean}\r\n */\r\n this.connected_ = false;\r\n /**\r\n * Tells that controller has subscribed for Mutation Events.\r\n *\r\n * @private {boolean}\r\n */\r\n this.mutationEventsAdded_ = false;\r\n /**\r\n * Keeps reference to the instance of MutationObserver.\r\n *\r\n * @private {MutationObserver}\r\n */\r\n this.mutationsObserver_ = null;\r\n /**\r\n * A list of connected observers.\r\n *\r\n * @private {Array<ResizeObserverSPI>}\r\n */\r\n this.observers_ = [];\r\n this.onTransitionEnd_ = this.onTransitionEnd_.bind(this);\r\n this.refresh = throttle(this.refresh.bind(this), REFRESH_DELAY);\r\n }\r\n /**\r\n * Adds observer to observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be added.\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.addObserver = function (observer) {\r\n if (!~this.observers_.indexOf(observer)) {\r\n this.observers_.push(observer);\r\n }\r\n // Add listeners if they haven't been added yet.\r\n if (!this.connected_) {\r\n this.connect_();\r\n }\r\n };\r\n /**\r\n * Removes observer from observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be removed.\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.removeObserver = function (observer) {\r\n var observers = this.observers_;\r\n var index = observers.indexOf(observer);\r\n // Remove observer if it's present in registry.\r\n if (~index) {\r\n observers.splice(index, 1);\r\n }\r\n // Remove listeners if controller has no connected observers.\r\n if (!observers.length && this.connected_) {\r\n this.disconnect_();\r\n }\r\n };\r\n /**\r\n * Invokes the update of observers. It will continue running updates insofar\r\n * it detects changes.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.refresh = function () {\r\n var changesDetected = this.updateObservers_();\r\n // Continue running updates if changes have been detected as there might\r\n // be future ones caused by CSS transitions.\r\n if (changesDetected) {\r\n this.refresh();\r\n }\r\n };\r\n /**\r\n * Updates every observer from observers list and notifies them of queued\r\n * entries.\r\n *\r\n * @private\r\n * @returns {boolean} Returns \"true\" if any observer has detected changes in\r\n * dimensions of it's elements.\r\n */\r\n ResizeObserverController.prototype.updateObservers_ = function () {\r\n // Collect observers that have active observations.\r\n var activeObservers = this.observers_.filter(function (observer) {\r\n return observer.gatherActive(), observer.hasActive();\r\n });\r\n // Deliver notifications in a separate cycle in order to avoid any\r\n // collisions between observers, e.g. when multiple instances of\r\n // ResizeObserver are tracking the same element and the callback of one\r\n // of them changes content dimensions of the observed target. Sometimes\r\n // this may result in notifications being blocked for the rest of observers.\r\n activeObservers.forEach(function (observer) { return observer.broadcastActive(); });\r\n return activeObservers.length > 0;\r\n };\r\n /**\r\n * Initializes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.connect_ = function () {\r\n // Do nothing if running in a non-browser environment or if listeners\r\n // have been already added.\r\n if (!isBrowser || this.connected_) {\r\n return;\r\n }\r\n // Subscription to the \"Transitionend\" event is used as a workaround for\r\n // delayed transitions. This way it's possible to capture at least the\r\n // final state of an element.\r\n document.addEventListener('transitionend', this.onTransitionEnd_);\r\n window.addEventListener('resize', this.refresh);\r\n if (mutationObserverSupported) {\r\n this.mutationsObserver_ = new MutationObserver(this.refresh);\r\n this.mutationsObserver_.observe(document, {\r\n attributes: true,\r\n childList: true,\r\n characterData: true,\r\n subtree: true\r\n });\r\n }\r\n else {\r\n document.addEventListener('DOMSubtreeModified', this.refresh);\r\n this.mutationEventsAdded_ = true;\r\n }\r\n this.connected_ = true;\r\n };\r\n /**\r\n * Removes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.disconnect_ = function () {\r\n // Do nothing if running in a non-browser environment or if listeners\r\n // have been already removed.\r\n if (!isBrowser || !this.connected_) {\r\n return;\r\n }\r\n document.removeEventListener('transitionend', this.onTransitionEnd_);\r\n window.removeEventListener('resize', this.refresh);\r\n if (this.mutationsObserver_) {\r\n this.mutationsObserver_.disconnect();\r\n }\r\n if (this.mutationEventsAdded_) {\r\n document.removeEventListener('DOMSubtreeModified', this.refresh);\r\n }\r\n this.mutationsObserver_ = null;\r\n this.mutationEventsAdded_ = false;\r\n this.connected_ = false;\r\n };\r\n /**\r\n * \"Transitionend\" event handler.\r\n *\r\n * @private\r\n * @param {TransitionEvent} event\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.onTransitionEnd_ = function (_a) {\r\n var _b = _a.propertyName, propertyName = _b === void 0 ? '' : _b;\r\n // Detect whether transition may affect dimensions of an element.\r\n var isReflowProperty = transitionKeys.some(function (key) {\r\n return !!~propertyName.indexOf(key);\r\n });\r\n if (isReflowProperty) {\r\n this.refresh();\r\n }\r\n };\r\n /**\r\n * Returns instance of the ResizeObserverController.\r\n *\r\n * @returns {ResizeObserverController}\r\n */\r\n ResizeObserverController.getInstance = function () {\r\n if (!this.instance_) {\r\n this.instance_ = new ResizeObserverController();\r\n }\r\n return this.instance_;\r\n };\r\n /**\r\n * Holds reference to the controller's instance.\r\n *\r\n * @private {ResizeObserverController}\r\n */\r\n ResizeObserverController.instance_ = null;\r\n return ResizeObserverController;\r\n}());\n\n/**\r\n * Defines non-writable/enumerable properties of the provided target object.\r\n *\r\n * @param {Object} target - Object for which to define properties.\r\n * @param {Object} props - Properties to be defined.\r\n * @returns {Object} Target object.\r\n */\r\nvar defineConfigurable = (function (target, props) {\r\n for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\r\n var key = _a[_i];\r\n Object.defineProperty(target, key, {\r\n value: props[key],\r\n enumerable: false,\r\n writable: false,\r\n configurable: true\r\n });\r\n }\r\n return target;\r\n});\n\n/**\r\n * Returns the global object associated with provided element.\r\n *\r\n * @param {Object} target\r\n * @returns {Object}\r\n */\r\nvar getWindowOf = (function (target) {\r\n // Assume that the element is an instance of Node, which means that it\r\n // has the \"ownerDocument\" property from which we can retrieve a\r\n // corresponding global object.\r\n var ownerGlobal = target && target.ownerDocument && target.ownerDocument.defaultView;\r\n // Return the local global object if it's not possible extract one from\r\n // provided element.\r\n return ownerGlobal || global$1;\r\n});\n\n// Placeholder of an empty content rectangle.\r\nvar emptyRect = createRectInit(0, 0, 0, 0);\r\n/**\r\n * Converts provided string to a number.\r\n *\r\n * @param {number|string} value\r\n * @returns {number}\r\n */\r\nfunction toFloat(value) {\r\n return parseFloat(value) || 0;\r\n}\r\n/**\r\n * Extracts borders size from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @param {...string} positions - Borders positions (top, right, ...)\r\n * @returns {number}\r\n */\r\nfunction getBordersSize(styles) {\r\n var positions = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n positions[_i - 1] = arguments[_i];\r\n }\r\n return positions.reduce(function (size, position) {\r\n var value = styles['border-' + position + '-width'];\r\n return size + toFloat(value);\r\n }, 0);\r\n}\r\n/**\r\n * Extracts paddings sizes from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @returns {Object} Paddings box.\r\n */\r\nfunction getPaddings(styles) {\r\n var positions = ['top', 'right', 'bottom', 'left'];\r\n var paddings = {};\r\n for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {\r\n var position = positions_1[_i];\r\n var value = styles['padding-' + position];\r\n paddings[position] = toFloat(value);\r\n }\r\n return paddings;\r\n}\r\n/**\r\n * Calculates content rectangle of provided SVG element.\r\n *\r\n * @param {SVGGraphicsElement} target - Element content rectangle of which needs\r\n * to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getSVGContentRect(target) {\r\n var bbox = target.getBBox();\r\n return createRectInit(0, 0, bbox.width, bbox.height);\r\n}\r\n/**\r\n * Calculates content rectangle of provided HTMLElement.\r\n *\r\n * @param {HTMLElement} target - Element for which to calculate the content rectangle.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getHTMLElementContentRect(target) {\r\n // Client width & height properties can't be\r\n // used exclusively as they provide rounded values.\r\n var clientWidth = target.clientWidth, clientHeight = target.clientHeight;\r\n // By this condition we can catch all non-replaced inline, hidden and\r\n // detached elements. Though elements with width & height properties less\r\n // than 0.5 will be discarded as well.\r\n //\r\n // Without it we would need to implement separate methods for each of\r\n // those cases and it's not possible to perform a precise and performance\r\n // effective test for hidden elements. E.g. even jQuery's ':visible' filter\r\n // gives wrong results for elements with width & height less than 0.5.\r\n if (!clientWidth && !clientHeight) {\r\n return emptyRect;\r\n }\r\n var styles = getWindowOf(target).getComputedStyle(target);\r\n var paddings = getPaddings(styles);\r\n var horizPad = paddings.left + paddings.right;\r\n var vertPad = paddings.top + paddings.bottom;\r\n // Computed styles of width & height are being used because they are the\r\n // only dimensions available to JS that contain non-rounded values. It could\r\n // be possible to utilize the getBoundingClientRect if only it's data wasn't\r\n // affected by CSS transformations let alone paddings, borders and scroll bars.\r\n var width = toFloat(styles.width), height = toFloat(styles.height);\r\n // Width & height include paddings and borders when the 'border-box' box\r\n // model is applied (except for IE).\r\n if (styles.boxSizing === 'border-box') {\r\n // Following conditions are required to handle Internet Explorer which\r\n // doesn't include paddings and borders to computed CSS dimensions.\r\n //\r\n // We can say that if CSS dimensions + paddings are equal to the \"client\"\r\n // properties then it's either IE, and thus we don't need to subtract\r\n // anything, or an element merely doesn't have paddings/borders styles.\r\n if (Math.round(width + horizPad) !== clientWidth) {\r\n width -= getBordersSize(styles, 'left', 'right') + horizPad;\r\n }\r\n if (Math.round(height + vertPad) !== clientHeight) {\r\n height -= getBordersSize(styles, 'top', 'bottom') + vertPad;\r\n }\r\n }\r\n // Following steps can't be applied to the document's root element as its\r\n // client[Width/Height] properties represent viewport area of the window.\r\n // Besides, it's as well not necessary as the <html> itself neither has\r\n // rendered scroll bars nor it can be clipped.\r\n if (!isDocumentElement(target)) {\r\n // In some browsers (only in Firefox, actually) CSS width & height\r\n // include scroll bars size which can be removed at this step as scroll\r\n // bars are the only difference between rounded dimensions + paddings\r\n // and \"client\" properties, though that is not always true in Chrome.\r\n var vertScrollbar = Math.round(width + horizPad) - clientWidth;\r\n var horizScrollbar = Math.round(height + vertPad) - clientHeight;\r\n // Chrome has a rather weird rounding of \"client\" properties.\r\n // E.g. for an element with content width of 314.2px it sometimes gives\r\n // the client width of 315px and for the width of 314.7px it may give\r\n // 314px. And it doesn't happen all the time. So just ignore this delta\r\n // as a non-relevant.\r\n if (Math.abs(vertScrollbar) !== 1) {\r\n width -= vertScrollbar;\r\n }\r\n if (Math.abs(horizScrollbar) !== 1) {\r\n height -= horizScrollbar;\r\n }\r\n }\r\n return createRectInit(paddings.left, paddings.top, width, height);\r\n}\r\n/**\r\n * Checks whether provided element is an instance of the SVGGraphicsElement.\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nvar isSVGGraphicsElement = (function () {\r\n // Some browsers, namely IE and Edge, don't have the SVGGraphicsElement\r\n // interface.\r\n if (typeof SVGGraphicsElement !== 'undefined') {\r\n return function (target) { return target instanceof getWindowOf(target).SVGGraphicsElement; };\r\n }\r\n // If it's so, then check that element is at least an instance of the\r\n // SVGElement and that it has the \"getBBox\" method.\r\n // eslint-disable-next-line no-extra-parens\r\n return function (target) { return (target instanceof getWindowOf(target).SVGElement &&\r\n typeof target.getBBox === 'function'); };\r\n})();\r\n/**\r\n * Checks whether provided element is a document element (<html>).\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nfunction isDocumentElement(target) {\r\n return target === getWindowOf(target).document.documentElement;\r\n}\r\n/**\r\n * Calculates an appropriate content rectangle for provided html or svg element.\r\n *\r\n * @param {Element} target - Element content rectangle of which needs to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getContentRect(target) {\r\n if (!isBrowser) {\r\n return emptyRect;\r\n }\r\n if (isSVGGraphicsElement(target)) {\r\n return getSVGContentRect(target);\r\n }\r\n return getHTMLElementContentRect(target);\r\n}\r\n/**\r\n * Creates rectangle with an interface of the DOMRectReadOnly.\r\n * Spec: https://drafts.fxtf.org/geometry/#domrectreadonly\r\n *\r\n * @param {DOMRectInit} rectInit - Object with rectangle's x/y coordinates and dimensions.\r\n * @returns {DOMRectReadOnly}\r\n */\r\nfunction createReadOnlyRect(_a) {\r\n var x = _a.x, y = _a.y, width = _a.width, height = _a.height;\r\n // If DOMRectReadOnly is available use it as a prototype for the rectangle.\r\n var Constr = typeof DOMRectReadOnly !== 'undefined' ? DOMRectReadOnly : Object;\r\n var rect = Object.create(Constr.prototype);\r\n // Rectangle's properties are not writable and non-enumerable.\r\n defineConfigurable(rect, {\r\n x: x, y: y, width: width, height: height,\r\n top: y,\r\n right: x + width,\r\n bottom: height + y,\r\n left: x\r\n });\r\n return rect;\r\n}\r\n/**\r\n * Creates DOMRectInit object based on the provided dimensions and the x/y coordinates.\r\n * Spec: https://drafts.fxtf.org/geometry/#dictdef-domrectinit\r\n *\r\n * @param {number} x - X coordinate.\r\n * @param {number} y - Y coordinate.\r\n * @param {number} width - Rectangle's width.\r\n * @param {number} height - Rectangle's height.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction createRectInit(x, y, width, height) {\r\n return { x: x, y: y, width: width, height: height };\r\n}\n\n/**\r\n * Class that is responsible for computations of the content rectangle of\r\n * provided DOM element and for keeping track of it's changes.\r\n */\r\nvar ResizeObservation = /** @class */ (function () {\r\n /**\r\n * Creates an instance of ResizeObservation.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n */\r\n function ResizeObservation(target) {\r\n /**\r\n * Broadcasted width of content rectangle.\r\n *\r\n * @type {number}\r\n */\r\n this.broadcastWidth = 0;\r\n /**\r\n * Broadcasted height of content rectangle.\r\n *\r\n * @type {number}\r\n */\r\n this.broadcastHeight = 0;\r\n /**\r\n * Reference to the last observed content rectangle.\r\n *\r\n * @private {DOMRectInit}\r\n */\r\n this.contentRect_ = createRectInit(0, 0, 0, 0);\r\n this.target = target;\r\n }\r\n /**\r\n * Updates content rectangle and tells whether it's width or height properties\r\n * have changed since the last broadcast.\r\n *\r\n * @returns {boolean}\r\n */\r\n ResizeObservation.prototype.isActive = function () {\r\n var rect = getContentRect(this.target);\r\n this.contentRect_ = rect;\r\n return (rect.width !== this.broadcastWidth ||\r\n rect.height !== this.broadcastHeight);\r\n };\r\n /**\r\n * Updates 'broadcastWidth' and 'broadcastHeight' properties with a data\r\n * from the corresponding properties of the last observed content rectangle.\r\n *\r\n * @returns {DOMRectInit} Last observed content rectangle.\r\n */\r\n ResizeObservation.prototype.broadcastRect = function () {\r\n var rect = this.contentRect_;\r\n this.broadcastWidth = rect.width;\r\n this.broadcastHeight = rect.height;\r\n return rect;\r\n };\r\n return ResizeObservation;\r\n}());\n\nvar ResizeObserverEntry = /** @class */ (function () {\r\n /**\r\n * Creates an instance of ResizeObserverEntry.\r\n *\r\n * @param {Element} target - Element that is being observed.\r\n * @param {DOMRectInit} rectInit - Data of the element's content rectangle.\r\n */\r\n function ResizeObserverEntry(target, rectInit) {\r\n var contentRect = createReadOnlyRect(rectInit);\r\n // According to the specification following properties are not writable\r\n // and are also not enumerable in the native implementation.\r\n //\r\n // Property accessors are not being used as they'd require to define a\r\n // private WeakMap storage which may cause memory leaks in browsers that\r\n // don't support this type of collections.\r\n defineConfigurable(this, { target: target, contentRect: contentRect });\r\n }\r\n return ResizeObserverEntry;\r\n}());\n\nvar ResizeObserverSPI = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback function that is invoked\r\n * when one of the observed elements changes it's content dimensions.\r\n * @param {ResizeObserverController} controller - Controller instance which\r\n * is responsible for the updates of observer.\r\n * @param {ResizeObserver} callbackCtx - Reference to the public\r\n * ResizeObserver instance which will be passed to callback function.\r\n */\r\n function ResizeObserverSPI(callback, controller, callbackCtx) {\r\n /**\r\n * Collection of resize observations that have detected changes in dimensions\r\n * of elements.\r\n *\r\n * @private {Array<ResizeObservation>}\r\n */\r\n this.activeObservations_ = [];\r\n /**\r\n * Registry of the ResizeObservation instances.\r\n *\r\n * @private {Map<Element, ResizeObservation>}\r\n */\r\n this.observations_ = new MapShim();\r\n if (typeof callback !== 'function') {\r\n throw new TypeError('The callback provided as parameter 1 is not a function.');\r\n }\r\n this.callback_ = callback;\r\n this.controller_ = controller;\r\n this.callbackCtx_ = callbackCtx;\r\n }\r\n /**\r\n * Starts observing provided element.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.observe = function (target) {\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n // Do nothing if current environment doesn't have the Element interface.\r\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n return;\r\n }\r\n if (!(target instanceof getWindowOf(target).Element)) {\r\n throw new TypeError('parameter 1 is not of type \"Element\".');\r\n }\r\n var observations = this.observations_;\r\n // Do nothing if element is already being observed.\r\n if (observations.has(target)) {\r\n return;\r\n }\r\n observations.set(target, new ResizeObservation(target));\r\n this.controller_.addObserver(this);\r\n // Force the update of observations.\r\n this.controller_.refresh();\r\n };\r\n /**\r\n * Stops observing provided element.\r\n *\r\n * @param {Element} target - Element to stop observing.\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.unobserve = function (target) {\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n // Do nothing if current environment doesn't have the Element interface.\r\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n return;\r\n }\r\n if (!(target instanceof getWindowOf(target).Element)) {\r\n throw new TypeError('parameter 1 is not of type \"Element\".');\r\n }\r\n var observations = this.observations_;\r\n // Do nothing if element is not being observed.\r\n if (!observations.has(target)) {\r\n return;\r\n }\r\n observations.delete(target);\r\n if (!observations.size) {\r\n this.controller_.removeObserver(this);\r\n }\r\n };\r\n /**\r\n * Stops observing all elements.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.disconnect = function () {\r\n this.clearActive();\r\n this.observations_.clear();\r\n this.controller_.removeObserver(this);\r\n };\r\n /**\r\n * Collects observation instances the associated element of which has changed\r\n * it's content rectangle.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.gatherActive = function () {\r\n var _this = this;\r\n this.clearActive();\r\n this.observations_.forEach(function (observation) {\r\n if (observation.isActive()) {\r\n _this.activeObservations_.push(observation);\r\n }\r\n });\r\n };\r\n /**\r\n * Invokes initial callback function with a list of ResizeObserverEntry\r\n * instances collected from active resize observations.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.broadcastActive = function () {\r\n // Do nothing if observer doesn't have active observations.\r\n if (!this.hasActive()) {\r\n return;\r\n }\r\n var ctx = this.callbackCtx_;\r\n // Create ResizeObserverEntry instance for every active observation.\r\n var entries = this.activeObservations_.map(function (observation) {\r\n return new ResizeObserverEntry(observation.target, observation.broadcastRect());\r\n });\r\n this.callback_.call(ctx, entries, ctx);\r\n this.clearActive();\r\n };\r\n /**\r\n * Clears the collection of active observations.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.clearActive = function () {\r\n this.activeObservations_.splice(0);\r\n };\r\n /**\r\n * Tells whether observer has active observations.\r\n *\r\n * @returns {boolean}\r\n */\r\n ResizeObserverSPI.prototype.hasActive = function () {\r\n return this.activeObservations_.length > 0;\r\n };\r\n return ResizeObserverSPI;\r\n}());\n\n// Registry of internal observers. If WeakMap is not available use current shim\r\n// for the Map collection as it has all required methods and because WeakMap\r\n// can't be fully polyfilled anyway.\r\nvar observers = typeof WeakMap !== 'undefined' ? new WeakMap() : new MapShim();\r\n/**\r\n * ResizeObserver API. Encapsulates the ResizeObserver SPI implementation\r\n * exposing only those methods and properties that are defined in the spec.\r\n */\r\nvar ResizeObserver = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback that is invoked when\r\n * dimensions of the observed elements change.\r\n */\r\n function ResizeObserver(callback) {\r\n if (!(this instanceof ResizeObserver)) {\r\n throw new TypeError('Cannot call a class as a function.');\r\n }\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n var controller = ResizeObserverController.getInstance();\r\n var observer = new ResizeObserverSPI(callback, controller, this);\r\n observers.set(this, observer);\r\n }\r\n return ResizeObserver;\r\n}());\r\n// Expose public methods of ResizeObserver.\r\n[\r\n 'observe',\r\n 'unobserve',\r\n 'disconnect'\r\n].forEach(function (method) {\r\n ResizeObserver.prototype[method] = function () {\r\n var _a;\r\n return (_a = observers.get(this))[method].apply(_a, arguments);\r\n };\r\n});\n\nvar index = (function () {\r\n // Export existing implementation if available.\r\n if (typeof global$1.ResizeObserver !== 'undefined') {\r\n return global$1.ResizeObserver;\r\n }\r\n return ResizeObserver;\r\n})();\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (index);\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVzaXplLW9ic2VydmVyLXBvbHlmaWxsL2Rpc3QvUmVzaXplT2JzZXJ2ZXIuZXMuanM/NmRkOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGFBQWE7QUFDNUIsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLG1CQUFtQixFQUFFO0FBQ3JCLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixFQUFFO0FBQ3JCLG1CQUFtQixFQUFFO0FBQ3JCLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLEVBQUU7QUFDckIscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixFQUFFO0FBQ3JCLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsU0FBUztBQUM1QixtQkFBbUIsRUFBRTtBQUNyQixxQkFBcUI7QUFDckI7QUFDQTtBQUNBLGlDQUFpQyxZQUFZO0FBQzdDLG1EQUFtRCxnQkFBZ0I7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDOztBQUVEO0FB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LFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHVCQUF1QjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVjLG9FQUFLLEVBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcmVzaXplLW9ic2VydmVyLXBvbHlmaWxsL2Rpc3QvUmVzaXplT2JzZXJ2ZXIuZXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQSBjb2xsZWN0aW9uIG9mIHNoaW1zIHRoYXQgcHJvdmlkZSBtaW5pbWFsIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIEVTNiBjb2xsZWN0aW9ucy5cclxuICpcclxuICogVGhlc2UgaW1wbGVtZW50YXRpb25zIGFyZSBub3QgbWVhbnQgdG8gYmUgdXNlZCBvdXRzaWRlIG9mIHRoZSBSZXNpemVPYnNlcnZlclxyXG4gKiBtb2R1bGVzIGFzIHRoZXkgY292ZXIgb25seSBhIGxpbWl0ZWQgcmFuZ2Ugb2YgdXNlIGNhc2VzLlxyXG4gKi9cclxuLyogZXNsaW50LWRpc2FibGUgcmVxdWlyZS1qc2RvYywgdmFsaWQtanNkb2MgKi9cclxudmFyIE1hcFNoaW0gPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKHR5cGVvZiBNYXAgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hcDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBpbmRleCBpbiBwcm92aWRlZCBhcnJheSB0aGF0IG1hdGNoZXMgdGhlIHNwZWNpZmllZCBrZXkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtBcnJheTxBcnJheT59IGFyclxyXG4gICAgICogQHBhcmFtIHsqfSBrZXlcclxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIGdldEluZGV4KGFyciwga2V5KSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IC0xO1xyXG4gICAgICAgIGFyci5zb21lKGZ1bmN0aW9uIChlbnRyeSwgaW5kZXgpIHtcclxuICAgICAgICAgICAgaWYgKGVudHJ5WzBdID09PSBrZXkpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGluZGV4O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGNsYXNzXzEoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX19lbnRyaWVzX18gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNsYXNzXzEucHJvdG90eXBlLCBcInNpemVcIiwge1xyXG4gICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9fZW50cmllc19fLmxlbmd0aDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHBhcmFtIHsqfSBrZXlcclxuICAgICAgICAgKiBAcmV0dXJucyB7Kn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjbGFzc18xLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IGdldEluZGV4KHRoaXMuX19lbnRyaWVzX18sIGtleSk7XHJcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IHRoaXMuX19lbnRyaWVzX19baW5kZXhdO1xyXG4gICAgICAgICAgICByZXR1cm4gZW50cnkgJiYgZW50cnlbMV07XHJcbiAgICAgICAgfTtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAcGFyYW0geyp9IGtleVxyXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWVcclxuICAgICAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjbGFzc18xLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgICAgICB2YXIgaW5kZXggPSBnZXRJbmRleCh0aGlzLl9fZW50cmllc19fLCBrZXkpO1xyXG4gICAgICAgICAgICBpZiAofmluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9fZW50cmllc19fW2luZGV4XVsxXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fX2VudHJpZXNfXy5wdXNoKFtrZXksIHZhbHVlXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBwYXJhbSB7Kn0ga2V5XHJcbiAgICAgICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY2xhc3NfMS5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICB2YXIgZW50cmllcyA9IHRoaXMuX19lbnRyaWVzX187XHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IGdldEluZGV4KGVudHJpZXMsIGtleSk7XHJcbiAgICAgICAgICAgIGlmICh+aW5kZXgpIHtcclxuICAgICAgICAgICAgICAgIGVudHJpZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHBhcmFtIHsqfSBrZXlcclxuICAgICAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjbGFzc18xLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiAhIX5nZXRJbmRleCh0aGlzLl9fZW50cmllc19fLCBrZXkpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY2xhc3NfMS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX19lbnRyaWVzX18uc3BsaWNlKDApO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcclxuICAgICAgICAgKiBAcGFyYW0geyp9IFtjdHg9bnVsbF1cclxuICAgICAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjbGFzc18xLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBjdHgpIHtcclxuICAgICAgICAgICAgaWYgKGN0eCA9PT0gdm9pZCAwKSB7IGN0eCA9IG51bGw7IH1cclxuICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuX19lbnRyaWVzX187IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSBfYVtfaV07XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKGN0eCwgZW50cnlbMV0sIGVudHJ5WzBdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGNsYXNzXzE7XHJcbiAgICB9KCkpO1xyXG59KSgpO1xuXG4vKipcclxuICogRGV0ZWN0cyB3aGV0aGVyIHdpbmRvdyBhbmQgZG9jdW1lbnQgb2JqZWN0cyBhcmUgYXZhaWxhYmxlIGluIGN1cnJlbnQgZW52aXJvbm1lbnQuXHJcbiAqL1xyXG52YXIgaXNCcm93c2VyID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZG9jdW1lbnQgPT09IGRvY3VtZW50O1xuXG4vLyBSZXR1cm5zIGdsb2JhbCBvYmplY3Qgb2YgYSBjdXJyZW50IGVudmlyb25tZW50LlxyXG52YXIgZ2xvYmFsJDEgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbC5NYXRoID09PSBNYXRoKSB7XHJcbiAgICAgICAgcmV0dXJuIGdsb2JhbDtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi5NYXRoID09PSBNYXRoKSB7XHJcbiAgICAgICAgcmV0dXJuIHNlbGY7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT09IE1hdGgpIHtcclxuICAgICAgICByZXR1cm4gd2luZG93O1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXHJcbiAgICByZXR1cm4gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcclxufSkoKTtcblxuLyoqXHJcbiAqIEEgc2hpbSBmb3IgdGhlIHJlcXVlc3RBbmltYXRpb25GcmFtZSB3aGljaCBmYWxscyBiYWNrIHRvIHRoZSBzZXRUaW1lb3V0IGlmXHJcbiAqIGZpcnN0IG9uZSBpcyBub3Qgc3VwcG9ydGVkLlxyXG4gKlxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXF1ZXN0cycgaWRlbnRpZmllci5cclxuICovXHJcbnZhciByZXF1ZXN0QW5pbWF0aW9uRnJhbWUkMSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAodHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIC8vIEl0J3MgcmVxdWlyZWQgdG8gdXNlIGEgYm91bmRlZCBmdW5jdGlvbiBiZWNhdXNlIElFIHNvbWV0aW1lcyB0aHJvd3NcclxuICAgICAgICAvLyBhbiBcIkludmFsaWQgY2FsbGluZyBvYmplY3RcIiBlcnJvciBpZiByQUYgaXMgaW52b2tlZCB3aXRob3V0IHRoZSBnbG9iYWxcclxuICAgICAgICAvLyBvYmplY3Qgb24gdGhlIGxlZnQgaGFuZCBzaWRlLlxyXG4gICAgICAgIHJldHVybiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZChnbG9iYWwkMSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxiYWNrKSB7IHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNhbGxiYWNrKERhdGUubm93KCkpOyB9LCAxMDAwIC8gNjApOyB9O1xyXG59KSgpO1xuXG4vLyBEZWZpbmVzIG1pbmltdW0gdGltZW91dCBiZWZvcmUgYWRkaW5nIGEgdHJhaWxpbmcgY2FsbC5cclxudmFyIHRyYWlsaW5nVGltZW91dCA9IDI7XHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgd3JhcHBlciBmdW5jdGlvbiB3aGljaCBlbnN1cmVzIHRoYXQgcHJvdmlkZWQgY2FsbGJhY2sgd2lsbCBiZVxyXG4gKiBpbnZva2VkIG9ubHkgb25jZSBkdXJpbmcgdGhlIHNwZWNpZmllZCBkZWxheSBwZXJpb2QuXHJcbiAqXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIC0gRnVuY3Rpb24gdG8gYmUgaW52b2tlZCBhZnRlciB0aGUgZGVsYXkgcGVyaW9kLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gZGVsYXkgLSBEZWxheSBhZnRlciB3aGljaCB0byBpbnZva2UgY2FsbGJhY2suXHJcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cclxuICovXHJcbmZ1bmN0aW9uIHRocm90dGxlIChjYWxsYmFjaywgZGVsYXkpIHtcclxuICAgIHZhciBsZWFkaW5nQ2FsbCA9IGZhbHNlLCB0cmFpbGluZ0NhbGwgPSBmYWxzZSwgbGFzdENhbGxUaW1lID0gMDtcclxuICAgIC8qKlxyXG4gICAgICogSW52b2tlcyB0aGUgb3JpZ2luYWwgY2FsbGJhY2sgZnVuY3Rpb24gYW5kIHNjaGVkdWxlcyBuZXcgaW52b2NhdGlvbiBpZlxyXG4gICAgICogdGhlIFwicHJveHlcIiB3YXMgY2FsbGVkIGR1cmluZyBjdXJyZW50IHJlcXVlc3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIHJlc29sdmVQZW5kaW5nKCkge1xyXG4gICAgICAgIGlmIChsZWFkaW5nQ2FsbCkge1xyXG4gICAgICAgICAgICBsZWFkaW5nQ2FsbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjYWxsYmFjaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHJhaWxpbmdDYWxsKSB7XHJcbiAgICAgICAgICAgIHByb3h5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsYmFjayBpbnZva2VkIGFmdGVyIHRoZSBzcGVjaWZpZWQgZGVsYXkuIEl0IHdpbGwgZnVydGhlciBwb3N0cG9uZVxyXG4gICAgICogaW52b2NhdGlvbiBvZiB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gZGVsZWdhdGluZyBpdCB0byB0aGVcclxuICAgICAqIHJlcXVlc3RBbmltYXRpb25GcmFtZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gdGltZW91dENhbGxiYWNrKCkge1xyXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSQxKHJlc29sdmVQZW5kaW5nKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogU2NoZWR1bGVzIGludm9jYXRpb24gb2YgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBwcm94eSgpIHtcclxuICAgICAgICB2YXIgdGltZVN0YW1wID0gRGF0ZS5ub3coKTtcclxuICAgICAgICBpZiAobGVhZGluZ0NhbGwpIHtcclxuICAgICAgICAgICAgLy8gUmVqZWN0IGltbWVkaWF0ZWx5IGZvbGxvd2luZyBjYWxscy5cclxuICAgICAgICAgICAgaWYgKHRpbWVTdGFtcCAtIGxhc3RDYWxsVGltZSA8IHRyYWlsaW5nVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFNjaGVkdWxlIG5ldyBjYWxsIHRvIGJlIGluIGludm9rZWQgd2hlbiB0aGUgcGVuZGluZyBvbmUgaXMgcmVzb2x2ZWQuXHJcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgaW1wb3J0YW50IGZvciBcInRyYW5zaXRpb25zXCIgd2hpY2ggbmV2ZXIgYWN0dWFsbHkgc3RhcnRcclxuICAgICAgICAgICAgLy8gaW1tZWRpYXRlbHkgc28gdGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB3ZSBtaWdodCBtaXNzIG9uZSBpZiBjaGFuZ2VcclxuICAgICAgICAgICAgLy8gaGFwcGVucyBhbWlkcyB0aGUgcGVuZGluZyBpbnZvY2F0aW9uLlxyXG4gICAgICAgICAgICB0cmFpbGluZ0NhbGwgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGVhZGluZ0NhbGwgPSB0cnVlO1xyXG4gICAgICAgICAgICB0cmFpbGluZ0NhbGwgPSBmYWxzZTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCh0aW1lb3V0Q2FsbGJhY2ssIGRlbGF5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGFzdENhbGxUaW1lID0gdGltZVN0YW1wO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHByb3h5O1xyXG59XG5cbi8vIE1pbmltdW0gZGVsYXkgYmVmb3JlIGludm9raW5nIHRoZSB1cGRhdGUgb2Ygb2JzZXJ2ZXJzLlxyXG52YXIgUkVGUkVTSF9ERUxBWSA9IDIwO1xyXG4vLyBBIGxpc3Qgb2Ygc3Vic3RyaW5ncyBvZiBDU1MgcHJvcGVydGllcyB1c2VkIHRvIGZpbmQgdHJhbnNpdGlvbiBldmVudHMgdGhhdFxyXG4vLyBtaWdodCBhZmZlY3QgZGltZW5zaW9ucyBvZiBvYnNlcnZlZCBlbGVtZW50cy5cclxudmFyIHRyYW5zaXRpb25LZXlzID0gWyd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnLCAnd2lkdGgnLCAnaGVpZ2h0JywgJ3NpemUnLCAnd2VpZ2h0J107XHJcbi8vIENoZWNrIGlmIE11dGF0aW9uT2JzZXJ2ZXIgaXMgYXZhaWxhYmxlLlxyXG52YXIgbXV0YXRpb25PYnNlcnZlclN1cHBvcnRlZCA9IHR5cGVvZiBNdXRhdGlvbk9ic2VydmVyICE9PSAndW5kZWZpbmVkJztcclxuLyoqXHJcbiAqIFNpbmdsZXRvbiBjb250cm9sbGVyIGNsYXNzIHdoaWNoIGhhbmRsZXMgdXBkYXRlcyBvZiBSZXNpemVPYnNlcnZlciBpbnN0YW5jZXMuXHJcbiAqL1xyXG52YXIgUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5cclxuICAgICAqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIoKSB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW5kaWNhdGVzIHdoZXRoZXIgRE9NIGxpc3RlbmVycyBoYXZlIGJlZW4gYWRkZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAcHJpdmF0ZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbm5lY3RlZF8gPSBmYWxzZTtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUZWxscyB0aGF0IGNvbnRyb2xsZXIgaGFzIHN1YnNjcmliZWQgZm9yIE11dGF0aW9uIEV2ZW50cy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBwcml2YXRlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubXV0YXRpb25FdmVudHNBZGRlZF8gPSBmYWxzZTtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBLZWVwcyByZWZlcmVuY2UgdG8gdGhlIGluc3RhbmNlIG9mIE11dGF0aW9uT2JzZXJ2ZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAcHJpdmF0ZSB7TXV0YXRpb25PYnNlcnZlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm11dGF0aW9uc09ic2VydmVyXyA9IG51bGw7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBsaXN0IG9mIGNvbm5lY3RlZCBvYnNlcnZlcnMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAcHJpdmF0ZSB7QXJyYXk8UmVzaXplT2JzZXJ2ZXJTUEk+fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub2JzZXJ2ZXJzXyA9IFtdO1xyXG4gICAgICAgIHRoaXMub25UcmFuc2l0aW9uRW5kXyA9IHRoaXMub25UcmFuc2l0aW9uRW5kXy5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaCA9IHRocm90dGxlKHRoaXMucmVmcmVzaC5iaW5kKHRoaXMpLCBSRUZSRVNIX0RFTEFZKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBvYnNlcnZlciB0byBvYnNlcnZlcnMgbGlzdC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1Jlc2l6ZU9ic2VydmVyU1BJfSBvYnNlcnZlciAtIE9ic2VydmVyIHRvIGJlIGFkZGVkLlxyXG4gICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgKi9cclxuICAgIFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5wcm90b3R5cGUuYWRkT2JzZXJ2ZXIgPSBmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcclxuICAgICAgICBpZiAoIX50aGlzLm9ic2VydmVyc18uaW5kZXhPZihvYnNlcnZlcikpIHtcclxuICAgICAgICAgICAgdGhpcy5vYnNlcnZlcnNfLnB1c2gob2JzZXJ2ZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBBZGQgbGlzdGVuZXJzIGlmIHRoZXkgaGF2ZW4ndCBiZWVuIGFkZGVkIHlldC5cclxuICAgICAgICBpZiAoIXRoaXMuY29ubmVjdGVkXykge1xyXG4gICAgICAgICAgICB0aGlzLmNvbm5lY3RfKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBvYnNlcnZlciBmcm9tIG9ic2VydmVycyBsaXN0LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UmVzaXplT2JzZXJ2ZXJTUEl9IG9ic2VydmVyIC0gT2JzZXJ2ZXIgdG8gYmUgcmVtb3ZlZC5cclxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICovXHJcbiAgICBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIucHJvdG90eXBlLnJlbW92ZU9ic2VydmVyID0gZnVuY3Rpb24gKG9ic2VydmVyKSB7XHJcbiAgICAgICAgdmFyIG9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzXztcclxuICAgICAgICB2YXIgaW5kZXggPSBvYnNlcnZlcnMuaW5kZXhPZihvYnNlcnZlcik7XHJcbiAgICAgICAgLy8gUmVtb3ZlIG9ic2VydmVyIGlmIGl0J3MgcHJlc2VudCBpbiByZWdpc3RyeS5cclxuICAgICAgICBpZiAofmluZGV4KSB7XHJcbiAgICAgICAgICAgIG9ic2VydmVycy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBSZW1vdmUgbGlzdGVuZXJzIGlmIGNvbnRyb2xsZXIgaGFzIG5vIGNvbm5lY3RlZCBvYnNlcnZlcnMuXHJcbiAgICAgICAgaWYgKCFvYnNlcnZlcnMubGVuZ3RoICYmIHRoaXMuY29ubmVjdGVkXykge1xyXG4gICAgICAgICAgICB0aGlzLmRpc2Nvbm5lY3RfKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogSW52b2tlcyB0aGUgdXBkYXRlIG9mIG9ic2VydmVycy4gSXQgd2lsbCBjb250aW51ZSBydW5uaW5nIHVwZGF0ZXMgaW5zb2ZhclxyXG4gICAgICogaXQgZGV0ZWN0cyBjaGFuZ2VzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICovXHJcbiAgICBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIucHJvdG90eXBlLnJlZnJlc2ggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGNoYW5nZXNEZXRlY3RlZCA9IHRoaXMudXBkYXRlT2JzZXJ2ZXJzXygpO1xyXG4gICAgICAgIC8vIENvbnRpbnVlIHJ1bm5pbmcgdXBkYXRlcyBpZiBjaGFuZ2VzIGhhdmUgYmVlbiBkZXRlY3RlZCBhcyB0aGVyZSBtaWdodFxyXG4gICAgICAgIC8vIGJlIGZ1dHVyZSBvbmVzIGNhdXNlZCBieSBDU1MgdHJhbnNpdGlvbnMuXHJcbiAgICAgICAgaWYgKGNoYW5nZXNEZXRlY3RlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIGV2ZXJ5IG9ic2VydmVyIGZyb20gb2JzZXJ2ZXJzIGxpc3QgYW5kIG5vdGlmaWVzIHRoZW0gb2YgcXVldWVkXHJcbiAgICAgKiBlbnRyaWVzLlxyXG4gICAgICpcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBcInRydWVcIiBpZiBhbnkgb2JzZXJ2ZXIgaGFzIGRldGVjdGVkIGNoYW5nZXMgaW5cclxuICAgICAqICAgICAgZGltZW5zaW9ucyBvZiBpdCdzIGVsZW1lbnRzLlxyXG4gICAgICovXHJcbiAgICBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIucHJvdG90eXBlLnVwZGF0ZU9ic2VydmVyc18gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gQ29sbGVjdCBvYnNlcnZlcnMgdGhhdCBoYXZlIGFjdGl2ZSBvYnNlcnZhdGlvbnMuXHJcbiAgICAgICAgdmFyIGFjdGl2ZU9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzXy5maWx0ZXIoZnVuY3Rpb24gKG9ic2VydmVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvYnNlcnZlci5nYXRoZXJBY3RpdmUoKSwgb2JzZXJ2ZXIuaGFzQWN0aXZlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gRGVsaXZlciBub3RpZmljYXRpb25zIGluIGEgc2VwYXJhdGUgY3ljbGUgaW4gb3JkZXIgdG8gYXZvaWQgYW55XHJcbiAgICAgICAgLy8gY29sbGlzaW9ucyBiZXR3ZWVuIG9ic2VydmVycywgZS5nLiB3aGVuIG11bHRpcGxlIGluc3RhbmNlcyBvZlxyXG4gICAgICAgIC8vIFJlc2l6ZU9ic2VydmVyIGFyZSB0cmFja2luZyB0aGUgc2FtZSBlbGVtZW50IGFuZCB0aGUgY2FsbGJhY2sgb2Ygb25lXHJcbiAgICAgICAgLy8gb2YgdGhlbSBjaGFuZ2VzIGNvbnRlbnQgZGltZW5zaW9ucyBvZiB0aGUgb2JzZXJ2ZWQgdGFyZ2V0LiBTb21ldGltZXNcclxuICAgICAgICAvLyB0aGlzIG1heSByZXN1bHQgaW4gbm90aWZpY2F0aW9ucyBiZWluZyBibG9ja2VkIGZvciB0aGUgcmVzdCBvZiBvYnNlcnZlcnMuXHJcbiAgICAgICAgYWN0aXZlT2JzZXJ2ZXJzLmZvckVhY2goZnVuY3Rpb24gKG9ic2VydmVyKSB7IHJldHVybiBvYnNlcnZlci5icm9hZGNhc3RBY3RpdmUoKTsgfSk7XHJcbiAgICAgICAgcmV0dXJuIGFjdGl2ZU9ic2VydmVycy5sZW5ndGggPiAwO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZXMgRE9NIGxpc3RlbmVycy5cclxuICAgICAqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgKi9cclxuICAgIFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5wcm90b3R5cGUuY29ubmVjdF8gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gRG8gbm90aGluZyBpZiBydW5uaW5nIGluIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnQgb3IgaWYgbGlzdGVuZXJzXHJcbiAgICAgICAgLy8gaGF2ZSBiZWVuIGFscmVhZHkgYWRkZWQuXHJcbiAgICAgICAgaWYgKCFpc0Jyb3dzZXIgfHwgdGhpcy5jb25uZWN0ZWRfKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gU3Vic2NyaXB0aW9uIHRvIHRoZSBcIlRyYW5zaXRpb25lbmRcIiBldmVudCBpcyB1c2VkIGFzIGEgd29ya2Fyb3VuZCBmb3JcclxuICAgICAgICAvLyBkZWxheWVkIHRyYW5zaXRpb25zLiBUaGlzIHdheSBpdCdzIHBvc3NpYmxlIHRvIGNhcHR1cmUgYXQgbGVhc3QgdGhlXHJcbiAgICAgICAgLy8gZmluYWwgc3RhdGUgb2YgYW4gZWxlbWVudC5cclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgdGhpcy5vblRyYW5zaXRpb25FbmRfKTtcclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5yZWZyZXNoKTtcclxuICAgICAgICBpZiAobXV0YXRpb25PYnNlcnZlclN1cHBvcnRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLm11dGF0aW9uc09ic2VydmVyXyA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKHRoaXMucmVmcmVzaCk7XHJcbiAgICAgICAgICAgIHRoaXMubXV0YXRpb25zT2JzZXJ2ZXJfLm9ic2VydmUoZG9jdW1lbnQsIHtcclxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBjaGlsZExpc3Q6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgc3VidHJlZTogdHJ1ZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTVN1YnRyZWVNb2RpZmllZCcsIHRoaXMucmVmcmVzaCk7XHJcbiAgICAgICAgICAgIHRoaXMubXV0YXRpb25FdmVudHNBZGRlZF8gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNvbm5lY3RlZF8gPSB0cnVlO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBET00gbGlzdGVuZXJzLlxyXG4gICAgICpcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAqL1xyXG4gICAgUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyLnByb3RvdHlwZS5kaXNjb25uZWN0XyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvLyBEbyBub3RoaW5nIGlmIHJ1bm5pbmcgaW4gYSBub24tYnJvd3NlciBlbnZpcm9ubWVudCBvciBpZiBsaXN0ZW5lcnNcclxuICAgICAgICAvLyBoYXZlIGJlZW4gYWxyZWFkeSByZW1vdmVkLlxyXG4gICAgICAgIGlmICghaXNCcm93c2VyIHx8ICF0aGlzLmNvbm5lY3RlZF8pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgdGhpcy5vblRyYW5zaXRpb25FbmRfKTtcclxuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5yZWZyZXNoKTtcclxuICAgICAgICBpZiAodGhpcy5tdXRhdGlvbnNPYnNlcnZlcl8pIHtcclxuICAgICAgICAgICAgdGhpcy5tdXRhdGlvbnNPYnNlcnZlcl8uZGlzY29ubmVjdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5tdXRhdGlvbkV2ZW50c0FkZGVkXykge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdET01TdWJ0cmVlTW9kaWZpZWQnLCB0aGlzLnJlZnJlc2gpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm11dGF0aW9uc09ic2VydmVyXyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tdXRhdGlvbkV2ZW50c0FkZGVkXyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY29ubmVjdGVkXyA9IGZhbHNlO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogXCJUcmFuc2l0aW9uZW5kXCIgZXZlbnQgaGFuZGxlci5cclxuICAgICAqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHBhcmFtIHtUcmFuc2l0aW9uRXZlbnR9IGV2ZW50XHJcbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAqL1xyXG4gICAgUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyLnByb3RvdHlwZS5vblRyYW5zaXRpb25FbmRfID0gZnVuY3Rpb24gKF9hKSB7XHJcbiAgICAgICAgdmFyIF9iID0gX2EucHJvcGVydHlOYW1lLCBwcm9wZXJ0eU5hbWUgPSBfYiA9PT0gdm9pZCAwID8gJycgOiBfYjtcclxuICAgICAgICAvLyBEZXRlY3Qgd2hldGhlciB0cmFuc2l0aW9uIG1heSBhZmZlY3QgZGltZW5zaW9ucyBvZiBhbiBlbGVtZW50LlxyXG4gICAgICAgIHZhciBpc1JlZmxvd1Byb3BlcnR5ID0gdHJhbnNpdGlvbktleXMuc29tZShmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiAhIX5wcm9wZXJ0eU5hbWUuaW5kZXhPZihrZXkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChpc1JlZmxvd1Byb3BlcnR5KSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgaW5zdGFuY2Ugb2YgdGhlIFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyB7UmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyfVxyXG4gICAgICovXHJcbiAgICBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmluc3RhbmNlXykge1xyXG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlXyA9IG5ldyBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5zdGFuY2VfO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogSG9sZHMgcmVmZXJlbmNlIHRvIHRoZSBjb250cm9sbGVyJ3MgaW5zdGFuY2UuXHJcbiAgICAgKlxyXG4gICAgICogQHByaXZhdGUge1Jlc2l6ZU9ic2VydmVyQ29udHJvbGxlcn1cclxuICAgICAqL1xyXG4gICAgUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyLmluc3RhbmNlXyA9IG51bGw7XHJcbiAgICByZXR1cm4gUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyO1xyXG59KCkpO1xuXG4vKipcclxuICogRGVmaW5lcyBub24td3JpdGFibGUvZW51bWVyYWJsZSBwcm9wZXJ0aWVzIG9mIHRoZSBwcm92aWRlZCB0YXJnZXQgb2JqZWN0LlxyXG4gKlxyXG4gKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0IC0gT2JqZWN0IGZvciB3aGljaCB0byBkZWZpbmUgcHJvcGVydGllcy5cclxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzIC0gUHJvcGVydGllcyB0byBiZSBkZWZpbmVkLlxyXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUYXJnZXQgb2JqZWN0LlxyXG4gKi9cclxudmFyIGRlZmluZUNvbmZpZ3VyYWJsZSA9IChmdW5jdGlvbiAodGFyZ2V0LCBwcm9wcykge1xyXG4gICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IE9iamVjdC5rZXlzKHByb3BzKTsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICB2YXIga2V5ID0gX2FbX2ldO1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwge1xyXG4gICAgICAgICAgICB2YWx1ZTogcHJvcHNba2V5XSxcclxuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGFyZ2V0O1xyXG59KTtcblxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGdsb2JhbCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHByb3ZpZGVkIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcclxuICogQHJldHVybnMge09iamVjdH1cclxuICovXHJcbnZhciBnZXRXaW5kb3dPZiA9IChmdW5jdGlvbiAodGFyZ2V0KSB7XHJcbiAgICAvLyBBc3N1bWUgdGhhdCB0aGUgZWxlbWVudCBpcyBhbiBpbnN0YW5jZSBvZiBOb2RlLCB3aGljaCBtZWFucyB0aGF0IGl0XHJcbiAgICAvLyBoYXMgdGhlIFwib3duZXJEb2N1bWVudFwiIHByb3BlcnR5IGZyb20gd2hpY2ggd2UgY2FuIHJldHJpZXZlIGFcclxuICAgIC8vIGNvcnJlc3BvbmRpbmcgZ2xvYmFsIG9iamVjdC5cclxuICAgIHZhciBvd25lckdsb2JhbCA9IHRhcmdldCAmJiB0YXJnZXQub3duZXJEb2N1bWVudCAmJiB0YXJnZXQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcclxuICAgIC8vIFJldHVybiB0aGUgbG9jYWwgZ2xvYmFsIG9iamVjdCBpZiBpdCdzIG5vdCBwb3NzaWJsZSBleHRyYWN0IG9uZSBmcm9tXHJcbiAgICAvLyBwcm92aWRlZCBlbGVtZW50LlxyXG4gICAgcmV0dXJuIG93bmVyR2xvYmFsIHx8IGdsb2JhbCQxO1xyXG59KTtcblxuLy8gUGxhY2Vob2xkZXIgb2YgYW4gZW1wdHkgY29udGVudCByZWN0YW5nbGUuXHJcbnZhciBlbXB0eVJlY3QgPSBjcmVhdGVSZWN0SW5pdCgwLCAwLCAwLCAwKTtcclxuLyoqXHJcbiAqIENvbnZlcnRzIHByb3ZpZGVkIHN0cmluZyB0byBhIG51bWJlci5cclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSB2YWx1ZVxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gKi9cclxuZnVuY3Rpb24gdG9GbG9hdCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpIHx8IDA7XHJcbn1cclxuLyoqXHJcbiAqIEV4dHJhY3RzIGJvcmRlcnMgc2l6ZSBmcm9tIHByb3ZpZGVkIHN0eWxlcy5cclxuICpcclxuICogQHBhcmFtIHtDU1NTdHlsZURlY2xhcmF0aW9ufSBzdHlsZXNcclxuICogQHBhcmFtIHsuLi5zdHJpbmd9IHBvc2l0aW9ucyAtIEJvcmRlcnMgcG9zaXRpb25zICh0b3AsIHJpZ2h0LCAuLi4pXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRCb3JkZXJzU2l6ZShzdHlsZXMpIHtcclxuICAgIHZhciBwb3NpdGlvbnMgPSBbXTtcclxuICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgcG9zaXRpb25zW19pIC0gMV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBvc2l0aW9ucy5yZWR1Y2UoZnVuY3Rpb24gKHNpemUsIHBvc2l0aW9uKSB7XHJcbiAgICAgICAgdmFyIHZhbHVlID0gc3R5bGVzWydib3JkZXItJyArIHBvc2l0aW9uICsgJy13aWR0aCddO1xyXG4gICAgICAgIHJldHVybiBzaXplICsgdG9GbG9hdCh2YWx1ZSk7XHJcbiAgICB9LCAwKTtcclxufVxyXG4vKipcclxuICogRXh0cmFjdHMgcGFkZGluZ3Mgc2l6ZXMgZnJvbSBwcm92aWRlZCBzdHlsZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7Q1NTU3R5bGVEZWNsYXJhdGlvbn0gc3R5bGVzXHJcbiAqIEByZXR1cm5zIHtPYmplY3R9IFBhZGRpbmdzIGJveC5cclxuICovXHJcbmZ1bmN0aW9uIGdldFBhZGRpbmdzKHN0eWxlcykge1xyXG4gICAgdmFyIHBvc2l0aW9ucyA9IFsndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsICdsZWZ0J107XHJcbiAgICB2YXIgcGFkZGluZ3MgPSB7fTtcclxuICAgIGZvciAodmFyIF9pID0gMCwgcG9zaXRpb25zXzEgPSBwb3NpdGlvbnM7IF9pIDwgcG9zaXRpb25zXzEubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgdmFyIHBvc2l0aW9uID0gcG9zaXRpb25zXzFbX2ldO1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IHN0eWxlc1sncGFkZGluZy0nICsgcG9zaXRpb25dO1xyXG4gICAgICAgIHBhZGRpbmdzW3Bvc2l0aW9uXSA9IHRvRmxvYXQodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBhZGRpbmdzO1xyXG59XHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIGNvbnRlbnQgcmVjdGFuZ2xlIG9mIHByb3ZpZGVkIFNWRyBlbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0ge1NWR0dyYXBoaWNzRWxlbWVudH0gdGFyZ2V0IC0gRWxlbWVudCBjb250ZW50IHJlY3RhbmdsZSBvZiB3aGljaCBuZWVkc1xyXG4gKiAgICAgIHRvIGJlIGNhbGN1bGF0ZWQuXHJcbiAqIEByZXR1cm5zIHtET01SZWN0SW5pdH1cclxuICovXHJcbmZ1bmN0aW9uIGdldFNWR0NvbnRlbnRSZWN0KHRhcmdldCkge1xyXG4gICAgdmFyIGJib3ggPSB0YXJnZXQuZ2V0QkJveCgpO1xyXG4gICAgcmV0dXJuIGNyZWF0ZVJlY3RJbml0KDAsIDAsIGJib3gud2lkdGgsIGJib3guaGVpZ2h0KTtcclxufVxyXG4vKipcclxuICogQ2FsY3VsYXRlcyBjb250ZW50IHJlY3RhbmdsZSBvZiBwcm92aWRlZCBIVE1MRWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gdGFyZ2V0IC0gRWxlbWVudCBmb3Igd2hpY2ggdG8gY2FsY3VsYXRlIHRoZSBjb250ZW50IHJlY3RhbmdsZS5cclxuICogQHJldHVybnMge0RPTVJlY3RJbml0fVxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0SFRNTEVsZW1lbnRDb250ZW50UmVjdCh0YXJnZXQpIHtcclxuICAgIC8vIENsaWVudCB3aWR0aCAmIGhlaWdodCBwcm9wZXJ0aWVzIGNhbid0IGJlXHJcbiAgICAvLyB1c2VkIGV4Y2x1c2l2ZWx5IGFzIHRoZXkgcHJvdmlkZSByb3VuZGVkIHZhbHVlcy5cclxuICAgIHZhciBjbGllbnRXaWR0aCA9IHRhcmdldC5jbGllbnRXaWR0aCwgY2xpZW50SGVpZ2h0ID0gdGFyZ2V0LmNsaWVudEhlaWdodDtcclxuICAgIC8vIEJ5IHRoaXMgY29uZGl0aW9uIHdlIGNhbiBjYXRjaCBhbGwgbm9uLXJlcGxhY2VkIGlubGluZSwgaGlkZGVuIGFuZFxyXG4gICAgLy8gZGV0YWNoZWQgZWxlbWVudHMuIFRob3VnaCBlbGVtZW50cyB3aXRoIHdpZHRoICYgaGVpZ2h0IHByb3BlcnRpZXMgbGVzc1xyXG4gICAgLy8gdGhhbiAwLjUgd2lsbCBiZSBkaXNjYXJkZWQgYXMgd2VsbC5cclxuICAgIC8vXHJcbiAgICAvLyBXaXRob3V0IGl0IHdlIHdvdWxkIG5lZWQgdG8gaW1wbGVtZW50IHNlcGFyYXRlIG1ldGhvZHMgZm9yIGVhY2ggb2ZcclxuICAgIC8vIHRob3NlIGNhc2VzIGFuZCBpdCdzIG5vdCBwb3NzaWJsZSB0byBwZXJmb3JtIGEgcHJlY2lzZSBhbmQgcGVyZm9ybWFuY2VcclxuICAgIC8vIGVmZmVjdGl2ZSB0ZXN0IGZvciBoaWRkZW4gZWxlbWVudHMuIEUuZy4gZXZlbiBqUXVlcnkncyAnOnZpc2libGUnIGZpbHRlclxyXG4gICAgLy8gZ2l2ZXMgd3JvbmcgcmVzdWx0cyBmb3IgZWxlbWVudHMgd2l0aCB3aWR0aCAmIGhlaWdodCBsZXNzIHRoYW4gMC41LlxyXG4gICAgaWYgKCFjbGllbnRXaWR0aCAmJiAhY2xpZW50SGVpZ2h0KSB7XHJcbiAgICAgICAgcmV0dXJuIGVtcHR5UmVjdDtcclxuICAgIH1cclxuICAgIHZhciBzdHlsZXMgPSBnZXRXaW5kb3dPZih0YXJnZXQpLmdldENvbXB1dGVkU3R5bGUodGFyZ2V0KTtcclxuICAgIHZhciBwYWRkaW5ncyA9IGdldFBhZGRpbmdzKHN0eWxlcyk7XHJcbiAgICB2YXIgaG9yaXpQYWQgPSBwYWRkaW5ncy5sZWZ0ICsgcGFkZGluZ3MucmlnaHQ7XHJcbiAgICB2YXIgdmVydFBhZCA9IHBhZGRpbmdzLnRvcCArIHBhZGRpbmdzLmJvdHRvbTtcclxuICAgIC8vIENvbXB1dGVkIHN0eWxlcyBvZiB3aWR0aCAmIGhlaWdodCBhcmUgYmVpbmcgdXNlZCBiZWNhdXNlIHRoZXkgYXJlIHRoZVxyXG4gICAgLy8gb25seSBkaW1lbnNpb25zIGF2YWlsYWJsZSB0byBKUyB0aGF0IGNvbnRhaW4gbm9uLXJvdW5kZWQgdmFsdWVzLiBJdCBjb3VsZFxyXG4gICAgLy8gYmUgcG9zc2libGUgdG8gdXRpbGl6ZSB0aGUgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGlmIG9ubHkgaXQncyBkYXRhIHdhc24ndFxyXG4gICAgLy8gYWZmZWN0ZWQgYnkgQ1NTIHRyYW5zZm9ybWF0aW9ucyBsZXQgYWxvbmUgcGFkZGluZ3MsIGJvcmRlcnMgYW5kIHNjcm9sbCBiYXJzLlxyXG4gICAgdmFyIHdpZHRoID0gdG9GbG9hdChzdHlsZXMud2lkdGgpLCBoZWlnaHQgPSB0b0Zsb2F0KHN0eWxlcy5oZWlnaHQpO1xyXG4gICAgLy8gV2lkdGggJiBoZWlnaHQgaW5jbHVkZSBwYWRkaW5ncyBhbmQgYm9yZGVycyB3aGVuIHRoZSAnYm9yZGVyLWJveCcgYm94XHJcbiAgICAvLyBtb2RlbCBpcyBhcHBsaWVkIChleGNlcHQgZm9yIElFKS5cclxuICAgIGlmIChzdHlsZXMuYm94U2l6aW5nID09PSAnYm9yZGVyLWJveCcpIHtcclxuICAgICAgICAvLyBGb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgcmVxdWlyZWQgdG8gaGFuZGxlIEludGVybmV0IEV4cGxvcmVyIHdoaWNoXHJcbiAgICAgICAgLy8gZG9lc24ndCBpbmNsdWRlIHBhZGRpbmdzIGFuZCBib3JkZXJzIHRvIGNvbXB1dGVkIENTUyBkaW1lbnNpb25zLlxyXG4gICAgICAgIC8vXHJcbiAgICAgICAgLy8gV2UgY2FuIHNheSB0aGF0IGlmIENTUyBkaW1lbnNpb25zICsgcGFkZGluZ3MgYXJlIGVxdWFsIHRvIHRoZSBcImNsaWVudFwiXHJcbiAgICAgICAgLy8gcHJvcGVydGllcyB0aGVuIGl0J3MgZWl0aGVyIElFLCBhbmQgdGh1cyB3ZSBkb24ndCBuZWVkIHRvIHN1YnRyYWN0XHJcbiAgICAgICAgLy8gYW55dGhpbmcsIG9yIGFuIGVsZW1lbnQgbWVyZWx5IGRvZXNuJ3QgaGF2ZSBwYWRkaW5ncy9ib3JkZXJzIHN0eWxlcy5cclxuICAgICAgICBpZiAoTWF0aC5yb3VuZCh3aWR0aCArIGhvcml6UGFkKSAhPT0gY2xpZW50V2lkdGgpIHtcclxuICAgICAgICAgICAgd2lkdGggLT0gZ2V0Qm9yZGVyc1NpemUoc3R5bGVzLCAnbGVmdCcsICdyaWdodCcpICsgaG9yaXpQYWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChNYXRoLnJvdW5kKGhlaWdodCArIHZlcnRQYWQpICE9PSBjbGllbnRIZWlnaHQpIHtcclxuICAgICAgICAgICAgaGVpZ2h0IC09IGdldEJvcmRlcnNTaXplKHN0eWxlcywgJ3RvcCcsICdib3R0b20nKSArIHZlcnRQYWQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gRm9sbG93aW5nIHN0ZXBzIGNhbid0IGJlIGFwcGxpZWQgdG8gdGhlIGRvY3VtZW50J3Mgcm9vdCBlbGVtZW50IGFzIGl0c1xyXG4gICAgLy8gY2xpZW50W1dpZHRoL0hlaWdodF0gcHJvcGVydGllcyByZXByZXNlbnQgdmlld3BvcnQgYXJlYSBvZiB0aGUgd2luZG93LlxyXG4gICAgLy8gQmVzaWRlcywgaXQncyBhcyB3ZWxsIG5vdCBuZWNlc3NhcnkgYXMgdGhlIDxodG1sPiBpdHNlbGYgbmVpdGhlciBoYXNcclxuICAgIC8vIHJlbmRlcmVkIHNjcm9sbCBiYXJzIG5vciBpdCBjYW4gYmUgY2xpcHBlZC5cclxuICAgIGlmICghaXNEb2N1bWVudEVsZW1lbnQodGFyZ2V0KSkge1xyXG4gICAgICAgIC8vIEluIHNvbWUgYnJvd3NlcnMgKG9ubHkgaW4gRmlyZWZveCwgYWN0dWFsbHkpIENTUyB3aWR0aCAmIGhlaWdodFxyXG4gICAgICAgIC8vIGluY2x1ZGUgc2Nyb2xsIGJhcnMgc2l6ZSB3aGljaCBjYW4gYmUgcmVtb3ZlZCBhdCB0aGlzIHN0ZXAgYXMgc2Nyb2xsXHJcbiAgICAgICAgLy8gYmFycyBhcmUgdGhlIG9ubHkgZGlmZmVyZW5jZSBiZXR3ZWVuIHJvdW5kZWQgZGltZW5zaW9ucyArIHBhZGRpbmdzXHJcbiAgICAgICAgLy8gYW5kIFwiY2xpZW50XCIgcHJvcGVydGllcywgdGhvdWdoIHRoYXQgaXMgbm90IGFsd2F5cyB0cnVlIGluIENocm9tZS5cclxuICAgICAgICB2YXIgdmVydFNjcm9sbGJhciA9IE1hdGgucm91bmQod2lkdGggKyBob3JpelBhZCkgLSBjbGllbnRXaWR0aDtcclxuICAgICAgICB2YXIgaG9yaXpTY3JvbGxiYXIgPSBNYXRoLnJvdW5kKGhlaWdodCArIHZlcnRQYWQpIC0gY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgIC8vIENocm9tZSBoYXMgYSByYXRoZXIgd2VpcmQgcm91bmRpbmcgb2YgXCJjbGllbnRcIiBwcm9wZXJ0aWVzLlxyXG4gICAgICAgIC8vIEUuZy4gZm9yIGFuIGVsZW1lbnQgd2l0aCBjb250ZW50IHdpZHRoIG9mIDMxNC4ycHggaXQgc29tZXRpbWVzIGdpdmVzXHJcbiAgICAgICAgLy8gdGhlIGNsaWVudCB3aWR0aCBvZiAzMTVweCBhbmQgZm9yIHRoZSB3aWR0aCBvZiAzMTQuN3B4IGl0IG1heSBnaXZlXHJcbiAgICAgICAgLy8gMzE0cHguIEFuZCBpdCBkb2Vzbid0IGhhcHBlbiBhbGwgdGhlIHRpbWUuIFNvIGp1c3QgaWdub3JlIHRoaXMgZGVsdGFcclxuICAgICAgICAvLyBhcyBhIG5vbi1yZWxldmFudC5cclxuICAgICAgICBpZiAoTWF0aC5hYnModmVydFNjcm9sbGJhcikgIT09IDEpIHtcclxuICAgICAgICAgICAgd2lkdGggLT0gdmVydFNjcm9sbGJhcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKE1hdGguYWJzKGhvcml6U2Nyb2xsYmFyKSAhPT0gMSkge1xyXG4gICAgICAgICAgICBoZWlnaHQgLT0gaG9yaXpTY3JvbGxiYXI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNyZWF0ZVJlY3RJbml0KHBhZGRpbmdzLmxlZnQsIHBhZGRpbmdzLnRvcCwgd2lkdGgsIGhlaWdodCk7XHJcbn1cclxuLyoqXHJcbiAqIENoZWNrcyB3aGV0aGVyIHByb3ZpZGVkIGVsZW1lbnQgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIFNWR0dyYXBoaWNzRWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXQgLSBFbGVtZW50IHRvIGJlIGNoZWNrZWQuXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxudmFyIGlzU1ZHR3JhcGhpY3NFbGVtZW50ID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIC8vIFNvbWUgYnJvd3NlcnMsIG5hbWVseSBJRSBhbmQgRWRnZSwgZG9uJ3QgaGF2ZSB0aGUgU1ZHR3JhcGhpY3NFbGVtZW50XHJcbiAgICAvLyBpbnRlcmZhY2UuXHJcbiAgICBpZiAodHlwZW9mIFNWR0dyYXBoaWNzRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCkgeyByZXR1cm4gdGFyZ2V0IGluc3RhbmNlb2YgZ2V0V2luZG93T2YodGFyZ2V0KS5TVkdHcmFwaGljc0VsZW1lbnQ7IH07XHJcbiAgICB9XHJcbiAgICAvLyBJZiBpdCdzIHNvLCB0aGVuIGNoZWNrIHRoYXQgZWxlbWVudCBpcyBhdCBsZWFzdCBhbiBpbnN0YW5jZSBvZiB0aGVcclxuICAgIC8vIFNWR0VsZW1lbnQgYW5kIHRoYXQgaXQgaGFzIHRoZSBcImdldEJCb3hcIiBtZXRob2QuXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXh0cmEtcGFyZW5zXHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCkgeyByZXR1cm4gKHRhcmdldCBpbnN0YW5jZW9mIGdldFdpbmRvd09mKHRhcmdldCkuU1ZHRWxlbWVudCAmJlxyXG4gICAgICAgIHR5cGVvZiB0YXJnZXQuZ2V0QkJveCA9PT0gJ2Z1bmN0aW9uJyk7IH07XHJcbn0pKCk7XHJcbi8qKlxyXG4gKiBDaGVja3Mgd2hldGhlciBwcm92aWRlZCBlbGVtZW50IGlzIGEgZG9jdW1lbnQgZWxlbWVudCAoPGh0bWw+KS5cclxuICpcclxuICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXQgLSBFbGVtZW50IHRvIGJlIGNoZWNrZWQuXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuZnVuY3Rpb24gaXNEb2N1bWVudEVsZW1lbnQodGFyZ2V0KSB7XHJcbiAgICByZXR1cm4gdGFyZ2V0ID09PSBnZXRXaW5kb3dPZih0YXJnZXQpLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcclxufVxyXG4vKipcclxuICogQ2FsY3VsYXRlcyBhbiBhcHByb3ByaWF0ZSBjb250ZW50IHJlY3RhbmdsZSBmb3IgcHJvdmlkZWQgaHRtbCBvciBzdmcgZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXQgLSBFbGVtZW50IGNvbnRlbnQgcmVjdGFuZ2xlIG9mIHdoaWNoIG5lZWRzIHRvIGJlIGNhbGN1bGF0ZWQuXHJcbiAqIEByZXR1cm5zIHtET01SZWN0SW5pdH1cclxuICovXHJcbmZ1bmN0aW9uIGdldENvbnRlbnRSZWN0KHRhcmdldCkge1xyXG4gICAgaWYgKCFpc0Jyb3dzZXIpIHtcclxuICAgICAgICByZXR1cm4gZW1wdHlSZWN0O1xyXG4gICAgfVxyXG4gICAgaWYgKGlzU1ZHR3JhcGhpY3NFbGVtZW50KHRhcmdldCkpIHtcclxuICAgICAgICByZXR1cm4gZ2V0U1ZHQ29udGVudFJlY3QodGFyZ2V0KTtcclxuICAgIH1cclxuICAgIHJldHVybiBnZXRIVE1MRWxlbWVudENvbnRlbnRSZWN0KHRhcmdldCk7XHJcbn1cclxuLyoqXHJcbiAqIENyZWF0ZXMgcmVjdGFuZ2xlIHdpdGggYW4gaW50ZXJmYWNlIG9mIHRoZSBET01SZWN0UmVhZE9ubHkuXHJcbiAqIFNwZWM6IGh0dHBzOi8vZHJhZnRzLmZ4dGYub3JnL2dlb21ldHJ5LyNkb21yZWN0cmVhZG9ubHlcclxuICpcclxuICogQHBhcmFtIHtET01SZWN0SW5pdH0gcmVjdEluaXQgLSBPYmplY3Qgd2l0aCByZWN0YW5nbGUncyB4L3kgY29vcmRpbmF0ZXMgYW5kIGRpbWVuc2lvbnMuXHJcbiAqIEByZXR1cm5zIHtET01SZWN0UmVhZE9ubHl9XHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVSZWFkT25seVJlY3QoX2EpIHtcclxuICAgIHZhciB4ID0gX2EueCwgeSA9IF9hLnksIHdpZHRoID0gX2Eud2lkdGgsIGhlaWdodCA9IF9hLmhlaWdodDtcclxuICAgIC8vIElmIERPTVJlY3RSZWFkT25seSBpcyBhdmFpbGFibGUgdXNlIGl0IGFzIGEgcHJvdG90eXBlIGZvciB0aGUgcmVjdGFuZ2xlLlxyXG4gICAgdmFyIENvbnN0ciA9IHR5cGVvZiBET01SZWN0UmVhZE9ubHkgIT09ICd1bmRlZmluZWQnID8gRE9NUmVjdFJlYWRPbmx5IDogT2JqZWN0O1xyXG4gICAgdmFyIHJlY3QgPSBPYmplY3QuY3JlYXRlKENvbnN0ci5wcm90b3R5cGUpO1xyXG4gICAgLy8gUmVjdGFuZ2xlJ3MgcHJvcGVydGllcyBhcmUgbm90IHdyaXRhYmxlIGFuZCBub24tZW51bWVyYWJsZS5cclxuICAgIGRlZmluZUNvbmZpZ3VyYWJsZShyZWN0LCB7XHJcbiAgICAgICAgeDogeCwgeTogeSwgd2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAgICB0b3A6IHksXHJcbiAgICAgICAgcmlnaHQ6IHggKyB3aWR0aCxcclxuICAgICAgICBib3R0b206IGhlaWdodCArIHksXHJcbiAgICAgICAgbGVmdDogeFxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmVjdDtcclxufVxyXG4vKipcclxuICogQ3JlYXRlcyBET01SZWN0SW5pdCBvYmplY3QgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGRpbWVuc2lvbnMgYW5kIHRoZSB4L3kgY29vcmRpbmF0ZXMuXHJcbiAqIFNwZWM6IGh0dHBzOi8vZHJhZnRzLmZ4dGYub3JnL2dlb21ldHJ5LyNkaWN0ZGVmLWRvbXJlY3Rpbml0XHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gWCBjb29yZGluYXRlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFkgY29vcmRpbmF0ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gUmVjdGFuZ2xlJ3Mgd2lkdGguXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgLSBSZWN0YW5nbGUncyBoZWlnaHQuXHJcbiAqIEByZXR1cm5zIHtET01SZWN0SW5pdH1cclxuICovXHJcbmZ1bmN0aW9uIGNyZWF0ZVJlY3RJbml0KHgsIHksIHdpZHRoLCBoZWlnaHQpIHtcclxuICAgIHJldHVybiB7IHg6IHgsIHk6IHksIHdpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHQgfTtcclxufVxuXG4vKipcclxuICogQ2xhc3MgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgY29tcHV0YXRpb25zIG9mIHRoZSBjb250ZW50IHJlY3RhbmdsZSBvZlxyXG4gKiBwcm92aWRlZCBET00gZWxlbWVudCBhbmQgZm9yIGtlZXBpbmcgdHJhY2sgb2YgaXQncyBjaGFuZ2VzLlxyXG4gKi9cclxudmFyIFJlc2l6ZU9ic2VydmF0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFJlc2l6ZU9ic2VydmF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gdGFyZ2V0IC0gRWxlbWVudCB0byBiZSBvYnNlcnZlZC5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gUmVzaXplT2JzZXJ2YXRpb24odGFyZ2V0KSB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQnJvYWRjYXN0ZWQgd2lkdGggb2YgY29udGVudCByZWN0YW5nbGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYnJvYWRjYXN0V2lkdGggPSAwO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEJyb2FkY2FzdGVkIGhlaWdodCBvZiBjb250ZW50IHJlY3RhbmdsZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5icm9hZGNhc3RIZWlnaHQgPSAwO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFJlZmVyZW5jZSB0byB0aGUgbGFzdCBvYnNlcnZlZCBjb250ZW50IHJlY3RhbmdsZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBwcml2YXRlIHtET01SZWN0SW5pdH1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbnRlbnRSZWN0XyA9IGNyZWF0ZVJlY3RJbml0KDAsIDAsIDAsIDApO1xyXG4gICAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIGNvbnRlbnQgcmVjdGFuZ2xlIGFuZCB0ZWxscyB3aGV0aGVyIGl0J3Mgd2lkdGggb3IgaGVpZ2h0IHByb3BlcnRpZXNcclxuICAgICAqIGhhdmUgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCBicm9hZGNhc3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIFJlc2l6ZU9ic2VydmF0aW9uLnByb3RvdHlwZS5pc0FjdGl2ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgcmVjdCA9IGdldENvbnRlbnRSZWN0KHRoaXMudGFyZ2V0KTtcclxuICAgICAgICB0aGlzLmNvbnRlbnRSZWN0XyA9IHJlY3Q7XHJcbiAgICAgICAgcmV0dXJuIChyZWN0LndpZHRoICE9PSB0aGlzLmJyb2FkY2FzdFdpZHRoIHx8XHJcbiAgICAgICAgICAgIHJlY3QuaGVpZ2h0ICE9PSB0aGlzLmJyb2FkY2FzdEhlaWdodCk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzICdicm9hZGNhc3RXaWR0aCcgYW5kICdicm9hZGNhc3RIZWlnaHQnIHByb3BlcnRpZXMgd2l0aCBhIGRhdGFcclxuICAgICAqIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydGllcyBvZiB0aGUgbGFzdCBvYnNlcnZlZCBjb250ZW50IHJlY3RhbmdsZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyB7RE9NUmVjdEluaXR9IExhc3Qgb2JzZXJ2ZWQgY29udGVudCByZWN0YW5nbGUuXHJcbiAgICAgKi9cclxuICAgIFJlc2l6ZU9ic2VydmF0aW9uLnByb3RvdHlwZS5icm9hZGNhc3RSZWN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciByZWN0ID0gdGhpcy5jb250ZW50UmVjdF87XHJcbiAgICAgICAgdGhpcy5icm9hZGNhc3RXaWR0aCA9IHJlY3Qud2lkdGg7XHJcbiAgICAgICAgdGhpcy5icm9hZGNhc3RIZWlnaHQgPSByZWN0LmhlaWdodDtcclxuICAgICAgICByZXR1cm4gcmVjdDtcclxuICAgIH07XHJcbiAgICByZXR1cm4gUmVzaXplT2JzZXJ2YXRpb247XHJcbn0oKSk7XG5cbnZhciBSZXNpemVPYnNlcnZlckVudHJ5ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFJlc2l6ZU9ic2VydmVyRW50cnkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXQgLSBFbGVtZW50IHRoYXQgaXMgYmVpbmcgb2JzZXJ2ZWQuXHJcbiAgICAgKiBAcGFyYW0ge0RPTVJlY3RJbml0fSByZWN0SW5pdCAtIERhdGEgb2YgdGhlIGVsZW1lbnQncyBjb250ZW50IHJlY3RhbmdsZS5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gUmVzaXplT2JzZXJ2ZXJFbnRyeSh0YXJnZXQsIHJlY3RJbml0KSB7XHJcbiAgICAgICAgdmFyIGNvbnRlbnRSZWN0ID0gY3JlYXRlUmVhZE9ubHlSZWN0KHJlY3RJbml0KTtcclxuICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb24gZm9sbG93aW5nIHByb3BlcnRpZXMgYXJlIG5vdCB3cml0YWJsZVxyXG4gICAgICAgIC8vIGFuZCBhcmUgYWxzbyBub3QgZW51bWVyYWJsZSBpbiB0aGUgbmF0aXZlIGltcGxlbWVudGF0aW9uLlxyXG4gICAgICAgIC8vXHJcbiAgICAgICAgLy8gUHJvcGVydHkgYWNjZXNzb3JzIGFyZSBub3QgYmVpbmcgdXNlZCBhcyB0aGV5J2QgcmVxdWlyZSB0byBkZWZpbmUgYVxyXG4gICAgICAgIC8vIHByaXZhdGUgV2Vha01hcCBzdG9yYWdlIHdoaWNoIG1heSBjYXVzZSBtZW1vcnkgbGVha3MgaW4gYnJvd3NlcnMgdGhhdFxyXG4gICAgICAgIC8vIGRvbid0IHN1cHBvcnQgdGhpcyB0eXBlIG9mIGNvbGxlY3Rpb25zLlxyXG4gICAgICAgIGRlZmluZUNvbmZpZ3VyYWJsZSh0aGlzLCB7IHRhcmdldDogdGFyZ2V0LCBjb250ZW50UmVjdDogY29udGVudFJlY3QgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUmVzaXplT2JzZXJ2ZXJFbnRyeTtcclxufSgpKTtcblxudmFyIFJlc2l6ZU9ic2VydmVyU1BJID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIFJlc2l6ZU9ic2VydmVyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UmVzaXplT2JzZXJ2ZXJDYWxsYmFja30gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGludm9rZWRcclxuICAgICAqICAgICAgd2hlbiBvbmUgb2YgdGhlIG9ic2VydmVkIGVsZW1lbnRzIGNoYW5nZXMgaXQncyBjb250ZW50IGRpbWVuc2lvbnMuXHJcbiAgICAgKiBAcGFyYW0ge1Jlc2l6ZU9ic2VydmVyQ29udHJvbGxlcn0gY29udHJvbGxlciAtIENvbnRyb2xsZXIgaW5zdGFuY2Ugd2hpY2hcclxuICAgICAqICAgICAgaXMgcmVzcG9uc2libGUgZm9yIHRoZSB1cGRhdGVzIG9mIG9ic2VydmVyLlxyXG4gICAgICogQHBhcmFtIHtSZXNpemVPYnNlcnZlcn0gY2FsbGJhY2tDdHggLSBSZWZlcmVuY2UgdG8gdGhlIHB1YmxpY1xyXG4gICAgICogICAgICBSZXNpemVPYnNlcnZlciBpbnN0YW5jZSB3aGljaCB3aWxsIGJlIHBhc3NlZCB0byBjYWxsYmFjayBmdW5jdGlvbi5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gUmVzaXplT2JzZXJ2ZXJTUEkoY2FsbGJhY2ssIGNvbnRyb2xsZXIsIGNhbGxiYWNrQ3R4KSB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ29sbGVjdGlvbiBvZiByZXNpemUgb2JzZXJ2YXRpb25zIHRoYXQgaGF2ZSBkZXRlY3RlZCBjaGFuZ2VzIGluIGRpbWVuc2lvbnNcclxuICAgICAgICAgKiBvZiBlbGVtZW50cy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBwcml2YXRlIHtBcnJheTxSZXNpemVPYnNlcnZhdGlvbj59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hY3RpdmVPYnNlcnZhdGlvbnNfID0gW107XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogUmVnaXN0cnkgb2YgdGhlIFJlc2l6ZU9ic2VydmF0aW9uIGluc3RhbmNlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBwcml2YXRlIHtNYXA8RWxlbWVudCwgUmVzaXplT2JzZXJ2YXRpb24+fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub2JzZXJ2YXRpb25zXyA9IG5ldyBNYXBTaGltKCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgY2FsbGJhY2sgcHJvdmlkZWQgYXMgcGFyYW1ldGVyIDEgaXMgbm90IGEgZnVuY3Rpb24uJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2FsbGJhY2tfID0gY2FsbGJhY2s7XHJcbiAgICAgICAgdGhpcy5jb250cm9sbGVyXyA9IGNvbnRyb2xsZXI7XHJcbiAgICAgICAgdGhpcy5jYWxsYmFja0N0eF8gPSBjYWxsYmFja0N0eDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogU3RhcnRzIG9ic2VydmluZyBwcm92aWRlZCBlbGVtZW50LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gdGFyZ2V0IC0gRWxlbWVudCB0byBiZSBvYnNlcnZlZC5cclxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICovXHJcbiAgICBSZXNpemVPYnNlcnZlclNQSS5wcm90b3R5cGUub2JzZXJ2ZSA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcclxuICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgMCBwcmVzZW50LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBEbyBub3RoaW5nIGlmIGN1cnJlbnQgZW52aXJvbm1lbnQgZG9lc24ndCBoYXZlIHRoZSBFbGVtZW50IGludGVyZmFjZS5cclxuICAgICAgICBpZiAodHlwZW9mIEVsZW1lbnQgPT09ICd1bmRlZmluZWQnIHx8ICEoRWxlbWVudCBpbnN0YW5jZW9mIE9iamVjdCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoISh0YXJnZXQgaW5zdGFuY2VvZiBnZXRXaW5kb3dPZih0YXJnZXQpLkVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BhcmFtZXRlciAxIGlzIG5vdCBvZiB0eXBlIFwiRWxlbWVudFwiLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgb2JzZXJ2YXRpb25zID0gdGhpcy5vYnNlcnZhdGlvbnNfO1xyXG4gICAgICAgIC8vIERvIG5vdGhpbmcgaWYgZWxlbWVudCBpcyBhbHJlYWR5IGJlaW5nIG9ic2VydmVkLlxyXG4gICAgICAgIGlmIChvYnNlcnZhdGlvbnMuaGFzKHRhcmdldCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvYnNlcnZhdGlvbnMuc2V0KHRhcmdldCwgbmV3IFJlc2l6ZU9ic2VydmF0aW9uKHRhcmdldCkpO1xyXG4gICAgICAgIHRoaXMuY29udHJvbGxlcl8uYWRkT2JzZXJ2ZXIodGhpcyk7XHJcbiAgICAgICAgLy8gRm9yY2UgdGhlIHVwZGF0ZSBvZiBvYnNlcnZhdGlvbnMuXHJcbiAgICAgICAgdGhpcy5jb250cm9sbGVyXy5yZWZyZXNoKCk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9wcyBvYnNlcnZpbmcgcHJvdmlkZWQgZWxlbWVudC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IHRhcmdldCAtIEVsZW1lbnQgdG8gc3RvcCBvYnNlcnZpbmcuXHJcbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAqL1xyXG4gICAgUmVzaXplT2JzZXJ2ZXJTUEkucHJvdG90eXBlLnVub2JzZXJ2ZSA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcclxuICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgMCBwcmVzZW50LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBEbyBub3RoaW5nIGlmIGN1cnJlbnQgZW52aXJvbm1lbnQgZG9lc24ndCBoYXZlIHRoZSBFbGVtZW50IGludGVyZmFjZS5cclxuICAgICAgICBpZiAodHlwZW9mIEVsZW1lbnQgPT09ICd1bmRlZmluZWQnIHx8ICEoRWxlbWVudCBpbnN0YW5jZW9mIE9iamVjdCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoISh0YXJnZXQgaW5zdGFuY2VvZiBnZXRXaW5kb3dPZih0YXJnZXQpLkVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BhcmFtZXRlciAxIGlzIG5vdCBvZiB0eXBlIFwiRWxlbWVudFwiLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgb2JzZXJ2YXRpb25zID0gdGhpcy5vYnNlcnZhdGlvbnNfO1xyXG4gICAgICAgIC8vIERvIG5vdGhpbmcgaWYgZWxlbWVudCBpcyBub3QgYmVpbmcgb2JzZXJ2ZWQuXHJcbiAgICAgICAgaWYgKCFvYnNlcnZhdGlvbnMuaGFzKHRhcmdldCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvYnNlcnZhdGlvbnMuZGVsZXRlKHRhcmdldCk7XHJcbiAgICAgICAgaWYgKCFvYnNlcnZhdGlvbnMuc2l6ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnJlbW92ZU9ic2VydmVyKHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFN0b3BzIG9ic2VydmluZyBhbGwgZWxlbWVudHMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgKi9cclxuICAgIFJlc2l6ZU9ic2VydmVyU1BJLnByb3RvdHlwZS5kaXNjb25uZWN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuY2xlYXJBY3RpdmUoKTtcclxuICAgICAgICB0aGlzLm9ic2VydmF0aW9uc18uY2xlYXIoKTtcclxuICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnJlbW92ZU9ic2VydmVyKHRoaXMpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogQ29sbGVjdHMgb2JzZXJ2YXRpb24gaW5zdGFuY2VzIHRoZSBhc3NvY2lhdGVkIGVsZW1lbnQgb2Ygd2hpY2ggaGFzIGNoYW5nZWRcclxuICAgICAqIGl0J3MgY29udGVudCByZWN0YW5nbGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgKi9cclxuICAgIFJlc2l6ZU9ic2VydmVyU1BJLnByb3RvdHlwZS5nYXRoZXJBY3RpdmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB0aGlzLmNsZWFyQWN0aXZlKCk7XHJcbiAgICAgICAgdGhpcy5vYnNlcnZhdGlvbnNfLmZvckVhY2goZnVuY3Rpb24gKG9ic2VydmF0aW9uKSB7XHJcbiAgICAgICAgICAgIGlmIChvYnNlcnZhdGlvbi5pc0FjdGl2ZSgpKSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5hY3RpdmVPYnNlcnZhdGlvbnNfLnB1c2gob2JzZXJ2YXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBJbnZva2VzIGluaXRpYWwgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCBhIGxpc3Qgb2YgUmVzaXplT2JzZXJ2ZXJFbnRyeVxyXG4gICAgICogaW5zdGFuY2VzIGNvbGxlY3RlZCBmcm9tIGFjdGl2ZSByZXNpemUgb2JzZXJ2YXRpb25zLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICovXHJcbiAgICBSZXNpemVPYnNlcnZlclNQSS5wcm90b3R5cGUuYnJvYWRjYXN0QWN0aXZlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vIERvIG5vdGhpbmcgaWYgb2JzZXJ2ZXIgZG9lc24ndCBoYXZlIGFjdGl2ZSBvYnNlcnZhdGlvbnMuXHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc0FjdGl2ZSgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGN0eCA9IHRoaXMuY2FsbGJhY2tDdHhfO1xyXG4gICAgICAgIC8vIENyZWF0ZSBSZXNpemVPYnNlcnZlckVudHJ5IGluc3RhbmNlIGZvciBldmVyeSBhY3RpdmUgb2JzZXJ2YXRpb24uXHJcbiAgICAgICAgdmFyIGVudHJpZXMgPSB0aGlzLmFjdGl2ZU9ic2VydmF0aW9uc18ubWFwKGZ1bmN0aW9uIChvYnNlcnZhdGlvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlc2l6ZU9ic2VydmVyRW50cnkob2JzZXJ2YXRpb24udGFyZ2V0LCBvYnNlcnZhdGlvbi5icm9hZGNhc3RSZWN0KCkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY2FsbGJhY2tfLmNhbGwoY3R4LCBlbnRyaWVzLCBjdHgpO1xyXG4gICAgICAgIHRoaXMuY2xlYXJBY3RpdmUoKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIENsZWFycyB0aGUgY29sbGVjdGlvbiBvZiBhY3RpdmUgb2JzZXJ2YXRpb25zLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICovXHJcbiAgICBSZXNpemVPYnNlcnZlclNQSS5wcm90b3R5cGUuY2xlYXJBY3RpdmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVPYnNlcnZhdGlvbnNfLnNwbGljZSgwKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFRlbGxzIHdoZXRoZXIgb2JzZXJ2ZXIgaGFzIGFjdGl2ZSBvYnNlcnZhdGlvbnMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIFJlc2l6ZU9ic2VydmVyU1BJLnByb3RvdHlwZS5oYXNBY3RpdmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlT2JzZXJ2YXRpb25zXy5sZW5ndGggPiAwO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBSZXNpemVPYnNlcnZlclNQSTtcclxufSgpKTtcblxuLy8gUmVnaXN0cnkgb2YgaW50ZXJuYWwgb2JzZXJ2ZXJzLiBJZiBXZWFrTWFwIGlzIG5vdCBhdmFpbGFibGUgdXNlIGN1cnJlbnQgc2hpbVxyXG4vLyBmb3IgdGhlIE1hcCBjb2xsZWN0aW9uIGFzIGl0IGhhcyBhbGwgcmVxdWlyZWQgbWV0aG9kcyBhbmQgYmVjYXVzZSBXZWFrTWFwXHJcbi8vIGNhbid0IGJlIGZ1bGx5IHBvbHlmaWxsZWQgYW55d2F5LlxyXG52YXIgb2JzZXJ2ZXJzID0gdHlwZW9mIFdlYWtNYXAgIT09ICd1bmRlZmluZWQnID8gbmV3IFdlYWtNYXAoKSA6IG5ldyBNYXBTaGltKCk7XHJcbi8qKlxyXG4gKiBSZXNpemVPYnNlcnZlciBBUEkuIEVuY2Fwc3VsYXRlcyB0aGUgUmVzaXplT2JzZXJ2ZXIgU1BJIGltcGxlbWVudGF0aW9uXHJcbiAqIGV4cG9zaW5nIG9ubHkgdGhvc2UgbWV0aG9kcyBhbmQgcHJvcGVydGllcyB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZSBzcGVjLlxyXG4gKi9cclxudmFyIFJlc2l6ZU9ic2VydmVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIFJlc2l6ZU9ic2VydmVyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UmVzaXplT2JzZXJ2ZXJDYWxsYmFja30gY2FsbGJhY2sgLSBDYWxsYmFjayB0aGF0IGlzIGludm9rZWQgd2hlblxyXG4gICAgICogICAgICBkaW1lbnNpb25zIG9mIHRoZSBvYnNlcnZlZCBlbGVtZW50cyBjaGFuZ2UuXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIFJlc2l6ZU9ic2VydmVyKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlc2l6ZU9ic2VydmVyKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24uJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCcxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSAwIHByZXNlbnQuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjb250cm9sbGVyID0gUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyLmdldEluc3RhbmNlKCk7XHJcbiAgICAgICAgdmFyIG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyU1BJKGNhbGxiYWNrLCBjb250cm9sbGVyLCB0aGlzKTtcclxuICAgICAgICBvYnNlcnZlcnMuc2V0KHRoaXMsIG9ic2VydmVyKTtcclxuICAgIH1cclxuICAgIHJldHVybiBSZXNpemVPYnNlcnZlcjtcclxufSgpKTtcclxuLy8gRXhwb3NlIHB1YmxpYyBtZXRob2RzIG9mIFJlc2l6ZU9ic2VydmVyLlxyXG5bXHJcbiAgICAnb2JzZXJ2ZScsXHJcbiAgICAndW5vYnNlcnZlJyxcclxuICAgICdkaXNjb25uZWN0J1xyXG5dLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xyXG4gICAgUmVzaXplT2JzZXJ2ZXIucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIF9hO1xyXG4gICAgICAgIHJldHVybiAoX2EgPSBvYnNlcnZlcnMuZ2V0KHRoaXMpKVttZXRob2RdLmFwcGx5KF9hLCBhcmd1bWVudHMpO1xyXG4gICAgfTtcclxufSk7XG5cbnZhciBpbmRleCA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBFeHBvcnQgZXhpc3RpbmcgaW1wbGVtZW50YXRpb24gaWYgYXZhaWxhYmxlLlxyXG4gICAgaWYgKHR5cGVvZiBnbG9iYWwkMS5SZXNpemVPYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICByZXR1cm4gZ2xvYmFsJDEuUmVzaXplT2JzZXJ2ZXI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUmVzaXplT2JzZXJ2ZXI7XHJcbn0pKCk7XG5cbmV4cG9ydCBkZWZhdWx0IGluZGV4O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js\n"); + +/***/ }), + +/***/ "./node_modules/scrollbarwidth/scrollbarWidth.js": +/*!*******************************************************!*\ + !*** ./node_modules/scrollbarwidth/scrollbarWidth.js ***! + \*******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! scrollbarWidth.js v0.1.3 | felixexter | MIT | https://github.com/felixexter/scrollbarWidth */\n(function (root, factory) {\n\tif (true) {\n\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t} else {}\n}(this, function () {\n\t'use strict';\n\n\tfunction scrollbarWidth() {\n\t\tif (typeof document === 'undefined') {\n\t\t\treturn 0\n\t\t}\n\n\t\tvar\n\t\t\tbody = document.body,\n\t\t\tbox = document.createElement('div'),\n\t\t\tboxStyle = box.style,\n\t\t\twidth;\n\n\t\tboxStyle.position = 'absolute';\n\t\tboxStyle.top = boxStyle.left = '-9999px';\n\t\tboxStyle.width = boxStyle.height = '100px';\n\t\tboxStyle.overflow = 'scroll';\n\n\t\tbody.appendChild(box);\n\n\t\twidth = box.offsetWidth - box.clientWidth;\n\n\t\tbody.removeChild(box);\n\n\t\treturn width;\n\t}\n\n\treturn scrollbarWidth;\n}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc2Nyb2xsYmFyd2lkdGgvc2Nyb2xsYmFyV2lkdGguanM/NTBmYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0EsS0FBSyxJQUEwQztBQUMvQyxFQUFFLGlDQUFPLEVBQUUsb0NBQUUsT0FBTztBQUFBO0FBQUE7QUFBQSxvR0FBQztBQUNyQixFQUFFLE1BQU0sRUFJTjtBQUNGLENBQUM7QUFDRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3Njcm9sbGJhcndpZHRoL3Njcm9sbGJhcldpZHRoLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyohIHNjcm9sbGJhcldpZHRoLmpzIHYwLjEuMyB8IGZlbGl4ZXh0ZXIgfCBNSVQgfCBodHRwczovL2dpdGh1Yi5jb20vZmVsaXhleHRlci9zY3JvbGxiYXJXaWR0aCAqL1xuKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG5cdGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHR9IGVsc2Uge1xuXHRcdChyb290LmpRdWVyeSB8fCByb290KS5zY3JvbGxiYXJXaWR0aCA9IGZhY3RvcnkoKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoKSB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHRmdW5jdGlvbiBzY3JvbGxiYXJXaWR0aCgpIHtcblx0XHRpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykge1xuXHRcdFx0cmV0dXJuIDBcblx0XHR9XG5cblx0XHR2YXJcblx0XHRcdGJvZHkgPSBkb2N1bWVudC5ib2R5LFxuXHRcdFx0Ym94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksXG5cdFx0XHRib3hTdHlsZSA9IGJveC5zdHlsZSxcblx0XHRcdHdpZHRoO1xuXG5cdFx0Ym94U3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuXHRcdGJveFN0eWxlLnRvcCA9IGJveFN0eWxlLmxlZnQgPSAnLTk5OTlweCc7XG5cdFx0Ym94U3R5bGUud2lkdGggPSBib3hTdHlsZS5oZWlnaHQgPSAnMTAwcHgnO1xuXHRcdGJveFN0eWxlLm92ZXJmbG93ID0gJ3Njcm9sbCc7XG5cblx0XHRib2R5LmFwcGVuZENoaWxkKGJveCk7XG5cblx0XHR3aWR0aCA9IGJveC5vZmZzZXRXaWR0aCAtIGJveC5jbGllbnRXaWR0aDtcblxuXHRcdGJvZHkucmVtb3ZlQ2hpbGQoYm94KTtcblxuXHRcdHJldHVybiB3aWR0aDtcblx0fVxuXG5cdHJldHVybiBzY3JvbGxiYXJXaWR0aDtcbn0pKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/scrollbarwidth/scrollbarWidth.js\n"); + +/***/ }), + +/***/ "./node_modules/simplebar/dist/simplebar.esm.js": +/*!******************************************************!*\ + !*** ./node_modules/simplebar/dist/simplebar.esm.js ***! + \******************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es6.regexp.replace */ \"./node_modules/core-js/modules/es6.regexp.replace.js\");\n/* harmony import */ var core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es6_function_name__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es6.function.name */ \"./node_modules/core-js/modules/es6.function.name.js\");\n/* harmony import */ var core_js_modules_es6_function_name__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_function_name__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es6_regexp_match__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es6.regexp.match */ \"./node_modules/core-js/modules/es6.regexp.match.js\");\n/* harmony import */ var core_js_modules_es6_regexp_match__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_regexp_match__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/web.dom.iterable */ \"./node_modules/core-js/modules/web.dom.iterable.js\");\n/* harmony import */ var core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var core_js_modules_es6_string_iterator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es6.string.iterator */ \"./node_modules/core-js/modules/es6.string.iterator.js\");\n/* harmony import */ var core_js_modules_es6_string_iterator__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_string_iterator__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var core_js_modules_es6_array_from__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es6.array.from */ \"./node_modules/core-js/modules/es6.array.from.js\");\n/* harmony import */ var core_js_modules_es6_array_from__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_array_from__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var scrollbarwidth__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! scrollbarwidth */ \"./node_modules/scrollbarwidth/scrollbarWidth.js\");\n/* harmony import */ var scrollbarwidth__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(scrollbarwidth__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var lodash_throttle__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! lodash.throttle */ \"./node_modules/lodash.throttle/index.js\");\n/* harmony import */ var lodash_throttle__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(lodash_throttle__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var lodash_debounce__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! lodash.debounce */ \"./node_modules/lodash.debounce/index.js\");\n/* harmony import */ var lodash_debounce__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(lodash_debounce__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var lodash_memoize__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! lodash.memoize */ \"./node_modules/lodash.memoize/index.js\");\n/* harmony import */ var lodash_memoize__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(lodash_memoize__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var resize_observer_polyfill__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! resize-observer-polyfill */ \"./node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js\");\n/* harmony import */ var can_use_dom__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! can-use-dom */ \"./node_modules/can-use-dom/index.js\");\n/* harmony import */ var can_use_dom__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(can_use_dom__WEBPACK_IMPORTED_MODULE_11__);\n/**\n * SimpleBar.js - v3.1.5\n * Scrollbars, simpler.\n * https://grsmto.github.io/simplebar/\n *\n * Made by Adrien Denat from a fork by Jonathan Nicol\n * Under MIT License\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n}\n\nvar SimpleBar =\n/*#__PURE__*/\nfunction () {\n function SimpleBar(element, options) {\n var _this = this;\n\n _classCallCheck(this, SimpleBar);\n\n this.onScroll = function () {\n if (!_this.scrollXTicking) {\n window.requestAnimationFrame(_this.scrollX);\n _this.scrollXTicking = true;\n }\n\n if (!_this.scrollYTicking) {\n window.requestAnimationFrame(_this.scrollY);\n _this.scrollYTicking = true;\n }\n };\n\n this.scrollX = function () {\n if (_this.axis.x.isOverflowing) {\n _this.showScrollbar('x');\n\n _this.positionScrollbar('x');\n }\n\n _this.scrollXTicking = false;\n };\n\n this.scrollY = function () {\n if (_this.axis.y.isOverflowing) {\n _this.showScrollbar('y');\n\n _this.positionScrollbar('y');\n }\n\n _this.scrollYTicking = false;\n };\n\n this.onMouseEnter = function () {\n _this.showScrollbar('x');\n\n _this.showScrollbar('y');\n };\n\n this.onMouseMove = function (e) {\n _this.mouseX = e.clientX;\n _this.mouseY = e.clientY;\n\n if (_this.axis.x.isOverflowing || _this.axis.x.forceVisible) {\n _this.onMouseMoveForAxis('x');\n }\n\n if (_this.axis.y.isOverflowing || _this.axis.y.forceVisible) {\n _this.onMouseMoveForAxis('y');\n }\n };\n\n this.onMouseLeave = function () {\n _this.onMouseMove.cancel();\n\n if (_this.axis.x.isOverflowing || _this.axis.x.forceVisible) {\n _this.onMouseLeaveForAxis('x');\n }\n\n if (_this.axis.y.isOverflowing || _this.axis.y.forceVisible) {\n _this.onMouseLeaveForAxis('y');\n }\n\n _this.mouseX = -1;\n _this.mouseY = -1;\n };\n\n this.onWindowResize = function () {\n // Recalculate scrollbarWidth in case it's a zoom\n _this.scrollbarWidth = scrollbarwidth__WEBPACK_IMPORTED_MODULE_6___default()();\n\n _this.hideNativeScrollbar();\n };\n\n this.hideScrollbars = function () {\n _this.axis.x.track.rect = _this.axis.x.track.el.getBoundingClientRect();\n _this.axis.y.track.rect = _this.axis.y.track.el.getBoundingClientRect();\n\n if (!_this.isWithinBounds(_this.axis.y.track.rect)) {\n _this.axis.y.scrollbar.el.classList.remove(_this.classNames.visible);\n\n _this.axis.y.isVisible = false;\n }\n\n if (!_this.isWithinBounds(_this.axis.x.track.rect)) {\n _this.axis.x.scrollbar.el.classList.remove(_this.classNames.visible);\n\n _this.axis.x.isVisible = false;\n }\n };\n\n this.onPointerEvent = function (e) {\n var isWithinBoundsY, isWithinBoundsX;\n _this.axis.x.scrollbar.rect = _this.axis.x.scrollbar.el.getBoundingClientRect();\n _this.axis.y.scrollbar.rect = _this.axis.y.scrollbar.el.getBoundingClientRect();\n\n if (_this.axis.x.isOverflowing || _this.axis.x.forceVisible) {\n isWithinBoundsX = _this.isWithinBounds(_this.axis.x.scrollbar.rect);\n }\n\n if (_this.axis.y.isOverflowing || _this.axis.y.forceVisible) {\n isWithinBoundsY = _this.isWithinBounds(_this.axis.y.scrollbar.rect);\n } // If any pointer event is called on the scrollbar\n\n\n if (isWithinBoundsY || isWithinBoundsX) {\n // Preventing the event's default action stops text being\n // selectable during the drag.\n e.preventDefault(); // Prevent event leaking\n\n e.stopPropagation();\n\n if (e.type === 'mousedown') {\n if (isWithinBoundsY) {\n _this.onDragStart(e, 'y');\n }\n\n if (isWithinBoundsX) {\n _this.onDragStart(e, 'x');\n }\n }\n }\n };\n\n this.drag = function (e) {\n var eventOffset;\n var track = _this.axis[_this.draggedAxis].track;\n var trackSize = track.rect[_this.axis[_this.draggedAxis].sizeAttr];\n var scrollbar = _this.axis[_this.draggedAxis].scrollbar;\n e.preventDefault();\n e.stopPropagation();\n\n if (_this.draggedAxis === 'y') {\n eventOffset = e.pageY;\n } else {\n eventOffset = e.pageX;\n } // Calculate how far the user's mouse is from the top/left of the scrollbar (minus the dragOffset).\n\n\n var dragPos = eventOffset - track.rect[_this.axis[_this.draggedAxis].offsetAttr] - _this.axis[_this.draggedAxis].dragOffset; // Convert the mouse position into a percentage of the scrollbar height/width.\n\n var dragPerc = dragPos / track.rect[_this.axis[_this.draggedAxis].sizeAttr]; // Scroll the content by the same percentage.\n\n var scrollPos = dragPerc * _this.contentEl[_this.axis[_this.draggedAxis].scrollSizeAttr]; // Fix browsers inconsistency on RTL\n\n if (_this.draggedAxis === 'x') {\n scrollPos = _this.isRtl && SimpleBar.getRtlHelpers().isRtlScrollbarInverted ? scrollPos - (trackSize + scrollbar.size) : scrollPos;\n scrollPos = _this.isRtl && SimpleBar.getRtlHelpers().isRtlScrollingInverted ? -scrollPos : scrollPos;\n }\n\n _this.contentEl[_this.axis[_this.draggedAxis].scrollOffsetAttr] = scrollPos;\n };\n\n this.onEndDrag = function (e) {\n e.preventDefault();\n e.stopPropagation();\n\n _this.el.classList.remove(_this.classNames.dragging);\n\n document.removeEventListener('mousemove', _this.drag);\n document.removeEventListener('mouseup', _this.onEndDrag);\n };\n\n this.el = element;\n this.flashTimeout;\n this.contentEl;\n this.offsetEl;\n this.maskEl;\n this.globalObserver;\n this.mutationObserver;\n this.resizeObserver;\n this.scrollbarWidth;\n this.minScrollbarWidth = 20;\n this.options = _objectSpread({}, SimpleBar.defaultOptions, options);\n this.classNames = _objectSpread({}, SimpleBar.defaultOptions.classNames, this.options.classNames);\n this.isRtl;\n this.axis = {\n x: {\n scrollOffsetAttr: 'scrollLeft',\n sizeAttr: 'width',\n scrollSizeAttr: 'scrollWidth',\n offsetAttr: 'left',\n overflowAttr: 'overflowX',\n dragOffset: 0,\n isOverflowing: true,\n isVisible: false,\n forceVisible: false,\n track: {},\n scrollbar: {}\n },\n y: {\n scrollOffsetAttr: 'scrollTop',\n sizeAttr: 'height',\n scrollSizeAttr: 'scrollHeight',\n offsetAttr: 'top',\n overflowAttr: 'overflowY',\n dragOffset: 0,\n isOverflowing: true,\n isVisible: false,\n forceVisible: false,\n track: {},\n scrollbar: {}\n }\n };\n this.recalculate = lodash_throttle__WEBPACK_IMPORTED_MODULE_7___default()(this.recalculate.bind(this), 64);\n this.onMouseMove = lodash_throttle__WEBPACK_IMPORTED_MODULE_7___default()(this.onMouseMove.bind(this), 64);\n this.hideScrollbars = lodash_debounce__WEBPACK_IMPORTED_MODULE_8___default()(this.hideScrollbars.bind(this), this.options.timeout);\n this.onWindowResize = lodash_debounce__WEBPACK_IMPORTED_MODULE_8___default()(this.onWindowResize.bind(this), 64, {\n leading: true\n });\n SimpleBar.getRtlHelpers = lodash_memoize__WEBPACK_IMPORTED_MODULE_9___default()(SimpleBar.getRtlHelpers); // getContentElement is deprecated\n\n this.getContentElement = this.getScrollElement;\n this.init();\n }\n /**\n * Static properties\n */\n\n /**\n * Helper to fix browsers inconsistency on RTL:\n * - Firefox inverts the scrollbar initial position\n * - IE11 inverts both scrollbar position and scrolling offset\n * Directly inspired by @KingSora's OverlayScrollbars https://github.com/KingSora/OverlayScrollbars/blob/master/js/OverlayScrollbars.js#L1634\n */\n\n\n _createClass(SimpleBar, [{\n key: \"init\",\n value: function init() {\n // Save a reference to the instance, so we know this DOM node has already been instancied\n this.el.SimpleBar = this; // We stop here on server-side\n\n if (can_use_dom__WEBPACK_IMPORTED_MODULE_11___default.a) {\n this.initDOM();\n this.scrollbarWidth = scrollbarwidth__WEBPACK_IMPORTED_MODULE_6___default()();\n this.recalculate();\n this.initListeners();\n }\n }\n }, {\n key: \"initDOM\",\n value: function initDOM() {\n var _this2 = this;\n\n // make sure this element doesn't have the elements yet\n if (Array.from(this.el.children).filter(function (child) {\n return child.classList.contains(_this2.classNames.wrapper);\n }).length) {\n // assume that element has his DOM already initiated\n this.wrapperEl = this.el.querySelector(\".\".concat(this.classNames.wrapper));\n this.contentEl = this.el.querySelector(\".\".concat(this.classNames.content));\n this.offsetEl = this.el.querySelector(\".\".concat(this.classNames.offset));\n this.maskEl = this.el.querySelector(\".\".concat(this.classNames.mask));\n this.placeholderEl = this.el.querySelector(\".\".concat(this.classNames.placeholder));\n this.heightAutoObserverWrapperEl = this.el.querySelector(\".\".concat(this.classNames.heightAutoObserverWrapperEl));\n this.heightAutoObserverEl = this.el.querySelector(\".\".concat(this.classNames.heightAutoObserverEl));\n this.axis.x.track.el = this.el.querySelector(\".\".concat(this.classNames.track, \".\").concat(this.classNames.horizontal));\n this.axis.y.track.el = this.el.querySelector(\".\".concat(this.classNames.track, \".\").concat(this.classNames.vertical));\n } else {\n // Prepare DOM\n this.wrapperEl = document.createElement('div');\n this.contentEl = document.createElement('div');\n this.offsetEl = document.createElement('div');\n this.maskEl = document.createElement('div');\n this.placeholderEl = document.createElement('div');\n this.heightAutoObserverWrapperEl = document.createElement('div');\n this.heightAutoObserverEl = document.createElement('div');\n this.wrapperEl.classList.add(this.classNames.wrapper);\n this.contentEl.classList.add(this.classNames.content);\n this.offsetEl.classList.add(this.classNames.offset);\n this.maskEl.classList.add(this.classNames.mask);\n this.placeholderEl.classList.add(this.classNames.placeholder);\n this.heightAutoObserverWrapperEl.classList.add(this.classNames.heightAutoObserverWrapperEl);\n this.heightAutoObserverEl.classList.add(this.classNames.heightAutoObserverEl);\n\n while (this.el.firstChild) {\n this.contentEl.appendChild(this.el.firstChild);\n }\n\n this.offsetEl.appendChild(this.contentEl);\n this.maskEl.appendChild(this.offsetEl);\n this.heightAutoObserverWrapperEl.appendChild(this.heightAutoObserverEl);\n this.wrapperEl.appendChild(this.heightAutoObserverWrapperEl);\n this.wrapperEl.appendChild(this.maskEl);\n this.wrapperEl.appendChild(this.placeholderEl);\n this.el.appendChild(this.wrapperEl);\n }\n\n if (!this.axis.x.track.el || !this.axis.y.track.el) {\n var track = document.createElement('div');\n var scrollbar = document.createElement('div');\n track.classList.add(this.classNames.track);\n scrollbar.classList.add(this.classNames.scrollbar);\n track.appendChild(scrollbar);\n this.axis.x.track.el = track.cloneNode(true);\n this.axis.x.track.el.classList.add(this.classNames.horizontal);\n this.axis.y.track.el = track.cloneNode(true);\n this.axis.y.track.el.classList.add(this.classNames.vertical);\n this.el.appendChild(this.axis.x.track.el);\n this.el.appendChild(this.axis.y.track.el);\n }\n\n this.axis.x.scrollbar.el = this.axis.x.track.el.querySelector(\".\".concat(this.classNames.scrollbar));\n this.axis.y.scrollbar.el = this.axis.y.track.el.querySelector(\".\".concat(this.classNames.scrollbar));\n\n if (!this.options.autoHide) {\n this.axis.x.scrollbar.el.classList.add(this.classNames.visible);\n this.axis.y.scrollbar.el.classList.add(this.classNames.visible);\n }\n\n this.el.setAttribute('data-simplebar', 'init');\n }\n }, {\n key: \"initListeners\",\n value: function initListeners() {\n var _this3 = this;\n\n // Event listeners\n if (this.options.autoHide) {\n this.el.addEventListener('mouseenter', this.onMouseEnter);\n }\n\n ['mousedown', 'click', 'dblclick', 'touchstart', 'touchend', 'touchmove'].forEach(function (e) {\n _this3.el.addEventListener(e, _this3.onPointerEvent, true);\n });\n this.el.addEventListener('mousemove', this.onMouseMove);\n this.el.addEventListener('mouseleave', this.onMouseLeave);\n this.contentEl.addEventListener('scroll', this.onScroll); // Browser zoom triggers a window resize\n\n window.addEventListener('resize', this.onWindowResize); // MutationObserver is IE11+\n\n if (typeof MutationObserver !== 'undefined') {\n // create an observer instance\n this.mutationObserver = new MutationObserver(function (mutations) {\n mutations.forEach(function (mutation) {\n if (mutation.target === _this3.contentEl || _this3.isChildNode(mutation.target) || mutation.addedNodes.length || mutation.removedNodes.length) {\n _this3.recalculate();\n }\n });\n });\n this.mutationObserver.observe(this.contentEl, {\n attributes: true,\n childList: true,\n characterData: true,\n subtree: true\n });\n }\n\n this.resizeObserver = new resize_observer_polyfill__WEBPACK_IMPORTED_MODULE_10__[\"default\"](this.recalculate);\n this.resizeObserver.observe(this.el);\n }\n }, {\n key: \"recalculate\",\n value: function recalculate() {\n var isHeightAuto = this.heightAutoObserverEl.offsetHeight <= 1;\n this.elStyles = window.getComputedStyle(this.el);\n this.isRtl = this.elStyles.direction === 'rtl';\n this.contentEl.style.padding = \"\".concat(this.elStyles.paddingTop, \" \").concat(this.elStyles.paddingRight, \" \").concat(this.elStyles.paddingBottom, \" \").concat(this.elStyles.paddingLeft);\n this.contentEl.style.height = isHeightAuto ? 'auto' : '100%';\n this.placeholderEl.style.width = \"\".concat(this.contentEl.scrollWidth, \"px\");\n this.placeholderEl.style.height = \"\".concat(this.contentEl.scrollHeight, \"px\");\n this.wrapperEl.style.margin = \"-\".concat(this.elStyles.paddingTop, \" -\").concat(this.elStyles.paddingRight, \" -\").concat(this.elStyles.paddingBottom, \" -\").concat(this.elStyles.paddingLeft);\n this.axis.x.track.rect = this.axis.x.track.el.getBoundingClientRect();\n this.axis.y.track.rect = this.axis.y.track.el.getBoundingClientRect(); // Set isOverflowing to false if scrollbar is not necessary (content is shorter than offset)\n\n this.axis.x.isOverflowing = (this.scrollbarWidth ? this.contentEl.scrollWidth : this.contentEl.scrollWidth - this.minScrollbarWidth) > Math.ceil(this.axis.x.track.rect.width);\n this.axis.y.isOverflowing = (this.scrollbarWidth ? this.contentEl.scrollHeight : this.contentEl.scrollHeight - this.minScrollbarWidth) > Math.ceil(this.axis.y.track.rect.height); // Set isOverflowing to false if user explicitely set hidden overflow\n\n this.axis.x.isOverflowing = this.elStyles.overflowX === 'hidden' ? false : this.axis.x.isOverflowing;\n this.axis.y.isOverflowing = this.elStyles.overflowY === 'hidden' ? false : this.axis.y.isOverflowing;\n this.axis.x.forceVisible = this.options.forceVisible === \"x\" || this.options.forceVisible === true;\n this.axis.y.forceVisible = this.options.forceVisible === \"y\" || this.options.forceVisible === true;\n this.axis.x.scrollbar.size = this.getScrollbarSize('x');\n this.axis.y.scrollbar.size = this.getScrollbarSize('y');\n this.axis.x.scrollbar.el.style.width = \"\".concat(this.axis.x.scrollbar.size, \"px\");\n this.axis.y.scrollbar.el.style.height = \"\".concat(this.axis.y.scrollbar.size, \"px\");\n this.positionScrollbar('x');\n this.positionScrollbar('y');\n this.toggleTrackVisibility('x');\n this.toggleTrackVisibility('y');\n this.hideNativeScrollbar();\n }\n /**\n * Calculate scrollbar size\n */\n\n }, {\n key: \"getScrollbarSize\",\n value: function getScrollbarSize() {\n var axis = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'y';\n var contentSize = this.scrollbarWidth ? this.contentEl[this.axis[axis].scrollSizeAttr] : this.contentEl[this.axis[axis].scrollSizeAttr] - this.minScrollbarWidth;\n var trackSize = this.axis[axis].track.rect[this.axis[axis].sizeAttr];\n var scrollbarSize;\n\n if (!this.axis[axis].isOverflowing) {\n return;\n }\n\n var scrollbarRatio = trackSize / contentSize; // Calculate new height/position of drag handle.\n\n scrollbarSize = Math.max(~~(scrollbarRatio * trackSize), this.options.scrollbarMinSize);\n\n if (this.options.scrollbarMaxSize) {\n scrollbarSize = Math.min(scrollbarSize, this.options.scrollbarMaxSize);\n }\n\n return scrollbarSize;\n }\n }, {\n key: \"positionScrollbar\",\n value: function positionScrollbar() {\n var axis = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'y';\n var contentSize = this.contentEl[this.axis[axis].scrollSizeAttr];\n var trackSize = this.axis[axis].track.rect[this.axis[axis].sizeAttr];\n var hostSize = parseInt(this.elStyles[this.axis[axis].sizeAttr], 10);\n var scrollbar = this.axis[axis].scrollbar;\n var scrollOffset = this.contentEl[this.axis[axis].scrollOffsetAttr];\n scrollOffset = axis === 'x' && this.isRtl && SimpleBar.getRtlHelpers().isRtlScrollingInverted ? -scrollOffset : scrollOffset;\n var scrollPourcent = scrollOffset / (contentSize - hostSize);\n var handleOffset = ~~((trackSize - scrollbar.size) * scrollPourcent);\n handleOffset = axis === 'x' && this.isRtl && SimpleBar.getRtlHelpers().isRtlScrollbarInverted ? handleOffset + (trackSize - scrollbar.size) : handleOffset;\n scrollbar.el.style.transform = axis === 'x' ? \"translate3d(\".concat(handleOffset, \"px, 0, 0)\") : \"translate3d(0, \".concat(handleOffset, \"px, 0)\");\n }\n }, {\n key: \"toggleTrackVisibility\",\n value: function toggleTrackVisibility() {\n var axis = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'y';\n var track = this.axis[axis].track.el;\n var scrollbar = this.axis[axis].scrollbar.el;\n\n if (this.axis[axis].isOverflowing || this.axis[axis].forceVisible) {\n track.style.visibility = 'visible';\n this.contentEl.style[this.axis[axis].overflowAttr] = 'scroll';\n } else {\n track.style.visibility = 'hidden';\n this.contentEl.style[this.axis[axis].overflowAttr] = 'hidden';\n } // Even if forceVisible is enabled, scrollbar itself should be hidden\n\n\n if (this.axis[axis].isOverflowing) {\n scrollbar.style.visibility = 'visible';\n } else {\n scrollbar.style.visibility = 'hidden';\n }\n }\n }, {\n key: \"hideNativeScrollbar\",\n value: function hideNativeScrollbar() {\n this.offsetEl.style[this.isRtl ? 'left' : 'right'] = this.axis.y.isOverflowing || this.axis.y.forceVisible ? \"-\".concat(this.scrollbarWidth || this.minScrollbarWidth, \"px\") : 0;\n this.offsetEl.style.bottom = this.axis.x.isOverflowing || this.axis.x.forceVisible ? \"-\".concat(this.scrollbarWidth || this.minScrollbarWidth, \"px\") : 0; // If floating scrollbar\n\n if (!this.scrollbarWidth) {\n var paddingDirection = [this.isRtl ? 'paddingLeft' : 'paddingRight'];\n this.contentEl.style[paddingDirection] = this.axis.y.isOverflowing || this.axis.y.forceVisible ? \"calc(\".concat(this.elStyles[paddingDirection], \" + \").concat(this.minScrollbarWidth, \"px)\") : this.elStyles[paddingDirection];\n this.contentEl.style.paddingBottom = this.axis.x.isOverflowing || this.axis.x.forceVisible ? \"calc(\".concat(this.elStyles.paddingBottom, \" + \").concat(this.minScrollbarWidth, \"px)\") : this.elStyles.paddingBottom;\n }\n }\n /**\n * On scroll event handling\n */\n\n }, {\n key: \"onMouseMoveForAxis\",\n value: function onMouseMoveForAxis() {\n var axis = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'y';\n this.axis[axis].track.rect = this.axis[axis].track.el.getBoundingClientRect();\n this.axis[axis].scrollbar.rect = this.axis[axis].scrollbar.el.getBoundingClientRect();\n var isWithinScrollbarBoundsX = this.isWithinBounds(this.axis[axis].scrollbar.rect);\n\n if (isWithinScrollbarBoundsX) {\n this.axis[axis].scrollbar.el.classList.add(this.classNames.hover);\n } else {\n this.axis[axis].scrollbar.el.classList.remove(this.classNames.hover);\n }\n\n if (this.isWithinBounds(this.axis[axis].track.rect)) {\n this.showScrollbar(axis);\n this.axis[axis].track.el.classList.add(this.classNames.hover);\n } else {\n this.axis[axis].track.el.classList.remove(this.classNames.hover);\n }\n }\n }, {\n key: \"onMouseLeaveForAxis\",\n value: function onMouseLeaveForAxis() {\n var axis = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'y';\n this.axis[axis].track.el.classList.remove(this.classNames.hover);\n this.axis[axis].scrollbar.el.classList.remove(this.classNames.hover);\n }\n }, {\n key: \"showScrollbar\",\n\n /**\n * Show scrollbar\n */\n value: function showScrollbar() {\n var axis = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'y';\n var scrollbar = this.axis[axis].scrollbar.el;\n\n if (!this.axis[axis].isVisible) {\n scrollbar.classList.add(this.classNames.visible);\n this.axis[axis].isVisible = true;\n }\n\n if (this.options.autoHide) {\n this.hideScrollbars();\n }\n }\n /**\n * Hide Scrollbar\n */\n\n }, {\n key: \"onDragStart\",\n\n /**\n * on scrollbar handle drag movement starts\n */\n value: function onDragStart(e) {\n var axis = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'y';\n var scrollbar = this.axis[axis].scrollbar.el; // Measure how far the user's mouse is from the top of the scrollbar drag handle.\n\n var eventOffset = axis === 'y' ? e.pageY : e.pageX;\n this.axis[axis].dragOffset = eventOffset - scrollbar.getBoundingClientRect()[this.axis[axis].offsetAttr];\n this.draggedAxis = axis;\n this.el.classList.add(this.classNames.dragging);\n document.addEventListener('mousemove', this.drag);\n document.addEventListener('mouseup', this.onEndDrag);\n }\n /**\n * Drag scrollbar handle\n */\n\n }, {\n key: \"getScrollElement\",\n\n /**\n * Getter for original scrolling element\n */\n value: function getScrollElement() {\n return this.contentEl;\n }\n }, {\n key: \"removeListeners\",\n value: function removeListeners() {\n var _this4 = this;\n\n // Event listeners\n if (this.options.autoHide) {\n this.el.removeEventListener('mouseenter', this.onMouseEnter);\n }\n\n ['mousedown', 'click', 'dblclick', 'touchstart', 'touchend', 'touchmove'].forEach(function (e) {\n _this4.el.removeEventListener(e, _this4.onPointerEvent);\n });\n this.el.removeEventListener('mousemove', this.onMouseMove);\n this.el.removeEventListener('mouseleave', this.onMouseLeave);\n this.contentEl.removeEventListener('scroll', this.onScroll);\n window.removeEventListener('resize', this.onWindowResize);\n this.mutationObserver && this.mutationObserver.disconnect();\n this.resizeObserver.disconnect(); // Cancel all debounced functions\n\n this.recalculate.cancel();\n this.onMouseMove.cancel();\n this.hideScrollbars.cancel();\n this.onWindowResize.cancel();\n }\n /**\n * UnMount mutation observer and delete SimpleBar instance from DOM element\n */\n\n }, {\n key: \"unMount\",\n value: function unMount() {\n this.removeListeners();\n this.el.SimpleBar = null;\n }\n /**\n * Recursively walks up the parent nodes looking for this.el\n */\n\n }, {\n key: \"isChildNode\",\n value: function isChildNode(el) {\n if (el === null) return false;\n if (el === this.el) return true;\n return this.isChildNode(el.parentNode);\n }\n /**\n * Check if mouse is within bounds\n */\n\n }, {\n key: \"isWithinBounds\",\n value: function isWithinBounds(bbox) {\n return this.mouseX >= bbox.left && this.mouseX <= bbox.left + bbox.width && this.mouseY >= bbox.top && this.mouseY <= bbox.top + bbox.height;\n }\n }], [{\n key: \"getRtlHelpers\",\n value: function getRtlHelpers() {\n var dummyDiv = document.createElement('div');\n dummyDiv.innerHTML = '<div class=\"hs-dummy-scrollbar-size\"><div style=\"height: 200%; width: 200%; margin: 10px 0;\"></div></div>';\n var scrollbarDummyEl = dummyDiv.firstElementChild;\n document.body.appendChild(scrollbarDummyEl);\n var dummyContainerChild = scrollbarDummyEl.firstElementChild;\n scrollbarDummyEl.scrollLeft = 0;\n var dummyContainerOffset = SimpleBar.getOffset(scrollbarDummyEl);\n var dummyContainerChildOffset = SimpleBar.getOffset(dummyContainerChild);\n scrollbarDummyEl.scrollLeft = 999;\n var dummyContainerScrollOffsetAfterScroll = SimpleBar.getOffset(dummyContainerChild);\n return {\n // determines if the scrolling is responding with negative values\n isRtlScrollingInverted: dummyContainerOffset.left !== dummyContainerChildOffset.left && dummyContainerChildOffset.left - dummyContainerScrollOffsetAfterScroll.left !== 0,\n // determines if the origin scrollbar position is inverted or not (positioned on left or right)\n isRtlScrollbarInverted: dummyContainerOffset.left !== dummyContainerChildOffset.left\n };\n }\n }, {\n key: \"initHtmlApi\",\n value: function initHtmlApi() {\n this.initDOMLoadedElements = this.initDOMLoadedElements.bind(this); // MutationObserver is IE11+\n\n if (typeof MutationObserver !== 'undefined') {\n // Mutation observer to observe dynamically added elements\n this.globalObserver = new MutationObserver(function (mutations) {\n mutations.forEach(function (mutation) {\n Array.from(mutation.addedNodes).forEach(function (addedNode) {\n if (addedNode.nodeType === 1) {\n if (addedNode.hasAttribute('data-simplebar')) {\n !addedNode.SimpleBar && new SimpleBar(addedNode, SimpleBar.getElOptions(addedNode));\n } else {\n Array.from(addedNode.querySelectorAll('[data-simplebar]')).forEach(function (el) {\n !el.SimpleBar && new SimpleBar(el, SimpleBar.getElOptions(el));\n });\n }\n }\n });\n Array.from(mutation.removedNodes).forEach(function (removedNode) {\n if (removedNode.nodeType === 1) {\n if (removedNode.hasAttribute('data-simplebar')) {\n removedNode.SimpleBar && removedNode.SimpleBar.unMount();\n } else {\n Array.from(removedNode.querySelectorAll('[data-simplebar]')).forEach(function (el) {\n el.SimpleBar && el.SimpleBar.unMount();\n });\n }\n }\n });\n });\n });\n this.globalObserver.observe(document, {\n childList: true,\n subtree: true\n });\n } // Taken from jQuery `ready` function\n // Instantiate elements already present on the page\n\n\n if (document.readyState === 'complete' || document.readyState !== 'loading' && !document.documentElement.doScroll) {\n // Handle it asynchronously to allow scripts the opportunity to delay init\n window.setTimeout(this.initDOMLoadedElements);\n } else {\n document.addEventListener('DOMContentLoaded', this.initDOMLoadedElements);\n window.addEventListener('load', this.initDOMLoadedElements);\n }\n } // Helper function to retrieve options from element attributes\n\n }, {\n key: \"getElOptions\",\n value: function getElOptions(el) {\n var options = Array.from(el.attributes).reduce(function (acc, attribute) {\n var option = attribute.name.match(/data-simplebar-(.+)/);\n\n if (option) {\n var key = option[1].replace(/\\W+(.)/g, function (x, chr) {\n return chr.toUpperCase();\n });\n\n switch (attribute.value) {\n case 'true':\n acc[key] = true;\n break;\n\n case 'false':\n acc[key] = false;\n break;\n\n case undefined:\n acc[key] = true;\n break;\n\n default:\n acc[key] = attribute.value;\n }\n }\n\n return acc;\n }, {});\n return options;\n }\n }, {\n key: \"removeObserver\",\n value: function removeObserver() {\n this.globalObserver.disconnect();\n }\n }, {\n key: \"initDOMLoadedElements\",\n value: function initDOMLoadedElements() {\n document.removeEventListener('DOMContentLoaded', this.initDOMLoadedElements);\n window.removeEventListener('load', this.initDOMLoadedElements);\n Array.from(document.querySelectorAll('[data-simplebar]')).forEach(function (el) {\n if (!el.SimpleBar) new SimpleBar(el, SimpleBar.getElOptions(el));\n });\n }\n }, {\n key: \"getOffset\",\n value: function getOffset(el) {\n var rect = el.getBoundingClientRect();\n return {\n top: rect.top + (window.pageYOffset || document.documentElement.scrollTop),\n left: rect.left + (window.pageXOffset || document.documentElement.scrollLeft)\n };\n }\n }]);\n\n return SimpleBar;\n}();\n/**\n * HTML API\n * Called only in a browser env.\n */\n\n\nSimpleBar.defaultOptions = {\n autoHide: true,\n forceVisible: false,\n classNames: {\n content: 'simplebar-content',\n offset: 'simplebar-offset',\n mask: 'simplebar-mask',\n wrapper: 'simplebar-wrapper',\n placeholder: 'simplebar-placeholder',\n scrollbar: 'simplebar-scrollbar',\n track: 'simplebar-track',\n heightAutoObserverWrapperEl: 'simplebar-height-auto-observer-wrapper',\n heightAutoObserverEl: 'simplebar-height-auto-observer',\n visible: 'simplebar-visible',\n horizontal: 'simplebar-horizontal',\n vertical: 'simplebar-vertical',\n hover: 'simplebar-hover',\n dragging: 'simplebar-dragging'\n },\n scrollbarMinSize: 25,\n scrollbarMaxSize: 0,\n timeout: 1000\n};\n\nif (can_use_dom__WEBPACK_IMPORTED_MODULE_11___default.a) {\n SimpleBar.initHtmlApi();\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (SimpleBar);\n//# sourceMappingURL=simplebar.esm.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc2ltcGxlYmFyL2Rpc3Qvc2ltcGxlYmFyLmVzbS5qcz9hNmY5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRTRDO0FBQ0Q7QUFDRDtBQUNBO0FBQ0c7QUFDTDtBQUNJO0FBQ0w7QUFDQTtBQUNGO0FBQ2lCO0FBQ2xCOztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLGtCQUFrQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIsc0JBQXNCO0FBQ3ZDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNkJBQTZCLHFEQUFjOztBQUUzQztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPOzs7QUFHUDtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTzs7O0FBR1Asa0lBQWtJOztBQUVsSSxrRkFBa0Y7O0FBRWxGLCtGQUErRjs7QUFFL0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DLHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHNEQUFRO0FBQy9CLHVCQUF1QixzREFBUTtBQUMvQiwwQkFBMEIsc0RBQVE7QUFDbEMsMEJBQTBCLHNEQUFRO0FBQ2xDO0FBQ0EsS0FBSztBQUNMLDhCQUE4QixxREFBTywwQkFBMEI7O0FBRS9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCOztBQUUvQixVQUFVLG1EQUFTO0FBQ25CO0FBQ0EsOEJBQThCLHFEQUFjO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsK0RBQStEOztBQUUvRCw2REFBNkQ7O0FBRTdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBLGdDQUFnQyxpRUFBYztBQUM5QztBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0RUFBNEU7O0FBRTVFO0FBQ0Esd0xBQXdMOztBQUV4TDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLG1EQUFtRDs7QUFFbkQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTzs7O0FBR1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsK0pBQStKOztBQUUvSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1EOztBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsMEZBQTBGLGFBQWEsZ0JBQWdCO0FBQ3ZIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EseUVBQXlFOztBQUV6RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsT0FBTyxJQUFJO0FBQ1g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJLG1EQUFTO0FBQ2I7QUFDQTs7QUFFZSx3RUFBUyxFQUFDO0FBQ3pCIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3NpbXBsZWJhci9kaXN0L3NpbXBsZWJhci5lc20uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNpbXBsZUJhci5qcyAtIHYzLjEuNVxuICogU2Nyb2xsYmFycywgc2ltcGxlci5cbiAqIGh0dHBzOi8vZ3JzbXRvLmdpdGh1Yi5pby9zaW1wbGViYXIvXG4gKlxuICogTWFkZSBieSBBZHJpZW4gRGVuYXQgZnJvbSBhIGZvcmsgYnkgSm9uYXRoYW4gTmljb2xcbiAqIFVuZGVyIE1JVCBMaWNlbnNlXG4gKi9cblxuaW1wb3J0ICdjb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5yZXBsYWNlJztcbmltcG9ydCAnY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5uYW1lJztcbmltcG9ydCAnY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAubWF0Y2gnO1xuaW1wb3J0ICdjb3JlLWpzL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZSc7XG5pbXBvcnQgJ2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJztcbmltcG9ydCAnY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5mcm9tJztcbmltcG9ydCBzY3JvbGxiYXJXaWR0aCBmcm9tICdzY3JvbGxiYXJ3aWR0aCc7XG5pbXBvcnQgdGhyb3R0bGUgZnJvbSAnbG9kYXNoLnRocm90dGxlJztcbmltcG9ydCBkZWJvdW5jZSBmcm9tICdsb2Rhc2guZGVib3VuY2UnO1xuaW1wb3J0IG1lbW9pemUgZnJvbSAnbG9kYXNoLm1lbW9pemUnO1xuaW1wb3J0IFJlc2l6ZU9ic2VydmVyIGZyb20gJ3Jlc2l6ZS1vYnNlcnZlci1wb2x5ZmlsbCc7XG5pbXBvcnQgY2FuVXNlRE9NIGZyb20gJ2Nhbi11c2UtZG9tJztcblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTtcbiAgICB2YXIgb3duS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG5cbiAgICBpZiAodHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG93bktleXMgPSBvd25LZXlzLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSkuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBzeW0pLmVudW1lcmFibGU7XG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgb3duS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxudmFyIFNpbXBsZUJhciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFNpbXBsZUJhcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTaW1wbGVCYXIpO1xuXG4gICAgdGhpcy5vblNjcm9sbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghX3RoaXMuc2Nyb2xsWFRpY2tpbmcpIHtcbiAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShfdGhpcy5zY3JvbGxYKTtcbiAgICAgICAgX3RoaXMuc2Nyb2xsWFRpY2tpbmcgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIV90aGlzLnNjcm9sbFlUaWNraW5nKSB7XG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX3RoaXMuc2Nyb2xsWSk7XG4gICAgICAgIF90aGlzLnNjcm9sbFlUaWNraW5nID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5zY3JvbGxYID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzLmF4aXMueC5pc092ZXJmbG93aW5nKSB7XG4gICAgICAgIF90aGlzLnNob3dTY3JvbGxiYXIoJ3gnKTtcblxuICAgICAgICBfdGhpcy5wb3NpdGlvblNjcm9sbGJhcigneCcpO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5zY3JvbGxYVGlja2luZyA9IGZhbHNlO1xuICAgIH07XG5cbiAgICB0aGlzLnNjcm9sbFkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXMuYXhpcy55LmlzT3ZlcmZsb3dpbmcpIHtcbiAgICAgICAgX3RoaXMuc2hvd1Njcm9sbGJhcigneScpO1xuXG4gICAgICAgIF90aGlzLnBvc2l0aW9uU2Nyb2xsYmFyKCd5Jyk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnNjcm9sbFlUaWNraW5nID0gZmFsc2U7XG4gICAgfTtcblxuICAgIHRoaXMub25Nb3VzZUVudGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2hvd1Njcm9sbGJhcigneCcpO1xuXG4gICAgICBfdGhpcy5zaG93U2Nyb2xsYmFyKCd5Jyk7XG4gICAgfTtcblxuICAgIHRoaXMub25Nb3VzZU1vdmUgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgX3RoaXMubW91c2VYID0gZS5jbGllbnRYO1xuICAgICAgX3RoaXMubW91c2VZID0gZS5jbGllbnRZO1xuXG4gICAgICBpZiAoX3RoaXMuYXhpcy54LmlzT3ZlcmZsb3dpbmcgfHwgX3RoaXMuYXhpcy54LmZvcmNlVmlzaWJsZSkge1xuICAgICAgICBfdGhpcy5vbk1vdXNlTW92ZUZvckF4aXMoJ3gnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKF90aGlzLmF4aXMueS5pc092ZXJmbG93aW5nIHx8IF90aGlzLmF4aXMueS5mb3JjZVZpc2libGUpIHtcbiAgICAgICAgX3RoaXMub25Nb3VzZU1vdmVGb3JBeGlzKCd5Jyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMub25Nb3VzZUxlYXZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMub25Nb3VzZU1vdmUuY2FuY2VsKCk7XG5cbiAgICAgIGlmIChfdGhpcy5heGlzLnguaXNPdmVyZmxvd2luZyB8fCBfdGhpcy5heGlzLnguZm9yY2VWaXNpYmxlKSB7XG4gICAgICAgIF90aGlzLm9uTW91c2VMZWF2ZUZvckF4aXMoJ3gnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKF90aGlzLmF4aXMueS5pc092ZXJmbG93aW5nIHx8IF90aGlzLmF4aXMueS5mb3JjZVZpc2libGUpIHtcbiAgICAgICAgX3RoaXMub25Nb3VzZUxlYXZlRm9yQXhpcygneScpO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5tb3VzZVggPSAtMTtcbiAgICAgIF90aGlzLm1vdXNlWSA9IC0xO1xuICAgIH07XG5cbiAgICB0aGlzLm9uV2luZG93UmVzaXplID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gUmVjYWxjdWxhdGUgc2Nyb2xsYmFyV2lkdGggaW4gY2FzZSBpdCdzIGEgem9vbVxuICAgICAgX3RoaXMuc2Nyb2xsYmFyV2lkdGggPSBzY3JvbGxiYXJXaWR0aCgpO1xuXG4gICAgICBfdGhpcy5oaWRlTmF0aXZlU2Nyb2xsYmFyKCk7XG4gICAgfTtcblxuICAgIHRoaXMuaGlkZVNjcm9sbGJhcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5heGlzLngudHJhY2sucmVjdCA9IF90aGlzLmF4aXMueC50cmFjay5lbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIF90aGlzLmF4aXMueS50cmFjay5yZWN0ID0gX3RoaXMuYXhpcy55LnRyYWNrLmVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICBpZiAoIV90aGlzLmlzV2l0aGluQm91bmRzKF90aGlzLmF4aXMueS50cmFjay5yZWN0KSkge1xuICAgICAgICBfdGhpcy5heGlzLnkuc2Nyb2xsYmFyLmVsLmNsYXNzTGlzdC5yZW1vdmUoX3RoaXMuY2xhc3NOYW1lcy52aXNpYmxlKTtcblxuICAgICAgICBfdGhpcy5heGlzLnkuaXNWaXNpYmxlID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICghX3RoaXMuaXNXaXRoaW5Cb3VuZHMoX3RoaXMuYXhpcy54LnRyYWNrLnJlY3QpKSB7XG4gICAgICAgIF90aGlzLmF4aXMueC5zY3JvbGxiYXIuZWwuY2xhc3NMaXN0LnJlbW92ZShfdGhpcy5jbGFzc05hbWVzLnZpc2libGUpO1xuXG4gICAgICAgIF90aGlzLmF4aXMueC5pc1Zpc2libGUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5vblBvaW50ZXJFdmVudCA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgaXNXaXRoaW5Cb3VuZHNZLCBpc1dpdGhpbkJvdW5kc1g7XG4gICAgICBfdGhpcy5heGlzLnguc2Nyb2xsYmFyLnJlY3QgPSBfdGhpcy5heGlzLnguc2Nyb2xsYmFyLmVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgX3RoaXMuYXhpcy55LnNjcm9sbGJhci5yZWN0ID0gX3RoaXMuYXhpcy55LnNjcm9sbGJhci5lbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgaWYgKF90aGlzLmF4aXMueC5pc092ZXJmbG93aW5nIHx8IF90aGlzLmF4aXMueC5mb3JjZVZpc2libGUpIHtcbiAgICAgICAgaXNXaXRoaW5Cb3VuZHNYID0gX3RoaXMuaXNXaXRoaW5Cb3VuZHMoX3RoaXMuYXhpcy54LnNjcm9sbGJhci5yZWN0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKF90aGlzLmF4aXMueS5pc092ZXJmbG93aW5nIHx8IF90aGlzLmF4aXMueS5mb3JjZVZpc2libGUpIHtcbiAgICAgICAgaXNXaXRoaW5Cb3VuZHNZID0gX3RoaXMuaXNXaXRoaW5Cb3VuZHMoX3RoaXMuYXhpcy55LnNjcm9sbGJhci5yZWN0KTtcbiAgICAgIH0gLy8gSWYgYW55IHBvaW50ZXIgZXZlbnQgaXMgY2FsbGVkIG9uIHRoZSBzY3JvbGxiYXJcblxuXG4gICAgICBpZiAoaXNXaXRoaW5Cb3VuZHNZIHx8IGlzV2l0aGluQm91bmRzWCkge1xuICAgICAgICAvLyBQcmV2ZW50aW5nIHRoZSBldmVudCdzIGRlZmF1bHQgYWN0aW9uIHN0b3BzIHRleHQgYmVpbmdcbiAgICAgICAgLy8gc2VsZWN0YWJsZSBkdXJpbmcgdGhlIGRyYWcuXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTsgLy8gUHJldmVudCBldmVudCBsZWFraW5nXG5cbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBpZiAoZS50eXBlID09PSAnbW91c2Vkb3duJykge1xuICAgICAgICAgIGlmIChpc1dpdGhpbkJvdW5kc1kpIHtcbiAgICAgICAgICAgIF90aGlzLm9uRHJhZ1N0YXJ0KGUsICd5Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGlzV2l0aGluQm91bmRzWCkge1xuICAgICAgICAgICAgX3RoaXMub25EcmFnU3RhcnQoZSwgJ3gnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5kcmFnID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciBldmVudE9mZnNldDtcbiAgICAgIHZhciB0cmFjayA9IF90aGlzLmF4aXNbX3RoaXMuZHJhZ2dlZEF4aXNdLnRyYWNrO1xuICAgICAgdmFyIHRyYWNrU2l6ZSA9IHRyYWNrLnJlY3RbX3RoaXMuYXhpc1tfdGhpcy5kcmFnZ2VkQXhpc10uc2l6ZUF0dHJdO1xuICAgICAgdmFyIHNjcm9sbGJhciA9IF90aGlzLmF4aXNbX3RoaXMuZHJhZ2dlZEF4aXNdLnNjcm9sbGJhcjtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgIGlmIChfdGhpcy5kcmFnZ2VkQXhpcyA9PT0gJ3knKSB7XG4gICAgICAgIGV2ZW50T2Zmc2V0ID0gZS5wYWdlWTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV2ZW50T2Zmc2V0ID0gZS5wYWdlWDtcbiAgICAgIH0gLy8gQ2FsY3VsYXRlIGhvdyBmYXIgdGhlIHVzZXIncyBtb3VzZSBpcyBmcm9tIHRoZSB0b3AvbGVmdCBvZiB0aGUgc2Nyb2xsYmFyIChtaW51cyB0aGUgZHJhZ09mZnNldCkuXG5cblxuICAgICAgdmFyIGRyYWdQb3MgPSBldmVudE9mZnNldCAtIHRyYWNrLnJlY3RbX3RoaXMuYXhpc1tfdGhpcy5kcmFnZ2VkQXhpc10ub2Zmc2V0QXR0cl0gLSBfdGhpcy5heGlzW190aGlzLmRyYWdnZWRBeGlzXS5kcmFnT2Zmc2V0OyAvLyBDb252ZXJ0IHRoZSBtb3VzZSBwb3NpdGlvbiBpbnRvIGEgcGVyY2VudGFnZSBvZiB0aGUgc2Nyb2xsYmFyIGhlaWdodC93aWR0aC5cblxuICAgICAgdmFyIGRyYWdQZXJjID0gZHJhZ1BvcyAvIHRyYWNrLnJlY3RbX3RoaXMuYXhpc1tfdGhpcy5kcmFnZ2VkQXhpc10uc2l6ZUF0dHJdOyAvLyBTY3JvbGwgdGhlIGNvbnRlbnQgYnkgdGhlIHNhbWUgcGVyY2VudGFnZS5cblxuICAgICAgdmFyIHNjcm9sbFBvcyA9IGRyYWdQZXJjICogX3RoaXMuY29udGVudEVsW190aGlzLmF4aXNbX3RoaXMuZHJhZ2dlZEF4aXNdLnNjcm9sbFNpemVBdHRyXTsgLy8gRml4IGJyb3dzZXJzIGluY29uc2lzdGVuY3kgb24gUlRMXG5cbiAgICAgIGlmIChfdGhpcy5kcmFnZ2VkQXhpcyA9PT0gJ3gnKSB7XG4gICAgICAgIHNjcm9sbFBvcyA9IF90aGlzLmlzUnRsICYmIFNpbXBsZUJhci5nZXRSdGxIZWxwZXJzKCkuaXNSdGxTY3JvbGxiYXJJbnZlcnRlZCA/IHNjcm9sbFBvcyAtICh0cmFja1NpemUgKyBzY3JvbGxiYXIuc2l6ZSkgOiBzY3JvbGxQb3M7XG4gICAgICAgIHNjcm9sbFBvcyA9IF90aGlzLmlzUnRsICYmIFNpbXBsZUJhci5nZXRSdGxIZWxwZXJzKCkuaXNSdGxTY3JvbGxpbmdJbnZlcnRlZCA/IC1zY3JvbGxQb3MgOiBzY3JvbGxQb3M7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmNvbnRlbnRFbFtfdGhpcy5heGlzW190aGlzLmRyYWdnZWRBeGlzXS5zY3JvbGxPZmZzZXRBdHRyXSA9IHNjcm9sbFBvcztcbiAgICB9O1xuXG4gICAgdGhpcy5vbkVuZERyYWcgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgX3RoaXMuZWwuY2xhc3NMaXN0LnJlbW92ZShfdGhpcy5jbGFzc05hbWVzLmRyYWdnaW5nKTtcblxuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgX3RoaXMuZHJhZyk7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgX3RoaXMub25FbmREcmFnKTtcbiAgICB9O1xuXG4gICAgdGhpcy5lbCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5mbGFzaFRpbWVvdXQ7XG4gICAgdGhpcy5jb250ZW50RWw7XG4gICAgdGhpcy5vZmZzZXRFbDtcbiAgICB0aGlzLm1hc2tFbDtcbiAgICB0aGlzLmdsb2JhbE9ic2VydmVyO1xuICAgIHRoaXMubXV0YXRpb25PYnNlcnZlcjtcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyO1xuICAgIHRoaXMuc2Nyb2xsYmFyV2lkdGg7XG4gICAgdGhpcy5taW5TY3JvbGxiYXJXaWR0aCA9IDIwO1xuICAgIHRoaXMub3B0aW9ucyA9IF9vYmplY3RTcHJlYWQoe30sIFNpbXBsZUJhci5kZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7XG4gICAgdGhpcy5jbGFzc05hbWVzID0gX29iamVjdFNwcmVhZCh7fSwgU2ltcGxlQmFyLmRlZmF1bHRPcHRpb25zLmNsYXNzTmFtZXMsIHRoaXMub3B0aW9ucy5jbGFzc05hbWVzKTtcbiAgICB0aGlzLmlzUnRsO1xuICAgIHRoaXMuYXhpcyA9IHtcbiAgICAgIHg6IHtcbiAgICAgICAgc2Nyb2xsT2Zmc2V0QXR0cjogJ3Njcm9sbExlZnQnLFxuICAgICAgICBzaXplQXR0cjogJ3dpZHRoJyxcbiAgICAgICAgc2Nyb2xsU2l6ZUF0dHI6ICdzY3JvbGxXaWR0aCcsXG4gICAgICAgIG9mZnNldEF0dHI6ICdsZWZ0JyxcbiAgICAgICAgb3ZlcmZsb3dBdHRyOiAnb3ZlcmZsb3dYJyxcbiAgICAgICAgZHJhZ09mZnNldDogMCxcbiAgICAgICAgaXNPdmVyZmxvd2luZzogdHJ1ZSxcbiAgICAgICAgaXNWaXNpYmxlOiBmYWxzZSxcbiAgICAgICAgZm9yY2VWaXNpYmxlOiBmYWxzZSxcbiAgICAgICAgdHJhY2s6IHt9LFxuICAgICAgICBzY3JvbGxiYXI6IHt9XG4gICAgICB9LFxuICAgICAgeToge1xuICAgICAgICBzY3JvbGxPZmZzZXRBdHRyOiAnc2Nyb2xsVG9wJyxcbiAgICAgICAgc2l6ZUF0dHI6ICdoZWlnaHQnLFxuICAgICAgICBzY3JvbGxTaXplQXR0cjogJ3Njcm9sbEhlaWdodCcsXG4gICAgICAgIG9mZnNldEF0dHI6ICd0b3AnLFxuICAgICAgICBvdmVyZmxvd0F0dHI6ICdvdmVyZmxvd1knLFxuICAgICAgICBkcmFnT2Zmc2V0OiAwLFxuICAgICAgICBpc092ZXJmbG93aW5nOiB0cnVlLFxuICAgICAgICBpc1Zpc2libGU6IGZhbHNlLFxuICAgICAgICBmb3JjZVZpc2libGU6IGZhbHNlLFxuICAgICAgICB0cmFjazoge30sXG4gICAgICAgIHNjcm9sbGJhcjoge31cbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMucmVjYWxjdWxhdGUgPSB0aHJvdHRsZSh0aGlzLnJlY2FsY3VsYXRlLmJpbmQodGhpcyksIDY0KTtcbiAgICB0aGlzLm9uTW91c2VNb3ZlID0gdGhyb3R0bGUodGhpcy5vbk1vdXNlTW92ZS5iaW5kKHRoaXMpLCA2NCk7XG4gICAgdGhpcy5oaWRlU2Nyb2xsYmFycyA9IGRlYm91bmNlKHRoaXMuaGlkZVNjcm9sbGJhcnMuYmluZCh0aGlzKSwgdGhpcy5vcHRpb25zLnRpbWVvdXQpO1xuICAgIHRoaXMub25XaW5kb3dSZXNpemUgPSBkZWJvdW5jZSh0aGlzLm9uV2luZG93UmVzaXplLmJpbmQodGhpcyksIDY0LCB7XG4gICAgICBsZWFkaW5nOiB0cnVlXG4gICAgfSk7XG4gICAgU2ltcGxlQmFyLmdldFJ0bEhlbHBlcnMgPSBtZW1vaXplKFNpbXBsZUJhci5nZXRSdGxIZWxwZXJzKTsgLy8gZ2V0Q29udGVudEVsZW1lbnQgaXMgZGVwcmVjYXRlZFxuXG4gICAgdGhpcy5nZXRDb250ZW50RWxlbWVudCA9IHRoaXMuZ2V0U2Nyb2xsRWxlbWVudDtcbiAgICB0aGlzLmluaXQoKTtcbiAgfVxuICAvKipcbiAgICogU3RhdGljIHByb3BlcnRpZXNcbiAgICovXG5cbiAgLyoqXG4gICAqIEhlbHBlciB0byBmaXggYnJvd3NlcnMgaW5jb25zaXN0ZW5jeSBvbiBSVEw6XG4gICAqICAtIEZpcmVmb3ggaW52ZXJ0cyB0aGUgc2Nyb2xsYmFyIGluaXRpYWwgcG9zaXRpb25cbiAgICogIC0gSUUxMSBpbnZlcnRzIGJvdGggc2Nyb2xsYmFyIHBvc2l0aW9uIGFuZCBzY3JvbGxpbmcgb2Zmc2V0XG4gICAqIERpcmVjdGx5IGluc3BpcmVkIGJ5IEBLaW5nU29yYSdzIE92ZXJsYXlTY3JvbGxiYXJzIGh0dHBzOi8vZ2l0aHViLmNvbS9LaW5nU29yYS9PdmVybGF5U2Nyb2xsYmFycy9ibG9iL21hc3Rlci9qcy9PdmVybGF5U2Nyb2xsYmFycy5qcyNMMTYzNFxuICAgKi9cblxuXG4gIF9jcmVhdGVDbGFzcyhTaW1wbGVCYXIsIFt7XG4gICAga2V5OiBcImluaXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgIC8vIFNhdmUgYSByZWZlcmVuY2UgdG8gdGhlIGluc3RhbmNlLCBzbyB3ZSBrbm93IHRoaXMgRE9NIG5vZGUgaGFzIGFscmVhZHkgYmVlbiBpbnN0YW5jaWVkXG4gICAgICB0aGlzLmVsLlNpbXBsZUJhciA9IHRoaXM7IC8vIFdlIHN0b3AgaGVyZSBvbiBzZXJ2ZXItc2lkZVxuXG4gICAgICBpZiAoY2FuVXNlRE9NKSB7XG4gICAgICAgIHRoaXMuaW5pdERPTSgpO1xuICAgICAgICB0aGlzLnNjcm9sbGJhcldpZHRoID0gc2Nyb2xsYmFyV2lkdGgoKTtcbiAgICAgICAgdGhpcy5yZWNhbGN1bGF0ZSgpO1xuICAgICAgICB0aGlzLmluaXRMaXN0ZW5lcnMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaW5pdERPTVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpbml0RE9NKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIC8vIG1ha2Ugc3VyZSB0aGlzIGVsZW1lbnQgZG9lc24ndCBoYXZlIHRoZSBlbGVtZW50cyB5ZXRcbiAgICAgIGlmIChBcnJheS5mcm9tKHRoaXMuZWwuY2hpbGRyZW4pLmZpbHRlcihmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkLmNsYXNzTGlzdC5jb250YWlucyhfdGhpczIuY2xhc3NOYW1lcy53cmFwcGVyKTtcbiAgICAgIH0pLmxlbmd0aCkge1xuICAgICAgICAvLyBhc3N1bWUgdGhhdCBlbGVtZW50IGhhcyBoaXMgRE9NIGFscmVhZHkgaW5pdGlhdGVkXG4gICAgICAgIHRoaXMud3JhcHBlckVsID0gdGhpcy5lbC5xdWVyeVNlbGVjdG9yKFwiLlwiLmNvbmNhdCh0aGlzLmNsYXNzTmFtZXMud3JhcHBlcikpO1xuICAgICAgICB0aGlzLmNvbnRlbnRFbCA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcihcIi5cIi5jb25jYXQodGhpcy5jbGFzc05hbWVzLmNvbnRlbnQpKTtcbiAgICAgICAgdGhpcy5vZmZzZXRFbCA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcihcIi5cIi5jb25jYXQodGhpcy5jbGFzc05hbWVzLm9mZnNldCkpO1xuICAgICAgICB0aGlzLm1hc2tFbCA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcihcIi5cIi5jb25jYXQodGhpcy5jbGFzc05hbWVzLm1hc2spKTtcbiAgICAgICAgdGhpcy5wbGFjZWhvbGRlckVsID0gdGhpcy5lbC5xdWVyeVNlbGVjdG9yKFwiLlwiLmNvbmNhdCh0aGlzLmNsYXNzTmFtZXMucGxhY2Vob2xkZXIpKTtcbiAgICAgICAgdGhpcy5oZWlnaHRBdXRvT2JzZXJ2ZXJXcmFwcGVyRWwgPSB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3IoXCIuXCIuY29uY2F0KHRoaXMuY2xhc3NOYW1lcy5oZWlnaHRBdXRvT2JzZXJ2ZXJXcmFwcGVyRWwpKTtcbiAgICAgICAgdGhpcy5oZWlnaHRBdXRvT2JzZXJ2ZXJFbCA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcihcIi5cIi5jb25jYXQodGhpcy5jbGFzc05hbWVzLmhlaWdodEF1dG9PYnNlcnZlckVsKSk7XG4gICAgICAgIHRoaXMuYXhpcy54LnRyYWNrLmVsID0gdGhpcy5lbC5xdWVyeVNlbGVjdG9yKFwiLlwiLmNvbmNhdCh0aGlzLmNsYXNzTmFtZXMudHJhY2ssIFwiLlwiKS5jb25jYXQodGhpcy5jbGFzc05hbWVzLmhvcml6b250YWwpKTtcbiAgICAgICAgdGhpcy5heGlzLnkudHJhY2suZWwgPSB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3IoXCIuXCIuY29uY2F0KHRoaXMuY2xhc3NOYW1lcy50cmFjaywgXCIuXCIpLmNvbmNhdCh0aGlzLmNsYXNzTmFtZXMudmVydGljYWwpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFByZXBhcmUgRE9NXG4gICAgICAgIHRoaXMud3JhcHBlckVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRoaXMuY29udGVudEVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRoaXMub2Zmc2V0RWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGhpcy5tYXNrRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGhpcy5wbGFjZWhvbGRlckVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRoaXMuaGVpZ2h0QXV0b09ic2VydmVyV3JhcHBlckVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRoaXMuaGVpZ2h0QXV0b09ic2VydmVyRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGhpcy53cmFwcGVyRWwuY2xhc3NMaXN0LmFkZCh0aGlzLmNsYXNzTmFtZXMud3JhcHBlcik7XG4gICAgICAgIHRoaXMuY29udGVudEVsLmNsYXNzTGlzdC5hZGQodGhpcy5jbGFzc05hbWVzLmNvbnRlbnQpO1xuICAgICAgICB0aGlzLm9mZnNldEVsLmNsYXNzTGlzdC5hZGQodGhpcy5jbGFzc05hbWVzLm9mZnNldCk7XG4gICAgICAgIHRoaXMubWFza0VsLmNsYXNzTGlzdC5hZGQodGhpcy5jbGFzc05hbWVzLm1hc2spO1xuICAgICAgICB0aGlzLnBsYWNlaG9sZGVyRWwuY2xhc3NMaXN0LmFkZCh0aGlzLmNsYXNzTmFtZXMucGxhY2Vob2xkZXIpO1xuICAgICAgICB0aGlzLmhlaWdodEF1dG9PYnNlcnZlcldyYXBwZXJFbC5jbGFzc0xpc3QuYWRkKHRoaXMuY2xhc3NOYW1lcy5oZWlnaHRBdXRvT2JzZXJ2ZXJXcmFwcGVyRWwpO1xuICAgICAgICB0aGlzLmhlaWdodEF1dG9PYnNlcnZlckVsLmNsYXNzTGlzdC5hZGQodGhpcy5jbGFzc05hbWVzLmhlaWdodEF1dG9PYnNlcnZlckVsKTtcblxuICAgICAgICB3aGlsZSAodGhpcy5lbC5maXJzdENoaWxkKSB7XG4gICAgICAgICAgdGhpcy5jb250ZW50RWwuYXBwZW5kQ2hpbGQodGhpcy5lbC5maXJzdENoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub2Zmc2V0RWwuYXBwZW5kQ2hpbGQodGhpcy5jb250ZW50RWwpO1xuICAgICAgICB0aGlzLm1hc2tFbC5hcHBlbmRDaGlsZCh0aGlzLm9mZnNldEVsKTtcbiAgICAgICAgdGhpcy5oZWlnaHRBdXRvT2JzZXJ2ZXJXcmFwcGVyRWwuYXBwZW5kQ2hpbGQodGhpcy5oZWlnaHRBdXRvT2JzZXJ2ZXJFbCk7XG4gICAgICAgIHRoaXMud3JhcHBlckVsLmFwcGVuZENoaWxkKHRoaXMuaGVpZ2h0QXV0b09ic2VydmVyV3JhcHBlckVsKTtcbiAgICAgICAgdGhpcy53cmFwcGVyRWwuYXBwZW5kQ2hpbGQodGhpcy5tYXNrRWwpO1xuICAgICAgICB0aGlzLndyYXBwZXJFbC5hcHBlbmRDaGlsZCh0aGlzLnBsYWNlaG9sZGVyRWwpO1xuICAgICAgICB0aGlzLmVsLmFwcGVuZENoaWxkKHRoaXMud3JhcHBlckVsKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLmF4aXMueC50cmFjay5lbCB8fCAhdGhpcy5heGlzLnkudHJhY2suZWwpIHtcbiAgICAgICAgdmFyIHRyYWNrID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHZhciBzY3JvbGxiYXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdHJhY2suY2xhc3NMaXN0LmFkZCh0aGlzLmNsYXNzTmFtZXMudHJhY2spO1xuICAgICAgICBzY3JvbGxiYXIuY2xhc3NMaXN0LmFkZCh0aGlzLmNsYXNzTmFtZXMuc2Nyb2xsYmFyKTtcbiAgICAgICAgdHJhY2suYXBwZW5kQ2hpbGQoc2Nyb2xsYmFyKTtcbiAgICAgICAgdGhpcy5heGlzLngudHJhY2suZWwgPSB0cmFjay5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICAgIHRoaXMuYXhpcy54LnRyYWNrLmVsLmNsYXNzTGlzdC5hZGQodGhpcy5jbGFzc05hbWVzLmhvcml6b250YWwpO1xuICAgICAgICB0aGlzLmF4aXMueS50cmFjay5lbCA9IHRyYWNrLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgICAgdGhpcy5heGlzLnkudHJhY2suZWwuY2xhc3NMaXN0LmFkZCh0aGlzLmNsYXNzTmFtZXMudmVydGljYWwpO1xuICAgICAgICB0aGlzLmVsLmFwcGVuZENoaWxkKHRoaXMuYXhpcy54LnRyYWNrLmVsKTtcbiAgICAgICAgdGhpcy5lbC5hcHBlbmRDaGlsZCh0aGlzLmF4aXMueS50cmFjay5lbCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYXhpcy54LnNjcm9sbGJhci5lbCA9IHRoaXMuYXhpcy54LnRyYWNrLmVsLnF1ZXJ5U2VsZWN0b3IoXCIuXCIuY29uY2F0KHRoaXMuY2xhc3NOYW1lcy5zY3JvbGxiYXIpKTtcbiAgICAgIHRoaXMuYXhpcy55LnNjcm9sbGJhci5lbCA9IHRoaXMuYXhpcy55LnRyYWNrLmVsLnF1ZXJ5U2VsZWN0b3IoXCIuXCIuY29uY2F0KHRoaXMuY2xhc3NOYW1lcy5zY3JvbGxiYXIpKTtcblxuICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuYXV0b0hpZGUpIHtcbiAgICAgICAgdGhpcy5heGlzLnguc2Nyb2xsYmFyLmVsLmNsYXNzTGlzdC5hZGQodGhpcy5jbGFzc05hbWVzLnZpc2libGUpO1xuICAgICAgICB0aGlzLmF4aXMueS5zY3JvbGxiYXIuZWwuY2xhc3NMaXN0LmFkZCh0aGlzLmNsYXNzTmFtZXMudmlzaWJsZSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZWwuc2V0QXR0cmlidXRlKCdkYXRhLXNpbXBsZWJhcicsICdpbml0Jyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImluaXRMaXN0ZW5lcnNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW5pdExpc3RlbmVycygpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICAvLyBFdmVudCBsaXN0ZW5lcnNcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXV0b0hpZGUpIHtcbiAgICAgICAgdGhpcy5lbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgdGhpcy5vbk1vdXNlRW50ZXIpO1xuICAgICAgfVxuXG4gICAgICBbJ21vdXNlZG93bicsICdjbGljaycsICdkYmxjbGljaycsICd0b3VjaHN0YXJ0JywgJ3RvdWNoZW5kJywgJ3RvdWNobW92ZSddLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgX3RoaXMzLmVsLmFkZEV2ZW50TGlzdGVuZXIoZSwgX3RoaXMzLm9uUG9pbnRlckV2ZW50LCB0cnVlKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5lbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uTW91c2VNb3ZlKTtcbiAgICAgIHRoaXMuZWwuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsIHRoaXMub25Nb3VzZUxlYXZlKTtcbiAgICAgIHRoaXMuY29udGVudEVsLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwpOyAvLyBCcm93c2VyIHpvb20gdHJpZ2dlcnMgYSB3aW5kb3cgcmVzaXplXG5cbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLm9uV2luZG93UmVzaXplKTsgLy8gTXV0YXRpb25PYnNlcnZlciBpcyBJRTExK1xuXG4gICAgICBpZiAodHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIC8vIGNyZWF0ZSBhbiBvYnNlcnZlciBpbnN0YW5jZVxuICAgICAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAobXV0YXRpb25zKSB7XG4gICAgICAgICAgbXV0YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKG11dGF0aW9uKSB7XG4gICAgICAgICAgICBpZiAobXV0YXRpb24udGFyZ2V0ID09PSBfdGhpczMuY29udGVudEVsIHx8IF90aGlzMy5pc0NoaWxkTm9kZShtdXRhdGlvbi50YXJnZXQpIHx8IG11dGF0aW9uLmFkZGVkTm9kZXMubGVuZ3RoIHx8IG11dGF0aW9uLnJlbW92ZWROb2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgX3RoaXMzLnJlY2FsY3VsYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmNvbnRlbnRFbCwge1xuICAgICAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgICAgIGNoYXJhY3RlckRhdGE6IHRydWUsXG4gICAgICAgICAgc3VidHJlZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcih0aGlzLnJlY2FsY3VsYXRlKTtcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmVsKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVjYWxjdWxhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVjYWxjdWxhdGUoKSB7XG4gICAgICB2YXIgaXNIZWlnaHRBdXRvID0gdGhpcy5oZWlnaHRBdXRvT2JzZXJ2ZXJFbC5vZmZzZXRIZWlnaHQgPD0gMTtcbiAgICAgIHRoaXMuZWxTdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmVsKTtcbiAgICAgIHRoaXMuaXNSdGwgPSB0aGlzLmVsU3R5bGVzLmRpcmVjdGlvbiA9PT0gJ3J0bCc7XG4gICAgICB0aGlzLmNvbnRlbnRFbC5zdHlsZS5wYWRkaW5nID0gXCJcIi5jb25jYXQodGhpcy5lbFN0eWxlcy5wYWRkaW5nVG9wLCBcIiBcIikuY29uY2F0KHRoaXMuZWxTdHlsZXMucGFkZGluZ1JpZ2h0LCBcIiBcIikuY29uY2F0KHRoaXMuZWxTdHlsZXMucGFkZGluZ0JvdHRvbSwgXCIgXCIpLmNvbmNhdCh0aGlzLmVsU3R5bGVzLnBhZGRpbmdMZWZ0KTtcbiAgICAgIHRoaXMuY29udGVudEVsLnN0eWxlLmhlaWdodCA9IGlzSGVpZ2h0QXV0byA/ICdhdXRvJyA6ICcxMDAlJztcbiAgICAgIHRoaXMucGxhY2Vob2xkZXJFbC5zdHlsZS53aWR0aCA9IFwiXCIuY29uY2F0KHRoaXMuY29udGVudEVsLnNjcm9sbFdpZHRoLCBcInB4XCIpO1xuICAgICAgdGhpcy5wbGFjZWhvbGRlckVsLnN0eWxlLmhlaWdodCA9IFwiXCIuY29uY2F0KHRoaXMuY29udGVudEVsLnNjcm9sbEhlaWdodCwgXCJweFwiKTtcbiAgICAgIHRoaXMud3JhcHBlckVsLnN0eWxlLm1hcmdpbiA9IFwiLVwiLmNvbmNhdCh0aGlzLmVsU3R5bGVzLnBhZGRpbmdUb3AsIFwiIC1cIikuY29uY2F0KHRoaXMuZWxTdHlsZXMucGFkZGluZ1JpZ2h0LCBcIiAtXCIpLmNvbmNhdCh0aGlzLmVsU3R5bGVzLnBhZGRpbmdCb3R0b20sIFwiIC1cIikuY29uY2F0KHRoaXMuZWxTdHlsZXMucGFkZGluZ0xlZnQpO1xuICAgICAgdGhpcy5heGlzLngudHJhY2sucmVjdCA9IHRoaXMuYXhpcy54LnRyYWNrLmVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgdGhpcy5heGlzLnkudHJhY2sucmVjdCA9IHRoaXMuYXhpcy55LnRyYWNrLmVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOyAvLyBTZXQgaXNPdmVyZmxvd2luZyB0byBmYWxzZSBpZiBzY3JvbGxiYXIgaXMgbm90IG5lY2Vzc2FyeSAoY29udGVudCBpcyBzaG9ydGVyIHRoYW4gb2Zmc2V0KVxuXG4gICAgICB0aGlzLmF4aXMueC5pc092ZXJmbG93aW5nID0gKHRoaXMuc2Nyb2xsYmFyV2lkdGggPyB0aGlzLmNvbnRlbnRFbC5zY3JvbGxXaWR0aCA6IHRoaXMuY29udGVudEVsLnNjcm9sbFdpZHRoIC0gdGhpcy5taW5TY3JvbGxiYXJXaWR0aCkgPiBNYXRoLmNlaWwodGhpcy5heGlzLngudHJhY2sucmVjdC53aWR0aCk7XG4gICAgICB0aGlzLmF4aXMueS5pc092ZXJmbG93aW5nID0gKHRoaXMuc2Nyb2xsYmFyV2lkdGggPyB0aGlzLmNvbnRlbnRFbC5zY3JvbGxIZWlnaHQgOiB0aGlzLmNvbnRlbnRFbC5zY3JvbGxIZWlnaHQgLSB0aGlzLm1pblNjcm9sbGJhcldpZHRoKSA+IE1hdGguY2VpbCh0aGlzLmF4aXMueS50cmFjay5yZWN0LmhlaWdodCk7IC8vIFNldCBpc092ZXJmbG93aW5nIHRvIGZhbHNlIGlmIHVzZXIgZXhwbGljaXRlbHkgc2V0IGhpZGRlbiBvdmVyZmxvd1xuXG4gICAgICB0aGlzLmF4aXMueC5pc092ZXJmbG93aW5nID0gdGhpcy5lbFN0eWxlcy5vdmVyZmxvd1ggPT09ICdoaWRkZW4nID8gZmFsc2UgOiB0aGlzLmF4aXMueC5pc092ZXJmbG93aW5nO1xuICAgICAgdGhpcy5heGlzLnkuaXNPdmVyZmxvd2luZyA9IHRoaXMuZWxTdHlsZXMub3ZlcmZsb3dZID09PSAnaGlkZGVuJyA/IGZhbHNlIDogdGhpcy5heGlzLnkuaXNPdmVyZmxvd2luZztcbiAgICAgIHRoaXMuYXhpcy54LmZvcmNlVmlzaWJsZSA9IHRoaXMub3B0aW9ucy5mb3JjZVZpc2libGUgPT09IFwieFwiIHx8IHRoaXMub3B0aW9ucy5mb3JjZVZpc2libGUgPT09IHRydWU7XG4gICAgICB0aGlzLmF4aXMueS5mb3JjZVZpc2libGUgPSB0aGlzLm9wdGlvbnMuZm9yY2VWaXNpYmxlID09PSBcInlcIiB8fCB0aGlzLm9wdGlvbnMuZm9yY2VWaXNpYmxlID09PSB0cnVlO1xuICAgICAgdGhpcy5heGlzLnguc2Nyb2xsYmFyLnNpemUgPSB0aGlzLmdldFNjcm9sbGJhclNpemUoJ3gnKTtcbiAgICAgIHRoaXMuYXhpcy55LnNjcm9sbGJhci5zaXplID0gdGhpcy5nZXRTY3JvbGxiYXJTaXplKCd5Jyk7XG4gICAgICB0aGlzLmF4aXMueC5zY3JvbGxiYXIuZWwuc3R5bGUud2lkdGggPSBcIlwiLmNvbmNhdCh0aGlzLmF4aXMueC5zY3JvbGxiYXIuc2l6ZSwgXCJweFwiKTtcbiAgICAgIHRoaXMuYXhpcy55LnNjcm9sbGJhci5lbC5zdHlsZS5oZWlnaHQgPSBcIlwiLmNvbmNhdCh0aGlzLmF4aXMueS5zY3JvbGxiYXIuc2l6ZSwgXCJweFwiKTtcbiAgICAgIHRoaXMucG9zaXRpb25TY3JvbGxiYXIoJ3gnKTtcbiAgICAgIHRoaXMucG9zaXRpb25TY3JvbGxiYXIoJ3knKTtcbiAgICAgIHRoaXMudG9nZ2xlVHJhY2tWaXNpYmlsaXR5KCd4Jyk7XG4gICAgICB0aGlzLnRvZ2dsZVRyYWNrVmlzaWJpbGl0eSgneScpO1xuICAgICAgdGhpcy5oaWRlTmF0aXZlU2Nyb2xsYmFyKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSBzY3JvbGxiYXIgc2l6ZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0U2Nyb2xsYmFyU2l6ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTY3JvbGxiYXJTaXplKCkge1xuICAgICAgdmFyIGF4aXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICd5JztcbiAgICAgIHZhciBjb250ZW50U2l6ZSA9IHRoaXMuc2Nyb2xsYmFyV2lkdGggPyB0aGlzLmNvbnRlbnRFbFt0aGlzLmF4aXNbYXhpc10uc2Nyb2xsU2l6ZUF0dHJdIDogdGhpcy5jb250ZW50RWxbdGhpcy5heGlzW2F4aXNdLnNjcm9sbFNpemVBdHRyXSAtIHRoaXMubWluU2Nyb2xsYmFyV2lkdGg7XG4gICAgICB2YXIgdHJhY2tTaXplID0gdGhpcy5heGlzW2F4aXNdLnRyYWNrLnJlY3RbdGhpcy5heGlzW2F4aXNdLnNpemVBdHRyXTtcbiAgICAgIHZhciBzY3JvbGxiYXJTaXplO1xuXG4gICAgICBpZiAoIXRoaXMuYXhpc1theGlzXS5pc092ZXJmbG93aW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHNjcm9sbGJhclJhdGlvID0gdHJhY2tTaXplIC8gY29udGVudFNpemU7IC8vIENhbGN1bGF0ZSBuZXcgaGVpZ2h0L3Bvc2l0aW9uIG9mIGRyYWcgaGFuZGxlLlxuXG4gICAgICBzY3JvbGxiYXJTaXplID0gTWF0aC5tYXgofn4oc2Nyb2xsYmFyUmF0aW8gKiB0cmFja1NpemUpLCB0aGlzLm9wdGlvbnMuc2Nyb2xsYmFyTWluU2l6ZSk7XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2Nyb2xsYmFyTWF4U2l6ZSkge1xuICAgICAgICBzY3JvbGxiYXJTaXplID0gTWF0aC5taW4oc2Nyb2xsYmFyU2l6ZSwgdGhpcy5vcHRpb25zLnNjcm9sbGJhck1heFNpemUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2Nyb2xsYmFyU2l6ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicG9zaXRpb25TY3JvbGxiYXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcG9zaXRpb25TY3JvbGxiYXIoKSB7XG4gICAgICB2YXIgYXhpcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJ3knO1xuICAgICAgdmFyIGNvbnRlbnRTaXplID0gdGhpcy5jb250ZW50RWxbdGhpcy5heGlzW2F4aXNdLnNjcm9sbFNpemVBdHRyXTtcbiAgICAgIHZhciB0cmFja1NpemUgPSB0aGlzLmF4aXNbYXhpc10udHJhY2sucmVjdFt0aGlzLmF4aXNbYXhpc10uc2l6ZUF0dHJdO1xuICAgICAgdmFyIGhvc3RTaXplID0gcGFyc2VJbnQodGhpcy5lbFN0eWxlc1t0aGlzLmF4aXNbYXhpc10uc2l6ZUF0dHJdLCAxMCk7XG4gICAgICB2YXIgc2Nyb2xsYmFyID0gdGhpcy5heGlzW2F4aXNdLnNjcm9sbGJhcjtcbiAgICAgIHZhciBzY3JvbGxPZmZzZXQgPSB0aGlzLmNvbnRlbnRFbFt0aGlzLmF4aXNbYXhpc10uc2Nyb2xsT2Zmc2V0QXR0cl07XG4gICAgICBzY3JvbGxPZmZzZXQgPSBheGlzID09PSAneCcgJiYgdGhpcy5pc1J0bCAmJiBTaW1wbGVCYXIuZ2V0UnRsSGVscGVycygpLmlzUnRsU2Nyb2xsaW5nSW52ZXJ0ZWQgPyAtc2Nyb2xsT2Zmc2V0IDogc2Nyb2xsT2Zmc2V0O1xuICAgICAgdmFyIHNjcm9sbFBvdXJjZW50ID0gc2Nyb2xsT2Zmc2V0IC8gKGNvbnRlbnRTaXplIC0gaG9zdFNpemUpO1xuICAgICAgdmFyIGhhbmRsZU9mZnNldCA9IH5+KCh0cmFja1NpemUgLSBzY3JvbGxiYXIuc2l6ZSkgKiBzY3JvbGxQb3VyY2VudCk7XG4gICAgICBoYW5kbGVPZmZzZXQgPSBheGlzID09PSAneCcgJiYgdGhpcy5pc1J0bCAmJiBTaW1wbGVCYXIuZ2V0UnRsSGVscGVycygpLmlzUnRsU2Nyb2xsYmFySW52ZXJ0ZWQgPyBoYW5kbGVPZmZzZXQgKyAodHJhY2tTaXplIC0gc2Nyb2xsYmFyLnNpemUpIDogaGFuZGxlT2Zmc2V0O1xuICAgICAgc2Nyb2xsYmFyLmVsLnN0eWxlLnRyYW5zZm9ybSA9IGF4aXMgPT09ICd4JyA/IFwidHJhbnNsYXRlM2QoXCIuY29uY2F0KGhhbmRsZU9mZnNldCwgXCJweCwgMCwgMClcIikgOiBcInRyYW5zbGF0ZTNkKDAsIFwiLmNvbmNhdChoYW5kbGVPZmZzZXQsIFwicHgsIDApXCIpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ0b2dnbGVUcmFja1Zpc2liaWxpdHlcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9nZ2xlVHJhY2tWaXNpYmlsaXR5KCkge1xuICAgICAgdmFyIGF4aXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICd5JztcbiAgICAgIHZhciB0cmFjayA9IHRoaXMuYXhpc1theGlzXS50cmFjay5lbDtcbiAgICAgIHZhciBzY3JvbGxiYXIgPSB0aGlzLmF4aXNbYXhpc10uc2Nyb2xsYmFyLmVsO1xuXG4gICAgICBpZiAodGhpcy5heGlzW2F4aXNdLmlzT3ZlcmZsb3dpbmcgfHwgdGhpcy5heGlzW2F4aXNdLmZvcmNlVmlzaWJsZSkge1xuICAgICAgICB0cmFjay5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnO1xuICAgICAgICB0aGlzLmNvbnRlbnRFbC5zdHlsZVt0aGlzLmF4aXNbYXhpc10ub3ZlcmZsb3dBdHRyXSA9ICdzY3JvbGwnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJhY2suc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICB0aGlzLmNvbnRlbnRFbC5zdHlsZVt0aGlzLmF4aXNbYXhpc10ub3ZlcmZsb3dBdHRyXSA9ICdoaWRkZW4nO1xuICAgICAgfSAvLyBFdmVuIGlmIGZvcmNlVmlzaWJsZSBpcyBlbmFibGVkLCBzY3JvbGxiYXIgaXRzZWxmIHNob3VsZCBiZSBoaWRkZW5cblxuXG4gICAgICBpZiAodGhpcy5heGlzW2F4aXNdLmlzT3ZlcmZsb3dpbmcpIHtcbiAgICAgICAgc2Nyb2xsYmFyLnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzY3JvbGxiYXIuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJoaWRlTmF0aXZlU2Nyb2xsYmFyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhpZGVOYXRpdmVTY3JvbGxiYXIoKSB7XG4gICAgICB0aGlzLm9mZnNldEVsLnN0eWxlW3RoaXMuaXNSdGwgPyAnbGVmdCcgOiAncmlnaHQnXSA9IHRoaXMuYXhpcy55LmlzT3ZlcmZsb3dpbmcgfHwgdGhpcy5heGlzLnkuZm9yY2VWaXNpYmxlID8gXCItXCIuY29uY2F0KHRoaXMuc2Nyb2xsYmFyV2lkdGggfHwgdGhpcy5taW5TY3JvbGxiYXJXaWR0aCwgXCJweFwiKSA6IDA7XG4gICAgICB0aGlzLm9mZnNldEVsLnN0eWxlLmJvdHRvbSA9IHRoaXMuYXhpcy54LmlzT3ZlcmZsb3dpbmcgfHwgdGhpcy5heGlzLnguZm9yY2VWaXNpYmxlID8gXCItXCIuY29uY2F0KHRoaXMuc2Nyb2xsYmFyV2lkdGggfHwgdGhpcy5taW5TY3JvbGxiYXJXaWR0aCwgXCJweFwiKSA6IDA7IC8vIElmIGZsb2F0aW5nIHNjcm9sbGJhclxuXG4gICAgICBpZiAoIXRoaXMuc2Nyb2xsYmFyV2lkdGgpIHtcbiAgICAgICAgdmFyIHBhZGRpbmdEaXJlY3Rpb24gPSBbdGhpcy5pc1J0bCA/ICdwYWRkaW5nTGVmdCcgOiAncGFkZGluZ1JpZ2h0J107XG4gICAgICAgIHRoaXMuY29udGVudEVsLnN0eWxlW3BhZGRpbmdEaXJlY3Rpb25dID0gdGhpcy5heGlzLnkuaXNPdmVyZmxvd2luZyB8fCB0aGlzLmF4aXMueS5mb3JjZVZpc2libGUgPyBcImNhbGMoXCIuY29uY2F0KHRoaXMuZWxTdHlsZXNbcGFkZGluZ0RpcmVjdGlvbl0sIFwiICsgXCIpLmNvbmNhdCh0aGlzLm1pblNjcm9sbGJhcldpZHRoLCBcInB4KVwiKSA6IHRoaXMuZWxTdHlsZXNbcGFkZGluZ0RpcmVjdGlvbl07XG4gICAgICAgIHRoaXMuY29udGVudEVsLnN0eWxlLnBhZGRpbmdCb3R0b20gPSB0aGlzLmF4aXMueC5pc092ZXJmbG93aW5nIHx8IHRoaXMuYXhpcy54LmZvcmNlVmlzaWJsZSA/IFwiY2FsYyhcIi5jb25jYXQodGhpcy5lbFN0eWxlcy5wYWRkaW5nQm90dG9tLCBcIiArIFwiKS5jb25jYXQodGhpcy5taW5TY3JvbGxiYXJXaWR0aCwgXCJweClcIikgOiB0aGlzLmVsU3R5bGVzLnBhZGRpbmdCb3R0b207XG4gICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9uIHNjcm9sbCBldmVudCBoYW5kbGluZ1xuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwib25Nb3VzZU1vdmVGb3JBeGlzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uTW91c2VNb3ZlRm9yQXhpcygpIHtcbiAgICAgIHZhciBheGlzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAneSc7XG4gICAgICB0aGlzLmF4aXNbYXhpc10udHJhY2sucmVjdCA9IHRoaXMuYXhpc1theGlzXS50cmFjay5lbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIHRoaXMuYXhpc1theGlzXS5zY3JvbGxiYXIucmVjdCA9IHRoaXMuYXhpc1theGlzXS5zY3JvbGxiYXIuZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB2YXIgaXNXaXRoaW5TY3JvbGxiYXJCb3VuZHNYID0gdGhpcy5pc1dpdGhpbkJvdW5kcyh0aGlzLmF4aXNbYXhpc10uc2Nyb2xsYmFyLnJlY3QpO1xuXG4gICAgICBpZiAoaXNXaXRoaW5TY3JvbGxiYXJCb3VuZHNYKSB7XG4gICAgICAgIHRoaXMuYXhpc1theGlzXS5zY3JvbGxiYXIuZWwuY2xhc3NMaXN0LmFkZCh0aGlzLmNsYXNzTmFtZXMuaG92ZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5heGlzW2F4aXNdLnNjcm9sbGJhci5lbC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuY2xhc3NOYW1lcy5ob3Zlcik7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmlzV2l0aGluQm91bmRzKHRoaXMuYXhpc1theGlzXS50cmFjay5yZWN0KSkge1xuICAgICAgICB0aGlzLnNob3dTY3JvbGxiYXIoYXhpcyk7XG4gICAgICAgIHRoaXMuYXhpc1theGlzXS50cmFjay5lbC5jbGFzc0xpc3QuYWRkKHRoaXMuY2xhc3NOYW1lcy5ob3Zlcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmF4aXNbYXhpc10udHJhY2suZWwuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLmNsYXNzTmFtZXMuaG92ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJvbk1vdXNlTGVhdmVGb3JBeGlzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uTW91c2VMZWF2ZUZvckF4aXMoKSB7XG4gICAgICB2YXIgYXhpcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJ3knO1xuICAgICAgdGhpcy5heGlzW2F4aXNdLnRyYWNrLmVsLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5jbGFzc05hbWVzLmhvdmVyKTtcbiAgICAgIHRoaXMuYXhpc1theGlzXS5zY3JvbGxiYXIuZWwuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLmNsYXNzTmFtZXMuaG92ZXIpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzaG93U2Nyb2xsYmFyXCIsXG5cbiAgICAvKipcbiAgICAgKiBTaG93IHNjcm9sbGJhclxuICAgICAqL1xuICAgIHZhbHVlOiBmdW5jdGlvbiBzaG93U2Nyb2xsYmFyKCkge1xuICAgICAgdmFyIGF4aXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICd5JztcbiAgICAgIHZhciBzY3JvbGxiYXIgPSB0aGlzLmF4aXNbYXhpc10uc2Nyb2xsYmFyLmVsO1xuXG4gICAgICBpZiAoIXRoaXMuYXhpc1theGlzXS5pc1Zpc2libGUpIHtcbiAgICAgICAgc2Nyb2xsYmFyLmNsYXNzTGlzdC5hZGQodGhpcy5jbGFzc05hbWVzLnZpc2libGUpO1xuICAgICAgICB0aGlzLmF4aXNbYXhpc10uaXNWaXNpYmxlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5hdXRvSGlkZSkge1xuICAgICAgICB0aGlzLmhpZGVTY3JvbGxiYXJzKCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEhpZGUgU2Nyb2xsYmFyXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJvbkRyYWdTdGFydFwiLFxuXG4gICAgLyoqXG4gICAgICogb24gc2Nyb2xsYmFyIGhhbmRsZSBkcmFnIG1vdmVtZW50IHN0YXJ0c1xuICAgICAqL1xuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkRyYWdTdGFydChlKSB7XG4gICAgICB2YXIgYXhpcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJ3knO1xuICAgICAgdmFyIHNjcm9sbGJhciA9IHRoaXMuYXhpc1theGlzXS5zY3JvbGxiYXIuZWw7IC8vIE1lYXN1cmUgaG93IGZhciB0aGUgdXNlcidzIG1vdXNlIGlzIGZyb20gdGhlIHRvcCBvZiB0aGUgc2Nyb2xsYmFyIGRyYWcgaGFuZGxlLlxuXG4gICAgICB2YXIgZXZlbnRPZmZzZXQgPSBheGlzID09PSAneScgPyBlLnBhZ2VZIDogZS5wYWdlWDtcbiAgICAgIHRoaXMuYXhpc1theGlzXS5kcmFnT2Zmc2V0ID0gZXZlbnRPZmZzZXQgLSBzY3JvbGxiYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbdGhpcy5heGlzW2F4aXNdLm9mZnNldEF0dHJdO1xuICAgICAgdGhpcy5kcmFnZ2VkQXhpcyA9IGF4aXM7XG4gICAgICB0aGlzLmVsLmNsYXNzTGlzdC5hZGQodGhpcy5jbGFzc05hbWVzLmRyYWdnaW5nKTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuZHJhZyk7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vbkVuZERyYWcpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEcmFnIHNjcm9sbGJhciBoYW5kbGVcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcImdldFNjcm9sbEVsZW1lbnRcIixcblxuICAgIC8qKlxuICAgICAqIEdldHRlciBmb3Igb3JpZ2luYWwgc2Nyb2xsaW5nIGVsZW1lbnRcbiAgICAgKi9cbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0U2Nyb2xsRWxlbWVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRlbnRFbDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVtb3ZlTGlzdGVuZXJzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVycygpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICAvLyBFdmVudCBsaXN0ZW5lcnNcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXV0b0hpZGUpIHtcbiAgICAgICAgdGhpcy5lbC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgdGhpcy5vbk1vdXNlRW50ZXIpO1xuICAgICAgfVxuXG4gICAgICBbJ21vdXNlZG93bicsICdjbGljaycsICdkYmxjbGljaycsICd0b3VjaHN0YXJ0JywgJ3RvdWNoZW5kJywgJ3RvdWNobW92ZSddLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgX3RoaXM0LmVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZSwgX3RoaXM0Lm9uUG9pbnRlckV2ZW50KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5lbC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uTW91c2VNb3ZlKTtcbiAgICAgIHRoaXMuZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsIHRoaXMub25Nb3VzZUxlYXZlKTtcbiAgICAgIHRoaXMuY29udGVudEVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMub25XaW5kb3dSZXNpemUpO1xuICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyICYmIHRoaXMubXV0YXRpb25PYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTsgLy8gQ2FuY2VsIGFsbCBkZWJvdW5jZWQgZnVuY3Rpb25zXG5cbiAgICAgIHRoaXMucmVjYWxjdWxhdGUuY2FuY2VsKCk7XG4gICAgICB0aGlzLm9uTW91c2VNb3ZlLmNhbmNlbCgpO1xuICAgICAgdGhpcy5oaWRlU2Nyb2xsYmFycy5jYW5jZWwoKTtcbiAgICAgIHRoaXMub25XaW5kb3dSZXNpemUuY2FuY2VsKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVuTW91bnQgbXV0YXRpb24gb2JzZXJ2ZXIgYW5kIGRlbGV0ZSBTaW1wbGVCYXIgaW5zdGFuY2UgZnJvbSBET00gZWxlbWVudFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwidW5Nb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB1bk1vdW50KCkge1xuICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcnMoKTtcbiAgICAgIHRoaXMuZWwuU2ltcGxlQmFyID0gbnVsbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVjdXJzaXZlbHkgd2Fsa3MgdXAgdGhlIHBhcmVudCBub2RlcyBsb29raW5nIGZvciB0aGlzLmVsXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJpc0NoaWxkTm9kZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc0NoaWxkTm9kZShlbCkge1xuICAgICAgaWYgKGVsID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoZWwgPT09IHRoaXMuZWwpIHJldHVybiB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaXNDaGlsZE5vZGUoZWwucGFyZW50Tm9kZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIG1vdXNlIGlzIHdpdGhpbiBib3VuZHNcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcImlzV2l0aGluQm91bmRzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzV2l0aGluQm91bmRzKGJib3gpIHtcbiAgICAgIHJldHVybiB0aGlzLm1vdXNlWCA+PSBiYm94LmxlZnQgJiYgdGhpcy5tb3VzZVggPD0gYmJveC5sZWZ0ICsgYmJveC53aWR0aCAmJiB0aGlzLm1vdXNlWSA+PSBiYm94LnRvcCAmJiB0aGlzLm1vdXNlWSA8PSBiYm94LnRvcCArIGJib3guaGVpZ2h0O1xuICAgIH1cbiAgfV0sIFt7XG4gICAga2V5OiBcImdldFJ0bEhlbHBlcnNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UnRsSGVscGVycygpIHtcbiAgICAgIHZhciBkdW1teURpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgZHVtbXlEaXYuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJocy1kdW1teS1zY3JvbGxiYXItc2l6ZVwiPjxkaXYgc3R5bGU9XCJoZWlnaHQ6IDIwMCU7IHdpZHRoOiAyMDAlOyBtYXJnaW46IDEwcHggMDtcIj48L2Rpdj48L2Rpdj4nO1xuICAgICAgdmFyIHNjcm9sbGJhckR1bW15RWwgPSBkdW1teURpdi5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2Nyb2xsYmFyRHVtbXlFbCk7XG4gICAgICB2YXIgZHVtbXlDb250YWluZXJDaGlsZCA9IHNjcm9sbGJhckR1bW15RWwuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgICBzY3JvbGxiYXJEdW1teUVsLnNjcm9sbExlZnQgPSAwO1xuICAgICAgdmFyIGR1bW15Q29udGFpbmVyT2Zmc2V0ID0gU2ltcGxlQmFyLmdldE9mZnNldChzY3JvbGxiYXJEdW1teUVsKTtcbiAgICAgIHZhciBkdW1teUNvbnRhaW5lckNoaWxkT2Zmc2V0ID0gU2ltcGxlQmFyLmdldE9mZnNldChkdW1teUNvbnRhaW5lckNoaWxkKTtcbiAgICAgIHNjcm9sbGJhckR1bW15RWwuc2Nyb2xsTGVmdCA9IDk5OTtcbiAgICAgIHZhciBkdW1teUNvbnRhaW5lclNjcm9sbE9mZnNldEFmdGVyU2Nyb2xsID0gU2ltcGxlQmFyLmdldE9mZnNldChkdW1teUNvbnRhaW5lckNoaWxkKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC8vIGRldGVybWluZXMgaWYgdGhlIHNjcm9sbGluZyBpcyByZXNwb25kaW5nIHdpdGggbmVnYXRpdmUgdmFsdWVzXG4gICAgICAgIGlzUnRsU2Nyb2xsaW5nSW52ZXJ0ZWQ6IGR1bW15Q29udGFpbmVyT2Zmc2V0LmxlZnQgIT09IGR1bW15Q29udGFpbmVyQ2hpbGRPZmZzZXQubGVmdCAmJiBkdW1teUNvbnRhaW5lckNoaWxkT2Zmc2V0LmxlZnQgLSBkdW1teUNvbnRhaW5lclNjcm9sbE9mZnNldEFmdGVyU2Nyb2xsLmxlZnQgIT09IDAsXG4gICAgICAgIC8vIGRldGVybWluZXMgaWYgdGhlIG9yaWdpbiBzY3JvbGxiYXIgcG9zaXRpb24gaXMgaW52ZXJ0ZWQgb3Igbm90IChwb3NpdGlvbmVkIG9uIGxlZnQgb3IgcmlnaHQpXG4gICAgICAgIGlzUnRsU2Nyb2xsYmFySW52ZXJ0ZWQ6IGR1bW15Q29udGFpbmVyT2Zmc2V0LmxlZnQgIT09IGR1bW15Q29udGFpbmVyQ2hpbGRPZmZzZXQubGVmdFxuICAgICAgfTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaW5pdEh0bWxBcGlcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW5pdEh0bWxBcGkoKSB7XG4gICAgICB0aGlzLmluaXRET01Mb2FkZWRFbGVtZW50cyA9IHRoaXMuaW5pdERPTUxvYWRlZEVsZW1lbnRzLmJpbmQodGhpcyk7IC8vIE11dGF0aW9uT2JzZXJ2ZXIgaXMgSUUxMStcblxuICAgICAgaWYgKHR5cGVvZiBNdXRhdGlvbk9ic2VydmVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAvLyBNdXRhdGlvbiBvYnNlcnZlciB0byBvYnNlcnZlIGR5bmFtaWNhbGx5IGFkZGVkIGVsZW1lbnRzXG4gICAgICAgIHRoaXMuZ2xvYmFsT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAobXV0YXRpb25zKSB7XG4gICAgICAgICAgbXV0YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKG11dGF0aW9uKSB7XG4gICAgICAgICAgICBBcnJheS5mcm9tKG11dGF0aW9uLmFkZGVkTm9kZXMpLmZvckVhY2goZnVuY3Rpb24gKGFkZGVkTm9kZSkge1xuICAgICAgICAgICAgICBpZiAoYWRkZWROb2RlLm5vZGVUeXBlID09PSAxKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFkZGVkTm9kZS5oYXNBdHRyaWJ1dGUoJ2RhdGEtc2ltcGxlYmFyJykpIHtcbiAgICAgICAgICAgICAgICAgICFhZGRlZE5vZGUuU2ltcGxlQmFyICYmIG5ldyBTaW1wbGVCYXIoYWRkZWROb2RlLCBTaW1wbGVCYXIuZ2V0RWxPcHRpb25zKGFkZGVkTm9kZSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKGFkZGVkTm9kZS5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1zaW1wbGViYXJdJykpLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgICAgICAgICAgICAgICFlbC5TaW1wbGVCYXIgJiYgbmV3IFNpbXBsZUJhcihlbCwgU2ltcGxlQmFyLmdldEVsT3B0aW9ucyhlbCkpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIEFycmF5LmZyb20obXV0YXRpb24ucmVtb3ZlZE5vZGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChyZW1vdmVkTm9kZSkge1xuICAgICAgICAgICAgICBpZiAocmVtb3ZlZE5vZGUubm9kZVR5cGUgPT09IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVtb3ZlZE5vZGUuaGFzQXR0cmlidXRlKCdkYXRhLXNpbXBsZWJhcicpKSB7XG4gICAgICAgICAgICAgICAgICByZW1vdmVkTm9kZS5TaW1wbGVCYXIgJiYgcmVtb3ZlZE5vZGUuU2ltcGxlQmFyLnVuTW91bnQoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgQXJyYXkuZnJvbShyZW1vdmVkTm9kZS5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1zaW1wbGViYXJdJykpLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsLlNpbXBsZUJhciAmJiBlbC5TaW1wbGVCYXIudW5Nb3VudCgpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZ2xvYmFsT2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudCwge1xuICAgICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgICAgICBzdWJ0cmVlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSAvLyBUYWtlbiBmcm9tIGpRdWVyeSBgcmVhZHlgIGZ1bmN0aW9uXG4gICAgICAvLyBJbnN0YW50aWF0ZSBlbGVtZW50cyBhbHJlYWR5IHByZXNlbnQgb24gdGhlIHBhZ2VcblxuXG4gICAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJyB8fCBkb2N1bWVudC5yZWFkeVN0YXRlICE9PSAnbG9hZGluZycgJiYgIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCkge1xuICAgICAgICAvLyBIYW5kbGUgaXQgYXN5bmNocm9ub3VzbHkgdG8gYWxsb3cgc2NyaXB0cyB0aGUgb3Bwb3J0dW5pdHkgdG8gZGVsYXkgaW5pdFxuICAgICAgICB3aW5kb3cuc2V0VGltZW91dCh0aGlzLmluaXRET01Mb2FkZWRFbGVtZW50cyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgdGhpcy5pbml0RE9NTG9hZGVkRWxlbWVudHMpO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuaW5pdERPTUxvYWRlZEVsZW1lbnRzKTtcbiAgICAgIH1cbiAgICB9IC8vIEhlbHBlciBmdW5jdGlvbiB0byByZXRyaWV2ZSBvcHRpb25zIGZyb20gZWxlbWVudCBhdHRyaWJ1dGVzXG5cbiAgfSwge1xuICAgIGtleTogXCJnZXRFbE9wdGlvbnNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RWxPcHRpb25zKGVsKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IEFycmF5LmZyb20oZWwuYXR0cmlidXRlcykucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGF0dHJpYnV0ZSkge1xuICAgICAgICB2YXIgb3B0aW9uID0gYXR0cmlidXRlLm5hbWUubWF0Y2goL2RhdGEtc2ltcGxlYmFyLSguKykvKTtcblxuICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgdmFyIGtleSA9IG9wdGlvblsxXS5yZXBsYWNlKC9cXFcrKC4pL2csIGZ1bmN0aW9uICh4LCBjaHIpIHtcbiAgICAgICAgICAgIHJldHVybiBjaHIudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHN3aXRjaCAoYXR0cmlidXRlLnZhbHVlKSB7XG4gICAgICAgICAgICBjYXNlICd0cnVlJzpcbiAgICAgICAgICAgICAgYWNjW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnZmFsc2UnOlxuICAgICAgICAgICAgICBhY2Nba2V5XSA9IGZhbHNlO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgICAgICAgIGFjY1trZXldID0gdHJ1ZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGFjY1trZXldID0gYXR0cmlidXRlLnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCB7fSk7XG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVtb3ZlT2JzZXJ2ZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVtb3ZlT2JzZXJ2ZXIoKSB7XG4gICAgICB0aGlzLmdsb2JhbE9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaW5pdERPTUxvYWRlZEVsZW1lbnRzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGluaXRET01Mb2FkZWRFbGVtZW50cygpIHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCB0aGlzLmluaXRET01Mb2FkZWRFbGVtZW50cyk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuaW5pdERPTUxvYWRlZEVsZW1lbnRzKTtcbiAgICAgIEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtc2ltcGxlYmFyXScpKS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkge1xuICAgICAgICBpZiAoIWVsLlNpbXBsZUJhcikgbmV3IFNpbXBsZUJhcihlbCwgU2ltcGxlQmFyLmdldEVsT3B0aW9ucyhlbCkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldE9mZnNldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRPZmZzZXQoZWwpIHtcbiAgICAgIHZhciByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b3A6IHJlY3QudG9wICsgKHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wKSxcbiAgICAgICAgbGVmdDogcmVjdC5sZWZ0ICsgKHdpbmRvdy5wYWdlWE9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdClcbiAgICAgIH07XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFNpbXBsZUJhcjtcbn0oKTtcbi8qKlxuICogSFRNTCBBUElcbiAqIENhbGxlZCBvbmx5IGluIGEgYnJvd3NlciBlbnYuXG4gKi9cblxuXG5TaW1wbGVCYXIuZGVmYXVsdE9wdGlvbnMgPSB7XG4gIGF1dG9IaWRlOiB0cnVlLFxuICBmb3JjZVZpc2libGU6IGZhbHNlLFxuICBjbGFzc05hbWVzOiB7XG4gICAgY29udGVudDogJ3NpbXBsZWJhci1jb250ZW50JyxcbiAgICBvZmZzZXQ6ICdzaW1wbGViYXItb2Zmc2V0JyxcbiAgICBtYXNrOiAnc2ltcGxlYmFyLW1hc2snLFxuICAgIHdyYXBwZXI6ICdzaW1wbGViYXItd3JhcHBlcicsXG4gICAgcGxhY2Vob2xkZXI6ICdzaW1wbGViYXItcGxhY2Vob2xkZXInLFxuICAgIHNjcm9sbGJhcjogJ3NpbXBsZWJhci1zY3JvbGxiYXInLFxuICAgIHRyYWNrOiAnc2ltcGxlYmFyLXRyYWNrJyxcbiAgICBoZWlnaHRBdXRvT2JzZXJ2ZXJXcmFwcGVyRWw6ICdzaW1wbGViYXItaGVpZ2h0LWF1dG8tb2JzZXJ2ZXItd3JhcHBlcicsXG4gICAgaGVpZ2h0QXV0b09ic2VydmVyRWw6ICdzaW1wbGViYXItaGVpZ2h0LWF1dG8tb2JzZXJ2ZXInLFxuICAgIHZpc2libGU6ICdzaW1wbGViYXItdmlzaWJsZScsXG4gICAgaG9yaXpvbnRhbDogJ3NpbXBsZWJhci1ob3Jpem9udGFsJyxcbiAgICB2ZXJ0aWNhbDogJ3NpbXBsZWJhci12ZXJ0aWNhbCcsXG4gICAgaG92ZXI6ICdzaW1wbGViYXItaG92ZXInLFxuICAgIGRyYWdnaW5nOiAnc2ltcGxlYmFyLWRyYWdnaW5nJ1xuICB9LFxuICBzY3JvbGxiYXJNaW5TaXplOiAyNSxcbiAgc2Nyb2xsYmFyTWF4U2l6ZTogMCxcbiAgdGltZW91dDogMTAwMFxufTtcblxuaWYgKGNhblVzZURPTSkge1xuICBTaW1wbGVCYXIuaW5pdEh0bWxBcGkoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgU2ltcGxlQmFyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2ltcGxlYmFyLmVzbS5qcy5tYXBcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/simplebar/dist/simplebar.esm.js\n"); + +/***/ }), + +/***/ "./node_modules/webpack/buildin/global.js": +/*!***********************************!*\ + !*** (webpack)/buildin/global.js ***! + \***********************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzP2NkMDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0Q0FBNEM7O0FBRTVDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9nbG9iYWwuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/webpack/buildin/global.js\n"); + +/***/ }) + +}]); \ No newline at end of file diff --git a/themes/learn4/languages.yaml b/themes/learn4/languages.yaml new file mode 100644 index 00000000..f53da58d --- /dev/null +++ b/themes/learn4/languages.yaml @@ -0,0 +1,41 @@ +en: + THEME_LEARN4_GITHUB_EDIT: Edit + THEME_LEARN4_GITHUB_NOTE: "Found errors? Think you can improve this documentation? Simply click the <strong><i class=\"fa fa-pencil-square\"></i> Edit</strong> link at the top of the page, and then the <strong><i class=\"fa fa-pencil\"></i></strong> icon on Github to make your changes." + THEME_LEARN4_CLEAR_HISTORY: Clear History + THEME_LEARN4_BUILT_WITH_GRAV: Built with <a href="http://getgrav.org">Grav</a> - The Modern Flat File CMS + THEME_LEARN4_SEARCH_DOCUMENTATION: Search... +cn: + THEME_LEARN4_GITHUB_NOTE: 发现错误?请帮忙改进,谢谢! + THEME_LEARN4_CLEAR_HISTORY: 清除历史 + THEME_LEARN4_BUILT_WITH_GRAV: Built with <a href="http://getgrav.org">Grav</a> - The Modern Flat File CMS + THEME_LEARN4_SEARCH_DOCUMENTATION: 搜索文档 +cs: + THEME_LEARN4_GITHUB_NOTE: Našli jste chybu? Myslíte, že můžete vylepšit tuto dokumentaci? + THEME_LEARN4_CLEAR_HISTORY: Smazat historii + THEME_LEARN4_BUILT_WITH_GRAV: Postaveno na <a href="http://getgrav.org">Grav</a> - Moderní správce obsahu pomocí souborů prostých textů + THEME_LEARN4_SEARCH_DOCUMENTATION: Vyhledat v dokumentaci +de: + THEME_LEARN4_GITHUB_NOTE: Fehler gefunden? Möchten Sie diese Seite verbessern? + THEME_LEARN4_CLEAR_HISTORY: Verlauf löschen + THEME_LEARN4_BUILT_WITH_GRAV: Seite erstellt mit <a href="http://getgrav.org">Grav</a> - The Modern Flat File CMS + THEME_LEARN4_SEARCH_DOCUMENTATION: Dokumentation durchsuchen +es: + THEME_LEARN4_GITHUB_NOTE: ¿Encontraste errores? ¿Crees que puedes mejorar esta documentación? + THEME_LEARN4_CLEAR_HISTORY: Limpiar historial + THEME_LEARN4_BUILT_WITH_GRAV: Hecho con <a href="http://getgrav.org">Grav</a> - El CMS moderno de archivos planos + THEME_LEARN4_SEARCH_DOCUMENTATION: Buscar en la documentación +fr: + THEME_LEARN4_GITHUB_NOTE: Vous avez découvert des erreurs ? Vous pensez pouvoir améliorer cette documentation ? + THEME_LEARN4_CLEAR_HISTORY: Effacer l'historique + THEME_LEARN4_BUILT_WITH_GRAV: Créé avec <a href="http://getgrav.org">Grav</a> - Le CMS moderne sans base de données + THEME_LEARN4_SEARCH_DOCUMENTATION: Rechercher dans la documentation +it: + THEME_LEARN4_GITHUB_NOTE: Hai trovato degli errori? Pensi di poter migliorare questa documentazione? + THEME_LEARN4_CLEAR_HISTORY: Cancella Cronologia + THEME_LEARN4_BUILT_WITH_GRAV: Built with <a href="http://getgrav.org">Grav</a> - The Modern Flat File CMS + THEME_LEARN4_SEARCH_DOCUMENTATION: Cerca nella Documentatione +ru: + THEME_LEARN4_GITHUB_NOTE: Нашли ошибки? Думаете, что можете улучшить документацию? + THEME_LEARN4_CLEAR_HISTORY: Очистить историю + THEME_LEARN4_BUILT_WITH_GRAV: Сделано на <a href="http://getgrav.org">Grav</a> — современной файловой CMS + THEME_LEARN4_SEARCH_DOCUMENTATION: Поиск по документации diff --git a/themes/learn4/learn4.php b/themes/learn4/learn4.php new file mode 100644 index 00000000..99ffb6b7 --- /dev/null +++ b/themes/learn4/learn4.php @@ -0,0 +1,81 @@ +<?php +namespace Grav\Theme; + +use Grav\Common\Theme; +use Grav\Plugin\ShortcodeManager; +use Grav\Theme\Learn4\Shortcodes\VersionShortcode; +use Pimple\Exception\UnknownIdentifierException; +use RocketTheme\Toolbox\Event\Event; + +class Learn4 extends Theme +{ + public static function getSubscribedEvents(): array + { + return [ + 'onShortcodeHandlers' => ['onShortcodeHandlers', 0], + 'onTwigInitialized' => ['onTwigInitialized', 0], + 'onTwigPageVariables' => ['onTwigPageVariables', 0], + 'onTNTSearchQuery' => ['onTNTSearchQuery', 1000], + ]; + } + + public function onTwigPageVariables() + { + $this->grav['twig']->twig_vars['grav_version'] = GRAV_VERSION; + } + + public function onTNTSearchQuery(Event $e): void + { + $query = $this->grav['uri']->param('q'); + + if ($query) { + $page = $e['page']; + $fields = $e['fields']; + + $fields->results[] = $page->route(); + $e->stopPropagation(); + } + } + + public function onShortcodeHandlers(): void + { + /** @var ShortcodeManager $sc */ + $sc = $this->grav['shortcode']; + $sc->registerAllShortcodes(__DIR__ . '/classes/Shortcodes'); + } + + public function onTwigInitialized(): void + { + $twig = $this->grav['twig']; + + $form_class_variables = [ +// 'form_outer_classes' => 'form-horizontal', + 'form_button_outer_classes' => 'button-wrapper', + 'form_button_classes' => 'btn', + 'form_errors_classes' => '', + 'form_field_outer_classes' => 'form-group', + 'form_field_outer_label_classes' => 'form-label-wrapper', + 'form_field_label_classes' => 'form-label', +// 'form_field_outer_data_classes' => 'col-9', + 'form_field_input_classes' => 'form-input', + 'form_field_textarea_classes' => 'form-input', + 'form_field_select_classes' => 'form-select', + 'form_field_radio_classes' => 'form-radio', + 'form_field_checkbox_classes' => 'form-checkbox', + ]; + + $twig->twig_vars = array_merge($twig->twig_vars, $form_class_variables); + + $color = $this->grav['uri']->query('color'); + + if (in_array($color, ['purple', 'green', 'blue', 'contrast'])) { + setcookie("sidebar-pref", $color, 0, '/'); + } else { + $color = filter_input(INPUT_COOKIE, 'sidebar-pref') ?: 'purple'; + } + + $twig->twig_vars['sidebar_color'] = "sidebar-$color"; + + } + +} diff --git a/themes/learn4/learn4.yaml b/themes/learn4/learn4.yaml new file mode 100644 index 00000000..9517ebaa --- /dev/null +++ b/themes/learn4/learn4.yaml @@ -0,0 +1,11 @@ +enabled: true +production-mode: false +grid-size: grid-lg +github: + note: true + link: true + tree: https://github.com/getgrav/grav-learn/blob/develop/ + commits: https://github.com/getgrav/grav-learn/commits/develop/ +spectre: + exp: false + icons: false diff --git a/themes/learn4/package.json b/themes/learn4/package.json new file mode 100644 index 00000000..c51e6055 --- /dev/null +++ b/themes/learn4/package.json @@ -0,0 +1,46 @@ +{ + "name": "Learn4", + "version": "1.0.0", + "main": "app/main.js", + "author": "Team Grav", + "license": "MIT", + "scripts": { + "watch": "NODE_ENV=development webpack --watch --progress --colors --mode development --config webpack.conf.js", + "dev": "NODE_ENV=development webpack --progress --colors --config webpack.conf.js", + "prod": "NODE_ENV=production-wip webpack --mode development --config webpack.conf.js" + }, + "dependencies": {}, + "devDependencies": { + "babel-core": "^6.26.3", + "babel-eslint": "^8.2.6", + "babel-loader": "^7.1.5", + "babel-polyfill": "^6.26.0", + "babel-preset-es2015": "^6.24.1", + "babel-preset-stage-3": "^6.24.1", + "css-loader": "^1.0.0", + "eslint": "^5.2.0", + "eslint-loader": "^2.1.0", + "exports-loader": "^0.7.0", + "gulp": "^4.0.0", + "gulp-autoprefixer": "^6.0.0", + "gulp-clean-css": "^3.9.4", + "gulp-csscomb": "^3.0.8", + "gulp-rename": "^1.3.0", + "gulp-sass": "^4.0.1", + "gulp-sourcemaps": "^2.6.4", + "imports-loader": "^0.8.0", + "json-loader": "^0.5.7", + "style-loader": "^0.21.0", + "uglifyjs-webpack-plugin": "^2.1.1", + "webpack": "^4.16.2", + "webpack-cli": "^3.1.0" + }, + "browserslist": [ + "last 4 Chrome versions", + "Edge >= 12", + "Firefox ESR", + "last 4 Safari versions", + "last 4 Opera versions", + "Explorer >= 10" + ] +} diff --git a/themes/learn4/screenshot.jpg b/themes/learn4/screenshot.jpg new file mode 100644 index 00000000..2d166b84 Binary files /dev/null and b/themes/learn4/screenshot.jpg differ diff --git a/themes/learn4/scss/spectre-exp.scss b/themes/learn4/scss/spectre-exp.scss new file mode 100644 index 00000000..a2813b4e --- /dev/null +++ b/themes/learn4/scss/spectre-exp.scss @@ -0,0 +1,19 @@ +// Variables and mixins +@import "theme/variables"; +@import "spectre/variables"; +@import "spectre/mixins"; + +/*! Spectre.css Experimentals v#{$version} | MIT License | github.com/picturepan2/spectre */ +// Experimentals +@import "spectre/autocomplete"; +@import "spectre/calendars"; +@import "spectre/carousels"; +@import "spectre/comparison-sliders"; +@import "spectre/filters"; +@import "spectre/meters"; +@import "spectre/off-canvas"; +@import "spectre/parallax"; +@import "spectre/progress"; +@import "spectre/sliders"; +@import "spectre/timelines"; +@import "spectre/viewer-360"; diff --git a/themes/learn4/scss/spectre-icons.scss b/themes/learn4/scss/spectre-icons.scss new file mode 100644 index 00000000..a2233978 --- /dev/null +++ b/themes/learn4/scss/spectre-icons.scss @@ -0,0 +1,11 @@ +// Variables and mixins +@import "theme/variables"; +@import "spectre/variables"; +@import "spectre/mixins"; + +/*! Spectre.css Icons v#{$version} | MIT License | github.com/picturepan2/spectre */ +// Icons +@import "spectre/icons/icons-core"; +@import "spectre/icons/icons-navigation"; +@import "spectre/icons/icons-action"; +@import "spectre/icons/icons-object"; diff --git a/themes/learn4/scss/spectre.scss b/themes/learn4/scss/spectre.scss new file mode 100644 index 00000000..4ca68684 --- /dev/null +++ b/themes/learn4/scss/spectre.scss @@ -0,0 +1,55 @@ +// Variables and mixins +@import "theme/variables"; +@import "spectre/variables"; +@import "spectre/mixins"; + +/*! Spectre.css v#{$version} | MIT License | github.com/picturepan2/spectre */ +// Reset and dependencies +@import "spectre/normalize"; +@import "spectre/base"; + +// Elements +@import "spectre/typography"; +@import "spectre/asian"; +@import "spectre/tables"; +@import "spectre/buttons"; +@import "spectre/forms"; +@import "spectre/labels"; +@import "spectre/codes"; +@import "spectre/media"; + +// Layout +@import "spectre/layout"; +@import "spectre/hero"; +@import "spectre/navbar"; + +// Components +@import "spectre/accordions"; +@import "spectre/avatars"; +@import "spectre/badges"; +@import "spectre/breadcrumbs"; +@import "spectre/bars"; +@import "spectre/cards"; +@import "spectre/chips"; +@import "spectre/dropdowns"; +@import "spectre/empty"; +@import "spectre/menus"; +@import "spectre/modals"; +@import "spectre/navs"; +@import "spectre/pagination"; +@import "spectre/panels"; +@import "spectre/popovers"; +@import "spectre/steps"; +//@import "spectre/tabs"; +@import "spectre/tiles"; +@import "spectre/toasts"; +@import "spectre/tooltips"; + + +// Utility classes +@import "spectre/animations"; +@import "spectre/utilities"; + +// Extras +@import "spectre/off-canvas"; +@import "theme/extensions"; diff --git a/themes/learn4/scss/spectre/_accordions.scss b/themes/learn4/scss/spectre/_accordions.scss new file mode 100644 index 00000000..fd21585d --- /dev/null +++ b/themes/learn4/scss/spectre/_accordions.scss @@ -0,0 +1,38 @@ +// Accordions +.accordion { + input:checked ~, + &[open] { + & .accordion-header { + .icon { + transform: rotate(90deg); + } + } + + & .accordion-body { + max-height: 50rem; + } + } + + .accordion-header { + display: block; + padding: $unit-1 $unit-2; + + .icon { + transition: transform .25s; + } + } + + .accordion-body { + margin-bottom: $layout-spacing; + max-height: 0; + overflow: hidden; + transition: max-height .25s; + } +} + +// Remove default details marker in Webkit +summary.accordion-header { + &::-webkit-details-marker { + display: none; + } +} diff --git a/themes/learn4/scss/spectre/_animations.scss b/themes/learn4/scss/spectre/_animations.scss new file mode 100644 index 00000000..e7fde1ac --- /dev/null +++ b/themes/learn4/scss/spectre/_animations.scss @@ -0,0 +1,20 @@ +// Animations +@keyframes loading { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} + +@keyframes slide-down { + 0% { + opacity: 0; + transform: translateY(-$unit-8); + } + 100% { + opacity: 1; + transform: translateY(0); + } +} diff --git a/themes/learn4/scss/spectre/_asian.scss b/themes/learn4/scss/spectre/_asian.scss new file mode 100644 index 00000000..e426f39a --- /dev/null +++ b/themes/learn4/scss/spectre/_asian.scss @@ -0,0 +1,43 @@ +// Optimized for East Asian CJK +html:lang(zh), +html:lang(zh-Hans), +.lang-zh, +.lang-zh-hans { + font-family: $cjk-zh-hans-font-family; +} + +html:lang(zh-Hant), +.lang-zh-hant { + font-family: $cjk-zh-hant-font-family; +} + +html:lang(ja), +.lang-ja { + font-family: $cjk-jp-font-family; +} + +html:lang(ko), +.lang-ko { + font-family: $cjk-ko-font-family; +} + +:lang(zh), +:lang(ja), +.lang-cjk { + ins, + u { + border-bottom: $border-width solid; + text-decoration: none; + } + + del + del, + del + s, + ins + ins, + ins + u, + s + del, + s + s, + u + ins, + u + u { + margin-left: .125em; + } +} diff --git a/themes/learn4/scss/spectre/_autocomplete.scss b/themes/learn4/scss/spectre/_autocomplete.scss new file mode 100644 index 00000000..279fa036 --- /dev/null +++ b/themes/learn4/scss/spectre/_autocomplete.scss @@ -0,0 +1,47 @@ +// Autocomplete +.form-autocomplete { + position: relative; + + .form-autocomplete-input { + align-content: flex-start; + display: flex; + flex-wrap: wrap; + height: auto; + min-height: $unit-8; + padding: $unit-h; + + &.is-focused { + @include control-shadow(); + border-color: $primary-color; + } + + .form-input { + border-color: transparent; + box-shadow: none; + display: inline-block; + flex: 1 0 auto; + height: $unit-6; + line-height: $unit-4; + margin: $unit-h; + width: auto; + } + } + + .menu { + left: 0; + position: absolute; + top: 100%; + width: 100%; + } + + &.autocomplete-oneline { + .form-autocomplete-input { + flex-wrap: nowrap; + overflow-x: auto; + } + + .chip { + flex: 1 0 auto; + } + } +} diff --git a/themes/learn4/scss/spectre/_avatars.scss b/themes/learn4/scss/spectre/_avatars.scss new file mode 100644 index 00000000..b203aa25 --- /dev/null +++ b/themes/learn4/scss/spectre/_avatars.scss @@ -0,0 +1,77 @@ +// Avatars +.avatar { + @include avatar-base(); + background: $primary-color; + border-radius: 50%; + color: rgba($light-color, .85); + display: inline-block; + font-weight: 300; + line-height: 1.25; + margin: 0; + position: relative; + vertical-align: middle; + + &.avatar-xs { + @include avatar-base($unit-4); + } + &.avatar-sm { + @include avatar-base($unit-6); + } + &.avatar-lg { + @include avatar-base($unit-12); + } + &.avatar-xl { + @include avatar-base($unit-16); + } + + img { + border-radius: 50%; + height: 100%; + position: relative; + width: 100%; + z-index: $zindex-0; + } + + .avatar-icon, + .avatar-presence { + background: $bg-color-light; + bottom: 14.64%; + height: 50%; + padding: $border-width-lg; + position: absolute; + right: 14.64%; + transform: translate(50%, 50%); + width: 50%; + z-index: $zindex-0 + 1; + } + + .avatar-presence { + background: $gray-color; + box-shadow: 0 0 0 $border-width-lg $light-color; + border-radius: 50%; + height: .5em; + width: .5em; + + &.online { + background: $success-color; + } + + &.busy { + background: $error-color; + } + + &.away { + background: $warning-color; + } + } + + &[data-initial]::before { + color: currentColor; + content: attr(data-initial); + left: 50%; + position: absolute; + top: 50%; + transform: translate(-50%, -50%); + z-index: $zindex-0; + } +} \ No newline at end of file diff --git a/themes/learn4/scss/spectre/_badges.scss b/themes/learn4/scss/spectre/_badges.scss new file mode 100644 index 00000000..d67f6d19 --- /dev/null +++ b/themes/learn4/scss/spectre/_badges.scss @@ -0,0 +1,60 @@ +// Badges +.badge { + position: relative; + white-space: nowrap; + + &[data-badge], + &:not([data-badge]) { + &::after { + background: $primary-color; + background-clip: padding-box; + border-radius: .5rem; + box-shadow: 0 0 0 .1rem $bg-color-light; + color: $light-color; + content: attr(data-badge); + display: inline-block; + transform: translate(-.05rem, -.5rem); + } + } + &[data-badge] { + &::after { + font-size: $font-size-sm; + height: .9rem; + line-height: 1; + min-width: .9rem; + padding: .1rem .2rem; + text-align: center; + white-space: nowrap; + } + } + &:not([data-badge]), + &[data-badge=""] { + &::after { + height: 6px; + min-width: 6px; + padding: 0; + width: 6px; + } + } + + // Badges for Buttons + &.btn { + &::after { + position: absolute; + top: 0; + right: 0; + transform: translate(50%, -50%); + } + } + + // Badges for Avatars + &.avatar { + &::after { + position: absolute; + top: 14.64%; + right: 14.64%; + transform: translate(50%, -50%); + z-index: $zindex-1; + } + } +} diff --git a/themes/learn4/scss/spectre/_bars.scss b/themes/learn4/scss/spectre/_bars.scss new file mode 100644 index 00000000..47e21c9a --- /dev/null +++ b/themes/learn4/scss/spectre/_bars.scss @@ -0,0 +1,71 @@ +// Bars +.bar { + background: $bg-color-dark; + border-radius: $border-radius; + display: flex; + flex-wrap: nowrap; + height: $unit-4; + width: 100%; + + &.bar-sm { + height: $unit-1; + } + + // TODO: attr() support + .bar-item { + background: $primary-color; + color: $light-color; + display: block; + font-size: $font-size-sm; + flex-shrink: 0; + line-height: $unit-4; + height: 100%; + position: relative; + text-align: center; + width: 0; + + &:first-child { + border-bottom-left-radius: $border-radius; + border-top-left-radius: $border-radius; + } + &:last-child { + border-bottom-right-radius: $border-radius; + border-top-right-radius: $border-radius; + flex-shrink: 1; + } + } +} + +// Slider bar +.bar-slider { + height: $border-width-lg; + margin: $layout-spacing 0; + position: relative; + + .bar-item { + left: 0; + padding: 0; + position: absolute; + &:not(:last-child):first-child { + background: $bg-color-dark; + z-index: $zindex-0; + } + } + + .bar-slider-btn { + background: $primary-color; + border: 0; + border-radius: 50%; + height: $unit-3; + padding: 0; + position: absolute; + right: 0; + top: 50%; + transform: translate(50%, -50%); + width: $unit-3; + + &:active { + box-shadow: 0 0 0 .1rem $primary-color; + } + } +} diff --git a/themes/learn4/scss/spectre/_base.scss b/themes/learn4/scss/spectre/_base.scss new file mode 100644 index 00000000..4e01b202 --- /dev/null +++ b/themes/learn4/scss/spectre/_base.scss @@ -0,0 +1,44 @@ +// Base +*, +*::before, +*::after { + box-sizing: inherit; +} + +html { + box-sizing: border-box; + font-size: $html-font-size; + line-height: $html-line-height; + -webkit-tap-highlight-color: transparent; +} + +body { + background: $body-bg; + color: $body-font-color; + font-family: $body-font-family; + font-size: $font-size; + overflow-x: hidden; + text-rendering: optimizeLegibility; +} + +a { + color: $link-color; + outline: none; + text-decoration: none; + + &:focus { + @include control-shadow(); + } + + &:focus, + &:hover, + &:active, + &.active { + color: $link-color-dark; + text-decoration: underline; + } + + &:visited { + color: $link-color-light; + } +} diff --git a/themes/learn4/scss/spectre/_breadcrumbs.scss b/themes/learn4/scss/spectre/_breadcrumbs.scss new file mode 100644 index 00000000..6a5af316 --- /dev/null +++ b/themes/learn4/scss/spectre/_breadcrumbs.scss @@ -0,0 +1,29 @@ +// Breadcrumbs +.breadcrumb { + list-style: none; + margin: $unit-1 0; + padding: $unit-1 0; + + .breadcrumb-item { + color: $gray-color-dark; + display: inline-block; + margin: 0; + padding: $unit-1 0; + + &:not(:last-child) { + margin-right: $unit-1; + + a { + color: $gray-color-dark; + } + } + + &:not(:first-child) { + &::before { + color: $gray-color-dark; + content: "/"; + padding-right: $unit-2; + } + } + } +} diff --git a/themes/learn4/scss/spectre/_buttons.scss b/themes/learn4/scss/spectre/_buttons.scss new file mode 100644 index 00000000..9158f0fc --- /dev/null +++ b/themes/learn4/scss/spectre/_buttons.scss @@ -0,0 +1,193 @@ +// Buttons +.btn { + appearance: none; + background: $bg-color-light; + border: $border-width solid $primary-color; + border-radius: $border-radius; + color: $primary-color; + cursor: pointer; + display: inline-block; + font-size: $font-size; + height: $control-size; + line-height: $line-height; + outline: none; + padding: $control-padding-y $control-padding-x; + text-align: center; + text-decoration: none; + transition: background .2s, border .2s, box-shadow .2s, color .2s; + user-select: none; + vertical-align: middle; + white-space: nowrap; + &:focus { + @include control-shadow(); + } + &:focus, + &:hover { + background: $secondary-color; + border-color: $primary-color-dark; + text-decoration: none; + } + &:active, + &.active { + background: $primary-color-dark; + border-color: darken($primary-color-dark, 5%); + color: $light-color; + text-decoration: none; + &.loading { + &::after { + border-bottom-color: $light-color; + border-left-color: $light-color; + } + } + } + &[disabled], + &:disabled, + &.disabled { + cursor: default; + opacity: .5; + pointer-events: none; + } + + // Button Primary + &.btn-primary { + background: $primary-color; + border-color: $primary-color-dark; + color: $light-color; + &:focus, + &:hover { + background: darken($primary-color-dark, 2%); + border-color: darken($primary-color-dark, 5%); + color: $light-color; + } + &:active, + &.active { + background: darken($primary-color-dark, 4%); + border-color: darken($primary-color-dark, 7%); + color: $light-color; + } + &.loading { + &::after { + border-bottom-color: $light-color; + border-left-color: $light-color; + } + } + } + + // Button Colors + &.btn-success { + @include button-variant($success-color); + } + + &.btn-error { + @include button-variant($error-color); + } + + // Button Link + &.btn-link { + background: transparent; + border-color: transparent; + color: $link-color; + &:focus, + &:hover, + &:active, + &.active { + color: $link-color-dark; + } + } + + // Button Sizes + &.btn-sm { + font-size: $font-size-sm; + height: $control-size-sm; + padding: $control-padding-y-sm $control-padding-x-sm; + } + + &.btn-lg { + font-size: $font-size-lg; + height: $control-size-lg; + padding: $control-padding-y-lg $control-padding-x-lg; + } + + // Button Block + &.btn-block { + display: block; + width: 100%; + } + + // Button Action + &.btn-action { + width: $control-size; + padding-left: 0; + padding-right: 0; + + &.btn-sm { + width: $control-size-sm; + } + + &.btn-lg { + width: $control-size-lg; + } + } + + // Button Clear + &.btn-clear { + background: transparent; + border: 0; + color: currentColor; + height: $unit-5; + line-height: $unit-4; + margin-left: $unit-1; + margin-right: -2px; + opacity: 1; + padding: $unit-h; + text-decoration: none; + width: $unit-5; + + &:focus, + &:hover { + background: rgba($bg-color, .5); + opacity: .95; + } + + &::before { + content: "\2715"; + } + } +} + +// Button groups +.btn-group { + display: inline-flex; + flex-wrap: wrap; + + .btn { + flex: 1 0 auto; + &:first-child:not(:last-child) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; + } + &:not(:first-child):not(:last-child) { + border-radius: 0; + margin-left: -$border-width; + } + &:last-child:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; + margin-left: -$border-width; + } + &:focus, + &:hover, + &:active, + &.active { + z-index: $zindex-0; + } + } + + &.btn-group-block { + display: flex; + + .btn { + flex: 1 0 0; + } + } +} diff --git a/themes/learn4/scss/spectre/_calendars.scss b/themes/learn4/scss/spectre/_calendars.scss new file mode 100644 index 00000000..1e9fd153 --- /dev/null +++ b/themes/learn4/scss/spectre/_calendars.scss @@ -0,0 +1,222 @@ +// Calendars +.calendar { + border: $border-width solid $border-color; + border-radius: $border-radius; + display: block; + min-width: 280px; + + .calendar-nav { + align-items: center; + background: $bg-color; + border-top-left-radius: $border-radius; + border-top-right-radius: $border-radius; + display: flex; + font-size: $font-size-lg; + padding: $layout-spacing; + } + + .calendar-header, + .calendar-body { + display: flex; + flex-wrap: wrap; + justify-content: center; + padding: $layout-spacing 0; + + .calendar-date { + flex: 0 0 14.28%; // 7 calendar-items each row + max-width: 14.28%; + } + } + + .calendar-header { + background: $bg-color; + border-bottom: $border-width solid $border-color; + color: $gray-color; + font-size: $font-size-sm; + text-align: center; + } + + .calendar-body { + color: $gray-color-dark; + } + + .calendar-date { + border: 0; + padding: $unit-1; + + .date-item { + appearance: none; + background: transparent; + border: $border-width solid transparent; + border-radius: 50%; + color: $gray-color-dark; + cursor: pointer; + font-size: $font-size-sm; + height: $unit-7; + line-height: $unit-5; + outline: none; + padding: $unit-h; + position: relative; + text-align: center; + text-decoration: none; + transition: background .2s, border .2s, box-shadow .2s, color .2s; + vertical-align: middle; + white-space: nowrap; + width: $unit-7; + + &.date-today { + border-color: $secondary-color-dark; + color: $primary-color; + } + + &:focus { + @include control-shadow(); + } + + &:focus, + &:hover { + background: $secondary-color-light; + border-color: $secondary-color-dark; + color: $primary-color; + text-decoration: none; + } + &:active, + &.active { + background: $primary-color-dark; + border-color: darken($primary-color-dark, 5%); + color: $light-color; + } + + // Calendar badge support + &.badge { + &::after { + position: absolute; + top: 3px; + right: 3px; + transform: translate(50%, -50%); + } + } + } + + .date-item, + .calendar-event { + &:disabled, + &.disabled { + cursor: default; + opacity: .25; + pointer-events: none; + } + } + + &.prev-month, + &.next-month { + .date-item, + .calendar-event { + opacity: .25; + } + } + } + + .calendar-range { + position: relative; + + &::before { + background: $secondary-color; + content: ""; + height: $unit-7; + left: 0; + position: absolute; + right: 0; + top: 50%; + transform: translateY(-50%); + } + &.range-start { + &::before { + left: 50%; + } + } + &.range-end { + &::before { + right: 50%; + } + } + + &.range-start, + &.range-end { + .date-item { + background: $primary-color-dark; + border-color: darken($primary-color-dark, 5%); + color: $light-color; + } + } + + .date-item { + color: $primary-color; + } + } + + // Calendars size + &.calendar-lg { + .calendar-body { + padding: 0; + + .calendar-date { + border-bottom: $border-width solid $border-color; + border-right: $border-width solid $border-color; + display: flex; + flex-direction: column; + height: 5.5rem; + padding: 0; + + &:nth-child(7n) { + border-right: 0; + } + &:nth-last-child(-n+7) { + border-bottom: 0; + } + } + } + + .date-item { + align-self: flex-end; + height: $unit-7; + margin-right: $layout-spacing-sm; + margin-top: $layout-spacing-sm; + } + + .calendar-range { + &::before { + top: 19px; + } + &.range-start { + &::before { + left: auto; + width: 19px; + } + } + &.range-end { + &::before { + right: 19px; + } + } + } + + .calendar-events { + flex-grow: 1; + line-height: 1; + overflow-y: auto; + padding: $layout-spacing-sm; + } + + .calendar-event { + border-radius: $border-radius; + font-size: $font-size-sm; + display: block; + margin: $unit-h auto; + overflow: hidden; + padding: 3px 4px; + text-overflow: ellipsis; + white-space: nowrap; + } + } +} diff --git a/themes/learn4/scss/spectre/_cards.scss b/themes/learn4/scss/spectre/_cards.scss new file mode 100644 index 00000000..6b712e15 --- /dev/null +++ b/themes/learn4/scss/spectre/_cards.scss @@ -0,0 +1,43 @@ +// Cards +.card { + background: $bg-color-light; + border: $border-width solid $border-color; + border-radius: $border-radius; + display: flex; + flex-direction: column; + + .card-header, + .card-body, + .card-footer { + padding: $layout-spacing-lg; + padding-bottom: 0; + + &:last-child { + padding-bottom: $layout-spacing-lg; + } + } + + .card-body { + flex: 1 1 auto; + } + + .card-image { + padding-top: $layout-spacing-lg; + + &:first-child { + padding-top: 0; + + img { + border-top-left-radius: $border-radius; + border-top-right-radius: $border-radius; + } + } + + &:last-child { + img { + border-bottom-left-radius: $border-radius; + border-bottom-right-radius: $border-radius; + } + } + } +} diff --git a/themes/learn4/scss/spectre/_carousels.scss b/themes/learn4/scss/spectre/_carousels.scss new file mode 100644 index 00000000..66dc51b2 --- /dev/null +++ b/themes/learn4/scss/spectre/_carousels.scss @@ -0,0 +1,136 @@ +// Carousels +// The number of carousel images +$carousel-number: 8; + +%carousel-image-checked { + animation: carousel-slidein .75s ease-in-out 1; + opacity: 1; + z-index: $zindex-1; +} + +%carousel-nav-checked { + color: $gray-color-light; +} + +.carousel { + background: $bg-color; + display: block; + overflow: hidden; + position: relative; + width: 100%; + -webkit-overflow-scrolling: touch; + z-index: $zindex-0; + + .carousel-container { + height: 100%; + left: 0; + position: relative; + &::before { + content: ""; + display: block; + padding-bottom: 56.25%; + } + + .carousel-item { + animation: carousel-slideout 1s ease-in-out 1; + height: 100%; + left: 0; + margin: 0; + opacity: 0; + position: absolute; + top: 0; + width: 100%; + + &:hover { + .item-prev, + .item-next { + opacity: 1; + } + } + } + + .item-prev, + .item-next { + background: rgba($gray-color-light, .25); + border-color: rgba($gray-color-light, .5); + color: $gray-color-light; + opacity: 0; + position: absolute; + top: 50%; + transition: all .4s; + transform: translateY(-50%); + z-index: $zindex-1; + } + .item-prev { + left: 1rem; + } + .item-next { + right: 1rem; + } + } + + .carousel-locator { + @for $i from 1 through ($carousel-number) { + &:nth-of-type(#{$i}):checked ~ .carousel-container .carousel-item:nth-of-type(#{$i}) { + @extend %carousel-image-checked; + } + } + + @for $i from 1 through ($carousel-number) { + &:nth-of-type(#{$i}):checked ~ .carousel-nav .nav-item:nth-of-type(#{$i}) { + @extend %carousel-nav-checked; + } + } + } + + .carousel-nav { + bottom: $layout-spacing; + display: flex; + justify-content: center; + left: 50%; + position: absolute; + transform: translateX(-50%); + width: 10rem; + z-index: $zindex-1; + + .nav-item { + color: rgba($gray-color-light, .5); + display: block; + flex: 1 0 auto; + height: $unit-8; + margin: $unit-1; + max-width: 2.5rem; + position: relative; + + &::before { + background: currentColor; + content: ""; + display: block; + height: $unit-h; + position: absolute; + top: .5rem; + width: 100%; + } + } + } +} + +@keyframes carousel-slidein { + 0% { + transform: translateX(100%); + } + 100% { + transform: translateX(0); + } +} + +@keyframes carousel-slideout { + 0% { + opacity: 1; + transform: translateX(0); + } + 100% { + opacity: 1; + transform: translateX(-50%); + } +} diff --git a/themes/learn4/scss/spectre/_chips.scss b/themes/learn4/scss/spectre/_chips.scss new file mode 100644 index 00000000..6729c560 --- /dev/null +++ b/themes/learn4/scss/spectre/_chips.scss @@ -0,0 +1,33 @@ +// Chips +.chip { + align-items: center; + background: $bg-color-dark; + border-radius: 5rem; + display: inline-flex; + font-size: 90%; + height: $unit-6; + line-height: $unit-4; + margin: $unit-h; + max-width: $control-width-sm; + overflow: hidden; + padding: $unit-1 $unit-2; + text-decoration: none; + text-overflow: ellipsis; + vertical-align: middle; + white-space: nowrap; + + &.active { + background: $primary-color; + color: $light-color; + } + + .avatar { + margin-left: -$unit-2; + margin-right: $unit-1; + } + + .btn-clear { + border-radius: 50%; + transform: scale(.75); + } +} diff --git a/themes/learn4/scss/spectre/_codes.scss b/themes/learn4/scss/spectre/_codes.scss new file mode 100644 index 00000000..3e6182c4 --- /dev/null +++ b/themes/learn4/scss/spectre/_codes.scss @@ -0,0 +1,31 @@ +// Codes +code { + @include label-base(); + @include label-variant($code-color, lighten($code-color, 26%)); + font-size: 85%; +} + +.code { + border-radius: $border-radius; + color: $body-font-color; + position: relative; + + &::before { + color: $gray-color; + content: attr(data-lang); + font-size: $font-size-sm; + position: absolute; + right: $layout-spacing; + top: $unit-h; + } + + code { + background: $bg-color; + color: inherit; + display: block; + line-height: 1.5; + overflow-x: auto; + padding: 1rem; + width: 100%; + } +} diff --git a/themes/learn4/scss/spectre/_comparison-sliders.scss b/themes/learn4/scss/spectre/_comparison-sliders.scss new file mode 100644 index 00000000..72bb25f8 --- /dev/null +++ b/themes/learn4/scss/spectre/_comparison-sliders.scss @@ -0,0 +1,115 @@ +// Image comparison slider +// Credit: http://codepen.io/solipsistacp/pen/Gpmaq +.comparison-slider { + height: 50vh; + overflow: hidden; + position: relative; + width: 100%; + -webkit-overflow-scrolling: touch; + + .comparison-before, + .comparison-after { + height: 100%; + left: 0; + margin: 0; + overflow: hidden; + position: absolute; + top: 0; + + img { + height: 100%; + object-fit: cover; + object-position: left center; + position: absolute; + width: 100%; + } + } + + .comparison-before { + width: 100%; + z-index: 1; + + .comparison-label { + right: $unit-4; + } + } + + .comparison-after { + max-width: 100%; + min-width: 0; + z-index: 2; + + &::before { + background: transparent; + content: ""; + cursor: default; + height: 100%; + left: 0; + position: absolute; + right: $unit-4; + top: 0; + z-index: $zindex-0; + } + + &::after { + background: currentColor; + border-radius: 50%; + box-shadow: 0 -5px, 0 5px; + color: $light-color; + content: ""; + height: 3px; + position: absolute; + right: $unit-2; + top: 50%; + transform: translate(50%, -50%); + width: 3px; + } + + .comparison-label { + left: $unit-4; + } + } + + .comparison-resizer { + animation: first-run 1.5s 1 ease-in-out; + cursor: ew-resize; + height: $unit-4; + left: 0; + max-width: 100%; + min-width: $unit-4; + opacity: 0; + outline: none; + position: relative; + resize: horizontal; + top: 50%; + transform: translateY(-50%) scaleY(30); + width: 0; + } + + .comparison-label { + background: rgba($dark-color, .5); + bottom: $unit-4; + color: $light-color; + padding: $unit-1 $unit-2; + position: absolute; + user-select: none; + } +} + +@keyframes first-run { + 0% { + width: 0; + } + 25% { + width: $unit-12; + } + 50% { + width: $unit-4; + } + 75% { + width: $unit-6; + } + 100% { + width: 0; + } +} diff --git a/themes/learn4/scss/spectre/_dropdowns.scss b/themes/learn4/scss/spectre/_dropdowns.scss new file mode 100644 index 00000000..324440ba --- /dev/null +++ b/themes/learn4/scss/spectre/_dropdowns.scss @@ -0,0 +1,36 @@ +// Dropdown +.dropdown { + display: inline-block; + position: relative; + + .menu { + animation: slide-down .15s ease 1; + display: none; + left: 0; + max-height: 50vh; + overflow-y: auto; + position: absolute; + top: 100%; + } + + &.dropdown-right { + .menu { + left: auto; + right: 0; + } + } + + &.active .menu, + .dropdown-toggle:focus + .menu, + .menu:hover { + display: block; + } + + // Fix dropdown-toggle border radius in button groups + .btn-group { + .dropdown-toggle:nth-last-child(2) { + border-bottom-right-radius: $border-radius; + border-top-right-radius: $border-radius; + } + } +} diff --git a/themes/learn4/scss/spectre/_empty.scss b/themes/learn4/scss/spectre/_empty.scss new file mode 100644 index 00000000..accba9ca --- /dev/null +++ b/themes/learn4/scss/spectre/_empty.scss @@ -0,0 +1,21 @@ +// Empty states (or Blank slates) +.empty { + background: $bg-color; + border-radius: $border-radius; + color: $gray-color-dark; + text-align: center; + padding: $unit-16 $unit-8; + + .empty-icon { + margin-bottom: $layout-spacing-lg; + } + + .empty-title, + .empty-subtitle { + margin: $layout-spacing auto; + } + + .empty-action { + margin-top: $layout-spacing-lg; + } +} diff --git a/themes/learn4/scss/spectre/_filters.scss b/themes/learn4/scss/spectre/_filters.scss new file mode 100644 index 00000000..37ccc89e --- /dev/null +++ b/themes/learn4/scss/spectre/_filters.scss @@ -0,0 +1,37 @@ +// Filters +// The number of filter options +$filter-number: 8 !default; + +%filter-checked-nav { + background: $primary-color; + color: $light-color; +} + +%filter-checked-body { + display: none; +} + +.filter { + .filter-nav { + margin: $layout-spacing 0; + } + + .filter-body { + display: flex; + flex-wrap: wrap; + } + + .filter-tag { + @for $i from 0 through ($filter-number) { + &#tag-#{$i}:checked ~ .filter-nav .chip[for="tag-#{$i}"] { + @extend %filter-checked-nav; + } + } + + @for $i from 1 through ($filter-number) { + &#tag-#{$i}:checked ~ .filter-body .filter-item:not([data-tag~="tag-#{$i}"]) { + @extend %filter-checked-body; + } + } + } +} diff --git a/themes/learn4/scss/spectre/_forms.scss b/themes/learn4/scss/spectre/_forms.scss new file mode 100644 index 00000000..20a6b4fa --- /dev/null +++ b/themes/learn4/scss/spectre/_forms.scss @@ -0,0 +1,555 @@ +// Forms +.form-group { + &:not(:last-child) { + margin-bottom: $layout-spacing; + } +} + +fieldset { + margin-bottom: $layout-spacing-lg; +} + +legend { + font-size: $font-size-lg; + font-weight: 500; + margin-bottom: $layout-spacing-lg; +} + +// Form element: Label +.form-label { + display: block; + line-height: $line-height; + padding: $control-padding-y + $border-width 0; + + &.label-sm { + font-size: $font-size-sm; + padding: $control-padding-y-sm + $border-width 0; + } + + &.label-lg { + font-size: $font-size-lg; + padding: $control-padding-y-lg + $border-width 0; + } +} + +// Form element: Input +.form-input { + appearance: none; + background: $bg-color-light; + background-image: none; + border: $border-width solid $border-color-dark; + border-radius: $border-radius; + color: $body-font-color; + display: block; + font-size: $font-size; + height: $control-size; + line-height: $line-height; + max-width: 100%; + outline: none; + padding: $control-padding-y $control-padding-x; + position: relative; + transition: background .2s, border .2s, box-shadow .2s, color .2s; + width: 100%; + &:focus { + @include control-shadow(); + border-color: $primary-color; + } + &::placeholder { + color: $gray-color; + } + + // Input sizes + &.input-sm { + font-size: $font-size-sm; + height: $control-size-sm; + padding: $control-padding-y-sm $control-padding-x-sm; + } + + &.input-lg { + font-size: $font-size-lg; + height: $control-size-lg; + padding: $control-padding-y-lg $control-padding-x-lg; + } + + &.input-inline { + display: inline-block; + vertical-align: middle; + width: auto; + } + + // Input types + &[type="file"] { + height: auto; + } +} + +// Form element: Textarea +textarea.form-input { + &, + &.input-lg, + &.input-sm { + height: auto; + } +} + +// Form element: Input hint +.form-input-hint { + color: $gray-color; + font-size: $font-size-sm; + margin-top: $unit-1; + + .has-success &, + .is-success + & { + color: $success-color; + } + + .has-error &, + .is-error + & { + color: $error-color; + } +} + +// Form element: Select +.form-select { + appearance: none; + border: $border-width solid $border-color-dark; + border-radius: $border-radius; + color: inherit; + font-size: $font-size; + height: $control-size; + line-height: $line-height; + outline: none; + padding: $control-padding-y $control-padding-x; + vertical-align: middle; + width: 100%; + background: $bg-color-light; + &:focus { + @include control-shadow(); + border-color: $primary-color; + } + &::-ms-expand { + display: none; + } + + // Select sizes + &.select-sm { + font-size: $font-size-sm; + height: $control-size-sm; + padding: $control-padding-y-sm ($control-icon-size + $control-padding-x-sm) $control-padding-y-sm $control-padding-x-sm; + } + + &.select-lg { + font-size: $font-size-lg; + height: $control-size-lg; + padding: $control-padding-y-lg ($control-icon-size + $control-padding-x-lg) $control-padding-y-lg $control-padding-x-lg; + } + + // Multiple select + &[size], + &[multiple] { + height: auto; + padding: $control-padding-y $control-padding-x; + + option { + padding: $unit-h $unit-1; + } + } + &:not([multiple]):not([size]) { + background: $bg-color-light url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%204%205'%3E%3Cpath%20fill='%23667189'%20d='M2%200L0%202h4zm0%205L0%203h4z'/%3E%3C/svg%3E") no-repeat right .35rem center / .4rem .5rem; + padding-right: $control-icon-size + $control-padding-x; + } +} + +// Form Icons +.has-icon-left, +.has-icon-right { + position: relative; + + .form-icon { + height: $control-icon-size; + margin: 0 $control-padding-y; + position: absolute; + top: 50%; + transform: translateY(-50%); + width: $control-icon-size; + z-index: $zindex-0 + 1; + } +} + +.has-icon-left { + .form-icon { + left: $border-width; + } + + .form-input { + padding-left: $control-icon-size + $control-padding-y * 2; + } +} + +.has-icon-right { + .form-icon { + right: $border-width; + } + + .form-input { + padding-right: $control-icon-size + $control-padding-y * 2; + } +} + +// Form element: Checkbox and Radio +.form-checkbox, +.form-radio, +.form-switch { + display: block; + line-height: $line-height; + margin: ($control-size - $control-size-sm) / 2 0; + min-height: $control-size-sm; + padding: (($control-size-sm - $line-height) / 2) $control-padding-x (($control-size-sm - $line-height) / 2) ($control-icon-size + $control-padding-x); + position: relative; + + input { + clip: rect(0, 0, 0, 0); + height: 1px; + margin: -1px; + overflow: hidden; + position: absolute; + width: 1px; + &:focus + .form-icon { + @include control-shadow(); + border-color: $primary-color; + } + &:checked + .form-icon { + background: $primary-color; + border-color: $primary-color; + } + } + + .form-icon { + border: $border-width solid $border-color-dark; + cursor: pointer; + display: inline-block; + position: absolute; + transition: background .2s, border .2s, box-shadow .2s, color .2s; + } + + // Input checkbox, radio and switch sizes + &.input-sm { + font-size: $font-size-sm; + margin: 0; + } + + &.input-lg { + font-size: $font-size-lg; + margin: ($control-size-lg - $control-size-sm) / 2 0; + } +} + +.form-checkbox, +.form-radio { + .form-icon { + background: $bg-color-light; + height: $control-icon-size; + left: 0; + top: ($control-size-sm - $control-icon-size) / 2; + width: $control-icon-size; + } + + input { + &:active + .form-icon { + background: $bg-color-dark; + } + } +} +.form-checkbox { + .form-icon { + border-radius: $border-radius; + } + + input { + &:checked + .form-icon { + &::before { + background-clip: padding-box; + border: $border-width-lg solid $light-color; + border-left-width: 0; + border-top-width: 0; + content: ""; + height: 9px; + left: 50%; + margin-left: -3px; + margin-top: -6px; + position: absolute; + top: 50%; + transform: rotate(45deg); + width: 6px; + } + } + &:indeterminate + .form-icon { + background: $primary-color; + border-color: $primary-color; + &::before { + background: $bg-color-light; + content: ""; + height: 2px; + left: 50%; + margin-left: -5px; + margin-top: -1px; + position: absolute; + top: 50%; + width: 10px; + } + } + } +} +.form-radio { + .form-icon { + border-radius: 50%; + } + + input { + &:checked + .form-icon { + &::before { + background: $bg-color-light; + border-radius: 50%; + content: ""; + height: 6px; + left: 50%; + position: absolute; + top: 50%; + transform: translate(-50%, -50%); + width: 6px; + } + } + } +} + +// Form element: Switch +.form-switch { + padding-left: ($unit-8 + $control-padding-x); + + .form-icon { + background: $gray-color; + background-clip: padding-box; + border-radius: $unit-2 + $border-width; + height: $unit-4 + $border-width * 2; + left: 0; + top: ($control-size-sm - $unit-4) / 2 - $border-width; + width: $unit-8; + &::before { + background: $bg-color-light; + border-radius: 50%; + content: ""; + display: block; + height: $unit-4; + left: 0; + position: absolute; + top: 0; + transition: background .2s, border .2s, box-shadow .2s, color .2s, left .2s; + width: $unit-4; + } + } + + input { + &:checked + .form-icon { + &::before { + left: 14px; + } + } + &:active + .form-icon { + &::before { + background: $bg-color; + } + } + } +} + +// Form element: Input groups +.input-group { + display: flex; + + .input-group-addon { + background: $bg-color; + border: $border-width solid $border-color-dark; + border-radius: $border-radius; + line-height: $line-height; + padding: $control-padding-y $control-padding-x; + white-space: nowrap; + + &.addon-sm { + font-size: $font-size-sm; + padding: $control-padding-y-sm $control-padding-x-sm; + } + + &.addon-lg { + font-size: $font-size-lg; + padding: $control-padding-y-lg $control-padding-x-lg; + } + } + + .form-input, + .form-select { + flex: 1 1 auto; + width: 1%; + } + + .input-group-btn { + z-index: $zindex-0; + } + + .form-input, + .form-select, + .input-group-addon, + .input-group-btn { + &:first-child:not(:last-child) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; + } + &:not(:first-child):not(:last-child) { + border-radius: 0; + margin-left: -$border-width; + } + &:last-child:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; + margin-left: -$border-width; + } + &:focus { + z-index: $zindex-0 + 1; + } + } + + .form-select { + width: auto; + } + + &.input-inline { + display: inline-flex; + } +} + +// Form validation states +.form-input, +.form-select { + .has-success &, + &.is-success { + background: lighten($success-color, 53%); + border-color: $success-color; + &:focus { + @include control-shadow($success-color); + } + } + + .has-error &, + &.is-error { + background: lighten($error-color, 53%); + border-color: $error-color; + &:focus { + @include control-shadow($error-color); + } + } +} + +.form-checkbox, +.form-radio, +.form-switch { + .has-error &, + &.is-error { + .form-icon { + border-color: $error-color; + } + + input { + &:checked + .form-icon { + background: $error-color; + border-color: $error-color; + } + + &:focus + .form-icon { + @include control-shadow($error-color); + border-color: $error-color; + } + } + } +} + +.form-checkbox { + .has-error &, + &.is-error { + input { + &:indeterminate + .form-icon { + background: $error-color; + border-color: $error-color; + } + } + } +} + +// validation based on :placeholder-shown (Edge doesn't support it yet) +.form-input { + &:not(:placeholder-shown) { + &:invalid { + border-color: $error-color; + &:focus { + @include control-shadow($error-color); + background: lighten($error-color, 53%); + } + + & + .form-input-hint { + color: $error-color; + } + } + } +} + +// Form disabled and readonly +.form-input, +.form-select { + &:disabled, + &.disabled { + background-color: $bg-color-dark; + cursor: not-allowed; + opacity: .5; + } +} + +.form-input { + &[readonly] { + background-color: $bg-color; + } +} + +input { + &:disabled, + &.disabled { + & + .form-icon { + background: $bg-color-dark; + cursor: not-allowed; + opacity: .5; + } + } +} + +.form-switch { + input { + &:disabled, + &.disabled { + & + .form-icon::before { + background: $bg-color-light; + } + } + } +} + +// Form horizontal +.form-horizontal { + padding: $layout-spacing 0; + + .form-group { + display: flex; + flex-wrap: wrap; + } +} + +// Form inline +.form-inline { + display: inline-block; +} diff --git a/themes/learn4/scss/spectre/_hero.scss b/themes/learn4/scss/spectre/_hero.scss new file mode 100644 index 00000000..00444618 --- /dev/null +++ b/themes/learn4/scss/spectre/_hero.scss @@ -0,0 +1,22 @@ +// Hero +.hero { + display: flex; + flex-direction: column; + justify-content: space-between; + padding-bottom: 4rem; + padding-top: 4rem; + + &.hero-sm { + padding-bottom: 2rem; + padding-top: 2rem; + } + + &.hero-lg { + padding-bottom: 8rem; + padding-top: 8rem; + } + + .hero-body { + padding: $layout-spacing; + } +} \ No newline at end of file diff --git a/themes/learn4/scss/spectre/_icons.scss b/themes/learn4/scss/spectre/_icons.scss new file mode 100644 index 00000000..4f3c5ce6 --- /dev/null +++ b/themes/learn4/scss/spectre/_icons.scss @@ -0,0 +1,5 @@ +// CSS Icons +@import "icons/icons-core"; +@import "icons/icons-navigation"; +@import "icons/icons-action"; +@import "icons/icons-object"; \ No newline at end of file diff --git a/themes/learn4/scss/spectre/_labels.scss b/themes/learn4/scss/spectre/_labels.scss new file mode 100644 index 00000000..ca693cd2 --- /dev/null +++ b/themes/learn4/scss/spectre/_labels.scss @@ -0,0 +1,34 @@ +// Labels +.label { + @include label-base(); + @include label-variant(lighten($body-font-color, 5%), $bg-color-dark); + display: inline-block; + + // Label rounded + &.label-rounded { + border-radius: 5rem; + padding-left: .4rem; + padding-right: .4rem; + } + + // Label colors + &.label-primary { + @include label-variant($light-color, $primary-color); + } + + &.label-secondary { + @include label-variant($primary-color, $secondary-color); + } + + &.label-success { + @include label-variant($light-color, $success-color); + } + + &.label-warning { + @include label-variant($light-color, $warning-color); + } + + &.label-error { + @include label-variant($light-color, $error-color); + } +} diff --git a/themes/learn4/scss/spectre/_layout.scss b/themes/learn4/scss/spectre/_layout.scss new file mode 100644 index 00000000..1f6b77c4 --- /dev/null +++ b/themes/learn4/scss/spectre/_layout.scss @@ -0,0 +1,444 @@ +// Layout +.container { + margin-left: auto; + margin-right: auto; + padding-left: $layout-spacing; + padding-right: $layout-spacing; + width: 100%; + + $grid-spacing: ($layout-spacing / ($layout-spacing * 0 + 1)) * $html-font-size; + + &.grid-xl { + max-width: $grid-spacing * 2 + $size-xl; + } + + &.grid-lg { + max-width: $grid-spacing * 2 + $size-lg; + } + + &.grid-md { + max-width: $grid-spacing * 2 + $size-md; + } + + &.grid-sm { + max-width: $grid-spacing * 2 + $size-sm; + } + + &.grid-xs { + max-width: $grid-spacing * 2 + $size-xs; + } +} + +// Responsive breakpoint system +.show-xs, +.show-sm, +.show-md, +.show-lg, +.show-xl { + display: none !important; +} + +// Responsive grid system +.columns { + display: flex; + flex-wrap: wrap; + margin-left: -$layout-spacing; + margin-right: -$layout-spacing; + + &.col-gapless { + margin-left: 0; + margin-right: 0; + + & > .column { + padding-left: 0; + padding-right: 0; + } + } + &.col-oneline { + flex-wrap: nowrap; + overflow-x: auto; + } +} +.column { + flex: 1; + max-width: 100%; + padding-left: $layout-spacing; + padding-right: $layout-spacing; + + &.col-12, + &.col-11, + &.col-10, + &.col-9, + &.col-8, + &.col-7, + &.col-6, + &.col-5, + &.col-4, + &.col-3, + &.col-2, + &.col-1, + &.col-auto { + flex: none; + } +} +.col-12 { + width: 100%; +} +.col-11 { + width: 91.66666667%; +} +.col-10 { + width: 83.33333333%; +} +.col-9 { + width: 75%; +} +.col-8 { + width: 66.66666667%; +} +.col-7 { + width: 58.33333333%; +} +.col-6 { + width: 50%; +} +.col-5 { + width: 41.66666667%; +} +.col-4 { + width: 33.33333333%; +} +.col-3 { + width: 25%; +} +.col-2 { + width: 16.66666667%; +} +.col-1 { + width: 8.33333333%; +} +.col-auto { + flex: 0 0 auto; + max-width: none; + width: auto; +} +.col-mx-auto { + margin-left: auto; + margin-right: auto; +} +.col-ml-auto { + margin-left: auto; +} +.col-mr-auto { + margin-right: auto; +} +@media (max-width: $size-xl) { + .col-xl-12, + .col-xl-11, + .col-xl-10, + .col-xl-9, + .col-xl-8, + .col-xl-7, + .col-xl-6, + .col-xl-5, + .col-xl-4, + .col-xl-3, + .col-xl-2, + .col-xl-1, + .col-xl-auto { + flex: none; + } + .col-xl-12 { + width: 100%; + } + .col-xl-11 { + width: 91.66666667%; + } + .col-xl-10 { + width: 83.33333333%; + } + .col-xl-9 { + width: 75%; + } + .col-xl-8 { + width: 66.66666667%; + } + .col-xl-7 { + width: 58.33333333%; + } + .col-xl-6 { + width: 50%; + } + .col-xl-5 { + width: 41.66666667%; + } + .col-xl-4 { + width: 33.33333333%; + } + .col-xl-3 { + width: 25%; + } + .col-xl-2 { + width: 16.66666667%; + } + .col-xl-1 { + width: 8.33333333%; + } + .col-xl-auto { + width: auto; + } + .hide-xl { + display: none !important; + } + .show-xl { + display: block !important; + } +} +@media (max-width: $size-lg) { + .col-lg-12, + .col-lg-11, + .col-lg-10, + .col-lg-9, + .col-lg-8, + .col-lg-7, + .col-lg-6, + .col-lg-5, + .col-lg-4, + .col-lg-3, + .col-lg-2, + .col-lg-1, + .col-lg-auto { + flex: none; + } + .col-lg-12 { + width: 100%; + } + .col-lg-11 { + width: 91.66666667%; + } + .col-lg-10 { + width: 83.33333333%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-8 { + width: 66.66666667%; + } + .col-lg-7 { + width: 58.33333333%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-5 { + width: 41.66666667%; + } + .col-lg-4 { + width: 33.33333333%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-2 { + width: 16.66666667%; + } + .col-lg-1 { + width: 8.33333333%; + } + .col-lg-auto { + width: auto; + } + .hide-lg { + display: none !important; + } + .show-lg { + display: block !important; + } +} +@media (max-width: $size-md) { + .col-md-12, + .col-md-11, + .col-md-10, + .col-md-9, + .col-md-8, + .col-md-7, + .col-md-6, + .col-md-5, + .col-md-4, + .col-md-3, + .col-md-2, + .col-md-1, + .col-md-auto { + flex: none; + } + .col-md-12 { + width: 100%; + } + .col-md-11 { + width: 91.66666667%; + } + .col-md-10 { + width: 83.33333333%; + } + .col-md-9 { + width: 75%; + } + .col-md-8 { + width: 66.66666667%; + } + .col-md-7 { + width: 58.33333333%; + } + .col-md-6 { + width: 50%; + } + .col-md-5 { + width: 41.66666667%; + } + .col-md-4 { + width: 33.33333333%; + } + .col-md-3 { + width: 25%; + } + .col-md-2 { + width: 16.66666667%; + } + .col-md-1 { + width: 8.33333333%; + } + .col-md-auto { + width: auto; + } + .hide-md { + display: none !important; + } + .show-md { + display: block !important; + } +} +@media (max-width: $size-sm) { + .col-sm-12, + .col-sm-11, + .col-sm-10, + .col-sm-9, + .col-sm-8, + .col-sm-7, + .col-sm-6, + .col-sm-5, + .col-sm-4, + .col-sm-3, + .col-sm-2, + .col-sm-1, + .col-sm-auto { + flex: none; + } + .col-sm-12 { + width: 100%; + } + .col-sm-11 { + width: 91.66666667%; + } + .col-sm-10 { + width: 83.33333333%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-8 { + width: 66.66666667%; + } + .col-sm-7 { + width: 58.33333333%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-5 { + width: 41.66666667%; + } + .col-sm-4 { + width: 33.33333333%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-2 { + width: 16.66666667%; + } + .col-sm-1 { + width: 8.33333333%; + } + .col-sm-auto { + width: auto; + } + .hide-sm { + display: none !important; + } + .show-sm { + display: block !important; + } +} +@media (max-width: $size-xs) { + .col-xs-12, + .col-xs-11, + .col-xs-10, + .col-xs-9, + .col-xs-8, + .col-xs-7, + .col-xs-6, + .col-xs-5, + .col-xs-4, + .col-xs-3, + .col-xs-2, + .col-xs-1, + .col-xs-auto { + flex: none; + } + .col-xs-12 { + width: 100%; + } + .col-xs-11 { + width: 91.66666667%; + } + .col-xs-10 { + width: 83.33333333%; + } + .col-xs-9 { + width: 75%; + } + .col-xs-8 { + width: 66.66666667%; + } + .col-xs-7 { + width: 58.33333333%; + } + .col-xs-6 { + width: 50%; + } + .col-xs-5 { + width: 41.66666667%; + } + .col-xs-4 { + width: 33.33333333%; + } + .col-xs-3 { + width: 25%; + } + .col-xs-2 { + width: 16.66666667%; + } + .col-xs-1 { + width: 8.33333333%; + } + .col-xs-auto { + width: auto; + } + .hide-xs { + display: none !important; + } + .show-xs { + display: block !important; + } +} diff --git a/themes/learn4/scss/spectre/_media.scss b/themes/learn4/scss/spectre/_media.scss new file mode 100644 index 00000000..4029e4cd --- /dev/null +++ b/themes/learn4/scss/spectre/_media.scss @@ -0,0 +1,75 @@ +// Media +// Image responsive +.img-responsive { + display: block; + height: auto; + max-width: 100%; +} + +// object-fit support is coming to Microsoft Edge +// https://developer.microsoft.com/en-us/microsoft-edge/platform/status/objectfitandobjectposition/ +.img-fit-cover { + object-fit: cover; +} + +.img-fit-contain { + object-fit: contain; +} + +// Video responsive +.video-responsive { + display: block; + overflow: hidden; + padding: 0; + position: relative; + width: 100%; + &::before { + content: ""; + display: block; + padding-bottom: 56.25%; // Default ratio 16:9, you can calculate this value by dividing 9 by 16 + } + + iframe, + object, + embed { + border: 0; + bottom: 0; + height: 100%; + left: 0; + position: absolute; + right: 0; + top: 0; + width: 100%; + } +} + +video.video-responsive { + height: auto; + max-width: 100%; + + &::before { + content: none; + } +} + +.video-responsive-4-3 { + &::before { + padding-bottom: 75%; // Ratio 4:3 + } +} + +.video-responsive-1-1 { + &::before { + padding-bottom: 100%; // Ratio 1:1 + } +} + +// Figure +.figure { + margin: 0 0 $layout-spacing 0; + + .figure-caption { + color: $gray-color-dark; + margin-top: $layout-spacing; + } +} diff --git a/themes/learn4/scss/spectre/_menus.scss b/themes/learn4/scss/spectre/_menus.scss new file mode 100644 index 00000000..411cada3 --- /dev/null +++ b/themes/learn4/scss/spectre/_menus.scss @@ -0,0 +1,66 @@ +// Menus +.menu { + @include shadow-variant(.05rem); + background: $bg-color-light; + border-radius: $border-radius; + list-style: none; + margin: 0; + min-width: $control-width-xs; + padding: $unit-2; + transform: translateY($layout-spacing-sm); + z-index: $zindex-3; + + &.menu-nav { + background: transparent; + box-shadow: none; + } + + .menu-item { + margin-top: 0; + padding: 0 $unit-2; + position: relative; + text-decoration: none; + + & > a { + border-radius: $border-radius; + color: inherit; + display: block; + margin: 0 (-$unit-2); + padding: $unit-1 $unit-2; + text-decoration: none; + &:focus, + &:hover { + background: $secondary-color; + color: $primary-color; + } + &:active, + &.active { + background: $secondary-color; + color: $primary-color; + } + } + + .form-checkbox, + .form-radio, + .form-switch { + margin: $unit-h 0; + } + + & + .menu-item { + margin-top: $unit-1; + } + } + + .menu-badge { + align-items: center; + display: flex; + height: 100%; + position: absolute; + right: 0; + top: 0; + + .label { + margin-right: $unit-2; + } + } +} \ No newline at end of file diff --git a/themes/learn4/scss/spectre/_meters.scss b/themes/learn4/scss/spectre/_meters.scss new file mode 100644 index 00000000..9fd98b0e --- /dev/null +++ b/themes/learn4/scss/spectre/_meters.scss @@ -0,0 +1,57 @@ +// Meters +// Credit: https://css-tricks.com/html5-meter-element/ +.meter { + appearance: none; + background: $bg-color; + border: 0; + border-radius: $border-radius; + display: block; + width: 100%; + height: $unit-4; + + &::-webkit-meter-inner-element { + display: block; + } + + &::-webkit-meter-bar, + &::-webkit-meter-optimum-value, + &::-webkit-meter-suboptimum-value, + &::-webkit-meter-even-less-good-value { + border-radius: $border-radius; + } + + &::-webkit-meter-bar { + background: $bg-color; + } + + &::-webkit-meter-optimum-value { + background: $success-color; + } + + &::-webkit-meter-suboptimum-value { + background: $warning-color; + } + + &::-webkit-meter-even-less-good-value { + background: $error-color; + } + + &::-moz-meter-bar, + &:-moz-meter-optimum, + &:-moz-meter-sub-optimum, + &:-moz-meter-sub-sub-optimum { + border-radius: $border-radius; + } + + &:-moz-meter-optimum::-moz-meter-bar { + background: $success-color; + } + + &:-moz-meter-sub-optimum::-moz-meter-bar { + background: $warning-color; + } + + &:-moz-meter-sub-sub-optimum::-moz-meter-bar { + background: $error-color; + } +} diff --git a/themes/learn4/scss/spectre/_mixins.scss b/themes/learn4/scss/spectre/_mixins.scss new file mode 100644 index 00000000..d3a28d55 --- /dev/null +++ b/themes/learn4/scss/spectre/_mixins.scss @@ -0,0 +1,10 @@ +// Mixins +@import "mixins/avatar"; +@import "mixins/button"; +@import "mixins/clearfix"; +@import "mixins/color"; +@import "mixins/label"; +@import "mixins/position"; +@import "mixins/shadow"; +@import "mixins/text"; +@import "mixins/toast"; \ No newline at end of file diff --git a/themes/learn4/scss/spectre/_modals.scss b/themes/learn4/scss/spectre/_modals.scss new file mode 100644 index 00000000..a7b3f10e --- /dev/null +++ b/themes/learn4/scss/spectre/_modals.scss @@ -0,0 +1,87 @@ +// Modals +.modal { + align-items: center; + bottom: 0; + display: none; + justify-content: center; + left: 0; + opacity: 0; + overflow: hidden; + padding: $layout-spacing; + position: fixed; + right: 0; + top: 0; + + &:target, + &.active { + display: flex; + opacity: 1; + z-index: $zindex-4; + + .modal-overlay { + background: rgba($bg-color, .75); + bottom: 0; + cursor: default; + display: block; + left: 0; + position: absolute; + right: 0; + top: 0; + } + + .modal-container { + animation: slide-down .2s ease 1; + z-index: $zindex-0; + } + } + + &.modal-sm { + .modal-container { + max-width: $control-width-sm; + padding: 0 $unit-2; + } + } + + &.modal-lg { + .modal-overlay { + background: $bg-color-light; + } + + .modal-container { + box-shadow: none; + max-width: $control-width-lg; + } + } +} + +.modal-container { + @include shadow-variant(.2rem); + background: $bg-color-light; + border-radius: $border-radius; + display: flex; + flex-direction: column; + max-height: 75vh; + max-width: $control-width-md; + padding: 0 $unit-4; + width: 100%; + + &.modal-fullheight { + max-height: 100vh; + } + + .modal-header { + color: $dark-color; + padding: $unit-4; + } + + .modal-body { + overflow-y: auto; + padding: $unit-4; + position: relative; + } + + .modal-footer { + padding: $unit-4; + text-align: right; + } +} diff --git a/themes/learn4/scss/spectre/_navbar.scss b/themes/learn4/scss/spectre/_navbar.scss new file mode 100644 index 00000000..11642969 --- /dev/null +++ b/themes/learn4/scss/spectre/_navbar.scss @@ -0,0 +1,28 @@ +// Navbar +.navbar { + align-items: stretch; + display: flex; + flex-wrap: wrap; + justify-content: space-between; + + .navbar-section { + align-items: center; + display: flex; + flex: 1 0 0; + + &:not(:first-child):last-child { + justify-content: flex-end; + } + } + + .navbar-center { + align-items: center; + display: flex; + flex: 0 0 auto; + } + + .navbar-brand { + font-size: $font-size-lg; + text-decoration: none; + } +} diff --git a/themes/learn4/scss/spectre/_navs.scss b/themes/learn4/scss/spectre/_navs.scss new file mode 100644 index 00000000..4bedc27b --- /dev/null +++ b/themes/learn4/scss/spectre/_navs.scss @@ -0,0 +1,34 @@ +// Navs +.nav { + display: flex; + flex-direction: column; + list-style: none; + margin: $unit-1 0; + + .nav-item { + a { + color: $gray-color-dark; + padding: $unit-1 $unit-2; + text-decoration: none; + &:focus, + &:hover { + color: $primary-color; + } + } + &.active { + & > a { + color: darken($gray-color-dark, 10%); + font-weight: bold; + &:focus, + &:hover { + color: $primary-color; + } + } + } + } + + & .nav { + margin-bottom: $unit-2; + margin-left: $unit-4; + } +} diff --git a/themes/learn4/scss/spectre/_normalize.scss b/themes/learn4/scss/spectre/_normalize.scss new file mode 100644 index 00000000..a098a84d --- /dev/null +++ b/themes/learn4/scss/spectre/_normalize.scss @@ -0,0 +1,446 @@ +/* Manually forked from Normalize.css */ +/* normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */ + +/** + * 1. Change the default font family in all browsers (opinionated). + * 2. Correct the line height in all browsers. + * 3. Prevent adjustments of font size after orientation changes in + * IE on Windows Phone and in iOS. + */ + +/* Document + ========================================================================== */ + +html { + font-family: sans-serif; /* 1 */ + -ms-text-size-adjust: 100%; /* 3 */ + -webkit-text-size-adjust: 100%; /* 3 */ +} + +/* Sections + ========================================================================== */ + +/** + * Remove the margin in all browsers (opinionated). + */ + +body { + margin: 0; +} + +/** + * Add the correct display in IE 9-. + */ + +article, +aside, +footer, +header, +nav, +section { + display: block; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/* Grouping content + ========================================================================== */ + +/** + * Add the correct display in IE 9-. + * 1. Add the correct display in IE. + */ + +figcaption, +figure, +main { /* 1 */ + display: block; +} + +/** + * Add the correct margin in IE 8 (removed). + */ + +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ + +hr { + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. (removed) + * 2. Correct the odd `em` font sizing in all browsers. + */ + +/* Text-level semantics + ========================================================================== */ + +/** + * 1. Remove the gray background on active links in IE 10. + * 2. Remove gaps in links underline in iOS 8+ and Safari 8+. + */ + +a { + background-color: transparent; /* 1 */ + -webkit-text-decoration-skip: objects; /* 2 */ +} + +/** + * Remove the outline on focused links when they are also active or hovered + * in all browsers (opinionated). + */ + +a:active, +a:hover { + outline-width: 0; +} + +/** + * Modify default styling of address. + */ + +address { + font-style: normal; +} + +/** + * 1. Remove the bottom border in Firefox 39-. + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. (removed) + */ + +/** + * Prevent the duplicate application of `bolder` by the next rule in Safari 6. + */ + +b, +strong { + font-weight: inherit; +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ + +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +code, +kbd, +pre, +samp { + font-family: $mono-font-family; /* 1 (changed) */ + font-size: 1em; /* 2 */ +} + +/** + * Add the correct font style in Android 4.3-. + */ + +dfn { + font-style: italic; +} + +/** + * Add the correct background and color in IE 9-. (Removed) + */ + +/** + * Add the correct font size in all browsers. + */ + +small { + font-size: 80%; + font-weight: 400; /* (added) */ +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Add the correct display in IE 9-. + */ + +audio, +video { + display: inline-block; +} + +/** + * Add the correct display in iOS 4-7. + */ + +audio:not([controls]) { + display: none; + height: 0; +} + +/** + * Remove the border on images inside links in IE 10-. + */ + +img { + border-style: none; +} + +/** + * Hide the overflow in IE. + */ + +svg:not(:root) { + overflow: hidden; +} + +/* Forms + ========================================================================== */ + +/** + * 1. Change the font styles in all browsers (opinionated). + * 2. Remove the margin in Firefox and Safari. + */ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; /* 1 (changed) */ + font-size: inherit; /* 1 (changed) */ + line-height: inherit; /* 1 (changed) */ + margin: 0; /* 2 */ +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ + +button, +input { /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ + +button, +select { /* 1 */ + text-transform: none; +} + +/** + * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video` + * controls in Android 4. + * 2. Correct the inability to style clickable types in iOS and Safari. + */ + +button, +html [type="button"], /* 1 */ +[type="reset"], +[type="submit"] { + -webkit-appearance: button; /* 2 */ +} + +/** + * Remove the inner border and padding in Firefox. + */ + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule (removed). + */ + + +/** + * Change the border, margin, and padding in all browsers (opinionated) (changed). + */ + +fieldset { + border: 0; + margin: 0; + padding: 0; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ + +legend { + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ +} + +/** + * 1. Add the correct display in IE 9-. + * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + +progress { + display: inline-block; /* 1 */ + vertical-align: baseline; /* 2 */ +} + +/** + * Remove the default vertical scrollbar in IE. + */ + +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10-. + * 2. Remove the padding in IE 10-. + */ + +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ + +[type="search"] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ +} + +/** + * Remove the inner padding and cancel buttons in Chrome and Safari on macOS. + */ + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ + +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/* Interactive + ========================================================================== */ + +/* + * Add the correct display in IE 9-. + * 1. Add the correct display in Edge, IE, and Firefox. + */ + +details, /* 1 */ +menu { + display: block; +} + +/* + * Add the correct display in all browsers. + */ + +summary { + display: list-item; + outline: none; +} + +/* Scripting + ========================================================================== */ + +/** + * Add the correct display in IE 9-. + */ + +canvas { + display: inline-block; +} + +/** + * Add the correct display in IE. + */ + +template { + display: none; +} + +/* Hidden + ========================================================================== */ + +/** + * Add the correct display in IE 10-. + */ + +[hidden] { + display: none; +} diff --git a/themes/learn4/scss/spectre/_off-canvas.scss b/themes/learn4/scss/spectre/_off-canvas.scss new file mode 100644 index 00000000..f3b8b9f1 --- /dev/null +++ b/themes/learn4/scss/spectre/_off-canvas.scss @@ -0,0 +1,95 @@ +// Off canvas menus +$off-canvas-breakpoint: $size-lg !default; + +.off-canvas { + display: flex; + flex-flow: nowrap; + height: 100%; + position: relative; + width: 100%; + + .off-canvas-toggle { + display: block; + position: absolute; + top: $layout-spacing; + transition: none; + z-index: $zindex-0; + @if $rtl == true { + right: $layout-spacing; + } @else { + left: $layout-spacing; + } + } + + .off-canvas-sidebar { + background: $bg-color; + bottom: 0; + min-width: 10rem; + overflow-y: auto; + position: fixed; + top: 0; + transition: transform .25s; + z-index: $zindex-2; + @if $rtl == true { + right: 0; + transform: translateX(100%); + } @else { + left: 0; + transform: translateX(-100%); + } + } + + .off-canvas-content { + flex: 1 1 auto; + height: 100%; + padding: $layout-spacing $layout-spacing $layout-spacing 4rem; + } + + .off-canvas-overlay { + background: rgba($dark-color, .1); + border-color: transparent; + border-radius: 0; + bottom: 0; + display: none; + height: 100%; + left: 0; + position: fixed; + right: 0; + top: 0; + width: 100%; + } + + .off-canvas-sidebar { + &:target, + &.active { + transform: translateX(0); + } + + &:target ~ .off-canvas-overlay, + &.active ~ .off-canvas-overlay { + display: block; + z-index: $zindex-1; + } + } +} + +// Responsive layout +@media (min-width: $off-canvas-breakpoint) { + .off-canvas { + &.off-canvas-sidebar-show { + .off-canvas-toggle { + display: none; + } + + .off-canvas-sidebar { + flex: 0 0 auto; + position: relative; + transform: none; + } + + .off-canvas-overlay { + display: none !important; + } + } + } +} diff --git a/themes/learn4/scss/spectre/_pagination.scss b/themes/learn4/scss/spectre/_pagination.scss new file mode 100644 index 00000000..4c0e0113 --- /dev/null +++ b/themes/learn4/scss/spectre/_pagination.scss @@ -0,0 +1,60 @@ +// Pagination +.pagination { + display: flex; + list-style: none; + margin: $unit-1 0; + padding: $unit-1 0; + + .page-item { + margin: $unit-1 $unit-o; + + span { + display: inline-block; + padding: $unit-1 $unit-1; + } + + a { + border-radius: $border-radius; + display: inline-block; + padding: $unit-1 $unit-2; + text-decoration: none; + &:focus, + &:hover { + color: $primary-color; + } + } + + &.disabled { + a { + cursor: default; + opacity: .5; + pointer-events: none; + } + } + + &.active { + a { + background: $primary-color; + color: $light-color; + } + } + + &.page-prev, + &.page-next { + flex: 1 0 50%; + } + + &.page-next { + text-align: right; + } + + .page-item-title { + margin: 0; + } + + .page-item-subtitle { + margin: 0; + opacity: .5; + } + } +} diff --git a/themes/learn4/scss/spectre/_panels.scss b/themes/learn4/scss/spectre/_panels.scss new file mode 100644 index 00000000..386f96ec --- /dev/null +++ b/themes/learn4/scss/spectre/_panels.scss @@ -0,0 +1,23 @@ +// Panels +.panel { + border: $border-width solid $border-color; + border-radius: $border-radius; + display: flex; + flex-direction: column; + + .panel-header, + .panel-footer { + flex: 0 0 auto; + padding: $layout-spacing-lg; + } + + .panel-nav { + flex: 0 0 auto; + } + + .panel-body { + flex: 1 1 auto; + overflow-y: auto; + padding: 0 $layout-spacing-lg; + } +} diff --git a/themes/learn4/scss/spectre/_parallax.scss b/themes/learn4/scss/spectre/_parallax.scss new file mode 100644 index 00000000..ea244e54 --- /dev/null +++ b/themes/learn4/scss/spectre/_parallax.scss @@ -0,0 +1,135 @@ +// Parallax +$parallax-deg: 3deg !default; +$parallax-offset: 4.5px !default; +$parallax-offset-z: 50px !default; +$parallax-perspective: 1000px !default; +$parallax-scale: .95 !default; +$parallax-fade-color: rgba(255, 255, 255, .35) !default; + +// Mixin: Parallax direction +@mixin parallax-dir() { + height: 50%; + outline: none; + position: absolute; + width: 50%; + z-index: $zindex-1; +} + +.parallax { + display: block; + height: auto; + position: relative; + width: auto; + + .parallax-content { + @include shadow-variant(1rem); + height: auto; + transform: perspective($parallax-perspective); + transform-style: preserve-3d; + transition: all .4s ease; + width: 100%; + + &::before { + content: ""; + display: block; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; + } + } + + .parallax-front { + align-items: center; + color: $light-color; + display: flex; + height: 100%; + justify-content: center; + left: 0; + position: absolute; + text-align: center; + text-shadow: 0 0 20px rgba($dark-color, .75); + top: 0; + transform: translateZ($parallax-offset-z) scale($parallax-scale); + transition: transform .4s; + width: 100%; + z-index: $zindex-0; + } + + .parallax-top-left { + @include parallax-dir(); + left: 0; + top: 0; + + &:focus ~ .parallax-content, + &:hover ~ .parallax-content { + transform: perspective($parallax-perspective) rotateX($parallax-deg) rotateY(-$parallax-deg); + + &::before { + background: linear-gradient(135deg, $parallax-fade-color 0%, transparent 50%); + } + + .parallax-front { + transform: translate3d($parallax-offset, $parallax-offset, $parallax-offset-z) scale($parallax-scale); + } + } + } + + .parallax-top-right { + @include parallax-dir(); + right: 0; + top: 0; + + &:focus ~ .parallax-content, + &:hover ~ .parallax-content { + transform: perspective($parallax-perspective) rotateX($parallax-deg) rotateY($parallax-deg); + + &::before { + background: linear-gradient(-135deg, $parallax-fade-color 0%, transparent 50%); + } + + .parallax-front { + transform: translate3d(-$parallax-offset, $parallax-offset, $parallax-offset-z) scale($parallax-scale); + } + } + } + + .parallax-bottom-left { + @include parallax-dir(); + bottom: 0; + left: 0; + + &:focus ~ .parallax-content, + &:hover ~ .parallax-content { + transform: perspective($parallax-perspective) rotateX(-$parallax-deg) rotateY(-$parallax-deg); + + &::before { + background: linear-gradient(45deg, $parallax-fade-color 0%, transparent 50%); + } + + .parallax-front { + transform: translate3d($parallax-offset, -$parallax-offset, $parallax-offset-z) scale($parallax-scale); + } + } + } + + .parallax-bottom-right { + @include parallax-dir(); + bottom: 0; + right: 0; + + &:focus ~ .parallax-content, + &:hover ~ .parallax-content { + transform: perspective($parallax-perspective) rotateX(-$parallax-deg) rotateY($parallax-deg); + + &::before { + background: linear-gradient(-45deg, $parallax-fade-color 0%, transparent 50%); + } + + .parallax-front { + transform: translate3d(-$parallax-offset, -$parallax-offset, $parallax-offset-z) scale($parallax-scale); + } + } + } +} diff --git a/themes/learn4/scss/spectre/_popovers.scss b/themes/learn4/scss/spectre/_popovers.scss new file mode 100644 index 00000000..35b6bcd8 --- /dev/null +++ b/themes/learn4/scss/spectre/_popovers.scss @@ -0,0 +1,65 @@ +// Popovers +.popover { + display: inline-block; + position: relative; + + .popover-container { + left: 50%; + opacity: 0; + padding: $layout-spacing; + position: absolute; + top: 0; + transform: translate(-50%, -50%) scale(0); + transition: transform .2s; + width: $control-width-sm; + z-index: $zindex-3; + } + + *:focus + .popover-container, + &:hover .popover-container { + display: block; + opacity: 1; + transform: translate(-50%, -100%) scale(1); + } + + &.popover-right { + .popover-container { + left: 100%; + top: 50%; + } + + *:focus + .popover-container, + &:hover .popover-container { + transform: translate(0, -50%) scale(1); + } + } + + &.popover-bottom { + .popover-container { + left: 50%; + top: 100%; + } + + *:focus + .popover-container, + &:hover .popover-container { + transform: translate(-50%, 0) scale(1); + } + } + + &.popover-left { + .popover-container { + left: 0; + top: 50%; + } + + *:focus + .popover-container, + &:hover .popover-container { + transform: translate(-100%, -50%) scale(1); + } + } + + .card { + @include shadow-variant(.2rem); + border: 0; + } +} diff --git a/themes/learn4/scss/spectre/_progress.scss b/themes/learn4/scss/spectre/_progress.scss new file mode 100644 index 00000000..f173772b --- /dev/null +++ b/themes/learn4/scss/spectre/_progress.scss @@ -0,0 +1,45 @@ +// Progress +// Credit: https://css-tricks.com/html5-progress-element/ +.progress { + appearance: none; + background: $bg-color-dark; + border: 0; + border-radius: $border-radius; + color: $primary-color; + height: $unit-1; + position: relative; + width: 100%; + + &::-webkit-progress-bar { + background: transparent; + border-radius: $border-radius; + } + + &::-webkit-progress-value { + background: $primary-color; + border-radius: $border-radius; + } + + &::-moz-progress-bar { + background: $primary-color; + border-radius: $border-radius; + } + + &:indeterminate { + animation: progress-indeterminate 1.5s linear infinite; + background: $bg-color-dark linear-gradient(to right, $primary-color 30%, $bg-color-dark 30%) top left / 150% 150% no-repeat; + + &::-moz-progress-bar { + background: transparent; + } + } +} + +@keyframes progress-indeterminate { + 0% { + background-position: 200% 0; + } + 100% { + background-position: -200% 0; + } +} diff --git a/themes/learn4/scss/spectre/_sliders.scss b/themes/learn4/scss/spectre/_sliders.scss new file mode 100644 index 00000000..3ff38e80 --- /dev/null +++ b/themes/learn4/scss/spectre/_sliders.scss @@ -0,0 +1,99 @@ +// Sliders +// Credit: https://css-tricks.com/styling-cross-browser-compatible-range-inputs-css/ +.slider { + appearance: none; + background: transparent; + display: block; + width: 100%; + height: $unit-6; + + &:focus { + @include control-shadow(); + outline: none; + } + + &.tooltip:not([data-tooltip]) { + &::after { + content: attr(value); + } + } + + // Slider Thumb + &::-webkit-slider-thumb { + -webkit-appearance: none; + background: $primary-color; + border: 0; + border-radius: 50%; + height: $unit-3; + margin-top: -($unit-3 - $unit-h) / 2; + transition: transform .2s; + width: $unit-3; + } + &::-moz-range-thumb { + background: $primary-color; + border: 0; + border-radius: 50%; + height: $unit-3; + transition: transform .2s; + width: $unit-3; + } + &::-ms-thumb { + background: $primary-color; + border: 0; + border-radius: 50%; + height: $unit-3; + transition: transform .2s; + width: $unit-3; + } + + &:active { + &::-webkit-slider-thumb { + transform: scale(1.25); + } + &::-moz-range-thumb { + transform: scale(1.25); + } + &::-ms-thumb { + transform: scale(1.25); + } + } + + &:disabled, + &.disabled { + &::-webkit-slider-thumb { + background: $gray-color-light; + transform: scale(1); + } + &::-moz-range-thumb { + background: $gray-color-light; + transform: scale(1); + } + &::-ms-thumb { + background: $gray-color-light; + transform: scale(1); + } + } + + // Slider Track + &::-webkit-slider-runnable-track { + background: $bg-color-dark; + border-radius: $border-radius; + height: $unit-h; + width: 100%; + } + &::-moz-range-track { + background: $bg-color-dark; + border-radius: $border-radius; + height: $unit-h; + width: 100%; + } + &::-ms-track { + background: $bg-color-dark; + border-radius: $border-radius; + height: $unit-h; + width: 100%; + } + &::-ms-fill-lower { + background: $primary-color; + } +} diff --git a/themes/learn4/scss/spectre/_steps.scss b/themes/learn4/scss/spectre/_steps.scss new file mode 100644 index 00000000..f642ff8b --- /dev/null +++ b/themes/learn4/scss/spectre/_steps.scss @@ -0,0 +1,71 @@ +// Steps +.step { + display: flex; + flex-wrap: nowrap; + list-style: none; + margin: $unit-1 0; + width: 100%; + + .step-item { + flex: 1 1 0; + margin-top: 0; + min-height: 1rem; + text-align: center; + position: relative; + + &:not(:first-child)::before { + background: $primary-color; + content: ""; + height: 2px; + left: -50%; + position: absolute; + top: 9px; + width: 100%; + } + + a { + color: $primary-color; + display: inline-block; + padding: 20px 10px 0; + text-decoration: none; + + &::before { + background: $primary-color; + border: $border-width-lg solid $light-color; + border-radius: 50%; + content: ""; + display: block; + height: $unit-3; + left: 50%; + position: absolute; + top: $unit-1; + transform: translateX(-50%); + width: $unit-3; + z-index: $zindex-0; + } + } + + &.active { + a { + &::before { + background: $light-color; + border: $border-width-lg solid $primary-color; + } + } + + & ~ .step-item { + &::before { + background: $border-color; + } + + a { + color: $gray-color; + + &::before { + background: $border-color; + } + } + } + } + } +} diff --git a/themes/learn4/scss/spectre/_tables.scss b/themes/learn4/scss/spectre/_tables.scss new file mode 100644 index 00000000..656c03e5 --- /dev/null +++ b/themes/learn4/scss/spectre/_tables.scss @@ -0,0 +1,57 @@ +// Tables +.table { + border-collapse: collapse; + border-spacing: 0; + width: 100%; + @if $rtl == true { + text-align: right; + } @else { + text-align: left; + } + + &.table-striped { + tbody { + tr:nth-of-type(odd) { + background: $bg-color; + } + } + } + + &, + &.table-striped { + tbody { + tr { + &.active { + background: $bg-color-dark; + } + } + } + } + + &.table-hover { + tbody { + tr { + &:hover { + background: $bg-color-dark; + } + } + } + } + + // Scollable tables + &.table-scroll { + display: block; + overflow-x: auto; + padding-bottom: .75rem; + white-space: nowrap; + } + + td, + th { + border-bottom: $border-width solid $border-color; + padding: $unit-3 $unit-2; + } + th { + border-bottom-width: $border-width-lg; + } +} diff --git a/themes/learn4/scss/spectre/_tabs.scss b/themes/learn4/scss/spectre/_tabs.scss new file mode 100644 index 00000000..0dcbaf37 --- /dev/null +++ b/themes/learn4/scss/spectre/_tabs.scss @@ -0,0 +1,66 @@ +// Tabs +.tab { + align-items: center; + border-bottom: $border-width solid $border-color; + display: flex; + flex-wrap: wrap; + list-style: none; + margin: $unit-1 0 ($unit-1 - $border-width) 0; + + .tab-item { + margin-top: 0; + + a { + border-bottom: $border-width-lg solid transparent; + color: inherit; + display: block; + margin: 0 $unit-2 0 0; + padding: $unit-2 $unit-1 $unit-2 - $border-width-lg $unit-1; + text-decoration: none; + &:focus, + &:hover { + color: $link-color; + } + } + &.active a, + a.active { + border-bottom-color: $primary-color; + color: $link-color; + } + + &.tab-action { + flex: 1 0 auto; + text-align: right; + } + + .btn-clear { + margin-top: -$unit-1; + } + } + + &.tab-block { + .tab-item { + flex: 1 0 0; + text-align: center; + + a { + margin: 0; + } + + .badge { + &[data-badge]::after { + position: absolute; + right: $unit-h; + top: $unit-h; + transform: translate(0, 0); + } + } + } + } + + &:not(.tab-block) { + .badge { + padding-right: 0; + } + } +} diff --git a/themes/learn4/scss/spectre/_tiles.scss b/themes/learn4/scss/spectre/_tiles.scss new file mode 100644 index 00000000..742bbaeb --- /dev/null +++ b/themes/learn4/scss/spectre/_tiles.scss @@ -0,0 +1,38 @@ +// Tiles +.tile { + align-content: space-between; + align-items: flex-start; + display: flex; + + .tile-icon, + .tile-action { + flex: 0 0 auto; + } + .tile-content { + flex: 1 1 auto; + &:not(:first-child) { + padding-left: $unit-2; + } + &:not(:last-child) { + padding-right: $unit-2; + } + } + .tile-title, + .tile-subtitle { + line-height: $line-height; + } + + &.tile-centered { + align-items: center; + + .tile-content { + overflow: hidden; + } + + .tile-title, + .tile-subtitle { + @include text-ellipsis(); + margin-bottom: 0; + } + } +} diff --git a/themes/learn4/scss/spectre/_timelines.scss b/themes/learn4/scss/spectre/_timelines.scss new file mode 100644 index 00000000..c56746d2 --- /dev/null +++ b/themes/learn4/scss/spectre/_timelines.scss @@ -0,0 +1,56 @@ +// Timelines +.timeline { + .timeline-item { + display: flex; + margin-bottom: $unit-6; + position: relative; + &::before { + background: $border-color; + content: ""; + height: 100%; + left: 11px; + position: absolute; + top: $unit-6; + width: 2px; + } + + .timeline-left { + flex: 0 0 auto; + } + + .timeline-content { + flex: 1 1 auto; + padding: 2px 0 2px $layout-spacing-lg; + } + + .timeline-icon { + align-items: center; + border-radius: 50%; + color: $light-color; + display: flex; + height: $unit-6; + justify-content: center; + text-align: center; + width: $unit-6; + &::before { + border: $border-width-lg solid $primary-color; + border-radius: 50%; + content: ""; + display: block; + height: $unit-2; + left: $unit-2; + position: absolute; + top: $unit-2; + width: $unit-2; + } + + &.icon-lg { + background: $primary-color; + line-height: $line-height; + &::before { + content: none; + } + } + } + } +} diff --git a/themes/learn4/scss/spectre/_toasts.scss b/themes/learn4/scss/spectre/_toasts.scss new file mode 100644 index 00000000..fef15f8d --- /dev/null +++ b/themes/learn4/scss/spectre/_toasts.scss @@ -0,0 +1,48 @@ +// Toasts +.toast { + @include toast-variant($dark-color); + border: $border-width solid $dark-color; + border-radius: $border-radius; + color: $light-color; + display: block; + padding: $layout-spacing; + width: 100%; + + &.toast-primary { + @include toast-variant($primary-color); + } + + &.toast-success { + @include toast-variant($success-color); + } + + &.toast-warning { + @include toast-variant($warning-color); + } + + &.toast-error { + @include toast-variant($error-color); + } + + a { + color: $light-color; + text-decoration: underline; + + &:focus, + &:hover, + &:active, + &.active { + opacity: .75; + } + } + + .btn-clear { + margin: $unit-h; + } + + p { + &:last-child { + margin-bottom: 0; + } + } +} diff --git a/themes/learn4/scss/spectre/_tooltips.scss b/themes/learn4/scss/spectre/_tooltips.scss new file mode 100644 index 00000000..8693b67b --- /dev/null +++ b/themes/learn4/scss/spectre/_tooltips.scss @@ -0,0 +1,79 @@ +// Tooltips +.tooltip { + position: relative; + &::after { + background: rgba($dark-color, .95); + border-radius: $border-radius; + bottom: 100%; + color: $light-color; + content: attr(data-tooltip); + display: block; + font-size: $font-size-sm; + left: 50%; + max-width: $control-width-sm; + opacity: 0; + overflow: hidden; + padding: $unit-1 $unit-2; + pointer-events: none; + position: absolute; + text-overflow: ellipsis; + transform: translate(-50%, $unit-2); + transition: opacity .2s, transform .2s; + white-space: pre; + z-index: $zindex-3; + } + &:focus, + &:hover { + &::after { + opacity: 1; + transform: translate(-50%, -$unit-1); + } + } + &[disabled], + &.disabled { + pointer-events: auto; + } + + &.tooltip-right { + &::after { + bottom: 50%; + left: 100%; + transform: translate(-$unit-1, 50%); + } + &:focus, + &:hover { + &::after { + transform: translate($unit-1, 50%); + } + } + } + + &.tooltip-bottom { + &::after { + bottom: auto; + top: 100%; + transform: translate(-50%, -$unit-2); + } + &:focus, + &:hover { + &::after { + transform: translate(-50%, $unit-1); + } + } + } + + &.tooltip-left { + &::after { + bottom: 50%; + left: auto; + right: 100%; + transform: translate($unit-2, 50%); + } + &:focus, + &:hover { + &::after { + transform: translate(-$unit-1, 50%); + } + } + } +} diff --git a/themes/learn4/scss/spectre/_typography.scss b/themes/learn4/scss/spectre/_typography.scss new file mode 100644 index 00000000..bbeb8769 --- /dev/null +++ b/themes/learn4/scss/spectre/_typography.scss @@ -0,0 +1,129 @@ +// Typography +// Headings +h1, +h2, +h3, +h4, +h5, +h6 { + color: inherit; + font-weight: 500; + line-height: 1.2; + margin-bottom: .5em; + margin-top: 0; +} +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-weight: 500; +} +h1, +.h1 { + font-size: 2rem; +} +h2, +.h2 { + font-size: 1.6rem; +} +h3, +.h3 { + font-size: 1.4rem; +} +h4, +.h4 { + font-size: 1.2rem; +} +h5, +.h5 { + font-size: 1rem; +} +h6, +.h6 { + font-size: .8rem; +} + +// Paragraphs +p { + margin: 0 0 $line-height; +} + +// Semantic text elements +a, +ins, +u { + text-decoration-skip: ink edges; +} + +abbr[title] { + border-bottom: $border-width dotted; + cursor: help; + text-decoration: none; +} + +kbd { + @include label-base(); + @include label-variant($light-color, $dark-color); + font-size: $font-size-sm; +} + +mark { + @include label-variant($body-font-color, $highlight-color); + border-bottom: $unit-o solid darken($highlight-color, 15%); + border-radius: $border-radius; + padding: $unit-o $unit-h 0; +} + +// Blockquote +blockquote { + border-left: $border-width-lg solid $border-color; + margin-left: 0; + padding: $unit-2 $unit-4; + + p:last-child { + margin-bottom: 0; + } +} + +// Lists +ul, +ol { + margin: $unit-4 0 $unit-4 $unit-4; + padding: 0; + + ul, + ol { + margin: $unit-4 0 $unit-4 $unit-4; + } + + li { + margin-top: $unit-2; + } +} + +ul { + list-style: disc inside; + + ul { + list-style-type: circle; + } +} + +ol { + list-style: decimal inside; + + ol { + list-style-type: lower-alpha; + } +} + +dl { + dt { + font-weight: bold; + } + dd { + margin: $unit-2 0 $unit-4 0; + } +} diff --git a/themes/learn4/scss/spectre/_utilities.scss b/themes/learn4/scss/spectre/_utilities.scss new file mode 100644 index 00000000..80f1e0b5 --- /dev/null +++ b/themes/learn4/scss/spectre/_utilities.scss @@ -0,0 +1,8 @@ +@import "utilities/colors"; +@import "utilities/cursors"; +@import "utilities/display"; +@import "utilities/divider"; +@import "utilities/loading"; +@import "utilities/position"; +@import "utilities/shapes"; +@import "utilities/text"; diff --git a/themes/learn4/scss/spectre/_variables.scss b/themes/learn4/scss/spectre/_variables.scss new file mode 100644 index 00000000..7bf1a133 --- /dev/null +++ b/themes/learn4/scss/spectre/_variables.scss @@ -0,0 +1,117 @@ +// Core variables +$version: "0.5.8"; + +// Core features +$rtl: false !default; + +// Core colors +$primary-color: #5755d9 !default; +$primary-color-dark: darken($primary-color, 3%) !default; +$primary-color-light: lighten($primary-color, 3%) !default; +$secondary-color: lighten($primary-color, 37.5%) !default; +$secondary-color-dark: darken($secondary-color, 3%) !default; +$secondary-color-light: lighten($secondary-color, 3%) !default; + +// Gray colors +$dark-color: #303742 !default; +$light-color: #fff !default; +$gray-color: lighten($dark-color, 55%) !default; +$gray-color-dark: darken($gray-color, 30%) !default; +$gray-color-light: lighten($gray-color, 20%) !default; + +$border-color: lighten($dark-color, 65%) !default; +$border-color-dark: darken($border-color, 10%) !default; +$border-color-light: lighten($border-color, 8%) !default; +$bg-color: lighten($dark-color, 75%) !default; +$bg-color-dark: darken($bg-color, 3%) !default; +$bg-color-light: $light-color !default; + +// Control colors +$success-color: #32b643 !default; +$warning-color: #ffb700 !default; +$error-color: #e85600 !default; + +// Other colors +$code-color: #d73e48 !default; +$highlight-color: #ffe9b3 !default; +$body-bg: $bg-color-light !default; +$body-font-color: lighten($dark-color, 5%) !default; +$link-color: $primary-color !default; +$link-color-dark: darken($link-color, 10%) !default; +$link-color-light: lighten($link-color, 10%) !default; + +// Fonts +// Credit: https://www.smashingmagazine.com/2015/11/using-system-ui-fonts-practical-guide/ +$base-font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto !default; +$mono-font-family: "SF Mono", "Segoe UI Mono", "Roboto Mono", Menlo, Courier, monospace !default; +$fallback-font-family: "Helvetica Neue", sans-serif !default; +$cjk-zh-hans-font-family: $base-font-family, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", $fallback-font-family !default; +$cjk-zh-hant-font-family: $base-font-family, "PingFang TC", "Hiragino Sans CNS", "Microsoft JhengHei", $fallback-font-family !default; +$cjk-jp-font-family: $base-font-family, "Hiragino Sans", "Hiragino Kaku Gothic Pro", "Yu Gothic", YuGothic, Meiryo, $fallback-font-family !default; +$cjk-ko-font-family: $base-font-family, "Malgun Gothic", $fallback-font-family !default; +$body-font-family: $base-font-family, $fallback-font-family !default; + +// Unit sizes +$unit-o: .05rem !default; +$unit-h: .1rem !default; +$unit-1: .2rem !default; +$unit-2: .4rem !default; +$unit-3: .6rem !default; +$unit-4: .8rem !default; +$unit-5: 1rem !default; +$unit-6: 1.2rem !default; +$unit-7: 1.4rem !default; +$unit-8: 1.6rem !default; +$unit-9: 1.8rem !default; +$unit-10: 2rem !default; +$unit-12: 2.4rem !default; +$unit-16: 3.2rem !default; + +// Font sizes +$html-font-size: 20px !default; +$html-line-height: 1.5 !default; +$font-size: .8rem !default; +$font-size-sm: .7rem !default; +$font-size-lg: .9rem !default; +$line-height: 1.2rem !default; + +// Sizes +$layout-spacing: $unit-2 !default; +$layout-spacing-sm: $unit-1 !default; +$layout-spacing-lg: $unit-4 !default; +$border-radius: $unit-h !default; +$border-width: $unit-o !default; +$border-width-lg: $unit-h !default; +$control-size: $unit-9 !default; +$control-size-sm: $unit-7 !default; +$control-size-lg: $unit-10 !default; +$control-padding-x: $unit-2 !default; +$control-padding-x-sm: $unit-2 * .75 !default; +$control-padding-x-lg: $unit-2 * 1.5 !default; +$control-padding-y: ($control-size - $line-height) / 2 - $border-width !default; +$control-padding-y-sm: ($control-size-sm - $line-height) / 2 - $border-width !default; +$control-padding-y-lg: ($control-size-lg - $line-height) / 2 - $border-width !default; +$control-icon-size: .8rem !default; + +$control-width-xs: 180px !default; +$control-width-sm: 320px !default; +$control-width-md: 640px !default; +$control-width-lg: 960px !default; +$control-width-xl: 1280px !default; + +// Responsive breakpoints +$size-xs: 480px !default; +$size-sm: 600px !default; +$size-md: 840px !default; +$size-lg: 960px !default; +$size-xl: 1280px !default; +$size-2x: 1440px !default; + +$responsive-breakpoint: $size-xs !default; + +// Z-index +$zindex-0: 1 !default; +$zindex-1: 100 !default; +$zindex-2: 200 !default; +$zindex-3: 300 !default; +$zindex-4: 400 !default; diff --git a/themes/learn4/scss/spectre/_viewer-360.scss b/themes/learn4/scss/spectre/_viewer-360.scss new file mode 100644 index 00000000..c1b8928d --- /dev/null +++ b/themes/learn4/scss/spectre/_viewer-360.scss @@ -0,0 +1,34 @@ +// 360 Degree Viewer + +// Mixin: Viewer slider sizes +@mixin viewer-slider-size($image-number: 36) { + @for $s from 1 through ($image-number) { + .viewer-slider[max='#{$image-number}'][value='#{$s}'] + .viewer-image { + background-position-y: percentage((($s)-1) * 1/(($image-number)-1)); + } + } +} + +.viewer-360 { + align-items: center; + display: flex; + flex-direction: column; + + // Copy and add more numbers if you need + @include viewer-slider-size(36); + + .viewer-slider { + cursor: ew-resize; + margin: 1rem; + order: 2; + width: 60%; + } + + .viewer-image { + background-position-y: 0; + background-repeat: no-repeat; + background-size: 100%; + max-width: 100%; + order: 1; + } +} \ No newline at end of file diff --git a/themes/learn4/scss/spectre/icons/_icons-action.scss b/themes/learn4/scss/spectre/icons/_icons-action.scss new file mode 100644 index 00000000..1b952ea1 --- /dev/null +++ b/themes/learn4/scss/spectre/icons/_icons-action.scss @@ -0,0 +1,315 @@ +// Icon resize +.icon-resize-horiz, +.icon-resize-vert { + &::before, + &::after { + border: $icon-border-width solid currentColor; + border-bottom: 0; + border-right: 0; + height: .45em; + width: .45em; + } + &::before { + transform: translate(-50%, -90%) rotate(45deg); + } + &::after { + transform: translate(-50%, -10%) rotate(225deg); + } +} + +.icon-resize-horiz { + &::before { + transform: translate(-90%, -50%) rotate(-45deg); + } + &::after { + transform: translate(-10%, -50%) rotate(135deg); + } +} + +// Icon more +.icon-more-horiz, +.icon-more-vert { + &::before { + background: currentColor; + box-shadow: -.4em 0, .4em 0; + border-radius: 50%; + height: 3px; + width: 3px; + } +} + +.icon-more-vert { + &::before { + box-shadow: 0 -.4em, 0 .4em; + } +} + +// Icon plus, minus, cross +.icon-plus, +.icon-minus, +.icon-cross { + &::before { + background: currentColor; + height: $icon-border-width; + width: 100%; + } +} + +.icon-plus, +.icon-cross { + &::after { + background: currentColor; + height: 100%; + width: $icon-border-width; + } +} + +.icon-cross { + &::before { + width: 100%; + } + &::after { + height: 100%; + } + &::before, + &::after { + transform: translate(-50%, -50%) rotate(45deg); + } +} + +// Icon check +.icon-check { + &::before { + border: $icon-border-width solid currentColor; + border-right: 0; + border-top: 0; + height: .5em; + width: .9em; + transform: translate(-50%, -75%) rotate(-45deg); + } +} + +// Icon stop +.icon-stop { + border: $icon-border-width solid currentColor; + border-radius: 50%; + &::before { + background: currentColor; + height: $icon-border-width; + transform: translate(-50%, -50%) rotate(45deg); + width: 1em; + } +} + +// Icon shutdown +.icon-shutdown { + border: $icon-border-width solid currentColor; + border-radius: 50%; + border-top-color: transparent; + &::before { + background: currentColor; + content: ""; + height: .5em; + top: .1em; + width: $icon-border-width; + } +} + +// Icon refresh +.icon-refresh { + &::before { + border: $icon-border-width solid currentColor; + border-radius: 50%; + border-right-color: transparent; + height: 1em; + width: 1em; + } + &::after { + border: .2em solid currentColor; + border-top-color: transparent; + border-left-color: transparent; + height: 0; + left: 80%; + top: 20%; + width: 0; + } +} + +// Icon search +.icon-search { + &::before { + border: $icon-border-width solid currentColor; + border-radius: 50%; + height: .75em; + left: 5%; + top: 5%; + transform: translate(0, 0) rotate(45deg); + width: .75em; + } + &::after { + background: currentColor; + height: $icon-border-width; + left: 80%; + top: 80%; + transform: translate(-50%, -50%) rotate(45deg); + width: .4em; + } +} + +// Icon edit +.icon-edit { + &::before { + border: $icon-border-width solid currentColor; + height: .4em; + transform: translate(-40%, -60%) rotate(-45deg); + width: .85em; + } + &::after { + border: .15em solid currentColor; + border-top-color: transparent; + border-right-color: transparent; + height: 0; + left: 5%; + top: 95%; + transform: translate(0, -100%); + width: 0; + } +} + +// Icon delete +.icon-delete { + &::before { + border: $icon-border-width solid currentColor; + border-bottom-left-radius: $border-radius; + border-bottom-right-radius: $border-radius; + border-top: 0; + height: .75em; + top: 60%; + width: .75em; + } + &::after { + background: currentColor; + box-shadow: -.25em .2em, .25em .2em; + height: $icon-border-width; + top: $icon-border-width/2; + width: .5em; + } +} + +// Icon share +.icon-share { + border: $icon-border-width solid currentColor; + border-radius: $border-radius; + border-right: 0; + border-top: 0; + &::before { + border: $icon-border-width solid currentColor; + border-left: 0; + border-top: 0; + height: .4em; + left: 100%; + top: .25em; + transform: translate(-125%, -50%) rotate(-45deg); + width: .4em; + } + &::after { + border: $icon-border-width solid currentColor; + border-bottom: 0; + border-right: 0; + border-radius: 75% 0; + height: .5em; + width: .6em; + } +} + +// Icon flag +.icon-flag { + &::before { + background: currentColor; + height: 1em; + left: 15%; + width: $icon-border-width; + } + &::after { + border: $icon-border-width solid currentColor; + border-bottom-right-radius: $border-radius; + border-left: 0; + border-top-right-radius: $border-radius; + height: .65em; + top: 35%; + left: 60%; + width: .8em; + } +} + +// Icon bookmark +.icon-bookmark { + &::before { + border: $icon-border-width solid currentColor; + border-bottom: 0; + border-top-left-radius: $border-radius; + border-top-right-radius: $border-radius; + height: .9em; + width: .8em; + } + &::after { + border: $icon-border-width solid currentColor; + border-bottom: 0; + border-left: 0; + border-radius: $border-radius; + height: .5em; + transform: translate(-50%, 35%) rotate(-45deg) skew(15deg, 15deg); + width: .5em; + } +} + +// Icon download & upload +.icon-download, +.icon-upload { + border-bottom: $icon-border-width solid currentColor; + &::before { + border: $icon-border-width solid currentColor; + border-bottom: 0; + border-right: 0; + height: .5em; + width: .5em; + transform: translate(-50%, -60%) rotate(-135deg); + } + &::after { + background: currentColor; + height: .6em; + top: 40%; + width: $icon-border-width; + } +} + +.icon-upload { + &::before { + transform: translate(-50%, -60%) rotate(45deg); + } + &::after { + top: 50%; + } +} + +// Icon copy +.icon-copy { + &::before { + border: $icon-border-width solid currentColor; + border-radius: $border-radius; + border-right: 0; + border-bottom: 0; + height: .8em; + left: 40%; + top: 35%; + width: .8em; + } + &::after { + border: $icon-border-width solid currentColor; + border-radius: $border-radius; + height: .8em; + left: 60%; + top: 60%; + width: .8em; + } +} \ No newline at end of file diff --git a/themes/learn4/scss/spectre/icons/_icons-core.scss b/themes/learn4/scss/spectre/icons/_icons-core.scss new file mode 100644 index 00000000..9a67ae4f --- /dev/null +++ b/themes/learn4/scss/spectre/icons/_icons-core.scss @@ -0,0 +1,54 @@ +// Icon variables +$icon-border-width: $border-width-lg; +$icon-prefix: "icon"; + +// Icon base style +.#{$icon-prefix} { + box-sizing: border-box; + display: inline-block; + font-size: inherit; + font-style: normal; + height: 1em; + position: relative; + text-indent: -9999px; + vertical-align: middle; + width: 1em; + &::before, + &::after { + content: ""; + display: block; + left: 50%; + position: absolute; + top: 50%; + transform: translate(-50%, -50%); + } + + // Icon sizes + &.icon-2x { + font-size: 1.6rem; + } + + &.icon-3x { + font-size: 2.4rem; + } + + &.icon-4x { + font-size: 3.2rem; + } +} + +// Component icon support +.accordion, +.btn, +.toast, +.menu { + .#{$icon-prefix} { + vertical-align: -10%; + } +} + +.btn-lg { + .#{$icon-prefix} { + vertical-align: -15%; + } +} diff --git a/themes/learn4/scss/spectre/icons/_icons-navigation.scss b/themes/learn4/scss/spectre/icons/_icons-navigation.scss new file mode 100644 index 00000000..92ab231a --- /dev/null +++ b/themes/learn4/scss/spectre/icons/_icons-navigation.scss @@ -0,0 +1,127 @@ +// Icon arrows +.icon-arrow-down, +.icon-arrow-left, +.icon-arrow-right, +.icon-arrow-up, +.icon-downward, +.icon-back, +.icon-forward, +.icon-upward { + &::before { + border: $icon-border-width solid currentColor; + border-bottom: 0; + border-right: 0; + height: .65em; + width: .65em; + } +} + +.icon-arrow-down { + &::before { + transform: translate(-50%, -75%) rotate(225deg); + } +} + +.icon-arrow-left { + &::before { + transform: translate(-25%, -50%) rotate(-45deg); + } +} + +.icon-arrow-right { + &::before { + transform: translate(-75%, -50%) rotate(135deg); + } +} + +.icon-arrow-up { + &::before { + transform: translate(-50%, -25%) rotate(45deg); + } +} + +.icon-back, +.icon-forward { + &::after { + background: currentColor; + height: $icon-border-width; + width: .8em; + } +} + +.icon-downward, +.icon-upward { + &::after { + background: currentColor; + height: .8em; + width: $icon-border-width; + } +} + +.icon-back { + &::after { + left: 55%; + } + &::before { + transform: translate(-50%, -50%) rotate(-45deg); + } +} + +.icon-downward { + &::after { + top: 45%; + } + &::before { + transform: translate(-50%, -50%) rotate(-135deg); + } +} + +.icon-forward { + &::after { + left: 45%; + } + &::before { + transform: translate(-50%, -50%) rotate(135deg); + } +} + +.icon-upward { + &::after { + top: 55%; + } + &::before { + transform: translate(-50%, -50%) rotate(45deg); + } +} + +// Icon caret +.icon-caret { + &::before { + border-top: .3em solid currentColor; + border-right: .3em solid transparent; + border-left: .3em solid transparent; + height: 0; + transform: translate(-50%, -25%); + width: 0; + } +} + +// Icon menu +.icon-menu { + &::before { + background: currentColor; + box-shadow: 0 -.35em, 0 .35em; + height: $icon-border-width; + width: 100%; + } +} + +// Icon apps +.icon-apps { + &::before { + background: currentColor; + box-shadow: -.35em -.35em, -.35em 0, -.35em .35em, 0 -.35em, 0 .35em, .35em -.35em, .35em 0, .35em .35em; + height: 3px; + width: 3px; + } +} diff --git a/themes/learn4/scss/spectre/icons/_icons-object.scss b/themes/learn4/scss/spectre/icons/_icons-object.scss new file mode 100644 index 00000000..00597d8a --- /dev/null +++ b/themes/learn4/scss/spectre/icons/_icons-object.scss @@ -0,0 +1,161 @@ +// Icon time +.icon-time { + border: $icon-border-width solid currentColor; + border-radius: 50%; + &::before { + background: currentColor; + height: .4em; + transform: translate(-50%, -75%); + width: $icon-border-width; + } + &::after { + background: currentColor; + height: .3em; + transform: translate(-50%, -75%) rotate(90deg); + transform-origin: 50% 90%; + width: $icon-border-width; + } +} + +// Icon mail +.icon-mail { + &::before { + border: $icon-border-width solid currentColor; + border-radius: $border-radius; + height: .8em; + width: 1em; + } + &::after { + border: $icon-border-width solid currentColor; + border-right: 0; + border-top: 0; + height: .5em; + transform: translate(-50%, -90%) rotate(-45deg) skew(10deg, 10deg); + width: .5em; + } +} + +// Icon people +.icon-people { + &::before { + border: $icon-border-width solid currentColor; + border-radius: 50%; + height: .45em; + top: 25%; + width: .45em; + } + &::after { + border: $icon-border-width solid currentColor; + border-radius: 50% 50% 0 0; + height: .4em; + top: 75%; + width: .9em; + } +} + +// Icon message +.icon-message { + border: $icon-border-width solid currentColor; + border-bottom: 0; + border-radius: $border-radius; + border-right: 0; + &::before { + border: $icon-border-width solid currentColor; + border-bottom-right-radius: $border-radius; + border-left: 0; + border-top: 0; + height: .8em; + left: 65%; + top: 40%; + width: .7em; + } + &::after { + background: currentColor; + border-radius: $border-radius; + height: .3em; + left: 10%; + top: 100%; + transform: translate(0, -90%) rotate(45deg); + width: $icon-border-width; + } +} + +// Icon photo +.icon-photo { + border: $icon-border-width solid currentColor; + border-radius: $border-radius; + &::before { + border: $icon-border-width solid currentColor; + border-radius: 50%; + height: .25em; + left: 35%; + top: 35%; + width: .25em; + } + &::after { + border: $icon-border-width solid currentColor; + border-bottom: 0; + border-left: 0; + height: .5em; + left: 60%; + transform: translate(-50%, 25%) rotate(-45deg); + width: .5em; + } +} + +// Icon link +.icon-link { + &::before, + &::after { + border: $icon-border-width solid currentColor; + border-radius: 5em 0 0 5em; + border-right: 0; + height: .5em; + width: .75em; + } + &::before { + transform: translate(-70%, -45%) rotate(-45deg); + } + &::after { + transform: translate(-30%, -55%) rotate(135deg); + } +} + +// Icon location +.icon-location { + &::before { + border: $icon-border-width solid currentColor; + border-radius: 50% 50% 50% 0; + height: .8em; + transform: translate(-50%, -60%) rotate(-45deg); + width: .8em; + } + &::after { + border: $icon-border-width solid currentColor; + border-radius: 50%; + height: .2em; + transform: translate(-50%, -80%); + width: .2em; + } +} + +// Icon emoji +.icon-emoji { + border: $icon-border-width solid currentColor; + border-radius: 50%; + &::before { + border-radius: 50%; + box-shadow: -.17em -.1em, .17em -.1em; + height: .15em; + width: .15em; + } + &::after { + border: $icon-border-width solid currentColor; + border-bottom-color: transparent; + border-radius: 50%; + border-right-color: transparent; + height: .5em; + transform: translate(-50%, -40%) rotate(-135deg); + width: .5em; + } +} diff --git a/themes/learn4/scss/spectre/mixins/_avatar.scss b/themes/learn4/scss/spectre/mixins/_avatar.scss new file mode 100644 index 00000000..14617adb --- /dev/null +++ b/themes/learn4/scss/spectre/mixins/_avatar.scss @@ -0,0 +1,6 @@ +// Avatar mixin +@mixin avatar-base($size: $unit-8) { + font-size: $size / 2; + height: $size; + width: $size; +} diff --git a/themes/learn4/scss/spectre/mixins/_button.scss b/themes/learn4/scss/spectre/mixins/_button.scss new file mode 100644 index 00000000..c90a94bd --- /dev/null +++ b/themes/learn4/scss/spectre/mixins/_button.scss @@ -0,0 +1,54 @@ +// Button variant mixin +@mixin button-variant($color: $primary-color) { + background: $color; + border-color: darken($color, 3%); + color: $light-color; + &:focus { + @include control-shadow($color); + } + &:focus, + &:hover { + background: darken($color, 2%); + border-color: darken($color, 5%); + color: $light-color; + } + &:active, + &.active { + background: darken($color, 7%); + border-color: darken($color, 10%); + color: $light-color; + } + &.loading { + &::after { + border-bottom-color: $light-color; + border-left-color: $light-color; + } + } +} + +@mixin button-outline-variant($color: $primary-color) { + background: $light-color; + border-color: $color; + color: $color; + &:focus { + @include control-shadow($color); + } + &:focus, + &:hover { + background: lighten($color, 50%); + border-color: darken($color, 2%); + color: $color; + } + &:active, + &.active { + background: $color; + border-color: darken($color, 5%); + color: $light-color; + } + &.loading { + &::after { + border-bottom-color: $color; + border-left-color: $color; + } + } +} diff --git a/themes/learn4/scss/spectre/mixins/_clearfix.scss b/themes/learn4/scss/spectre/mixins/_clearfix.scss new file mode 100644 index 00000000..db6895f9 --- /dev/null +++ b/themes/learn4/scss/spectre/mixins/_clearfix.scss @@ -0,0 +1,8 @@ +// Clearfix mixin +@mixin clearfix() { + &::after { + clear: both; + content: ""; + display: table; + } +} diff --git a/themes/learn4/scss/spectre/mixins/_color.scss b/themes/learn4/scss/spectre/mixins/_color.scss new file mode 100644 index 00000000..697d0c37 --- /dev/null +++ b/themes/learn4/scss/spectre/mixins/_color.scss @@ -0,0 +1,27 @@ +// Background color utility mixin +@mixin bg-color-variant($name: ".bg-primary", $color: $primary-color) { + #{$name} { + background: $color !important; + + @if (lightness($color) < 60) { + color: $light-color; + } + } +} + +// Text color utility mixin +@mixin text-color-variant($name: ".text-primary", $color: $primary-color) { + #{$name} { + color: $color !important; + } + + a#{$name} { + &:focus, + &:hover { + color: darken($color, 5%); + } + &:visited { + color: lighten($color, 5%); + } + } +} diff --git a/themes/learn4/scss/spectre/mixins/_label.scss b/themes/learn4/scss/spectre/mixins/_label.scss new file mode 100644 index 00000000..1574f026 --- /dev/null +++ b/themes/learn4/scss/spectre/mixins/_label.scss @@ -0,0 +1,11 @@ +// Label base style +@mixin label-base() { + border-radius: $border-radius; + line-height: 1.25; + padding: .1rem .2rem; +} + +@mixin label-variant($color: $light-color, $bg-color: $primary-color) { + background: $bg-color; + color: $color; +} diff --git a/themes/learn4/scss/spectre/mixins/_position.scss b/themes/learn4/scss/spectre/mixins/_position.scss new file mode 100644 index 00000000..98b5cfc0 --- /dev/null +++ b/themes/learn4/scss/spectre/mixins/_position.scss @@ -0,0 +1,65 @@ +// Margin utility mixin +@mixin margin-variant($id: 1, $size: $unit-1) { + .m-#{$id} { + margin: $size !important; + } + + .mb-#{$id} { + margin-bottom: $size !important; + } + + .ml-#{$id} { + margin-left: $size !important; + } + + .mr-#{$id} { + margin-right: $size !important; + } + + .mt-#{$id} { + margin-top: $size !important; + } + + .mx-#{$id} { + margin-left: $size !important; + margin-right: $size !important; + } + + .my-#{$id} { + margin-bottom: $size !important; + margin-top: $size !important; + } +} + +// Padding utility mixin +@mixin padding-variant($id: 1, $size: $unit-1) { + .p-#{$id} { + padding: $size !important; + } + + .pb-#{$id} { + padding-bottom: $size !important; + } + + .pl-#{$id} { + padding-left: $size !important; + } + + .pr-#{$id} { + padding-right: $size !important; + } + + .pt-#{$id} { + padding-top: $size !important; + } + + .px-#{$id} { + padding-left: $size !important; + padding-right: $size !important; + } + + .py-#{$id} { + padding-bottom: $size !important; + padding-top: $size !important; + } +} diff --git a/themes/learn4/scss/spectre/mixins/_shadow.scss b/themes/learn4/scss/spectre/mixins/_shadow.scss new file mode 100644 index 00000000..79844491 --- /dev/null +++ b/themes/learn4/scss/spectre/mixins/_shadow.scss @@ -0,0 +1,9 @@ +// Component focus shadow +@mixin control-shadow($color: $primary-color) { + box-shadow: 0 0 0 .1rem rgba($color, .2); +} + +// Shadow mixin +@mixin shadow-variant($offset) { + box-shadow: 0 $offset ($offset + .05rem) * 2 rgba($dark-color, .3); +} diff --git a/themes/learn4/scss/spectre/mixins/_text.scss b/themes/learn4/scss/spectre/mixins/_text.scss new file mode 100644 index 00000000..97dc99d0 --- /dev/null +++ b/themes/learn4/scss/spectre/mixins/_text.scss @@ -0,0 +1,6 @@ +// Text Ellipsis +@mixin text-ellipsis() { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} diff --git a/themes/learn4/scss/spectre/mixins/_toast.scss b/themes/learn4/scss/spectre/mixins/_toast.scss new file mode 100644 index 00000000..fa2bb13d --- /dev/null +++ b/themes/learn4/scss/spectre/mixins/_toast.scss @@ -0,0 +1,5 @@ +// Toast variant mixin +@mixin toast-variant($color: $dark-color) { + background: rgba($color, .95); + border-color: $color; +} diff --git a/themes/learn4/scss/spectre/spectre-exp.scss b/themes/learn4/scss/spectre/spectre-exp.scss new file mode 100644 index 00000000..33ed3fe3 --- /dev/null +++ b/themes/learn4/scss/spectre/spectre-exp.scss @@ -0,0 +1,18 @@ +// Variables and mixins +@import "variables"; +@import "mixins"; + +/*! Spectre.css Experimentals v#{$version} | MIT License | github.com/picturepan2/spectre */ +// Experimentals +@import "autocomplete"; +@import "calendars"; +@import "carousels"; +@import "comparison-sliders"; +@import "filters"; +@import "meters"; +@import "off-canvas"; +@import "parallax"; +@import "progress"; +@import "sliders"; +@import "timelines"; +@import "viewer-360"; diff --git a/themes/learn4/scss/spectre/spectre-icons.scss b/themes/learn4/scss/spectre/spectre-icons.scss new file mode 100644 index 00000000..383624e8 --- /dev/null +++ b/themes/learn4/scss/spectre/spectre-icons.scss @@ -0,0 +1,10 @@ +// Variables and mixins +@import "variables"; +@import "mixins"; + +/*! Spectre.css Icons v#{$version} | MIT License | github.com/picturepan2/spectre */ +// Icons +@import "icons/icons-core"; +@import "icons/icons-navigation"; +@import "icons/icons-action"; +@import "icons/icons-object"; diff --git a/themes/learn4/scss/spectre/spectre.scss b/themes/learn4/scss/spectre/spectre.scss new file mode 100644 index 00000000..cff1fde0 --- /dev/null +++ b/themes/learn4/scss/spectre/spectre.scss @@ -0,0 +1,49 @@ +// Variables and mixins +@import "variables"; +@import "mixins"; + +/*! Spectre.css v#{$version} | MIT License | github.com/picturepan2/spectre */ +// Reset and dependencies +@import "normalize"; +@import "base"; + +// Elements +@import "typography"; +@import "asian"; +@import "tables"; +@import "buttons"; +@import "forms"; +@import "labels"; +@import "codes"; +@import "media"; + +// Layout +@import "layout"; +@import "hero"; +@import "navbar"; + +// Components +@import "accordions"; +@import "avatars"; +@import "badges"; +@import "breadcrumbs"; +@import "bars"; +@import "cards"; +@import "chips"; +@import "dropdowns"; +@import "empty"; +@import "menus"; +@import "modals"; +@import "navs"; +@import "pagination"; +@import "panels"; +@import "popovers"; +@import "steps"; +@import "tabs"; +@import "tiles"; +@import "toasts"; +@import "tooltips"; + +// Utility classes +@import "animations"; +@import "utilities"; diff --git a/themes/learn4/scss/spectre/utilities/_colors.scss b/themes/learn4/scss/spectre/utilities/_colors.scss new file mode 100644 index 00000000..28dd2218 --- /dev/null +++ b/themes/learn4/scss/spectre/utilities/_colors.scss @@ -0,0 +1,31 @@ +// Text colors +@include text-color-variant(".text-primary", $primary-color); + +@include text-color-variant(".text-secondary", $secondary-color-dark); + +@include text-color-variant(".text-gray", $gray-color); + +@include text-color-variant(".text-light", $light-color); + +@include text-color-variant(".text-dark", $body-font-color); + +@include text-color-variant(".text-success", $success-color); + +@include text-color-variant(".text-warning", $warning-color); + +@include text-color-variant(".text-error", $error-color); + +// Background colors +@include bg-color-variant(".bg-primary", $primary-color); + +@include bg-color-variant(".bg-secondary", $secondary-color); + +@include bg-color-variant(".bg-dark", $dark-color); + +@include bg-color-variant(".bg-gray", $bg-color); + +@include bg-color-variant(".bg-success", $success-color); + +@include bg-color-variant(".bg-warning", $warning-color); + +@include bg-color-variant(".bg-error", $error-color); diff --git a/themes/learn4/scss/spectre/utilities/_cursors.scss b/themes/learn4/scss/spectre/utilities/_cursors.scss new file mode 100644 index 00000000..bd755c80 --- /dev/null +++ b/themes/learn4/scss/spectre/utilities/_cursors.scss @@ -0,0 +1,24 @@ +// Cursors +.c-hand { + cursor: pointer; +} + +.c-move { + cursor: move; +} + +.c-zoom-in { + cursor: zoom-in; +} + +.c-zoom-out { + cursor: zoom-out; +} + +.c-not-allowed { + cursor: not-allowed; +} + +.c-auto { + cursor: auto; +} \ No newline at end of file diff --git a/themes/learn4/scss/spectre/utilities/_display.scss b/themes/learn4/scss/spectre/utilities/_display.scss new file mode 100644 index 00000000..c6248e07 --- /dev/null +++ b/themes/learn4/scss/spectre/utilities/_display.scss @@ -0,0 +1,44 @@ +// Display +.d-block { + display: block; +} +.d-inline { + display: inline; +} +.d-inline-block { + display: inline-block; +} +.d-flex { + display: flex; +} +.d-inline-flex { + display: inline-flex; +} +.d-none, +.d-hide { + display: none !important; +} +.d-visible { + visibility: visible; +} +.d-invisible { + visibility: hidden; +} +.text-hide { + background: transparent; + border: 0; + color: transparent; + font-size: 0; + line-height: 0; + text-shadow: none; +} +.text-assistive { + border: 0; + clip: rect(0,0,0,0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} diff --git a/themes/learn4/scss/spectre/utilities/_divider.scss b/themes/learn4/scss/spectre/utilities/_divider.scss new file mode 100644 index 00000000..e6c09d2f --- /dev/null +++ b/themes/learn4/scss/spectre/utilities/_divider.scss @@ -0,0 +1,50 @@ +// Divider +.divider, +.divider-vert { + display: block; + position: relative; + + &[data-content]::after { + background: $bg-color-light; + color: $gray-color; + content: attr(data-content); + display: inline-block; + font-size: $font-size-sm; + padding: 0 $unit-2; + transform: translateY(-$font-size-sm + $border-width); + } +} + +.divider { + border-top: $border-width solid $border-color-light; + height: $border-width; + margin: $unit-2 0; + + &[data-content] { + margin: $unit-4 0; + } +} + +.divider-vert { + display: block; + padding: $unit-4; + + &::before { + border-left: $border-width solid $border-color; + bottom: $unit-2; + content: ""; + display: block; + left: 50%; + position: absolute; + top: $unit-2; + transform: translateX(-50%); + } + + &[data-content]::after { + left: 50%; + padding: $unit-1 0; + position: absolute; + top: 50%; + transform: translate(-50%, -50%); + } +} diff --git a/themes/learn4/scss/spectre/utilities/_loading.scss b/themes/learn4/scss/spectre/utilities/_loading.scss new file mode 100644 index 00000000..1b4ea609 --- /dev/null +++ b/themes/learn4/scss/spectre/utilities/_loading.scss @@ -0,0 +1,34 @@ +// Loading +.loading { + color: transparent !important; + min-height: $unit-4; + pointer-events: none; + position: relative; + &::after { + animation: loading 500ms infinite linear; + border: $border-width-lg solid $primary-color; + border-radius: 50%; + border-right-color: transparent; + border-top-color: transparent; + content: ""; + display: block; + height: $unit-4; + left: 50%; + margin-left: -$unit-2; + margin-top: -$unit-2; + position: absolute; + top: 50%; + width: $unit-4; + z-index: $zindex-0; + } + + &.loading-lg { + min-height: $unit-10; + &::after { + height: $unit-8; + margin-left: -$unit-4; + margin-top: -$unit-4; + width: $unit-8; + } + } +} diff --git a/themes/learn4/scss/spectre/utilities/_position.scss b/themes/learn4/scss/spectre/utilities/_position.scss new file mode 100644 index 00000000..c1a7f756 --- /dev/null +++ b/themes/learn4/scss/spectre/utilities/_position.scss @@ -0,0 +1,54 @@ +// Position +.clearfix { + @include clearfix(); +} + +.float-left { + float: left !important; +} + +.float-right { + float: right !important; +} + +.p-relative { + position: relative !important; +} + +.p-absolute { + position: absolute !important; +} + +.p-fixed { + position: fixed !important; +} + +.p-sticky { + position: sticky !important; +} + +.p-centered { + display: block; + float: none; + margin-left: auto; + margin-right: auto; +} + +.flex-centered { + align-items: center; + display: flex; + justify-content: center; +} + +// Spacing +@include margin-variant(0, 0); + +@include margin-variant(1, $unit-1); + +@include margin-variant(2, $unit-2); + +@include padding-variant(0, 0); + +@include padding-variant(1, $unit-1); + +@include padding-variant(2, $unit-2); diff --git a/themes/learn4/scss/spectre/utilities/_shapes.scss b/themes/learn4/scss/spectre/utilities/_shapes.scss new file mode 100644 index 00000000..23e131e9 --- /dev/null +++ b/themes/learn4/scss/spectre/utilities/_shapes.scss @@ -0,0 +1,8 @@ +// Shapes +.s-rounded { + border-radius: $border-radius; +} + +.s-circle { + border-radius: 50%; +} \ No newline at end of file diff --git a/themes/learn4/scss/spectre/utilities/_text.scss b/themes/learn4/scss/spectre/utilities/_text.scss new file mode 100644 index 00000000..67793ac2 --- /dev/null +++ b/themes/learn4/scss/spectre/utilities/_text.scss @@ -0,0 +1,64 @@ +// Text +// Text alignment utilities +.text-left { + text-align: left; +} + +.text-right { + text-align: right; +} + +.text-center { + text-align: center; +} + +.text-justify { + text-align: justify; +} + +// Text transform utilities +.text-lowercase { + text-transform: lowercase; +} + +.text-uppercase { + text-transform: uppercase; +} + +.text-capitalize { + text-transform: capitalize; +} + +// Text style utilities +.text-normal { + font-weight: normal; +} + +.text-bold { + font-weight: bold; +} + +.text-italic { + font-style: italic; +} + +.text-large { + font-size: 1.2em; +} + +// Text overflow utilities +.text-ellipsis { + @include text-ellipsis(); +} + +.text-clip { + overflow: hidden; + text-overflow: clip; + white-space: nowrap; +} + +.text-break { + hyphens: auto; + word-break: break-word; + word-wrap: break-word; +} diff --git a/themes/learn4/scss/theme.scss b/themes/learn4/scss/theme.scss new file mode 100644 index 00000000..6cda4bc8 --- /dev/null +++ b/themes/learn4/scss/theme.scss @@ -0,0 +1,17 @@ +// Core variables and mixins +@import 'theme/variables'; +@import 'spectre/variables'; +@import 'spectre/mixins'; + +@import 'theme/mixins'; +@import 'theme/offcanvas'; +@import 'theme/fonts'; +@import 'theme/topbar'; +@import 'theme/body'; +@import 'theme/typography'; +@import 'theme/lifecycle'; +@import 'theme/forms'; +@import 'theme/animation'; +@import 'theme/simplebar'; + + diff --git a/themes/learn4/scss/theme/_animation.scss b/themes/learn4/scss/theme/_animation.scss new file mode 100644 index 00000000..38092825 --- /dev/null +++ b/themes/learn4/scss/theme/_animation.scss @@ -0,0 +1,23 @@ +.default-animation { + transition: all 0.5s ease; +} + +// Pulse Animation +.pulse { + animation-name: pulse_animation; + animation-duration: 2000ms; + transform-origin:70% 70%; + animation-iteration-count: infinite; + animation-timing-function: linear; +} + +@keyframes pulse_animation { + 0% { transform: scale(1); } + 30% { transform: scale(1); } + 40% { transform: scale(1.08); } + 50% { transform: scale(1); } + 60% { transform: scale(1); } + 70% { transform: scale(1.05); } + 80% { transform: scale(1); } + 100% { transform: scale(1); } +} diff --git a/themes/learn4/scss/theme/_body.scss b/themes/learn4/scss/theme/_body.scss new file mode 100644 index 00000000..14496017 --- /dev/null +++ b/themes/learn4/scss/theme/_body.scss @@ -0,0 +1,113 @@ +.center-content { + #start { + flex: 1; + display: flex; + flex-direction: column; + justify-content: center; + } +} +.learn-content { + position: relative; + display: flex; + min-height: 100vh; + flex-direction: column; + + #start { + padding: 2rem 3rem; + + @include breakpoint(xl) { + padding: 2rem 2rem; + } + + @include breakpoint(lg) { + padding: 2rem 1rem; + } + } +} + +#footer { + border-top: 1px solid $gray-color-light; + margin-top: 1rem; + text-align: center; + p { + margin: 1rem 0; + } +} + +.page-toc { + float: right; + width: 250px; + padding: 0.5rem 0.75rem; + background: darken($bg-color, 2%); + margin-left: 1.5rem; + margin-right: 0; + margin-bottom: 1rem; + margin-top: 10px; + font-size: 0.7rem; + overflow: hidden; + + @include breakpoint(sm) { + float: none; + width: 100%; + margin-top: 0.5rem; + margin-left: 0; + margin-bottom: 0; + } + + .toc-toggle { + font-size: 1.2rem; + display: block; + float: right; + margin-top: -8px; + margin-right: -10px; + padding: 5px 10px; + line-height: 1; + color: lighten($body-font-color, 20%); + cursor: pointer; + } + + &.toc-closed { + height: 40px; + margin-bottom: 0.5rem; + + .toc-toggle .fa:before { + content: '\f107'; + } + } + + h5 { + margin: 0 0 1rem; + } + + ul { + margin-left: 1rem; + margin-bottom: 0; + } + + li { + margin-top: 0; + list-style: decimal; + color: lighten($body-font-color, 30%); + li { + list-style: decimal; + li { + list-style: square; + } + } + + } + + ul > li.first.last { + list-style: none; + margin: 0; + margin-left: -1rem; + } + + // Fix issue with notices going under TOC + & + #body-inner { + > .notices, > .code-toolbar { + overflow: hidden; + } + } + +} diff --git a/themes/learn4/scss/theme/_extensions.scss b/themes/learn4/scss/theme/_extensions.scss new file mode 100644 index 00000000..975daa27 --- /dev/null +++ b/themes/learn4/scss/theme/_extensions.scss @@ -0,0 +1,7 @@ +.search-input, [data-grav-field="array"] input, [data-grav-field="array"] textarea { + @extend .form-input; +} + +.button { + @extend .btn; +} diff --git a/themes/learn4/scss/theme/_fonts.scss b/themes/learn4/scss/theme/_fonts.scss new file mode 100644 index 00000000..edc35275 --- /dev/null +++ b/themes/learn4/scss/theme/_fonts.scss @@ -0,0 +1,28 @@ +@font-face { + font-family: 'Metropolis'; + src: url('../fonts/metropolis-bold-webfont.woff2') format('woff2'), + url('../fonts/metropolis-bold-webfont.woff') format('woff'); + font-weight: 400; + font-style: normal; +} +@font-face { + font-family: 'Public Sans'; + src: url('../fonts/PublicSans-Light.woff2') format('woff2'), + url('../fonts/PublicSans-Light.woff') format('woff'); + font-weight: 300; + font-style: normal; +} +@font-face { + font-family: 'Public Sans'; + src: url('../fonts/PublicSans-SemiBold.woff2') format('woff2'), + url('../fonts/PublicSans-SemiBold.woff') format('woff'); + font-weight: 500; + font-style: normal; +} +@font-face { + font-family: 'Hack'; + src: url('../fonts/hack-regular-subset.woff2') format('woff2'), + url('../fonts/hack-regular-subset.woff') format('woff'); + font-weight: 400; + font-style: normal; +} \ No newline at end of file diff --git a/themes/learn4/scss/theme/_forms.scss b/themes/learn4/scss/theme/_forms.scss new file mode 100644 index 00000000..f9a357f7 --- /dev/null +++ b/themes/learn4/scss/theme/_forms.scss @@ -0,0 +1,77 @@ +form { + .button-wrapper { + margin-top: 0.75rem; + margin-bottom: 1rem; + } + + span.required { + color: $error-color; + font-weight: 700; + font-size: 1.2rem; + } + + .form-input[type=range] { + appearance: slider-horizontal; + &:focus { + box-shadow: none; + border: none; + } + } + + /** Reset some defaults for Quark Theme **/ + .form-group:not(.form-field-toggleable) { + .checkboxes { + display: inherit; + + label { + display: inherit; + padding: (($control-size-sm - $line-height) / 2) $control-padding-x (($control-size-sm - $line-height) / 2) ($control-icon-size + $control-padding-x); + margin: inherit; + + &:before { + display: none; + } + } + } + } + +} + +#grav-login { + + > form { + margin: 2rem auto 0; + max-width: 350px; + } + .form-label { + display: none; + } + .form-data { + margin: 1rem 0; + } + .form-input { + text-align: center; + } + .button-wrapper { + text-align: right; + + .form-data.rememberme { + margin: 0; + float: left; + } + } + + .login-form { + button[type="submit"] { + @include button-primary; + } + } + + .twofa-form { + button[type="submit"]:first-child { + @include button-primary; + float: right; + margin-left: 4px; + } + } +} diff --git a/themes/learn4/scss/theme/_lifecycle.scss b/themes/learn4/scss/theme/_lifecycle.scss new file mode 100644 index 00000000..827ef207 --- /dev/null +++ b/themes/learn4/scss/theme/_lifecycle.scss @@ -0,0 +1,79 @@ +//Lifecycle +.lifecycle { + + #body-inner { + + .level { + position: relative; + + h3 { + font-size: 18px; + position: absolute; + margin: 0; + padding: 2px 10px 4px; + left: 0; + z-index: 1000; + color: #fff; + + } + + .level { + margin-top: 0.5rem; + margin-left: -1rem; + margin-right: 1rem; + margin-bottom: 0.5rem; + padding-bottom: 1rem; + } + + ol li { + padding-top: 0.1rem; + margin-top: 0.2rem; + } + + & > ol { + margin-top: 2rem; + } + + &.level-1 { + background: lighten($turquoise,56%); + border: 4px solid $turquoise; + color: $turquoise; + margin-bottom: 1rem; + + h3 { + background: $turquoise; + } + } + + &.level-2 { + background: lighten($emerald,49%); + border: 4px solid $emerald; + color: $emerald; + + h3 { + background: $emerald; + } + } + + &.level-3 { + background: lighten($peter-river,44%); + border: 4px solid $peter-river; + color: $peter-river; + + h3 { + background: $peter-river; + } + } + + &.level-4 { + background: lighten($wet-asphalt,63%); + border: 4px solid $wet-asphalt; + color: $wet-asphalt; + + h3 { + background: $wet-asphalt; + } + } + } + } +} \ No newline at end of file diff --git a/themes/learn4/scss/theme/_mixins.scss b/themes/learn4/scss/theme/_mixins.scss new file mode 100644 index 00000000..273a0a44 --- /dev/null +++ b/themes/learn4/scss/theme/_mixins.scss @@ -0,0 +1,77 @@ +@mixin breakpoint($point) { + @if $point == 2x { + @media (min-width:$size-2x) { + @content; + } + } @else if $point == xl { + @media (max-width: $size-xl) { + @content; + } + + } @else if $point == lg { + @media (max-width: $size-lg) { + @content; + } + } @else if $point == md { + @media (max-width: $size-md) { + @content; + } + } @else if $point == sm { + @media (max-width: $size-sm) { + @content; + } + } @else if $point == xs { + @media (max-width: $size-xs) { + @content; + } + } @else { + @warn "Breakpoint mixin supports: xs, sm, md, lg, xl, 2x"; + } +} + +@mixin vertical-align($position: relative) { + position: $position; + top: 50%; + transform: translateY(-50%); +} + +@mixin button-primary() { + background: $primary-color; + border-color: $primary-color-dark; + color: $light-color; + &:focus, + &:hover { + background: darken($primary-color-dark, 2%); + border-color: darken($primary-color-dark, 5%); + color: $light-color; + } + &:active, + &.active { + background: darken($primary-color-dark, 4%); + border-color: darken($primary-color-dark, 7%); + color: $light-color; + } +} + +@function strip-unit($value) { + @return $value / ($value * 0 + 1); +} + +@mixin fluid-type($min-vw, $max-vw, $min-font-size, $max-font-size) { + $u1: unit($min-vw); + $u2: unit($max-vw); + $u3: unit($min-font-size); + $u4: unit($max-font-size); + + @if $u1 == $u2 and $u1 == $u3 and $u1 == $u4 { + & { + font-size: $min-font-size; + @media screen and (min-width: $min-vw) { + font-size: calc(#{$min-font-size} + #{strip-unit($max-font-size - $min-font-size)} * ((100vw - #{$min-vw}) / #{strip-unit($max-vw - $min-vw)})); + } + @media screen and (min-width: $max-vw) { + font-size: $max-font-size; + } + } + } +} diff --git a/themes/learn4/scss/theme/_offcanvas.scss b/themes/learn4/scss/theme/_offcanvas.scss new file mode 100644 index 00000000..39318a46 --- /dev/null +++ b/themes/learn4/scss/theme/_offcanvas.scss @@ -0,0 +1,300 @@ +.off-canvas { + min-height: 100vh; + + .off-canvas-toggle { + position: fixed; + top: 0.3rem; + left: 0.3rem; + width: 1.6rem; + height: 1.6rem; + padding-top: .15rem; + z-index: 3; + font-size: 16px !important; + } + + .off-canvas-content { + padding: inherit; + } + + .off-canvas-overlay { + background: rgba($dark-color, .5); + } + + .learn-sidebar { + width: $sidebar-width; + color: rgba(#fff, 0.6); + overflow-y: inherit; + + &:before { + position: fixed; + content: ''; + height: 100vh; + width: $sidebar-width; + top: 0; + left: 0; + } + + a { + color: rgba(#fff, 0.8); + &:hover { + color: #fff; + } + } + + .padding { + padding-left: 1rem; + } + + hr { + border: 0; + border-bottom: 1px solid rgba(#fff, 0.1); + } + + .learn-brand { + position: fixed; + height: $sidebar-brand-height; + width: $sidebar-width; + top: 0; + //background: rgba(#000, 0.3); + //border-bottom: 1px solid rgba(#fff, 0.1); + padding: 10px 20px; + box-shadow: 0 10px 10px -10px rgba(#000, 0.3); + + #logo { + display: inline-block; + margin: 0 2.5rem 0.5rem; + + path { + fill: rgba(#fff, 0.8) !important; + } + + } + } + + .learn-nav { + top: $sidebar-brand-height; + bottom: 0; + width: $sidebar-width; + padding-bottom: 1rem; + position: fixed; + + .read-icon { + float: right; + margin-right: 12px; + margin-top: 5px; + display: none; + opacity: 0.8; + color: rgba(#fff, 0.6); + font-size: 12px; + } + + .visited > a > .read-icon { + display: inline; + } + + ul { + list-style: none; + margin-left: 1rem; + margin-top: .2rem; + + &.topics { + margin-top: 0; + > li:first-child { + margin-top: 0; + } + } + + a { + display: block; + padding-top: 0.1rem; + padding-bottom: 0.1rem; + } + + &.searched { + a { + color: rgba(#fff, 0.5); + } + + .search-match { + a { + color: rgba(#fff, 0.8); + &:hover { + color: rgba(#fff, 0.9); + } + } + } + } + + &.topics { + + &.searched { + ul { + display: block; + } + } + + + & > li { + margin-top: .3rem; + + &.active, &.parent { + background-color: rgba(#000, 0.2); + margin-left: -1rem; + padding-left: 1rem; + padding-top: 0.25rem; + padding-bottom: 0.25rem; + + } + } + + + + } + + li, ol { + margin-top: .1rem; + } + + ul { + font-size: 0.75rem; + display: none; + margin-top: 0; + margin-bottom: 0; + + + } + + li { + &.active > a { + background-color: $primary-color; + color: #fff; + margin-left: -0.4rem; + padding-left: 0.4rem; + + } + + a > span > b { + font-weight: 300; + color: rgba(#fff, 0.6); + } + } + + .active ul, .parent ul { + display: block; + } + } + } + + .searchbox { + position: relative; + border: 1px solid rgba(#fff, 0.1); + background: rgba(#000, 0.1); + color: rgba(#fff, 0.6); + border-radius: 2px; + + ::placeholder { + color: rgba(#fff, 0.5); + } + + input { + border: 0; + background: transparent; + width: 100%; + padding: 4px 25px 4px 30px; + color: rgba(#fff, 0.8); + font-weight: 200; + font-size: 0.7rem; + + + } + + label { + position: absolute; + left: 8px; + top: 2px; + } + + span { + position: absolute; + right: 8px; + top: 2px; + cursor: pointer; + } + } + + .search-options { + margin-top: 10px; + + .adv-search { + font-size: 85%; + display: flex; + align-items: center; + padding-left: 0.6rem; + + i { + margin-right: 5px; + } + } + + .version-chooser select { + display: inline-block; + border: 1px solid rgba(#fff, 0.1); + background: rgba(#000, 0.1); + color: #fff; + border-radius: 2px; + font-size: .8rem; + font-weight: 700; + margin: 0; + letter-spacing: 1px; + } + } + + .side-tools { + font-size: 90%; + color: rgba(#fff, 0.5); + } + } +} + +/** Defaults (purple) **/ +.off-canvas .learn-sidebar:before { + background: linear-gradient(150deg, $wisteria 0, $deep-well 100%); +} + +/** Secondary (green) **/ +body.sidebar-green { + .off-canvas .learn-sidebar:before { + background: linear-gradient(150deg, $green-sea 0, $deep-well 100%); + } +} + +/** Tertiary (blue)**/ +body.sidebar-blue { + .off-canvas .learn-sidebar:before { + background: linear-gradient(150deg, $primary-color 0, $deep-well 100%); + } +} + +/** High Contrast **/ +body.sidebar-contrast { + + a { + //color: mix(#000, $link-color, 20%); + } + + .off-canvas .learn-sidebar { + a { + color: #fff; + } + + &:before { + background: linear-gradient(150deg, #3B4349 0, #1E2329 100%); + } + + .searchbox { + ::placeholder { + color: rgba(#fff, 0.7); + } + } + } +} \ No newline at end of file diff --git a/themes/learn4/scss/theme/_simplebar.scss b/themes/learn4/scss/theme/_simplebar.scss new file mode 100644 index 00000000..b561d4ee --- /dev/null +++ b/themes/learn4/scss/theme/_simplebar.scss @@ -0,0 +1,194 @@ +[data-simplebar] { + position: relative; + flex-direction: column; + flex-wrap: wrap; + justify-content: flex-start; + align-content: flex-start; + align-items: flex-start; + width: inherit; + height: inherit; + max-width: inherit; + max-height: inherit; +} + +.simplebar-wrapper { + overflow: hidden; + width: inherit; + height: inherit; + max-width: inherit; + max-height: inherit; +} + +.simplebar-mask { + direction: inherit; + position: absolute; + overflow: hidden; + padding: 0; + margin: 0; + left: 0; + top: 0; + bottom: 0; + right: 0; + width: auto !important; + height: auto !important; + z-index: 0; +} + +.simplebar-offset { + direction: inherit !important; + box-sizing: inherit !important; + resize: none !important; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + padding: 0; + margin: 0; + -webkit-overflow-scrolling: touch; +} + +.simplebar-content-wrapper { + direction: inherit; + box-sizing: border-box !important; + position: relative; + display: block; + height: 100%; /* Required for horizontal native scrollbar to not appear if parent is taller than natural height */ + width: auto; + visibility: visible; + overflow: auto; /* Scroll on this element otherwise element can't have a padding applied properly */ + max-width: 100%; /* Not required for horizontal scroll to trigger */ + max-height: 100%; /* Needed for vertical scroll to trigger */ +} + +.simplebar-content:before, +.simplebar-content:after { + content: " "; + display: table; +} + +.simplebar-placeholder { + max-height: 100%; + max-width: 100%; + width: 100%; + pointer-events: none; +} + +.simplebar-height-auto-observer-wrapper { + box-sizing: inherit !important; + height: 100%; + width: inherit; + max-width: 1px; + position: relative; + float: left; + max-height: 1px; + overflow: hidden; + z-index: -1; + padding: 0; + margin: 0; + pointer-events: none; + flex-grow: inherit; + flex-shrink: 0; + flex-basis: 0; +} + +.simplebar-height-auto-observer { + box-sizing: inherit; + display: block; + opacity: 0; + position: absolute; + top: 0; + left: 0; + height: 1000%; + width: 1000%; + min-height: 1px; + min-width: 1px; + overflow: hidden; + pointer-events: none; + z-index: -1; +} + +.simplebar-track { + z-index: 1; + position: absolute; + right: 0; + bottom: 0; + pointer-events: none; + overflow: hidden; +} + +[data-simplebar].simplebar-dragging .simplebar-track { + pointer-events: all; +} + +.simplebar-scrollbar { + position: absolute; + right: 2px; + width: 7px; + min-height: 10px; +} + +.simplebar-scrollbar:before { + position: absolute; + content: ""; + background: rgba(#fff, 0.5); + border-radius: 7px; + left: 0; + right: 0; + opacity: 0; + transition: opacity 0.2s linear; +} + +.simplebar-track .simplebar-scrollbar.simplebar-visible:before { + /* When hovered, remove all transitions from drag handle */ + opacity: 0.5; + transition: opacity 0s linear; +} + +.simplebar-track.simplebar-vertical { + top: 0; + width: 11px; +} + +.simplebar-track.simplebar-vertical .simplebar-scrollbar:before { + top: 2px; + bottom: 2px; +} + +.simplebar-track.simplebar-horizontal { + left: 0; + height: 11px; +} + +.simplebar-track.simplebar-horizontal .simplebar-scrollbar:before { + height: 100%; + left: 2px; + right: 2px; +} + +.simplebar-track.simplebar-horizontal .simplebar-scrollbar { + right: auto; + left: 0; + top: 2px; + height: 7px; + min-height: 0; + min-width: 10px; + width: auto; +} + +/* Rtl support */ +[data-simplebar-direction="rtl"] .simplebar-track.simplebar-vertical { + right: auto; + left: 0; +} + +.hs-dummy-scrollbar-size { + direction: rtl; + position: fixed; + opacity: 0; + visibility: hidden; + height: 500px; + width: 500px; + overflow-y: hidden; + overflow-x: scroll; +} diff --git a/themes/learn4/scss/theme/_topbar.scss b/themes/learn4/scss/theme/_topbar.scss new file mode 100644 index 00000000..1c60ac05 --- /dev/null +++ b/themes/learn4/scss/theme/_topbar.scss @@ -0,0 +1,80 @@ +#top-bar { + position: fixed; + display: flex; + background: $bg-color; + border-bottom: 1px solid darken($bg-color, 4%); + z-index: 2; + align-items: center; + + top: 0; + right: 0; + left: $sidebar-width; + + @include breakpoint(lg) { + left: 0; + } + + #breadcrumbs { + padding-left: 0.5rem; + line-height: 1; + height: auto; + width: 100%; + + @include breakpoint(sm) { + * { + display: none; + } + } + + > span, > a { + padding: 0 .5rem !important; + + span { + padding: 0 !important; + } + } + + @include breakpoint(lg) { + padding-left: 2rem; + } + + + } + + #navigation { + width: 400px; + display: flex; + + > a, span { + width: 50%; + text-align: center; + border-left: 1px solid darken($bg-color, 4%); + + font-size: 27px; + text-decoration: none; + transition: background-color 0.5s ease, color 0.5s ease; + + &.disabled { + color: lighten($body-font-color, 50%); + + } + } + + > a { + &:hover { + background: darken($bg-color, 4%); + color: $link-color-dark; + } + } + } + + .progress { + position: absolute; + bottom: -1px; + background: linear-gradient(to right, $primary-color var(--scroll), transparent 0); + background-repeat: no-repeat; + width: 100%; + height: 1px; + z-index: 1; + } +} \ No newline at end of file diff --git a/themes/learn4/scss/theme/_typography.scss b/themes/learn4/scss/theme/_typography.scss new file mode 100644 index 00000000..108dba83 --- /dev/null +++ b/themes/learn4/scss/theme/_typography.scss @@ -0,0 +1,452 @@ +html { + @include fluid-type($size-xs, $size-xl, $min-responsive-font-size, $html-font-size); +} + +body { + font-weight: 300; + letter-spacing: -0.015rem; + ::selection { + background: $selection-color; + } +} + +div { + min-width: 0; +} + +pre { + padding: 1em; +} + +mark { + padding: 0; +} + +// Header Overrides +h1, h2, h3, h4, h5, h6 { + font-family: $title-font-family; + letter-spacing: -0.05rem; + margin-top: 2rem; + color: darken($body-font-color, 10%); + line-height: 1; + font-weight: 500; +} + +h1 { + font-size: 2.5rem; + font-weight: 500; + + @include breakpoint(sm) { + font-size: 2rem; + } +} + +a { + @extend .default-animation; + + &:hover, &:focus, &:active, &.active { + color: $link-color-dark; + text-decoration: none; + } + + &:focus { + outline: none !important; + box-shadow: none !important; + } + + &:visited { + color: $link-color; + } +} + +// Tables +.table-keycol { + overflow: hidden; +} + +.table { + width: auto; +} + +table { + border-collapse: collapse; + border-spacing: 0; + width: 100%; + overflow-x: auto; + + margin-bottom: 1.5rem; + + @if $rtl == true { + text-align: right; + } @else { + text-align: left; + } + + tbody { + tr:nth-of-type(odd) { + background: $bg-color; + } + tr { + &.active { + background: $bg-color-dark; + } + } + } + + td, + th { + border-bottom: $border-width solid $border-color; + padding: $unit-3 $unit-2; + } + th { + border-bottom-width: $border-width-lg; + } + + .table-keycol & { + tr > td:first-child, tr > th:first-child { + white-space: nowrap; + width: 15%; + } + } +} + + +img, .video-container { + max-width: 100%; + margin: 3rem auto; + display: block; + text-align: center; + + + &.border { + border: 2px solid #e6e6e6 !important; + padding: 2px; + } + + &.shadow { + box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1); + } + +} + +hr { + border: 0; + border-top: 1px solid $border-color; +} + +ul, ol { + margin: 0 0 1.2rem 0; + + ul, ol { + margin: 0; + } + + ol { + list-style-type: decimal; + } + + li { + padding-top: 0; + } +} + +#chapter { + text-align: center; + max-width: 600px; + margin: 0 auto; + + h3 { + opacity: 0.7; + + & + h1 { + display: inline-block; + margin: 1rem auto 2rem; + border-bottom: 3px solid $gray-color-light; + + @include breakpoint(sm) { + font-size: 2.5rem; + } + } + } +} + +#body-inner { + + :target:before { + content: ""; + display: block; + margin-top: -60px; + height: 60px; + width: 1px; + } +} + +// Debug Code Blocks +pre.xdebug-var-dump { + background: #fafafa; + display: block; + padding: 1rem; + line-height: 1.5; + color: inherit; + border-radius: 2px; + overflow-x: auto; +} + +#body-inner { + + pre { + margin: 0.5rem 0; + ::selection { + background: $selection-color; + } + } + + code { + word-break: break-word; + } + + .code-toolbar { + margin: 0.5rem 0; + pre[class*="language-"] { + margin: 0; + } + } + + code[class*="language-"], pre[class*="language-"] { + font-family: $mono-font-family; + } + + pre[class*="language-"] { + font-size: .7rem; + code { + padding: initial; + font-size: .7rem; + } + } + + .no-margin-top { + margin-top: -1em; + .code-toolbar { + margin-top: 0; + > pre { + padding-top: 3px; + } + } + + } + + .no-margin-bottom .code-toolbar { + margin-bottom: 0; + } + + .line-highlight { + background: linear-gradient(to right, rgba($highlight-color, 0.3) 70%, rgba($highlight-color, 0)); + &:before { + background-color: darken($highlight-color, 30%); + //color: #999; + box-shadow: none; + top: 0.15rem; + } + } +} + +// Icon Tweaks +i.fa { + &.fa-heart, &.fa-heart-o { + &.pulse { + color: #920 + } + } +} + +// Font Weights +b, +strong { + font-weight: 500; +} + +.heavy { + font-weight: 700; +} + +.light { + font-weight: 200; +} + +// Error configuration +#error { + text-align: center; + position: relative; + margin-top: 5rem; + + .icon { + font-size: 50px; + } +} + +// Messages +#messages { + margin-bottom: 1rem; + + .icon { + font-size: 1rem; + } +} + +// Lists +ul, +ol { + margin-left: $unit-8; + + ul, + ol { + margin-left: $unit-8; + } +} + +ul { + list-style: disc outside; +} + +ol { + list-style: decimal outside; +} + +#navigation { + a.github-link { + font-size: inherit !important; + display: flex; + justify-content: center; + align-items: center; + padding: 0 1rem; + + i { + padding-right: 5px; + } + } +} + +// Tabs +$tabs-color: #767693; +$tabs-bg: #F8F9FA; +.tabs-wrapper { + + &.ui-theme-badges { + background: $tabs-bg; + border: 1px solid darken($tabs-bg, 2%); + border-radius: 0; + + .tabs-nav { + margin: 0.25rem; + + & > li { + margin-top: 0; + } + li { + a { + color: $tabs-color; + background: darken($tabs-bg, 6%); + border-radius: 0; + } + &.current { + a { + background: darken($tabs-bg, 40%); + color: #fff; + } + } + &:not(.current) { + a:hover { + background: darken($tabs-bg, 9%) + } + } + } + } + + .tabs { + .tab { + padding: 0.25rem 0; + + pre { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + + } + } + + } + +} + +// Notices +.notices { + margin: 1.5rem 0; + padding: 0.4rem; + + p { + margin: 0 0 1.5rem 0.5rem; + + &:last-child { + margin-bottom: 0; + } + } + + &.info { + border-left: 5px solid #f0ad4e; + background: #fcf8f2; + color: #df8a13; + } + + &.warning { + border-left: 5px solid #d9534f; + background: #fdf7f7; + color: #b52b27; + } + + &.note { + border-left: 5px solid #5bc0de; + background: #f4f8fa; + color: #28a1c5; + } + + &.tip { + border-left: 5px solid #5cb85c; + background: #f1f9f1; + color: #3d8b3d; + } + +} + + +// Wrap fixes +audio { + max-width: 100%; +} + +pre { + max-width: 100%; +} + +pre[class*="language-"]:not(.command-line) { + + &, &>code[class*="language-"] { + word-break: break-word; + white-space: pre-wrap; + } +} + +.tntsearch-results em { + @include label-variant($body-font-color, $highlight-color); + border-bottom: $unit-o solid darken($highlight-color, 15%); + border-radius: $border-radius; + padding: $unit-o $unit-h 0; +} + +//pre.command-line { +// &, & > code { +// word-break: initial; +// white-space: pre +// } +//} + diff --git a/themes/learn4/scss/theme/_variables.scss b/themes/learn4/scss/theme/_variables.scss new file mode 100644 index 00000000..5bd4f7cf --- /dev/null +++ b/themes/learn4/scss/theme/_variables.scss @@ -0,0 +1,48 @@ +// Colors +$turquoise: #1ABC9C; +$green-sea: #16A085; +$emerald: #2ECC71; +$nephritis: #27AE60; +$peter-river: #3498DB; +$belize_hole: #2980B9; +$deep-well: #283A63; +$lavender: #7676f4; +$amethyst: #A66BBE; +$wisteria: #8E44AD; +$wet-asphalt: #34495E; +$midnight-blue: #2C3E50; +$sunflower: #F2CA27; +$orange: #F39C12; +$carrot: #E67E22; +$pumpkin: #D35400; +$alizarin: #E74C3C; +$pomegranate: #C0392B; +$clouds: #ECF0F1; +$silver: #BDC3C7; +$concrete: #95A5A6; +$asbestos: #7F8C8D; + +$primary-color: #1AA3ED !default; +$secondary-color: #38C5C7 !default; +$dark-color: #454d5d !default; +$body-font-color: darken($dark-color, 5%) !default; +$link-color: darken($primary-color, 5%) !default; +$gray-color: lighten($dark-color, 40%) !default; +$gray-color-dark: darken($gray-color, 25%) !default; +$border-color: lighten($dark-color, 60%) !default; +$bg-color: lighten($dark-color, 66%) !default; +$code-color: $lavender !default; +$selection-color: #ECECFE; + +// Sidebar +$sidebar-width: 14rem; +$sidebar-brand-height: 7rem; + +// Fonts +$base-font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto !default; +$fallback-font-family: "Helvetica Neue", sans-serif !default; +$body-font-family: "Public Sans", $fallback-font-family !default; +$title-font-family: "Metropolis", $fallback-font-family !default; +$mono-font-family: "Hack", monospace !default; +$font-size: .85rem !default; +$min-responsive-font-size: 18px; diff --git a/themes/learn4/templates/chapter.html.twig b/themes/learn4/templates/chapter.html.twig new file mode 100644 index 00000000..363ff03e --- /dev/null +++ b/themes/learn4/templates/chapter.html.twig @@ -0,0 +1,8 @@ +{% set body_classes = 'center-content' %} +{% extends 'docs.html.twig' %} + +{% block content %} + <div id="chapter"> + {{ page.content|raw }} + </div> +{% endblock %} diff --git a/themes/learn4/templates/default.html.twig b/themes/learn4/templates/default.html.twig new file mode 100644 index 00000000..4f88349f --- /dev/null +++ b/themes/learn4/templates/default.html.twig @@ -0,0 +1,9 @@ +{% embed 'partials/base.html.twig' with { github_link_position: false } %} + + {% block content %} + {% include 'partials/page.html.twig' %} + {% endblock %} + + {% block footer %}{% endblock %} + +{% endembed %} diff --git a/themes/learn4/templates/docs.html.twig b/themes/learn4/templates/docs.html.twig new file mode 100644 index 00000000..6c3a9d05 --- /dev/null +++ b/themes/learn4/templates/docs.html.twig @@ -0,0 +1,17 @@ +{% set body_classes = body_classes ~ ' ' ~ page.header.body_classes %} +{% extends 'partials/base.html.twig' %} + +{% set tags = page.taxonomy.tag %} +{% if tags %} + {% set progress = page.collection({'items':{'@taxonomy':{'category': 'docs', 'tag': tags}},'order': {'by': 'default', 'dir': 'asc'}}) %} +{% else %} + {% set progress = page.collection({'items':{'@taxonomy':{'category': 'docs'}},'order': {'by': 'default', 'dir': 'asc'}}) %} +{% endif %} + +{% block content %} + {% include 'partials/toc.html.twig' %} + + {% include 'partials/page.html.twig' %} + + {% include 'partials/github-note.html.twig' %} +{% endblock %} diff --git a/themes/learn4/templates/error.html.twig b/themes/learn4/templates/error.html.twig new file mode 100644 index 00000000..5ecf0aec --- /dev/null +++ b/themes/learn4/templates/error.html.twig @@ -0,0 +1,12 @@ +{% extends 'partials/base.html.twig' %} + +{% block content %} + <div id="error"> + <div> + <h1>{{ 'PLUGIN_ERROR.ERROR'|t }} {{ page.header.http_response_code }}</h1> + <p> + {{ page.content|raw }} + </p> + </div> + </div> +{% endblock %} diff --git a/themes/learn4/templates/forms/fields/checkbox/checkbox.html.twig b/themes/learn4/templates/forms/fields/checkbox/checkbox.html.twig new file mode 100644 index 00000000..ee60e717 --- /dev/null +++ b/themes/learn4/templates/forms/fields/checkbox/checkbox.html.twig @@ -0,0 +1,32 @@ +{% extends "forms/field.html.twig" %} + +{% block label %} +{% endblock %} + +{% block input %} + {% set id = field.id|default(field.name) ~ '-' ~ key %} + <div class="{{ form_field_wrapper_classes ?: 'form-input-wrapper' }} {{ field.size }} {{ field.wrapper_classes }}"> + <label class="{{ form_field_checkbox_classes }}" for="{{ id|e }}"> + <input + {# required attribute structures #} + name="{{ (scope ~ field.name)|fieldName }}" + value="{{ value|join(', ') }}" + type="checkbox" + {% if value == true %} checked="checked" {% endif %} + + {# input attribute structures #} + {% block input_attributes %} + id="{{ id|e }}" + {% if field.classes is defined %}class="{{ field.classes }}" {% endif %} + {% if field.style is defined %}style="{{ field.style|e }}" {% endif %} + {% if field.disabled or isDisabledToggleable %}disabled="disabled"{% endif %} + {% if field.autofocus in ['on', 'true', 1] %}autofocus="autofocus"{% endif %} + {% if field.novalidate in ['on', 'true', 1] %}novalidate="novalidate"{% endif %} + {% if required %}required="required"{% endif %} + {% endblock %} + /> + <i class="form-icon"></i> + {{ field.label|t|e }} {{ field.validate.required in ['on', 'true', 1] ? '<span class="required">*</span>' }} + </label> + </div> +{% endblock %} diff --git a/themes/learn4/templates/forms/fields/checkboxes/checkboxes.html.twig b/themes/learn4/templates/forms/fields/checkboxes/checkboxes.html.twig new file mode 100644 index 00000000..8674ab85 --- /dev/null +++ b/themes/learn4/templates/forms/fields/checkboxes/checkboxes.html.twig @@ -0,0 +1,44 @@ +{% extends "forms/field.html.twig" %} + +{% set originalValue = value %} +{% set value = (value is null ? field.default : value) %} +{% if field.use == 'keys' and field.default %} + {% set value = field.default|merge(value) %} +{% endif %} + +{% block global_attributes %} + {{ parent() }} + data-grav-keys="{{ field.use == 'keys' ? 'true' : 'false' }}" + data-grav-field-name="{{ (scope ~ field.name)|fieldName }}" +{% endblock %} + +{% block input %} + {% for key, text in field.options %} + + {% set id = field.id|default(field.name) ~ '-' ~ key %} + {% set name = field.use == 'keys' ? key : id %} + {% set val = field.use == 'keys' ? '1' : key %} + {% set checked = (field.use == 'keys' ? value[key] : key in value) %} + {% set help = (key in field.help_options|keys ? field.help_options[key] : false) %} + + <div class="checkboxes {{ form_field_wrapper_classes }} {{ field.wrapper_classes }}"> + <label class="{{ form_field_checkbox_classes }}" for="{{ id|e }}"> + <input type="checkbox" + id="{{ id|e }}" + value="{{ val|e }}" + name="{{ (scope ~ field.name)|fieldName ~ '[' ~ name ~ ']' }}" + {% if checked %}checked="checked"{% endif %} + {% if field.classes is defined %}class="{{ field.classes }}" {% endif %} + {% if field.disabled or isDisabledToggleable %}disabled="disabled"{% endif %} + + > + <i class="form-icon"></i> + {% if help %} + <span class="hint--bottom" data-hint="{{ help|t|e('html_attr') }}">{{ text|t|e }}</span> + {% else %} + {{ text|t|e }} + {% endif %} + </label> + </div> + {% endfor %} +{% endblock %} diff --git a/themes/learn4/templates/forms/fields/radio/radio.html.twig b/themes/learn4/templates/forms/fields/radio/radio.html.twig new file mode 100644 index 00000000..5698f364 --- /dev/null +++ b/themes/learn4/templates/forms/fields/radio/radio.html.twig @@ -0,0 +1,26 @@ +{% extends "forms/field.html.twig" %} + +{% set originalValue = value %} +{% set value = (value is null ? field.default : value) %} + +{% block input %} + {% for key, text in field.options %} + {% set id = field.id|default(field.name) ~ '-' ~ key %} + + <div class="radio {{ form_field_wrapper_classes }} {{ field.wrapper_classes }}"> + <label class="{{ form_field_radio_classes }}" for="{{ id|e }}"> + <input type="radio" + value="{{ key|e }}" + id="{{ id|e }}" + name="{{ (scope ~ field.name)|fieldName }}" + {% if field.classes is defined %}class="{{ field.classes }}" {% endif %} + {% if key == value %}checked="checked" {% endif %} + {% if field.disabled or isDisabledToggleable %}disabled="disabled"{% endif %} + {% if required %}required="required"{% endif %} + /> + <i class="form-icon"></i> + {% if grav.twig.twig.filters['tu'] is defined %}{{ text|tu|raw }}{% else %}{{ text|t|raw }}{% endif %} + </label> + </div> + {% endfor %} +{% endblock %} diff --git a/themes/learn4/templates/forms/fields/switch/switch.html.twig b/themes/learn4/templates/forms/fields/switch/switch.html.twig new file mode 100644 index 00000000..24d5609d --- /dev/null +++ b/themes/learn4/templates/forms/fields/switch/switch.html.twig @@ -0,0 +1,3 @@ +{% set form_field_checkbox_classes = 'form-switch' %} +{% extends "forms/fields/checkbox/checkbox.html.twig" %} + diff --git a/themes/learn4/templates/macros/macros.html.twig b/themes/learn4/templates/macros/macros.html.twig new file mode 100644 index 00000000..b3823800 --- /dev/null +++ b/themes/learn4/templates/macros/macros.html.twig @@ -0,0 +1,36 @@ +{% macro loop(page, parent_loop) %} + {% import _self as macros %} + {% if parent_loop|length > 0 %} + {% set data_level = parent_loop %} + {% else %} + {% set data_level = 0 %} + {% endif %} + {% for p in page.children.visible %} + {% set parent_page = p.activeChild ? ' parent' : '' %} + {% set current_page = p.active ? ' active' : '' %} + <li class="dd-item{{ parent_page }}{{ current_page }}" data-nav-id="{{ p.route }}"> + <a href="{{ p.url }}" {% if p.header.class %}class="{{ p.header.class }}"{% endif %}> + <i class="fa fa-check-square read-icon"></i> + <span><b>{% if data_level == 0 %}{{ loop.index }}. {% endif %}</b>{{ p.menu }}</span> + </a> + {% if p.children.count > 0 %} + <ul> + {{ macros.loop(p, parent_loop|default(0)+loop.index) }} + </ul> + {% endif %} + </li> + {% endfor %} +{% endmacro %} + +{% macro version(p) %} + {% set parent_page = p.activeChild ? ' parent' : '' %} + {% set current_page = p.active ? ' active' : '' %} + <h5 class="{{ parent_page }}{{ current_page }}"> + {% if p.activeChild or p.active %} + <i class="fa fa-chevron-down fa-fw"></i> + {% else %} + <i class="fa fa-plus fa-fw"></i> + {% endif %} + <a href="{{ p.url }}">{{ p.menu }}</a> + </h5> +{% endmacro %} diff --git a/themes/learn4/templates/partials/base.html.twig b/themes/learn4/templates/partials/base.html.twig new file mode 100644 index 00000000..913abe8e --- /dev/null +++ b/themes/learn4/templates/partials/base.html.twig @@ -0,0 +1,78 @@ +{% set github_config = theme_var('github') %} +{% set grid_size = theme_var('grid-size') %} +{% set compress = theme_var('production-mode') ? '.min.css' : '.css' %} +<!DOCTYPE html> +<html lang="{{ grav.language.getActive ?: grav.config.site.default_lang }}"> +<head> +{% block head deferred %} + <meta charset="utf-8" /> + <title>{% if page.title %}{{ page.title|e('html') }} | {% endif %}{{ site.title|e('html') }}</title> + + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + {% include 'partials/metadata.html.twig' %} + + <link rel="icon" type="image/png" href="{{ url('theme://images/favicon.png') }}" /> + <link rel="canonical" href="{{ page.url(true, true) }}" /> +{% endblock head %} + +{% block stylesheets %} + {% do assets.addCss('theme://css/fork-awesome.min.css') %} + {% do assets.addCss('theme://css-compiled/spectre'~compress) %} + {% do assets.addCss('theme://css-compiled/theme'~compress) %} +{% endblock %} + +{% block javascripts %} + {% do assets.addJs('jquery', 101) %} + {% do assets.addJs('theme://js/learn4.js', { group:'bottom' }) %} +{% endblock %} + +{% block assets deferred %} + {{ assets.css()|raw }} + {{ assets.js()|raw }} +{% endblock %} +</head> +<body id="top" class="{{ sidebar_color }} {% block body_classes %}{{ body_classes|trim }}{% endblock %}" data-url="{{ page.route }}"> + <div id="page-wrapper" class="off-canvas off-canvas-sidebar-show"> + <!-- off-screen toggle button --> + <a class="off-canvas-toggle btn btn-primary btn-action" href="#sidebar-id"> + <i class="fa fa-bars"></i> + </a> + + <div id="sidebar-id" class="learn-sidebar off-canvas-sidebar"> + <!-- off-screen sidebar --> + {% include 'partials/sidebar.html.twig' %} + </div> + + <a class="off-canvas-overlay" href="#close"></a> + + <div class="learn-content off-canvas-content"> + {% block topbar %} + {% include 'partials/topbar.html.twig' %} + {% endblock %} + + <section id="start"> + {% block body %} + <section id="body-wrapper" class="section"> + <section class="container {{ grid_size }}"> + {% block messages %} + {% include 'partials/messages.html.twig' ignore missing %} + {% endblock %} + {% block content %}{% endblock %} + </section> + </section> + {% endblock %} + </section> + + {% block footer %} + {% include 'partials/footer.html.twig' %} + {% endblock %} + </div> + </div> + + {% block bottom %} + <script src="https://unpkg.com/simplebar@4.0.0-alpha.4/dist/simplebar.min.js"></script> + {{ assets.js('bottom')|raw }} + {% endblock %} +</body> +</html> diff --git a/themes/learn4/templates/partials/footer.html.twig b/themes/learn4/templates/partials/footer.html.twig new file mode 100644 index 00000000..1acce820 --- /dev/null +++ b/themes/learn4/templates/partials/footer.html.twig @@ -0,0 +1,5 @@ +<section id="footer" class="section"> + <section class="container {{ grid_size }}"> + <p>Powered by <a href="http://getgrav.org">Grav</a> + <i class="fa fa-code"></i> with <i class="fa fa-heart-o pulse "></i> by <a href="https://trilby.media">Trilby Media</a>.</p> + </section> +</section> diff --git a/themes/learn4/templates/partials/github-link.html.twig b/themes/learn4/templates/partials/github-link.html.twig new file mode 100644 index 00000000..699ddb71 --- /dev/null +++ b/themes/learn4/templates/partials/github-link.html.twig @@ -0,0 +1 @@ +<a class="github-link tooltip tooltip-bottom" href="{{ github_config.tree ~ ('/'~page.filePathClean)|replace({'/user/':''}) }}" data-tooltip="Edit this page on GitHub"><i class="fa fa-pencil-square"></i> {{ 'THEME_LEARN4_GITHUB_EDIT'|t }}</a> diff --git a/themes/learn4/templates/partials/github-note.html.twig b/themes/learn4/templates/partials/github-note.html.twig new file mode 100644 index 00000000..7364992c --- /dev/null +++ b/themes/learn4/templates/partials/github-note.html.twig @@ -0,0 +1,6 @@ +<div class="notices note"> + <p> + {{ 'THEME_LEARN4_GITHUB_NOTE'|t|raw }} + </p> +</div> + diff --git a/themes/learn4/templates/partials/logo.html.twig b/themes/learn4/templates/partials/logo.html.twig new file mode 100644 index 00000000..b2ecb71c --- /dev/null +++ b/themes/learn4/templates/partials/logo.html.twig @@ -0,0 +1 @@ +<svg id="grav-logo" width="100%" height="100%" viewBox="0 0 504 140" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;"><path d="M235.832,71.564l-7.98,-0.001c-1.213,0.001 -2.197,0.987 -2.197,2.204l0,15.327l-0.158,0.132c-4.696,3.962 -10.634,6.14 -16.719,6.14c-14.356,0 -26.034,-11.68 -26.034,-26.037c0,-14.358 11.678,-26.035 26.034,-26.035c5.582,0 10.919,1.767 15.437,5.113c0.877,0.649 2.093,0.56 2.866,-0.211l5.69,-5.69c0.444,-0.442 0.675,-1.055 0.639,-1.681c-0.034,-0.627 -0.336,-1.206 -0.828,-1.597c-6.76,-5.363 -15.214,-8.314 -23.805,-8.314c-21.18,0 -38.414,17.233 -38.414,38.415c0,21.183 17.234,38.415 38.414,38.415c10.937,0 21.397,-4.705 28.698,-12.914c0.358,-0.403 0.556,-0.921 0.556,-1.46l0,-19.603c0,-1.217 -0.985,-2.203 -2.2,-2.203" style="fill:#000;fill-rule:nonzero;"/><path d="M502.794,34.445c-0.408,-0.616 -1.1,-0.989 -1.838,-0.989l-8.684,0c-0.879,0 -1.673,0.522 -2.022,1.329l-24.483,56.839l-24.92,-56.852c-0.352,-0.799 -1.142,-1.316 -2.012,-1.316l-8.713,0c-0.744,0 -1.44,0.373 -1.843,0.995c-0.408,0.623 -0.476,1.408 -0.174,2.09l30.186,68.858c0.352,0.799 1.143,1.317 2.017,1.317l10.992,0c0.879,0 1.673,-0.527 2.021,-1.329l29.655,-68.861c0.289,-0.68 0.222,-1.461 -0.182,-2.081" style="fill:#000;fill-rule:nonzero;"/><path d="M388.683,34.772c-0.353,-0.798 -1.142,-1.316 -2.017,-1.316l-10.988,0c-0.879,0 -1.673,0.522 -2.021,1.329l-29.655,68.861c-0.294,0.675 -0.226,1.46 0.182,2.077c0.407,0.619 1.096,0.993 1.838,0.993l8.684,0c0.879,0 1.673,-0.526 2.022,-1.329l24.478,-56.842l24.92,56.854c0.353,0.798 1.143,1.317 2.013,1.317l8.717,0c0.744,0 1.44,-0.374 1.843,-0.993c0.408,-0.624 0.471,-1.41 0.174,-2.094l-30.19,-68.857Z" style="fill:#000;fill-rule:nonzero;"/><path d="M309.196,81.525l0.476,-0.229c8.675,-4.191 14.279,-13.087 14.279,-22.667c0,-13.881 -11.295,-25.174 -25.176,-25.174l-31.863,0c-1.214,0 -2.199,0.988 -2.199,2.202l0,68.855c0,1.219 0.985,2.204 2.199,2.204l7.979,0c1.214,0 2.2,-0.985 2.2,-2.204l0,-58.679l21.684,0c7.059,0 12.799,5.739 12.799,12.796c0,5.885 -3.996,10.989 -9.728,12.408c-1.032,0.261 -2.064,0.393 -3.071,0.393l-7.977,0c-0.829,0 -1.585,0.467 -1.959,1.205c-0.378,0.74 -0.305,1.625 0.187,2.296l22.62,30.884c0.412,0.566 1.07,0.901 1.771,0.901l9.915,0c0.827,0 1.587,-0.467 1.96,-1.207c0.378,-0.742 0.302,-1.629 -0.186,-2.296l-15.91,-21.688Z" style="fill:#000;fill-rule:nonzero;"/><path d="M107.191,80.969c-7.255,-4.794 -11.4,-8.845 -15.011,-16.109c-2.47,4.977 -8.236,12.376 -17.962,18.198c-4.856,15.106 -27.954,44.015 -35.43,39.916c-2.213,-1.212 -2.633,-2.808 -2.133,-4.456c0.536,-4.129 9.078,-13.62 9.078,-13.62c0,0 0.18,1.992 2.913,6.187c-3.609,-11.205 5.965,-25.031 8.5,-29.738c3.985,-1.269 4.274,-6.387 4.274,-6.387c0.255,-7.909 -3.278,-13.635 -6.701,-17.059c2.459,3.002 3.255,7.539 3.372,11.694l0,0.023c0.012,0.469 0.012,0.93 0.011,1.39c-0.117,3.439 -1.157,8.19 -3.383,8.19l0.006,0.03c-2.289,-0.098 -5.115,0.391 -7.639,1.18l-5.582,1.334c0,0 2.977,-0.136 4.584,1.252c-1.79,2.915 -5.769,6.533 -10.206,8.588c-6.457,2.995 -8.312,-2.964 -5.034,-6.838c0.805,-0.946 1.618,-1.745 2.387,-2.399c-0.495,-0.513 -0.807,-1.198 -0.889,-2.068c-0.001,-0.005 -0.004,-0.009 -0.005,-0.013c-0.45,-1.977 -0.202,-4.543 2.596,-8.623c0.551,-0.863 1.214,-1.748 2.007,-2.647c0.025,-0.031 0.046,-0.059 0.072,-0.089c0.034,-0.042 0.072,-0.08 0.108,-0.121c0.02,-0.023 0.039,-0.045 0.059,-0.068c0.2,-0.228 0.413,-0.45 0.639,-0.663c3.334,-3.414 8.599,-6.966 16.897,-10.152c9.675,-14.223 13.219,-16.89 13.219,-16.89c1.071,-1.096 2.943,-2.458 3.632,-2.805c-5.053,-8.781 -6.074,-21.158 -4.75,-24.493c-0.107,0.18 -0.206,0.365 -0.287,0.556c0.49,-1.143 0.819,-1.509 1.328,-2.111c1.381,-1.632 6.058,-2.488 7.737,0.971c0.895,1.844 1.063,4.232 1.034,6.023c-3.704,-0.193 -7.063,4.036 -7.063,4.036c0,0 3.067,-1.448 6.879,-1.473c0,0 1.015,0.883 2.283,2.542c-1.712,3.213 -4.524,10.021 -2.488,17.168c0.338,1.408 0.849,2.619 1.483,3.648c0.024,0.045 0.044,0.089 0.069,0.135c0.051,0.066 0.096,0.122 0.144,0.183c3.368,5.072 9.542,5.665 9.542,5.665c-2.906,-1.45 -5.274,-3.76 -6.816,-6.56c-0.8,-1.498 -1.291,-2.762 -1.592,-3.761c-1.636,-6.313 0.771,-9.999 2.149,-12.471c3.17,-4.917 8.944,-7.893 15.151,-7.185c8.712,0.995 14.968,8.862 13.973,17.571c-0.608,5.321 -3.781,9.723 -8.142,12.117c1.049,2.839 -0.073,6.28 -0.073,6.28c2.642,3.323 2.758,5.238 2.667,7.017c-3.357,-0.565 -6.618,1.701 -6.618,1.701c0,0 6.476,-1.546 10.238,1.81c2.446,2.631 4.078,5.009 5.051,6.766c1.393,2.505 7.859,2.683 7.123,7.188c-0.737,4.499 -5.669,4.542 -13.401,-0.56M69.571,0c-38.424,0 -69.571,31.148 -69.571,69.567c0,38.422 31.147,69.573 69.571,69.573c38.42,0 69.568,-31.151 69.568,-69.573c0,-38.42 -31.148,-69.567 -69.568,-69.567" style="fill:#000;fill-rule:nonzero;"/><path d="M73.796,51.693c0.813,-0.814 0.813,-2.134 0,-2.947c-0.815,-0.814 -2.133,-0.814 -2.947,0c-0.815,0.813 -0.815,2.133 0,2.947c0.814,0.813 2.132,0.813 2.947,0" style="fill:#000;fill-rule:nonzero;"/><path d="M66.445,53.149c-0.814,0.813 -0.814,2.133 0,2.947c0.813,0.814 2.133,0.814 2.947,0c0.813,-0.814 0.813,-2.134 0,-2.947c-0.814,-0.813 -2.134,-0.813 -2.947,0" style="fill:#000;fill-rule:nonzero;"/><path d="M79.231,54.233c-1.274,-1.274 -3.339,-1.272 -4.611,0l-2.713,2.712c-1.274,1.275 -1.274,3.339 0,4.612l2.978,2.978c1.274,1.275 3.338,1.274 4.611,0l2.712,-2.712c1.274,-1.274 1.274,-3.339 0,-4.612l-2.977,-2.978Z" style="fill:#000;fill-rule:nonzero;"/><path d="M95.759,41.445c-2.151,-2.578 1.869,-7.257 4.391,-4.463c4.645,5.148 -2.237,7.041 -4.391,4.463M105.004,44.132c3.442,-6.553 -1.427,-10.381 -4.773,-13.523c-5.36,-5.039 -10.706,-7.217 -16.811,-0.241c-6.102,6.977 -2.226,15.068 3.356,19.061c5.584,3.994 14.782,1.255 18.228,-5.297" style="fill:#000;fill-rule:nonzero;"/></svg> diff --git a/themes/learn4/templates/partials/messages.html.twig b/themes/learn4/templates/partials/messages.html.twig new file mode 100644 index 00000000..662333d0 --- /dev/null +++ b/themes/learn4/templates/partials/messages.html.twig @@ -0,0 +1,17 @@ +{% set type_mapping = {'info':'success', 'error': 'error', 'warning': 'warning'} %} +{% set icon_mapping = {'info':'checkmark', 'error':'wrong', 'warning':'information'} %} + +{% if grav.messages.all %} + <div id="messages"> + {% for message in grav.messages.fetch %} + + {% set scope = message.scope|e %} + {% set type = type_mapping[scope] %} + {% set icon = icon_mapping[scope] %} + + <div class="toast toast-{{ type }} {{ scope }}"> + <i class="icon dripicons-{{ icon }}"></i> {{ message.message|raw }} + </div> + {% endfor %} + </div> +{% endif %} \ No newline at end of file diff --git a/themes/learn4/templates/partials/page.html.twig b/themes/learn4/templates/partials/page.html.twig new file mode 100644 index 00000000..641e1933 --- /dev/null +++ b/themes/learn4/templates/partials/page.html.twig @@ -0,0 +1,6 @@ +<div id="body-inner" class="highlightable"> + <h1>{{ page.title }}</h1> + <p> + {{ page.content|raw }} + </p> +</div> diff --git a/themes/learn4/templates/partials/sidebar.html.twig b/themes/learn4/templates/partials/sidebar.html.twig new file mode 100644 index 00000000..4887f7d7 --- /dev/null +++ b/themes/learn4/templates/partials/sidebar.html.twig @@ -0,0 +1,42 @@ +{% import 'macros/macros.html.twig' as macros %} + +<div class="learn-brand"> + <div id="header"> + <a id="logo" href="{{ theme_config.home_url ?: base_url_absolute }}">{% include 'partials/logo.html.twig' %}</a> + <div class="searchbox"> + <label for="search-by"><i class="fa fa-search"></i></label> + <input id="search-by" type="text" placeholder="{{ 'THEME_LEARN4_SEARCH_DOCUMENTATION'|t }}" + data-search-input="{{ base_url_relative }}/s/q"/> + <span data-search-clear><i class="fa fa-close"></i></span> + </div> + <div class="search-options columns"> + <div class="adv-search column col-8"><i class="fa fa-sliders"></i> <a href="{{ url('search') }}">Advanced</a></div> + {% include 'partials/versions.html.twig' %} + </div> + </div> +</div> +<div class="learn-nav" data-simplebar> + <div class="highlightable"> + {% if theme_config.top_level_version %} + {% for slug, ver in pages.children %} + {{ macros.version(ver) }} + <ul id="{{ slug }}" class="topics"> + {{ macros.loop(ver, '') }} + </ul> + {% endfor %} + {% else %} + <ul class="topics"> + {% if theme_config.root_page %} + {{ macros.loop(page.find(theme_config.root_page), '') }} + {% else %} + {{ macros.loop(pages, '') }} + {% endif %} + </ul> + {% endif %} + <hr /> + + <a class="side-tools padding" href="#" data-clear-history-toggle> + <i class="fa fa-fw fa-history"></i> {{ 'THEME_LEARN4_CLEAR_HISTORY'|t }} + </a><br/> + </div> +</div> diff --git a/themes/learn4/templates/partials/toc.html.twig b/themes/learn4/templates/partials/toc.html.twig new file mode 100644 index 00000000..c5687d57 --- /dev/null +++ b/themes/learn4/templates/partials/toc.html.twig @@ -0,0 +1,10 @@ +{% if config.get('plugins.page-toc.active') or attribute(page.header, 'page-toc').active %} + <div class="page-toc"> + {% set table_of_contents = toc(page.content) %} + {% if table_of_contents is not empty %} + <span class="toc-toggle"><i class="fa fa-angle-up"></i></span> + <h5>Quick Menu</h5> + {{ table_of_contents|raw }} + {% endif %} + </div> +{% endif %} \ No newline at end of file diff --git a/themes/learn4/templates/partials/topbar.html.twig b/themes/learn4/templates/partials/topbar.html.twig new file mode 100644 index 00000000..505b024f --- /dev/null +++ b/themes/learn4/templates/partials/topbar.html.twig @@ -0,0 +1,30 @@ +<div id="top-bar"> + {% if github_link_position == 'top' %} + <div id="top-github-link"> + {% include 'partials/github_link.html.twig' %} + </div> + {% endif %} + + {% if config.plugins.breadcrumbs.enabled %} + {% include 'partials/breadcrumbs.html.twig' %} + {% endif %} + + <div id="navigation"> + {% if theme_var('github.link') %} + {% include 'partials/github-link.html.twig' %} + {% endif %} + {% if not progress.isFirst(page.path) %} + <a class="nav-prev tooltip tooltip-bottom" data-tooltip="Previous Page [←]" href="{{ progress.nextSibling(page.path).url }}"> <i class="fa fa-angle-left"></i></a> + {% else %} + <span class="disabled"><i class="fa fa-angle-left"></i></span> + {% endif %} + {% if not progress.isLast(page.path) %} + <a class="nav-next tooltip tooltip-bottom" data-tooltip="Next Page [→]" href="{{ progress.prevSibling(page.path).url }}"><i class="fa fa-angle-right"></i></a> + {% else %} + <span class="disabled"><i class="fa fa-angle-right"></i></span> + {% endif %} + </div> + <div class="progress"></div> +</div> + + diff --git a/themes/learn4/templates/partials/versions.html.twig b/themes/learn4/templates/partials/versions.html.twig new file mode 100644 index 00000000..79fd4169 --- /dev/null +++ b/themes/learn4/templates/partials/versions.html.twig @@ -0,0 +1,18 @@ +<div class="version-chooser column col-4 text-right"> + <select id="switch-version"> + {% set langobj = grav['language'] %} + {% for key in langswitcher.languages %} + {% if key == langswitcher.current %} + {% set lang_url = page.url %} + {% set active = ' selected="selected"' %} + {% else %} + {% set lang_url = base_url_simple ~ langobj.getLanguageURLPrefix(key)~langswitcher.page_route ?: '/' %} + {% set active = '' %} + {% endif %} + <option value="{{ lang_url ~ uri.params }}"{{ active }}>v{{ (key / 10)|number_format(1) }}</option> + {% endfor %} + </select> +</div> +<script> +jQuery(document).on('change', '#switch-version', function() { window.location.href = this.value }); +</script> diff --git a/themes/learn4/templates/search.html.twig b/themes/learn4/templates/search.html.twig new file mode 100644 index 00000000..50ef211d --- /dev/null +++ b/themes/learn4/templates/search.html.twig @@ -0,0 +1,10 @@ +{% extends 'partials/base.html.twig' %} + +{% block content %} + {{ page.content|raw }} + + {% include 'partials/tntsearch.html.twig' with { in_page: true, placeholder: "Search the Grav documentation..." }%} +{% endblock %} + + + diff --git a/themes/learn4/thumbnail.jpg b/themes/learn4/thumbnail.jpg new file mode 100644 index 00000000..ce4e0ed3 Binary files /dev/null and b/themes/learn4/thumbnail.jpg differ diff --git a/themes/learn4/webpack.conf.js b/themes/learn4/webpack.conf.js new file mode 100644 index 00000000..09292077 --- /dev/null +++ b/themes/learn4/webpack.conf.js @@ -0,0 +1,64 @@ +var webpack = require('webpack'), + path = require('path'), + UglifyJsPlugin = require('uglifyjs-webpack-plugin'), + isProd = process.env.NODE_ENV === 'production' || process.env.NODE_ENV === 'production-wip'; + +module.exports = { + entry: { + learn4: './app/main.js' + }, + devtool: isProd ? false : 'eval-source-map', + target: 'web', + output: { + path: path.resolve(__dirname, 'js'), + filename: '[name].js', + chunkFilename: 'vendor.js' + }, + optimization: { + minimize: isProd, + minimizer: [ + new UglifyJsPlugin({ + uglifyOptions: { + compress: { + drop_console: true + }, + dead_code: true + } + }) + ], + splitChunks: { + cacheGroups: { + vendors: { + test: /[\\/]node_modules[\\/]/, + priority: 1, + name: 'vendor', + enforce: true, + chunks: 'all' + } + } + } + }, + plugins: [ + new webpack.ProvidePlugin({ + 'fetch': 'imports-loader?this=>global!exports-loader?global.fetch!whatwg-fetch' + }) + ], + externals: { + jquery: 'jQuery' + }, + module: { + rules: [ + { enforce: 'pre', test: /\.json$/, loader: 'json-loader' }, + { enforce: 'pre', test: /\.js$/, loader: 'eslint-loader', exclude: /node_modules/ }, + { test: /\.css$/, loader: 'style-loader!css-loader' }, + { + test: /\.js$/, + loader: 'babel-loader', + exclude: /node_modules/, + query: { + presets: ['es2015', 'stage-3'] + } + } + ] + } +}; diff --git a/themes/learn4/yarn.lock b/themes/learn4/yarn.lock new file mode 100644 index 00000000..184c80b2 --- /dev/null +++ b/themes/learn4/yarn.lock @@ -0,0 +1,6540 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz#2a02643368de80916162be70865c97774f3adbd9" + integrity sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g== + dependencies: + "@babel/highlight" "7.0.0-beta.44" + +"@babel/code-frame@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" + integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA== + dependencies: + "@babel/highlight" "^7.0.0" + +"@babel/generator@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0-beta.44.tgz#c7e67b9b5284afcf69b309b50d7d37f3e5033d42" + integrity sha512-5xVb7hlhjGcdkKpMXgicAVgx8syK5VJz193k0i/0sLP6DzE6lRrU1K3B/rFefgdo9LPGMAOOOAWW4jycj07ShQ== + dependencies: + "@babel/types" "7.0.0-beta.44" + jsesc "^2.5.1" + lodash "^4.2.0" + source-map "^0.5.0" + trim-right "^1.0.1" + +"@babel/helper-function-name@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz#e18552aaae2231100a6e485e03854bc3532d44dd" + integrity sha512-MHRG2qZMKMFaBavX0LWpfZ2e+hLloT++N7rfM3DYOMUOGCD8cVjqZpwiL8a0bOX3IYcQev1ruciT0gdFFRTxzg== + dependencies: + "@babel/helper-get-function-arity" "7.0.0-beta.44" + "@babel/template" "7.0.0-beta.44" + "@babel/types" "7.0.0-beta.44" + +"@babel/helper-get-function-arity@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz#d03ca6dd2b9f7b0b1e6b32c56c72836140db3a15" + integrity sha512-w0YjWVwrM2HwP6/H3sEgrSQdkCaxppqFeJtAnB23pRiJB5E/O9Yp7JAAeWBl+gGEgmBFinnTyOv2RN7rcSmMiw== + dependencies: + "@babel/types" "7.0.0-beta.44" + +"@babel/helper-split-export-declaration@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz#c0b351735e0fbcb3822c8ad8db4e583b05ebd9dc" + integrity sha512-aQ7QowtkgKKzPGf0j6u77kBMdUFVBKNHw2p/3HX/POt5/oz8ec5cs0GwlgM8Hz7ui5EwJnzyfRmkNF1Nx1N7aA== + dependencies: + "@babel/types" "7.0.0-beta.44" + +"@babel/highlight@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.44.tgz#18c94ce543916a80553edcdcf681890b200747d5" + integrity sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ== + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + +"@babel/highlight@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" + integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw== + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^4.0.0" + +"@babel/template@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.44.tgz#f8832f4fdcee5d59bf515e595fc5106c529b394f" + integrity sha512-w750Sloq0UNifLx1rUqwfbnC6uSUk0mfwwgGRfdLiaUzfAOiH0tHJE6ILQIUi3KYkjiCDTskoIsnfqZvWLBDng== + dependencies: + "@babel/code-frame" "7.0.0-beta.44" + "@babel/types" "7.0.0-beta.44" + babylon "7.0.0-beta.44" + lodash "^4.2.0" + +"@babel/traverse@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.44.tgz#a970a2c45477ad18017e2e465a0606feee0d2966" + integrity sha512-UHuDz8ukQkJCDASKHf+oDt3FVUzFd+QYfuBIsiNu/4+/ix6pP/C+uQZJ6K1oEfbCMv/IKWbgDEh7fcsnIE5AtA== + dependencies: + "@babel/code-frame" "7.0.0-beta.44" + "@babel/generator" "7.0.0-beta.44" + "@babel/helper-function-name" "7.0.0-beta.44" + "@babel/helper-split-export-declaration" "7.0.0-beta.44" + "@babel/types" "7.0.0-beta.44" + babylon "7.0.0-beta.44" + debug "^3.1.0" + globals "^11.1.0" + invariant "^2.2.0" + lodash "^4.2.0" + +"@babel/types@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.44.tgz#6b1b164591f77dec0a0342aca995f2d046b3a757" + integrity sha512-5eTV4WRmqbaFM3v9gHAIljEQJU4Ssc6fxL61JN+Oe2ga/BwyjzjamwkCVVAQjHGuAX8i0BWo42dshL8eO5KfLQ== + dependencies: + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^2.0.0" + +"@gulp-sourcemaps/identity-map@1.X": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@gulp-sourcemaps/identity-map/-/identity-map-1.0.1.tgz#cfa23bc5840f9104ce32a65e74db7e7a974bbee1" + dependencies: + acorn "^5.0.3" + css "^2.2.1" + normalize-path "^2.1.1" + source-map "^0.5.6" + through2 "^2.0.3" + +"@gulp-sourcemaps/map-sources@1.X": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz#890ae7c5d8c877f6d384860215ace9d7ec945bda" + dependencies: + normalize-path "^2.0.1" + through2 "^2.0.3" + +"@webassemblyjs/ast@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359" + integrity sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ== + dependencies: + "@webassemblyjs/helper-module-context" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/wast-parser" "1.8.5" + +"@webassemblyjs/floating-point-hex-parser@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721" + integrity sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ== + +"@webassemblyjs/helper-api-error@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7" + integrity sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA== + +"@webassemblyjs/helper-buffer@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204" + integrity sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q== + +"@webassemblyjs/helper-code-frame@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e" + integrity sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ== + dependencies: + "@webassemblyjs/wast-printer" "1.8.5" + +"@webassemblyjs/helper-fsm@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452" + integrity sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow== + +"@webassemblyjs/helper-module-context@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245" + integrity sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g== + dependencies: + "@webassemblyjs/ast" "1.8.5" + mamacro "^0.0.3" + +"@webassemblyjs/helper-wasm-bytecode@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61" + integrity sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ== + +"@webassemblyjs/helper-wasm-section@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf" + integrity sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + +"@webassemblyjs/ieee754@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e" + integrity sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10" + integrity sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc" + integrity sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw== + +"@webassemblyjs/wasm-edit@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a" + integrity sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/helper-wasm-section" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + "@webassemblyjs/wasm-opt" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + "@webassemblyjs/wast-printer" "1.8.5" + +"@webassemblyjs/wasm-gen@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc" + integrity sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/ieee754" "1.8.5" + "@webassemblyjs/leb128" "1.8.5" + "@webassemblyjs/utf8" "1.8.5" + +"@webassemblyjs/wasm-opt@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264" + integrity sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + +"@webassemblyjs/wasm-parser@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d" + integrity sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-api-error" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/ieee754" "1.8.5" + "@webassemblyjs/leb128" "1.8.5" + "@webassemblyjs/utf8" "1.8.5" + +"@webassemblyjs/wast-parser@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c" + integrity sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/floating-point-hex-parser" "1.8.5" + "@webassemblyjs/helper-api-error" "1.8.5" + "@webassemblyjs/helper-code-frame" "1.8.5" + "@webassemblyjs/helper-fsm" "1.8.5" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/wast-printer@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc" + integrity sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/wast-parser" "1.8.5" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + +acorn-dynamic-import@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948" + integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw== + +acorn-jsx@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" + integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg== + +acorn@5.X, acorn@^5.0.3: + version "5.5.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9" + +acorn@^6.0.5, acorn@^6.0.7: + version "6.1.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" + integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA== + +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== + +ajv-keywords@^3.1.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.0.tgz#4b831e7b531415a7cc518cd404e73f6193c6349d" + integrity sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw== + +ajv@^5.1.0: + version "5.5.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + +ajv@^6.1.0, ajv@^6.9.1: + version "6.10.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" + integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== + dependencies: + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + +ansi-colors@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-1.1.0.tgz#6374b4dd5d4718ff3ce27a671a3b1cad077132a9" + dependencies: + ansi-wrap "^0.1.0" + +ansi-escapes@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== + +ansi-gray@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" + dependencies: + ansi-wrap "0.1.0" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + dependencies: + color-convert "^1.9.0" + +ansi-wrap@0.1.0, ansi-wrap@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +append-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/append-buffer/-/append-buffer-1.0.2.tgz#d8220cf466081525efea50614f3de6514dfa58f1" + integrity sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE= + dependencies: + buffer-equal "^1.0.0" + +aproba@^1.0.3, aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + +archy@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + +are-we-there-yet@~1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + +arr-filter@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/arr-filter/-/arr-filter-1.1.2.tgz#43fdddd091e8ef11aa4c45d9cdc18e2dff1711ee" + integrity sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4= + dependencies: + make-iterator "^1.0.0" + +arr-flatten@^1.0.1, arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-map@^2.0.0, arr-map@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/arr-map/-/arr-map-2.0.2.tgz#3a77345ffc1cf35e2a91825601f9e58f2e24cac4" + integrity sha1-Onc0X/wc814qkYJWAfnljy4kysQ= + dependencies: + make-iterator "^1.0.0" + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + +array-differ@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" + +array-each@^1.0.0, array-each@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f" + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + +array-initial@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/array-initial/-/array-initial-1.1.0.tgz#2fa74b26739371c3947bd7a7adc73be334b3d795" + integrity sha1-L6dLJnOTccOUe9enrcc74zSz15U= + dependencies: + array-slice "^1.0.0" + is-number "^4.0.0" + +array-last@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/array-last/-/array-last-1.3.0.tgz#7aa77073fec565ddab2493f5f88185f404a9d336" + integrity sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg== + dependencies: + is-number "^4.0.0" + +array-slice@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.1.0.tgz#e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4" + +array-sort@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-sort/-/array-sort-1.0.0.tgz#e4c05356453f56f53512a7d1d6123f2c54c0a88a" + integrity sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg== + dependencies: + default-compare "^1.0.0" + get-value "^2.0.6" + kind-of "^5.0.2" + +array-uniq@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + +asn1.js@^4.0.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +asn1@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + +assert-plus@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" + +assert@^1.1.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" + integrity sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE= + dependencies: + util "0.10.3" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + +async-done@^1.2.0, async-done@^1.2.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/async-done/-/async-done-1.3.1.tgz#14b7b73667b864c8f02b5b253fc9c6eddb777f3e" + integrity sha512-R1BaUeJ4PMoLNJuk+0tLJgjmEqVsdN118+Z8O+alhnQDQgy0kmD5Mqi0DNEmMx2LM0Ed5yekKu+ZXYvIHceicg== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.2" + process-nextick-args "^1.0.7" + stream-exhaust "^1.0.1" + +async-each@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + integrity sha1-GdOGodntxufByF04iu28xW0zYC0= + +async-each@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.2.tgz#8b8a7ca2a658f927e9f307d6d1a42f4199f0f735" + integrity sha512-6xrbvN0MOBKSJDdonmSSz2OwFSgxRaVtBDes26mj9KIGtDo+g9xosFRSC+i1gQh2oAN/tQ62AI/pGZGQjVOiRg== + +async-foreach@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" + +async-settle@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-settle/-/async-settle-1.0.0.tgz#1d0a914bb02575bec8a8f3a74e5080f72b2c0c6b" + integrity sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs= + dependencies: + async-done "^1.2.2" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + +atob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.1.tgz#ae2d5a729477f289d60dd7f96a6314a22dd6c22a" + +autoprefixer@^9.1.3: + version "9.5.0" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.5.0.tgz#7e51d0355c11596e6cf9a0afc9a44e86d1596c70" + integrity sha512-hMKcyHsZn5+qL6AUeP3c8OyuteZ4VaUlg+fWbyl8z7PqsKHF/Bf8/px3K6AT8aMzDkBo8Bc11245MM+itDBOxQ== + dependencies: + browserslist "^4.4.2" + caniuse-lite "^1.0.30000947" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^7.0.14" + postcss-value-parser "^3.3.1" + +aws-sign2@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + +aws4@^1.2.1, aws4@^1.6.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.7.0.tgz#d4d0e9b9dbfca77bf08eeb0a8a471550fe39e289" + +babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-core@^6.26.0, babel-core@^6.26.3: + version "6.26.3" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" + integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== + dependencies: + babel-code-frame "^6.26.0" + babel-generator "^6.26.0" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + convert-source-map "^1.5.1" + debug "^2.6.9" + json5 "^0.5.1" + lodash "^4.17.4" + minimatch "^3.0.4" + path-is-absolute "^1.0.1" + private "^0.1.8" + slash "^1.0.0" + source-map "^0.5.7" + +babel-eslint@^8.2.6: + version "8.2.6" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.6.tgz#6270d0c73205628067c0f7ae1693a9e797acefd9" + integrity sha512-aCdHjhzcILdP8c9lej7hvXKvQieyRt20SF102SIGyY4cUIiw6UaAtK4j2o3dXX74jEmy0TJ0CEhv4fTIM3SzcA== + dependencies: + "@babel/code-frame" "7.0.0-beta.44" + "@babel/traverse" "7.0.0-beta.44" + "@babel/types" "7.0.0-beta.44" + babylon "7.0.0-beta.44" + eslint-scope "3.7.1" + eslint-visitor-keys "^1.0.0" + +babel-generator@^6.26.0: + version "6.26.1" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" + integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA== + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.17.4" + source-map "^0.5.7" + trim-right "^1.0.1" + +babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" + integrity sha1-zORReto1b0IgvK6KAsKzRvmlZmQ= + dependencies: + babel-helper-explode-assignable-expression "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-call-delegate@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" + integrity sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340= + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-define-map@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" + integrity sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8= + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-explode-assignable-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" + integrity sha1-8luCz33BBDPFX3BZLVdGQArCLKo= + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" + integrity sha1-00dbjAPtmCQqJbSDUasYOZ01gKk= + dependencies: + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-get-function-arity@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" + integrity sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-hoist-variables@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" + integrity sha1-HssnaJydJVE+rbyZFKc/VAi+enY= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-optimise-call-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" + integrity sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-regex@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" + integrity sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI= + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-remap-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" + integrity sha1-XsWBgnrXI/7N04HxySg5BnbkVRs= + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-replace-supers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" + integrity sha1-v22/5Dk40XNpohPKiov3S2qQqxo= + dependencies: + babel-helper-optimise-call-expression "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI= + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-loader@^7.1.5: + version "7.1.5" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.5.tgz#e3ee0cd7394aa557e013b02d3e492bfd07aa6d68" + integrity sha512-iCHfbieL5d1LfOQeeVJEUyD9rTwBcP/fcEbRCfempxTDuqrKpu0AZjLAQHEQa3Yqyj9ORKe2iHfoj4rHLf7xpw== + dependencies: + find-cache-dir "^1.0.0" + loader-utils "^1.0.2" + mkdirp "^0.5.1" + +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-check-es2015-constants@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" + integrity sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-syntax-async-functions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" + integrity sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU= + +babel-plugin-syntax-async-generators@^6.5.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" + integrity sha1-a8lj67FuzLrmuStZbrfzXDQqi5o= + +babel-plugin-syntax-exponentiation-operator@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" + integrity sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4= + +babel-plugin-syntax-object-rest-spread@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U= + +babel-plugin-syntax-trailing-function-commas@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" + integrity sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM= + +babel-plugin-transform-async-generator-functions@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db" + integrity sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds= + dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-generators "^6.5.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" + integrity sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E= + dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-functions "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-arrow-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" + integrity sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" + integrity sha1-u8UbSflk1wy42OC5ToICRs46YUE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoping@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" + integrity sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8= + dependencies: + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-plugin-transform-es2015-classes@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" + integrity sha1-WkxYpQyclGHlZLSyo7+ryXolhNs= + dependencies: + babel-helper-define-map "^6.24.1" + babel-helper-function-name "^6.24.1" + babel-helper-optimise-call-expression "^6.24.1" + babel-helper-replace-supers "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-computed-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" + integrity sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM= + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-destructuring@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" + integrity sha1-mXux8auWf2gtKwh2/jWNYOdlxW0= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-duplicate-keys@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" + integrity sha1-c+s9MQypaePvnskcU3QabxV2Qj4= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-for-of@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" + integrity sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" + integrity sha1-g0yJhTvDaxrw86TF26qU/Y6sqos= + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" + integrity sha1-T1SgLWzWbPkVKAAZox0xklN3yi4= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-modules-amd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" + integrity sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ= + dependencies: + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-commonjs@^6.24.1: + version "6.26.2" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" + integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q== + dependencies: + babel-plugin-transform-strict-mode "^6.24.1" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-types "^6.26.0" + +babel-plugin-transform-es2015-modules-systemjs@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" + integrity sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM= + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-umd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" + integrity sha1-rJl+YoXNGO1hdq22B9YCNErThGg= + dependencies: + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-object-super@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" + integrity sha1-JM72muIcuDp/hgPa0CH1cusnj40= + dependencies: + babel-helper-replace-supers "^6.24.1" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-parameters@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" + integrity sha1-V6w1GrScrxSpfNE7CfZv3wpiXys= + dependencies: + babel-helper-call-delegate "^6.24.1" + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-shorthand-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" + integrity sha1-JPh11nIch2YbvZmkYi5R8U3jiqA= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-spread@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" + integrity sha1-1taKmfia7cRTbIGlQujdnxdG+NE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-sticky-regex@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" + integrity sha1-AMHNsaynERLN8M9hJsLta0V8zbw= + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-template-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" + integrity sha1-qEs0UPfp+PH2g51taH2oS7EjbY0= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-typeof-symbol@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" + integrity sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-unicode-regex@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" + integrity sha1-04sS9C6nMj9yk4fxinxa4frrNek= + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + regexpu-core "^2.0.0" + +babel-plugin-transform-exponentiation-operator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" + integrity sha1-KrDJx/MJj6SJB3cruBP+QejeOg4= + dependencies: + babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" + babel-plugin-syntax-exponentiation-operator "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-object-rest-spread@^6.22.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" + integrity sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY= + dependencies: + babel-plugin-syntax-object-rest-spread "^6.8.0" + babel-runtime "^6.26.0" + +babel-plugin-transform-regenerator@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" + integrity sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8= + dependencies: + regenerator-transform "^0.10.0" + +babel-plugin-transform-strict-mode@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-polyfill@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" + integrity sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM= + dependencies: + babel-runtime "^6.26.0" + core-js "^2.5.0" + regenerator-runtime "^0.10.5" + +babel-preset-es2015@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939" + integrity sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk= + dependencies: + babel-plugin-check-es2015-constants "^6.22.0" + babel-plugin-transform-es2015-arrow-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoping "^6.24.1" + babel-plugin-transform-es2015-classes "^6.24.1" + babel-plugin-transform-es2015-computed-properties "^6.24.1" + babel-plugin-transform-es2015-destructuring "^6.22.0" + babel-plugin-transform-es2015-duplicate-keys "^6.24.1" + babel-plugin-transform-es2015-for-of "^6.22.0" + babel-plugin-transform-es2015-function-name "^6.24.1" + babel-plugin-transform-es2015-literals "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-plugin-transform-es2015-modules-systemjs "^6.24.1" + babel-plugin-transform-es2015-modules-umd "^6.24.1" + babel-plugin-transform-es2015-object-super "^6.24.1" + babel-plugin-transform-es2015-parameters "^6.24.1" + babel-plugin-transform-es2015-shorthand-properties "^6.24.1" + babel-plugin-transform-es2015-spread "^6.22.0" + babel-plugin-transform-es2015-sticky-regex "^6.24.1" + babel-plugin-transform-es2015-template-literals "^6.22.0" + babel-plugin-transform-es2015-typeof-symbol "^6.22.0" + babel-plugin-transform-es2015-unicode-regex "^6.24.1" + babel-plugin-transform-regenerator "^6.24.1" + +babel-preset-stage-3@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz#836ada0a9e7a7fa37cb138fb9326f87934a48395" + integrity sha1-g2raCp56f6N8sTj7kyb4eTSkg5U= + dependencies: + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-async-generator-functions "^6.24.1" + babel-plugin-transform-async-to-generator "^6.24.1" + babel-plugin-transform-exponentiation-operator "^6.24.1" + babel-plugin-transform-object-rest-spread "^6.22.0" + +babel-register@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + integrity sha1-btAhFz4vy0htestFxgCahW9kcHE= + dependencies: + babel-core "^6.26.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" + home-or-tmp "^2.0.0" + lodash "^4.17.4" + mkdirp "^0.5.1" + source-map-support "^0.4.15" + +babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babel-template@^6.24.1, babel-template@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= + dependencies: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + +babel-traverse@^6.24.1, babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= + dependencies: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + +babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babylon@7.0.0-beta.44: + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.44.tgz#89159e15e6e30c5096e22d738d8c0af8a0e8ca1d" + integrity sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g== + +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== + +bach@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/bach/-/bach-1.2.0.tgz#4b3ce96bf27134f79a1b414a51c14e34c3bd9880" + integrity sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA= + dependencies: + arr-filter "^1.1.1" + arr-flatten "^1.0.1" + arr-map "^2.0.0" + array-each "^1.0.0" + array-initial "^1.0.0" + array-last "^1.1.1" + async-done "^1.2.2" + async-settle "^1.0.0" + now-and-later "^2.0.0" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + +base64-js@^1.0.2: + version "1.3.0" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" + integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + dependencies: + 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" + +bcrypt-pbkdf@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" + dependencies: + tweetnacl "^0.14.3" + +beeper@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^1.0.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.12.0.tgz#c2d780f53d45bba8317a8902d4ceeaf3a6385b14" + integrity sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg== + +block-stream@*: + version "0.0.9" + resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + dependencies: + inherits "~2.0.0" + +bluebird@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7" + integrity sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw== + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: + version "4.11.8" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== + +boom@2.x.x: + version "2.10.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" + dependencies: + hoek "2.x.x" + +boom@4.x.x: + version "4.3.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" + dependencies: + hoek "4.x.x" + +boom@5.x.x: + version "5.2.0" + resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" + dependencies: + hoek "4.x.x" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.0, braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + dependencies: + 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" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + 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@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= + dependencies: + 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@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +browserslist@^4.4.2: + version "4.5.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.5.3.tgz#969495c410314bc89f14e748505e58be968080f1" + integrity sha512-Tx/Jtrmh6vFg24AelzLwCaCq1IUJiMDM1x/LPzqbmbktF8Zo7F9ONUpOWsFK6TtdON95mSMaQUWqi0ilc8xM6g== + dependencies: + caniuse-lite "^1.0.30000955" + electron-to-chromium "^1.3.122" + node-releases "^1.1.12" + +buffer-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe" + integrity sha1-WWFrSYME1Var1GaWayLu2j7KX74= + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^4.3.0: + version "4.9.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" + integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg= + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +builtin-modules@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + +cacache@^11.0.2, cacache@^11.2.0: + version "11.3.2" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.2.tgz#2d81e308e3d258ca38125b676b98b2ac9ce69bfa" + integrity sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg== + dependencies: + bluebird "^3.5.3" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.3" + graceful-fs "^4.1.15" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.2" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + dependencies: + 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" + +callsites@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.0.0.tgz#fb7eb569b72ad7a45812f93fd9430a3e410b3dd3" + integrity sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw== + +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + +camelcase@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" + +camelcase@^5.0.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.0.tgz#0a110882cbeba41f72f99fcf918f4a0a92a13ebf" + integrity sha512-Y05ICatFYPAfykDIB7VdwSJ0LUl1yq/BwO2OpyGGLjiRe1fgzTwVypPiWnzkGFOVFHXrCXUNBl86bpjBhZWSJg== + +caniuse-lite@^1.0.30000947, caniuse-lite@^1.0.30000955: + version "1.0.30000955" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000955.tgz#360fdb9a1e41d6dd996130411334e44a39e4446d" + integrity sha512-6AwmIKgqCYfDWWadRkAuZSHMQP4Mmy96xAXEdRBlN/luQhlRYOKgwOlZ9plpCOsVbBuqbTmGqDK3JUM/nlr8CA== + +caseless@~0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + +chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + 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" + +chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^2.3.0, chalk@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +chokidar@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26" + integrity sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.0" + braces "^2.3.0" + glob-parent "^3.1.0" + inherits "^2.0.1" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + lodash.debounce "^4.0.8" + normalize-path "^2.1.1" + path-is-absolute "^1.0.0" + readdirp "^2.0.0" + upath "^1.0.5" + optionalDependencies: + fsevents "^1.2.2" + +chokidar@^2.0.2: + version "2.1.5" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.5.tgz#0ae8434d962281a5f56c72869e79cb6d9d86ad4d" + integrity sha512-i0TprVWp+Kj4WRPtInjexJ8Q+BqTE909VpH8xVhXrJkoc5QC8VO9TryGOqTr+2hljzc1sC62t22h5tZePodM/A== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + 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" + optionalDependencies: + fsevents "^1.2.7" + +chownr@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" + integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g== + +chrome-trace-event@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz#45a91bd2c20c9411f0963b5aaeb9a1b95e09cc48" + integrity sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A== + dependencies: + tslib "^1.9.0" + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +clean-css@4.1.11: + version "4.1.11" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.11.tgz#2ecdf145aba38f54740f26cefd0ff3e03e125d6a" + dependencies: + source-map "0.5.x" + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= + dependencies: + restore-cursor "^2.0.0" + +cli-width@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= + +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + +cliui@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi "^2.0.0" + +clone-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" + integrity sha1-4+JbIHrE5wGvch4staFnksrD3Fg= + +clone-stats@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" + +clone-stats@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" + integrity sha1-s3gt/4u1R04Yuba/D9/ngvh3doA= + +clone@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + +clone@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= + +cloneable-readable@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.2.tgz#d591dee4a8f8bc15da43ce97dceeba13d43e2a65" + integrity sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg== + dependencies: + inherits "^2.0.1" + process-nextick-args "^2.0.0" + readable-stream "^2.3.5" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + +collection-map@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-map/-/collection-map-1.0.0.tgz#aea0f06f8d26c780c2b75494385544b2255af18c" + integrity sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw= + dependencies: + arr-map "^2.0.2" + for-own "^1.0.0" + make-iterator "^1.0.0" + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" + dependencies: + color-name "^1.1.1" + +color-name@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + +color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + +combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" + dependencies: + delayed-stream "~1.0.0" + +commander@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.0.0.tgz#d1b86f901f8b64bd941bdeadaf924530393be928" + +commander@^2.19.0, commander@~2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" + integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== + +commander@^2.9.0: + version "2.15.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +component-emitter@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +concat-stream@^1.5.0, concat-stream@^1.6.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +console-browserify@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" + integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA= + dependencies: + date-now "^0.1.4" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + +convert-source-map@1.X: + version "1.5.1" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" + +convert-source-map@^1.5.0, convert-source-map@^1.5.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" + integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== + dependencies: + safe-buffer "~5.1.1" + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + +copy-props@^2.0.1: + version "2.0.4" + resolved "https://registry.yarnpkg.com/copy-props/-/copy-props-2.0.4.tgz#93bb1cadfafd31da5bb8a9d4b41f471ec3a72dfe" + integrity sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A== + dependencies: + each-props "^1.3.0" + is-plain-object "^2.0.1" + +core-js@^2.4.0, core-js@^2.5.0: + version "2.6.5" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.5.tgz#44bc8d249e7fb2ff5d00e0341a7ffb94fbf67895" + integrity sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A== + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +create-ecdh@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" + integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + +create-hash@^1.1.0, create-hash@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + 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@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + 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@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" + dependencies: + lru-cache "^4.0.1" + which "^1.2.9" + +cross-spawn@^6.0.0, cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +cryptiles@2.x.x: + version "2.0.5" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" + dependencies: + boom "2.x.x" + +cryptiles@3.x.x: + version "3.1.2" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" + dependencies: + boom "5.x.x" + +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + 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-loader@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-1.0.1.tgz#6885bb5233b35ec47b006057da01cc640b6b79fe" + integrity sha512-+ZHAZm/yqvJ2kDtPne3uX0C+Vr3Zn5jFn2N4HywtS5ujwvsVkyg0VArEXpl3BgczDA8anieki1FIzhchX4yrDw== + dependencies: + babel-code-frame "^6.26.0" + css-selector-tokenizer "^0.7.0" + icss-utils "^2.1.0" + loader-utils "^1.0.2" + lodash "^4.17.11" + postcss "^6.0.23" + postcss-modules-extract-imports "^1.2.0" + postcss-modules-local-by-default "^1.2.0" + postcss-modules-scope "^1.1.0" + postcss-modules-values "^1.3.0" + postcss-value-parser "^3.3.0" + source-list-map "^2.0.0" + +css-selector-tokenizer@^0.7.0: + version "0.7.1" + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz#a177271a8bca5019172f4f891fc6eed9cbf68d5d" + integrity sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA== + dependencies: + cssesc "^0.1.0" + fastparse "^1.1.1" + regexpu-core "^1.0.0" + +css@2.X, css@^2.2.1: + version "2.2.3" + resolved "https://registry.yarnpkg.com/css/-/css-2.2.3.tgz#f861f4ba61e79bedc962aa548e5780fd95cbc6be" + dependencies: + inherits "^2.0.1" + source-map "^0.1.38" + source-map-resolve "^0.5.1" + urix "^0.1.0" + +csscomb-core@3.0.0-3.1: + version "3.0.0-3.1" + resolved "https://registry.yarnpkg.com/csscomb-core/-/csscomb-core-3.0.0-3.1.tgz#b411c8d7cfe0df3f2fe1df84d1bd64a6f0046c68" + dependencies: + gonzales-pe "3.0.0-28" + minimatch "0.2.12" + vow "0.4.4" + vow-fs "0.3.2" + +csscomb@^3.1.7: + version "3.1.8" + resolved "https://registry.yarnpkg.com/csscomb/-/csscomb-3.1.8.tgz#a8a738884f409baf35ec9461afc52e1c75bd23a2" + dependencies: + commander "2.0.0" + csscomb-core "3.0.0-3.1" + gonzales-pe "3.0.0-28" + vow "0.4.4" + +cssesc@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" + integrity sha1-yBSQPkViM3GgR3tAEJqq++6t27Q= + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + dependencies: + array-find-index "^1.0.1" + +cyclist@~0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" + integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA= + +d@1: + version "1.0.0" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" + dependencies: + es5-ext "^0.10.9" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + dependencies: + assert-plus "^1.0.0" + +date-now@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" + integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs= + +dateformat@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062" + +debug-fabulous@1.X: + version "1.1.0" + resolved "https://registry.yarnpkg.com/debug-fabulous/-/debug-fabulous-1.1.0.tgz#af8a08632465224ef4174a9f06308c3c2a1ebc8e" + dependencies: + debug "3.X" + memoizee "0.4.X" + object-assign "4.X" + +debug@3.X: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + dependencies: + ms "2.0.0" + +debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.1.0: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debug@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +default-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/default-compare/-/default-compare-1.0.0.tgz#cb61131844ad84d84788fb68fd01681ca7781a2f" + integrity sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ== + dependencies: + kind-of "^5.0.2" + +default-resolution@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/default-resolution/-/default-resolution-2.0.0.tgz#bcb82baa72ad79b426a76732f1a81ad6df26d684" + integrity sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ= + +define-properties@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + +des.js@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" + integrity sha1-wHTS4qpqipoH29YfmhXCzYPsjsw= + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +detect-file@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" + +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg= + dependencies: + repeating "^2.0.0" + +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= + +detect-newline@2.X: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + +duplexer2@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" + dependencies: + readable-stream "~1.1.9" + +duplexify@^3.4.2: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +duplexify@^3.6.0: + version "3.6.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.6.1.tgz#b1a7a29c4abfd639585efaecce80d666b1e34125" + integrity sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +each-props@^1.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/each-props/-/each-props-1.3.2.tgz#ea45a414d16dd5cfa419b1a81720d5ca06892333" + integrity sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA== + dependencies: + is-plain-object "^2.0.1" + object.defaults "^1.1.0" + +ecc-jsbn@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + dependencies: + jsbn "~0.1.0" + +electron-to-chromium@^1.3.122: + version "1.3.122" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.122.tgz#b32a0805f48557bd3c3b8104eadc7fa511b14a9a" + integrity sha512-3RKoIyCN4DhP2dsmleuFvpJAIDOseWH88wFYBzb22CSwoFDSWRc4UAMfrtc9h8nBdJjTNIN3rogChgOy6eFInw== + +elliptic@^6.0.0: + version "6.4.1" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a" + integrity sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ== + dependencies: + 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" + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" + integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" + integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.4.0" + tapable "^1.0.0" + +errno@^0.1.3, errno@~0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== + dependencies: + prr "~1.0.1" + +error-ex@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" + dependencies: + is-arrayish "^0.2.1" + +es5-ext@^0.10.14, es5-ext@^0.10.30, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14, es5-ext@~0.10.2: + version "0.10.42" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.42.tgz#8c07dd33af04d5dcd1310b5cef13bea63a89ba8d" + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.1" + next-tick "1" + +es6-iterator@^2.0.1, es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-symbol@^3.1.1, es6-symbol@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" + dependencies: + d "1" + es5-ext "~0.10.14" + +es6-weak-map@^2.0.1, es6-weak-map@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" + dependencies: + d "1" + es5-ext "^0.10.14" + es6-iterator "^2.0.1" + es6-symbol "^3.1.1" + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +eslint-loader@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-2.1.2.tgz#453542a1230d6ffac90e4e7cb9cadba9d851be68" + integrity sha512-rA9XiXEOilLYPOIInvVH5S/hYfyTPyxag6DZhoQOduM+3TkghAEQ3VcFO8VnX4J4qg/UIBzp72aOf/xvYmpmsg== + dependencies: + loader-fs-cache "^1.0.0" + loader-utils "^1.0.2" + object-assign "^4.0.1" + object-hash "^1.1.4" + rimraf "^2.6.1" + +eslint-scope@3.7.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" + integrity sha1-PWPD7f2gLgbgGkUq2IyqzHzctug= + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^4.0.0, eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-utils@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512" + integrity sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q== + +eslint-visitor-keys@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" + integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ== + +eslint@^5.2.0: + version "5.16.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea" + integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.9.1" + chalk "^2.1.0" + cross-spawn "^6.0.5" + debug "^4.0.1" + doctrine "^3.0.0" + eslint-scope "^4.0.3" + eslint-utils "^1.3.1" + eslint-visitor-keys "^1.0.0" + espree "^5.0.1" + esquery "^1.0.1" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob "^7.1.2" + globals "^11.7.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + inquirer "^6.2.2" + js-yaml "^3.13.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.11" + minimatch "^3.0.4" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.2" + progress "^2.0.0" + regexpp "^2.0.1" + semver "^5.5.1" + strip-ansi "^4.0.0" + strip-json-comments "^2.0.1" + table "^5.2.3" + text-table "^0.2.0" + +espree@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" + integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A== + dependencies: + acorn "^6.0.7" + acorn-jsx "^5.0.0" + eslint-visitor-keys "^1.0.0" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" + integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== + dependencies: + estraverse "^4.0.0" + +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== + dependencies: + estraverse "^4.1.0" + +estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= + +esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= + +event-emitter@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + dependencies: + d "1" + es5-ext "~0.10.14" + +events@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" + integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA== + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + dependencies: + 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" + +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + dependencies: + homedir-polyfill "^1.0.1" + +exports-loader@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/exports-loader/-/exports-loader-0.7.0.tgz#84881c784dea6036b8e1cd1dac3da9b6409e21a5" + integrity sha512-RKwCrO4A6IiKm0pG3c9V46JxIHcDplwwGJn6+JJ1RcVnh/WSGJa0xkmk5cRVtgOPzCAtTMGj2F7nluh9L0vpSA== + dependencies: + loader-utils "^1.1.0" + source-map "0.5.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@^3.0.0, extend@~3.0.0, extend@~3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" + +external-editor@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27" + integrity sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + dependencies: + 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" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + +fancy-log@^1.1.0, fancy-log@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.2.tgz#f41125e3d84f2e7d89a43d06d958c8f78be16be1" + dependencies: + ansi-gray "^0.1.1" + color-support "^1.1.3" + time-stamp "^1.0.0" + +fast-deep-equal@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" + +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= + +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fastparse@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" + integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== + +figgy-pudding@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" + integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== + dependencies: + flat-cache "^2.0.1" + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +find-cache-dir@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" + integrity sha1-yN765XyKUqinhPnjHFfHQumToLk= + dependencies: + commondir "^1.0.1" + mkdirp "^0.5.1" + pkg-dir "^1.0.0" + +find-cache-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" + integrity sha1-kojj6ePMN0hxfTnq3hfPcfww7m8= + dependencies: + commondir "^1.0.1" + make-dir "^1.0.0" + pkg-dir "^2.0.0" + +find-cache-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +findup-sync@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc" + dependencies: + detect-file "^1.0.0" + is-glob "^3.1.0" + micromatch "^3.0.4" + resolve-dir "^1.0.1" + +fined@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fined/-/fined-1.1.0.tgz#b37dc844b76a2f5e7081e884f7c0ae344f153476" + dependencies: + expand-tilde "^2.0.2" + is-plain-object "^2.0.3" + object.defaults "^1.1.0" + object.pick "^1.2.0" + parse-filepath "^1.0.1" + +flagged-respawn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-1.0.0.tgz#4e79ae9b2eb38bf86b3bb56bf3e0a56aa5fcabd7" + +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== + dependencies: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + +flatted@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.0.tgz#55122b6536ea496b4b44893ee2608141d10d9916" + integrity sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg== + +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + +flush-write-stream@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd" + integrity sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw== + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.4" + +for-in@^1.0.1, for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + +for-own@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" + dependencies: + for-in "^1.0.1" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + +form-data@~2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + +form-data@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" + dependencies: + asynckit "^0.4.0" + combined-stream "1.0.6" + mime-types "^2.1.12" + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + dependencies: + map-cache "^0.2.2" + +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-minipass@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" + integrity sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ== + dependencies: + minipass "^2.2.1" + +fs-mkdirp-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz#0b7815fc3201c6a69e14db98ce098c16935259eb" + integrity sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes= + dependencies: + graceful-fs "^4.1.11" + through2 "^2.0.3" + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +fsevents@^1.2.2: + version "1.2.4" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" + integrity sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg== + dependencies: + nan "^2.9.2" + node-pre-gyp "^0.10.0" + +fsevents@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.7.tgz#4851b664a3783e52003b3c66eb0eee1074933aa4" + integrity sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw== + dependencies: + nan "^2.9.2" + node-pre-gyp "^0.10.0" + +fstream@^1.0.0, fstream@^1.0.2: + version "1.0.11" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + dependencies: + 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" + +gaze@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.2.tgz#847224677adb8870d679257ed3388fdb61e40105" + dependencies: + globule "^1.0.0" + +generate-function@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" + +generate-object-property@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" + dependencies: + is-property "^1.0.0" + +get-caller-file@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + dependencies: + assert-plus "^1.0.0" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-stream@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-6.1.0.tgz#7045c99413b3eb94888d83ab46d0b404cc7bdde4" + integrity sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ= + dependencies: + extend "^3.0.0" + glob "^7.1.1" + glob-parent "^3.1.0" + is-negated-glob "^1.0.0" + ordered-read-streams "^1.0.0" + pumpify "^1.3.5" + readable-stream "^2.1.5" + remove-trailing-separator "^1.0.1" + to-absolute-glob "^2.0.0" + unique-stream "^2.0.2" + +glob-watcher@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/glob-watcher/-/glob-watcher-5.0.3.tgz#88a8abf1c4d131eb93928994bc4a593c2e5dd626" + integrity sha512-8tWsULNEPHKQ2MR4zXuzSmqbdyV5PtwwCaWSGQ1WwHsJ07ilNeN1JB8ntxhckbnpSHaf9dXFUHzIWvm1I13dsg== + dependencies: + anymatch "^2.0.0" + async-done "^1.2.0" + chokidar "^2.0.0" + is-negated-glob "^1.0.0" + just-debounce "^1.0.0" + object.defaults "^1.1.0" + +glob@3.2.8: + version "3.2.8" + resolved "https://registry.yarnpkg.com/glob/-/glob-3.2.8.tgz#5506f4311721bcc618c7d8dba144188750307073" + dependencies: + inherits "2" + minimatch "~0.2.11" + +glob@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@~7.1.1: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + dependencies: + 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@^7.1.1, glob@^7.1.2, glob@^7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" + integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== + dependencies: + 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" + +global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + dependencies: + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" + +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" + +globals@^11.1.0, globals@^11.7.0: + version "11.11.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e" + integrity sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw== + +globals@^9.18.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== + +globule@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.0.tgz#1dc49c6822dd9e8a2fa00ba2a295006e8664bd09" + dependencies: + glob "~7.1.1" + lodash "~4.17.4" + minimatch "~3.0.2" + +glogg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.1.tgz#dcf758e44789cc3f3d32c1f3562a3676e6a34810" + dependencies: + sparkles "^1.0.0" + +gonzales-pe@3.0.0-28: + version "3.0.0-28" + resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-3.0.0-28.tgz#dd50b41dd15b682a28c40e5f0ff2007901ac62bd" + +graceful-fs@4.X, graceful-fs@^4.1.2: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + +graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.6: + version "4.1.15" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" + integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== + +gulp-autoprefixer@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/gulp-autoprefixer/-/gulp-autoprefixer-6.0.0.tgz#7034ef12c24a92a5b20158d63623ebbd900faed8" + integrity sha512-MyLymXKVGTVBx/okQSBqmdhwhyqi3igBmZBwgpZp0GRbY1LY8VctOTLzwkQ18bZKJkSDnOKR5u32TMY9wSYdqQ== + dependencies: + autoprefixer "^9.1.3" + fancy-log "^1.3.2" + plugin-error "^1.0.1" + postcss "^7.0.2" + through2 "^2.0.0" + vinyl-sourcemaps-apply "^0.2.0" + +gulp-clean-css@^3.9.4: + version "3.9.4" + resolved "https://registry.yarnpkg.com/gulp-clean-css/-/gulp-clean-css-3.9.4.tgz#c6d3f8bb7a600fbe661962a72348a330954d343b" + dependencies: + clean-css "4.1.11" + plugin-error "1.0.1" + through2 "2.0.3" + vinyl-sourcemaps-apply "0.2.1" + +gulp-cli@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/gulp-cli/-/gulp-cli-2.0.1.tgz#7847e220cb3662f2be8a6d572bf14e17be5a994b" + integrity sha512-RxujJJdN8/O6IW2nPugl7YazhmrIEjmiVfPKrWt68r71UCaLKS71Hp0gpKT+F6qOUFtr7KqtifDKaAJPRVvMYQ== + dependencies: + ansi-colors "^1.0.1" + archy "^1.0.0" + array-sort "^1.0.0" + color-support "^1.1.3" + concat-stream "^1.6.0" + copy-props "^2.0.1" + fancy-log "^1.3.2" + gulplog "^1.0.0" + interpret "^1.1.0" + isobject "^3.0.1" + liftoff "^2.5.0" + matchdep "^2.0.0" + mute-stdout "^1.0.0" + pretty-hrtime "^1.0.0" + replace-homedir "^1.0.0" + semver-greatest-satisfied-range "^1.1.0" + v8flags "^3.0.1" + yargs "^7.1.0" + +gulp-csscomb@^3.0.8: + version "3.0.8" + resolved "https://registry.yarnpkg.com/gulp-csscomb/-/gulp-csscomb-3.0.8.tgz#df34824a580a4c7d3351c1e8ebb6ad7a1d5a89b7" + dependencies: + csscomb "^3.1.7" + gulp-util "^3.0.7" + through2 "^2.0.1" + +gulp-rename@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/gulp-rename/-/gulp-rename-1.4.0.tgz#de1c718e7c4095ae861f7296ef4f3248648240bd" + integrity sha512-swzbIGb/arEoFK89tPY58vg3Ok1bw+d35PfUNwWqdo7KM4jkmuGA78JiDNqR+JeZFaeeHnRg9N7aihX3YPmsyg== + +gulp-sass@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/gulp-sass/-/gulp-sass-4.0.1.tgz#7f43d117eb2d303524968a1b48494af1bc64d1d9" + dependencies: + chalk "^2.3.0" + lodash.clonedeep "^4.3.2" + node-sass "^4.8.3" + plugin-error "^1.0.1" + replace-ext "^1.0.0" + strip-ansi "^4.0.0" + through2 "^2.0.0" + vinyl-sourcemaps-apply "^0.2.0" + +gulp-sourcemaps@^2.6.4: + version "2.6.4" + resolved "https://registry.yarnpkg.com/gulp-sourcemaps/-/gulp-sourcemaps-2.6.4.tgz#cbb2008450b1bcce6cd23bf98337be751bf6e30a" + dependencies: + "@gulp-sourcemaps/identity-map" "1.X" + "@gulp-sourcemaps/map-sources" "1.X" + acorn "5.X" + convert-source-map "1.X" + css "2.X" + debug-fabulous "1.X" + detect-newline "2.X" + graceful-fs "4.X" + source-map "~0.6.0" + strip-bom-string "1.X" + through2 "2.X" + +gulp-util@^3.0.7: + version "3.0.8" + resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f" + dependencies: + array-differ "^1.0.0" + array-uniq "^1.0.2" + beeper "^1.0.0" + chalk "^1.0.0" + dateformat "^2.0.0" + fancy-log "^1.1.0" + gulplog "^1.0.0" + has-gulplog "^0.1.0" + lodash._reescape "^3.0.0" + lodash._reevaluate "^3.0.0" + lodash._reinterpolate "^3.0.0" + lodash.template "^3.0.0" + minimist "^1.1.0" + multipipe "^0.1.2" + object-assign "^3.0.0" + replace-ext "0.0.1" + through2 "^2.0.0" + vinyl "^0.5.0" + +gulp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/gulp/-/gulp-4.0.0.tgz#95766c601dade4a77ed3e7b2b6dc03881b596366" + integrity sha1-lXZsYB2t5Kd+0+eyttwDiBtZY2Y= + dependencies: + glob-watcher "^5.0.0" + gulp-cli "^2.0.0" + undertaker "^1.0.0" + vinyl-fs "^3.0.0" + +gulplog@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5" + dependencies: + glogg "^1.0.0" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + +har-validator@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" + dependencies: + chalk "^1.1.1" + commander "^2.9.0" + is-my-json-valid "^2.12.4" + pinkie-promise "^2.0.0" + +har-validator@~5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" + dependencies: + ajv "^5.1.0" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + dependencies: + ansi-regex "^2.0.0" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + +has-gulplog@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce" + dependencies: + sparkles "^1.0.0" + +has-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" + integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +hash-base@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hawk@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" + dependencies: + boom "2.x.x" + cryptiles "2.x.x" + hoek "2.x.x" + sntp "1.x.x" + +hawk@~6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" + dependencies: + boom "4.x.x" + cryptiles "3.x.x" + hoek "4.x.x" + sntp "2.x.x" + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hoek@2.x.x: + version "2.16.3" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" + +hoek@4.x.x: + version "4.2.1" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" + +home-or-tmp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg= + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + +homedir-polyfill@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" + dependencies: + parse-passwd "^1.0.0" + +hosted-git-info@^2.1.4: + version "2.6.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.6.0.tgz#23235b29ab230c576aab0d4f13fc046b0b038222" + +http-signature@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" + dependencies: + assert-plus "^0.2.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + +iconv-lite@^0.4.24, iconv-lite@^0.4.4: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +icss-replace-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" + integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= + +icss-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962" + integrity sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI= + dependencies: + postcss "^6.0.1" + +ieee754@^1.1.4: + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + +ignore-walk@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" + integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ== + dependencies: + minimatch "^3.0.4" + +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +import-fresh@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.0.0.tgz#a3d897f420cab0e671236897f75bc14b4885c390" + integrity sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +imports-loader@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/imports-loader/-/imports-loader-0.8.0.tgz#030ea51b8ca05977c40a3abfd9b4088fe0be9a69" + integrity sha512-kXWL7Scp8KQ4552ZcdVTeaQCZSLW+e6nJfp3cwUMB673T7Hr98Xjx5JK+ql7ADlJUvj1JS5O01RLbKoutN5QDQ== + dependencies: + loader-utils "^1.0.2" + source-map "^0.6.1" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +in-publish@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51" + +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + dependencies: + repeating "^2.0.0" + +indexof@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + +ini@^1.3.4, ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + +inquirer@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.2.tgz#46941176f65c9eb20804627149b743a218f25406" + integrity sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA== + dependencies: + ansi-escapes "^3.2.0" + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^2.0.0" + lodash "^4.17.11" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^6.4.0" + string-width "^2.1.0" + strip-ansi "^5.0.0" + through "^2.3.6" + +interpret@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" + integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== + +invariant@^2.2.0, invariant@^2.2.2: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== + +is-absolute@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" + dependencies: + is-relative "^1.0.0" + is-windows "^1.0.1" + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + dependencies: + kind-of "^6.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + +is-builtin-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + dependencies: + builtin-modules "^1.0.0" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + dependencies: + kind-of "^6.0.0" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + +is-finite@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" + integrity sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A= + dependencies: + is-extglob "^2.1.1" + +is-my-ip-valid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824" + +is-my-json-valid@^2.12.4: + version "2.17.2" + resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz#6b2103a288e94ef3de5cf15d29dd85fc4b78d65c" + dependencies: + generate-function "^2.0.0" + generate-object-property "^1.1.0" + is-my-ip-valid "^1.0.0" + jsonpointer "^4.0.0" + xtend "^4.0.0" + +is-negated-glob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2" + integrity sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI= + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + dependencies: + kind-of "^3.0.2" + +is-number@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" + +is-odd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-2.0.0.tgz#7646624671fd7ea558ccd9a2795182f2958f1b24" + dependencies: + is-number "^4.0.0" + +is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + dependencies: + isobject "^3.0.1" + +is-promise@^2.1, is-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= + +is-property@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" + +is-relative@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" + dependencies: + is-unc-path "^1.0.0" + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + +is-unc-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" + dependencies: + unc-path-regex "^0.1.2" + +is-utf8@^0.2.0, is-utf8@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + +is-valid-glob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa" + integrity sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao= + +is-windows@^1.0.1, is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + +js-base64@^2.1.8: + version "2.4.3" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.3.tgz#2e545ec2b0f2957f41356510205214e98fad6582" + +js-tokens@^3.0.0, js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.0: + version "3.13.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.0.tgz#38ee7178ac0eea2c97ff6d96fff4b18c7d8cf98e" + integrity sha512-pZZoSxcCYco+DIKBTimr67J6Hy+EYGZDY/HCWC+iAEA9h1ByhMXAIVUXMcMFpOCxQ/xjXmPI2MkDL5HRm5eFrQ== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-loader@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" + integrity sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w== + +json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-schema-traverse@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + +json5@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +jsonpointer@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +just-debounce@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/just-debounce/-/just-debounce-1.0.0.tgz#87fccfaeffc0b68cd19d55f6722943f929ea35ea" + integrity sha1-h/zPrv/AtozRnVX2cilD+SnqNeo= + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0, kind-of@^5.0.2: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + +last-run@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/last-run/-/last-run-1.1.1.tgz#45b96942c17b1c79c772198259ba943bebf8ca5b" + integrity sha1-RblpQsF7HHnHchmCWbqUO+v4yls= + dependencies: + default-resolution "^2.0.0" + es6-weak-map "^2.0.1" + +lazystream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" + integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= + dependencies: + readable-stream "^2.0.5" + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + dependencies: + invert-kv "^1.0.0" + +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== + dependencies: + invert-kv "^2.0.0" + +lead@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lead/-/lead-1.0.0.tgz#6f14f99a37be3a9dd784f5495690e5903466ee42" + integrity sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI= + dependencies: + flush-write-stream "^1.0.2" + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +liftoff@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-2.5.0.tgz#2009291bb31cea861bbf10a7c15a28caf75c31ec" + integrity sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew= + dependencies: + extend "^3.0.0" + findup-sync "^2.0.0" + fined "^1.0.1" + flagged-respawn "^1.0.0" + is-plain-object "^2.0.4" + object.map "^1.0.0" + rechoir "^0.6.2" + resolve "^1.1.7" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +loader-fs-cache@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.2.tgz#54cedf6b727e1779fd8f01205f05f6e88706f086" + integrity sha512-70IzT/0/L+M20jUlEqZhZyArTU6VKLRTYRDAYN26g4jfzpJqjipLL3/hgYpySqI9PwsVRHHFja0LfEmsx9X2Cw== + dependencies: + find-cache-dir "^0.1.1" + mkdirp "0.5.1" + +loader-runner@^2.3.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== + +loader-utils@^1.0.2, loader-utils@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" + integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== + dependencies: + big.js "^5.2.2" + emojis-list "^2.0.0" + json5 "^1.0.1" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +lodash._basecopy@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" + +lodash._basetostring@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" + +lodash._basevalues@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" + +lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + +lodash._isiterateecall@^3.0.0: + version "3.0.9" + resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" + +lodash._reescape@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a" + +lodash._reevaluate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed" + +lodash._reinterpolate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + +lodash._root@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" + +lodash.assign@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" + +lodash.clonedeep@^4.3.2: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + +lodash.escape@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" + dependencies: + lodash._root "^3.0.0" + +lodash.isarguments@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + +lodash.isarray@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + +lodash.keys@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + dependencies: + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + +lodash.mergewith@^4.6.0: + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz#639057e726c3afbdb3e7d42741caa8d6e4335927" + +lodash.restparam@^3.0.0: + version "3.6.1" + resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" + +lodash.template@^3.0.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f" + dependencies: + lodash._basecopy "^3.0.0" + lodash._basetostring "^3.0.0" + lodash._basevalues "^3.0.0" + lodash._isiterateecall "^3.0.0" + lodash._reinterpolate "^3.0.0" + lodash.escape "^3.0.0" + lodash.keys "^3.0.0" + lodash.restparam "^3.0.0" + lodash.templatesettings "^3.0.0" + +lodash.templatesettings@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5" + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.escape "^3.0.0" + +lodash@^4.0.0, lodash@~4.17.4: + version "4.17.10" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" + +lodash@^4.17.11, lodash@^4.17.4, lodash@^4.2.0: + version "4.17.11" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" + integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== + +loose-envify@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +lru-cache@2: + version "2.7.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" + +lru-cache@^4.0.1: + version "4.1.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c" + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-queue@0.1: + version "0.1.0" + resolved "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3" + dependencies: + es5-ext "~0.10.2" + +make-dir@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== + dependencies: + pify "^3.0.0" + +make-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-iterator@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.1.tgz#29b33f312aa8f547c4a5e490f56afcec99133ad6" + dependencies: + kind-of "^6.0.2" + +mamacro@^0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" + integrity sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA== + +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + +map-cache@^0.2.0, map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + dependencies: + object-visit "^1.0.0" + +matchdep@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/matchdep/-/matchdep-2.0.0.tgz#c6f34834a0d8dbc3b37c27ee8bbcb27c7775582e" + integrity sha1-xvNINKDY28OzfCfui7yyfHd1WC4= + dependencies: + findup-sync "^2.0.0" + micromatch "^3.0.4" + resolve "^1.4.0" + stack-trace "0.0.10" + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +mem@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + +memoizee@0.4.X: + version "0.4.12" + resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.12.tgz#780e99a219c50c549be6d0fc61765080975c58fb" + dependencies: + d "1" + es5-ext "^0.10.30" + es6-weak-map "^2.0.2" + event-emitter "^0.3.5" + is-promise "^2.1" + lru-queue "0.1" + next-tick "1" + timers-ext "^0.1.2" + +memory-fs@^0.4.0, memory-fs@~0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +meow@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + +micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + 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@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@~1.33.0: + version "1.33.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" + +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.7: + version "2.1.18" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" + dependencies: + mime-db "~1.33.0" + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +mimic-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimatch@0.2.12: + version "0.2.12" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.2.12.tgz#ea82a012ac662c7ddfaa144f1c147e6946f5dafb" + dependencies: + lru-cache "2" + sigmund "~1.0.0" + +"minimatch@2 || 3", minimatch@^3.0.2, minimatch@^3.0.4, minimatch@~3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimatch@~0.2.11: + version "0.2.14" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.2.14.tgz#c74e780574f63c6f9a090e90efbe6ef53a6a756a" + dependencies: + lru-cache "2" + sigmund "~1.0.0" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= + +minipass@^2.2.1, minipass@^2.3.4: + version "2.3.5" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" + integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" + integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== + dependencies: + minipass "^2.2.1" + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mixin-deep@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +ms@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +multipipe@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b" + dependencies: + duplexer2 "0.0.2" + +mute-stdout@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mute-stdout/-/mute-stdout-1.0.1.tgz#acb0300eb4de23a7ddeec014e3e96044b3472331" + integrity sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg== + +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= + +nan@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" + +nan@^2.9.2: + version "2.12.1" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.12.1.tgz#7b1aa193e9aa86057e3c7bbd0ac448e770925552" + integrity sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw== + +nanomatch@^1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.9.tgz#879f7150cb2dab7a471259066c104eee6e0fa7c2" + dependencies: + 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-odd "^2.0.0" + 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" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +needle@^2.2.1: + version "2.2.4" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e" + integrity sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA== + dependencies: + debug "^2.1.2" + iconv-lite "^0.4.4" + sax "^1.2.4" + +neo-async@^2.5.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835" + integrity sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA== + +next-tick@1: + version "1.0.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-gyp@^3.3.1: + version "3.6.2" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.2.tgz#9bfbe54562286284838e750eac05295853fa1c60" + dependencies: + fstream "^1.0.0" + glob "^7.0.3" + graceful-fs "^4.1.2" + minimatch "^3.0.2" + mkdirp "^0.5.0" + nopt "2 || 3" + npmlog "0 || 1 || 2 || 3 || 4" + osenv "0" + request "2" + rimraf "2" + semver "~5.3.0" + tar "^2.0.0" + which "1" + +node-libs-browser@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.0.tgz#c72f60d9d46de08a940dedbb25f3ffa2f9bbaa77" + integrity sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA== + dependencies: + 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.0" + 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 "0.0.4" + +node-pre-gyp@^0.10.0: + version "0.10.3" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" + integrity sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A== + dependencies: + 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" + +node-releases@^1.1.12: + version "1.1.12" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.12.tgz#1d6baf544316b5422fcd35efe18708370a4e7637" + integrity sha512-Y+AQ1xdjcgaEzpL65PBEF3fnl1FNKnDh9Zm+AUQLIlyyqtSc4u93jyMN4zrjMzdwKQ10RTr3tgY1x7qpsfF/xg== + dependencies: + semver "^5.3.0" + +node-sass@^4.8.3: + version "4.9.0" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.9.0.tgz#d1b8aa855d98ed684d6848db929a20771cc2ae52" + dependencies: + async-foreach "^0.1.3" + chalk "^1.1.1" + cross-spawn "^3.0.0" + gaze "^1.0.0" + get-stdin "^4.0.1" + glob "^7.0.3" + in-publish "^2.0.0" + lodash.assign "^4.2.0" + lodash.clonedeep "^4.3.2" + lodash.mergewith "^4.6.0" + meow "^3.7.0" + mkdirp "^0.5.1" + nan "^2.10.0" + node-gyp "^3.3.1" + npmlog "^4.0.0" + request "~2.79.0" + sass-graph "^2.2.4" + stdout-stream "^1.4.0" + "true-case-path" "^1.0.2" + +node-uuid@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.0.tgz#07f9b2337572ff6275c775e1d48513f3a45d7a65" + +"nopt@2 || 3": + version "3.0.6" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + dependencies: + abbrev "1" + +nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: + version "2.4.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" + dependencies: + hosted-git-info "^2.1.4" + is-builtin-module "^1.0.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.0.1, normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + +now-and-later@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/now-and-later/-/now-and-later-2.0.0.tgz#bc61cbb456d79cb32207ce47ca05136ff2e7d6ee" + integrity sha1-vGHLtFbXnLMiB85HygUTb/Ln1u4= + dependencies: + once "^1.3.2" + +npm-bundled@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.5.tgz#3c1732b7ba936b3a10325aef616467c0ccbcc979" + integrity sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g== + +npm-packlist@^1.1.6: + version "1.2.0" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.2.0.tgz#55a60e793e272f00862c7089274439a4cc31fc7f" + integrity sha512-7Mni4Z8Xkx0/oegoqlcao/JpPCPEMtUvsmB0q7mgvlMinykJLSRTYuFqoQLYgGY8biuxIeiHO+QNJKbCfljewQ== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + +oauth-sign@~0.8.1, oauth-sign@~0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + +object-assign@4.X, object-assign@^4.0.1, object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +object-assign@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-hash@^1.1.4: + version "1.3.1" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df" + integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA== + +object-keys@^1.0.11, object-keys@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" + integrity sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + dependencies: + isobject "^3.0.0" + +object.assign@^4.0.4: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.defaults@^1.0.0, object.defaults@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf" + dependencies: + array-each "^1.0.1" + array-slice "^1.0.0" + for-own "^1.0.0" + isobject "^3.0.0" + +object.map@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object.map/-/object.map-1.0.1.tgz#cf83e59dc8fcc0ad5f4250e1f78b3b81bd801d37" + dependencies: + for-own "^1.0.0" + make-iterator "^1.0.0" + +object.pick@^1.2.0, object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + dependencies: + isobject "^3.0.1" + +object.reduce@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object.reduce/-/object.reduce-1.0.1.tgz#6fe348f2ac7fa0f95ca621226599096825bb03ad" + integrity sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60= + dependencies: + for-own "^1.0.0" + make-iterator "^1.0.0" + +once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= + dependencies: + mimic-fn "^1.0.0" + +optionator@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + +ordered-read-streams@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz#77c0cb37c41525d64166d990ffad7ec6a0e1363e" + integrity sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4= + dependencies: + readable-stream "^2.0.1" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + +os-locale@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + dependencies: + lcid "^1.0.0" + +os-locale@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== + dependencies: + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.0" + +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +osenv@0, osenv@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-is-promise@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.0.0.tgz#7554e3d572109a87e1f3f53f6a7d85d1b194f4c5" + integrity sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" + integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ== + dependencies: + p-try "^2.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +pako@~1.0.5: + version "1.0.10" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" + integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== + +parallel-transform@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" + integrity sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY= + dependencies: + cyclist "~0.2.2" + inherits "^2.0.3" + readable-stream "^2.1.5" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-asn1@^5.0.0: + version "5.1.4" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.4.tgz#37f6628f823fbdeb2273b4d540434a22f3ef1fcc" + integrity sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw== + dependencies: + 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-filepath@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" + dependencies: + is-absolute "^1.0.0" + map-cache "^0.2.0" + path-root "^0.1.1" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + dependencies: + error-ex "^1.2.0" + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + +path-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" + integrity sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo= + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-parse@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-root-regex@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" + +path-root@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7" + dependencies: + path-root-regex "^0.1.0" + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +pbkdf2@^3.0.3: + version "3.0.17" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" + integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== + dependencies: + 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@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + +pkg-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" + integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q= + dependencies: + find-up "^1.0.0" + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= + dependencies: + find-up "^2.1.0" + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +plugin-error@1.0.1, plugin-error@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/plugin-error/-/plugin-error-1.0.1.tgz#77016bd8919d0ac377fdcdd0322328953ca5781c" + dependencies: + ansi-colors "^1.0.1" + arr-diff "^4.0.0" + arr-union "^3.1.0" + extend-shallow "^3.0.2" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + +postcss-modules-extract-imports@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz#dc87e34148ec7eab5f791f7cd5849833375b741a" + integrity sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw== + dependencies: + postcss "^6.0.1" + +postcss-modules-local-by-default@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" + integrity sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk= + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + +postcss-modules-scope@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" + integrity sha1-1upkmUx5+XtipytCb75gVqGUu5A= + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + +postcss-modules-values@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" + integrity sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA= + dependencies: + icss-replace-symbols "^1.1.0" + postcss "^6.0.1" + +postcss-value-parser@^3.3.0, postcss-value-parser@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== + +postcss@^6.0.1: + version "6.0.22" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.22.tgz#e23b78314905c3b90cbd61702121e7a78848f2a3" + dependencies: + chalk "^2.4.1" + source-map "^0.6.1" + supports-color "^5.4.0" + +postcss@^6.0.23: + version "6.0.23" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" + integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== + dependencies: + chalk "^2.4.1" + source-map "^0.6.1" + supports-color "^5.4.0" + +postcss@^7.0.14, postcss@^7.0.2: + version "7.0.14" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.14.tgz#4527ed6b1ca0d82c53ce5ec1a2041c2346bbd6e5" + integrity sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +pretty-hrtime@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" + +private@^0.1.6, private@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== + +process-nextick-args@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" + integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M= + +process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + 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" + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3, pumpify@^1.3.5: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.2.4, punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +qs@~6.3.0: + version "6.3.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c" + +qs@~6.5.1: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + dependencies: + 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" + +readable-stream@~1.1.9: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readdirp@^2.0.0, readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + dependencies: + resolve "^1.1.6" + +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + +regenerate@^1.2.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" + integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== + +regenerator-runtime@^0.10.5: + version "0.10.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" + integrity sha1-M2w+/BIgrc7dosn6tntaeVWjNlg= + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + +regenerator-transform@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" + integrity sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q== + dependencies: + babel-runtime "^6.18.0" + babel-types "^6.19.0" + private "^0.1.6" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexpp@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" + integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== + +regexpu-core@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" + integrity sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs= + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +regexpu-core@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" + integrity sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA= + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= + +regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= + dependencies: + jsesc "~0.5.0" + +remove-bom-buffer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz#c2bf1e377520d324f623892e33c10cac2c252b53" + integrity sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ== + dependencies: + is-buffer "^1.1.5" + is-utf8 "^0.2.1" + +remove-bom-stream@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz#05f1a593f16e42e1fb90ebf59de8e569525f9523" + integrity sha1-BfGlk/FuQuH7kOv1nejlaVJflSM= + dependencies: + remove-bom-buffer "^3.0.0" + safe-buffer "^5.1.0" + through2 "^2.0.3" + +remove-trailing-separator@^1.0.1, remove-trailing-separator@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + +repeat-element@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + dependencies: + is-finite "^1.0.0" + +replace-ext@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" + +replace-ext@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" + +replace-homedir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/replace-homedir/-/replace-homedir-1.0.0.tgz#e87f6d513b928dde808260c12be7fec6ff6e798c" + integrity sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw= + dependencies: + homedir-polyfill "^1.0.1" + is-absolute "^1.0.0" + remove-trailing-separator "^1.1.0" + +request@2: + version "2.85.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.85.0.tgz#5a03615a47c61420b3eb99b7dba204f83603e1fa" + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.6.0" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.1" + forever-agent "~0.6.1" + form-data "~2.3.1" + har-validator "~5.0.3" + hawk "~6.0.2" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.17" + oauth-sign "~0.8.2" + performance-now "^2.1.0" + qs "~6.5.1" + safe-buffer "^5.1.1" + stringstream "~0.0.5" + tough-cookie "~2.3.3" + tunnel-agent "^0.6.0" + uuid "^3.1.0" + +request@~2.79.0: + version "2.79.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + caseless "~0.11.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.1.1" + har-validator "~2.0.6" + hawk "~3.1.3" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + oauth-sign "~0.8.1" + qs "~6.3.0" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "~0.4.1" + uuid "^3.0.0" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + +resolve-dir@^1.0.0, resolve-dir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-options@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/resolve-options/-/resolve-options-1.1.0.tgz#32bb9e39c06d67338dc9378c0d6d6074566ad131" + integrity sha1-MrueOcBtZzONyTeMDW1gdFZq0TE= + dependencies: + value-or-function "^3.0.0" + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + +resolve@^1.1.6, resolve@^1.1.7: + version "1.7.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.7.1.tgz#aadd656374fd298aee895bc026b8297418677fd3" + dependencies: + path-parse "^1.0.5" + +resolve@^1.4.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.9.0.tgz#a14c6fdfa8f92a7df1d996cb7105fa744658ea06" + integrity sha512-TZNye00tI67lwYvzxCxHGjwTNlUV70io54/Ed4j6PscB8xVfuBJpRenI/o6dVk0cY0PYTY27AgCoGGxRnYuItQ== + dependencies: + path-parse "^1.0.6" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + +rimraf@2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" + dependencies: + glob "^7.0.5" + +rimraf@2.6.3, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +run-async@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= + dependencies: + is-promise "^2.1.0" + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + +rxjs@^6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.4.0.tgz#f3bb0fe7bda7fb69deac0c16f17b50b0b8790504" + integrity sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw== + dependencies: + tslib "^1.9.0" + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sass-graph@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49" + dependencies: + glob "^7.0.0" + lodash "^4.0.0" + scss-tokenizer "^0.2.3" + yargs "^7.0.0" + +sax@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +schema-utils@^0.4.5: + version "0.4.7" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187" + integrity sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ== + dependencies: + ajv "^6.1.0" + ajv-keywords "^3.1.0" + +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + +scss-tokenizer@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" + dependencies: + js-base64 "^2.1.8" + source-map "^0.4.2" + +semver-greatest-satisfied-range@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz#13e8c2658ab9691cb0cd71093240280d36f77a5b" + integrity sha1-E+jCZYq5aRywzXEJMkAoDTb3els= + dependencies: + sver-compat "^1.5.0" + +"semver@2 || 3 || 4 || 5": + version "5.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" + +semver@^5.3.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" + integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== + +semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: + version "5.7.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" + integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== + +semver@~5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + +serialize-javascript@^1.4.0: + version "1.6.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.6.1.tgz#4d1f697ec49429a847ca6f442a2a755126c4d879" + integrity sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw== + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + +set-value@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.1" + to-object-path "^0.3.0" + +set-value@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +sigmund@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= + +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + dependencies: + 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" + +sntp@1.x.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" + dependencies: + hoek "2.x.x" + +sntp@2.x.x: + version "2.1.0" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" + dependencies: + hoek "4.x.x" + +source-list-map@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +source-map-resolve@^0.5.0, source-map-resolve@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" + dependencies: + atob "^2.1.1" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.4.15: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== + dependencies: + source-map "^0.5.6" + +source-map-support@~0.5.10: + version "0.5.11" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.11.tgz#efac2ce0800355d026326a0ca23e162aeac9a4e2" + integrity sha512-//sajEx/fGL3iw6fltKMdPvy8kL3kJ2O3iuYlRoT3k9Kb4BjOoZ+BZzaNHeuaruSt+Kf3Zk9tnfAQg9/AJqUVQ== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + +source-map@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.0.tgz#0fe96503ac86a5adb5de63f4e412ae4872cdbe86" + integrity sha1-D+llA6yGpa213mP05BKuSHLNvoY= + +source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.1, source-map@^0.5.6, source-map@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.1.38: + version "0.1.43" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" + dependencies: + amdefine ">=0.0.4" + +source-map@^0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + dependencies: + amdefine ">=0.0.4" + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + +sparkles@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.0.tgz#1acbbfb592436d10bbe8f785b7cc6f82815012c3" + +spdx-correct@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9" + +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87" + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +sshpk@^1.7.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.1.tgz#130f5975eddad963f1d56f92b9ac6c51fa9f83eb" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + +ssri@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== + dependencies: + figgy-pudding "^3.5.1" + +stack-trace@0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" + integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +stdout-stream@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.0.tgz#a2c7c8587e54d9427ea9edb3ac3f2cd522df378b" + dependencies: + readable-stream "^2.0.1" + +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-exhaust@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/stream-exhaust/-/stream-exhaust-1.0.2.tgz#acdac8da59ef2bc1e17a2c0ccf6c320d120e555d" + integrity sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw== + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" + integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= + +string-width@^1.0.1, string-width@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string_decoder@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" + integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w== + dependencies: + safe-buffer "~5.1.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + dependencies: + safe-buffer "~5.1.0" + +stringstream@~0.0.4, stringstream@~0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-bom-string@1.X: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + dependencies: + is-utf8 "^0.2.0" + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + dependencies: + get-stdin "^4.0.1" + +strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +style-loader@^0.21.0: + version "0.21.0" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.21.0.tgz#68c52e5eb2afc9ca92b6274be277ee59aea3a852" + integrity sha512-T+UNsAcl3Yg+BsPKs1vd22Fr8sVT+CJMtzqc6LEw9bbJZb43lm9GoeIfUcDEefBSWC0BhYbcdupV1GtI4DGzxg== + dependencies: + loader-utils "^1.1.0" + schema-utils "^0.4.5" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + +supports-color@^5.3.0, supports-color@^5.4.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" + dependencies: + has-flag "^3.0.0" + +supports-color@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +sver-compat@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/sver-compat/-/sver-compat-1.5.0.tgz#3cf87dfeb4d07b4a3f14827bc186b3fd0c645cd8" + integrity sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg= + dependencies: + es6-iterator "^2.0.1" + es6-symbol "^3.1.1" + +table@^5.2.3: + version "5.2.3" + resolved "https://registry.yarnpkg.com/table/-/table-5.2.3.tgz#cde0cc6eb06751c009efab27e8c820ca5b67b7f2" + integrity sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ== + dependencies: + ajv "^6.9.1" + lodash "^4.17.11" + slice-ansi "^2.1.0" + string-width "^3.0.0" + +tapable@^1.0.0, tapable@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.1.tgz#4d297923c5a72a42360de2ab52dadfaaec00018e" + integrity sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA== + +tar@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" + dependencies: + block-stream "*" + fstream "^1.0.2" + inherits "2" + +tar@^4: + version "4.4.8" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" + integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ== + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.3.4" + minizlib "^1.1.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.2" + +terser-webpack-plugin@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.2.3.tgz#3f98bc902fac3e5d0de730869f50668561262ec8" + integrity sha512-GOK7q85oAb/5kE12fMuLdn2btOS9OBZn4VsecpHDywoUC/jLhSAKOiYo0ezx7ss2EXPMzyEWFoE0s1WLE+4+oA== + dependencies: + cacache "^11.0.2" + find-cache-dir "^2.0.0" + schema-utils "^1.0.0" + serialize-javascript "^1.4.0" + source-map "^0.6.1" + terser "^3.16.1" + webpack-sources "^1.1.0" + worker-farm "^1.5.2" + +terser@^3.16.1: + version "3.17.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-3.17.0.tgz#f88ffbeda0deb5637f9d24b0da66f4e15ab10cb2" + integrity sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ== + dependencies: + commander "^2.19.0" + source-map "~0.6.1" + source-map-support "~0.5.10" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +through2-filter@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254" + integrity sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA== + dependencies: + through2 "~2.0.0" + xtend "~4.0.0" + +through2@2.0.3, through2@2.X, through2@^2.0.0, through2@^2.0.1, through2@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" + dependencies: + readable-stream "^2.1.5" + xtend "~4.0.1" + +through2@~2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +time-stamp@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" + +timers-browserify@^2.0.4: + version "2.0.10" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.10.tgz#1d28e3d2aadf1d5a5996c4e9f95601cd053480ae" + integrity sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg== + dependencies: + setimmediate "^1.0.4" + +timers-ext@^0.1.2: + version "0.1.5" + resolved "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.5.tgz#77147dd4e76b660c2abb8785db96574cbbd12922" + dependencies: + es5-ext "~0.10.14" + next-tick "1" + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +to-absolute-glob@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz#1865f43d9e74b0822db9f145b78cff7d0f7c849b" + integrity sha1-GGX0PZ50sIItufFFt4z/fQ98hJs= + dependencies: + is-absolute "^1.0.0" + is-negated-glob "^1.0.0" + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + +to-fast-properties@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +to-through@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-through/-/to-through-2.0.0.tgz#fc92adaba072647bc0b67d6b03664aa195093af6" + integrity sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY= + dependencies: + through2 "^2.0.3" + +tough-cookie@~2.3.0, tough-cookie@~2.3.3: + version "2.3.4" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" + dependencies: + punycode "^1.4.1" + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= + +"true-case-path@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.2.tgz#7ec91130924766c7f573be3020c34f8fdfd00d62" + dependencies: + glob "^6.0.4" + +tslib@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" + integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + dependencies: + safe-buffer "^5.0.1" + +tunnel-agent@~0.4.1: + version "0.4.3" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +uglify-js@^3.0.0: + version "3.5.3" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.5.3.tgz#d490bb5347f23025f0c1bc0dee901d98e4d6b063" + integrity sha512-rIQPT2UMDnk4jRX+w4WO84/pebU2jiLsjgIyrCktYgSvx28enOE3iYQMr+BD1rHiitWnDmpu0cY/LfIEpKcjcw== + dependencies: + commander "~2.19.0" + source-map "~0.6.1" + +uglifyjs-webpack-plugin@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-2.1.2.tgz#70e5c38fb2d35ee887949c2a0adb2656c23296d5" + integrity sha512-G1fJx2uOAAfvdZ77SVCzmFo6mv8uKaHoZBL9Qq/ciC8r6p0ANOL1uY85fIUiyWXKw5RzAaJYZfNSL58Or2hQ0A== + dependencies: + cacache "^11.2.0" + find-cache-dir "^2.0.0" + schema-utils "^1.0.0" + serialize-javascript "^1.4.0" + source-map "^0.6.1" + uglify-js "^3.0.0" + webpack-sources "^1.1.0" + worker-farm "^1.5.2" + +unc-path-regex@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" + +undertaker-registry@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/undertaker-registry/-/undertaker-registry-1.0.1.tgz#5e4bda308e4a8a2ae584f9b9a4359a499825cc50" + integrity sha1-XkvaMI5KiirlhPm5pDWaSZglzFA= + +undertaker@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/undertaker/-/undertaker-1.2.0.tgz#339da4646252d082dc378e708067299750e11b49" + integrity sha1-M52kZGJS0ILcN45wgGcpl1DhG0k= + dependencies: + arr-flatten "^1.0.1" + arr-map "^2.0.0" + bach "^1.0.0" + collection-map "^1.0.0" + es6-weak-map "^2.0.1" + last-run "^1.1.0" + object.defaults "^1.0.0" + object.reduce "^1.0.0" + undertaker-registry "^1.0.0" + +union-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^0.4.3" + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.1.tgz#5e9edc6d1ce8fb264db18a507ef9bd8544451ca6" + integrity sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg== + dependencies: + imurmurhash "^0.1.4" + +unique-stream@^2.0.2: + version "2.3.1" + resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.3.1.tgz#c65d110e9a4adf9a6c5948b28053d9a8d04cbeac" + integrity sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A== + dependencies: + json-stable-stringify-without-jsonify "^1.0.1" + through2-filter "^3.0.0" + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.0.5: + version "1.1.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" + integrity sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw== + +upath@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068" + integrity sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q== + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.0.tgz#14716bf03fdfefd03040aef58d8b4b85f3a7c544" + dependencies: + kind-of "^6.0.2" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + +uuid@^3.0.0, uuid@^3.1.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" + +v8-compile-cache@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz#a428b28bb26790734c4fc8bc9fa106fccebf6a6c" + integrity sha512-1wFuMUIM16MDJRCrpbpuEPTUGmM5QMUg0cr3KFwra2XgOgFcPGDQHDh3CszSCD2Zewc/dh/pamNEW8CbfDebUw== + +v8flags@^3.0.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.1.2.tgz#fc5cd0c227428181e6c29b2992e4f8f1da5e0c9f" + integrity sha512-MtivA7GF24yMPte9Rp/BWGCYQNaUj86zeYxV/x2RRJMKagImbbv3u8iJC57lNhWLPcGLJmHcHmFWkNsplbbLWw== + dependencies: + homedir-polyfill "^1.0.1" + +validate-npm-package-license@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz#81643bcbef1bdfecd4623793dc4648948ba98338" + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +value-or-function@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/value-or-function/-/value-or-function-3.0.0.tgz#1c243a50b595c1be54a754bfece8563b9ff8d813" + integrity sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM= + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vinyl-fs@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-3.0.3.tgz#c85849405f67428feabbbd5c5dbdd64f47d31bc7" + integrity sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng== + dependencies: + fs-mkdirp-stream "^1.0.0" + glob-stream "^6.1.0" + graceful-fs "^4.0.0" + is-valid-glob "^1.0.0" + lazystream "^1.0.0" + lead "^1.0.0" + object.assign "^4.0.4" + pumpify "^1.3.5" + readable-stream "^2.3.3" + remove-bom-buffer "^3.0.0" + remove-bom-stream "^1.2.0" + resolve-options "^1.1.0" + through2 "^2.0.0" + to-through "^2.0.0" + value-or-function "^3.0.0" + vinyl "^2.0.0" + vinyl-sourcemap "^1.1.0" + +vinyl-sourcemap@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz#92a800593a38703a8cdb11d8b300ad4be63b3e16" + integrity sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY= + dependencies: + append-buffer "^1.0.2" + convert-source-map "^1.5.0" + graceful-fs "^4.1.6" + normalize-path "^2.1.1" + now-and-later "^2.0.0" + remove-bom-buffer "^3.0.0" + vinyl "^2.0.0" + +vinyl-sourcemaps-apply@0.2.1, vinyl-sourcemaps-apply@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz#ab6549d61d172c2b1b87be5c508d239c8ef87705" + dependencies: + source-map "^0.5.1" + +vinyl@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde" + dependencies: + clone "^1.0.0" + clone-stats "^0.0.1" + replace-ext "0.0.1" + +vinyl@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.0.tgz#d85b07da96e458d25b2ffe19fece9f2caa13ed86" + integrity sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg== + dependencies: + clone "^2.1.1" + clone-buffer "^1.0.0" + clone-stats "^1.0.0" + cloneable-readable "^1.0.0" + remove-trailing-separator "^1.0.1" + replace-ext "^1.0.0" + +vm-browserify@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" + integrity sha1-XX6kW7755Kb/ZflUOOCofDV9WnM= + dependencies: + indexof "0.0.1" + +vow-fs@0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/vow-fs/-/vow-fs-0.3.2.tgz#ea2b034d85e1db8c277eb2e9a86d1c15f5d38e7a" + dependencies: + glob "3.2.8" + node-uuid "1.4.0" + vow "0.4.4" + vow-queue "0.3.1" + +vow-queue@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/vow-queue/-/vow-queue-0.3.1.tgz#598c51a15b0a81a6d5fc05f4761ceb462de1e868" + dependencies: + vow "~0.4.0" + +vow@0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/vow/-/vow-0.4.4.tgz#c9fe4609129d7f5aa621508ebe64b51c95bc7b98" + +vow@~0.4.0: + version "0.4.17" + resolved "https://registry.yarnpkg.com/vow/-/vow-0.4.17.tgz#b16e08fae58c52f3ebc6875f2441b26a92682904" + +watchpack@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" + integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA== + dependencies: + chokidar "^2.0.2" + graceful-fs "^4.1.2" + neo-async "^2.5.0" + +webpack-cli@^3.1.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.0.tgz#55c8a74cae1e88117f9dda3a801c7272e93ca318" + integrity sha512-t1M7G4z5FhHKJ92WRKwZ1rtvi7rHc0NZoZRbSkol0YKl4HvcC8+DsmGDmK7MmZxHSAetHagiOsjOB6MmzC2TUw== + dependencies: + chalk "^2.4.1" + cross-spawn "^6.0.5" + enhanced-resolve "^4.1.0" + findup-sync "^2.0.0" + global-modules "^1.0.0" + import-local "^2.0.0" + interpret "^1.1.0" + loader-utils "^1.1.0" + supports-color "^5.5.0" + v8-compile-cache "^2.0.2" + yargs "^12.0.5" + +webpack-sources@^1.1.0, webpack-sources@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85" + integrity sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack@^4.16.2: + version "4.29.6" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.29.6.tgz#66bf0ec8beee4d469f8b598d3988ff9d8d90e955" + integrity sha512-MwBwpiE1BQpMDkbnUUaW6K8RFZjljJHArC6tWQJoFm0oQtfoSebtg4Y7/QHnJ/SddtjYLHaKGX64CFjG5rehJw== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-module-context" "1.8.5" + "@webassemblyjs/wasm-edit" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + acorn "^6.0.5" + acorn-dynamic-import "^4.0.0" + ajv "^6.1.0" + ajv-keywords "^3.1.0" + chrome-trace-event "^1.0.0" + enhanced-resolve "^4.1.0" + eslint-scope "^4.0.0" + json-parse-better-errors "^1.0.2" + loader-runner "^2.3.0" + loader-utils "^1.1.0" + memory-fs "~0.4.1" + micromatch "^3.1.8" + mkdirp "~0.5.0" + neo-async "^2.5.0" + node-libs-browser "^2.0.0" + schema-utils "^1.0.0" + tapable "^1.1.0" + terser-webpack-plugin "^1.1.0" + watchpack "^1.5.0" + webpack-sources "^1.3.0" + +which-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@1, which@^1.2.14, which@^1.2.9: + version "1.3.0" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" + dependencies: + string-width "^1.0.2" + +wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + +worker-farm@^1.5.2: + version "1.6.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0" + integrity sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ== + dependencies: + errno "~0.1.7" + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +write@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== + dependencies: + mkdirp "^0.5.1" + +xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + +"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + +yallist@^3.0.0, yallist@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" + integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== + +yargs-parser@^11.1.1: + version "11.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" + integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" + dependencies: + camelcase "^3.0.0" + +yargs@^12.0.5: + version "12.0.5" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" + integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== + dependencies: + cliui "^4.0.0" + decamelize "^1.2.0" + find-up "^3.0.0" + get-caller-file "^1.0.1" + os-locale "^3.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1 || ^4.0.0" + yargs-parser "^11.1.1" + +yargs@^7.0.0, yargs@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" + integrity sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg= + dependencies: + camelcase "^3.0.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^1.0.2" + which-module "^1.0.0" + y18n "^3.2.1" + yargs-parser "^5.0.0" diff --git a/themes/yunohost-docs/CHANGELOG.md b/themes/yunohost-docs/CHANGELOG.md new file mode 100644 index 00000000..72f8f647 --- /dev/null +++ b/themes/yunohost-docs/CHANGELOG.md @@ -0,0 +1,5 @@ +# v0.1.0 +## 11/14/2020 + +1. [](#new) + * ChangeLog started... diff --git a/themes/yunohost-docs/LICENSE b/themes/yunohost-docs/LICENSE new file mode 100644 index 00000000..0a25f8a4 --- /dev/null +++ b/themes/yunohost-docs/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2020 tituspijean + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/themes/yunohost-docs/README.md b/themes/yunohost-docs/README.md new file mode 100644 index 00000000..e4c35b14 --- /dev/null +++ b/themes/yunohost-docs/README.md @@ -0,0 +1,7 @@ +# YunoHost Docs Theme + +The **YunoHost Docs** Theme is for [Grav CMS](http://github.com/getgrav/grav). This README.md file should be modified to describe the features, installation, configuration, and general usage of this theme. + +## Description + +YunoHost Documentation theme, based off Grav Learn diff --git a/themes/yunohost-docs/blueprints.yaml b/themes/yunohost-docs/blueprints.yaml new file mode 100644 index 00000000..c21003f6 --- /dev/null +++ b/themes/yunohost-docs/blueprints.yaml @@ -0,0 +1,18 @@ +name: YunoHost Docs +slug: yunohost-docs +type: theme +version: 0.1.0 +description: YunoHost Documentation theme, based off Grav Learn4 +icon: rebel +author: + name: tituspijean + email: tituspijean@outlook.com +#homepage: https://github.com/tituspijean/grav-theme-yunohost-docs +#demo: http://demo.yoursite.com +keywords: grav, theme, etc +#bugs: https://github.com/tituspijean/grav-theme-yuno-host-docs/issues +#readme: https://github.com/tituspijean/grav-theme-yuno-host-docs/blob/develop/README.md +license: MIT + +dependencies: + - { name: grav, version: '>=1.6.0' } diff --git a/themes/yunohost-docs/css/custom.css b/themes/yunohost-docs/css/custom.css new file mode 100644 index 00000000..b883f7da --- /dev/null +++ b/themes/yunohost-docs/css/custom.css @@ -0,0 +1,714 @@ +/*######################################## +########################################## + PLEASE DO NOT MODIFY THE CSS FILE +IF YOU WANT TO CHANGE THE CSS, DO IT IN THE + SCSS FILES AND "COMPILE" THEM: + https://sass-lang.com/guide +########################################## +########################################*/ +body.light-mode { + background-color: white; + /*================================================= + Side Bar + =================================================*/ + /*================================================= + App catalog + =================================================*/ + /*================================================= + Hardware image + =================================================*/ + /*================================================= + Other + =================================================*/ +} +body.light-mode ::selection { + background-color: #dddddd; +} +body.light-mode #body-wrapper, +body.light-mode #page-wrapper { + background-color: white; + color: #171b21; +} +body.light-mode a { + color: #0070d3; +} +body.light-mode .card, +body.light-mode #footer, +body.light-mode .dropmenu ul ul { + background-color: #f0f0f0 !important; +} +body.light-mode h1, +body.light-mode h2, +body.light-mode h3, +body.light-mode h4, +body.light-mode h5, +body.light-mode h6, +body.light-mode #header a { + color: #242931; +} +body.light-mode .label.label-primary { + color: #242931; + background-color: #0070d3; +} +body.light-mode .label.label-secondary { + color: #171b21; + background-color: #dddddd; +} +body.light-mode .pagination li { + border-color: #dddddd; + background: #f0f0f0; +} +body.light-mode #sidebar-id { + background: white; +} +body.light-mode .menu, +body.light-mode .learn-brand, +body.light-mode .learn-nav { + color: #111418; +} +body.light-mode .menu .menu-item > a:focus, +body.light-mode .menu .menu-item > a:hover, +body.light-mode #top-bar #navigation > a:hover { + background: #f0f0f0; +} +body.light-mode #sidebar ul.related-pages li { + border-bottom-color: #dddddd; +} +body.light-mode .form-input, +body.light-mode .search-input, +body.light-mode [data-grav-field=array] input, +body.light-mode [data-grav-field=array] textarea { + background: #f0f0f0; +} +body.light-mode .off-canvas .learn-sidebar .learn-brand #logo path { + fill: #171b21 !important; +} +body.light-mode .simplebar-content h5 { + border-top-color: #dddddd; +} +body.light-mode .off-canvas #sidebar-id { + border-right: 0.05rem solid #dddddd; +} +body.light-mode .off-canvas .learn-sidebar .learn-nav ul.searched a, +body.light-mode .off-canvas .learn-sidebar .searchbox input { + color: #171b21; +} +body.light-mode .off-canvas .learn-sidebar .learn-nav ul li.active > a, +body.light-mode .off-canvas .learn-sidebar .searchbox ::placeholder { + color: #111418; + background-color: transparent; +} +body.light-mode .off-canvas .learn-sidebar .learn-nav ul.searched .search-match a:hover, +body.light-mode .off-canvas .learn-sidebar .learn-nav ul.searched .search-match a { + color: #0070d3; +} +body.light-mode .off-canvas .learn-sidebar .learn-nav ul.topics > li.active, +body.light-mode .off-canvas .learn-sidebar .learn-nav ul.topics > li.parent { + background-color: rgba(0, 0, 0, 0.1); +} +body.light-mode .off-canvas .learn-sidebar .learn-nav .read-icon, +body.light-mode .off-canvas .learn-sidebar .searchbox { + color: #171b21; +} +body.light-mode .off-canvas .learn-sidebar .search-options .version-chooser select { + color: #171b21; +} +body.light-mode .off-canvas .learn-sidebar a, +body.light-mode .off-canvas .learn-sidebar .learn-nav ul li a, +body.light-mode .off-canvas .learn-sidebar .learn-nav ul li a > i, +body.light-mode .off-canvas .learn-sidebar .learn-nav ul li a > span > b { + color: #171b21; +} +body.light-mode .off-canvas .learn-sidebar a:hover { + color: #111418; +} +body.light-mode #filter-app-icon, +body.light-mode #filter-app-cards { + color: #171b21; + background-color: #f0f0f0; +} +body.light-mode #app-cards-list .app-title { + color: #242931; +} +body.light-mode #app-cards-list .app-buttons { + border-top: 0.05rem solid #f0f0f0; +} +body.light-mode #app-cards-list .app-buttons > .btn-default { + color: #242931; + background-color: #dddddd; +} +body.light-mode #app-cards-list .app-buttons > .btn:first-child { + border-right: 0.1rem solid #f0f0f0; +} +body.light-mode #app-cards-list .app-card { + border-color: #dddddd; +} +body.light-mode #app-cards-list .label { + color: black; +} +body.light-mode .hardware-image .card { + background-color: white !important; + border-color: #dddddd; +} +body.light-mode .hardware-image .btn-group .btn.btn-info { + color: #f0f0f0; +} +body.light-mode .hardware-image .btn-group .btn.btn-info:hover, +body.light-mode .btn.btn-info:focus { + color: #f0f0f0; +} +body.light-mode table tbody tr:nth-of-type(2n + 1) { + background: #f0f0f0; +} +body.light-mode table td, +body.light-mode table th { + border-bottom-color: #dddddd; +} +body.light-mode .danger { + background-color: #f2dede; +} +body.light-mode .warning { + background-color: #fcf8e3; +} +body.light-mode .success { + background-color: #dff0d8; +} +body.light-mode .page-toc { + background-color: #f0f0f0; +} +body.light-mode .page-toc li, +body.light-mode .page-toc li > a { + color: #242931; +} + +/*================================================= + Light mode specific +=================================================*/ +body.light-mode { + /* Give a gray background to the white logo*/ +} +body.light-mode img#whitelogo { + background-color: gray; + padding: 10px; +} + +/*! + * Dark Mode Theme + * + * Inspired by Louis Charette + * https://github.com/lcharette/website/blob/cc855a6eb29693613e5e4e1d589a17ba7faf4aa9/themes/quark-custom/css/darkMode.scss + */ +body.dark-mode { + background-color: #171b21; + /*================================================= + Side Bar + =================================================*/ + /*================================================= + App catalog + =================================================*/ + /*================================================= + Hardware image + =================================================*/ + /*================================================= + Other + =================================================*/ +} +body.dark-mode ::selection { + background-color: #3f4755; +} +body.dark-mode #body-wrapper, +body.dark-mode #page-wrapper { + background-color: #171b21; + color: #e8e9eb; +} +body.dark-mode a { + color: #72b6ec; +} +body.dark-mode .card, +body.dark-mode #footer, +body.dark-mode .dropmenu ul ul { + background-color: #111418 !important; +} +body.dark-mode h1, +body.dark-mode h2, +body.dark-mode h3, +body.dark-mode h4, +body.dark-mode h5, +body.dark-mode h6, +body.dark-mode #header a { + color: white; +} +body.dark-mode .label.label-primary { + color: white; + background-color: #72b6ec; +} +body.dark-mode .label.label-secondary { + color: #e8e9eb; + background-color: #3f4755; +} +body.dark-mode .pagination li { + border-color: #3f4755; + background: #111418; +} +body.dark-mode #sidebar-id { + background: #171b21; +} +body.dark-mode .menu, +body.dark-mode .learn-brand, +body.dark-mode .learn-nav { + color: #a5a9af; +} +body.dark-mode .menu .menu-item > a:focus, +body.dark-mode .menu .menu-item > a:hover, +body.dark-mode #top-bar #navigation > a:hover { + background: #111418; +} +body.dark-mode #sidebar ul.related-pages li { + border-bottom-color: #3f4755; +} +body.dark-mode .form-input, +body.dark-mode .search-input, +body.dark-mode [data-grav-field=array] input, +body.dark-mode [data-grav-field=array] textarea { + background: #111418; +} +body.dark-mode .off-canvas .learn-sidebar .learn-brand #logo path { + fill: #e8e9eb !important; +} +body.dark-mode .simplebar-content h5 { + border-top-color: #3f4755; +} +body.dark-mode .off-canvas #sidebar-id { + border-right: 0.05rem solid #3f4755; +} +body.dark-mode .off-canvas .learn-sidebar .learn-nav ul.searched a, +body.dark-mode .off-canvas .learn-sidebar .searchbox input { + color: #e8e9eb; +} +body.dark-mode .off-canvas .learn-sidebar .learn-nav ul li.active > a, +body.dark-mode .off-canvas .learn-sidebar .searchbox ::placeholder { + color: #a5a9af; + background-color: transparent; +} +body.dark-mode .off-canvas .learn-sidebar .learn-nav ul.searched .search-match a:hover, +body.dark-mode .off-canvas .learn-sidebar .learn-nav ul.searched .search-match a { + color: #72b6ec; +} +body.dark-mode .off-canvas .learn-sidebar .learn-nav ul.topics > li.active, +body.dark-mode .off-canvas .learn-sidebar .learn-nav ul.topics > li.parent { + background-color: rgba(255, 255, 255, 0.1); +} +body.dark-mode .off-canvas .learn-sidebar .learn-nav .read-icon, +body.dark-mode .off-canvas .learn-sidebar .searchbox { + color: #e8e9eb; +} +body.dark-mode .off-canvas .learn-sidebar .search-options .version-chooser select { + color: #e8e9eb; +} +body.dark-mode .off-canvas .learn-sidebar a, +body.dark-mode .off-canvas .learn-sidebar .learn-nav ul li a, +body.dark-mode .off-canvas .learn-sidebar .learn-nav ul li a > i, +body.dark-mode .off-canvas .learn-sidebar .learn-nav ul li a > span > b { + color: #e8e9eb; +} +body.dark-mode .off-canvas .learn-sidebar a:hover { + color: #a5a9af; +} +body.dark-mode #filter-app-icon, +body.dark-mode #filter-app-cards { + color: #e8e9eb; + background-color: #111418; +} +body.dark-mode #app-cards-list .app-title { + color: white; +} +body.dark-mode #app-cards-list .app-buttons { + border-top: 0.05rem solid #111418; +} +body.dark-mode #app-cards-list .app-buttons > .btn-default { + color: white; + background-color: #3f4755; +} +body.dark-mode #app-cards-list .app-buttons > .btn:first-child { + border-right: 0.1rem solid #111418; +} +body.dark-mode #app-cards-list .app-card { + border-color: #3f4755; +} +body.dark-mode #app-cards-list .label { + color: black; +} +body.dark-mode .hardware-image .card { + background-color: #171b21 !important; + border-color: #3f4755; +} +body.dark-mode .hardware-image .btn-group .btn.btn-info { + color: #111418; +} +body.dark-mode .hardware-image .btn-group .btn.btn-info:hover, +body.dark-mode .btn.btn-info:focus { + color: #111418; +} +body.dark-mode table tbody tr:nth-of-type(2n + 1) { + background: #111418; +} +body.dark-mode table td, +body.dark-mode table th { + border-bottom-color: #3f4755; +} +body.dark-mode .danger { + background-color: #712c2c; +} +body.dark-mode .warning { + background-color: #845804; +} +body.dark-mode .success { + background-color: #335723; +} +body.dark-mode .page-toc { + background-color: #111418; +} +body.dark-mode .page-toc li, +body.dark-mode .page-toc li > a { + color: white; +} + +/*================================================= + Dark mode specific +=================================================*/ +body.dark-mode img { + filter: brightness(0.85) contrast(1.2); +} +body.dark-mode img#whitelogo { + background-color: unset; + padding: 10px; +} +body.dark-mode #ynhlogo { + filter: invert(1); +} +body.dark-mode .notices.yellow { + border-left-color: #935b0c; + background-color: #31220b; + color: #eea034; +} +body.dark-mode .notices.red { + border-left-color: #89211e; + background-color: #2e0b0b; + color: #db5a56; +} +body.dark-mode .notices.blue, +body.dark-mode .notices.note { + border-left-color: #1b6e86; + background-color: #13222a; + color: #4bb9da; +} +body.dark-mode .notices.green { + border-left-color: #347834; + background-color: #192c13; + color: #7ac57a; +} +body.dark-mode code { + background: #3a3a3a; + color: #ece5ad; +} + +.learn-sidebar:before { + background: none !important; +} + +#chapter { + max-width: 80%; +} + +/* Images helper classes */ +img.inline { + display: inline; + margin: 5px 15px 5px 5px; + vertical-align: middle; +} + +img.center { + display: block; + margin: 5px 15px 5px 5px; + margin-left: auto; + margin-right: auto; +} + +td img { + margin: 0.2rem auto; +} + +/* Figures and caption */ +figure img { + margin: auto; +} + +figure figcaption { + font-style: italic; +} + +/* List spacing */ +ul li, +ol li { + margin-top: 0; +} + +ul, +ol { + margin-bottom: 0; +} + +li p { + margin: inherit; +} + +/* Paragraphs */ +p { + margin: 0 0 1rem; +} + +.notices p { + margin: 0 0 0 0.5rem; +} + +/* Flex */ +.flex-container { + display: flex; + justify-content: space-around; + flex-wrap: wrap; +} + +.flex-child { + display: inline-flex; + text-align: center; +} + +.nomargin * { + margin: 0px auto; +} + +/* Fonts and headings */ +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: "Source Sans Pro", "Metropolis", "Helvetica Neue", sans-serif; + margin-top: 1rem; + margin-bottom: 1rem; +} + +.simplebar-content h5 .fa { + font-size: 0.75em; + margin-right: 0.2em; + margin-left: 0.4em; +} + +.simplebar-content h5 { + letter-spacing: 0em; + border-top: 1px solid; + padding: 0.8em 0; + margin: 0; +} + +@font-face { + font-family: "Source Sans Pro"; + src: url("../fonts/SourceSansPro-Bold-webfont.eot"); + src: url("../fonts/SourceSansPro-Bold-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/SourceSansPro-Bold-webfont.woff") format("woff"), url("../fonts/SourceSansPro-Bold-webfont.ttf") format("truetype"), url("../fonts/SourceSansPro-Bold-webfont.svg#fonts/SourceSansProBold") format("svg"); + font-weight: 700; + font-style: normal; +} +/*================================================= + TOP BAR +=================================================*/ +body #top-bar { + background: none; + border-bottom: none; +} + +body #top-bar #navigation > a, +body #top-bar #navigation > span { + border-left: none; +} + +body #top-bar .progress { + display: none; +} + +body #top-bar #navigation { + margin-left: auto; + margin-right: 0; +} + +/*================================================= + SIDE BAR +=================================================*/ +body .off-canvas .learn-sidebar .learn-brand { + box-shadow: none; +} + +body .off-canvas .learn-sidebar .learn-nav ul li ul li.active > a { + background-color: rgba(0, 0, 0, 0.1); + border-left: 4px solid mediumturquoise; +} + +/*================================================= + SHORTCODE UI +=================================================*/ +.tabs-wrapper.ui-theme-lite .tab { + background-color: inherit !important; +} + +/* +############################################################################### + Style sheet for the cards +############################################################################### +*/ +.hardware.active { + box-shadow: 0 0 15px #bbb; + border-radius: 5px; +} + +.hardware-image #cards-list:after { + content: ""; + display: block; + clear: both; +} + +.hardware-image .card { + margin-bottom: 20px; + width: 270px; + float: left; + min-height: 1px; + margin-right: 10px; + margin-left: 10px; +} + +.hardware-image .card .panel-body > h3 { + margin-top: 0; + margin-bottom: 5px; + font-size: 1.2em; +} + +.hardware-image .card-desc { + height: 135px; + overflow: hidden; +} + +.hardware-image .card .btn-group { + width: 100%; + margin-left: 0px; +} + +.hardware-image .card > .btn-group > .btn { + border-bottom: 0; +} + +.hardware-image .card > .btn-group { + border-left: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; + margin-left: 0px; +} + +.hardware-image .card-comment { + font-size: 0.8em; + margin-top: -5px; +} + +.hardware-image .card > .annotations { + text-align: center; + font-size: small; +} + +.hardware-image .card img { + margin: 1rem auto; +} + +.hardware-image .btn-group .btn.btn-info { + background-color: #5bc0de; + border-color: #46b8da; +} + +.hardware-image .btn-group .btn.btn-info:hover, +.btn.btn-info:focus { + background-color: #39b3d7; + border-color: #269abc; +} + +/*================================================= + App catalog +=================================================*/ +#filter-app-icon, +#filter-app-cards { + padding: 6px 12px; + margin-right: -2px; + border: none; +} + +#filter-app-cards, +#app-cards-list { + width: 100%; +} + +#app-cards-list:after { + content: ""; + display: block; + clear: both; +} + +#app-cards-list .app-card { + margin-bottom: 30px; + width: 28%; + float: left; + min-height: 1px; + margin-right: 15px; + margin-left: 15px; + border-radius: 3px; + position: relative; + height: 230px; +} + +#app-cards-list .app-title { + margin-top: 0; + margin-bottom: 5px; + font-size: 1.2em; + font-weight: 700; + line-height: 1.1; + padding: 1rem 1rem; + padding-bottom: 0; +} + +#app-cards-list .app-title .label { + font-size: 0.5em; + display: inline-block; + vertical-align: middle; + padding: 0.5em 0.6em; + padding-bottom: 0.3em; +} + +#app-cards-list .app-descr { + height: 120px; + overflow: hidden; + padding: 0.2rem 1rem; +} + +#app-cards-list .app-footer { + width: 100%; + position: absolute; + bottom: 0; +} + +#app-cards-list .app-buttons { + width: 100%; +} + +#app-cards-list .app-buttons > .btn { + border: 0; + font-size: 0.9em; + line-height: 1.58; + -webkit-appearance: none; +} + +/*# sourceMappingURL=custom.css.map */ diff --git a/themes/yunohost-docs/css/custom.css.map b/themes/yunohost-docs/css/custom.css.map new file mode 100644 index 00000000..6d5b30e8 --- /dev/null +++ b/themes/yunohost-docs/css/custom.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../scss/custom.scss","../scss/theme/light/_custom.scss","../scss/theme/dark/_custom.scss","../scss/theme/_global.scss"],"names":[],"mappings":"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EACE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;AACA;EACE;;;AAGF;EACE;;;AAGF;AACA;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAGF;EACE;;;AAGF;AACA;EACE;;;AAGF;EACE;;;AAGF;AACA;EACE;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;EAME;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EAIA;EACA;;AAGF;AAAA;AAAA;AAIA;EACE;EACA;;;AAGF;AAAA;EAEE;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;AAAA;AAAA;AAIA;EACE;;;AAGF;EACE;EACA;;;AAGF;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAMA;EACE;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;AAAA;EAEE;EACA;;;AAGF;AAAA;AAAA;AAIA;AAAA;EAEE;EACA;EACA;;;AAGF;AAAA;EAEE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA","file":"custom.css"} \ No newline at end of file diff --git a/themes/yunohost-docs/fonts/SourceSansPro-Bold-webfont.eot b/themes/yunohost-docs/fonts/SourceSansPro-Bold-webfont.eot new file mode 100644 index 00000000..7a7d1566 Binary files /dev/null and b/themes/yunohost-docs/fonts/SourceSansPro-Bold-webfont.eot differ diff --git a/themes/yunohost-docs/fonts/SourceSansPro-Bold-webfont.svg b/themes/yunohost-docs/fonts/SourceSansPro-Bold-webfont.svg new file mode 100644 index 00000000..0452c4e1 --- /dev/null +++ b/themes/yunohost-docs/fonts/SourceSansPro-Bold-webfont.svg @@ -0,0 +1,855 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata> +This is a custom SVG webfont generated by Font Squirrel. +Copyright : 2010 2012 Adobe Systems Incorporated All Rights Reserved +Designer : Paul D Hunt +Foundry : Adobe Systems Incorporated +Foundry URL : httpwwwadobecomtype +</metadata> +<defs> +<font id="SourceSansProBold" horiz-adv-x="0" > +<font-face units-per-em="2048" ascent="1536" descent="-512" /> +<missing-glyph horiz-adv-x="425" /> +<glyph unicode="ff" horiz-adv-x="1343" d="M49 780v224l135 10v47q0 170 94.5 274.5t290.5 104.5q117 0 211 -37l-55 -223q-51 23 -119 22q-55 0 -88 -34.5t-33 -104.5v-47h346v53q0 176 90.5 283.5t282.5 107.5q103 0 203 -37l-53 -221q-57 20 -105 21q-117 0 -116 -146v-61h182v-236h-182v-780h-302v780h-346 v-780h-301v780h-135z" /> +<glyph unicode="ft" horiz-adv-x="1409" d="M49 780v224l135 10v55q0 176 90.5 283.5t284.5 107.5q100 0 203 -37l-55 -221q-57 20 -105 21q-117 0 -117 -146v-61h330l35 270h250v-270h243v-236h-243v-407q0 -162 131 -162q43 0 96 20l47 -219q-121 -37 -225 -37q-350 0 -350 394v411h-314v-780h-301v780h-135z" /> +<glyph unicode=" " horiz-adv-x="425" /> +<glyph unicode="	" horiz-adv-x="425" /> +<glyph unicode=" " horiz-adv-x="425" /> +<glyph unicode="!" horiz-adv-x="696" d="M166 164q0 82 52 136t130 54t130 -54t52 -136q0 -80 -52 -134.5t-130 -54.5t-130 54.5t-52 134.5zM197 1372h303l-11 -272l-43 -627h-196l-43 627z" /> +<glyph unicode=""" horiz-adv-x="1099" d="M156 1405h303l-10 -272l-60 -408h-164l-59 408zM641 1405h303l-10 -272l-60 -408h-163l-62 408z" /> +<glyph unicode="#" horiz-adv-x="1081" d="M70 383v192h174l28 226h-161v192h186l43 338h172l-41 -338h213l43 338h172l-41 -338h162v-192h-186l-27 -226h172v-192h-195l-47 -383h-174l45 383h-211l-47 -383h-174l45 383h-151zM420 575h211l28 226h-213z" /> +<glyph unicode="$" horiz-adv-x="1081" d="M80 135l131 203q160 -119 293 -119q166 0 166 141q0 49 -40 91.5t-100.5 71t-130 67.5t-130 80t-100.5 110.5t-40 155.5q0 150 83 250t228 129v211h199v-207q168 -25 305 -168l-151 -172q-113 102 -224 102q-152 0 -151 -131q0 -45 40 -83t100 -64.5t130 -64.5t130.5 -79 t100 -113.5t39.5 -164.5q0 -152 -81.5 -256.5t-237.5 -136.5v-213h-199v205q-219 27 -360 155z" /> +<glyph unicode="%" horiz-adv-x="1755" d="M53 938q0 197 92.5 309.5t239.5 112.5t240.5 -112.5t93.5 -309.5t-93.5 -311.5t-240.5 -114.5t-239.5 114.5t-92.5 311.5zM262 938q0 -258 123 -258t123 258q0 254 -123 254t-123 -254zM432 -25l721 1385h172l-719 -1385h-174zM1036 401.5q0 196.5 93.5 309t241 112.5 t240.5 -112.5t93 -309t-93 -311.5t-240.5 -115t-241 115t-93.5 311.5zM1247 401q0 -258 123 -258t123 258q0 254 -123 254t-123 -254z" /> +<glyph unicode="&" horiz-adv-x="1366" d="M51 356q0 129 64.5 216t179.5 161q-82 154 -82 277q0 147 99.5 248.5t262.5 101.5q150 0 239 -82t89 -221q0 -117 -73.5 -204t-204.5 -175q111 -129 268 -244q106 137 154 320h274q-76 -250 -223 -451q135 -70 231 -84l-72 -244q-164 33 -342 136q-182 -135 -419 -136 q-209 0 -327 110t-118 271zM336 375q0 -76 55 -123t144 -47q82 0 170 53q-164 131 -279 277q-90 -80 -90 -160zM461 1012q0 -70 43 -160q84 49 127 96t43 109q0 104 -92 104q-51 0 -86 -40.5t-35 -108.5z" /> +<glyph unicode="'" horiz-adv-x="614" d="M156 1405h303l-10 -272l-60 -408h-164l-59 408z" /> +<glyph unicode="(" horiz-adv-x="704" d="M147.5 569q-0.5 496 270.5 936l188 -78q-215 -383 -215 -858t215 -858l-188 -78q-270 440 -270.5 936z" /> +<glyph unicode=")" horiz-adv-x="704" d="M98 -289q217 381 217 858.5t-217 857.5l189 78q270 -440 270 -935.5t-270 -936.5z" /> +<glyph unicode="*" horiz-adv-x="935" d="M78 1118l47 148l237 -49l27 241h158l26 -244l236 52l49 -148l-221 -100l121 -213l-125 -90l-164 182l-166 -182l-125 90l121 213z" /> +<glyph unicode="+" horiz-adv-x="1081" d="M70 569v213h360v377h221v-377h361v-213h-361v-376h-221v376h-360z" /> +<glyph unicode="," horiz-adv-x="614" d="M94 -238q111 39 171.5 104.5t60.5 145.5h-17q-76 0 -129 46t-53 124q0 76 54.5 124t133.5 48q100 0 154.5 -74.5t54.5 -209.5q0 -170 -95 -292t-273 -175z" /> +<glyph unicode="-" horiz-adv-x="679" d="M88 412v213h504v-213h-504z" /> +<glyph unicode="." horiz-adv-x="614" d="M125 164q0 82 52 136t130 54t130 -54t52 -136q0 -80 -52 -134.5t-130 -54.5t-130 54.5t-52 134.5z" /> +<glyph unicode="/" horiz-adv-x="694" d="M27 -328l411 1782h197l-412 -1782h-196z" /> +<glyph unicode="0" horiz-adv-x="1081" d="M76 655q0 324 125 497t340 173t340 -173t125 -497q0 -326 -126 -503t-339 -177t-339 177.5t-126 502.5zM360 655q1 -446 181 -446q86 0 133 99.5t47 347t-47 342t-133 94.5t-133.5 -94.5t-47.5 -342.5z" /> +<glyph unicode="1" horiz-adv-x="1081" d="M143 0v244h283v751h-244v187q182 35 324 118h221v-1056h244v-244h-828z" /> +<glyph unicode="2" horiz-adv-x="1081" d="M61 1118q100 106 200.5 156.5t236.5 50.5q193 0 311.5 -113.5t118.5 -300.5q0 -147 -108.5 -307t-307.5 -366q131 16 217 16h262v-254h-915v172q156 147 233.5 224t167.5 179.5t127 176t37 141.5q0 94 -49 145.5t-135 51.5q-106 0 -232 -134z" /> +<glyph unicode="3" horiz-adv-x="1081" d="M45 160l139 190q135 -131 285 -131q96 0 153.5 41t57.5 113q0 94 -75 140t-275 46v213q307 0 307 174q0 68 -42 106t-118 38q-113 0 -244 -115l-151 184q193 166 410 166q205 0 326.5 -94t121.5 -262q0 -197 -217 -289v-8q117 -35 187.5 -116t70.5 -202 q0 -174 -139.5 -276.5t-343.5 -102.5q-295 1 -453 185z" /> +<glyph unicode="4" horiz-adv-x="1081" d="M39 311v207l475 782h369v-759h149v-230h-149v-311h-281v311h-563zM328 541h274v211q0 45 12 290h-8q-33 -72 -106 -219z" /> +<glyph unicode="5" horiz-adv-x="1081" d="M47 158l135 190q139 -129 281 -129q102 0 160.5 52.5t58.5 150.5q0 96 -56.5 148.5t-148.5 52.5q-55 0 -93 -13.5t-99 -52.5l-135 86l36 657h738v-253h-478l-22 -244q68 31 145 31q178 0 296 -103.5t118 -300.5q0 -209 -139 -332t-338 -123q-277 1 -459 183z" /> +<glyph unicode="6" horiz-adv-x="1081" d="M84 621q0 344 151.5 524t374.5 180q227 0 379 -156l-158 -180q-35 39 -91 65.5t-111 26.5q-254 0 -269 -405q49 61 123 99t138 38q176 0 281.5 -101.5t105.5 -299.5q0 -197 -125 -317t-308 -120q-207 0 -349 162t-142 484zM367 471q34 -270 202 -270q72 0 118 53t46 158 q0 188 -170 188q-115 0 -196 -129z" /> +<glyph unicode="7" horiz-adv-x="1081" d="M90 1047v253h905v-184q-113 -135 -181.5 -253t-106 -255t-53 -267t-25.5 -341h-303q18 334 93 566.5t255 480.5h-584z" /> +<glyph unicode="8" horiz-adv-x="1081" d="M86 332q0 201 221 319v8q-174 131 -174 308q0 164 116 261t300 97q178 0 286.5 -97.5t108.5 -258.5q0 -172 -170 -285v-8q225 -123 225 -340q0 -156 -128 -258.5t-332 -102.5q-197 0 -325 99.5t-128 257.5zM344 367q0 -84 58.5 -133.5t142.5 -49.5q78 0 126 42t48 120 q0 41 -16.5 72t-63.5 60.5t-79 44t-116 50.5q-100 -91 -100 -206zM397 967q0 -74 55.5 -120t168.5 -89q80 92 79 190q0 76 -42 122t-115 46q-63 0 -104.5 -39t-41.5 -110z" /> +<glyph unicode="9" horiz-adv-x="1081" d="M70 889q0 197 124.5 316.5t307.5 119.5q207 0 350 -162t143 -483q0 -344 -152.5 -524.5t-373.5 -180.5q-225 0 -381 156l160 180q33 -39 89 -65.5t112 -26.5q254 0 268 406q-49 -61 -123 -99.5t-137 -38.5q-174 0 -280.5 101.5t-106.5 300.5zM344 889q0 -189 172 -189 q117 0 195 129q-35 270 -203 271q-72 0 -118 -53.5t-46 -157.5z" /> +<glyph unicode=":" horiz-adv-x="614" d="M125 164q0 82 52 136t130 54t130 -54t52 -136q0 -80 -52 -134.5t-130 -54.5t-130 54.5t-52 134.5zM125 827q0 82 52 136.5t130 54.5t130 -54.5t52 -136.5q0 -80 -52 -134t-130 -54t-130 54t-52 134z" /> +<glyph unicode=";" horiz-adv-x="614" d="M94 -238q111 39 171.5 104.5t60.5 145.5h-17q-76 0 -129 46t-53 124q0 76 54.5 124t133.5 48q100 0 154.5 -74.5t54.5 -209.5q0 -170 -95 -292t-273 -175zM125 827q0 82 52 136.5t130 54.5t130 -54.5t52 -136.5q0 -80 -52 -134t-130 -54t-130 54.5t-52 133.5z" /> +<glyph unicode="<" horiz-adv-x="1081" d="M70 575v209l942 363v-248l-361 -119l-276 -96v-8l276 -96l361 -119v-248z" /> +<glyph unicode="=" horiz-adv-x="1081" d="M70 332v211h942v-211h-942zM70 809v211h942v-211h-942z" /> +<glyph unicode=">" horiz-adv-x="1081" d="M70 213v248l360 119l277 96v8l-277 96l-360 119v248l942 -363v-209z" /> +<glyph unicode="?" horiz-adv-x="948" d="M84 1210q156 186 373 187q182 0 293.5 -88t111.5 -262q0 -70 -31.5 -132.5t-75.5 -110.5t-86 -95t-69 -107.5t-20 -128.5h-265q-14 96 24 183t90 140.5t98 116t46 111.5q0 61 -36.5 95t-100.5 34q-92 0 -186 -94zM266 164q0 82 51.5 136t129 54t130 -54t52.5 -136 q0 -80 -52.5 -134.5t-130 -54.5t-129 54.5t-51.5 134.5z" /> +<glyph unicode="@" horiz-adv-x="1849" d="M100 420q0 420 268.5 685t655.5 265q330 0 527.5 -202.5t197.5 -526.5q0 -262 -143.5 -412.5t-323.5 -150.5q-90 0 -154.5 42t-80.5 113h-5q-43 -59 -112.5 -97t-132.5 -38q-123 0 -197 83t-74 225q0 195 121 348t293 153q106 0 156 -102h4l28 86h187l-94 -451 q-43 -176 94 -176q96 0 170 103.5t74 265.5q0 240 -138.5 397.5t-421.5 157.5q-276 0 -486 -214t-210 -546q0 -289 171 -443.5t427 -154.5q160 0 311 80l66 -164q-182 -98 -401 -98q-156 0 -294.5 48t-247 141t-172 243t-63.5 340zM754 424q0 -137 106 -137q66 0 135 92 l49 276q-31 59 -94 60q-86 0 -141 -94.5t-55 -196.5z" /> +<glyph unicode="A" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430z" /> +<glyph unicode="B" horiz-adv-x="1236" d="M156 0v1335h456q494 0 494 -331q0 -96 -57.5 -178.5t-167.5 -110.5v-8q290 -53 290 -312q0 -99 -36 -172.5t-108 -123.5q-144 -99 -376 -99h-495zM459 233h168q250 0 250 183q0 168 -250 168h-168v-351zM459 797h139q213 0 213 164q0 141 -209 141h-143v-305z" /> +<glyph unicode="C" horiz-adv-x="1187" d="M92 659q0 322 184.5 511.5t452.5 189.5q225 0 395 -174l-166 -187q-111 100 -225 101q-143 0 -237.5 -117t-94.5 -313q0 -203 88.5 -318.5t235.5 -115.5q145 0 254 118l166 -182q-168 -197 -424 -197q-272 0 -450.5 180t-178.5 504z" /> +<glyph unicode="D" horiz-adv-x="1282" d="M139 0v1335h379q317 0 493.5 -163.5t176.5 -497.5t-175 -504t-478 -170h-396zM442 244h58q379 0 379 430q0 227 -98.5 322.5t-280.5 95.5h-58v-848z" /> +<glyph unicode="E" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858z" /> +<glyph unicode="F" horiz-adv-x="1071" d="M156 0v1335h843v-254h-540v-309h461v-254h-461v-518h-303z" /> +<glyph unicode="G" horiz-adv-x="1302" d="M92 659q0 322 188.5 511.5t469.5 189.5q242 0 415 -174l-166 -187q-111 100 -245 101q-156 0 -254.5 -116t-98.5 -314q0 -209 95.5 -321.5t281.5 -112.5q90 0 142 40v230h-222v246h490v-615q-80 -70 -199 -116t-250 -46q-283 0 -465 179t-182 505z" /> +<glyph unicode="H" horiz-adv-x="1376" d="M156 0v1335h303v-514h461v514h301v-1335h-301v557h-461v-557h-303z" /> +<glyph unicode="I" horiz-adv-x="614" d="M156 0v1335h303v-1335h-303z" /> +<glyph unicode="J" horiz-adv-x="1038" d="M31 217l205 152q76 -133 186 -133q86 0 126 52t40 181v866h303v-891q0 -207 -108.5 -338t-319.5 -131q-295 0 -432 242z" /> +<glyph unicode="K" horiz-adv-x="1255" d="M156 0v1335h303v-547h6l399 547h330l-403 -532l479 -803h-332l-324 563l-155 -205v-358h-303z" /> +<glyph unicode="L" horiz-adv-x="1056" d="M156 0v1335h303v-1081h526v-254h-829z" /> +<glyph unicode="M" horiz-adv-x="1558" d="M156 0v1335h319l223 -600l80 -233h8l80 233l217 600h320v-1335h-283v489q0 104 39 455h-8l-109 -309l-206 -518h-121l-205 518l-107 309h-8q39 -350 39 -455v-489h-278z" /> +<glyph unicode="N" horiz-adv-x="1359" d="M156 0v1335h309l348 -663l133 -295h8q-39 383 -39 487v471h287v-1335h-309l-348 666l-131 290h-8q39 -399 38 -483v-473h-288z" /> +<glyph unicode="O" horiz-adv-x="1398" d="M92 674q0 322 166 504t440.5 182t440.5 -182.5t166 -503.5q0 -324 -166.5 -511.5t-440.5 -187.5q-272 0 -439 187.5t-167 511.5zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5t80 319.5q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312z" /> +<glyph unicode="P" horiz-adv-x="1239" d="M156 0v1335h487q522 0 522 -430q0 -223 -147.5 -337.5t-374.5 -114.5h-184v-453h-303zM459 692h166q245 0 245 211q0 104 -61 148.5t-184 44.5h-166v-404z" /> +<glyph unicode="Q" horiz-adv-x="1398" d="M86 674q0 322 166 504t440.5 182t440 -182.5t165.5 -503.5q0 -264 -113.5 -441.5t-310.5 -232.5q84 -125 293 -125q80 0 148 25l53 -222q-86 -43 -235 -43q-205 0 -354.5 96.5t-223.5 258.5q-217 45 -343 225t-126 459zM395 674q0 -201 80 -319.5t217 -118.5t217 118.5 t80 319.5q0 199 -80 312.5t-217 113.5t-217 -113.5t-80 -312.5z" /> +<glyph unicode="R" horiz-adv-x="1259" d="M156 0v1335h481q516 0 516 -415q0 -279 -238 -385l302 -535h-338l-256 481h-164v-481h-303zM459 721h153q244 0 244 199q0 94 -60.5 135t-183.5 41h-153v-375z" /> +<glyph unicode="S" horiz-adv-x="1134" d="M70 168l174 207q160 -139 327 -139q186 0 187 129q0 68 -86 112q-23 12 -107 47l-172 74q-117 47 -193.5 138t-76.5 227q0 168 135 282.5t340 114.5q254 0 430 -176l-151 -191q-139 106 -279 107q-78 0 -124 -33t-46 -88q0 -37 27.5 -64.5t55.5 -41t97 -42.5l8 -3 q2 -1 7.5 -3t9.5 -4l170 -69q264 -106 264 -363q0 -174 -136 -294t-366 -120q-286 0 -495 193z" /> +<glyph unicode="T" horiz-adv-x="1136" d="M49 1081v254h1036v-254h-366v-1081h-301v1081h-369z" /> +<glyph unicode="U" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h290v-717q0 -332 -132 -487.5t-396 -155.5t-398 156.5t-134 486.5z" /> +<glyph unicode="V" horiz-adv-x="1136" d="M-16 1335h319l162 -622q18 -66 51 -208.5t55 -219.5h9q23 78 55.5 220t50.5 208l158 622h309l-403 -1335h-363z" /> +<glyph unicode="W" horiz-adv-x="1662" d="M27 1335h309l92 -624q18 -139 55 -422h9q29 164 77 422l144 624h256l145 -624q27 -135 80 -422h8q20 170 53 422l93 624h288l-237 -1335h-379l-131 606q-31 150 -53 309h-9q-43 -258 -53 -309l-127 -606h-373z" /> +<glyph unicode="X" horiz-adv-x="1159" d="M23 0l368 686l-348 649h338l115 -252q18 -35 52 -110.5t46 -104.5h8q49 137 84 215l107 252h321l-346 -663l369 -672h-336l-131 272q-49 96 -101 220h-8q-43 -111 -92 -220l-125 -272h-321z" /> +<glyph unicode="Y" horiz-adv-x="1073" d="M-16 1335h321l121 -307q37 -106 109 -295h8q20 55 58 152.5t54 142.5l119 307h316l-404 -860v-475h-301v475z" /> +<glyph unicode="Z" horiz-adv-x="1105" d="M72 0v182l590 899h-535v254h907v-182l-590 -899h594v-254h-966z" /> +<glyph unicode="[" horiz-adv-x="704" d="M178 -311v1761h432v-160h-207v-1442h207v-159h-432z" /> +<glyph unicode="\" horiz-adv-x="694" d="M57 1454h197l414 -1782h-199z" /> +<glyph unicode="]" horiz-adv-x="704" d="M94 -152h209v1442h-209v160h432v-1761h-432v159z" /> +<glyph unicode="^" horiz-adv-x="1081" d="M102 561l318 811h242l317 -811h-248l-94 262l-92 277h-8l-93 -277l-94 -262h-248z" /> +<glyph unicode="_" horiz-adv-x="1024" d="M25 -117h974v-170h-974v170z" /> +<glyph unicode="`" horiz-adv-x="1136" d="M262 1483h291l182 -307h-219z" /> +<glyph unicode="a" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM383 305q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168z" /> +<glyph unicode="b" horiz-adv-x="1173" d="M133 0v1436h301v-353l-8 -155q124 112 265 112h3q184 0 292 -140t108 -374q0 -252 -127 -401.5t-301 -149.5q-143 0 -265 131h-8l-24 -106h-236zM434 287q72 -66 162 -66q84 0 136 75t52 224q0 274 -176 275q-90 0 -174 -93v-415z" /> +<glyph unicode="c" horiz-adv-x="956" d="M74 508q0 244 153.5 388t374.5 144q184 0 297 -116l-137 -187q-72 59 -141 60q-109 0 -173.5 -78t-64.5 -211q0 -131 63.5 -210t163.5 -79q90 0 183 74l120 -191q-145 -127 -338 -127q-219 0 -360 142.5t-141 390.5z" /> +<glyph unicode="d" horiz-adv-x="1173" d="M80 508q0 240 126 386t296 146q137 0 250 -106l-13 156v346h301v-1436h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210z" /> +<glyph unicode="e" horiz-adv-x="1056" d="M74 508q0 238 143 385t336 147q209 0 320.5 -135t111.5 -352q0 -78 -12 -127h-608q39 -221 264 -221q109 0 219 67l100 -182q-168 -115 -360 -115q-223 0 -368.5 143.5t-145.5 389.5zM362 612h367q0 199 -170 199q-74 0 -128.5 -50.5t-68.5 -148.5z" /> +<glyph unicode="f" horiz-adv-x="698" d="M49 780v224l135 10v55q0 176 90.5 283.5t284.5 107.5q101 0 203 -37l-55 -221q-57 20 -105 21q-117 0 -117 -146v-61h183v-236h-183v-780h-301v780h-135z" /> +<glyph unicode="g" horiz-adv-x="1093" d="M70 -174q0 123 145 205v8q-94 61 -94 172q0 113 115 190v9q-59 41 -98.5 110.5t-39.5 153.5q0 174 122 270t298 96q90 0 158 -24h371v-219h-162q33 -55 33 -133q0 -168 -112 -255t-288 -87q-59 0 -123 20q-37 -31 -37 -76q0 -76 154 -76h164q387 0 387 -258 q0 -160 -154.5 -262t-412.5 -102q-190 0 -308 64.5t-118 193.5zM317 -127q0 -55 60.5 -86t165.5 -31q100 0 166.5 36t66.5 89q0 45 -38 62.5t-117 17.5h-105q-94 0 -143 12q-56 -49 -56 -100zM379 674q0 -82 39 -126t100.5 -44t100 44t38.5 126q0 78 -38.5 121t-100 43 t-100.5 -42t-39 -122z" /> +<glyph unicode="h" horiz-adv-x="1169" d="M133 0v1436h301v-353l-14 -182q156 139 313 139q315 0 316 -409v-631h-301v592q0 109 -30 150.5t-95 41.5q-53 0 -94.5 -22.5t-94.5 -75.5v-686h-301z" /> +<glyph unicode="i" horiz-adv-x="565" d="M109 1323q0 70 49 113t125 43q78 0 126 -43t48 -113t-49.5 -114t-125 -44t-124.5 44t-49 114zM133 0v1016h301v-1016h-301z" /> +<glyph unicode="j" horiz-adv-x="569" d="M-104 -373l53 221q47 -14 80 -14q59 0 82.5 39t23.5 125v1018h301v-1010q0 -407 -360 -407h-2q-106 0 -178 28zM113 1323q0 70 49 113t124.5 43t125 -43t49.5 -113t-49.5 -114t-125 -44t-124.5 44t-49 114z" /> +<glyph unicode="k" horiz-adv-x="1122" d="M133 0v1436h293v-824h8l322 404h327l-356 -418l383 -598h-326l-229 395l-129 -145v-250h-293z" /> +<glyph unicode="l" horiz-adv-x="585" d="M133 315v1121h301v-1133q0 -84 53 -84q20 0 37 4l37 -223q-55 -25 -151 -25q-277 0 -277 340z" /> +<glyph unicode="m" horiz-adv-x="1755" d="M133 0v1016h246l20 -131h9q155 155 305 155h2q201 0 280 -170q80 82 154 126t166 44q317 0 317 -409v-631h-301v592q0 109 -29.5 150.5t-95.5 41.5q-76 0 -174 -98v-686h-301v592q0 109 -29.5 150.5t-95.5 41.5q-76 0 -172 -98v-686h-301z" /> +<glyph unicode="n" horiz-adv-x="1171" d="M133 0v1016h246l20 -129h9q161 153 323 153h2q315 0 316 -409v-631h-301v592q0 109 -30 150.5t-95 41.5q-53 0 -94.5 -22.5t-94.5 -75.5v-686h-301z" /> +<glyph unicode="o" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q203 0 348.5 -144t145.5 -388t-145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212t-48.5 212t-138.5 77q-92 0 -139 -77t-47 -212z" /> +<glyph unicode="p" horiz-adv-x="1173" d="M133 -377v1393h246l20 -101h9q139 125 288 125q184 0 291 -140t107 -376q0 -250 -127 -399.5t-301 -149.5q-129 1 -242 107l10 -162v-297h-301zM434 287q72 -66 162 -66q84 0 136 75t52 224q0 274 -176 275q-88 0 -174 -93v-415z" /> +<glyph unicode="q" horiz-adv-x="1171" d="M80 508q0 240 126 386t296 146q154 0 270 -125h8l25 101h235v-1393h-301v309l13 156q-117 -113 -256 -113q-190 0 -303 142.5t-113 390.5zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210z" /> +<glyph unicode="r" horiz-adv-x="815" d="M133 0v1016h246l20 -178h9q53 100 129.5 151t158.5 51q74 0 121 -20l-49 -260q-59 16 -111 16q-63 0 -124.5 -45t-98.5 -141v-590h-301z" /> +<glyph unicode="s" horiz-adv-x="907" d="M43 117l135 188q141 -106 262 -106q129 0 129 86q0 10 -3 20t-11 19.5t-15.5 16.5t-22.5 15.5t-25.5 14.5t-30 14t-30.5 12t-33.5 13.5t-35.5 13.5q-268 102 -268 299q0 141 106.5 229t282.5 88q184 0 359 -129l-135 -180q-119 86 -215 86q-115 0 -115 -80q0 -14 5 -25.5 t17.5 -22.5t22.5 -18t32.5 -16.5t35 -14.5t43 -16.5t42.5 -15.5q125 -45 200 -112.5t75 -192.5q0 -143 -109.5 -235.5t-308.5 -92.5q-98 0 -204.5 39.5t-184.5 102.5z" /> +<glyph unicode="t" horiz-adv-x="784" d="M35 780v224l155 12l35 270h250v-270h244v-236h-244v-407q0 -162 131 -162q43 0 96 20l48 -219q-119 -37 -226 -37q-350 1 -350 394v411h-139z" /> +<glyph unicode="u" horiz-adv-x="1161" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h301v-1016h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410z" /> +<glyph unicode="v" horiz-adv-x="1071" d="M25 1016h303l131 -479q27 -100 80 -314h8q35 154 78 314l133 479h289l-332 -1016h-348z" /> +<glyph unicode="w" horiz-adv-x="1589" d="M49 1016h299l98 -471q8 -51 22.5 -151.5t23.5 -149.5h8q41 231 59 301l113 471h260l115 -471q18 -74 63 -301h8q8 51 22.5 150.5t24.5 150.5l97 471h278l-244 -1016h-352l-92 406q-23 102 -55 296h-9q-45 -266 -51 -296l-90 -406h-344z" /> +<glyph unicode="x" horiz-adv-x="1052" d="M29 0l311 528l-293 488h324l90 -164q12 -29 86 -174h8q12 33 37.5 95.5t32.5 78.5l69 164h312l-295 -522l313 -494h-324l-98 168q-16 29 -48 88t-48 88h-8q-10 -25 -37 -84t-41 -92l-80 -168h-311z" /> +<glyph unicode="y" horiz-adv-x="1067" d="M25 1016h303l145 -436q23 -72 80 -289h8q45 193 70 289l123 436h288l-352 -1026q-76 -203 -174 -295t-270 -92q-76 0 -144 20l54 230q55 -12 67 -13q133 0 178 133l15 54z" /> +<glyph unicode="z" horiz-adv-x="942" d="M78 0v162l426 618h-379v236h754v-160l-426 -620h440v-236h-815z" /> +<glyph unicode="{" horiz-adv-x="704" d="M63 481v176q92 2 134.5 46.5t42.5 105.5t-10.5 168.5t-10.5 181.5q0 160 61.5 225.5t200.5 65.5h129v-160h-39q-63 0 -85.5 -29.5t-22.5 -113.5q0 -53 4 -163t4 -171q0 -113 -36 -167t-116 -73v-8q80 -18 116 -72.5t36 -166.5q0 -63 -4 -172t-4 -162q0 -84 22.5 -114 t85.5 -30h39v-159h-129q-139 0 -200.5 64.5t-61.5 226.5q0 74 10.5 180t10.5 170q0 61 -42 105t-135 46z" /> +<glyph unicode="|" horiz-adv-x="548" d="M176 -512v2048h197v-2048h-197z" /> +<glyph unicode="}" horiz-adv-x="704" d="M94 -152h39q63 0 86 30t23 114q0 53 -4.5 161.5t-4.5 172.5q0 113 36 167t116 72v8q-80 18 -116 72.5t-36 167.5q0 61 4.5 171t4.5 163q0 84 -22.5 113.5t-86.5 29.5h-39v160h129q139 0 200.5 -65.5t61.5 -225.5q0 -74 -10 -181.5t-10 -168.5t42 -105.5t134 -46.5v-176 q-92 -2 -134 -46t-42 -105q0 -63 10 -170t10 -180q0 -162 -61.5 -226.5t-200.5 -64.5h-129v159z" /> +<glyph unicode="~" horiz-adv-x="1081" d="M59 649q137 211 308 211q72 0 136 -39t117.5 -77.5t98.5 -38.5q80 0 147 118l156 -121q-137 -211 -307 -210q-72 0 -136.5 38.5t-117.5 77.5t-99 39q-79 0 -147 -119z" /> +<glyph unicode="¡" horiz-adv-x="696" d="M166 852q0 80 52 134t130 54t130 -54t52 -134q0 -82 -52 -136t-130 -54t-130 54t-52 136zM197 -356l10 272l43 627h196l43 -627l11 -272h-303z" /> +<glyph unicode="¢" horiz-adv-x="1081" d="M123 629q0 211 122 346t318 168v198h166v-190q158 -14 254 -115l-137 -184q-61 49 -117 55v-557q74 13 148 72l120 -191q-117 -100 -268 -120v-195h-166v195q-203 27 -321.5 163t-118.5 355zM416 629q0 -193 147 -256v512q-147 -66 -147 -256z" /> +<glyph unicode="£" horiz-adv-x="1081" d="M98 0v186q96 43 156.5 126t60.5 188q0 18 -4 55h-205v176l140 10h12q-33 98 -33 164q0 190 123 305t316 115q211 0 354 -166l-164 -164q-72 86 -162 86q-84 0 -131 -48t-47 -144q0 -57 23 -148h303v-186h-265q4 -37 5 -57q-1 -132 -93 -236v-8h531v-254h-920z" /> +<glyph unicode="¤" horiz-adv-x="1081" d="M41 322l125 127q-70 94 -70 227q0 129 68 223l-123 127l149 152l142 -144q98 51 209 51q106 0 209 -51l141 144l149 -152l-125 -127q70 -92 70 -223q0 -127 -70 -227l125 -127l-149 -152l-143 145q-96 -49 -207 -49t-207 49l-144 -145zM365 676q0 -90 50 -145.5 t125.5 -55.5t126 55.5t50.5 145.5t-50.5 145.5t-126 55.5t-125.5 -55.5t-50 -145.5z" /> +<glyph unicode="¥" horiz-adv-x="1081" d="M25 1300h309l104 -272q66 -180 103 -268h8q14 35 48 127t54 141l103 272h303l-301 -600h250v-143h-316v-113h316v-143h-316v-301h-301v301h-313v143h313v113h-313v143h250z" /> +<glyph unicode="¦" horiz-adv-x="548" d="M176 418h197v-930h-197v930zM176 639v897h197v-897h-197z" /> +<glyph unicode="§" horiz-adv-x="1081" d="M76 668q0 76 44 145.5t120 116.5q-59 70 -60 170q0 141 97.5 227t267.5 86q198 0 368 -133l-137 -188q-113 98 -215 98q-111 0 -110 -80q0 -39 57 -74t139 -69.5t163 -79.5t138.5 -124t57.5 -181q0 -170 -168 -273q47 -72 47 -157q0 -143 -103.5 -233.5t-289.5 -90.5 q-117 0 -223.5 44t-174.5 128l174 154q100 -104 223 -104.5t123 87.5q0 37 -39.5 69t-99 54.5t-130.5 58t-130 75.5t-99 112t-40 162zM330 690q0 -45 35.5 -83t77.5 -59.5t120 -56t119 -55.5q70 43 70 121q0 37 -19.5 66.5t-59.5 54t-78 43t-97.5 44.5t-96.5 44 q-71 -47 -71 -119z" /> +<glyph unicode="¨" horiz-adv-x="1136" d="M223 1312.5q0 61.5 40 101.5t102 40q63 0 103 -40t40 -101.5t-40 -102.5t-103 -41q-61 0 -101.5 41t-40.5 102.5zM629 1313q0 59 40 100t103.5 41t103 -41t39.5 -100q0 -61 -39.5 -102.5t-103 -41.5t-103.5 41t-40 103z" /> +<glyph unicode="©" horiz-adv-x="1536" d="M92 665.5q0 307.5 196.5 491.5t479.5 184t478.5 -184t195.5 -491q0 -309 -195.5 -496.5t-478.5 -187.5t-479.5 188t-196.5 495.5zM231 665.5q0 -247.5 154 -403.5t383 -156t383 156t154 403.5t-154 400.5t-383 153t-383 -153t-154 -400.5zM397 664q0 174 117 283.5 t279 109.5q150 0 270 -121l-113 -125q-66 70 -139 70q-94 0 -146.5 -61.5t-52.5 -155.5q0 -104 51.5 -166t137.5 -62q76 0 164 70l98 -139q-135 -106 -270 -107q-174 0 -285 110t-111 294z" /> +<glyph unicode="ª" horiz-adv-x="735" d="M59 721q0 109 91.5 167t291.5 79q-10 88 -100 88q-76 0 -184 -62l-76 142q156 88 297 88q133 0 204.5 -76t71.5 -227v-388h-170l-20 68h-8q-85 -84 -191 -84q-92 0 -149.5 59.5t-57.5 145.5zM262 737q0 -59 76 -59q49 0 104 51v115q-180 -23 -180 -107z" /> +<glyph unicode="«" horiz-adv-x="983" d="M100 410v213l275 295l112 -91l-227 -311l227 -311l-112 -90zM485 410v213l277 295l110 -91l-227 -311l227 -311l-110 -90z" /> +<glyph unicode="¬" horiz-adv-x="1081" d="M70 569v213h942v-589h-221v376h-721z" /> +<glyph unicode="­" horiz-adv-x="679" d="M88 412v213h504v-213h-504z" /> +<glyph unicode="®" horiz-adv-x="946" d="M66 1050.5q0 178.5 117.5 296t289.5 117.5q170 0 288 -117.5t118 -296t-118 -296t-288 -117.5q-172 0 -289.5 117.5t-117.5 296zM178 1050.5q0 -141.5 82 -227.5t213 -86t212 86t81 227.5t-81 227.5t-212 86t-213 -86t-82 -227.5zM307 852v403h182q74 0 120 -34.5 t46 -100.5q0 -76 -71 -110l84 -158h-123l-62 123h-59v-123h-117zM424 1057h43q29 0 45 16.5t16 40.5q0 53 -61 53h-43v-110z" /> +<glyph unicode="¯" horiz-adv-x="1136" d="M287 1212v191h565v-191h-565z" /> +<glyph unicode="°" horiz-adv-x="747" d="M80 1110q0 127 85 211t210 84t211 -84t86 -211t-86 -211t-211 -84t-210 84t-85 211zM238 1110q0 -68 39 -110t98 -42q61 0 99 42t38 110q0 66 -38 108t-99 42q-59 0 -98 -42t-39 -108z" /> +<glyph unicode="±" horiz-adv-x="1081" d="M70 0v213h942v-213h-942zM70 602v213h360v344h221v-344h361v-213h-361v-278h-221v278h-360z" /> +<glyph unicode="²" horiz-adv-x="770" d="M55 1561q123 164 305 163q135 0 215 -71.5t80 -198.5q0 -61 -33.5 -129t-70.5 -114t-109 -126h242v-184h-592v119q180 147 265 237.5t85 159.5q0 59 -30.5 92t-85.5 33q-72 0 -146 -96z" /> +<glyph unicode="³" horiz-adv-x="770" d="M55 1038l133 105q72 -98 170 -99q49 0 82 26t33 71q0 104 -190 104v127q162 0 161 98q0 39 -26.5 62.5t-73.5 23.5q-66 0 -131 -79l-125 110q68 72 135.5 104.5t159.5 32.5q115 0 197 -61t82 -162q0 -117 -117 -184q145 -57 145 -193q0 -109 -91 -178t-218 -69 q-217 -1 -326 161z" /> +<glyph unicode="´" horiz-adv-x="1136" d="M401 1176l183 307h290l-253 -307h-220z" /> +<glyph unicode="µ" horiz-adv-x="1173" d="M133 -410v1426h301v-592q0 -106 30 -149.5t95 -43.5q55 0 96 26t86 87v672h301v-1016h-245l-23 141h-8q-78 -150 -223 -149q-84 0 -127 45l18 -184v-263h-301z" /> +<glyph unicode="¶" horiz-adv-x="1302" d="M80 879q0 242 142.5 349t377.5 107h90v-932h-82q-229 0 -378.5 125t-149.5 351zM805 -164v1499h301v-1499h-301z" /> +<glyph unicode="·" horiz-adv-x="614" d="M125 655q0 82 52 136.5t130 54.5t130 -54.5t52 -136.5q0 -80 -52 -134t-130 -54t-130 54t-52 134z" /> +<glyph unicode="¸" horiz-adv-x="1136" d="M360 -332q170 18 170 90q1 57 -118 86l82 164h174l-41 -96q121 -39 121 -152q0 -100 -102.5 -152t-262.5 -61z" /> +<glyph unicode="¹" horiz-adv-x="770" d="M156 1477v135q131 18 229 88h176v-799h-223v576h-182z" /> +<glyph unicode="º" horiz-adv-x="763" d="M49 868q0 162 97.5 258.5t234.5 96.5t234.5 -96.5t97.5 -258.5q0 -160 -97.5 -256t-234.5 -96t-234.5 96.5t-97.5 255.5zM266 868q0 -184 115 -184q117 0 117 184q0 186 -117 187q-115 0 -115 -187z" /> +<glyph unicode="»" horiz-adv-x="983" d="M111 205l227 311l-227 311l112 91l275 -295v-213l-275 -295zM496 205l227 311l-227 311l112 91l277 -295v-213l-277 -295z" /> +<glyph unicode="¼" horiz-adv-x="1656" d="M94 1110v137q131 18 230 88h176v-798h-224v573h-182zM381 -25l721 1385h172l-719 -1385h-174zM956 178v111l289 510h275v-477h118v-144h-118v-178h-195v178h-369zM1161 322h164v84l10 239h-8l-82 -158z" /> +<glyph unicode="½" horiz-adv-x="1732" d="M94 1110v137q131 18 230 88h176v-798h-224v573h-182zM348 -25l721 1385h174l-721 -1385h-174zM1016 659q123 164 305 164q135 0 215 -71.5t80 -198.5q0 -61 -34 -129t-69.5 -113t-107.5 -127h240v-184h-592v119q180 147 265 237t85 160q0 59 -31 92t-86 33 q-72 0 -145 -96z" /> +<glyph unicode="¾" horiz-adv-x="1675" d="M49 674l133 104q72 -98 168 -98q51 0 84 25.5t33 70.5q0 104 -191 105v127q162 0 162 98q0 39 -27.5 62.5t-72.5 23.5q-65 0 -131 -80l-125 111q68 72 135.5 104.5t159.5 32.5q115 0 195.5 -61.5t80.5 -161.5q0 -115 -114 -185q63 -27 104 -77t41 -117q0 -109 -91 -177.5 t-218 -68.5q-217 0 -326 162zM426 -25l721 1385h172l-719 -1385h-174zM975 178v111l289 510h274v-477h119v-144h-119v-178h-197v178h-366zM1178 322h163v84l13 239h-8l-82 -158z" /> +<glyph unicode="¿" horiz-adv-x="948" d="M86 -29q0 70 32 132.5t76 109.5t87 95t69.5 107.5t20.5 127.5h262q14 -96 -24 -183.5t-90 -140.5t-98 -115.5t-46 -111.5q0 -61 38 -95t99 -34q92 0 186 94l166 -152q-156 -186 -372 -186q-182 0 -294 88t-112 264zM319 852q0 80 52.5 134t130.5 54t130 -54t52 -134 q0 -82 -52 -136t-130 -54t-130.5 54t-52.5 136z" /> +<glyph unicode="À" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM246 1683h319l166 -245h-239zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430z" /> +<glyph unicode="Á" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM426 1438l164 245h319l-243 -245h-240zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430z" /> +<glyph unicode="Â" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM236 1438l196 245h293l197 -245h-230l-110 125h-9l-108 -125h-229zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430z" /> +<glyph unicode="Ã" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM229 1440q14 135 75 206.5t145 71.5q61 0 141 -46t104 -46q57 0 80 92h154q-16 -135 -76.5 -206.5t-144.5 -71.5q-59 0 -139.5 46t-104.5 46q-59 0 -80 -92h-154zM436 553h287l-33 123q-20 72 -56 220 t-52 210h-9q-53 -246 -104 -430z" /> +<glyph unicode="Ä" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM231 1577q0 61 40 102t103.5 41t103.5 -41t40 -102t-40 -102t-103.5 -41t-103.5 41t-40 102zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430zM639 1577q0 61 40 102t101 41 q63 0 103.5 -41t40.5 -102t-40.5 -102t-103.5 -41q-61 0 -101 41t-40 102z" /> +<glyph unicode="Å" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM348 1628q0 90 63.5 145.5t166 55.5t167 -55.5t64.5 -145.5q0 -92 -63.5 -146.5t-168 -54.5t-167 54.5t-62.5 146.5zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430zM496 1628 q0 -41 23.5 -64.5t58.5 -23.5q37 0 60.5 23.5t23.5 64.5q0 39 -23.5 63.5t-60.5 24.5q-35 0 -58.5 -24.5t-23.5 -63.5z" /> +<glyph unicode="Æ" horiz-adv-x="1728" d="M-29 0l633 1335h998v-254h-510v-268h430v-252h-430v-307h530v-254h-834v305h-362l-139 -305h-316zM532 539h256v569h-8q-135 -322 -162 -379z" /> +<glyph unicode="Ç" horiz-adv-x="1187" d="M92 659q0 322 184.5 511.5t452.5 189.5q225 0 395 -174l-166 -187q-111 100 -225 101q-143 0 -237.5 -117t-94.5 -313q0 -203 88.5 -318.5t235.5 -115.5q145 -1 254 118l166 -182q-141 -166 -346 -190l-29 -70q119 -39 119 -152q0 -100 -102.5 -152t-260.5 -61l-22 121 q168 18 168 90q0 57 -119 86l70 138q-236 33 -383.5 209t-147.5 468z" /> +<glyph unicode="È" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM258 1683h320l165 -245h-241z" /> +<glyph unicode="É" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM436 1438l166 245h320l-246 -245h-240z" /> +<glyph unicode="Ê" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM246 1438l196 245h293l197 -245h-230l-108 125h-8l-111 -125h-229z" /> +<glyph unicode="Ë" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM244 1577q0 61 40 102t103.5 41t103 -41t39.5 -102t-39.5 -102t-103 -41t-103.5 41t-40 102zM649 1577q0 61 40 102t103.5 41t103.5 -41t40 -102t-40 -102t-103.5 -41t-103.5 41t-40 102z" /> +<glyph unicode="Ì" horiz-adv-x="614" d="M-25 1683h320l166 -245h-242zM156 0v1335h303v-1335h-303z" /> +<glyph unicode="Í" horiz-adv-x="614" d="M154 1438l165 245h320l-246 -245h-239zM156 0v1335h303v-1335h-303z" /> +<glyph unicode="Î" horiz-adv-x="614" d="M-37 1438l197 245h295l196 -245h-231l-109 125h-8l-108 -125h-232zM156 0v1335h303v-1335h-303z" /> +<glyph unicode="Ï" horiz-adv-x="614" d="M-39 1577q0 61 40 102t103.5 41t103.5 -41t40 -102t-40 -102t-103.5 -41t-103.5 41t-40 102zM156 0v1335h303v-1335h-303zM367 1577q0 61 39.5 102t103 41t103.5 -41t40 -102t-40 -102t-103.5 -41t-103 41t-39.5 102z" /> +<glyph unicode="Ð" horiz-adv-x="1343" d="M49 616v136l154 10v573h377q317 0 493 -163.5t176 -497.5t-175 -504t-478 -170h-393v616h-154zM504 244h57q379 0 379 430q0 227 -98.5 322.5t-280.5 95.5h-57v-330h258v-146h-258v-372z" /> +<glyph unicode="Ñ" horiz-adv-x="1359" d="M156 0v1335h309l348 -663l133 -295h8q-39 383 -39 487v471h287v-1335h-309l-348 666l-131 290h-8q39 -399 38 -483v-473h-288zM334 1440q14 135 74.5 206.5t144.5 71.5q59 0 139 -46t105 -46q59 0 80 92h153q-14 -135 -74.5 -206.5t-144.5 -71.5q-61 0 -141 46t-105 46 q-57 0 -80 -92h-151z" /> +<glyph unicode="Ò" horiz-adv-x="1398" d="M92 674q0 322 166 504t440.5 182t440.5 -182.5t166 -503.5q0 -324 -166.5 -511.5t-440.5 -187.5q-272 0 -439 187.5t-167 511.5zM367 1683h319l166 -245h-240zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5t80 319.5q0 199 -79.5 312.5t-217.5 113.5 q-135 0 -216 -114t-81 -312z" /> +<glyph unicode="Ó" horiz-adv-x="1398" d="M92 674q0 322 166 504t440.5 182t440.5 -182.5t166 -503.5q0 -324 -166.5 -511.5t-440.5 -187.5q-272 0 -439 187.5t-167 511.5zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5t80 319.5q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312zM547 1438 l164 245h319l-244 -245h-239z" /> +<glyph unicode="Ô" horiz-adv-x="1398" d="M92 674q0 322 166 504t440.5 182t440.5 -182.5t166 -503.5q0 -324 -166.5 -511.5t-440.5 -187.5q-272 0 -439 187.5t-167 511.5zM356 1438l197 245h293l196 -245h-229l-111 125h-8l-108 -125h-230zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5t80 319.5 q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312z" /> +<glyph unicode="Õ" horiz-adv-x="1398" d="M92 674q0 322 166 504t440.5 182t440.5 -182.5t166 -503.5q0 -324 -166.5 -511.5t-440.5 -187.5q-272 0 -439 187.5t-167 511.5zM350 1440q16 135 75.5 206.5t143.5 71.5q61 0 141.5 -46t104.5 -46q59 0 80 92h154q-16 -135 -77 -206.5t-145 -71.5q-59 0 -139 46t-104 46 q-59 0 -80 -92h-154zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5t80 319.5q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312z" /> +<glyph unicode="Ö" horiz-adv-x="1398" d="M92 674q0 322 166 504t440.5 182t440.5 -182.5t166 -503.5q0 -324 -166.5 -511.5t-440.5 -187.5q-272 0 -439 187.5t-167 511.5zM352 1577q0 61 40 102t103.5 41t103.5 -41t40 -102t-40 -102t-103.5 -41t-103.5 41t-40 102zM401 674q0 -201 81 -319.5t216 -118.5 q137 0 217 118.5t80 319.5q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312zM760 1577q0 61 40 102t101 41q63 0 103 -41t40 -102t-40 -102t-103 -41q-61 0 -101 41t-40 102z" /> +<glyph unicode="×" horiz-adv-x="1081" d="M98 381l291 293l-291 295l150 151l293 -295l293 295l149 -151l-291 -295l291 -293l-149 -152l-293 295l-293 -295z" /> +<glyph unicode="Ø" horiz-adv-x="1398" d="M80 35l141 176q-129 184 -129 463q0 322 166 504t440 182q211 0 361 -109l135 168l156 -121l-156 -194q111 -170 111 -430q0 -324 -166 -511.5t-441 -187.5q-193 0 -336 97l-124 -156zM401 674q0 -109 27 -205l451 559q-72 72 -181 72q-135 0 -216 -114t-81 -312z M539 291q72 -55 159 -55q137 0 217 118.5t80 319.5q0 86 -16 164z" /> +<glyph unicode="Ù" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h290v-717q0 -332 -132 -487.5t-396 -155.5t-398 156.5t-134 486.5zM348 1683h320l163 -245h-239z" /> +<glyph unicode="Ú" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h290v-717q0 -332 -132 -487.5t-396 -155.5t-398 156.5t-134 486.5zM526 1438l166 245h320l-246 -245h-240z" /> +<glyph unicode="Û" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h290v-717q0 -332 -132 -487.5t-396 -155.5t-398 156.5t-134 486.5zM336 1438l196 245h293l197 -245h-229l-109 125h-8l-111 -125h-229z" /> +<glyph unicode="Ü" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h290v-717q0 -332 -132 -487.5t-396 -155.5t-398 156.5t-134 486.5zM334 1577q0 61 40 102t103 41q61 0 101 -41t40 -102t-40 -102t-101 -41q-63 0 -103 41t-40 102zM739 1577q0 61 40 102 t103.5 41t103.5 -41t40 -102t-40 -102t-103.5 -41t-103.5 41t-40 102z" /> +<glyph unicode="Ý" horiz-adv-x="1073" d="M-16 1335h321l121 -307q37 -106 109 -295h8q20 55 58 152.5t54 142.5l119 307h316l-404 -860v-475h-301v475zM383 1438l166 245h319l-245 -245h-240z" /> +<glyph unicode="Þ" horiz-adv-x="1269" d="M164 0v1335h301v-202h184q524 0 525 -428q0 -225 -147.5 -339t-377.5 -114h-184v-252h-301zM465 492h168q244 0 244 213q0 100 -60.5 144t-183.5 44h-168v-401z" /> +<glyph unicode="ß" horiz-adv-x="1294" d="M133 0v997q0 207 124 333t361 126q199 0 309.5 -100.5t110.5 -241.5q0 -84 -40 -151.5t-79.5 -117.5t-39.5 -91q0 -31 26.5 -57.5t66.5 -47t87 -50.5t87 -63.5t66.5 -92t26.5 -132.5q0 -145 -99.5 -240.5t-277.5 -95.5q-152 0 -309 93l104 204q100 -74 195 -73 q51 0 82 27.5t31 70.5t-37 77t-90.5 61.5t-106.5 60t-90 89t-37 132.5q0 80 73 184.5t73 177.5q0 61 -35 100.5t-97 39.5q-92 0 -140 -68t-48 -188v-963h-297z" /> +<glyph unicode="à" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM268 1483h293l180 -307h-219zM383 305q0 -96 117 -96q82 0 168 86v178 q-285 -39 -285 -168z" /> +<glyph unicode="á" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM383 305q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168zM408 1176l182 307 h291l-254 -307h-219z" /> +<glyph unicode="â" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM258 1176l197 307h239l197 -307h-203l-108 161h-9l-110 -161h-203zM383 305 q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168z" /> +<glyph unicode="ã" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM236 1178q14 135 71.5 205.5t138.5 70.5q59 0 139.5 -45t104.5 -45q49 0 70 90 h153q-14 -135 -70.5 -205.5t-140.5 -70.5q-59 0 -139 46t-102 46q-51 0 -72 -92h-153zM383 305q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168z" /> +<glyph unicode="ä" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM229 1312.5q0 61.5 40 101.5t104 40q61 0 101 -40t40 -101.5t-40 -102.5 t-101 -41q-63 0 -103.5 41t-40.5 102.5zM383 305q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168zM635 1313q0 59 41 100t102.5 41t102.5 -41t41 -100q0 -61 -40 -102.5t-103.5 -41.5t-103.5 41t-40 103z" /> +<glyph unicode="å" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM344 1331q0 94 63.5 151.5t167.5 57.5q102 0 166 -57.5t64 -151.5t-64 -151.5 t-166 -57.5q-104 0 -167.5 57.5t-63.5 151.5zM383 305q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168zM492 1331q0 -43 23 -69.5t60 -26.5q35 0 58.5 26.5t23.5 69.5t-23.5 69.5t-58.5 26.5q-37 0 -60 -26.5t-23 -69.5z" /> +<glyph unicode="æ" horiz-adv-x="1605" d="M96 281q0 164 134.5 254t431.5 120q-10 145 -158 146q-108 0 -266 -92l-107 198q221 133 416 133q188 0 282 -153q135 154 301 153q195 0 299.5 -138t104.5 -355q0 -78 -12 -127h-586q16 -102 81.5 -155.5t162.5 -53.5q88 0 215 74l102 -195q-168 -115 -358 -115 q-207 0 -351 158q-197 -158 -391 -158q-135 0 -218 87.5t-83 218.5zM383 305q0 -96 117 -96q100 0 190 86q-23 63 -28 135l-3 43q-276 -39 -276 -168zM936 604h342q0 207 -158 207q-74 0 -123 -52.5t-61 -154.5z" /> +<glyph unicode="ç" horiz-adv-x="956" d="M74 508q0 244 153.5 388t374.5 144q184 0 297 -116l-137 -187q-72 59 -141 60q-109 0 -173.5 -78t-64.5 -211q0 -131 63.5 -210t163.5 -79q90 0 183 74l120 -191q-102 -91 -247 -118l-31 -72q119 -39 119 -152q0 -100 -102.5 -152t-260.5 -61l-22 121q168 18 168 90 q0 57 -119 86l69 138q-184 29 -298.5 168t-114.5 358z" /> +<glyph unicode="è" horiz-adv-x="1056" d="M74 508q0 238 143 385t336 147q209 0 320.5 -135t111.5 -352q0 -78 -12 -127h-608q39 -221 264 -221q109 0 219 67l100 -182q-168 -115 -360 -115q-223 0 -368.5 143.5t-145.5 389.5zM248 1483h291l182 -307h-221zM362 612h367q0 199 -170 199q-74 0 -128.5 -50.5 t-68.5 -148.5z" /> +<glyph unicode="é" horiz-adv-x="1056" d="M74 508q0 238 143 385t336 147q209 0 320.5 -135t111.5 -352q0 -78 -12 -127h-608q39 -221 264 -221q109 0 219 67l100 -182q-168 -115 -360 -115q-223 0 -368.5 143.5t-145.5 389.5zM362 612h367q0 199 -170 199q-74 0 -128.5 -50.5t-68.5 -148.5zM385 1176l182 307h291 l-254 -307h-219z" /> +<glyph unicode="ê" horiz-adv-x="1056" d="M74 508q0 238 143 385t336 147q209 0 320.5 -135t111.5 -352q0 -78 -12 -127h-608q39 -221 264 -221q109 0 219 67l100 -182q-168 -115 -360 -115q-223 0 -368.5 143.5t-145.5 389.5zM238 1176l194 307h240l196 -307h-202l-109 161h-8l-109 -161h-202zM362 612h367 q0 199 -170 199q-74 0 -128.5 -50.5t-68.5 -148.5z" /> +<glyph unicode="ë" horiz-adv-x="1056" d="M74 508q0 238 143 385t336 147q209 0 320.5 -135t111.5 -352q0 -78 -12 -127h-608q39 -221 264 -221q109 0 219 67l100 -182q-168 -115 -360 -115q-223 0 -368.5 143.5t-145.5 389.5zM207 1313q0 59 40 100t103.5 41t103.5 -41t40 -100q0 -61 -40 -102.5t-103.5 -41.5 t-103.5 41t-40 103zM362 612h367q0 199 -170 199q-74 0 -128.5 -50.5t-68.5 -148.5zM612 1313q0 59 40 100t103.5 41t103.5 -41t40 -100q0 -61 -40 -102.5t-103.5 -41.5t-103.5 41t-40 103z" /> +<glyph unicode="ì" horiz-adv-x="565" d="M-23 1483h291l183 -307h-220zM133 0v1016h301v-1016h-301z" /> +<glyph unicode="í" horiz-adv-x="565" d="M117 1176l180 307h291l-252 -307h-219zM133 0v1016h301v-1016h-301z" /> +<glyph unicode="î" horiz-adv-x="565" d="M-33 1176l197 307h239l195 -307h-203l-108 161h-8l-109 -161h-203zM133 0v1016h301v-1016h-301z" /> +<glyph unicode="ï" horiz-adv-x="565" d="M-63 1313q0 59 39.5 100t103 41t103.5 -41t40 -100q0 -61 -40 -102.5t-103.5 -41.5t-103 41t-39.5 103zM133 0v1016h301v-1016h-301zM342 1313q0 59 40 100t103.5 41t103.5 -41t40 -100q0 -61 -40 -102.5t-103.5 -41.5t-103.5 41t-40 103z" /> +<glyph unicode="ð" horiz-adv-x="1146" d="M86 467q0 211 124 338t292 127q137 0 217 -86q-53 158 -174 272l-291 -145l-78 133l238 119q-72 51 -185 108l131 183q158 -80 283 -175l293 148l78 -133l-246 -125q276 -281 276 -686q0 -252 -131 -411t-354 -159q-197 0 -335 136.5t-138 355.5zM360 467 q0 -117 60.5 -182.5t148.5 -65.5q90 0 142.5 78t52.5 231q0 61 -2 93q-80 88 -199 88q-92 0 -147.5 -61.5t-55.5 -180.5z" /> +<glyph unicode="ñ" horiz-adv-x="1171" d="M133 0v1016h246l20 -129h9q162 154 325 153q315 0 316 -409v-631h-301v592q0 109 -30 150.5t-95 41.5q-53 0 -94.5 -22.5t-94.5 -75.5v-686h-301zM291 1178q14 135 71.5 205.5t141.5 70.5q61 0 139 -45t102 -45q49 0 72 90h154q-16 -135 -72.5 -205.5t-140.5 -70.5 q-61 0 -139 46t-103 46q-51 0 -72 -92h-153z" /> +<glyph unicode="ò" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q203 0 348.5 -144t145.5 -388t-145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM262 1483h291l182 -307h-219zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212t-48.5 212t-138.5 77q-92 0 -139 -77t-47 -212z" /> +<glyph unicode="ó" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q203 0 348.5 -144t145.5 -388t-145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212t-48.5 212t-138.5 77q-92 0 -139 -77t-47 -212zM401 1176l183 307h290l-253 -307 h-220z" /> +<glyph unicode="ô" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q203 0 348.5 -144t145.5 -388t-145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM252 1176l197 307h239l197 -307h-203l-109 161h-8l-110 -161h-203zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212t-48.5 212 t-138.5 77q-92 0 -139 -77t-47 -212z" /> +<glyph unicode="õ" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q203 0 348.5 -144t145.5 -388t-145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM229 1178q14 135 71.5 205.5t139.5 70.5q59 0 139 -45t105 -45q49 0 70 90h153q-14 -135 -70.5 -205.5t-140.5 -70.5q-61 0 -139 46t-102 46 q-51 0 -72 -92h-154zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212t-48.5 212t-138.5 77q-92 0 -139 -77t-47 -212z" /> +<glyph unicode="ö" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q203 0 348.5 -144t145.5 -388t-145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM223 1312.5q0 61.5 40 101.5t102 40q63 0 103 -40t40 -101.5t-40 -102.5t-103 -41q-61 0 -101.5 41t-40.5 102.5zM383 508q0 -135 47 -212 t139 -77q90 0 138.5 77t48.5 212t-48.5 212t-138.5 77q-92 0 -139 -77t-47 -212zM629 1313q0 59 40 100t103.5 41t103 -41t39.5 -100q0 -61 -39.5 -102.5t-103 -41.5t-103.5 41t-40 103z" /> +<glyph unicode="÷" horiz-adv-x="1081" d="M70 569v213h942v-213h-942zM375 307.5q0 69.5 47 113.5t118.5 44t119 -44t47.5 -113.5t-47.5 -113.5t-119 -44t-118.5 44t-47 113.5zM375 1044.5q0 69.5 47 113.5t118.5 44t119 -44t47.5 -113.5t-47.5 -113.5t-119 -44t-118.5 44t-47 113.5z" /> +<glyph unicode="ø" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q145 0 271 -79l90 110l112 -88l-96 -119q117 -147 117 -356q0 -244 -145.5 -388.5t-348.5 -144.5q-152 0 -274 82l-88 -108l-113 86l96 119q-117 143 -116 354zM365 524q0 -82 14 -137l305 381q-45 39 -115 39q-94 0 -149 -78t-55 -205 zM451 250q47 -41 118 -41q92 0 147.5 78t55.5 205q0 84 -14 139z" /> +<glyph unicode="ù" horiz-adv-x="1161" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h301v-1016h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM274 1483h291l183 -307h-220z" /> +<glyph unicode="ú" horiz-adv-x="1161" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h301v-1016h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM414 1176l182 307h291l-254 -307h-219z" /> +<glyph unicode="û" horiz-adv-x="1161" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h301v-1016h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM264 1176l197 307h239l197 -307h-203l-108 161h-8l-111 -161h-203z" /> +<glyph unicode="ü" horiz-adv-x="1161" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h301v-1016h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM236 1312.5q0 61.5 39.5 101.5t101.5 40q63 0 103 -40t40 -101.5t-40 -102.5t-103 -41q-61 0 -101 41t-40 102.5zM641 1313 q0 59 40 100t103.5 41t103.5 -41t40 -100q0 -61 -40 -102.5t-103.5 -41.5t-103.5 41t-40 103z" /> +<glyph unicode="ý" horiz-adv-x="1067" d="M25 1016h303l145 -436q23 -72 80 -289h8q45 193 70 289l123 436h288l-352 -1026q-76 -203 -174 -295t-270 -92q-76 0 -144 20l54 230q55 -12 67 -13q133 0 178 133l15 54zM379 1176l182 307h291l-254 -307h-219z" /> +<glyph unicode="þ" horiz-adv-x="1173" d="M133 -377v1813h301v-353l-8 -143q117 100 254 100q190 0 302 -140t112 -376q0 -250 -127 -399.5t-301 -149.5q-131 0 -240 97l8 -152v-297h-301zM434 287q72 -66 162 -66q84 0 136 75t52 224q0 274 -176 275q-88 0 -174 -93v-415z" /> +<glyph unicode="ÿ" horiz-adv-x="1067" d="M25 1016h303l145 -436q23 -72 80 -289h8q45 193 70 289l123 436h288l-352 -1026q-76 -203 -174 -295t-270 -92q-76 0 -144 20l54 230q55 -12 67 -13q133 0 178 133l15 54zM201 1313q0 59 41 100t102.5 41t102 -41t40.5 -100q0 -61 -39.5 -102.5t-103 -41.5t-103.5 41 t-40 103zM606 1313q0 59 41 100t102.5 41t102.5 -41t41 -100q0 -61 -40 -102.5t-103.5 -41.5t-103.5 41t-40 103z" /> +<glyph unicode="Ā" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM289 1475v190h579v-190h-579zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430z" /> +<glyph unicode="ā" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM293 1212v191h565v-191h-565zM383 305q0 -96 117 -96q82 0 168 86v178 q-285 -39 -285 -168z" /> +<glyph unicode="Ă" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM299 1683h164q23 -94 115 -94q93 0 116 94h164q-29 -246 -280 -245q-129 0 -199 65.5t-80 179.5zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430z" /> +<glyph unicode="ă" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM291 1460h168q14 -119 116 -119q98 0 117 119h168q-4 -121 -76.5 -202.5 t-208 -81.5t-208 81.5t-76.5 202.5zM383 305q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168z" /> +<glyph unicode="Ą" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335q-82 -8 -134.5 -63.5t-52.5 -120.5q0 -37 22.5 -57.5t57.5 -20.5q39 0 80 29l70 -152q-94 -72 -213 -72q-102 0 -169 51.5t-67 141.5q0 86 52.5 156.5t113.5 107.5h-80l-82 317h-409l-82 -317h-307zM436 553h287l-33 123q-20 72 -56 220 t-52 210h-9q-53 -246 -104 -430z" /> +<glyph unicode="ą" horiz-adv-x="1093" d="M96 281q0 162 136.5 252t435.5 120q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582q-92 -27 -136.5 -75t-44.5 -99q0 -39 26 -58.5t60 -19.5q37 0 74 25l62 -135q-84 -68 -207 -68q-94 0 -155.5 49t-61.5 137q0 80 44 142.5t97 97.5 l-27 108h-6q-147 -129 -297 -129q-135 0 -218 87.5t-83 218.5zM383 305q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168z" /> +<glyph unicode="Ć" horiz-adv-x="1187" d="M92 659q0 322 184.5 511.5t452.5 189.5q225 0 395 -174l-166 -187q-111 100 -225 101q-143 0 -237.5 -117t-94.5 -313q0 -203 88.5 -318.5t235.5 -115.5q145 0 254 118l166 -182q-168 -197 -424 -197q-272 0 -450.5 180t-178.5 504zM549 1438l164 245h319l-244 -245h-239 z" /> +<glyph unicode="ć" horiz-adv-x="956" d="M74 508q0 244 153.5 388t374.5 144q184 0 297 -116l-137 -187q-72 59 -141 60q-109 0 -173.5 -78t-64.5 -211q0 -131 63.5 -210t163.5 -79q90 0 183 74l120 -191q-145 -127 -338 -127q-219 0 -360 142.5t-141 390.5zM428 1176l180 307h293l-254 -307h-219z" /> +<glyph unicode="Ĉ" horiz-adv-x="1187" d="M92 659q0 322 184.5 511.5t452.5 189.5q225 0 395 -174l-166 -187q-111 100 -225 101q-143 0 -237.5 -117t-94.5 -313q0 -203 88.5 -318.5t235.5 -115.5q145 0 254 118l166 -182q-168 -197 -424 -197q-272 0 -450.5 180t-178.5 504zM358 1438l197 245h293l196 -245h-229 l-110 125h-9l-108 -125h-230z" /> +<glyph unicode="ĉ" horiz-adv-x="956" d="M74 508q0 244 153.5 388t374.5 144q184 0 297 -116l-137 -187q-72 59 -141 60q-109 0 -173.5 -78t-64.5 -211q0 -131 63.5 -210t163.5 -79q90 0 183 74l120 -191q-145 -127 -338 -127q-219 0 -360 142.5t-141 390.5zM279 1176l196 307h240l196 -307h-202l-111 161h-8 l-109 -161h-202z" /> +<glyph unicode="Ċ" horiz-adv-x="1187" d="M92 659q0 322 184.5 511.5t452.5 189.5q225 0 395 -174l-166 -187q-111 100 -225 101q-143 0 -237.5 -117t-94.5 -313q0 -203 88.5 -318.5t235.5 -115.5q145 0 254 118l166 -182q-168 -197 -424 -197q-272 0 -450.5 180t-178.5 504zM526 1593.5q0 69.5 49.5 113.5t125 44 t124.5 -44t49 -113.5t-49 -113.5t-124.5 -44t-125 44t-49.5 113.5z" /> +<glyph unicode="ċ" horiz-adv-x="956" d="M74 508q0 244 153.5 388t374.5 144q184 0 297 -116l-137 -187q-72 59 -141 60q-109 0 -173.5 -78t-64.5 -211q0 -131 63.5 -210t163.5 -79q90 0 183 74l120 -191q-145 -127 -338 -127q-219 0 -360 142.5t-141 390.5zM428 1323q0 70 47 114t119 44q74 0 121 -44t47 -114 t-47 -114t-121 -44q-72 0 -119 44t-47 114z" /> +<glyph unicode="Č" horiz-adv-x="1187" d="M92 659q0 322 184.5 511.5t452.5 189.5q225 0 395 -174l-166 -187q-111 100 -225 101q-143 0 -237.5 -117t-94.5 -313q0 -203 88.5 -318.5t235.5 -115.5q145 0 254 118l166 -182q-168 -197 -424 -197q-272 0 -450.5 180t-178.5 504zM358 1683h230l108 -124h9l110 124h229 l-196 -245h-293z" /> +<glyph unicode="č" horiz-adv-x="956" d="M74 508q0 244 153.5 388t374.5 144q184 0 297 -116l-137 -187q-72 59 -141 60q-109 0 -173.5 -78t-64.5 -211q0 -131 63.5 -210t163.5 -79q90 0 183 74l120 -191q-145 -127 -338 -127q-219 0 -360 142.5t-141 390.5zM279 1483h202l109 -162h8l111 162h202l-196 -307h-240 z" /> +<glyph unicode="Ď" horiz-adv-x="1282" d="M139 0v1335h379q317 0 493.5 -163.5t176.5 -497.5t-175 -504t-478 -170h-396zM291 1683h229l111 -124h8l109 124h229l-197 -245h-293zM442 244h58q379 0 379 430q0 227 -98.5 322.5t-280.5 95.5h-58v-848z" /> +<glyph unicode="ď" horiz-adv-x="1257" d="M80 508q0 240 126 386t296 146q137 0 250 -106l-13 156v346h301v-1436h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210zM1118 1577h195l-4 -141l-49 -314h-130z " /> +<glyph unicode="Đ" horiz-adv-x="1343" d="M49 616v136l154 10v573h377q317 0 493 -163.5t176 -497.5t-175 -504t-478 -170h-393v616h-154zM504 244h57q379 0 379 430q0 227 -98.5 322.5t-280.5 95.5h-57v-330h258v-146h-258v-372z" /> +<glyph unicode="đ" horiz-adv-x="1173" d="M80 487q0 227 126 369.5t296 142.5q137 0 250 -106l-13 156v90h-305v145h305v152h301v-152h140v-133l-140 -10v-1141h-252l-18 90h-8q-119 -115 -266 -115q-190 0 -303 136.5t-113 375.5zM389 492q0 -270 184 -271q98 0 166 92v375q-72 66 -168 66q-78 0 -130 -68 t-52 -194z" /> +<glyph unicode="Ē" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM299 1475v190h580v-190h-580z" /> +<glyph unicode="ē" horiz-adv-x="1056" d="M74 508q0 238 143 385t336 147q209 0 320.5 -135t111.5 -352q0 -78 -12 -127h-608q39 -221 264 -221q109 0 219 67l100 -182q-168 -115 -360 -115q-223 0 -368.5 143.5t-145.5 389.5zM270 1212v191h566v-191h-566zM362 612h367q0 199 -170 199q-74 0 -128.5 -50.5 t-68.5 -148.5z" /> +<glyph unicode="Ĕ" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM309 1683h164q23 -94 117 -94q92 0 115 94h163q-10 -115 -79.5 -180t-198.5 -65q-252 0 -281 245z" /> +<glyph unicode="ĕ" horiz-adv-x="1056" d="M74 508q0 238 143 385t336 147q209 0 320.5 -135t111.5 -352q0 -78 -12 -127h-608q39 -221 264 -221q109 0 219 67l100 -182q-168 -115 -360 -115q-223 0 -368.5 143.5t-145.5 389.5zM268 1460h168q14 -119 117 -119q51 0 81 33t36 86h168q-4 -121 -77 -202.5t-208 -81.5 t-208 81.5t-77 202.5zM362 612h367q0 199 -170 199q-74 0 -128.5 -50.5t-68.5 -148.5z" /> +<glyph unicode="Ė" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM416 1593.5q0 69.5 49 113.5t125 44t125 -44t49 -113.5t-49 -113.5t-125 -44t-125 44t-49 113.5z" /> +<glyph unicode="ė" horiz-adv-x="1056" d="M74 508q0 238 143 385t336 147q209 0 320.5 -135t111.5 -352q0 -78 -12 -127h-608q39 -221 264 -221q109 0 219 67l100 -182q-168 -115 -360 -115q-223 0 -368.5 143.5t-145.5 389.5zM362 612h367q0 199 -170 199q-74 0 -128.5 -50.5t-68.5 -148.5zM385 1323q0 70 47 114 t121 44t120 -44t46 -114t-46 -114t-120 -44t-121 44t-47 114z" /> +<glyph unicode="Ę" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-13q-70 -2 -123 -59.5t-53 -124.5q0 -37 26 -57.5t60 -20.5q33 0 74 29l70 -152q-92 -72 -215 -72q-100 0 -167 51.5t-67 141.5q0 86 49.5 155.5t110.5 108.5h-610z" /> +<glyph unicode="ę" horiz-adv-x="1056" d="M74 508q0 238 143 385t336 147q209 0 320.5 -135t111.5 -352q0 -78 -12 -127h-608q39 -221 264 -221q109 0 219 67l100 -182q-131 -90 -176 -146.5t-45 -117.5q0 -78 88 -78q31 0 72 25l61 -135q-84 -68 -207 -68q-94 0 -153.5 48t-59.5 138q0 125 115 226q-25 -6 -55 -7 q-223 0 -368.5 143.5t-145.5 389.5zM362 612h367q0 199 -170 199q-74 0 -128.5 -50.5t-68.5 -148.5z" /> +<glyph unicode="Ě" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM246 1683h229l111 -124h8l108 124h230l-197 -245h-293z" /> +<glyph unicode="ě" horiz-adv-x="1056" d="M74 508q0 238 143 385t336 147q209 0 320.5 -135t111.5 -352q0 -78 -12 -127h-608q39 -221 264 -221q109 0 219 67l100 -182q-168 -115 -360 -115q-223 0 -368.5 143.5t-145.5 389.5zM238 1483h202l109 -162h8l109 162h202l-196 -307h-240zM362 612h367q0 199 -170 199 q-74 0 -128.5 -50.5t-68.5 -148.5z" /> +<glyph unicode="Ĝ" horiz-adv-x="1302" d="M92 659q0 322 188.5 511.5t469.5 189.5q242 0 415 -174l-166 -187q-111 100 -245 101q-156 0 -254.5 -116t-98.5 -314q0 -209 95.5 -321.5t281.5 -112.5q90 0 142 40v230h-222v246h490v-615q-80 -70 -199 -116t-250 -46q-283 0 -465 179t-182 505zM408 1438l196 245h293 l197 -245h-232l-108 125h-9l-108 -125h-229z" /> +<glyph unicode="ĝ" horiz-adv-x="1093" d="M70 -174q0 123 145 205v8q-94 61 -94 172q0 113 115 190v9q-59 41 -98.5 110.5t-39.5 153.5q0 174 122 270t298 96q90 0 158 -24h371v-219h-162q33 -55 33 -133q0 -168 -112 -255t-288 -87q-59 0 -123 20q-37 -31 -37 -76q0 -76 154 -76h164q387 0 387 -258 q0 -160 -154.5 -262t-412.5 -102q-190 0 -308 64.5t-118 193.5zM199 1176l196 307h240l196 -307h-202l-111 161h-8l-109 -161h-202zM317 -127q0 -55 60.5 -86t165.5 -31q100 0 166.5 36t66.5 89q0 45 -38 62.5t-117 17.5h-105q-94 0 -143 12q-56 -49 -56 -100zM379 674 q0 -82 39 -126t100.5 -44t100 44t38.5 126q0 78 -38.5 121t-100 43t-100.5 -42t-39 -122z" /> +<glyph unicode="Ğ" horiz-adv-x="1302" d="M92 659q0 322 188.5 511.5t469.5 189.5q242 0 415 -174l-166 -187q-111 100 -245 101q-156 0 -254.5 -116t-98.5 -314q0 -209 95.5 -321.5t281.5 -112.5q90 0 142 40v230h-222v246h490v-615q-80 -70 -199 -116t-250 -46q-283 0 -465 179t-182 505zM469 1683h166 q23 -94 115 -94q94 0 116 94h164q-29 -245 -280.5 -245t-280.5 245z" /> +<glyph unicode="ğ" horiz-adv-x="1093" d="M70 -174q0 123 145 205v8q-94 61 -94 172q0 113 115 190v9q-59 41 -98.5 110.5t-39.5 153.5q0 174 122 270t298 96q90 0 158 -24h371v-219h-162q33 -55 33 -133q0 -168 -112 -255t-288 -87q-59 0 -123 20q-37 -31 -37 -76q0 -76 154 -76h164q387 0 387 -258 q0 -160 -154.5 -262t-412.5 -102q-190 0 -308 64.5t-118 193.5zM229 1460h168q18 -119 117 -119q102 0 117 119h168q-4 -121 -77 -202.5t-208 -81.5t-208 81.5t-77 202.5zM317 -127q0 -55 60.5 -86t165.5 -31q100 0 166.5 36t66.5 89q0 45 -38 62.5t-117 17.5h-105 q-94 0 -143 12q-56 -49 -56 -100zM379 674q0 -82 39 -126t100.5 -44t100 44t38.5 126q0 78 -38.5 121t-100 43t-100.5 -42t-39 -122z" /> +<glyph unicode="Ġ" horiz-adv-x="1302" d="M92 659q0 322 188.5 511.5t469.5 189.5q242 0 415 -174l-166 -187q-111 100 -245 101q-156 0 -254.5 -116t-98.5 -314q0 -209 95.5 -321.5t281.5 -112.5q90 0 142 40v230h-222v246h490v-615q-80 -70 -199 -116t-250 -46q-283 0 -465 179t-182 505zM575 1593.5 q0 69.5 49.5 113.5t125 44t125 -44t49.5 -113.5t-49.5 -113.5t-125 -44t-125 44t-49.5 113.5z" /> +<glyph unicode="ġ" horiz-adv-x="1093" d="M70 -174q0 123 145 205v8q-94 61 -94 172q0 113 115 190v9q-59 41 -98.5 110.5t-39.5 153.5q0 174 122 270t298 96q90 0 158 -24h371v-219h-162q33 -55 33 -133q0 -168 -112 -255t-288 -87q-59 0 -123 20q-37 -31 -37 -76q0 -76 154 -76h164q387 0 387 -258 q0 -160 -154.5 -262t-412.5 -102q-190 0 -308 64.5t-118 193.5zM317 -127q0 -55 60.5 -86t165.5 -31q100 0 166.5 36t66.5 89q0 45 -38 62.5t-117 17.5h-105q-94 0 -143 12q-56 -49 -56 -100zM348 1323q0 70 47 114t119 44q74 0 121 -44t47 -114t-47 -114t-121 -44 q-72 0 -119 44t-47 114zM379 674q0 -82 39 -126t100.5 -44t100 44t38.5 126q0 78 -38.5 121t-100 43t-100.5 -42t-39 -122z" /> +<glyph unicode="Ģ" horiz-adv-x="1302" d="M92 659q0 322 188.5 511.5t469.5 189.5q242 0 415 -174l-166 -187q-111 100 -245 101q-156 0 -254.5 -116t-98.5 -314q0 -209 95.5 -321.5t281.5 -112.5q90 0 142 40v230h-222v246h490v-615q-80 -70 -199 -116t-250 -46q-283 0 -465 179t-182 505zM530 -348 q168 18 168 76q0 53 -88 75l58 111q135 -14 191 -54t56 -118q0 -98 -102 -150.5t-260 -60.5z" /> +<glyph unicode="ģ" horiz-adv-x="1093" d="M70 -174q0 123 145 205v8q-94 61 -94 172q0 113 115 190v9q-59 41 -98.5 110.5t-39.5 153.5q0 174 122 270t298 96q90 0 158 -24h371v-219h-162q33 -55 33 -133q0 -168 -112 -255t-288 -87q-59 0 -123 20q-37 -31 -37 -76q0 -76 154 -76h164q387 0 387 -258 q0 -160 -154.5 -262t-412.5 -102q-190 0 -308 64.5t-118 193.5zM317 -127q0 -55 60.5 -86t165.5 -31q100 0 166.5 36t66.5 89q0 45 -38 62.5t-117 17.5h-105q-94 0 -143 12q-56 -49 -56 -100zM340 1286q0 98 101.5 151.5t260.5 61.5l23 -121q-168 -18 -168 -78q0 -53 88 -73 l-57 -111q-135 12 -191.5 52t-56.5 118zM379 674q0 -82 39 -126t100.5 -44t100 44t38.5 126q0 78 -38.5 121t-100 43t-100.5 -42t-39 -122z" /> +<glyph unicode="Ĥ" horiz-adv-x="1376" d="M156 0v1335h303v-514h461v514h301v-1335h-301v557h-461v-557h-303zM344 1438l197 245h293l196 -245h-229l-111 125h-8l-109 -125h-229z" /> +<glyph unicode="ĥ" horiz-adv-x="1169" d="M-63 1536l196 246h295l197 -246h-232l-108 123h-9l-108 -123h-231zM133 0v1436h301v-353l-14 -182q156 139 313 139q315 0 316 -409v-631h-301v592q0 109 -30 150.5t-95 41.5q-53 0 -94.5 -22.5t-94.5 -75.5v-686h-301z" /> +<glyph unicode="Ħ" horiz-adv-x="1456" d="M49 995v133l148 13v194h301v-194h460v194h302v-194h147v-146h-147v-995h-302v557h-460v-557h-301v995h-148zM498 821h460v174h-460v-174z" /> +<glyph unicode="ħ" horiz-adv-x="1169" d="M-6 1139v133l139 10v154h301v-152h346v-145h-346v-97l-14 -182q156 139 313 139q315 0 316 -409v-590h-301v551q0 109 -30 150.5t-95 41.5q-53 0 -94.5 -22.5t-94.5 -75.5v-645h-301v1139h-139z" /> +<glyph unicode="Ĩ" horiz-adv-x="614" d="M-41 1440q14 135 74.5 206.5t144.5 71.5q61 0 140 -46t106 -46q57 0 78 92h153q-14 -135 -74.5 -206.5t-144.5 -71.5q-61 0 -140 46t-106 46q-57 0 -79 -92h-152zM156 0v1335h303v-1335h-303z" /> +<glyph unicode="ĩ" horiz-adv-x="565" d="M-57 1178q16 137 72.5 206.5t140.5 69.5q59 0 138 -45t103 -45q51 0 72 90h154q-14 -135 -71.5 -205.5t-141.5 -70.5q-59 0 -138 46t-104 46q-49 0 -72 -92h-153zM133 0v1016h301v-1016h-301z" /> +<glyph unicode="Ī" horiz-adv-x="614" d="M18 1475v190h578v-190h-578zM156 0v1335h303v-1335h-303z" /> +<glyph unicode="ī" horiz-adv-x="565" d="M0 1212v191h565v-191h-565zM133 0v1016h301v-1016h-301z" /> +<glyph unicode="Į" horiz-adv-x="614" d="M86 -264q0 154 152 264h-82v1335h303v-1335q-154 -63 -154 -184q0 -37 24.5 -57.5t59.5 -20.5q39 0 76 29l70 -152q-92 -72 -216 -72q-102 0 -167.5 51.5t-65.5 141.5z" /> +<glyph unicode="į" horiz-adv-x="565" d="M84 -244q0 137 133 244h-84v1016h301v-1016q-147 -55 -147 -174q0 -39 25.5 -58.5t62.5 -19.5q23 0 71 25l62 -135q-37 -31 -97.5 -49.5t-109.5 -18.5q-94 0 -155.5 49t-61.5 137zM109 1323q0 70 49 113t124.5 43t125 -43t49.5 -113t-49.5 -114t-125 -44t-124.5 44 t-49 114z" /> +<glyph unicode="İ" horiz-adv-x="614" d="M133 1593.5q0 69.5 49 113.5t125 44t125 -44t49 -113.5t-49 -113.5t-125 -44t-125 44t-49 113.5zM156 0v1335h303v-1335h-303z" /> +<glyph unicode="ı" horiz-adv-x="565" d="M133 0v1016h301v-1016h-301z" /> +<glyph unicode="Ĵ" horiz-adv-x="1038" d="M31 217l205 152q76 -133 186 -133q86 0 126 52t40 181v866h303v-891q0 -207 -108.5 -338t-319.5 -131q-295 0 -432 242zM391 1438l197 245h293l196 -245h-229l-109 125h-8l-110 -125h-230z" /> +<glyph unicode="ĵ" horiz-adv-x="569" d="M-104 -373l53 221q47 -14 80 -14q59 0 82.5 39t23.5 125v1018h301v-1010q0 -408 -362 -407q-106 0 -178 28zM-29 1176l195 307h240l196 -307h-203l-108 161h-8l-109 -161h-203z" /> +<glyph unicode="Ķ" horiz-adv-x="1255" d="M156 0v1335h303v-547h6l399 547h330l-403 -532l479 -803h-332l-324 563l-155 -205v-358h-303zM467 -348q170 18 170 76q0 51 -90 75l57 111q135 -14 191.5 -54t56.5 -118q0 -98 -101.5 -150.5t-261.5 -60.5z" /> +<glyph unicode="ķ" horiz-adv-x="1122" d="M133 0v1436h293v-824h8l322 404h327l-356 -418l383 -598h-326l-229 395l-129 -145v-250h-293zM393 -348q168 18 168 76q0 53 -88 75l57 111q135 -14 191.5 -54t56.5 -118q0 -98 -102.5 -150.5t-259.5 -60.5z" /> +<glyph unicode="ĸ" horiz-adv-x="1122" d="M133 0v1016h301v-410h6l316 410h327l-348 -418l375 -598h-326l-229 387l-121 -147v-240h-301z" /> +<glyph unicode="Ĺ" horiz-adv-x="1056" d="M156 0v1335h303v-1081h526v-254h-829zM162 1438l166 245h319l-246 -245h-239z" /> +<glyph unicode="ĺ" horiz-adv-x="585" d="M133 315v1121h301v-1133q0 -84 53 -84q20 0 37 4l37 -223q-55 -25 -151 -25q-277 0 -277 340zM135 1550l166 246h320l-246 -246h-240z" /> +<glyph unicode="Ļ" horiz-adv-x="1056" d="M156 0v1335h303v-1081h526v-254h-829zM381 -348q170 18 170 76q0 51 -88 75l57 111q135 -14 191.5 -54t56.5 -118q0 -98 -102.5 -150.5t-262.5 -60.5z" /> +<glyph unicode="ļ" horiz-adv-x="585" d="M133 315v1121h301v-1133q0 -84 53 -84q20 0 37 4l37 -223q-55 -25 -151 -25q-277 0 -277 340zM178 -348q170 18 170 76q0 51 -88 75l57 111q135 -14 191.5 -54t56.5 -118q0 -98 -102.5 -150.5t-261.5 -60.5z" /> +<glyph unicode="Ľ" horiz-adv-x="1056" d="M156 0v1335h303v-1081h526v-254h-829zM711 1499h192l-4 -143l-49 -312h-129z" /> +<glyph unicode="ľ" horiz-adv-x="651" d="M133 315v1121h301v-1133q0 -84 53 -84q20 0 37 4l37 -223q-55 -25 -151 -25q-277 0 -277 340zM512 1577h193l-5 -141l-49 -314h-129z" /> +<glyph unicode="Ŀ" horiz-adv-x="1056" d="M156 0v1335h303v-1081h526v-254h-829zM657 674q0 80 51.5 134t129 54t130 -54t52.5 -134t-52.5 -135.5t-130 -55.5t-129 55.5t-51.5 135.5z" /> +<glyph unicode="ŀ" horiz-adv-x="927" d="M133 315v1121h301v-1133q0 -84 53 -84q20 0 37 4l37 -223q-55 -25 -151 -25q-277 0 -277 340zM565 674q0 80 51.5 134t129 54t130 -54t52.5 -134t-52.5 -135.5t-130 -55.5t-129 55.5t-51.5 135.5z" /> +<glyph unicode="Ł" horiz-adv-x="1071" d="M20 342v233l150 80v680h301v-532l356 194v-233l-356 -195v-315h526v-254h-827v422z" /> +<glyph unicode="ł" horiz-adv-x="620" d="M31 492v239l123 76v629h301v-480l133 80v-241l-133 -80v-412q0 -84 53 -84q20 0 37 4l37 -223q-59 -25 -152 -25q-276 0 -276 340v250z" /> +<glyph unicode="Ń" horiz-adv-x="1359" d="M156 0v1335h309l348 -663l133 -295h8q-39 383 -39 487v471h287v-1335h-309l-348 666l-131 290h-8q39 -399 38 -483v-473h-288zM528 1438l166 245h320l-246 -245h-240z" /> +<glyph unicode="ń" horiz-adv-x="1171" d="M133 0v1016h246l20 -129h9q162 154 325 153q315 0 316 -409v-631h-301v592q0 109 -30 150.5t-95 41.5q-53 0 -94.5 -22.5t-94.5 -75.5v-686h-301zM463 1176l182 307h291l-254 -307h-219z" /> +<glyph unicode="Ņ" horiz-adv-x="1359" d="M156 0v1335h309l348 -663l133 -295h8q-39 383 -39 487v471h287v-1335h-309l-348 666l-131 290h-8q39 -399 38 -483v-473h-288zM492 -348q170 18 170 76q0 51 -91 75l60 111q135 -14 190.5 -54t55.5 -118q0 -98 -101.5 -150.5t-261.5 -60.5z" /> +<glyph unicode="ņ" horiz-adv-x="1171" d="M133 0v1016h246l20 -129h9q162 154 325 153q315 0 316 -409v-631h-301v592q0 109 -30 150.5t-95 41.5q-53 0 -94.5 -22.5t-94.5 -75.5v-686h-301zM385 -348q170 18 170 76q0 51 -88 75l57 111q135 -14 191.5 -54t56.5 -118q0 -98 -102.5 -150.5t-261.5 -60.5z" /> +<glyph unicode="Ň" horiz-adv-x="1359" d="M156 0v1335h309l348 -663l133 -295h8q-39 383 -39 487v471h287v-1335h-309l-348 666l-131 290h-8q39 -399 38 -483v-473h-288zM338 1683h229l111 -124h8l109 124h229l-197 -245h-292z" /> +<glyph unicode="ň" horiz-adv-x="1171" d="M133 0v1016h246l20 -129h9q162 154 325 153q315 0 316 -409v-631h-301v592q0 109 -30 150.5t-95 41.5q-53 0 -94.5 -22.5t-94.5 -75.5v-686h-301zM315 1483h203l109 -162h8l108 162h203l-196 -307h-240z" /> +<glyph unicode="ʼn" horiz-adv-x="1744" d="M145 852q184 92 185 260q-6 -2 -19 -2q-68 0 -112.5 41t-44.5 109q0 76 44 121.5t113 45.5q92 0 142.5 -69.5t50.5 -198.5q0 -295 -293 -438zM702 0v1016h246l23 -129h6q162 154 328 153q315 0 315 -409v-631h-301v592q0 106 -29.5 149t-97.5 43q-53 0 -94 -22.5 t-94 -75.5v-686h-302z" /> +<glyph unicode="Ō" horiz-adv-x="1398" d="M92 674q0 322 166 504t440.5 182t440.5 -182.5t166 -503.5q0 -324 -166.5 -511.5t-440.5 -187.5q-272 0 -439 187.5t-167 511.5zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5t80 319.5q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312zM410 1475 v190h579v-190h-579z" /> +<glyph unicode="ō" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q203 0 348.5 -144t145.5 -388t-145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM287 1212v191h565v-191h-565zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212t-48.5 212t-138.5 77q-92 0 -139 -77t-47 -212z" /> +<glyph unicode="Ő" horiz-adv-x="1398" d="M92 674q0 322 166 504t440.5 182t440.5 -182.5t166 -503.5q0 -324 -166.5 -511.5t-440.5 -187.5q-272 0 -439 187.5t-167 511.5zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5t80 319.5q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312zM418 1438 l129 245h258l-184 -245h-203zM786 1438l129 245h256l-182 -245h-203z" /> +<glyph unicode="ő" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q203 0 348.5 -144t145.5 -388t-145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM311 1174l142 309h239l-196 -309h-185zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212t-48.5 212t-138.5 77q-92 0 -139 -77 t-47 -212zM662 1174l141 309h237l-194 -309h-184z" /> +<glyph unicode="Œ" horiz-adv-x="1779" d="M92 674q0 330 187.5 495.5t498.5 165.5h877v-254h-508v-268h428v-252h-428v-307h528v-254h-913q-299 0 -484.5 172t-185.5 502zM401 674q0 -430 396 -430h49v848h-49q-190 0 -293 -95.5t-103 -322.5z" /> +<glyph unicode="œ" horiz-adv-x="1679" d="M74 508q0 244 138 388t341 144q205 0 330 -178q129 178 321 178q195 0 300.5 -138t105.5 -355q0 -78 -13 -127h-587q16 -102 81.5 -155.5t161.5 -53.5q88 0 215 74l105 -195q-168 -115 -361 -115q-195 0 -327 179q-129 -178 -338 -179q-203 0 -338 143.5t-135 389.5z M379 508q0 -133 46 -211t128 -78t130 78t48 211t-48 211t-130 78t-128 -78t-46 -211zM1010 604h342q0 207 -158 207q-74 0 -123 -52.5t-61 -154.5z" /> +<glyph unicode="Ŕ" horiz-adv-x="1259" d="M156 0v1335h481q516 0 516 -415q0 -279 -238 -385l302 -535h-338l-256 481h-164v-481h-303zM459 721h153q244 0 244 199q0 94 -60.5 135t-183.5 41h-153v-375zM479 1438l166 245h320l-244 -245h-242z" /> +<glyph unicode="ŕ" horiz-adv-x="815" d="M133 0v1016h246l20 -178h9q53 100 129.5 151t158.5 51q74 0 121 -20l-49 -260q-59 16 -111 16q-63 0 -124.5 -45t-98.5 -141v-590h-301zM338 1176l182 307h291l-254 -307h-219z" /> +<glyph unicode="Ŗ" horiz-adv-x="1259" d="M156 0v1335h481q516 0 516 -415q0 -279 -238 -385l302 -535h-338l-256 481h-164v-481h-303zM457 -348q170 18 170 76q0 50 -88 75l57 111q135 -14 191.5 -54t56.5 -118q0 -98 -102.5 -150.5t-262.5 -60.5zM459 721h153q244 0 244 199q0 94 -60.5 135t-183.5 41h-153v-375 z" /> +<glyph unicode="ŗ" horiz-adv-x="815" d="M72 -348q168 18 168 76q0 53 -88 75l57 111q135 -14 191.5 -54t56.5 -118q0 -98 -102.5 -150.5t-260.5 -60.5zM133 0v1016h246l20 -178h9q53 100 129.5 151t158.5 51q74 0 121 -20l-49 -260q-59 16 -111 16q-63 0 -124.5 -45t-98.5 -141v-590h-301z" /> +<glyph unicode="Ř" horiz-adv-x="1259" d="M156 0v1335h481q516 0 516 -415q0 -279 -238 -385l302 -535h-338l-256 481h-164v-481h-303zM289 1683h231l109 -124h8l108 124h232l-197 -245h-295zM459 721h153q244 0 244 199q0 94 -60.5 135t-183.5 41h-153v-375z" /> +<glyph unicode="ř" horiz-adv-x="815" d="M133 0v1016h246l20 -178h9q53 100 129.5 151t158.5 51q74 0 121 -20l-49 -260q-59 16 -111 16q-63 0 -124.5 -45t-98.5 -141v-590h-301zM190 1483h201l111 -162h8l108 162h203l-196 -307h-240z" /> +<glyph unicode="Ś" horiz-adv-x="1134" d="M70 168l174 207q160 -139 327 -139q186 0 187 129q0 68 -86 112q-23 12 -107 47l-172 74q-117 47 -193.5 138t-76.5 227q0 168 135 282.5t340 114.5q254 0 430 -176l-151 -191q-139 106 -279 107q-78 0 -124 -33t-46 -88q0 -37 27.5 -64.5t55.5 -41t97 -42.5l8 -3 q2 -1 7.5 -3t9.5 -4l170 -69q264 -106 264 -363q0 -174 -136 -294t-366 -120q-286 0 -495 193zM442 1438l166 245h320l-246 -245h-240z" /> +<glyph unicode="ś" horiz-adv-x="907" d="M43 117l135 188q141 -106 262 -106q129 0 129 86q0 10 -3 20t-11 19.5t-15.5 16.5t-22.5 15.5t-25.5 14.5t-30 14t-30.5 12t-33.5 13.5t-35.5 13.5q-268 102 -268 299q0 141 106.5 229t282.5 88q184 0 359 -129l-135 -180q-119 86 -215 86q-115 0 -115 -80q0 -14 5 -25.5 t17.5 -22.5t22.5 -18t32.5 -16.5t35 -14.5t43 -16.5t42.5 -15.5q125 -45 200 -112.5t75 -192.5q0 -143 -109.5 -235.5t-308.5 -92.5q-98 0 -204.5 39.5t-184.5 102.5zM315 1176l183 307h290l-253 -307h-220z" /> +<glyph unicode="Ŝ" horiz-adv-x="1134" d="M70 168l174 207q160 -139 327 -139q186 0 187 129q0 68 -86 112q-23 12 -107 47l-172 74q-117 47 -193.5 138t-76.5 227q0 168 135 282.5t340 114.5q254 0 430 -176l-151 -191q-139 106 -279 107q-78 0 -124 -33t-46 -88q0 -37 27.5 -64.5t55.5 -41t97 -42.5l8 -3 q2 -1 7.5 -3t9.5 -4l170 -69q264 -106 264 -363q0 -174 -136 -294t-366 -120q-286 0 -495 193zM252 1438l197 245h292l197 -245h-229l-109 125h-8l-111 -125h-229z" /> +<glyph unicode="ŝ" horiz-adv-x="907" d="M43 117l135 188q141 -106 262 -106q129 0 129 86q0 10 -3 20t-11 19.5t-15.5 16.5t-22.5 15.5t-25.5 14.5t-30 14t-30.5 12t-33.5 13.5t-35.5 13.5q-268 102 -268 299q0 141 106.5 229t282.5 88q184 0 359 -129l-135 -180q-119 86 -215 86q-115 0 -115 -80q0 -14 5 -25.5 t17.5 -22.5t22.5 -18t32.5 -16.5t35 -14.5t43 -16.5t42.5 -15.5q125 -45 200 -112.5t75 -192.5q0 -143 -109.5 -235.5t-308.5 -92.5q-98 0 -204.5 39.5t-184.5 102.5zM168 1176l194 307h240l197 -307h-203l-109 161h-8l-108 -161h-203z" /> +<glyph unicode="Ş" horiz-adv-x="1134" d="M70 168l174 207q160 -139 327 -139q186 0 187 129q0 68 -86 112q-23 12 -107 47l-172 74q-117 47 -193.5 138t-76.5 227q0 168 135 282.5t340 114.5q254 0 430 -176l-151 -191q-139 106 -279 107q-78 0 -124 -33t-46 -88q0 -37 27.5 -64.5t55.5 -41t97 -42.5l8 -3 q2 -1 7.5 -3t9.5 -4l170 -69q264 -106 264 -363q0 -154 -110.5 -268.5t-301.5 -138.5l-28 -70q119 -39 118 -152q0 -100 -102 -152t-260 -61l-23 121q168 18 168 90q0 57 -118 86l67 138q-236 27 -407 186z" /> +<glyph unicode="ş" horiz-adv-x="907" d="M43 117l135 188q141 -106 262 -106q129 0 129 86q0 10 -3 20t-11 19.5t-15.5 16.5t-22.5 15.5t-25.5 14.5t-30 14t-30.5 12t-33.5 13.5t-35.5 13.5q-268 102 -268 299q0 141 106.5 229t282.5 88q185 0 359 -129l-135 -180q-119 86 -215 86q-115 0 -115 -80q0 -14 5 -25.5 t17.5 -22.5t22.5 -18t32.5 -16.5t35 -14.5t43 -16.5t42.5 -15.5q125 -45 200 -112.5t75 -192.5q0 -115 -71.5 -199t-205.5 -114l-32 -78q119 -39 118 -152q0 -100 -102 -152t-260 -61l-23 121q168 18 168 90q0 57 -118 86l65 133q-197 16 -346 140z" /> +<glyph unicode="Š" horiz-adv-x="1134" d="M70 168l174 207q160 -139 327 -139q186 0 187 129q0 68 -86 112q-23 12 -107 47l-172 74q-117 47 -193.5 138t-76.5 227q0 168 135 282.5t340 114.5q254 0 430 -176l-151 -191q-139 106 -279 107q-78 0 -124 -33t-46 -88q0 -37 27.5 -64.5t55.5 -41t97 -42.5l8 -3 q2 -1 7.5 -3t9.5 -4l170 -69q264 -106 264 -363q0 -174 -136 -294t-366 -120q-286 0 -495 193zM252 1683h229l111 -124h8l109 124h229l-197 -245h-292z" /> +<glyph unicode="š" horiz-adv-x="907" d="M43 117l135 188q141 -106 262 -106q129 0 129 86q0 10 -3 20t-11 19.5t-15.5 16.5t-22.5 15.5t-25.5 14.5t-30 14t-30.5 12t-33.5 13.5t-35.5 13.5q-268 102 -268 299q0 141 106.5 229t282.5 88q184 0 359 -129l-135 -180q-119 86 -215 86q-115 0 -115 -80q0 -14 5 -25.5 t17.5 -22.5t22.5 -18t32.5 -16.5t35 -14.5t43 -16.5t42.5 -15.5q125 -45 200 -112.5t75 -192.5q0 -143 -109.5 -235.5t-308.5 -92.5q-98 0 -204.5 39.5t-184.5 102.5zM168 1483h203l108 -162h8l109 162h203l-197 -307h-240z" /> +<glyph unicode="Ţ" horiz-adv-x="1136" d="M49 1081v254h1036v-254h-366v-1081h-55l-37 -88q121 -39 121 -152q0 -100 -102.5 -152t-262.5 -61l-23 121q170 18 170 90q0 57 -118 86l77 156h-71v1081h-369z" /> +<glyph unicode="ţ" horiz-adv-x="784" d="M35 780v224l155 12l35 270h250v-270h244v-236h-244v-407q0 -162 131 -162q43 0 96 20l48 -219q-82 -27 -172 -35l-29 -65q119 -39 119 -152q0 -100 -102.5 -152t-260.5 -61l-22 121q168 18 168 90q0 57 -119 86l74 146q-231 59 -232 379v411h-139z" /> +<glyph unicode="Ť" horiz-adv-x="1136" d="M49 1081v254h1036v-254h-366v-1081h-301v1081h-369zM225 1683h230l108 -124h8l111 124h229l-196 -245h-293z" /> +<glyph unicode="ť" horiz-adv-x="784" d="M35 780v224l155 12l35 270h250v-270h244v-236h-244v-407q0 -162 131 -162q43 0 96 20l48 -219q-119 -37 -226 -37q-350 1 -350 394v411h-139zM561 1577h193l-2 -141l-52 -314h-129z" /> +<glyph unicode="Ũ" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h290v-717q0 -332 -132 -487.5t-396 -155.5t-398 156.5t-134 486.5zM330 1440q16 135 76.5 206.5t144.5 71.5q59 0 139 -46t105 -46q59 0 79 92h154q-14 -135 -74.5 -206.5t-144.5 -71.5 q-61 0 -141 46t-105 46q-59 0 -80 -92h-153z" /> +<glyph unicode="ũ" horiz-adv-x="1161" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h301v-1016h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM242 1178q14 135 71.5 205.5t139.5 70.5q59 0 139 -45t104 -45q49 0 70 90h154q-14 -135 -70.5 -205.5t-140.5 -70.5 q-61 0 -139 46t-103 46q-51 0 -72 -92h-153z" /> +<glyph unicode="Ū" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h290v-717q0 -332 -132 -487.5t-396 -155.5t-398 156.5t-134 486.5zM389 1475v190h580v-190h-580z" /> +<glyph unicode="ū" horiz-adv-x="1161" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h301v-1016h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM297 1212v191h565v-191h-565z" /> +<glyph unicode="Ŭ" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h290v-717q0 -332 -132 -487.5t-396 -155.5t-398 156.5t-134 486.5zM399 1683h164q23 -94 117 -94q92 0 115 94h163q-10 -115 -79.5 -180t-198.5 -65q-252 0 -281 245z" /> +<glyph unicode="ŭ" horiz-adv-x="1161" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h301v-1016h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM295 1460h168q18 -119 119 -119q98 0 116 119h168q-4 -121 -76.5 -202.5t-208 -81.5t-209 81.5t-77.5 202.5z" /> +<glyph unicode="Ů" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h290v-717q0 -332 -132 -487.5t-396 -155.5t-398 156.5t-134 486.5zM449 1628q0 90 64.5 145.5t166.5 55.5t165.5 -55.5t63.5 -145.5q0 -92 -63.5 -146.5t-165.5 -54.5q-104 0 -167.5 54.5 t-63.5 146.5zM596 1628q0 -41 23.5 -64.5t60.5 -23.5q35 0 58.5 23.5t23.5 64.5q0 39 -23.5 63.5t-58.5 24.5q-37 0 -60.5 -24.5t-23.5 -63.5z" /> +<glyph unicode="ů" horiz-adv-x="1161" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h301v-1016h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM350 1331q0 94 63.5 151.5t168.5 57.5q102 0 165.5 -57.5t63.5 -151.5t-63.5 -151.5t-165.5 -57.5q-104 0 -168 57.5t-64 151.5 zM498 1331q0 -43 23.5 -69.5t60.5 -26.5q35 0 58.5 26.5t23.5 69.5t-24 69.5t-58 26.5q-37 0 -60.5 -26.5t-23.5 -69.5z" /> +<glyph unicode="Ű" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h290v-717q0 -332 -132 -487.5t-396 -155.5t-398 156.5t-134 486.5zM399 1438l129 245h256l-184 -245h-201zM766 1438l129 245h256l-182 -245h-203z" /> +<glyph unicode="ű" horiz-adv-x="1161" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h301v-1016h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM324 1174l141 309h240l-197 -309h-184zM674 1174l141 309h238l-195 -309h-184z" /> +<glyph unicode="Ų" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h290v-717q0 -274 -79.5 -408t-270.5 -220q-72 -33 -108.5 -81t-36.5 -93q0 -37 25.5 -57.5t60.5 -20.5q33 0 73 29l70 -152q-92 -72 -215 -72q-100 0 -166.5 51.5t-66.5 141.5q0 121 131 244 q-477 28 -477 638z" /> +<glyph unicode="ų" horiz-adv-x="1161" d="M119 385v631h301v-592q0 -106 29.5 -149.5t97.5 -43.5q100 0 180 113v672h301v-1016q-92 -29 -135 -76t-43 -98q0 -37 24.5 -57.5t59.5 -20.5q37 0 74 25l63 -135q-88 -68 -209 -68q-94 0 -155.5 49t-61.5 137q0 141 141 240l-24 145h-8q-135 -166 -320 -166 q-315 0 -315 410z" /> +<glyph unicode="Ŵ" horiz-adv-x="1662" d="M27 1335h309l92 -624q18 -139 55 -422h9q29 164 77 422l144 624h256l145 -624q27 -135 80 -422h8q20 170 53 422l93 624h288l-237 -1335h-379l-131 606q-31 150 -53 309h-9q-43 -258 -53 -309l-127 -606h-373zM487 1438l197 245h295l197 -245h-232l-108 125h-9l-108 -125 h-232z" /> +<glyph unicode="ŵ" horiz-adv-x="1589" d="M49 1016h299l98 -471q8 -51 22.5 -151.5t23.5 -149.5h8q41 231 59 301l113 471h260l115 -471q18 -74 63 -301h8q8 51 22.5 150.5t24.5 150.5l97 471h278l-244 -1016h-352l-92 406q-23 102 -55 296h-9q-45 -266 -51 -296l-90 -406h-344zM481 1176l195 307h239l197 -307 h-203l-108 161h-8l-109 -161h-203z" /> +<glyph unicode="Ŷ" horiz-adv-x="1073" d="M-16 1335h321l121 -307q37 -106 109 -295h8q20 55 58 152.5t54 142.5l119 307h316l-404 -860v-475h-301v475zM193 1438l196 245h293l197 -245h-230l-108 125h-9l-108 -125h-231z" /> +<glyph unicode="ŷ" horiz-adv-x="1067" d="M25 1016h303l145 -436q23 -72 80 -289h8q45 193 70 289l123 436h288l-352 -1026q-76 -203 -174 -295t-270 -92q-76 0 -144 20l54 230q55 -12 67 -13q133 0 178 133l15 54zM231 1176l195 307h240l196 -307h-203l-108 161h-8l-109 -161h-203z" /> +<glyph unicode="Ÿ" horiz-adv-x="1073" d="M-16 1335h321l121 -307q37 -106 109 -295h8q20 55 58 152.5t54 142.5l119 307h316l-404 -860v-475h-301v475zM190 1577q0 61 40 102t103.5 41t103.5 -41t40 -102t-40 -102t-103.5 -41t-103.5 41t-40 102zM596 1577q0 61 40 102t103.5 41t103.5 -41t40 -102t-40 -102 t-103.5 -41t-103.5 41t-40 102z" /> +<glyph unicode="Ź" horiz-adv-x="1105" d="M72 0v182l590 899h-535v254h907v-182l-590 -899h594v-254h-966zM426 1438l164 245h319l-243 -245h-240z" /> +<glyph unicode="ź" horiz-adv-x="942" d="M78 0v162l426 618h-379v236h754v-160l-426 -620h440v-236h-815zM336 1176l182 307h291l-254 -307h-219z" /> +<glyph unicode="Ż" horiz-adv-x="1105" d="M72 0v182l590 899h-535v254h907v-182l-590 -899h594v-254h-966zM403 1593.5q0 69.5 49.5 113.5t125.5 44q78 0 127 -44t49 -113.5t-49 -113.5t-127 -44q-76 0 -125.5 44t-49.5 113.5z" /> +<glyph unicode="ż" horiz-adv-x="942" d="M78 0v162l426 618h-379v236h754v-160l-426 -620h440v-236h-815zM336 1323q0 70 47 114t119 44q74 0 121 -44t47 -114t-47 -114t-121 -44q-72 0 -119 44t-47 114z" /> +<glyph unicode="Ž" horiz-adv-x="1105" d="M72 0v182l590 899h-535v254h907v-182l-590 -899h594v-254h-966zM236 1683h229l108 -124h9l110 124h230l-197 -245h-293z" /> +<glyph unicode="ž" horiz-adv-x="942" d="M78 0v162l426 618h-379v236h754v-160l-426 -620h440v-236h-815zM186 1483h203l109 -162h8l110 162h203l-196 -307h-240z" /> +<glyph unicode="Ə" horiz-adv-x="1431" d="M143 662q0 14 1 30.5t3.5 37t2.5 32.5h878q-35 342 -326 342q-153 0 -290 -117l-131 207q180 166 458 166q264 0 428 -184.5t164 -506t-166 -508t-434 -186.5q-266 0 -427 183.5t-161 503.5zM453 541q14 -150 88.5 -230t189.5 -80q111 0 188.5 80t102.5 230h-569z" /> +<glyph unicode="ƒ" horiz-adv-x="1081" d="M61 -166l41 223q35 -14 91 -18q74 4 106.5 61.5t50.5 229.5l35 299h-154v207l152 12h27l10 88q25 227 120 325.5t296 98.5q94 0 176 -37l-58 -225q-68 23 -94 22q-133 0 -149 -159l-15 -113h211v-219h-235l-47 -387q-25 -209 -110 -324t-277 -115q-125 0 -177 31z" /> +<glyph unicode="Ơ" horiz-adv-x="1398" d="M92 674q0 322 166 504t440 182q156 0 287 -64q61 14 91 42t30 83q0 42 -31 95l205 90q59 -72 59 -164q0 -184 -217 -246q182 -188 183 -522q0 -324 -166 -511.5t-441 -187.5q-272 0 -439 187.5t-167 511.5zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5 t80 319.5q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312z" /> +<glyph unicode="ơ" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q98 0 195 -39q113 25 113 121q0 46 -31 95l205 90q59 -72 59 -164q0 -184 -199 -242q152 -147 152 -393q0 -244 -145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212 t-48.5 212t-138.5 77q-92 0 -139 -77t-47 -212z" /> +<glyph unicode="Ư" horiz-adv-x="1394" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h143q76 4 122 30t46 97q0 45 -33 94l205 91q61 -70 61 -164q0 -109 -69.5 -172.5t-184.5 -85.5v-607q0 -332 -132 -487.5t-396 -155.5t-398 157t-134 486z" /> +<glyph unicode="ư" horiz-adv-x="1204" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h102q166 8 166 127q1 49 -32 94l206 90q59 -72 60 -164q0 -182 -201 -241v-922h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410z" /> +<glyph unicode="Ǎ" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM236 1683h229l108 -124h9l110 124h230l-197 -245h-293zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430z" /> +<glyph unicode="ǎ" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM258 1483h203l110 -162h9l108 162h203l-197 -307h-239zM383 305q0 -96 117 -96 q82 0 168 86v178q-285 -39 -285 -168z" /> +<glyph unicode="Ǐ" horiz-adv-x="614" d="M-37 1683h232l108 -124h8l109 124h231l-196 -245h-295zM156 0v1335h303v-1335h-303z" /> +<glyph unicode="ǐ" horiz-adv-x="565" d="M-33 1483h203l109 -162h8l108 162h203l-195 -307h-239zM133 0v1016h301v-1016h-301z" /> +<glyph unicode="Ǒ" horiz-adv-x="1398" d="M92 674q0 322 166 504t440.5 182t440.5 -182.5t166 -503.5q0 -324 -166.5 -511.5t-440.5 -187.5q-272 0 -439 187.5t-167 511.5zM356 1683h230l108 -124h8l111 124h229l-196 -245h-293zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5t80 319.5q0 199 -79.5 312.5 t-217.5 113.5q-135 0 -216 -114t-81 -312z" /> +<glyph unicode="ǒ" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q203 0 348.5 -144t145.5 -388t-145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM252 1483h203l110 -162h8l109 162h203l-197 -307h-239zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212t-48.5 212t-138.5 77 q-92 0 -139 -77t-47 -212z" /> +<glyph unicode="Ǔ" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h290v-717q0 -332 -132 -487.5t-396 -155.5t-398 156.5t-134 486.5zM336 1683h229l111 -124h8l109 124h229l-197 -245h-293z" /> +<glyph unicode="ǔ" horiz-adv-x="1161" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h301v-1016h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM264 1483h203l111 -162h8l108 162h203l-197 -307h-239z" /> +<glyph unicode="Ǖ" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h290v-717q0 -332 -132 -487.5t-396 -155.5t-398 156.5t-134 486.5zM350 1561q0 53 36 89t91 36t90 -36t35 -89q0 -55 -35 -91t-90 -36t-91 35.5t-36 91.5zM389 1786v141h580v-141h-580z M756 1560.5q0 53.5 35.5 89.5t91 36t90.5 -36t35 -89q0 -55 -35 -91t-90.5 -36t-91 36.5t-35.5 90z" /> +<glyph unicode="ǖ" horiz-adv-x="1161" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h301v-1016h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM252 1294q0 55 35 91t90 36t91 -35.5t36 -91.5q0 -53 -36 -89t-91 -36t-90 36t-35 89zM297 1548v142h567v-142h-567zM657 1294 q0 55 36 91t91.5 36t90 -35.5t34.5 -91.5q0 -53 -34.5 -89t-90 -36t-91.5 36t-36 89z" /> +<glyph unicode="Ǘ" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h290v-717q0 -332 -132 -487.5t-396 -155.5t-398 156.5t-134 486.5zM350 1561q0 53 36 89t91 36t90 -36t35 -89q0 -55 -35 -91t-90 -36t-91 35.5t-36 91.5zM526 1749l166 246h316l-242 -246h-240z M756 1560.5q0 53.5 35.5 89.5t91 36t90.5 -36t35 -89q0 -55 -35 -91t-90.5 -36t-91 36.5t-35.5 90z" /> +<glyph unicode="ǘ" horiz-adv-x="1161" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h301v-1016h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM252 1294q0 55 35 91t90 36t91 -35.5t36 -91.5q0 -53 -36 -89t-91 -36t-90 36t-35 89zM442 1509l170 228h258l-237 -228h-191z M657 1294q0 55 36 91t91.5 36t90 -35.5t34.5 -91.5q0 -53 -34.5 -89t-90 -36t-91.5 36t-36 89z" /> +<glyph unicode="Ǚ" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h290v-717q0 -332 -132 -487.5t-396 -155.5t-398 156.5t-134 486.5zM336 1995h229l111 -123h8l109 123h229l-197 -246h-293zM350 1561q0 53 36 89t91 36t90 -36t35 -89q0 -55 -35 -91t-90 -36 t-91 35.5t-36 91.5zM756 1560.5q0 53.5 35.5 89.5t91 36t90.5 -36t35 -89q0 -55 -35 -91t-90.5 -36t-91 36.5t-35.5 90z" /> +<glyph unicode="ǚ" horiz-adv-x="1161" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h301v-1016h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM252 1294q0 55 35 91t90 36t91 -35.5t36 -91.5q0 -53 -36 -89t-91 -36t-90 36t-35 89zM279 1737h202l97 -119h8l94 119h203 l-176 -228h-252zM657 1294q0 55 36 91t91.5 36t90 -35.5t34.5 -91.5q0 -53 -34.5 -89t-90 -36t-91.5 36t-36 89z" /> +<glyph unicode="Ǜ" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h290v-717q0 -332 -132 -487.5t-396 -155.5t-398 156.5t-134 486.5zM350 1561q0 53 36 89t91 36t90 -36t35 -89q0 -55 -35 -91t-90 -36t-91 35.5t-36 91.5zM352 1995h314l165 -246h-239z M756 1560.5q0 53.5 35.5 89.5t91 36t90.5 -36t35 -89q0 -55 -35 -91t-90.5 -36t-91 36.5t-35.5 90z" /> +<glyph unicode="ǜ" horiz-adv-x="1161" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h301v-1016h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM252 1294q0 55 35 91t90 36t91 -35.5t36 -91.5q0 -53 -36 -89t-91 -36t-90 36t-35 89zM291 1737h258l172 -228h-193zM657 1294 q0 55 36 91t91.5 36t90 -35.5t34.5 -91.5q0 -53 -34.5 -89t-90 -36t-91.5 36t-36 89z" /> +<glyph unicode="Ǧ" horiz-adv-x="1302" d="M92 659q0 322 188.5 511.5t469.5 189.5q242 0 415 -174l-166 -187q-111 100 -245 101q-156 0 -254.5 -116t-98.5 -314q0 -209 95.5 -321.5t281.5 -112.5q90 0 142 40v230h-222v246h490v-615q-80 -70 -199 -116t-250 -46q-283 0 -465 179t-182 505zM408 1683h229l108 -124 h9l108 124h232l-197 -245h-293z" /> +<glyph unicode="ǧ" horiz-adv-x="1093" d="M70 -174q0 123 145 205v8q-94 61 -94 172q0 113 115 190v9q-59 41 -98.5 110.5t-39.5 153.5q0 174 122 270t298 96q90 0 158 -24h371v-219h-162q33 -55 33 -133q0 -168 -112 -255t-288 -87q-59 0 -123 20q-37 -31 -37 -76q0 -76 154 -76h164q387 0 387 -258 q0 -160 -154.5 -262t-412.5 -102q-190 0 -308 64.5t-118 193.5zM199 1483h202l109 -162h8l111 162h202l-196 -307h-240zM317 -127q0 -55 60.5 -86t165.5 -31q100 0 166.5 36t66.5 89q0 45 -38 62.5t-117 17.5h-105q-94 0 -143 12q-56 -49 -56 -100zM379 674q0 -82 39 -126 t100.5 -44t100 44t38.5 126q0 78 -38.5 121t-100 43t-100.5 -42t-39 -122z" /> +<glyph unicode="Ǫ" horiz-adv-x="1398" d="M92 674q0 322 166 504t440.5 182t440.5 -182.5t166 -503.5q0 -270 -106.5 -429t-317.5 -255q-72 -33 -108 -80t-36 -94q0 -37 25.5 -57.5t60.5 -20.5q33 0 74 29l68 -152q-90 -72 -213 -72q-102 0 -169 51.5t-67 141.5q0 133 131 244q-256 18 -405.5 202.5t-149.5 491.5z M401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5t80 319.5q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312z" /> +<glyph unicode="ǫ" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q203 0 348.5 -144t145.5 -388q0 -193 -86 -312.5t-246 -195.5q-137 -61 -137 -174q0 -39 25.5 -58.5t60.5 -19.5q33 0 74 25l61 -135q-84 -68 -207 -68q-94 0 -155.5 49t-61.5 137q0 125 113 224q-182 23 -306 164t-124 364zM383 508 q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212t-48.5 212t-138.5 77q-92 0 -139 -77t-47 -212z" /> +<glyph unicode="Ș" horiz-adv-x="1134" d="M70 168l174 207q160 -139 327 -139q186 0 187 129q0 68 -86 112q-23 12 -107 47l-172 74q-117 47 -193.5 138t-76.5 227q0 168 135 282.5t340 114.5q254 0 430 -176l-151 -191q-139 106 -279 107q-78 0 -124 -33t-46 -88q0 -37 27.5 -64.5t55.5 -41t97 -42.5l8 -3 q2 -1 7.5 -3t9.5 -4l170 -69q264 -106 264 -363q0 -174 -136 -294t-366 -120q-286 0 -495 193zM360 -348q168 18 168 76q0 53 -88 75l58 111q135 -14 191 -54t56 -118q0 -98 -102 -150.5t-260 -60.5z" /> +<glyph unicode="ș" horiz-adv-x="907" d="M43 117l135 188q141 -106 262 -106q129 0 129 86q0 10 -3 20t-11 19.5t-15.5 16.5t-22.5 15.5t-25.5 14.5t-30 14t-30.5 12t-33.5 13.5t-35.5 13.5q-268 102 -268 299q0 141 106.5 229t282.5 88q184 0 359 -129l-135 -180q-119 86 -215 86q-115 0 -115 -80q0 -14 5 -25.5 t17.5 -22.5t22.5 -18t32.5 -16.5t35 -14.5t43 -16.5t42.5 -15.5q125 -45 200 -112.5t75 -192.5q0 -143 -109.5 -235.5t-308.5 -92.5q-98 0 -204.5 39.5t-184.5 102.5zM264 -348q170 18 170 76q0 51 -88 75l57 111q135 -14 191.5 -54t56.5 -118q0 -98 -102.5 -150.5 t-261.5 -60.5z" /> +<glyph unicode="Ț" horiz-adv-x="1136" d="M49 1081v254h1036v-254h-366v-1081h-301v1081h-369zM358 -348q168 18 168 76q0 53 -88 75l58 111q135 -14 191 -54t56 -118q0 -98 -102 -150.5t-260 -60.5z" /> +<glyph unicode="ț" horiz-adv-x="784" d="M35 780v224l155 12l35 270h250v-270h244v-236h-244v-407q0 -162 131 -162q43 0 96 20l48 -219q-119 -37 -226 -37q-350 1 -350 394v411h-139zM270 -348q170 18 170 76q0 51 -88 75l58 111q135 -14 191 -54t56 -118q0 -98 -102 -150.5t-262 -60.5z" /> +<glyph unicode="ȷ" horiz-adv-x="569" d="M-104 -373l53 221q47 -14 80 -14q59 0 82.5 39t23.5 125v1018h301v-1010q0 -408 -362 -407q-106 0 -178 28z" /> +<glyph unicode="ɑ" horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210z" /> +<glyph unicode="ə" horiz-adv-x="1056" d="M70 467q0 70 14 127h606q-33 217 -233 217q-109 0 -221 -68l-101 183q176 115 373 114q207 0 341 -144t134 -388q0 -240 -139 -386.5t-336 -146.5q-209 0 -323.5 136.5t-114.5 355.5zM328 408q0 -203 172 -203q166 0 194 203h-366z" /> +<glyph unicode="ɡ" horiz-adv-x="1193" d="M90 526q0 223 130 368.5t298 145.5q154 0 260 -118h8l23 94h242v-1006q0 -197 -134.5 -302t-381.5 -105q-205 0 -379 112l98 199q137 -76 281 -76q197 0 215 164l8 127q-113 -102 -252 -102q-188 0 -302 139t-114 360zM395 530q0 -125 50.5 -193.5t138.5 -68.5 q94 0 166 97v364q-72 66 -168 66q-80 0 -133.5 -71t-53.5 -194z" /> +<glyph unicode="ʰ" horiz-adv-x="786" d="M86 532v947h213v-230l-14 -125q94 98 211 99q213 0 213 -277v-414h-213v390q0 68 -15.5 95t-67 27t-114.5 -63v-449h-213z" /> +<glyph unicode="ʲ" horiz-adv-x="389" d="M-68 270l37 160q20 -10 54 -10q39 0 53 23.5t14 80.5v682h213v-674q0 -278 -248 -278q-66 0 -123 16zM76 1407q0 47 33.5 76.5t87 29.5t87 -30.5t33.5 -75.5q0 -47 -33.5 -78t-87 -31t-87 31t-33.5 78z" /> +<glyph unicode="ʳ" horiz-adv-x="557" d="M86 532v674h172l16 -116h5q78 133 192 133q53 0 86 -15l-37 -182q-45 10 -74 10q-98 0 -147 -118v-386h-213z" /> +<glyph unicode="ʷ" horiz-adv-x="1071" d="M33 1206h211l59 -303l31 -203h6l37 203l78 303h170l82 -303l38 -203h7l32 203l60 303h194l-159 -674h-248l-60 259l-32 186h-4l-33 -186l-58 -259h-243z" /> +<glyph unicode="ʸ" horiz-adv-x="722" d="M16 1206h213l93 -278q2 -6 51 -193h8q4 16 47 193l76 278h203l-230 -671q-53 -135 -120.5 -195.5t-186.5 -60.5q-55 0 -100 12l36 160q29 -10 48 -11q88 0 116 84l11 31z" /> +<glyph unicode="ʻ" horiz-adv-x="614" d="M113 961q-1 295 290 438l66 -131q-184 -92 -184 -260q6 2 20 2q66 0 112 -41t46 -109q0 -76 -44 -122t-114 -46q-94 0 -143 71t-49 198z" /> +<glyph unicode="ʼ" horiz-adv-x="614" d="M145 852q184 92 185 260q-6 -2 -19 -2q-68 0 -112.5 41t-44.5 109q0 76 44 121.5t113 45.5q92 0 142.5 -69.5t50.5 -198.5q0 -295 -293 -438z" /> +<glyph unicode="ʾ" horiz-adv-x="335" d="M53 1122v111q117 0 117 98.5t-117 98.5v110q129 6 196.5 -51t67.5 -157.5t-67.5 -158t-196.5 -51.5z" /> +<glyph unicode="ʿ" horiz-adv-x="344" d="M27 1331.5q0 100.5 66.5 157.5t197.5 51v-110q-117 0 -117 -98.5t117 -98.5v-111q-131 -6 -197.5 51.5t-66.5 158z" /> +<glyph unicode="ˆ" horiz-adv-x="1136" d="M252 1176l197 307h239l197 -307h-203l-109 161h-8l-110 -161h-203z" /> +<glyph unicode="ˇ" horiz-adv-x="1136" d="M252 1483h203l110 -162h8l109 162h203l-197 -307h-239z" /> +<glyph unicode="ˈ" horiz-adv-x="301" d="M31 1516h241l-12 -410h-217z" /> +<glyph unicode="ˉ" horiz-adv-x="630" d="M33 1212v191h565v-191h-565z" /> +<glyph unicode="ˊ" horiz-adv-x="483" d="M74 1176l182 307h291l-254 -307h-219z" /> +<glyph unicode="ˋ" horiz-adv-x="483" d="M-66 1483h291l183 -307h-220z" /> +<glyph unicode="ˌ" horiz-adv-x="301" d="M31 -543l12 412h217l12 -412h-241z" /> +<glyph unicode="˘" horiz-adv-x="1136" d="M283 1460h168q18 -119 118 -119q98 0 117 119h168q-4 -121 -76.5 -202.5t-208 -81.5t-209 81.5t-77.5 202.5z" /> +<glyph unicode="˙" horiz-adv-x="1136" d="M401 1323q0 70 47.5 114t120.5 44q72 0 119 -44t47 -114t-47 -114t-119 -44q-74 0 -121 44t-47 114z" /> +<glyph unicode="˚" horiz-adv-x="1136" d="M338 1331q0 94 63.5 151.5t167.5 57.5q102 0 166 -57.5t64 -151.5t-64 -151.5t-166 -57.5q-104 0 -167.5 57.5t-63.5 151.5zM485 1331q0 -43 23.5 -69.5t60.5 -26.5q35 0 58.5 26.5t23.5 69.5t-23.5 69.5t-58.5 26.5q-37 0 -60.5 -26.5t-23.5 -69.5z" /> +<glyph unicode="˛" horiz-adv-x="1136" d="M391 -244q0 80 46 145.5t100 102.5h168q-111 -90 -111 -178q0 -39 25.5 -58.5t60.5 -19.5q37 0 74 25l61 -135q-84 -68 -207 -68q-94 0 -155.5 49t-61.5 137z" /> +<glyph unicode="˜" horiz-adv-x="1136" d="M229 1178q14 135 71.5 205.5t139.5 70.5q59 0 139 -45t105 -45q49 0 70 90h153q-14 -135 -70.5 -205.5t-140.5 -70.5q-61 0 -139 46t-102 46q-51 0 -72 -92h-154z" /> +<glyph unicode="˝" horiz-adv-x="1136" d="M311 1174l142 309h239l-196 -309h-185zM662 1174l141 309h237l-194 -309h-184z" /> +<glyph unicode="ˡ" horiz-adv-x="397" d="M86 752v727h213v-736q0 -59 35 -59q14 0 26 4l25 -153q-45 -18 -104 -19q-195 0 -195 236z" /> +<glyph unicode="ˢ" horiz-adv-x="608" d="M31 606l92 133q98 -70 176 -69q80 0 80 53q0 12 -6 21.5t-22.5 18.5t-28 14t-39 16.5t-39.5 15.5q-180 70 -181 201q0 94 73 153.5t190 59.5q131 0 243 -86l-94 -125q-86 57 -143 57q-72 0 -72 -51q0 -8 3 -15.5t11.5 -13.5t16.5 -11t22.5 -10t24.5 -9.5t28.5 -10.5 t28.5 -10q180 -66 180 -201q0 -98 -74.5 -159.5t-207.5 -61.5q-141 0 -262 90z" /> +<glyph unicode="ˣ" horiz-adv-x="712" d="M16 532l213 351l-198 323h227l55 -104l58 -105h8l41 105l45 104h221l-199 -348l209 -326h-225l-59 105l-66 104h-8l-51 -104l-49 -105h-222z" /> +<glyph unicode="̀" d="M-305 1483h291l182 -307h-219z" /> +<glyph unicode="́" d="M-168 1176l182 307h291l-254 -307h-219z" /> +<glyph unicode="̂" d="M-315 1176l196 307h238l196 -307h-202l-109 161h-8l-109 -161h-202z" /> +<glyph unicode="̃" d="M-340 1178q14 135 71.5 205.5t141.5 70.5q59 0 138 -45t104 -45q49 0 71 90h154q-14 -135 -71.5 -205.5t-141.5 -70.5q-59 0 -138 46t-104 46q-49 0 -71 -92h-154z" /> +<glyph unicode="̄" d="M-283 1212v191h566v-191h-566z" /> +<glyph unicode="̆" d="M-285 1460h168q6 -53 36 -86t81 -33t81 33t36 86h168q-4 -121 -77 -202.5t-208 -81.5t-208 81.5t-77 202.5z" /> +<glyph unicode="̇" d="M-166 1323q0 70 46 114t120 44t120 -44t46 -114t-46 -114t-120 -44t-120 44t-46 114z" /> +<glyph unicode="̈" d="M-346 1313q0 59 40 100t103.5 41t103.5 -41t40 -100q0 -61 -40 -102.5t-103.5 -41.5t-103.5 41t-40 103zM59 1313q0 59 40 100t103.5 41t103.5 -41t40 -100q0 -61 -40 -102.5t-103.5 -41.5t-103.5 41t-40 103z" /> +<glyph unicode="̉" d="M-166 1389l35 151q344 -10 344 -188q0 -98 -80 -150.5t-205 -60.5l-22 119q90 14 90 61q0 59 -162 68z" /> +<glyph unicode="̊" d="M-231 1331q0 94 63.5 151.5t167.5 57.5t167.5 -57.5t63.5 -151.5t-63.5 -151.5t-167.5 -57.5t-167.5 57.5t-63.5 151.5zM-84 1331q0 -43 23.5 -69.5t60.5 -26.5t60.5 26.5t23.5 69.5t-23.5 69.5t-60.5 26.5t-60.5 -26.5t-23.5 -69.5z" /> +<glyph unicode="̋" d="M-256 1174l139 309h240l-195 -309h-184zM92 1174l141 309h240l-194 -309h-187z" /> +<glyph unicode="̌" d="M-315 1483h202l109 -162h8l109 162h202l-196 -307h-238z" /> +<glyph unicode="̏" d="M-473 1483h240l141 -309h-187zM-123 1483h240l139 -309h-184z" /> +<glyph unicode="̒" d="M-139 1284q-1 186 202 264l46 -92q-115 -41 -127 -121q4 2 14 2q45 0 76.5 -29.5t31.5 -76.5q0 -53 -31.5 -85t-76.5 -32q-135 0 -135 170z" /> +<glyph unicode="̓" d="M-115 1200q115 43 127 123q-4 -2 -16 -2q-45 0 -76 28.5t-31 75.5q0 53 31 85t78 32q135 0 135 -170q0 -186 -203 -264z" /> +<glyph unicode="̛" d="M-20 995q68 12 102.5 40t34.5 87q0 49 -33 95l207 90q59 -72 59 -164q0 -127 -96 -194t-252 -75z" /> +<glyph unicode="̣" d="M-166 -305.5q0 69.5 46 114t120 44.5t120 -44.5t46 -114t-46 -113.5t-120 -44t-120 44t-46 113.5z" /> +<glyph unicode="̤" d="M-346 -299q0 61 41 102t102.5 41t102.5 -41t41 -102t-40 -102t-103.5 -41t-103.5 41t-40 102zM59 -299q0 61 41 102t102.5 41t102.5 -41t41 -102t-40 -102t-103.5 -41t-103.5 41t-40 102z" /> +<glyph unicode="̦" d="M-211 -348q170 18 170 76q0 51 -90 75l57 111q135 -14 191.5 -54t56.5 -118q0 -98 -101.5 -150.5t-260.5 -60.5z" /> +<glyph unicode="̧" d="M-211 -332q170 18 170 90q0 57 -121 86l82 164h176l-41 -96q119 -39 119 -152q0 -100 -101.5 -152t-260.5 -61z" /> +<glyph unicode="̨" d="M-176 -244q0 80 45 145.5t98 102.5h170q-111 -86 -110 -178q0 -39 25.5 -58.5t60 -19.5t71.5 25l64 -135q-88 -68 -207 -68q-94 0 -155.5 49t-61.5 137z" /> +<glyph unicode="̮" d="M-285 -145h168q14 -121 116.5 -121t117.5 121h168q-4 -121 -77 -203t-208 -82t-208 82t-77 203z" /> +<glyph unicode="̱" d="M-283 -195h566v-192h-566v192z" /> +<glyph unicode="π" horiz-adv-x="1241" d="M37 778v226l151 12h998v-238h-137v-467q0 -92 61 -92q23 0 41 4l35 -221q-57 -27 -156 -27q-283 0 -282 349v454h-236l-2 -778h-297v778h-176z" /> +<glyph unicode="ᵃ" horiz-adv-x="735" d="M59 721q0 109 91.5 167t291.5 79q-10 88 -100 88q-76 0 -184 -62l-76 142q156 88 297 88q133 0 204.5 -76t71.5 -227v-388h-170l-20 68h-8q-85 -84 -191 -84q-92 0 -149.5 59.5t-57.5 145.5zM262 737q0 -59 76 -59q49 0 104 51v115q-180 -23 -180 -107z" /> +<glyph unicode="ᵇ" horiz-adv-x="788" d="M86 532v947h213v-230l-8 -102q86 76 178 76q123 0 194.5 -93.5t71.5 -246.5q0 -168 -83 -267.5t-199 -99.5q-104 0 -179 88h-8l-16 -72h-164zM299 723q47 -39 102 -39q51 0 84 48t33 147q0 174 -110 174q-53 0 -109 -58v-272z" /> +<glyph unicode="ᵈ" horiz-adv-x="788" d="M53 883q0 152 86 246t197 94q98 0 166 -72l-10 111v217h213v-947h-175l-16 64h-4q-84 -80 -176 -80q-131 0 -206 96.5t-75 270.5zM270 883q0 -199 121 -199q57 0 101 59v271q-49 41 -103 41q-51 0 -85 -45t-34 -127z" /> +<glyph unicode="ᵉ" horiz-adv-x="708" d="M49 870q0 156 95.5 254.5t228.5 98.5q143 0 217 -93.5t74 -230.5q0 -47 -11 -84h-401q23 -137 172 -137q82 0 147 41l72 -127q-115 -76 -248 -76q-150 0 -248 96.5t-98 257.5zM248 934h237q0 127 -110 127q-107 0 -127 -127z" /> +<glyph unicode="ᵍ" horiz-adv-x="739" d="M47 418q0 84 94 131v8q-61 41 -61 115q0 76 76 125v8q-92 57 -93 172q0 117 83 181.5t202 64.5q68 0 109 -17h248v-155h-105q18 -29 18 -80q0 -111 -76.5 -169.5t-193.5 -58.5q-41 0 -80 13q-23 -23 -22 -47q0 -45 100 -45h109q131 0 195.5 -41t64.5 -131 q0 -106 -104.5 -175t-280.5 -69q-127 0 -205 42t-78 128zM219 453q0 -74 146 -74q66 0 106.5 22.5t40.5 55.5q0 47 -98 47h-68q-63 0 -92 8q-35 -24 -35 -59zM260 977q0 -51 24.5 -79t63.5 -28t63.5 28t24.5 79t-24.5 77.5t-63.5 26.5t-63.5 -26.5t-24.5 -77.5z" /> +<glyph unicode="ᵏ" horiz-adv-x="759" d="M86 532v947h213v-533h8l199 260h229l-246 -284l263 -390h-230l-151 254l-72 -90v-164h-213z" /> +<glyph unicode="ᵐ" horiz-adv-x="1181" d="M86 532v674h172l16 -88h5q100 104 204 105q133 0 191 -115q106 115 213 115q109 0 163 -73t54 -204v-414h-213v390q0 63 -18.5 92.5t-65.5 29.5q-41 0 -107 -61v-451h-211v390q0 63 -18 92.5t-65 29.5q-45 0 -107 -61v-451h-213z" /> +<glyph unicode="ᵒ" horiz-adv-x="763" d="M49 868q0 162 97.5 258.5t234.5 96.5t234.5 -96.5t97.5 -258.5q0 -160 -97.5 -256t-234.5 -96t-234.5 96.5t-97.5 255.5zM266 868q0 -184 115 -184q117 0 117 184q0 186 -117 187q-115 0 -115 -187z" /> +<glyph unicode="ᵖ" horiz-adv-x="788" d="M86 260v946h170l14 -67h6q88 84 193 84q123 0 194.5 -93.5t71.5 -246.5q0 -168 -83 -267.5t-199 -99.5q-90 0 -166 72l12 -137v-191h-213zM299 723q47 -39 102 -39q51 0 84 48t33 147q0 174 -110 174q-53 0 -109 -58v-272z" /> +<glyph unicode="ᵗ" horiz-adv-x="530" d="M25 1042v158l102 6l25 176h178v-176h157v-164h-157v-256q0 -106 84 -106q37 0 61 10l37 -149q-78 -25 -158 -25q-237 0 -237 268v258h-92z" /> +<glyph unicode="ᵘ" horiz-adv-x="784" d="M80 786v420h211v-391q0 -66 16.5 -93.5t69.5 -27.5t112 62v450h213v-674h-170l-22 84h-4q-100 -100 -211 -100q-215 0 -215 270z" /> +<glyph unicode="ᵛ" horiz-adv-x="727" d="M16 1206h211l82 -309l58 -209h4l53 209l84 309h203l-224 -674h-245z" /> +<glyph unicode="ᶜ" horiz-adv-x="641" d="M49 870q0 160 100.5 256.5t243.5 96.5q139 0 213 -70l-98 -135q-47 37 -96 37q-63 0 -104.5 -51.5t-41.5 -133.5q0 -84 40 -135t104 -51q61 0 118 45l86 -135q-94 -78 -231 -78q-147 0 -240.5 94.5t-93.5 259.5z" /> +<glyph unicode="ᶠ" horiz-adv-x="475" d="M31 1042v158l92 6v25q0 123 62.5 200.5t195.5 77.5q82 1 137 -24l-39 -150q-45 10 -69 11q-74 0 -74 -107v-33h119v-164h-119v-510h-213v510h-92z" /> +<glyph unicode="ᶻ" horiz-adv-x="638" d="M51 532v115l281 395h-246v164h510v-114l-281 -396h289v-164h-553z" /> +<glyph unicode="Ḍ" horiz-adv-x="1282" d="M139 0v1335h379q317 0 493.5 -163.5t176.5 -497.5t-175 -504t-478 -170h-396zM442 244h58q379 0 379 430q0 227 -98.5 322.5t-280.5 95.5h-58v-848zM457 -305.5q0 69.5 47 114t119 44.5q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -119 44t-47 113.5z" /> +<glyph unicode="ḍ" horiz-adv-x="1173" d="M80 508q0 240 126 386t296 146q137 0 250 -106l-13 156v346h301v-1436h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210zM473 -305.5q0 69.5 46 114t120 44.5 t121 -44.5t47 -114t-47 -113.5t-121 -44t-120 44t-46 113.5z" /> +<glyph unicode="Ḏ" horiz-adv-x="1282" d="M139 0v1335h379q317 0 493.5 -163.5t176.5 -497.5t-175 -504t-478 -170h-396zM340 -195h565v-192h-565v192zM442 244h58q379 0 379 430q0 227 -98.5 322.5t-280.5 95.5h-58v-848z" /> +<glyph unicode="ḏ" horiz-adv-x="1173" d="M80 508q0 240 126 386t296 146q137 0 250 -106l-13 156v346h301v-1436h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM356 -195h566v-192h-566v192zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210z" /> +<glyph unicode="Ḡ" horiz-adv-x="1302" d="M92 659q0 322 188.5 511.5t469.5 189.5q242 0 415 -174l-166 -187q-111 100 -245 101q-156 0 -254.5 -116t-98.5 -314q0 -209 95.5 -321.5t281.5 -112.5q90 0 142 40v230h-222v246h490v-615q-80 -70 -199 -116t-250 -46q-283 0 -465 179t-182 505zM461 1475v190h579v-190 h-579z" /> +<glyph unicode="ḡ" horiz-adv-x="1093" d="M70 -174q0 123 145 205v8q-94 61 -94 172q0 113 115 190v9q-59 41 -98.5 110.5t-39.5 153.5q0 174 122 270t298 96q90 0 158 -24h371v-219h-162q33 -55 33 -133q0 -168 -112 -255t-288 -87q-59 0 -123 20q-37 -31 -37 -76q0 -76 154 -76h164q387 0 387 -258 q0 -160 -154.5 -262t-412.5 -102q-190 0 -308 64.5t-118 193.5zM231 1212v191h566v-191h-566zM317 -127q0 -55 60.5 -86t165.5 -31q100 0 166.5 36t66.5 89q0 45 -38 62.5t-117 17.5h-105q-94 0 -143 12q-56 -49 -56 -100zM379 674q0 -82 39 -126t100.5 -44t100 44t38.5 126 q0 78 -38.5 121t-100 43t-100.5 -42t-39 -122z" /> +<glyph unicode="Ḥ" horiz-adv-x="1376" d="M156 0v1335h303v-514h461v514h301v-1335h-301v557h-461v-557h-303zM520 -305.5q0 69.5 47 114t119 44.5q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -119 44t-47 113.5z" /> +<glyph unicode="ḥ" horiz-adv-x="1169" d="M133 0v1436h301v-353l-14 -182q156 139 313 139q315 0 316 -409v-631h-301v592q0 109 -30 150.5t-95 41.5q-53 0 -94.5 -22.5t-94.5 -75.5v-686h-301zM434 -305.5q0 69.5 47 114t119 44.5q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -119 44t-47 113.5z" /> +<glyph unicode="Ḫ" horiz-adv-x="1376" d="M156 0v1335h303v-514h461v514h301v-1335h-301v557h-461v-557h-303zM401 -145h168q18 -121 117 -121q102 0 117 121h168q-4 -121 -77 -203t-208 -82t-207.5 82t-77.5 203z" /> +<glyph unicode="ḫ" horiz-adv-x="1169" d="M133 0v1436h301v-353l-14 -182q156 139 313 139q315 0 316 -409v-631h-301v592q0 109 -30 150.5t-95 41.5q-53 0 -94.5 -22.5t-94.5 -75.5v-686h-301zM315 -145h168q14 -121 116.5 -121t117.5 121h168q-4 -121 -77 -203t-208 -82t-208 82t-77 203z" /> +<glyph unicode="Ḷ" horiz-adv-x="1056" d="M156 0v1335h303v-1081h526v-254h-829zM426 -305.5q0 69.5 47 114t119 44.5q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -119 44t-47 113.5z" /> +<glyph unicode="ḷ" horiz-adv-x="585" d="M133 315v1121h301v-1133q0 -84 53 -84q20 0 37 4l37 -223q-55 -25 -151 -25q-277 0 -277 340zM223 -305.5q0 69.5 47 114t119 44.5q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -119 44t-47 113.5z" /> +<glyph unicode="Ḹ" horiz-adv-x="1056" d="M25 1475v190h579v-190h-579zM156 0v1335h303v-1081h526v-254h-829zM426 -305.5q0 69.5 47 114t119 44.5q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -119 44t-47 113.5z" /> +<glyph unicode="ḹ" horiz-adv-x="585" d="M-2 1645v192h565v-192h-565zM133 315v1121h301v-1133q0 -84 53 -84q20 0 37 4l37 -223q-55 -25 -151 -25q-277 0 -277 340zM223 -305.5q0 69.5 47 114t119 44.5q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -119 44t-47 113.5z" /> +<glyph unicode="Ḻ" horiz-adv-x="1056" d="M156 0v1335h303v-1081h526v-254h-829zM309 -195h565v-192h-565v192z" /> +<glyph unicode="ḻ" horiz-adv-x="585" d="M106 -195h566v-192h-566v192zM133 315v1121h301v-1133q0 -84 53 -84q20 0 37 4l37 -223q-55 -25 -151 -25q-277 0 -277 340z" /> +<glyph unicode="Ṃ" horiz-adv-x="1558" d="M156 0v1335h319l223 -600l80 -233h8l80 233l217 600h320v-1335h-283v489q0 104 39 455h-8l-109 -309l-206 -518h-121l-205 518l-107 309h-8q39 -350 39 -455v-489h-278zM616 -305.5q0 69.5 47.5 114t118.5 44.5q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44 q-72 0 -119 44t-47 113.5z" /> +<glyph unicode="ṃ" horiz-adv-x="1755" d="M133 0v1016h246l20 -131h9q156 156 307 155q201 0 280 -170q80 82 154 126t166 44q317 0 317 -409v-631h-301v592q0 109 -29.5 150.5t-95.5 41.5q-76 0 -174 -98v-686h-301v592q0 109 -29.5 150.5t-95.5 41.5q-76 0 -172 -98v-686h-301zM733 -305.5q0 69.5 46 114 t120 44.5t121 -44.5t47 -114t-47 -113.5t-121 -44t-120 44t-46 113.5z" /> +<glyph unicode="Ṅ" horiz-adv-x="1359" d="M156 0v1335h309l348 -663l133 -295h8q-39 383 -39 487v471h287v-1335h-309l-348 666l-131 290h-8q39 -399 38 -483v-473h-288zM508 1593.5q0 69.5 49 113.5t125 44t125 -44t49 -113.5t-49 -113.5t-125 -44t-125 44t-49 113.5z" /> +<glyph unicode="ṅ" horiz-adv-x="1171" d="M133 0v1016h246l20 -129h9q162 154 325 153q315 0 316 -409v-631h-301v592q0 109 -30 150.5t-95 41.5q-53 0 -94.5 -22.5t-94.5 -75.5v-686h-301zM463 1323q0 70 47 114t121 44t120 -44t46 -114t-46 -114t-120 -44t-121 44t-47 114z" /> +<glyph unicode="Ṇ" horiz-adv-x="1359" d="M156 0v1335h309l348 -663l133 -295h8q-39 383 -39 487v471h287v-1335h-309l-348 666l-131 290h-8q39 -399 38 -483v-473h-288zM537 -305.5q0 69.5 46 114t119.5 44.5t120.5 -44.5t47 -114t-47 -113.5t-120.5 -44t-119.5 44t-46 113.5z" /> +<glyph unicode="ṇ" horiz-adv-x="1171" d="M133 0v1016h246l20 -129h9q162 154 325 153q315 0 316 -409v-631h-301v592q0 109 -30 150.5t-95 41.5q-53 0 -94.5 -22.5t-94.5 -75.5v-686h-301zM430 -305.5q0 69.5 47 114t119 44.5q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -119 44t-47 113.5z" /> +<glyph unicode="Ṉ" horiz-adv-x="1359" d="M156 0v1335h309l348 -663l133 -295h8q-39 383 -39 487v471h287v-1335h-309l-348 666l-131 290h-8q39 -399 38 -483v-473h-288zM420 -195h565v-192h-565v192z" /> +<glyph unicode="ṉ" horiz-adv-x="1171" d="M133 0v1016h246l20 -129h9q162 154 325 153q315 0 316 -409v-631h-301v592q0 109 -30 150.5t-95 41.5q-53 0 -94.5 -22.5t-94.5 -75.5v-686h-301zM313 -195h566v-192h-566v192z" /> +<glyph unicode="Ṛ" horiz-adv-x="1259" d="M156 0v1335h481q516 0 516 -415q0 -279 -238 -385l302 -535h-338l-256 481h-164v-481h-303zM459 721h153q244 0 244 199q0 94 -60.5 135t-183.5 41h-153v-375zM502 -305.5q0 69.5 47 114t119 44.5q74 0 121 -44.5t47 -114t-47.5 -113.5t-120.5 -44q-72 0 -119 44 t-47 113.5z" /> +<glyph unicode="ṛ" horiz-adv-x="815" d="M115 -305.5q0 69.5 47 114t120.5 44.5t120 -44.5t46.5 -114t-46.5 -113.5t-120 -44t-120.5 44t-47 113.5zM133 0v1016h246l20 -178h9q53 100 129.5 151t158.5 51q74 0 121 -20l-49 -260q-59 16 -111 16q-63 0 -124.5 -45t-98.5 -141v-590h-301z" /> +<glyph unicode="Ṝ" horiz-adv-x="1259" d="M156 0v1335h481q516 0 516 -415q0 -279 -238 -385l302 -535h-338l-256 481h-164v-481h-303zM344 1475v190h578v-190h-578zM459 721h153q244 0 244 199q0 94 -60.5 135t-183.5 41h-153v-375zM502 -305.5q0 69.5 47 114t119 44.5q74 0 121 -44.5t47 -114t-47.5 -113.5 t-120.5 -44q-72 0 -119 44t-47 113.5z" /> +<glyph unicode="ṝ" horiz-adv-x="815" d="M115 -305.5q0 69.5 47 114t120.5 44.5t120 -44.5t46.5 -114t-46.5 -113.5t-120 -44t-120.5 44t-47 113.5zM133 0v1016h246l20 -178h9q53 100 129.5 151t158.5 51q74 0 121 -20l-49 -260q-59 16 -111 16q-63 0 -124.5 -45t-98.5 -141v-590h-301zM223 1212v191h565v-191 h-565z" /> +<glyph unicode="Ṟ" horiz-adv-x="1259" d="M156 0v1335h481q516 0 516 -415q0 -279 -238 -385l302 -535h-338l-256 481h-164v-481h-303zM385 -195h565v-192h-565v192zM459 721h153q244 0 244 199q0 94 -60.5 135t-183.5 41h-153v-375z" /> +<glyph unicode="ṟ" horiz-adv-x="815" d="M-2 -195h567v-192h-567v192zM133 0v1016h246l20 -178h9q53 100 129.5 151t158.5 51q74 0 121 -20l-49 -260q-59 16 -111 16q-63 0 -124.5 -45t-98.5 -141v-590h-301z" /> +<glyph unicode="Ṡ" horiz-adv-x="1134" d="M70 168l174 207q160 -139 327 -139q186 0 187 129q0 68 -86 112q-23 12 -107 47l-172 74q-117 47 -193.5 138t-76.5 227q0 168 135 282.5t340 114.5q254 0 430 -176l-151 -191q-139 106 -279 107q-78 0 -124 -33t-46 -88q0 -37 27.5 -64.5t55.5 -41t97 -42.5l8 -3 q2 -1 7.5 -3t9.5 -4l170 -69q264 -106 264 -363q0 -174 -136 -294t-366 -120q-286 0 -495 193zM420 1593.5q0 69.5 49 113.5t127 44q76 0 125 -44t49 -113.5t-49 -113.5t-125 -44q-78 0 -127 44t-49 113.5z" /> +<glyph unicode="ṡ" horiz-adv-x="907" d="M43 117l135 188q141 -106 262 -106q129 0 129 86q0 10 -3 20t-11 19.5t-15.5 16.5t-22.5 15.5t-25.5 14.5t-30 14t-30.5 12t-33.5 13.5t-35.5 13.5q-268 102 -268 299q0 141 106.5 229t282.5 88q184 0 359 -129l-135 -180q-119 86 -215 86q-115 0 -115 -80q0 -14 5 -25.5 t17.5 -22.5t22.5 -18t32.5 -16.5t35 -14.5t43 -16.5t42.5 -15.5q125 -45 200 -112.5t75 -192.5q0 -143 -109.5 -235.5t-308.5 -92.5q-98 0 -204.5 39.5t-184.5 102.5zM315 1323q0 70 47.5 114t121 44t119.5 -44t46 -114t-46 -114t-119.5 -44t-121 44t-47.5 114z" /> +<glyph unicode="Ṣ" horiz-adv-x="1134" d="M70 168l174 207q160 -139 327 -139q186 0 187 129q0 68 -86 112q-23 12 -107 47l-172 74q-117 47 -193.5 138t-76.5 227q0 168 135 282.5t340 114.5q254 0 430 -176l-151 -191q-139 106 -279 107q-78 0 -124 -33t-46 -88q0 -37 27.5 -64.5t55.5 -41t97 -42.5l8 -3 q2 -1 7.5 -3t9.5 -4l170 -69q264 -106 264 -363q0 -174 -136 -294t-366 -120q-286 0 -495 193zM403 -305.5q0 69.5 47.5 114t120.5 44.5q72 0 119 -44.5t47 -114t-47 -113.5t-119 -44q-74 0 -121 44t-47 113.5z" /> +<glyph unicode="ṣ" horiz-adv-x="907" d="M43 117l135 188q141 -106 262 -106q129 0 129 86q0 10 -3 20t-11 19.5t-15.5 16.5t-22.5 15.5t-25.5 14.5t-30 14t-30.5 12t-33.5 13.5t-35.5 13.5q-268 102 -268 299q0 141 106.5 229t282.5 88q184 0 359 -129l-135 -180q-119 86 -215 86q-115 0 -115 -80q0 -14 5 -25.5 t17.5 -22.5t22.5 -18t32.5 -16.5t35 -14.5t43 -16.5t42.5 -15.5q125 -45 200 -112.5t75 -192.5q0 -143 -109.5 -235.5t-308.5 -92.5q-98 0 -204.5 39.5t-184.5 102.5zM309 -305.5q0 69.5 47 114t119 44.5q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -119 44 t-47 113.5z" /> +<glyph unicode="Ṭ" horiz-adv-x="1136" d="M49 1081v254h1036v-254h-366v-1081h-301v1081h-369zM401 -305.5q0 69.5 47.5 114t120.5 44.5q72 0 119 -44.5t47 -114t-47 -113.5t-119 -44q-74 0 -121 44t-47 113.5z" /> +<glyph unicode="ṭ" horiz-adv-x="784" d="M35 780v224l155 12l35 270h250v-270h244v-236h-244v-407q0 -162 131 -162q43 0 96 20l48 -219q-119 -37 -226 -37q-350 1 -350 394v411h-139zM315 -305.5q0 69.5 47.5 114t120.5 44.5q72 0 119 -44.5t47 -114t-47 -113.5t-119 -44q-74 0 -121 44t-47 113.5z" /> +<glyph unicode="Ṯ" horiz-adv-x="1136" d="M49 1081v254h1036v-254h-366v-1081h-301v1081h-369zM285 -195h567v-192h-567v192z" /> +<glyph unicode="ṯ" horiz-adv-x="784" d="M35 780v224l155 12l35 270h250v-270h244v-236h-244v-407q0 -162 131 -162q43 0 96 20l48 -219q-119 -37 -226 -37q-350 1 -350 394v411h-139zM199 -195h565v-192h-565v192z" /> +<glyph unicode="Ẁ" horiz-adv-x="1662" d="M27 1335h309l92 -624q18 -139 55 -422h9q29 164 77 422l144 624h256l145 -624q27 -135 80 -422h8q20 170 53 422l93 624h288l-237 -1335h-379l-131 606q-31 150 -53 309h-9q-43 -258 -53 -309l-127 -606h-373zM500 1683h319l166 -245h-240z" /> +<glyph unicode="ẁ" horiz-adv-x="1589" d="M49 1016h299l98 -471q8 -51 22.5 -151.5t23.5 -149.5h8q41 231 59 301l113 471h260l115 -471q18 -74 63 -301h8q8 51 22.5 150.5t24.5 150.5l97 471h278l-244 -1016h-352l-92 406q-23 102 -55 296h-9q-45 -266 -51 -296l-90 -406h-344zM492 1483h290l183 -307h-222z" /> +<glyph unicode="Ẃ" horiz-adv-x="1662" d="M27 1335h309l92 -624q18 -139 55 -422h9q29 164 77 422l144 624h256l145 -624q27 -135 80 -422h8q20 170 53 422l93 624h288l-237 -1335h-379l-131 606q-31 150 -53 309h-9q-43 -258 -53 -309l-127 -606h-373zM678 1438l166 245h319l-243 -245h-242z" /> +<glyph unicode="ẃ" horiz-adv-x="1589" d="M49 1016h299l98 -471q8 -51 22.5 -151.5t23.5 -149.5h8q41 231 59 301l113 471h260l115 -471q18 -74 63 -301h8q8 51 22.5 150.5t24.5 150.5l97 471h278l-244 -1016h-352l-92 406q-23 102 -55 296h-9q-45 -266 -51 -296l-90 -406h-344zM629 1176l182 307h291l-254 -307 h-219z" /> +<glyph unicode="Ẅ" horiz-adv-x="1662" d="M27 1335h309l92 -624q18 -139 55 -422h9q29 164 77 422l144 624h256l145 -624q27 -135 80 -422h8q20 170 53 422l93 624h288l-237 -1335h-379l-131 606q-31 150 -53 309h-9q-43 -258 -53 -309l-127 -606h-373zM485 1577q0 61 40 102t103.5 41t103.5 -41t40 -102t-40 -102 t-103.5 -41t-103.5 41t-40 102zM891 1577q0 61 40 102t103.5 41t103.5 -41t40 -102t-40 -102t-103.5 -41t-103.5 41t-40 102z" /> +<glyph unicode="ẅ" horiz-adv-x="1589" d="M49 1016h299l98 -471q8 -51 22.5 -151.5t23.5 -149.5h8q41 231 59 301l113 471h260l115 -471q18 -74 63 -301h8q8 51 22.5 150.5t24.5 150.5l97 471h278l-244 -1016h-352l-92 406q-23 102 -55 296h-9q-45 -266 -51 -296l-90 -406h-344zM451 1313q0 59 40.5 100t102 41 t102.5 -41t41 -100q0 -61 -40 -102.5t-103.5 -41.5t-103 41t-39.5 103zM856 1313q0 59 41 100t102.5 41t102.5 -41t41 -100q0 -61 -40 -102.5t-103.5 -41.5t-103.5 41t-40 103z" /> +<glyph unicode="Ẏ" horiz-adv-x="1073" d="M-16 1335h321l121 -307q37 -106 109 -295h8q20 55 58 152.5t54 142.5l119 307h316l-404 -860v-475h-301v475zM362 1593.5q0 69.5 49.5 113.5t125 44t125 -44t49.5 -113.5t-49.5 -113.5t-125 -44t-125 44t-49.5 113.5z" /> +<glyph unicode="ẏ" horiz-adv-x="1067" d="M25 1016h303l145 -436q23 -72 80 -289h8q45 193 70 289l123 436h288l-352 -1026q-76 -203 -174 -295t-270 -92q-76 0 -144 20l54 230q55 -12 67 -13q133 0 178 133l15 54zM379 1323q0 70 47 114t121 44t120 -44t46 -114t-46 -114t-120 -44t-121 44t-47 114z" /> +<glyph unicode="Ẓ" horiz-adv-x="1105" d="M72 0v182l590 899h-535v254h907v-182l-590 -899h594v-254h-966zM410 -305.5q0 69.5 46 114t119.5 44.5t120.5 -44.5t47 -114t-47 -113.5t-120.5 -44t-119.5 44t-46 113.5z" /> +<glyph unicode="ẓ" horiz-adv-x="942" d="M78 0v162l426 618h-379v236h754v-160l-426 -620h440v-236h-815zM336 -305.5q0 69.5 47 114t119 44.5q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -119 44t-47 113.5z" /> +<glyph unicode="ẗ" horiz-adv-x="784" d="M-4 1599.5q0 61.5 41 102.5t102.5 41t102.5 -41t41 -102.5t-40 -102.5t-103.5 -41t-103.5 41t-40 102.5zM35 780v224l155 12l35 270h250v-270h244v-236h-244v-407q0 -162 131 -162q43 0 96 20l48 -219q-119 -37 -226 -37q-350 1 -350 394v411h-139zM401 1599.5 q0 61.5 41 102.5t102.5 41t102.5 -41t41 -102.5t-40 -102.5t-103.5 -41t-103.5 41t-40 102.5z" /> +<glyph unicode="ẞ" horiz-adv-x="1441" d="M164 0v838q0 233 142.5 377.5t430.5 144.5q197 0 329 -101.5t179 -273.5l-221 -250q338 -106 338 -370q0 -170 -109.5 -280t-306.5 -110q-233 0 -381 148l158 184q88 -88 186 -88q66 0 105 41t39 107q0 141 -310 196l-18 176l223 256q-66 121 -219 121q-264 0 -264 -319 v-797h-301z" /> +<glyph unicode="Ạ" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM412 -305.5q0 69.5 47 114t119 44.5q74 0 120.5 -44.5t46.5 -114t-47 -113.5t-120 -44q-72 0 -119 44t-47 113.5zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430z" /> +<glyph unicode="ạ" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM373 -305.5q0 69.5 47 114t121 44.5q72 0 119 -44.5t47 -114t-47 -113.5 t-119 -44q-74 0 -121 44t-47 113.5zM383 305q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168z" /> +<glyph unicode="Ả" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM412 1665l34 150q344 -8 345 -187q0 -100 -79 -151.5t-206 -61.5l-23 119q90 18 90 61q0 57 -161 70zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430z" /> +<glyph unicode="ả" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM383 305q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168zM408 1389l34 151 q346 -10 346 -188q0 -98 -79.5 -150.5t-206.5 -60.5l-23 119q92 14 92 61q0 59 -163 68z" /> +<glyph unicode="Ấ" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM254 1438l195 233h260l194 -233h-213l-108 112h-9l-106 -112h-213zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430zM809 1577l141 246h234l-203 -246h-172z" /> +<glyph unicode="ấ" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM289 1176l166 262h239l166 -262h-186l-94 133h-9l-96 -133h-186zM383 305 q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168zM795 1323l139 242h223l-194 -242h-168z" /> +<glyph unicode="Ầ" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM254 1438l195 233h260l194 -233h-213l-108 112h-9l-106 -112h-213zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430zM692 1823h234l139 -246h-170z" /> +<glyph unicode="ầ" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM289 1176l166 262h239l166 -262h-186l-94 133h-9l-96 -133h-186zM383 305 q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168zM723 1565h223l139 -242h-167z" /> +<glyph unicode="Ẩ" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM254 1438l195 233h260l194 -233h-213l-108 112h-9l-106 -112h-213zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430zM768 1755l29 123q299 -8 299 -164q0 -160 -236 -178l-24 96 q68 14 67 56q0 57 -135 67z" /> +<glyph unicode="ẩ" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM289 1176l166 262h239l166 -262h-186l-94 133h-9l-96 -133h-186zM383 305 q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168zM766 1513l27 127q303 -8 303 -161q0 -92 -62.5 -134.5t-177.5 -58.5l-18 103q61 14 61 57q0 59 -133 67z" /> +<glyph unicode="Ẫ" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM254 1438l195 233h260l194 -233h-213l-108 112h-9l-106 -112h-213zM272 1745q12 115 63.5 173t123.5 58q61 0 130.5 -37.5t92.5 -37.5q54 -1 72 75h131q-12 -115 -63.5 -173t-123.5 -58q-61 0 -130.5 39 t-92.5 39q-57 0 -72 -78h-131zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430z" /> +<glyph unicode="ẫ" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM272 1174l166 227h273l166 -227h-197l-100 120h-9l-102 -120h-197zM276 1475 q12 117 62.5 175t124.5 58q61 0 123.5 -39t85.5 -39q55 0 71 78h131q-12 -115 -63 -174t-123 -59q-61 0 -124.5 38.5t-84.5 38.5q-57 1 -73 -77h-130zM383 305q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168z" /> +<glyph unicode="Ậ" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM236 1438l196 245h293l197 -245h-230l-110 125h-9l-108 -125h-229zM412 -305.5q0 69.5 47 114t119 44.5q74 0 120.5 -44.5t46.5 -114t-47 -113.5t-120 -44q-72 0 -119 44t-47 113.5zM436 553h287l-33 123 q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430z" /> +<glyph unicode="ậ" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM258 1176l197 307h239l197 -307h-203l-108 161h-9l-110 -161h-203zM373 -305.5 q0 69.5 47 114t121 44.5q72 0 119 -44.5t47 -114t-47 -113.5t-119 -44q-74 0 -121 44t-47 113.5zM383 305q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168z" /> +<glyph unicode="Ắ" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM299 1683h137q27 -111 141.5 -111t143.5 111h137q-27 -246 -280 -245q-127 0 -197 65.5t-82 179.5zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430zM487 1655l131 243h226 l-205 -243h-152z" /> +<glyph unicode="ắ" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM291 1460h133q23 -137 151 -137q127 0 150 137h135q-4 -121 -76.5 -202.5 t-208 -81.5t-208 81.5t-76.5 202.5zM383 305q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168zM479 1417l119 242h217l-184 -242h-152z" /> +<glyph unicode="Ằ" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM299 1683h137q27 -111 141.5 -111t143.5 111h137q-27 -246 -280 -245q-127 0 -197 65.5t-82 179.5zM311 1898h228l131 -243h-152zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430z " /> +<glyph unicode="ằ" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM291 1460h133q23 -137 151 -137q127 0 150 137h135q-4 -121 -76.5 -202.5 t-208 -81.5t-208 81.5t-76.5 202.5zM336 1659h215l119 -242h-152zM383 305q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168z" /> +<glyph unicode="Ẳ" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM299 1683h137q27 -111 141.5 -111t143.5 111h137q-27 -246 -280 -245q-127 0 -197 65.5t-82 179.5zM420 1870l29 125q299 -10 299 -166q0 -160 -236 -178l-25 96q68 14 68 55q0 31 -29.5 46.5 t-105.5 21.5zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430z" /> +<glyph unicode="ẳ" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM291 1460h133q23 -137 151 -137q127 0 150 137h135q-4 -121 -76.5 -202.5 t-208 -81.5t-208 81.5t-76.5 202.5zM383 305q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168zM412 1657l28 127q303 -10 303 -164q0 -92 -63 -134t-176 -56l-21 102q63 14 64 57q0 31 -30 46.5t-105 21.5z" /> +<glyph unicode="Ẵ" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM266 1745q12 115 64.5 174t124.5 59q51 0 121.5 -40t95.5 -40q58 0 76 80h133q-12 -115 -64.5 -174t-126.5 -59q-51 0 -120.5 39t-94.5 39q-59 0 -76 -78h-133zM299 1683h137q27 -111 141.5 -110.5 t143.5 110.5h137q-27 -246 -280 -245q-127 0 -197 65t-82 180zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430z" /> +<glyph unicode="ẵ" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM276 1475q12 117 62.5 175t124.5 58q61 0 123.5 -39t85.5 -39q55 0 71 78h131 q-12 -115 -63 -174t-123 -59q-61 0 -124.5 38.5t-84.5 38.5q-57 0 -73 -77h-130zM291 1419h141q25 -102 143 -102q117 0 142 102h141q-4 -104 -76 -173.5t-207 -69.5q-137 0 -208.5 69.5t-75.5 173.5zM383 305q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168z" /> +<glyph unicode="Ặ" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM299 1683h164q23 -94 115 -94q93 0 116 94h164q-29 -246 -280 -245q-129 0 -199 65.5t-80 179.5zM412 -305.5q0 69.5 47 114t119 44.5q74 0 120.5 -44.5t46.5 -114t-47 -113.5t-120 -44q-72 0 -119 44 t-47 113.5zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430z" /> +<glyph unicode="ặ" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM291 1460h168q14 -119 116 -119q98 0 117 119h168q-4 -121 -76.5 -202.5 t-208 -81.5t-208 81.5t-76.5 202.5zM373 -305.5q0 69.5 47 114t121 44.5q72 0 119 -44.5t47 -114t-47 -113.5t-119 -44q-74 0 -121 44t-47 113.5zM383 305q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168z" /> +<glyph unicode="Ẹ" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM434 -305.5q0 69.5 47 114t121 44.5q72 0 119 -44.5t47 -114t-47 -113.5t-119 -44q-74 0 -121 44t-47 113.5z" /> +<glyph unicode="ẹ" horiz-adv-x="1056" d="M74 508q0 238 143 385t336 147q209 0 320.5 -135t111.5 -352q0 -78 -12 -127h-608q39 -221 264 -221q109 0 219 67l100 -182q-168 -115 -360 -115q-223 0 -368.5 143.5t-145.5 389.5zM362 612h367q0 199 -170 199q-74 0 -128.5 -50.5t-68.5 -148.5zM385 -305.5 q0 69.5 47 114t119 44.5q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -119 44t-47 113.5z" /> +<glyph unicode="Ẻ" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM422 1665l35 150q346 -8 346 -187q0 -100 -79 -151.5t-206 -61.5l-24 119q92 18 92 61q0 57 -164 70z" /> +<glyph unicode="ẻ" horiz-adv-x="1056" d="M74 508q0 238 143 385t336 147q209 0 320.5 -135t111.5 -352q0 -78 -12 -127h-608q39 -221 264 -221q109 0 219 67l100 -182q-168 -115 -360 -115q-223 0 -368.5 143.5t-145.5 389.5zM362 612h367q0 199 -170 199q-74 0 -128.5 -50.5t-68.5 -148.5zM387 1389l33 151 q346 -10 346 -188q0 -98 -80 -150.5t-205 -60.5l-24 119q92 14 92 61q0 59 -162 68z" /> +<glyph unicode="Ẽ" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM242 1440q14 135 74.5 206.5t144.5 71.5q59 0 139 -46t105 -46q59 0 79 92h154q-14 -135 -74.5 -206.5t-144.5 -71.5q-61 0 -141 46t-105 46q-57 0 -80 -92h-151z" /> +<glyph unicode="ẽ" horiz-adv-x="1056" d="M74 508q0 238 143 385t336 147q209 0 320.5 -135t111.5 -352q0 -78 -12 -127h-608q39 -221 264 -221q109 0 219 67l100 -182q-168 -115 -360 -115q-223 0 -368.5 143.5t-145.5 389.5zM213 1178q14 135 71.5 205.5t141.5 70.5q59 0 138 -45t104 -45q49 0 71 90h154 q-16 -135 -72.5 -205.5t-140.5 -70.5q-61 0 -139 46t-103 46q-51 0 -71 -92h-154zM362 612h367q0 199 -170 199q-74 0 -128.5 -50.5t-68.5 -148.5z" /> +<glyph unicode="Ế" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM264 1438l195 233h260l194 -233h-213l-106 112h-8l-109 -112h-213zM819 1577l142 246h233l-203 -246h-172z" /> +<glyph unicode="ế" horiz-adv-x="1056" d="M74 508q0 238 143 385t336 147q209 0 320.5 -135t111.5 -352q0 -78 -12 -127h-608q39 -221 264 -221q109 0 219 67l100 -182q-168 -115 -360 -115q-223 0 -368.5 143.5t-145.5 389.5zM268 1176l164 262h240l166 -262h-187l-94 133h-8l-96 -133h-185zM362 612h367 q0 199 -170 199q-74 0 -128.5 -50.5t-68.5 -148.5zM772 1323l139 242h224l-195 -242h-168z" /> +<glyph unicode="Ề" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM264 1438l195 233h260l194 -233h-213l-106 112h-8l-109 -112h-213zM702 1823h234l141 -246h-172z" /> +<glyph unicode="ề" horiz-adv-x="1056" d="M74 508q0 238 143 385t336 147q209 0 320.5 -135t111.5 -352q0 -78 -12 -127h-608q39 -221 264 -221q109 0 219 67l100 -182q-168 -115 -360 -115q-223 0 -368.5 143.5t-145.5 389.5zM268 1176l164 262h240l166 -262h-187l-94 133h-8l-96 -133h-185zM362 612h367 q0 199 -170 199q-74 0 -128.5 -50.5t-68.5 -148.5zM700 1565h224l139 -242h-168z" /> +<glyph unicode="Ể" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM264 1438l195 233h260l194 -233h-213l-106 112h-8l-109 -112h-213zM778 1755l29 123q299 -8 299 -164q0 -160 -236 -178l-24 96q68 14 67 56q0 31 -29.5 46t-105.5 21z" /> +<glyph unicode="ể" horiz-adv-x="1056" d="M74 508q0 238 143 385t336 147q209 0 320.5 -135t111.5 -352q0 -78 -12 -127h-608q39 -221 264 -221q109 0 219 67l100 -182q-168 -115 -360 -115q-223 0 -368.5 143.5t-145.5 389.5zM268 1176l164 262h240l166 -262h-187l-94 133h-8l-96 -133h-185zM362 612h367 q0 199 -170 199q-74 0 -128.5 -50.5t-68.5 -148.5zM743 1513l27 127q303 -8 303 -161q0 -92 -62 -134.5t-177 -58.5l-19 103q61 14 62 57q0 59 -134 67z" /> +<glyph unicode="Ễ" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM264 1438l195 233h260l194 -233h-213l-106 112h-8l-109 -112h-213zM283 1745q12 115 63 173t123 58q61 0 131 -37.5t92 -37.5q57 0 72 75h131q-12 -115 -63.5 -173t-122.5 -58q-61 0 -131 39t-93 39 q-55 0 -71 -78h-131z" /> +<glyph unicode="ễ" horiz-adv-x="1056" d="M74 508q0 238 143 385t336 147q209 0 320.5 -135t111.5 -352q0 -78 -12 -127h-608q39 -221 264 -221q109 0 219 67l100 -182q-168 -115 -360 -115q-223 0 -368.5 143.5t-145.5 389.5zM252 1174l164 227h274l164 -227h-195l-102 120h-8l-103 -120h-194zM254 1475 q12 117 62.5 175t123.5 58q61 0 124 -39t85 -39q57 0 72 78h131q-12 -115 -63.5 -174t-122.5 -59q-61 0 -124 38.5t-85 38.5q-58 1 -74 -77h-129zM362 612h367q0 199 -170 199q-74 0 -128.5 -50.5t-68.5 -148.5z" /> +<glyph unicode="Ệ" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM246 1438l196 245h293l197 -245h-230l-108 125h-8l-111 -125h-229zM434 -305.5q0 69.5 47 114t121 44.5q72 0 119 -44.5t47 -114t-47 -113.5t-119 -44q-74 0 -121 44t-47 113.5z" /> +<glyph unicode="ệ" horiz-adv-x="1056" d="M74 508q0 238 143 385t336 147q209 0 320.5 -135t111.5 -352q0 -78 -12 -127h-608q39 -221 264 -221q109 0 219 67l100 -182q-168 -115 -360 -115q-223 0 -368.5 143.5t-145.5 389.5zM238 1176l194 307h240l196 -307h-202l-109 161h-8l-109 -161h-202zM362 612h367 q0 199 -170 199q-74 0 -128.5 -50.5t-68.5 -148.5zM385 -305.5q0 69.5 47 114t119 44.5q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -119 44t-47 113.5z" /> +<glyph unicode="Ỉ" horiz-adv-x="614" d="M141 1665l33 150q346 -8 346 -187q0 -100 -78.5 -151.5t-205.5 -61.5l-25 119q92 18 92 61q0 57 -162 70zM156 0v1335h303v-1335h-303z" /> +<glyph unicode="ỉ" horiz-adv-x="565" d="M117 1389l35 151q344 -10 344 -188q0 -98 -80 -150.5t-205 -60.5l-23 119q90 14 91 61q0 59 -162 68zM133 0v1016h301v-1016h-301z" /> +<glyph unicode="Ị" horiz-adv-x="614" d="M141 -305.5q0 69.5 46 114t120 44.5t121 -44.5t47 -114t-47 -113.5t-121 -44t-120 44t-46 113.5zM156 0v1335h303v-1335h-303z" /> +<glyph unicode="ị" horiz-adv-x="565" d="M109 1323q0 70 49 113t125 43q78 0 126 -43t48 -113t-49.5 -114t-125 -44t-124.5 44t-49 114zM117 -305.5q0 69.5 47 114t119 44.5q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -119 44t-47 113.5zM133 0v1016h301v-1016h-301z" /> +<glyph unicode="Ọ" horiz-adv-x="1398" d="M92 674q0 322 166 504t440.5 182t440.5 -182.5t166 -503.5q0 -324 -166.5 -511.5t-440.5 -187.5q-272 0 -439 187.5t-167 511.5zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5t80 319.5q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312zM532 -305.5 q0 69.5 47.5 114t118.5 44.5q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -119 44t-47 113.5z" /> +<glyph unicode="ọ" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q203 0 348.5 -144t145.5 -388t-145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212t-48.5 212t-138.5 77q-92 0 -139 -77t-47 -212zM401 -305.5q0 69.5 47.5 114 t120.5 44.5q72 0 119 -44.5t47 -114t-47 -113.5t-119 -44q-74 0 -121 44t-47 113.5z" /> +<glyph unicode="Ỏ" horiz-adv-x="1398" d="M92 674q0 322 166 504t440.5 182t440.5 -182.5t166 -503.5q0 -324 -166.5 -511.5t-440.5 -187.5q-272 0 -439 187.5t-167 511.5zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5t80 319.5q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312zM532 1665 l35 150q344 -8 344 -187q1 -190 -284 -213l-23 119q92 18 92 61q0 57 -164 70z" /> +<glyph unicode="ỏ" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q203 0 348.5 -144t145.5 -388t-145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212t-48.5 212t-138.5 77q-92 0 -139 -77t-47 -212zM401 1389l35 151q344 -10 344 -188 q0 -98 -78.5 -150.5t-205.5 -60.5l-23 119q92 14 92 61q0 59 -164 68z" /> +<glyph unicode="Ố" horiz-adv-x="1398" d="M92 674q0 322 166 504t440.5 182t440.5 -182.5t166 -503.5q0 -324 -166.5 -511.5t-440.5 -187.5q-272 0 -439 187.5t-167 511.5zM375 1438l194 233h260l195 -233h-213l-109 112h-8l-106 -112h-213zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5t80 319.5 q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312zM930 1577l141 246h234l-203 -246h-172z" /> +<glyph unicode="ố" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q203 0 348.5 -144t145.5 -388t-145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM283 1176l166 262h239l166 -262h-186l-95 133h-8l-96 -133h-186zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212t-48.5 212 t-138.5 77q-92 0 -139 -77t-47 -212zM786 1323l142 242h221l-193 -242h-170z" /> +<glyph unicode="Ồ" horiz-adv-x="1398" d="M92 674q0 322 166 504t440.5 182t440.5 -182.5t166 -503.5q0 -324 -166.5 -511.5t-440.5 -187.5q-272 0 -439 187.5t-167 511.5zM375 1438l194 233h260l195 -233h-213l-109 112h-8l-106 -112h-213zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5t80 319.5 q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312zM813 1823h234l139 -246h-170z" /> +<glyph unicode="ồ" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q203 0 348.5 -144t145.5 -388t-145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM283 1176l166 262h239l166 -262h-186l-95 133h-8l-96 -133h-186zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212t-48.5 212 t-138.5 77q-92 0 -139 -77t-47 -212zM717 1565h223l139 -242h-168z" /> +<glyph unicode="Ổ" horiz-adv-x="1398" d="M92 674q0 322 166 504t440.5 182t440.5 -182.5t166 -503.5q0 -324 -166.5 -511.5t-440.5 -187.5q-272 0 -439 187.5t-167 511.5zM375 1438l194 233h260l195 -233h-213l-109 112h-8l-106 -112h-213zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5t80 319.5 q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312zM889 1755l29 123q299 -8 299 -164q0 -160 -236 -178l-25 96q68 14 68 56q0 57 -135 67z" /> +<glyph unicode="ổ" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q203 0 348.5 -144t145.5 -388t-145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM283 1176l166 262h239l166 -262h-186l-95 133h-8l-96 -133h-186zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212t-48.5 212 t-138.5 77q-92 0 -139 -77t-47 -212zM760 1513l26 127q303 -8 304 -161q0 -92 -62.5 -134.5t-177.5 -58.5l-21 103q63 14 64 57q0 59 -133 67z" /> +<glyph unicode="Ỗ" horiz-adv-x="1398" d="M92 674q0 322 166 504t440.5 182t440.5 -182.5t166 -503.5q0 -324 -166.5 -511.5t-440.5 -187.5q-272 0 -439 187.5t-167 511.5zM375 1438l194 233h260l195 -233h-213l-109 112h-8l-106 -112h-213zM393 1745q12 115 63.5 173t123.5 58q61 0 130.5 -37.5t92.5 -37.5 q57 0 71 75h132q-12 -115 -63.5 -173t-123.5 -58q-61 0 -131 39t-92 39q-58 0 -72 -78h-131zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5t80 319.5q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312z" /> +<glyph unicode="ỗ" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q203 0 348.5 -144t145.5 -388t-145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM266 1174l166 227h273l165 -227h-196l-101 120h-8l-102 -120h-197zM270 1475q12 117 62.5 175t124.5 58q61 0 123.5 -39t85.5 -39q55 0 71 78 h131q-12 -115 -64 -174t-124 -59q-59 0 -122.5 38.5t-86.5 38.5q-56 1 -72 -77h-129zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212t-48.5 212t-138.5 77q-92 0 -139 -77t-47 -212z" /> +<glyph unicode="Ộ" horiz-adv-x="1398" d="M92 674q0 322 166 504t440.5 182t440.5 -182.5t166 -503.5q0 -324 -166.5 -511.5t-440.5 -187.5q-272 0 -439 187.5t-167 511.5zM356 1438l197 245h293l196 -245h-229l-111 125h-8l-108 -125h-230zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5t80 319.5 q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312zM532 -305.5q0 69.5 47.5 114t118.5 44.5q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -119 44t-47 113.5z" /> +<glyph unicode="ộ" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q203 0 348.5 -144t145.5 -388t-145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM252 1176l197 307h239l197 -307h-203l-109 161h-8l-110 -161h-203zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212t-48.5 212 t-138.5 77q-92 0 -139 -77t-47 -212zM401 -305.5q0 69.5 47.5 114t120.5 44.5q72 0 119 -44.5t47 -114t-47 -113.5t-119 -44q-74 0 -121 44t-47 113.5z" /> +<glyph unicode="Ớ" horiz-adv-x="1398" d="M92 674q0 322 166 504t440 182q156 0 287 -64q61 14 91 42t30 83q0 42 -31 95l205 90q59 -72 59 -164q0 -184 -217 -246q182 -188 183 -522q0 -324 -166 -511.5t-441 -187.5q-272 0 -439 187.5t-167 511.5zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5 t80 319.5q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312zM547 1438l164 245h319l-244 -245h-239z" /> +<glyph unicode="ớ" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q98 0 195 -39q113 25 113 121q0 46 -31 95l205 90q59 -72 59 -164q0 -184 -199 -242q152 -147 152 -393q0 -244 -145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212 t-48.5 212t-138.5 77q-92 0 -139 -77t-47 -212zM401 1176l183 307h290l-253 -307h-220z" /> +<glyph unicode="Ờ" horiz-adv-x="1398" d="M92 674q0 322 166 504t440 182q156 0 287 -64q61 14 91 42t30 83q0 42 -31 95l205 90q59 -72 59 -164q0 -184 -217 -246q182 -188 183 -522q0 -324 -166 -511.5t-441 -187.5q-272 0 -439 187.5t-167 511.5zM367 1683h319l166 -245h-240zM401 674q0 -201 81 -319.5 t216 -118.5q137 0 217 118.5t80 319.5q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312z" /> +<glyph unicode="ờ" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q98 0 195 -39q113 25 113 121q0 46 -31 95l205 90q59 -72 59 -164q0 -184 -199 -242q152 -147 152 -393q0 -244 -145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM262 1483h291l182 -307h-219zM383 508q0 -135 47 -212 t139 -77q90 0 138.5 77t48.5 212t-48.5 212t-138.5 77q-92 0 -139 -77t-47 -212z" /> +<glyph unicode="Ở" horiz-adv-x="1398" d="M92 674q0 322 166 504t440 182q156 0 287 -64q61 14 91 42t30 83q0 42 -31 95l205 90q59 -72 59 -164q0 -184 -217 -246q182 -188 183 -522q0 -324 -166 -511.5t-441 -187.5q-272 0 -439 187.5t-167 511.5zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5 t80 319.5q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312zM532 1665l35 150q344 -8 344 -187q1 -190 -284 -213l-23 119q92 18 92 61q0 57 -164 70z" /> +<glyph unicode="ở" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q98 0 195 -39q113 25 113 121q0 46 -31 95l205 90q59 -72 59 -164q0 -184 -199 -242q152 -147 152 -393q0 -244 -145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212 t-48.5 212t-138.5 77q-92 0 -139 -77t-47 -212zM401 1389l35 151q344 -10 344 -188q0 -98 -78.5 -150.5t-205.5 -60.5l-23 119q92 14 92 61q0 59 -164 68z" /> +<glyph unicode="Ỡ" horiz-adv-x="1398" d="M92 674q0 322 166 504t440 182q156 0 287 -64q61 14 91 42t30 83q0 42 -31 95l205 90q59 -72 59 -164q0 -184 -217 -246q182 -188 183 -522q0 -324 -166 -511.5t-441 -187.5q-272 0 -439 187.5t-167 511.5zM350 1440q16 135 75.5 206.5t143.5 71.5q61 0 141.5 -46 t104.5 -46q60 0 80 92h154q-16 -135 -77 -206.5t-145 -71.5q-59 0 -139 46t-104 46q-59 0 -80 -92h-154zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5t80 319.5q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312z" /> +<glyph unicode="ỡ" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q98 0 195 -39q113 25 113 121q0 46 -31 95l205 90q59 -72 59 -164q0 -184 -199 -242q152 -147 152 -393q0 -244 -145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM229 1178q14 135 71.5 205.5t139.5 70.5q59 0 139 -45 t105 -45q50 0 70 90h153q-14 -135 -70.5 -205.5t-140.5 -70.5q-61 0 -139 46t-102 46q-51 0 -72 -92h-154zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212t-48.5 212t-138.5 77q-92 0 -139 -77t-47 -212z" /> +<glyph unicode="Ợ" horiz-adv-x="1398" d="M92 674q0 322 166 504t440 182q156 0 287 -64q61 14 91 42t30 83q0 42 -31 95l205 90q59 -72 59 -164q0 -184 -217 -246q182 -188 183 -522q0 -324 -166 -511.5t-441 -187.5q-272 0 -439 187.5t-167 511.5zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5 t80 319.5q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312zM532 -305.5q0 69.5 47 114t119 44.5q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -119 44t-47 113.5z" /> +<glyph unicode="ợ" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q98 0 195 -39q113 25 113 121q0 46 -31 95l205 90q59 -72 59 -164q0 -184 -199 -242q152 -147 152 -393q0 -244 -145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212 t-48.5 212t-138.5 77q-92 0 -139 -77t-47 -212zM401 -305.5q0 69.5 47 114t121 44.5q72 0 119 -44.5t47 -114t-47 -113.5t-119 -44q-74 0 -121 44t-47 113.5z" /> +<glyph unicode="Ụ" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h290v-717q0 -332 -132 -487.5t-396 -155.5t-398 156.5t-134 486.5zM512 -305.5q0 69.5 47 114t121 44.5q72 0 119 -44.5t47 -114t-47 -113.5t-119 -44q-74 0 -121 44t-47 113.5z" /> +<glyph unicode="ụ" horiz-adv-x="1161" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h301v-1016h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM451 -305.5q0 69.5 47 114t120 44.5q72 0 119 -44.5t47 -114t-47 -113.5t-119 -44q-74 0 -120.5 44t-46.5 113.5z" /> +<glyph unicode="Ủ" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h290v-717q0 -332 -132 -487.5t-396 -155.5t-398 156.5t-134 486.5zM512 1665l35 150q346 -8 346 -187q0 -100 -79 -151.5t-208 -61.5l-22 119q92 18 92 61q0 57 -164 70z" /> +<glyph unicode="ủ" horiz-adv-x="1161" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h301v-1016h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM414 1389l35 151q344 -10 344 -188q0 -98 -79 -150.5t-206 -60.5l-23 119q92 14 93 61q0 59 -164 68z" /> +<glyph unicode="Ứ" horiz-adv-x="1394" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h143q76 4 122 30t46 97q0 45 -33 94l205 91q61 -70 61 -164q0 -109 -69.5 -172.5t-184.5 -85.5v-607q0 -332 -132 -487.5t-396 -155.5t-398 157t-134 486zM526 1438l164 245h320l-244 -245h-240z " /> +<glyph unicode="ứ" horiz-adv-x="1204" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h102q166 8 166 127q1 49 -32 94l206 90q59 -72 60 -164q0 -182 -201 -241v-922h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM414 1176l180 307h293l-254 -307h-219z" /> +<glyph unicode="Ừ" horiz-adv-x="1394" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h143q76 4 122 30t46 97q0 45 -33 94l205 91q61 -70 61 -164q0 -109 -69.5 -172.5t-184.5 -85.5v-607q0 -332 -132 -487.5t-396 -155.5t-398 157t-134 486zM346 1683h320l165 -245h-239z" /> +<glyph unicode="ừ" horiz-adv-x="1204" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h102q166 8 166 127q1 49 -32 94l206 90q59 -72 60 -164q0 -182 -201 -241v-922h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM274 1483h291l183 -307h-220z" /> +<glyph unicode="Ử" horiz-adv-x="1394" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h143q76 4 122 30t46 97q0 45 -33 94l205 91q61 -70 61 -164q0 -109 -69.5 -172.5t-184.5 -85.5v-607q0 -332 -132 -487.5t-396 -155.5t-398 157t-134 486zM512 1665l35 150q344 -8 344 -187 q0 -190 -285 -213l-22 119q92 18 92 61q0 57 -164 70z" /> +<glyph unicode="ử" horiz-adv-x="1204" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h102q166 8 166 127q1 49 -32 94l206 90q59 -72 60 -164q0 -182 -201 -241v-922h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM414 1389l35 151q344 -10 344 -188q0 -98 -80 -150.5 t-205 -60.5l-23 119q90 14 90 61q0 59 -161 68z" /> +<glyph unicode="Ữ" horiz-adv-x="1394" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h143q76 4 122 30t46 97q0 45 -33 94l205 91q61 -70 61 -164q0 -109 -69.5 -172.5t-184.5 -85.5v-607q0 -332 -132 -487.5t-396 -155.5t-398 157t-134 486zM330 1440q16 135 75.5 206.5 t143.5 71.5q61 0 141 -46t105 -46q59 0 79 92h154q-16 -135 -76.5 -206.5t-144.5 -71.5q-59 0 -139 46t-105 46q-59 0 -80 -92h-153z" /> +<glyph unicode="ữ" horiz-adv-x="1204" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h102q166 8 166 127q1 49 -32 94l206 90q59 -72 60 -164q0 -182 -201 -241v-922h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM242 1178q14 135 70.5 205.5t140.5 70.5q59 0 139 -45 t102 -45q52 0 72 90h154q-14 -135 -71.5 -205.5t-139.5 -70.5q-59 0 -139.5 46t-104.5 46q-49 0 -70 -92h-153z" /> +<glyph unicode="Ự" horiz-adv-x="1394" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h143q76 4 122 30t46 97q0 45 -33 94l205 91q61 -70 61 -164q0 -109 -69.5 -172.5t-184.5 -85.5v-607q0 -332 -132 -487.5t-396 -155.5t-398 157t-134 486zM512 -305.5q0 69.5 47 114t119 44.5 q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -119 44t-47 113.5z" /> +<glyph unicode="ự" horiz-adv-x="1204" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h102q166 8 166 127q1 49 -32 94l206 90q59 -72 60 -164q0 -182 -201 -241v-922h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM451 -305.5q0 69.5 46.5 114t120.5 44.5q72 0 119 -44.5 t47 -114t-47 -113.5t-119 -44q-74 0 -120.5 44t-46.5 113.5z" /> +<glyph unicode="Ỳ" horiz-adv-x="1073" d="M-16 1335h321l121 -307q37 -106 109 -295h8q20 55 58 152.5t54 142.5l119 307h316l-404 -860v-475h-301v475zM205 1683h319l166 -245h-241z" /> +<glyph unicode="ỳ" horiz-adv-x="1067" d="M25 1016h303l145 -436q23 -72 80 -289h8q45 193 70 289l123 436h288l-352 -1026q-76 -203 -174 -295t-270 -92q-76 0 -144 20l54 230q55 -12 67 -13q133 0 178 133l15 54zM242 1483h290l183 -307h-221z" /> +<glyph unicode="Ỵ" horiz-adv-x="1073" d="M-16 1335h321l121 -307q37 -106 109 -295h8q20 55 58 152.5t54 142.5l119 307h316l-404 -860v-475h-301v475zM373 -305.5q0 69.5 47 114t121 44.5q72 0 119 -44.5t47 -114t-47 -113.5t-119 -44q-74 0 -121 44t-47 113.5z" /> +<glyph unicode="ỵ" horiz-adv-x="1067" d="M25 1016h303l145 -436q23 -72 80 -289h8q45 193 70 289l123 436h288l-352 -1026q-76 -203 -174 -295t-270 -92q-76 0 -144 20l54 230q55 -12 67 -13q133 0 178 133l15 54zM748 -288.5q0 69.5 47 113.5t120.5 44t119.5 -44t46 -113.5t-46 -113.5t-119.5 -44t-120.5 44 t-47 113.5z" /> +<glyph unicode="Ỷ" horiz-adv-x="1073" d="M-16 1335h321l121 -307q37 -106 109 -295h8q20 55 58 152.5t54 142.5l119 307h316l-404 -860v-475h-301v475zM369 1665l34 150q346 -8 347 -187q0 -100 -79 -151.5t-206 -61.5l-25 119q92 18 92 61q0 57 -163 70z" /> +<glyph unicode="ỷ" horiz-adv-x="1067" d="M25 1016h303l145 -436q23 -72 80 -289h8q45 193 70 289l123 436h288l-352 -1026q-76 -203 -174 -295t-270 -92q-76 0 -144 20l54 230q55 -12 67 -13q133 0 178 133l15 54zM381 1389l33 151q346 -10 346 -188q0 -98 -80 -150.5t-205 -60.5l-24 119q92 14 92 61 q0 59 -162 68z" /> +<glyph unicode="Ỹ" horiz-adv-x="1073" d="M-16 1335h321l121 -307q37 -106 109 -295h8q20 55 58 152.5t54 142.5l119 307h316l-404 -860v-475h-301v475zM188 1440q14 135 75 206.5t145 71.5q59 0 139 -46t104 -46q59 0 80 92h154q-14 -135 -74.5 -206.5t-144.5 -71.5q-61 0 -140.5 46t-105.5 46q-57 0 -80 -92 h-152z" /> +<glyph unicode="ỹ" horiz-adv-x="1067" d="M25 1016h303l145 -436q23 -72 80 -289h8q45 193 70 289l123 436h288l-352 -1026q-76 -203 -174 -295t-270 -92q-76 0 -144 20l54 230q55 -12 67 -13q133 0 178 133l15 54zM207 1178q14 135 71.5 205.5t141.5 70.5q59 0 139 -45t103 -45q49 0 71 90h154 q-16 -135 -72.5 -205.5t-140.5 -70.5q-59 0 -138 46t-104 46q-51 0 -72 -92h-153z" /> +<glyph unicode=" " horiz-adv-x="997" /> +<glyph unicode=" " horiz-adv-x="1995" /> +<glyph unicode=" " horiz-adv-x="997" /> +<glyph unicode=" " horiz-adv-x="1995" /> +<glyph unicode=" " horiz-adv-x="665" /> +<glyph unicode=" " horiz-adv-x="498" /> +<glyph unicode=" " horiz-adv-x="332" /> +<glyph unicode=" " horiz-adv-x="1081" /> +<glyph unicode=" " horiz-adv-x="249" /> +<glyph unicode=" " horiz-adv-x="399" /> +<glyph unicode=" " horiz-adv-x="110" /> +<glyph unicode="‐" horiz-adv-x="679" d="M88 412v213h504v-213h-504z" /> +<glyph unicode="‑" horiz-adv-x="679" d="M88 412v213h504v-213h-504z" /> +<glyph unicode="‒" horiz-adv-x="1081" d="M88 422v192h905v-192h-905z" /> +<glyph unicode="–" horiz-adv-x="983" d="M88 422v192h807v-192h-807z" /> +<glyph unicode="—" horiz-adv-x="1638" d="M88 422v192h1462v-192h-1462z" /> +<glyph unicode="―" horiz-adv-x="1638" d="M88 422v192h1462v-192h-1462z" /> +<glyph unicode="‘" horiz-adv-x="614" d="M113 961q-1 295 290 438l66 -131q-184 -92 -184 -260q6 2 20 2q66 0 112 -41t46 -109q0 -76 -44 -122t-114 -46q-94 0 -143 71t-49 198z" /> +<glyph unicode="’" horiz-adv-x="614" d="M145 852q184 92 185 260q-6 -2 -19 -2q-68 0 -112.5 41t-44.5 109q0 76 44 121.5t113 45.5q92 0 142.5 -69.5t50.5 -198.5q0 -295 -293 -438z" /> +<glyph unicode="‚" horiz-adv-x="614" d="M145 -215q184 92 185 260q-6 -2 -19 -2q-68 0 -112.5 41t-44.5 109q0 76 44 121.5t113 45.5q92 0 142.5 -69.5t50.5 -198.5q0 -295 -293 -438z" /> +<glyph unicode="“" horiz-adv-x="1099" d="M113 961q-1 295 290 438l66 -131q-184 -92 -184 -260q6 2 20 2q66 0 112 -41t46 -109q0 -76 -44 -122t-114 -46q-94 0 -143 71t-49 198zM596 961q0 295 293 438l65 -131q-184 -92 -184 -260q6 2 21 2q66 0 110.5 -41t44.5 -109q0 -76 -44 -122t-111 -46q-94 0 -144.5 71 t-50.5 198z" /> +<glyph unicode="”" horiz-adv-x="1099" d="M145 852q184 92 185 260q-6 -2 -19 -2q-68 0 -112.5 41t-44.5 109q0 76 44 121.5t113 45.5q92 0 142.5 -69.5t50.5 -198.5q0 -295 -293 -438zM631 852q184 92 184 260q-6 -2 -20 -2q-66 0 -112 41t-46 109q0 76 44 121.5t114 45.5q94 0 143 -69.5t49 -198.5 q0 -295 -291 -438z" /> +<glyph unicode="„" horiz-adv-x="1099" d="M145 -215q184 92 185 260q-6 -2 -19 -2q-68 0 -112.5 41t-44.5 109q0 76 44 121.5t113 45.5q92 0 142.5 -69.5t50.5 -198.5q0 -295 -293 -438zM631 -215q184 92 184 260q-6 -2 -20 -2q-66 0 -112 41t-46 109q0 76 44 121.5t114 45.5q94 0 143 -69.5t49 -198.5 q0 -295 -291 -438z" /> +<glyph unicode="†" horiz-adv-x="1044" d="M90 881v241l330 -18l-19 354h242l-18 -354l329 18v-241l-329 16l18 -1061h-242l19 1061z" /> +<glyph unicode="‡" horiz-adv-x="1044" d="M90 172v242l330 -25l-19 258l19 258l-330 -24v241l330 -18l-19 354h242l-18 -354l329 18v-241l-329 24l18 -258l-18 -258l329 25v-242l-329 18l18 -354h-242l19 354z" /> +<glyph unicode="•" horiz-adv-x="706" d="M82 537q0 123 78 203.5t192 80.5q117 0 195 -81t78 -203q0 -121 -79 -203t-193.5 -82t-192.5 82t-78 203z" /> +<glyph unicode="…" horiz-adv-x="2002" d="M158 164q0 82 51 136t129 54t130 -54t52 -136q0 -80 -52 -134.5t-130 -54.5t-129 54.5t-51 134.5zM836 164q0 82 52 136t130 54t130 -54t52 -136q0 -80 -52 -134.5t-130 -54.5t-130 54.5t-52 134.5zM1516 164q0 82 51 136t129 54t130 -54t52 -136q0 -80 -52 -134.5 t-130 -54.5t-129 54.5t-51 134.5z" /> +<glyph unicode=" " horiz-adv-x="399" /> +<glyph unicode="‰" horiz-adv-x="2557" d="M53 938q0 197 92.5 309.5t239.5 112.5t240.5 -112.5t93.5 -309.5t-93.5 -311.5t-240.5 -114.5t-239.5 114.5t-92.5 311.5zM262 938q0 -258 123 -258t123 258q0 254 -123 254t-123 -254zM430 -25l721 1385h174l-721 -1385h-174zM1036 401.5q0 196.5 92.5 309t239.5 112.5 q150 0 242 -112.5t92 -309.5q0 -199 -92 -312.5t-242 -113.5q-147 0 -239.5 115t-92.5 311.5zM1245 401q0 -258 123 -258q125 0 125 258q0 254 -125 254q-123 0 -123 -254zM1839 401q0 197 92 309.5t242 112.5q147 0 239.5 -112.5t92.5 -309t-92.5 -311.5t-239.5 -115 q-150 0 -242 114t-92 312zM2048 401q0 -258 125 -258q123 0 123 258q0 254 -123 254q-125 0 -125 -254z" /> +<glyph unicode="′" horiz-adv-x="614" d="M164 727l43 678h301l-53 -297l-97 -381h-194z" /> +<glyph unicode="″" horiz-adv-x="1099" d="M164 727l43 678h301l-53 -297l-97 -381h-194zM647 727l45 678h299l-51 -297l-96 -381h-197z" /> +<glyph unicode="‹" horiz-adv-x="598" d="M100 410v213l275 295l112 -91l-227 -311l227 -311l-112 -90z" /> +<glyph unicode="›" horiz-adv-x="598" d="M111 205l227 311l-227 311l112 91l275 -295v-213l-275 -295z" /> +<glyph unicode="⁄" horiz-adv-x="196" d="M-350 -25l721 1385h174l-721 -1385h-174z" /> +<glyph unicode=" " horiz-adv-x="498" /> +<glyph unicode="⁰" horiz-adv-x="770" d="M53 1302.5q0 196.5 92.5 309t239.5 112.5t240.5 -112.5t93.5 -309t-93.5 -311t-240.5 -114.5t-239.5 114.5t-92.5 311zM262 1303q0 -259 123 -259t123 259q0 254 -123 253.5t-123 -253.5z" /> +<glyph unicode="ⁱ" horiz-adv-x="385" d="M72 1407q0 47 33.5 76.5t87 29.5t87 -30.5t33.5 -75.5q0 -47 -33.5 -78t-87 -31t-87 31t-33.5 78zM86 532v674h213v-674h-213z" /> +<glyph unicode="⁴" horiz-adv-x="770" d="M72 1079v111l288 510h275v-477h119v-144h-119v-178h-197v178h-366zM274 1223h164v84l13 239h-9l-82 -157z" /> +<glyph unicode="⁵" horiz-adv-x="770" d="M55 1038l133 105q74 -98 170 -99q49 0 83 36t34 85q0 55 -34.5 87t-86.5 32q-63 0 -118 -47l-95 66l35 397h483v-187h-309l-12 -110q53 12 94 12q111 0 185.5 -70.5t74.5 -189.5q0 -121 -87 -199.5t-222 -78.5q-217 -1 -328 161z" /> +<glyph unicode="⁶" horiz-adv-x="770" d="M74 1296q0 195 98 311.5t274 116.5q140 0 236 -84l-86 -137q-72 53 -135 53q-162 0 -185 -215q74 70 170 70q115 0 182.5 -68.5t67.5 -183.5q0 -121 -80.5 -201.5t-201.5 -80.5q-160 0 -250 113.5t-90 305.5zM276 1204q8 -82 43 -121t84 -39q41 0 69 28t28 81 q0 109 -105 109q-61 0 -119 -58z" /> +<glyph unicode="⁷" horiz-adv-x="770" d="M102 1516v184h603v-119q-129 -164 -174.5 -310.5t-57.5 -369.5h-233q10 180 60 314.5t159 300.5h-357z" /> +<glyph unicode="⁸" horiz-adv-x="770" d="M78 1104q0 125 147 207v8q-119 84 -119 186q0 100 80 159.5t199 59.5q121 0 201 -59t80 -160q0 -106 -119 -176v-8q143 -78 143 -215q0 -96 -87 -162.5t-218 -66.5q-133 0 -220 66.5t-87 160.5zM279 1126q0 -43 30.5 -72.5t75.5 -29.5t76 28.5t31 69.5q0 16 -6.5 28.5 t-12.5 22t-23.5 19.5t-27.5 15t-36 17.5t-38 18.5q-69 -47 -69 -117zM301 1499q0 -39 29 -62t88 -48q51 49 51 102q0 37 -24.5 59.5t-61.5 22.5q-35 0 -58.5 -20.5t-23.5 -53.5z" /> +<glyph unicode="⁹" horiz-adv-x="770" d="M72 1442q0 121 82 201.5t202 80.5q160 0 250 -113.5t90 -306t-99 -310t-273 -117.5q-140 0 -236 84l86 137q72 -53 135 -54q162 0 185 216q-74 -70 -172 -70q-115 0 -182.5 68.5t-67.5 183.5zM268 1448q1 -109 105 -109q63 0 121 60q-20 158 -129 157q-41 0 -69 -27.5 t-28 -80.5z" /> +<glyph unicode="⁽" horiz-adv-x="548" d="M129 1302.5q0 174.5 45 306.5t141 277l162 -65q-139 -250 -139 -518q0 -266 139 -521l-162 -65q-96 145 -141 278t-45 307.5z" /> +<glyph unicode="⁾" horiz-adv-x="548" d="M72 782q139 254 139 521q0 268 -139 518l164 65q94 -145 139 -278t45 -305q0 -174 -45 -307.5t-139 -278.5z" /> +<glyph unicode="ⁿ" horiz-adv-x="786" d="M86 532v674h170l18 -88h5q104 104 217 105q213 0 213 -277v-414h-213v390q0 68 -15.5 95t-64.5 27q-53 0 -117 -63v-449h-213z" /> +<glyph unicode="₀" horiz-adv-x="770" d="M53 -118.5q0 196.5 92.5 309t239.5 112.5t240.5 -112.5t93.5 -309t-93.5 -311.5t-240.5 -115t-239.5 115t-92.5 311.5zM262 -119q0 -258 123 -258t123 258q0 254 -123 254t-123 -254z" /> +<glyph unicode="₁" horiz-adv-x="770" d="M156 55v135q131 18 229 89h176v-799h-223v575h-182z" /> +<glyph unicode="₂" horiz-adv-x="770" d="M55 139q123 164 305 164q135 0 215 -71.5t80 -198.5q0 -61 -33.5 -129t-70.5 -114t-109 -126h242v-184h-592v119q180 147 265 237t85 160q0 59 -30.5 92t-85.5 33q-72 0 -146 -96z" /> +<glyph unicode="₃" horiz-adv-x="770" d="M55 -383l133 104q72 -98 170 -98q49 0 82 25.5t33 70.5q0 104 -190 105v127q162 0 161 98q0 39 -26.5 62.5t-73.5 23.5q-66 0 -131 -80l-125 111q68 72 135.5 104.5t159.5 32.5q115 0 197 -61.5t82 -161.5q0 -117 -117 -184q145 -57 145 -193q0 -109 -91 -178.5 t-218 -69.5q-217 0 -326 162z" /> +<glyph unicode="₄" horiz-adv-x="770" d="M72 -231l288 510h275v-478h119v-143h-119v-178h-197v178h-366v111zM274 -199h164v84l13 240h-9l-82 -158z" /> +<glyph unicode="₅" horiz-adv-x="770" d="M55 -383l133 104q74 -98 170 -98q49 0 83 36t34 85q0 55 -34.5 87t-86.5 32q-63 0 -118 -47l-95 65l35 398h483v-187h-309l-12 -110q51 12 94 12q111 0 185.5 -70.5t74.5 -189.5q0 -121 -87 -200t-222 -79q-217 0 -328 162z" /> +<glyph unicode="₆" horiz-adv-x="770" d="M74 -125q0 195 98 311.5t274 116.5q140 0 236 -84l-86 -137q-72 53 -135 53q-162 0 -185 -215q74 70 170 70q115 0 182.5 -68.5t67.5 -183.5q0 -121 -80.5 -202t-201.5 -81q-160 0 -250 114t-90 306zM276 -217q8 -82 43 -121t84 -39q41 0 69 27.5t28 81.5q0 109 -105 108 q-61 0 -119 -57z" /> +<glyph unicode="₇" horiz-adv-x="770" d="M102 94v185h603v-119q-129 -164 -174.5 -310.5t-57.5 -369.5h-233q10 180 60 314t159 300h-357z" /> +<glyph unicode="₈" horiz-adv-x="770" d="M78 -317q0 125 147 206v9q-119 84 -119 186q0 100 80 159.5t199 59.5q121 0 201 -59.5t80 -159.5q0 -106 -119 -176v-8q143 -78 143 -215q0 -96 -87 -163t-218 -67q-133 0 -220 67t-87 161zM279 -297q0 -41 30.5 -70.5t75.5 -29.5t76 28.5t31 69.5q0 16 -6.5 28.5 t-12.5 21.5t-23.5 19.5t-27.5 15.5t-36 17.5t-38 18.5q-69 -47 -69 -119zM301 78q0 -39 29 -62.5t88 -48.5q51 49 51 101q0 39 -24.5 61.5t-61.5 22.5q-35 0 -58.5 -20.5t-23.5 -53.5z" /> +<glyph unicode="₉" horiz-adv-x="770" d="M72 20q0 121 82 202t202 81q160 0 250 -113.5t90 -306t-99 -310.5t-273 -118q-140 0 -236 84l86 137q72 -53 135 -53q162 0 185 215q-74 -70 -172 -69q-115 0 -182.5 68.5t-67.5 182.5zM268 27q1 -109 105 -109q63 0 121 59q-20 158 -129 158q-41 0 -69 -27.5t-28 -80.5z " /> +<glyph unicode="₍" horiz-adv-x="548" d="M129 -119q0 174 45 306t141 278l162 -66q-139 -250 -139 -518q0 -266 139 -520l-162 -66q-96 145 -141 278.5t-45 307.5z" /> +<glyph unicode="₎" horiz-adv-x="548" d="M72 399l164 66q94 -145 139 -278.5t45 -305.5q0 -174 -45 -307t-139 -279l-164 66q139 254 139 520q0 268 -139 518z" /> +<glyph unicode="ₔ" horiz-adv-x="708" d="M43 842q0 39 12 86h402q-25 133 -152 133q-80 0 -145 -41l-74 127q115 76 246 76q147 0 237 -96.5t90 -256.5q0 -158 -94 -256t-229 -98q-143 0 -218 94.5t-75 231.5zM223 807q0 -129 110.5 -129t125.5 129h-236z" /> +<glyph unicode="₡" horiz-adv-x="1081" d="M111 643q0 276 127 452.5t342 217.5l24 213h103l-25 -201h23q18 0 59 -4l24 205h103l-29 -232q115 -49 193 -145l-166 -164q-28 31 -55 55l-99 -827q86 20 154 106l168 -155q-150 -172 -350 -187l-25 -202h-102l24 202q-53 8 -80 15l-26 -217h-103l31 252 q-147 72 -231 228.5t-84 387.5zM414 653q0 -178 51 -293l82 684q-133 -102 -133 -391zM555 248q31 -23 78 -33l102 872q-25 4 -39 5q-29 0 -41 -2z" /> +<glyph unicode="₤" horiz-adv-x="1081" d="M98 0v186q82 37 140.5 104.5t72.5 153.5h-205v142l152 10h45q-8 33 -29 98h-168v142l119 12h6q-6 29 -6 57q0 190 123 305t316 115q211 0 354 -166l-164 -164q-72 86 -162 86q-84 0 -131 -48t-47 -144q0 -27 2 -41h324v-154h-291q8 -33 20 -98h271v-152h-262 q-15 -98 -91 -182v-8h531v-254h-920z" /> +<glyph unicode="₦" horiz-adv-x="1081" d="M6 483v107l144 12v98h-144v107l144 12v481h278l164 -481h123v481h217v-481h141v-119h-141v-98h141v-119h-141v-483h-279l-164 483h-122v-483h-217v483h-144zM311 1077l27 -258h55l-74 258h-8zM350 700l8 -98h97l-29 98h-76zM627 700l28 -98h76l-8 98h-96zM688 483 l74 -260h8l-27 260h-55z" /> +<glyph unicode="₧" horiz-adv-x="1081" d="M6 778v174l127 11v337h352q403 0 457 -335h121v-187h-119q-29 -168 -155.5 -256t-303.5 -88h-67v-434h-285v778h-127zM418 625h51q156 0 193 153h-244v-153zM418 965h244q-35 147 -193 147h-51v-147z" /> +<glyph unicode="₫" horiz-adv-x="1081" d="M133 627q0 164 102.5 265t235.5 101q113 0 199 -80l-8 138v30h-295v152h295v100h247v-100h150v-139l-150 -13v-823h-204l-19 74h-6q-88 -94 -217 -94q-152 0 -241 102t-89 287zM160 0v152h817v-152h-817zM387 625q0 -188 137 -189q77 0 138 74v227q-59 53 -130 54 q-59 0 -102 -45.5t-43 -120.5z" /> +<glyph unicode="€" horiz-adv-x="1081" d="M43 440v142l111 8q-2 18 -2 53t2 53h-111v140l127 10q47 227 191.5 353t351.5 126q197 0 334 -160l-168 -161q-88 88 -177 88q-86 0 -145 -63.5t-84 -180.5h438v-152h-456v-43q0 -41 2 -59h372v-154h-352q57 -231 232 -231q106 -1 188 110l166 -155q-154 -188 -373 -189 q-197 0 -336 121t-184 344h-127z" /> +<glyph unicode="₱" horiz-adv-x="1081" d="M6 709v106l127 10v95h-127v106l127 10v264h352q352 0 441 -262h137v-118h-115q2 -18 2 -56q0 -25 -2 -37h115v-118h-137q-45 -135 -164 -205t-277 -70h-67v-434h-285v709h-127zM418 625h51q113 0 164 84h-215v-84zM418 827h252q2 12 2 37q0 39 -2 56h-252v-93zM418 1038 h213q-49 74 -162 74h-51v-74z" /> +<glyph unicode="₲" horiz-adv-x="1081" d="M78 643q0 276 122 451.5t328 218.5v213h201v-207q160 -27 285 -160l-166 -164q-100 96 -205 97q-127 0 -195.5 -116t-68.5 -323q0 -211 70.5 -322.5t199.5 -111.5q59 0 96 27v250h-141v245h410v-614q-125 -113 -285 -143v-209h-201v209q-205 35 -327.5 205.5 t-122.5 453.5z" /> +<glyph unicode="₵" horiz-adv-x="1081" d="M111 643q0 281 129 457t348 215v192h166v-184q168 -23 284 -158l-166 -161q-55 63 -118 79v-864q74 24 135 100l168 -155q-127 -150 -303 -180v-209h-166v205q-217 29 -347 200.5t-130 462.5zM414 653q0 -344 174 -424v840q-174 -80 -174 -416z" /> +<glyph unicode="₹" horiz-adv-x="1081" d="M141 412v239h133q195 0 236 146h-369v139l152 12h215q-39 113 -234 113h-133v239h811v-151h-270q98 -70 125 -201h145v-151h-143q-29 -240 -242 -334l351 -463h-338l-293 412h-146z" /> +<glyph unicode="₺" horiz-adv-x="1081" d="M29 367v165l155 84v113l-155 -84v166l155 84v405h301v-258l299 158v-166l-299 -157v-113l299 158v-166l-299 -158v-342q117 12 198 85t81 179q0 31 -4 62l248 57q14 -57 14 -104q0 -279 -219 -424.5t-619 -135.5v476z" /> +<glyph unicode="ℓ" horiz-adv-x="962" d="M20 401q98 59 201 125v451q0 248 104.5 373t278.5 125q152 0 241 -93.5t89 -255.5q0 -190 -98.5 -342.5t-321.5 -318.5v-51q0 -96 44 -142.5t114 -46.5q90 0 192 90l109 -182q-178 -158 -348 -158q-145 0 -254 78t-140 223q-10 -6 -43.5 -26.5t-54.5 -32.5zM514 750 q178 172 178 376q0 129 -78 129q-43 0 -71.5 -58t-28.5 -179v-268z" /> +<glyph unicode="℗" horiz-adv-x="1536" d="M92 665.5q0 307.5 196.5 491.5t479.5 184t478.5 -184t195.5 -491q0 -309 -195.5 -496.5t-478.5 -187.5t-479.5 188t-196.5 495.5zM231 665.5q0 -247.5 154 -403.5t383 -156t383 156t154 403.5t-154 400.5t-383 153t-383 -153t-154 -400.5zM489 285v747h297 q160 0 256.5 -63.5t96.5 -202.5q0 -145 -99.5 -220t-253.5 -75h-79v-186h-218zM707 627h63q156 0 156 131q0 113 -156 112h-63v-243z" /> +<glyph unicode="℠" horiz-adv-x="1396" d="M37 817l100 123q84 -76 164 -76q59 0 59 43q0 4 -1 9.5t-2 8.5t-4 7t-5 6t-8 6t-8 5t-10.5 5t-11.5 6.5t-12 6.5t-13 6l-88 39q-127 59 -127 190q0 86 67.5 145.5t177.5 59.5q115 0 224 -82l-93 -125q-86 57 -141 57q-59 0 -59 -45q0 -29 76 -59l86 -37q133 -51 133 -188 q0 -86 -70.5 -148.5t-183.5 -62.5q-137 0 -250 100zM647 741v643h227l78 -184l41 -137h8l43 137l76 184h230v-643h-191v197l23 236h-8l-109 -338h-133l-109 338h-8l23 -236v-197h-191z" /> +<glyph unicode="™" horiz-adv-x="1396" d="M8 1206v178h551v-178h-178v-465h-195v465h-178zM647 741v643h227l78 -184l41 -137h8l43 137l76 184h230v-643h-191v197l23 236h-8l-109 -338h-133l-109 338h-8l23 -236v-197h-191z" /> +<glyph unicode="Ω" horiz-adv-x="1490" d="M86 0v244h233v8q-82 82 -141 208t-59 275q0 297 172 469t454.5 172t454.5 -172t172 -469q0 -150 -60.5 -275.5t-140.5 -207.5v-8h232v-244h-565v199q225 184 225 518q0 182 -86 290.5t-231.5 108.5t-231.5 -108.5t-86 -290.5q0 -336 225 -518v-199h-567z" /> +<glyph unicode="℮" horiz-adv-x="1638" d="M94 665.5q0 284.5 213 486.5t514 202t513 -201t212 -487v-19h-1177q-8 0 -9 -8v-375q1 -18 17 -43q180 -203 446 -203q137 0 259 60.5t208 167.5h107q-102 -125 -253 -197t-323 -72q-301 0 -514 202t-213 486.5zM360 696q1 -10 9 -10h903q10 0 10 10v377q0 23 -18 45 q-188 195 -441 195q-260 0 -444 -201q-18 -23 -19 -47v-369z" /> +<glyph unicode="⅓" horiz-adv-x="1714" d="M94 1110v137q131 18 230 88h176v-798h-224v573h-182zM336 -25l721 1385h174l-721 -1385h-174zM999 137l134 105q72 -98 170 -99q49 0 81.5 26t32.5 71q0 104 -190 104v127q162 0 162 98q0 39 -28 62.5t-73 23.5q-66 0 -131 -80l-125 111q125 137 295 137q115 0 196 -61.5 t81 -161.5q0 -117 -115 -184q145 -57 145 -193q0 -109 -91 -178.5t-218 -69.5q-217 0 -326 162z" /> +<glyph unicode="⅔" horiz-adv-x="1738" d="M59 1196q127 164 306 164q135 0 214.5 -71.5t79.5 -198.5q0 -61 -33.5 -130t-69.5 -114t-110 -125h242v-184h-594v118q180 145 266 236.5t86 159.5q0 59 -30.5 93t-85.5 34q-72 0 -146 -97zM438 -25l721 1385h174l-721 -1385h-174zM1024 137l133 105q72 -98 168 -99 q51 0 84 26t33 71q0 104 -191 104v127q160 0 160 98q0 39 -26.5 62.5t-71.5 23.5q-66 0 -131 -80l-125 111q125 137 293 137q117 0 197.5 -61.5t80.5 -161.5q0 -115 -115 -184q145 -59 146 -193q0 -109 -92 -178.5t-219 -69.5q-215 0 -324 162z" /> +<glyph unicode="⅛" horiz-adv-x="1714" d="M94 1110v137q131 18 230 88h176v-798h-224v573h-182zM356 -25l721 1385h174l-721 -1385h-174zM1022 203q0 123 145 207v8q-119 84 -118 186q0 100 80.5 159.5t199.5 59.5q121 0 201 -59t80 -160q0 -109 -121 -176v-8q145 -76 145 -215q0 -96 -87 -163t-218 -67 q-133 0 -220 67t-87 161zM1223 225q0 -43 29.5 -72.5t76.5 -29.5q45 0 76 28.5t31 69.5q0 16 -6.5 28.5t-12.5 22t-23.5 19.5t-27.5 15t-35.5 17.5t-38.5 18.5q-69 -47 -69 -117zM1245 598q0 -39 29 -62.5t88 -48.5q51 49 51 103q0 37 -24.5 59.5t-61.5 22.5 q-35 0 -58.5 -20.5t-23.5 -53.5z" /> +<glyph unicode="⅜" horiz-adv-x="1738" d="M55 674l133 104q72 -98 170 -98q49 0 82 25.5t33 70.5q0 104 -190 105v127q162 0 161 98q0 39 -26.5 62.5t-73.5 23.5q-66 0 -131 -80l-125 111q131 137 295 137q115 0 197 -61.5t82 -161.5q0 -117 -117 -185q66 -27 105.5 -77t39.5 -117q0 -109 -91 -177.5t-218 -68.5 q-217 0 -326 162zM422 -25l721 1385h172l-719 -1385h-174zM1047 203q0 123 145 207v8q-119 84 -119 186q0 100 80 159.5t199 59.5q123 0 202.5 -59t79.5 -160q0 -109 -121 -176v-8q145 -76 146 -215q0 -96 -87 -163t-220 -67q-131 0 -218 67t-87 161zM1247 225 q0 -43 30 -72.5t75 -29.5t75.5 28.5t30.5 69.5q0 14 -3 24.5t-11 20.5t-15.5 16.5t-23.5 15.5t-25.5 14t-32 15.5t-32.5 14.5q-68 -49 -68 -117zM1270 598q0 -39 28.5 -62.5t87.5 -48.5q51 49 52 103q0 37 -24.5 59.5t-61.5 22.5q-35 0 -58.5 -20.5t-23.5 -53.5z" /> +<glyph unicode="⅝" horiz-adv-x="1738" d="M55 674l133 104q74 -98 170 -98q49 0 83 35t34 84q0 55 -34.5 88t-86.5 33q-63 0 -118 -48l-95 66l35 397h483v-186h-309l-12 -113q49 14 94 15q111 0 185.5 -72t74.5 -190.5t-87 -197.5t-222 -79q-217 0 -328 162zM422 -25l721 1385h172l-719 -1385h-174zM1047 203 q0 123 145 207v8q-119 84 -119 186q0 100 80 159.5t199 59.5q123 0 202.5 -59t79.5 -160q0 -109 -121 -176v-8q145 -76 146 -215q0 -96 -87 -163t-220 -67q-131 0 -218 67t-87 161zM1247 225q0 -43 30 -72.5t75 -29.5t75.5 28.5t30.5 69.5q0 14 -3 24.5t-11 20.5t-15.5 16.5 t-23.5 15.5t-25.5 14t-32 15.5t-32.5 14.5q-68 -49 -68 -117zM1270 598q0 -39 28.5 -62.5t87.5 -48.5q51 49 52 103q0 37 -24.5 59.5t-61.5 22.5q-35 0 -58.5 -20.5t-23.5 -53.5z" /> +<glyph unicode="⅞" horiz-adv-x="1697" d="M61 1149v186h603v-118q-129 -164 -174.5 -310.5t-57.5 -369.5h-233q10 180 60 314t159 298h-357zM319 -25l721 1385h172l-718 -1385h-175zM1006 203q0 123 145 207v8q-119 84 -119 186q0 100 80 159.5t199 59.5q123 0 202.5 -59t79.5 -160q0 -109 -120 -176v-8 q145 -76 145 -215q0 -96 -87 -163t-220 -67q-131 0 -218 67t-87 161zM1206 225q0 -43 30 -72.5t75 -29.5t75.5 28.5t30.5 69.5q0 14 -3 24.5t-11 20.5t-15.5 16.5t-23.5 15.5t-25.5 14t-32 15.5t-32.5 14.5q-68 -49 -68 -117zM1229 598q0 -39 29 -62.5t88 -48.5 q51 49 51 103q0 37 -24.5 59.5t-61.5 22.5q-35 0 -58.5 -20.5t-23.5 -53.5z" /> +<glyph unicode="←" horiz-adv-x="1263" d="M45 512v8l569 547l142 -162l-307 -270h733v-238h-733l307 -270l-142 -162z" /> +<glyph unicode="↑" horiz-adv-x="1263" d="M80 514l547 569h8l549 -569l-164 -141l-268 307v-733h-240v733l-270 -307z" /> +<glyph unicode="→" horiz-adv-x="1263" d="M82 397v238h731l-307 270l143 162l570 -547v-8l-570 -547l-143 162l307 270h-731z" /> +<glyph unicode="↓" horiz-adv-x="1263" d="M80 516l162 143l270 -307v731h240v-731l268 307l164 -143l-549 -569h-8z" /> +<glyph unicode="∂" horiz-adv-x="1181" d="M98 379q0 211 123 343t318 132q150 0 260 -123v33q0 369 -224 369q-112 -1 -210 -93l-129 185q170 152 372 151q231 0 353 -167t122 -453q0 -350 -161.5 -565.5t-421.5 -215.5q-170 0 -286 112t-116 292zM375 397q0 -84 45.5 -131t111.5 -47q186 0 244 285 q-78 121 -203 121q-90 0 -144 -58.5t-54 -169.5z" /> +<glyph unicode="∆" horiz-adv-x="1331" d="M70 0v182l415 1170h361l416 -1170v-182h-1192zM410 254h510l-154 467l-96 348h-8l-97 -348z" /> +<glyph unicode="∏" horiz-adv-x="1454" d="M164 -246v1546h1126v-1546h-301v1284h-524v-1284h-301z" /> +<glyph unicode="∑" horiz-adv-x="1093" d="M53 -68l424 594l-401 596v178h950v-253h-586v-9l344 -512l-358 -510v-8h649v-254h-1022v178z" /> +<glyph unicode="−" horiz-adv-x="1081" d="M70 569v213h942v-213h-942z" /> +<glyph unicode="∕" horiz-adv-x="196" d="M-350 -25l721 1385h174l-721 -1385h-174z" /> +<glyph unicode="∙" horiz-adv-x="1083" d="M358 674q0 80 52.5 134t130 54t129 -54t51.5 -134t-51.5 -135.5t-129 -55.5t-130 55.5t-52.5 135.5z" /> +<glyph unicode="√" horiz-adv-x="1204" d="M55 756l357 145l202 -602q23 -78 43 -168h9q12 90 30 168l322 1380h201l-443 -1843h-209l-307 842l-151 -64z" /> +<glyph unicode="∞" horiz-adv-x="1667" d="M76 649q0 197 106.5 309.5t282.5 112.5q197 0 336 -188h8q170 221 393 221q164 0 276.5 -116t112.5 -292q0 -215 -115.5 -340t-289.5 -125q-127 0 -224.5 57.5t-193.5 184.5h-8q-143 -188 -336 -188q-145 0 -246.5 108.5t-101.5 255.5zM297 655.5q0 -61.5 42 -106.5 t112 -45q117 0 208 135q-100 154 -219 154q-70 0 -106.5 -38t-36.5 -99.5zM909 717q76 -102 137.5 -154.5t139.5 -52.5q84 0 134 52t50 128q0 90 -54 142.5t-145 52.5q-143 0 -262 -168z" /> +<glyph unicode="∫" horiz-adv-x="798" d="M86 -307l29 217q41 -8 73 -8q78 0 103.5 60.5t25.5 211.5q0 154 -38.5 461t-38.5 479q0 244 81.5 375t305.5 131q63 0 116 -14l-30 -220q-25 8 -72 9q-78 0 -103.5 -60.5t-25.5 -212.5q0 -154 38 -461t38 -479q0 -119 -15.5 -202.5t-55.5 -156.5t-119 -110t-195 -37 q-72 0 -117 17z" /> +<glyph unicode="≈" horiz-adv-x="1081" d="M59 410q135 211 308 211q57 0 110 -24t87 -53.5t76 -53t79 -23.5q80 0 147 117l156 -119q-137 -211 -307 -211q-72 0 -136.5 39t-117.5 77t-99 38q-79 0 -147 -117zM59 887q137 211 308 211q72 0 136 -39t117.5 -77t98.5 -38q80 0 147 117l156 -119q-135 -211 -307 -211 q-57 0 -110.5 23.5t-87.5 53.5t-76 53.5t-79 23.5q-79 0 -147 -117z" /> +<glyph unicode="≠" horiz-adv-x="1081" d="M70 332v211h301l149 266h-450v211h567l147 250h193l-148 -250h183v-211h-301l-150 -266h451v-211h-568l-147 -250h-191l146 250h-182z" /> +<glyph unicode="≤" horiz-adv-x="1081" d="M70 0v213h942v-213h-942zM70 606v250l942 291v-248l-353 -94l-284 -70v-8l284 -70l353 -94v-248z" /> +<glyph unicode="≥" horiz-adv-x="1081" d="M70 0v213h942v-213h-942zM70 315v248l352 94l285 70v8l-285 70l-352 94v248l942 -291v-250z" /> +<glyph unicode="■" horiz-adv-x="706" d="M111 291v493h485v-493h-485z" /> +<glyph unicode="▲" horiz-adv-x="1212" d="M39 43v4l563 1069h8l561 -1069v-4h-1132z" /> +<glyph unicode="△" horiz-adv-x="1212" d="M39 43v4l563 1069h8l561 -1069v-4h-1132zM379 238h457l-230 456z" /> +<glyph unicode="▶" horiz-adv-x="1212" d="M109 10v1133h4l1071 -561v-9l-1071 -563h-4z" /> +<glyph unicode="▷" horiz-adv-x="1212" d="M109 10v1133h4l1071 -561v-9l-1071 -563h-4zM305 348l455 230l-455 227v-457z" /> +<glyph unicode="▼" horiz-adv-x="1212" d="M39 1108v4h1132v-4l-561 -1069h-8z" /> +<glyph unicode="▽" horiz-adv-x="1212" d="M39 1108v4h1132v-4l-561 -1071h-8zM379 915l227 -454l230 454h-457z" /> +<glyph unicode="◀" horiz-adv-x="1212" d="M29 573v9l1069 561h4v-1133h-4z" /> +<glyph unicode="◁" horiz-adv-x="1212" d="M29 573v9l1069 561h4v-1133h-4zM453 578l454 -230v457z" /> +<glyph unicode="◆" horiz-adv-x="706" d="M16 537l338 337l336 -337l-336 -336z" /> +<glyph unicode="◉" horiz-adv-x="993" d="M82 536.5q0 182.5 118.5 301t295 118.5t295 -118.5t118.5 -301t-118.5 -300t-295 -117.5t-295 117.5t-118.5 300zM242 537q0 -117 72.5 -192t181 -75t181.5 75t73 192q0 119 -73 192.5t-181.5 73.5t-181 -74t-72.5 -192zM360 537q0 61 39 102t97 41q59 0 98 -41t39 -102 q0 -59 -40 -100.5t-97.5 -41.5t-96.5 41t-39 101z" /> +<glyph unicode="◊" horiz-adv-x="1122" d="M106 676l332 696h246l332 -696l-332 -696h-246zM354 676l92 -197l111 -248h8l111 248l92 197l-92 196l-111 248h-8l-111 -248z" /> +<glyph unicode="☐" horiz-adv-x="1652" d="M152 -20v1269l153 133h1196v-1249l-133 -153h-1216zM270 98h1049v1102h-1049v-1102z" /> +<glyph unicode="☑" horiz-adv-x="1652" d="M152 -20v1269l153 133h938q105 152 230 283l184 -162q-86 -84 -156 -166v-1204l-133 -153h-1216zM270 98h1049v992q-236 -369 -365 -836l-282 -33q-106 291 -287 557l193 125q113 -182 210 -457h9q119 401 329 754h-856v-1102z" /> +<glyph unicode="♪" horiz-adv-x="1114" d="M51 119q0 111 101.5 190.5t246.5 79.5q84 0 121 -24v1056h160q18 -35 44 -58.5t103 -76.5q141 -96 198.5 -191.5t57.5 -222.5q0 -162 -100 -303l-100 41q29 88 28 189q0 94 -60 175t-165 116v-740q0 -197 -108.5 -302t-296.5 -105q-94 0 -162 45t-68 131z" /> +<glyph unicode="✓" horiz-adv-x="1325" d="M14 571l193 125q141 -221 256 -512h8q109 367 286 690.5t386 534.5l184 -160q-483 -454 -706 -1257l-283 -33q-125 334 -324 612z" /> +<glyph unicode="❒" horiz-adv-x="849" d="M111 209v520l137 117h491v-500l-116 -137h-512zM211 309h362v371h-362v-371z" /> +<glyph unicode="" horiz-adv-x="1014" d="M0 1015h1015v-1015h-1015v1015z" /> +<glyph unicode="fi" horiz-adv-x="1300" d="M49 780v224l135 10v55q0 176 90.5 283.5t284.5 107.5q100 0 203 -37l-55 -221q-57 20 -105 21q-117 0 -117 -146v-61h183v-236h-183v-780h-301v780h-135zM844 1323q0 70 49 113t125 43q78 0 126 -43t48 -113t-49 -114t-125 -44t-125 44t-49 114zM868 0v1016h301v-1016 h-301z" /> +<glyph unicode="fl" horiz-adv-x="1284" d="M49 780v224l135 10v55q0 176 90.5 283.5t284.5 107.5q100 0 203 -37l-55 -221q-57 20 -105 21q-117 0 -117 -146v-61h183v-236h-183v-780h-301v780h-135zM831 315v1121h302v-1133q0 -84 53 -84q21 0 37 4l37 -223q-55 -25 -152 -25q-276 0 -277 340z" /> +<glyph horiz-adv-x="1302" d="M92 659q0 322 188.5 511.5t469.5 189.5q242 0 415 -174l-166 -187q-111 100 -245 101q-156 0 -254.5 -116t-98.5 -314q0 -209 95.5 -321.5t281.5 -112.5q90 0 142 40v230h-222v246h490v-615q-80 -70 -199 -116t-250 -46q-283 0 -465 179t-182 505zM401 1440 q14 135 75 206.5t145 71.5q61 0 140 -46t105 -46q57 0 80 92h152q-14 -135 -74.5 -206.5t-144.5 -71.5q-61 0 -140.5 46t-105.5 46q-57 0 -78 -92h-154z" /> +<glyph horiz-adv-x="1093" d="M70 -174q0 123 145 205v8q-94 61 -94 172q0 113 115 190v9q-59 41 -98.5 110.5t-39.5 153.5q0 174 122 270t298 96q90 0 158 -24h371v-219h-162q33 -55 33 -133q0 -168 -112 -255t-288 -87q-59 0 -123 20q-37 -31 -37 -76q0 -76 154 -76h164q387 0 387 -258 q0 -160 -154.5 -262t-412.5 -102q-190 0 -308 64.5t-118 193.5zM176 1178q14 135 70.5 205.5t140.5 70.5q61 0 140 -45t102 -45q51 0 71 90h154q-14 -135 -71.5 -205.5t-139.5 -70.5q-59 0 -139 46t-105 46q-49 0 -69 -92h-154zM317 -127q0 -55 60.5 -86t165.5 -31 q100 0 166.5 36t66.5 89q0 45 -38 62.5t-117 17.5h-105q-94 0 -143 12q-56 -49 -56 -100zM379 674q0 -82 39 -126t100.5 -44t100 44t38.5 126q0 78 -38.5 121t-100 43t-100.5 -42t-39 -122z" /> +<glyph horiz-adv-x="565" d="M84 -244q0 137 133 244h-84v1016h301v-1016q-147 -55 -147 -174q0 -39 25.5 -58.5t62.5 -19.5q23 0 71 25l62 -135q-37 -31 -97.5 -49.5t-109.5 -18.5q-94 0 -155.5 49t-61.5 137z" /> +<glyph horiz-adv-x="811" d="M106 0v254h148v827h-148v254h599v-254h-150v-827h150v-254h-599z" /> +<glyph horiz-adv-x="811" d="M74 1683h319l166 -245h-242zM106 0v254h148v827h-148v254h599v-254h-150v-827h150v-254h-599z" /> +<glyph horiz-adv-x="811" d="M106 0v254h148v827h-148v254h599v-254h-150v-827h150v-254h-599zM252 1438l166 245h319l-245 -245h-240z" /> +<glyph horiz-adv-x="811" d="M61 1438l197 245h295l197 -245h-232l-108 125h-9l-108 -125h-232zM106 0v254h148v827h-148v254h599v-254h-150v-827h150v-254h-599z" /> +<glyph horiz-adv-x="811" d="M57 1440q14 135 75 206.5t144 71.5q61 0 140.5 -46t105.5 -46q57 0 78 92h154q-14 -135 -74.5 -206.5t-144.5 -71.5q-61 0 -140.5 46t-105.5 46q-57 0 -78 -92h-154zM106 0v254h148v827h-148v254h599v-254h-150v-827h150v-254h-599z" /> +<glyph horiz-adv-x="811" d="M59 1577q0 61 40 102t103.5 41t103.5 -41t40 -102t-40 -102t-103.5 -41t-103.5 41t-40 102zM106 0v254h148v827h-148v254h599v-254h-150v-827h150v-254h-599zM465 1577q0 61 40 102t103.5 41t103.5 -41t40 -102t-40 -102t-103.5 -41t-103.5 41t-40 102z" /> +<glyph horiz-adv-x="811" d="M106 0v254h148v827h-148v254h599v-254h-150v-827h150v-254h-599zM117 1475v190h577v-190h-577z" /> +<glyph horiz-adv-x="811" d="M106 0v254h148v827h-148v254h599v-254h-150v-827h150v-254h-599zM231 1593.5q0 69.5 49.5 113.5t125 44t125 -44t49.5 -113.5t-49.5 -113.5t-125 -44t-125 44t-49.5 113.5z" /> +<glyph horiz-adv-x="811" d="M61 1683h232l108 -124h9l108 124h232l-197 -245h-295zM106 0v254h148v827h-148v254h599v-254h-150v-827h150v-254h-599z" /> +<glyph horiz-adv-x="811" d="M106 0v254h148v827h-148v254h599v-254h-150v-827h150v-254h-599zM240 1665l32 150q346 -8 346 -187q0 -100 -78.5 -151.5t-205.5 -61.5l-25 119q92 18 92 61q0 57 -161 70z" /> +<glyph horiz-adv-x="811" d="M106 0v254h148v827h-148v254h599v-254h-150v-827h150v-254h-599zM240 -305.5q0 69.5 47 114t119 44.5q74 0 120.5 -44.5t46.5 -114t-46.5 -113.5t-120.5 -44q-72 0 -119 44t-47 113.5z" /> +<glyph horiz-adv-x="811" d="M106 0v254h148v827h-148v254h599v-254h-150v-827h150v-254h-191q-111 -90 -111 -184q0 -37 26 -57.5t60 -20.5q33 0 74 29l68 -152q-90 -72 -213 -72q-102 0 -169 51.5t-67 141.5q0 84 46 153.5t102 110.5h-224z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM307 1483h291l182 -307h-219zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210zM446 1176l183 307h291l-254 -307h-220z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM297 1176l197 307h239l197 -307h-203l-111 161h-8l-108 -161h-203zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66 q-78 0 -130 -73t-52 -210z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM274 1178q14 135 70.5 205.5t140.5 70.5q59 0 139.5 -45t102.5 -45q51 0 72 90h153q-14 -135 -71.5 -205.5t-139.5 -70.5 q-59 0 -139 46t-104 46q-49 0 -70 -92h-154zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM268 1312.5q0 61.5 40 101.5t101.5 40t102.5 -41t41 -100q0 -61 -40 -102.5t-103 -41.5q-61 0 -101.5 41t-40.5 102.5zM389 512 q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210zM674 1312.5q0 61.5 40 101.5t103 40q61 0 101 -40t40 -101.5t-40 -102.5t-101 -41q-63 0 -103 41t-40 102.5z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM330 1212v191h567v-191h-567zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM328 1460h168q18 -119 116 -119q100 0 119 119h168q-4 -121 -77.5 -202.5t-209 -81.5t-208 81.5t-76.5 202.5zM389 512 q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM383 1331q0 94 63.5 151.5t165.5 57.5q104 0 168 -57.5t64 -151.5t-64 -151.5t-168 -57.5q-102 0 -165.5 57.5t-63.5 151.5z M389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210zM530 1331q0 -43 23.5 -69.5t58.5 -26.5q37 0 60.5 26.5t23.5 69.5t-23.5 69.5t-60.5 26.5q-35 0 -58.5 -26.5t-23.5 -69.5z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM297 1483h203l108 -162h8l111 162h203l-197 -307h-239zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73 t-52 -210z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210zM451 -305.5q0 69.5 47 114t118 44.5 q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -118.5 44t-46.5 113.5z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210zM446 1389l35 151q344 -10 344 -188 q0 -98 -78.5 -150.5t-205.5 -60.5l-23 119q92 14 92 61q0 59 -164 68z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM328 1176l166 262h239l166 -262h-186l-97 133h-8l-94 -133h-186zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66 q-78 0 -130 -73t-52 -210zM831 1323l142 242h221l-195 -242h-168z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM328 1176l166 262h239l166 -262h-186l-97 133h-8l-94 -133h-186zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66 q-78 0 -130 -73t-52 -210zM762 1565h223l139 -242h-168z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM328 1176l166 262h239l166 -262h-186l-97 133h-8l-94 -133h-186zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66 q-78 0 -130 -73t-52 -210zM805 1513l26 127q303 -8 304 -161q0 -92 -62.5 -134.5t-177.5 -58.5l-21 103q63 14 64 57q0 59 -133 67z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM311 1174l166 227h273l165 -227h-196l-103 120h-8l-100 -120h-197zM313 1475q12 117 63.5 175t125.5 58q59 0 122.5 -39t86.5 -39 q55 0 71 78h131q-12 -115 -64 -174t-124 -59q-61 0 -123.5 38.5t-85.5 38.5q-56 1 -72 -77h-131zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM297 1176l197 307h239l197 -307h-203l-111 161h-8l-108 -161h-203zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66 q-78 0 -130 -73t-52 -210zM451 -305.5q0 69.5 47 114t118 44.5q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -118.5 44t-46.5 113.5z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM328 1460h135q23 -137 149 -137q129 0 152 137h135q-4 -121 -77.5 -202.5t-209 -81.5t-208 81.5t-76.5 202.5zM389 512 q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210zM518 1417l119 242h215l-182 -242h-152z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM328 1460h135q23 -137 149 -137q129 0 152 137h135q-4 -121 -77.5 -202.5t-209 -81.5t-208 81.5t-76.5 202.5zM375 1659h215 l119 -242h-152zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM328 1460h135q23 -137 149 -137q129 0 152 137h135q-4 -121 -77.5 -202.5t-209 -81.5t-208 81.5t-76.5 202.5zM389 512 q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210zM451 1657l28 127q303 -10 303 -164q0 -92 -63 -134t-176 -56l-21 102q63 14 64 57q0 31 -30 46.5t-105 21.5z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM313 1475q12 117 63.5 175t125.5 58q59 0 122.5 -39t86.5 -39q55 0 71 78h131q-12 -115 -64 -174t-124 -59q-61 0 -123.5 38.5 t-85.5 38.5q-55 0 -72 -77h-131zM330 1419h141q25 -102 141 -102q119 0 144 102h141q-4 -104 -76 -173.5t-209 -69.5q-135 0 -206.5 69.5t-75.5 173.5zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM328 1460h168q18 -119 116 -119q100 0 119 119h168q-4 -121 -77.5 -202.5t-209 -81.5t-208 81.5t-76.5 202.5zM389 512 q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210zM451 -305.5q0 69.5 47 114t118 44.5q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -118.5 44t-46.5 113.5z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016q-92 -29 -135 -76t-43 -98q0 -37 24.5 -57.5t59.5 -20.5q37 0 74 25l63 -135q-88 -68 -209 -68q-94 0 -155.5 49t-61.5 137q0 141 142 240l-25 104h-8q-125 -125 -270 -125q-190 0 -303 142.5 t-113 390.5zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210z" /> +<glyph horiz-adv-x="1193" d="M90 526q0 223 130 368.5t298 145.5q154 0 260 -118h8l23 94h242v-1006q0 -197 -134.5 -302t-381.5 -105q-205 0 -379 112l98 199q137 -76 281 -76q197 0 215 164l8 127q-113 -102 -252 -102q-188 0 -302 139t-114 360zM395 530q0 -125 50.5 -193.5t138.5 -68.5 q94 0 166 97v364q-72 66 -168 66q-80 0 -133.5 -71t-53.5 -194z" /> +<glyph horiz-adv-x="1193" d="M90 526q0 223 130 368.5t298 145.5q154 0 260 -118h8l23 94h242v-1006q0 -197 -134.5 -302t-381.5 -105q-205 0 -379 112l98 199q137 -76 281 -76q197 0 215 164l8 127q-113 -102 -252 -102q-188 0 -302 139t-114 360zM301 1176l195 307h239l197 -307h-203l-108 161h-9 l-108 -161h-203zM395 530q0 -125 50.5 -193.5t138.5 -68.5q94 0 166 97v364q-72 66 -168 66q-80 0 -133.5 -71t-53.5 -194z" /> +<glyph horiz-adv-x="1193" d="M90 526q0 223 130 368.5t298 145.5q154 0 260 -118h8l23 94h242v-1006q0 -197 -134.5 -302t-381.5 -105q-205 0 -379 112l98 199q137 -76 281 -76q197 0 215 164l8 127q-113 -102 -252 -102q-188 0 -302 139t-114 360zM332 1460h168q14 -119 116 -119q51 0 81 33t36 86 h168q-4 -121 -76.5 -202.5t-208 -81.5t-208 81.5t-76.5 202.5zM395 530q0 -125 50.5 -193.5t138.5 -68.5q94 0 166 97v364q-72 66 -168 66q-80 0 -133.5 -71t-53.5 -194z" /> +<glyph horiz-adv-x="1193" d="M90 526q0 223 130 368.5t298 145.5q154 0 260 -118h8l23 94h242v-1006q0 -197 -134.5 -302t-381.5 -105q-205 0 -379 112l98 199q137 -76 281 -76q197 0 215 164l8 127q-113 -102 -252 -102q-188 0 -302 139t-114 360zM395 530q0 -125 50.5 -193.5t138.5 -68.5 q94 0 166 97v364q-72 66 -168 66q-80 0 -133.5 -71t-53.5 -194zM449 1323q0 70 47 114t120.5 44t119.5 -44t46 -114t-46 -114t-119.5 -44t-120.5 44t-47 114z" /> +<glyph horiz-adv-x="1193" d="M90 526q0 223 130 368.5t298 145.5q154 0 260 -118h8l23 94h242v-1006q0 -197 -134.5 -302t-381.5 -105q-205 0 -379 112l98 199q137 -76 281 -76q197 0 215 164l8 127q-113 -102 -252 -102q-188 0 -302 139t-114 360zM395 530q0 -125 50.5 -193.5t138.5 -68.5 q94 0 166 97v364q-72 66 -168 66q-80 0 -133.5 -71t-53.5 -194zM440 1286q0 98 102.5 151.5t262.5 61.5l22 -121q-170 -18 -170 -78q0 -53 88 -73l-57 -111q-135 12 -191.5 52t-56.5 118z" /> +<glyph horiz-adv-x="1193" d="M90 526q0 223 130 368.5t298 145.5q154 0 260 -118h8l23 94h242v-1006q0 -197 -134.5 -302t-381.5 -105q-205 0 -379 112l98 199q137 -76 281 -76q197 0 215 164l8 127q-113 -102 -252 -102q-188 0 -302 139t-114 360zM301 1483h203l108 -162h9l108 162h203l-197 -307 h-239zM395 530q0 -125 50.5 -193.5t138.5 -68.5q94 0 166 97v364q-72 66 -168 66q-80 0 -133.5 -71t-53.5 -194z" /> +<glyph horiz-adv-x="1193" d="M90 526q0 223 130 368.5t298 145.5q154 0 260 -118h8l23 94h242v-1006q0 -197 -134.5 -302t-381.5 -105q-205 0 -379 112l98 199q137 -76 281 -76q197 0 215 164l8 127q-113 -102 -252 -102q-188 0 -302 139t-114 360zM334 1212v191h565v-191h-565zM395 530 q0 -125 50.5 -193.5t138.5 -68.5q94 0 166 97v364q-72 66 -168 66q-80 0 -133.5 -71t-53.5 -194z" /> +<glyph horiz-adv-x="1193" d="M90 526q0 223 130 368.5t298 145.5q154 0 260 -118h8l23 94h242v-1006q0 -197 -134.5 -302t-381.5 -105q-205 0 -379 112l98 199q137 -76 281 -76q197 0 215 164l8 127q-113 -102 -252 -102q-188 0 -302 139t-114 360zM276 1178q14 135 72 205.5t141 70.5q59 0 139.5 -45 t102.5 -45q49 0 72 90h153q-16 -135 -72.5 -205.5t-140.5 -70.5q-59 0 -139 46t-102 46q-51 0 -72 -92h-154zM395 530q0 -125 50.5 -193.5t138.5 -68.5q94 0 166 97v364q-72 66 -168 66q-80 0 -133.5 -71t-53.5 -194z" /> +<glyph horiz-adv-x="565" d="M133 0v1436h301v-1436h-301z" /> +<glyph horiz-adv-x="565" d="M133 0v1436h301v-1436h-301zM135 1550l166 246h320l-244 -246h-242z" /> +<glyph horiz-adv-x="651" d="M133 0v1436h301v-1436h-301zM512 1577h193l-5 -141l-49 -314h-129z" /> +<glyph horiz-adv-x="927" d="M133 0v1436h301v-1436h-301zM565 674q0 80 52.5 134t130 54t129 -54t51.5 -134t-51.5 -135.5t-129 -55.5t-130 55.5t-52.5 135.5z" /> +<glyph horiz-adv-x="565" d="M70 -348q170 18 170 76q0 51 -88 75l57 111q135 -14 191.5 -54t56.5 -118q0 -98 -102.5 -150.5t-262.5 -60.5zM133 0v1436h301v-1436h-301z" /> +<glyph horiz-adv-x="565" d="M115 -305.5q0 69.5 47 114t121 44.5q72 0 119 -44.5t47 -114t-47 -113.5t-119 -44q-74 0 -121 44t-47 113.5zM133 0v1436h301v-1436h-301z" /> +<glyph horiz-adv-x="565" d="M-2 1645v192h565v-192h-565zM115 -305.5q0 69.5 47 114t121 44.5q72 0 119 -44.5t47 -114t-47 -113.5t-119 -44q-74 0 -121 44t-47 113.5zM133 0v1436h301v-1436h-301z" /> +<glyph horiz-adv-x="565" d="M-2 -195h565v-192h-565v192zM133 0v1436h301v-1436h-301z" /> +<glyph horiz-adv-x="612" d="M31 492v239l102 64v641h301v-492l154 92v-241l-154 -93v-702h-301v553z" /> +<glyph horiz-adv-x="1300" d="M49 780v224l135 10v55q0 176 90.5 283.5t284.5 107.5q100 0 203 -37l-55 -221q-57 20 -105 21q-117 0 -117 -146v-61h183v-236h-183v-780h-301v780h-135zM868 0v1436h301v-1436h-301z" /> +<glyph horiz-adv-x="1187" d="M109 655.5q0 317.5 131 493.5t354 176q221 0 353 -177t132 -492.5t-132 -498t-353 -182.5t-353 181.5t-132 499zM410 655.5q0 -241.5 47 -339t137 -97.5t137 97.5t47 339t-47 333.5t-137 92t-137 -92t-47 -333.5z" /> +<glyph horiz-adv-x="839" d="M80 995v187q186 35 321 118h224v-1300h-301v995h-244z" /> +<glyph horiz-adv-x="1077" d="M68 1118q102 109 203.5 158t236.5 49q193 0 306.5 -112.5t113.5 -301.5q0 -147 -105.5 -308t-294.5 -365q131 16 217 16h228v-254h-881v172q293 281 421 438.5t128 282.5q0 96 -45 146.5t-129 50.5q-111 0 -236 -134z" /> +<glyph horiz-adv-x="1081" d="M45 160l139 190q135 -131 285 -131q96 0 153.5 41t57.5 113q0 94 -75 140t-275 46v213q307 0 307 174q0 68 -42 106t-118 38q-113 0 -244 -115l-151 184q193 166 410 166q205 0 326.5 -94t121.5 -262q0 -197 -217 -289v-8q117 -35 187.5 -116t70.5 -202 q0 -174 -139.5 -276.5t-343.5 -102.5q-295 1 -453 185z" /> +<glyph horiz-adv-x="1146" d="M76 311v207l475 782h369v-759h149v-230h-149v-311h-281v311h-563zM365 541h274v211q0 86 10 290h-8q-33 -72 -106 -219z" /> +<glyph horiz-adv-x="1081" d="M47 158l135 190q139 -129 281 -129q102 0 160.5 52.5t58.5 150.5q0 96 -56.5 148.5t-148.5 52.5q-55 0 -93 -13.5t-99 -52.5l-135 86l36 657h738v-253h-478l-22 -244q68 31 145 31q178 0 296 -103.5t118 -300.5q0 -209 -139 -332t-338 -123q-277 1 -459 183z" /> +<glyph horiz-adv-x="1150" d="M117 621q0 344 152.5 524t373.5 180q229 0 381 -156l-160 -180q-33 39 -89 65.5t-111 26.5q-254 0 -269 -405q49 61 123 99t137 38q174 0 280.5 -101.5t106.5 -299.5q0 -197 -124.5 -317t-307.5 -120q-207 0 -350 162t-143 484zM401 471q35 -270 203 -270q72 0 118 53 t46 158q0 188 -172 188q-117 0 -195 -129z" /> +<glyph horiz-adv-x="1056" d="M90 1047v253h877v-184q-211 -258 -275.5 -480t-83.5 -636h-303q18 336 91 567.5t249 479.5h-555z" /> +<glyph horiz-adv-x="1124" d="M104 332q0 201 224 319v8q-174 131 -174 308q0 164 115.5 261t299.5 97q178 0 287 -97.5t109 -258.5q0 -170 -170 -285v-8q223 -121 223 -340q0 -156 -128 -258.5t-331 -102.5q-197 0 -326 99.5t-129 257.5zM365 367q0 -84 58 -133.5t142 -49.5q78 0 126 42t48 120 q0 41 -16 72t-63.5 60.5t-79 44t-115.5 50.5q-100 -91 -100 -206zM418 967q0 -74 55 -120t168 -89q80 92 80 190q0 76 -43 122t-117 46q-61 0 -102 -39t-41 -110z" /> +<glyph horiz-adv-x="1150" d="M102 889q0 197 125 316.5t310 119.5q207 0 349 -162t142 -483q0 -344 -151.5 -524.5t-374.5 -180.5q-225 0 -381 156l160 180q84 -92 202 -92q254 0 271 410q-49 -66 -124 -104t-138 -38q-176 0 -283 101.5t-107 300.5zM379 889q0 -189 170 -189q115 0 196 129 q-35 270 -204 271q-72 0 -117 -53.5t-45 -157.5z" /> +<glyph horiz-adv-x="1081" d="M76 592q0 293 127 454.5t338 161.5t338 -161.5t127 -454.5q0 -291 -127 -454t-338 -163t-338 163t-127 454zM360 592q0 -178 46.5 -280.5t134.5 -102.5t134 102.5t46 280.5t-46 281.5t-134 103.5t-134.5 -103.5t-46.5 -281.5z" /> +<glyph horiz-adv-x="1081" d="M143 0v244h283v635h-244v186q182 35 324 119h221v-940h244v-244h-828z" /> +<glyph horiz-adv-x="1081" d="M61 1001q100 106 200.5 156.5t236.5 50.5q188 0 304 -112.5t116 -292.5q0 -131 -91.5 -254t-289.5 -311q135 16 217 16h237v-254h-915v172q291 229 423 366.5t132 252.5q0 84 -47 133t-125 49q-104 0 -234 -133z" /> +<glyph horiz-adv-x="1081" d="M45 0l139 190q137 -133 285 -133q94 0 152.5 47.5t58.5 122.5q0 94 -76 144.5t-274 50.5v213q307 0 307 188q0 70 -42 110t-118 40q-113 0 -244 -115l-151 184q193 166 410 166q203 0 325.5 -97t122.5 -265q0 -211 -217 -303v-8q117 -33 187.5 -118t70.5 -210 q0 -176 -140.5 -283.5t-342.5 -107.5q-295 0 -453 184z" /> +<glyph horiz-adv-x="1081" d="M39 170v207l475 807h369v-785h149v-229h-149v-330h-281v330h-563zM328 399h274v236q0 45 12 291h-8q-66 -147 -106 -230z" /> +<glyph horiz-adv-x="1081" d="M47 2l135 186q141 -131 281 -131q100 0 159.5 57.5t59.5 161.5q0 98 -56.5 154.5t-148.5 56.5q-55 0 -94 -14t-98 -53l-135 88l36 676h738v-252h-478l-22 -264q70 29 145 28q178 0 296 -106.5t118 -306.5q0 -215 -138 -341t-339 -126q-273 0 -459 186z" /> +<glyph horiz-adv-x="1081" d="M84 621q0 344 151.5 524t374.5 180q225 0 381 -156l-160 -180q-35 39 -91 65.5t-111 26.5q-254 0 -271 -409q49 66 124 103.5t139 37.5q176 0 282.5 -101.5t106.5 -299.5q0 -197 -126 -317t-309 -120q-207 0 -349 162t-142 484zM367 471q34 -270 202 -270q72 0 118 53 t46 158q0 188 -170 188q-115 0 -196 -129z" /> +<glyph horiz-adv-x="1081" d="M90 932v252h905v-185q-213 -260 -280.5 -498.5t-85.5 -660.5h-303q18 344 94 593t254 499h-584z" /> +<glyph horiz-adv-x="1081" d="M86 332q0 201 221 319v8q-174 131 -174 308q0 164 116 261t300 97q178 0 286.5 -97.5t108.5 -258.5q0 -172 -170 -285v-8q225 -123 225 -340q0 -156 -128 -258.5t-332 -102.5q-197 0 -325 99.5t-128 257.5zM344 367q0 -84 58.5 -133.5t142.5 -49.5q78 0 126 42t48 120 q0 41 -16.5 72t-63.5 60.5t-79 44t-116 50.5q-100 -91 -100 -206zM397 967q0 -74 55.5 -120t168.5 -89q80 92 79 190q0 76 -42 122t-115 46q-63 0 -104.5 -39t-41.5 -110z" /> +<glyph horiz-adv-x="1081" d="M53 762q0 201 126 323.5t310 122.5q238 0 377.5 -180t139.5 -487q0 -332 -144.5 -528.5t-417.5 -196.5q-104 0 -180 24.5t-162 83.5l109 207q102 -74 211 -74q137 0 213 94.5t86 311.5q-53 -63 -132 -101t-147 -38q-182 0 -285.5 115.5t-103.5 322.5zM328 762 q0 -225 172 -225q129 0 217 135q-31 311 -221 311q-74 0 -121 -57.5t-47 -163.5z" /> +<glyph horiz-adv-x="1116" d="M92 592q0 293 127 454.5t338 161.5t338 -161.5t127 -454.5q0 -291 -127 -454t-338 -163t-338 163t-127 454zM377 592q0 -178 46 -280.5t134 -102.5t134 102.5t46 280.5t-46 281.5t-134 103.5t-134 -103.5t-46 -281.5z" /> +<glyph horiz-adv-x="839" d="M80 879v186q186 35 321 119h224v-1184h-301v879h-244z" /> +<glyph horiz-adv-x="1060" d="M66 1001q100 109 194 158t227 49q186 0 302 -111.5t116 -293.5q0 -133 -88 -260t-276 -305q131 16 217 16h198v-254h-864v172q268 211 396 355.5t128 263.5q0 86 -43 134t-122 48q-45 0 -88.5 -22.5t-67 -43t-68.5 -67.5z" /> +<glyph horiz-adv-x="1081" d="M45 0l139 190q137 -133 285 -133q94 0 152.5 47.5t58.5 122.5q0 94 -76 144.5t-274 50.5v213q307 0 307 188q0 70 -42 110t-118 40q-113 0 -244 -115l-151 184q193 166 410 166q203 0 325.5 -97t122.5 -265q0 -211 -217 -303v-8q117 -33 187.5 -118t70.5 -210 q0 -176 -140.5 -283.5t-342.5 -107.5q-295 0 -453 184z" /> +<glyph horiz-adv-x="1116" d="M55 170v207l475 807h369v-785h150v-229h-150v-330h-281v330h-563zM344 399h274v236q0 45 13 291h-8q-66 -147 -107 -230z" /> +<glyph horiz-adv-x="1081" d="M47 2l135 186q141 -131 281 -131q100 0 159.5 57.5t59.5 161.5q0 98 -56.5 154.5t-148.5 56.5q-55 0 -94 -14t-98 -53l-135 88l36 676h738v-252h-478l-22 -264q70 29 145 28q178 0 296 -106.5t118 -306.5q0 -215 -138 -341t-339 -126q-273 0 -459 186z" /> +<glyph horiz-adv-x="1116" d="M100 621q0 344 151.5 524t375.5 180q225 0 381 -156l-160 -180q-35 39 -91.5 65.5t-111.5 26.5q-254 0 -270 -409q49 66 123.5 103.5t138.5 37.5q176 0 282.5 -101.5t106.5 -299.5q0 -197 -126 -317t-308 -120q-207 0 -349.5 162t-142.5 484zM383 471q35 -270 203 -270 q72 0 118 53t46 158q0 188 -170 188q-115 0 -197 -129z" /> +<glyph horiz-adv-x="1056" d="M90 932v252h877v-185q-211 -266 -281 -501.5t-88 -657.5h-303q18 342 95 588t255 504h-555z" /> +<glyph horiz-adv-x="1120" d="M102 332q0 201 222 319v8q-174 131 -174 308q0 164 115.5 261t299.5 97q178 0 287 -97.5t109 -258.5q0 -172 -170 -285v-8q225 -123 225 -340q0 -156 -128 -258.5t-333 -102.5q-197 0 -325 99.5t-128 257.5zM360 367q0 -84 58.5 -133.5t142.5 -49.5q78 0 126 42t48 120 q0 41 -16.5 72t-63.5 60.5t-78.5 44t-115.5 50.5q-101 -91 -101 -206zM414 967q0 -74 55 -120t168 -89q80 92 80 190q0 76 -42 122t-116 46q-63 0 -104 -39t-41 -110z" /> +<glyph horiz-adv-x="1116" d="M70 762q0 201 126 323.5t310 122.5q238 0 377 -180t139 -487q0 -332 -144.5 -528.5t-416.5 -196.5q-104 0 -180 24.5t-162 83.5l108 207q102 -74 211 -74q137 0 213 94.5t86 311.5q-53 -63 -132 -101t-146 -38q-182 0 -285.5 115.5t-103.5 322.5zM344 762 q0 -225 172 -225q129 0 217 135q-31 311 -221 311q-74 0 -121 -57.5t-47 -163.5z" /> +<glyph horiz-adv-x="1699" d="M100 600q0 375 241 605.5t593 230.5q301 0 483 -173t182 -448q0 -248 -123.5 -390t-301.5 -142q-84 0 -138.5 43t-70.5 116h-4q-39 -59 -110 -98t-136 -39q-102 0 -168 78t-66 199q0 184 110.5 323t268.5 139q104 0 150 -102h4l33 86h184l-94 -397q-37 -164 65 -164 q78 0 142.5 90t64.5 246q0 203 -122 332t-376 129q-246 0 -430 -183.5t-184 -472.5q0 -256 147.5 -381t360.5 -125q145 0 256 58l69 -154q-164 -76 -350 -76q-133 0 -251.5 40t-216 118t-155 210t-57.5 302zM709 598q-1 -109 75 -109q53 0 125 86l45 228q-29 55 -86 55 q-68 0 -113.5 -85t-45.5 -175z" /> +<glyph horiz-adv-x="425" d="M84 1016q0 55 37 94t92 39t92 -39t37 -94q0 -57 -37 -94t-92 -37t-92 37t-37 94z" /> +<glyph horiz-adv-x="425" d="M63 748q158 51 158 155h-8q-53 0 -91 33t-38 90q0 53 39 88t94 35q70 0 107.5 -52.5t37.5 -146.5q0 -117 -66 -198.5t-187 -116.5z" /> +<glyph horiz-adv-x="425" d="M84 -406q0 55 37 94.5t92 39.5t92 -39t37 -95q0 -57 -37 -94t-92 -37t-92 37t-37 94z" /> +<glyph horiz-adv-x="425" d="M63 -674q158 51 158 156h-8q-53 0 -91 32.5t-38 90.5q0 53 39 88t94 35q70 0 107.5 -52.5t37.5 -146.5q0 -117 -66 -198.5t-187 -116.5z" /> +<glyph horiz-adv-x="770" d="M53 401.5q0 196.5 92.5 309t239.5 112.5t240.5 -112.5t93.5 -309t-93.5 -311.5t-240.5 -115t-239.5 115t-92.5 311.5zM262 401q0 -258 123 -258t123 258q0 254 -123 254t-123 -254z" /> +<glyph horiz-adv-x="770" d="M156 575v136q131 18 229 88h176v-799h-223v575h-182z" /> +<glyph horiz-adv-x="770" d="M55 659q123 164 305 164q135 0 215 -71.5t80 -198.5q0 -61 -33.5 -129t-70.5 -114t-109 -126h242v-184h-592v119q180 147 265 237t85 160q0 59 -30.5 92t-85.5 33q-72 0 -146 -96z" /> +<glyph horiz-adv-x="770" d="M55 137l133 105q72 -98 170 -99q49 0 82 26t33 71q0 104 -190 104v127q162 0 161 98q0 39 -26.5 62.5t-73.5 23.5q-66 0 -131 -80l-125 111q68 72 135.5 104.5t159.5 32.5q115 0 197 -61.5t82 -161.5q0 -117 -117 -184q145 -57 145 -193q0 -109 -91 -178.5t-218 -69.5 q-217 0 -326 162z" /> +<glyph horiz-adv-x="770" d="M72 178v111l288 510h275v-477h119v-144h-119v-178h-197v178h-366zM274 322h164v84l13 239h-9l-82 -158z" /> +<glyph horiz-adv-x="770" d="M55 137l133 105q74 -98 170 -99q49 0 83 36t34 85q0 55 -34.5 87t-86.5 32q-63 0 -118 -47l-95 65l35 398h483v-187h-309l-12 -110q51 12 94 12q111 0 185.5 -70.5t74.5 -189.5q0 -121 -87 -200t-222 -79q-217 0 -328 162z" /> +<glyph horiz-adv-x="770" d="M74 395q0 195 98 311.5t274 116.5q140 0 236 -84l-86 -137q-72 53 -135 53q-162 0 -185 -215q74 70 170 70q115 0 182.5 -68.5t67.5 -183.5q0 -121 -80.5 -202t-201.5 -81q-160 0 -250 114t-90 306zM276 303q8 -82 43 -121t84 -39q41 0 69 28t28 81q0 109 -105 108 q-61 0 -119 -57z" /> +<glyph horiz-adv-x="770" d="M102 614v185h603v-119q-129 -164 -174.5 -310.5t-57.5 -369.5h-233q10 180 60 314.5t159 299.5h-357z" /> +<glyph horiz-adv-x="770" d="M78 203q0 125 147 207v8q-119 84 -119 186q0 100 80 159.5t199 59.5q121 0 201 -59t80 -160q0 -106 -119 -176v-8q143 -78 143 -215q0 -96 -87 -163t-218 -67q-133 0 -220 67t-87 161zM279 225q0 -43 30.5 -72.5t75.5 -29.5t76 28.5t31 69.5q0 16 -6.5 28.5t-12.5 22 t-23.5 19.5t-27.5 15t-36 17.5t-38 18.5q-69 -47 -69 -117zM301 598q0 -39 29 -62.5t88 -48.5q51 49 51 103q0 37 -24.5 59.5t-61.5 22.5q-35 0 -58.5 -20.5t-23.5 -53.5z" /> +<glyph horiz-adv-x="770" d="M72 541q0 121 82 201.5t202 80.5q160 0 250 -113.5t90 -306t-99 -310.5t-273 -118q-140 0 -236 84l86 138q72 -53 135 -54q162 0 185 215q-74 -70 -172 -69q-115 0 -182.5 68.5t-67.5 183.5zM268 547q1 -109 105 -109q63 0 121 60q-20 158 -129 157q-41 0 -69 -27.5 t-28 -80.5z" /> +<glyph horiz-adv-x="548" d="M129 401q0 174 45 306.5t141 277.5l162 -65q-139 -250 -139 -519q0 -266 139 -520l-162 -65q-96 145 -141 278t-45 307z" /> +<glyph horiz-adv-x="548" d="M72 -119q139 254 139 520q0 268 -139 519l164 65q94 -145 139 -278.5t45 -305.5q0 -174 -45 -307t-139 -278z" /> +<glyph horiz-adv-x="425" d="M84 115q0 55 37 94t92 39t92 -39t37 -94q0 -57 -37 -94t-92 -37t-92 37t-37 94z" /> +<glyph horiz-adv-x="425" d="M63 -154q158 51 158 156h-8q-53 0 -91 33t-38 90q0 53 39 88t94 35q70 0 107.5 -52.5t37.5 -146.5q0 -117 -66 -198.5t-187 -116.5z" /> +<glyph horiz-adv-x="770" d="M53 938q0 197 92.5 309.5t239.5 112.5t240.5 -112.5t93.5 -309.5t-93.5 -311.5t-240.5 -114.5t-239.5 114.5t-92.5 311.5zM262 938q0 -258 123 -258t123 258q0 254 -123 254t-123 -254z" /> +<glyph horiz-adv-x="770" d="M156 1110v137q131 18 229 88h176v-798h-223v573h-182z" /> +<glyph horiz-adv-x="770" d="M55 1196q127 164 305 164q135 0 215 -71.5t80 -198.5q0 -61 -33.5 -130t-69.5 -114t-110 -125h242v-184h-592v118q180 147 265 237.5t85 158.5q0 59 -30.5 93t-85.5 34q-72 0 -146 -97z" /> +<glyph horiz-adv-x="770" d="M55 674l133 104q72 -98 170 -98q49 0 82 25.5t33 70.5q0 104 -190 105v127q162 0 161 98q0 39 -26.5 62.5t-73.5 23.5q-66 0 -131 -80l-125 111q131 137 295 137q115 0 197 -61.5t82 -161.5q0 -117 -117 -185q66 -27 105.5 -77t39.5 -117q0 -109 -91 -177.5t-218 -68.5 q-217 0 -326 162z" /> +<glyph horiz-adv-x="770" d="M72 713v110l288 512h275v-477h119v-145h-119v-176h-197v176h-366zM274 858h164v84l13 240h-9l-82 -158z" /> +<glyph horiz-adv-x="770" d="M55 674l133 104q74 -98 170 -98q49 0 83 35t34 84q0 55 -34.5 88t-86.5 33q-63 0 -118 -48l-95 66l35 397h483v-186h-309l-12 -113q49 14 94 15q111 0 185.5 -72t74.5 -190.5t-87 -197.5t-222 -79q-217 0 -328 162z" /> +<glyph horiz-adv-x="770" d="M74 932q0 195 98 311.5t274 116.5q140 0 236 -84l-86 -137q-72 53 -135 53q-162 0 -185 -215q72 68 170 67q115 0 182.5 -67.5t67.5 -181.5q0 -121 -80.5 -202t-201.5 -81q-160 0 -250 113.5t-90 306.5zM276 838q10 -80 45 -119t82 -39q41 0 69 26.5t28 79.5 q0 111 -105 111q-61 0 -119 -59z" /> +<glyph horiz-adv-x="770" d="M102 1149v186h603v-118q-129 -164 -174.5 -310.5t-57.5 -369.5h-233q10 180 60 314t159 298h-357z" /> +<glyph horiz-adv-x="770" d="M78 739q0 125 147 207v8q-119 84 -119 187q0 98 80 158.5t199 60.5q121 0 201 -59.5t80 -159.5q0 -109 -119 -178v-9q143 -74 143 -213q0 -98 -86 -163.5t-219 -65.5t-220 66.5t-87 160.5zM279 760q0 -41 30.5 -71t75.5 -30t76 29t31 70q0 14 -6.5 27.5t-12.5 21.5 t-23 19l-28 16q-10 6 -36 17t-38 18q-69 -45 -69 -117zM301 1135q0 -39 29 -62.5t88 -48.5q51 49 51 100q0 39 -24.5 61.5t-61.5 22.5q-35 0 -58.5 -21.5t-23.5 -51.5z" /> +<glyph horiz-adv-x="770" d="M72 1077q0 119 82 201t202 82q160 0 250 -113.5t90 -306t-99 -310.5t-273 -118q-140 0 -236 84l86 137q68 -53 135 -53q162 0 185 215q-74 -70 -172 -70q-115 0 -182.5 69t-67.5 183zM268 1083q0 -51 28 -80.5t77 -29.5q61 0 121 61q-20 158 -129 158q-41 0 -69 -27.5 t-28 -81.5z" /> +<glyph horiz-adv-x="548" d="M129 936q0 174 45 307t141 277l162 -66q-139 -250 -139 -518t139 -518l-162 -66q-96 145 -141 277.5t-45 306.5z" /> +<glyph horiz-adv-x="548" d="M72 418q139 250 139 518t-139 518l164 66q94 -143 139 -276.5t45 -307.5q0 -172 -45 -305t-139 -279z" /> +<glyph horiz-adv-x="425" d="M84 649q0 57 37 96t92 39t92 -38.5t37 -96.5q0 -55 -37 -92t-92 -37t-92 37t-37 92z" /> +<glyph horiz-adv-x="425" d="M63 381q80 27 119 63.5t39 94.5h-8q-53 0 -91 32.5t-38 88t39 90t94 34.5q70 0 107.5 -52t37.5 -146q0 -117 -66 -199t-187 -119z" /> +<glyph horiz-adv-x="788" d="M53 879q0 154 87 249t202 95q94 0 172 -84h8l19 65h164v-672h-173l-14 64h-8q-84 -80 -176 -80q-129 0 -205 96.5t-76 266.5zM270 883q0 -199 121 -199q57 0 101 59v271q-49 41 -103 41q-51 0 -85 -45t-34 -127z" /> +<glyph horiz-adv-x="788" d="M53 870q0 158 87 255.5t202 97.5q96 0 176 -88h4l19 71h164v-946h-213v219l10 111q-70 -74 -166 -74q-129 0 -206 94.5t-77 259.5zM270 872q0 -184 121 -184q57 0 101 53v269q-53 43 -102.5 43t-84.5 -46t-35 -135z" /> +<glyph horiz-adv-x="708" d="M49 870q0 156 95.5 254.5t228.5 98.5q143 0 217 -93.5t74 -230.5q0 -47 -11 -84h-401q23 -137 172 -137q82 0 147 41l72 -127q-115 -76 -248 -76q-150 0 -248 96.5t-98 257.5zM160 1516h207l118 -205h-155zM248 934h237q0 127 -110 127q-107 0 -127 -127z" /> +<glyph horiz-adv-x="708" d="M49 870q0 156 95.5 254.5t228.5 98.5q143 0 217 -93.5t74 -230.5q0 -47 -11 -84h-401q23 -137 172 -137q82 0 147 41l72 -127q-115 -76 -248 -76q-150 0 -248 96.5t-98 257.5zM248 934h237q0 127 -110 127q-107 0 -127 -127zM258 1311l121 205h205l-170 -205h-156z" /> +<glyph horiz-adv-x="788" d="M53 879q0 154 87 249t202 95q94 0 172 -84h8l19 65h164v-672h-173l-14 64h-8q-84 -80 -176 -80q-129 0 -205 96.5t-76 266.5zM270 883q0 -199 121 -199q57 0 101 59v271q-49 41 -103 41q-51 0 -85 -45t-34 -127z" /> +<glyph horiz-adv-x="802" d="M61 887q0 147 86 240.5t199 93.5q104 0 174 -78h6l17 61h168v-659q0 -143 -92.5 -219t-260.5 -76q-137 0 -256 76l72 137q86 -49 184 -49q68 0 105 39t37 96v10l6 68q-78 -66 -164 -66q-127 0 -204 90t-77 236zM276 889q0 -158 121 -158q59 0 103 57v222q-47 41 -109 41 q-49 0 -82 -42t-33 -120z" /> +<glyph horiz-adv-x="385" d="M86 532v947h213v-947h-213z" /> +<glyph horiz-adv-x="196" d="M-350 -25l721 1385h174l-721 -1385h-174z" /> +<glyph d="M-332 1683h320l166 -245h-240z" /> +<glyph d="M-154 1438l166 245h320l-246 -245h-240z" /> +<glyph d="M-344 1438l197 245h294l197 -245h-231l-109 125h-8l-109 -125h-231z" /> +<glyph d="M-348 1440q14 135 74.5 206.5t144.5 71.5q61 0 140 -46t106 -46q57 0 78 92h153q-14 -135 -74.5 -206.5t-144.5 -71.5q-61 0 -140 46t-106 46q-57 0 -78 -92h-153z" /> +<glyph d="M-289 1475v190h578v-190h-578z" /> +<glyph d="M-281 1683h166q23 -94 115 -94t115 94h166q-29 -245 -281 -245t-281 245z" /> +<glyph d="M-174 1593.5q0 69.5 49 113.5t125 44t125 -44t49 -113.5t-49 -113.5t-125 -44t-125 44t-49 113.5z" /> +<glyph d="M-346 1577q0 61 40 102t103.5 41t103.5 -41t40 -102t-40 -102t-103.5 -41t-103.5 41t-40 102zM59 1577q0 61 40 102t103.5 41t103.5 -41t40 -102t-40 -102t-103.5 -41t-103.5 41t-40 102z" /> +<glyph d="M-166 1665l35 150q344 -8 344 -187q0 -100 -79 -151.5t-206 -61.5l-22 119q90 18 90 61q0 57 -162 70z" /> +<glyph d="M-231 1628q0 90 64.5 145.5t166.5 55.5t166.5 -55.5t64.5 -145.5q0 -92 -63.5 -146.5t-167.5 -54.5t-167.5 54.5t-63.5 146.5zM-84 1628q0 -41 23.5 -64.5t60.5 -23.5q35 0 58.5 23.5t23.5 64.5q0 39 -23.5 63.5t-58.5 24.5q-37 0 -60.5 -24.5t-23.5 -63.5z" /> +<glyph d="M-281 1438l129 245h256l-182 -245h-203zM86 1438l131 245h256l-184 -245h-203z" /> +<glyph d="M-344 1683h231l109 -124h8l109 124h231l-197 -245h-294z" /> +<glyph d="M-473 1683h256l131 -245h-203zM-104 1683h256l129 -245h-203z" /> +<glyph d="M-211 -332q170 18 170 90q0 57 -121 86l82 164h176l-41 -96q119 -39 119 -152q0 -100 -101.5 -152t-260.5 -61z" /> +<glyph d="M-182 -264q0 86 49 157.5t104 110.5h185q-119 -96 -119 -188q0 -37 25.5 -57.5t60.5 -20.5q33 0 74 29l69 -152q-94 -72 -215 -72q-100 0 -166.5 51.5t-66.5 141.5z" /> +<glyph d="M-330 1294.5q0 53.5 36 90t91.5 36.5t91 -36.5t35.5 -90t-35.5 -89.5t-91 -36t-91.5 36t-36 89.5zM-283 1548v142h566v-142h-566zM76 1294.5q0 53.5 35.5 90t91 36.5t91.5 -36.5t36 -90t-36 -89.5t-91.5 -36t-91 36t-35.5 89.5z" /> +<glyph d="M-330 1560.5q0 53.5 36 89.5t91.5 36t91 -36t35.5 -89.5t-35.5 -90t-91 -36.5t-91.5 36.5t-36 90zM-289 1786v141h578v-141h-578zM76 1560.5q0 53.5 35.5 89.5t91 36t91.5 -36t36 -89.5t-36 -90t-91.5 -36.5t-91 36.5t-35.5 90z" /> +<glyph d="M-330 1294.5q0 53.5 36 90t91.5 36.5t91 -36.5t35.5 -90t-35.5 -89.5t-91 -36t-91.5 36t-36 89.5zM-139 1509l170 228h258l-236 -228h-192zM76 1294.5q0 53.5 35.5 90t91 36.5t91.5 -36.5t36 -90t-36 -89.5t-91.5 -36t-91 36t-35.5 89.5z" /> +<glyph d="M-330 1560.5q0 53.5 36 89.5t91.5 36t91 -36t35.5 -89.5t-35.5 -90t-91 -36.5t-91.5 36.5t-36 90zM-154 1749l166 246h316l-242 -246h-240zM76 1560.5q0 53.5 35.5 89.5t91 36t91.5 -36t36 -89.5t-36 -90t-91.5 -36.5t-91 36.5t-35.5 90z" /> +<glyph d="M-330 1294.5q0 53.5 36 90t91.5 36.5t91 -36.5t35.5 -90t-35.5 -89.5t-91 -36t-91.5 36t-36 89.5zM-303 1737h205l94 -119h8l94 119h205l-176 -228h-254zM76 1294.5q0 53.5 35.5 90t91 36.5t91.5 -36.5t36 -90t-36 -89.5t-91.5 -36t-91 36t-35.5 89.5z" /> +<glyph d="M-344 1995h231l109 -123h8l109 123h231l-197 -246h-294zM-330 1560.5q0 53.5 36 89.5t91.5 36t91 -36t35.5 -89.5t-35.5 -90t-91 -36.5t-91.5 36.5t-36 90zM76 1560.5q0 53.5 35.5 89.5t91 36t91.5 -36t36 -89.5t-36 -90t-91.5 -36.5t-91 36.5t-35.5 90z" /> +<glyph d="M-330 1294.5q0 53.5 36 90t91.5 36.5t91 -36.5t35.5 -90t-35.5 -89.5t-91 -36t-91.5 36t-36 89.5zM-289 1737h258l170 -228h-192zM76 1294.5q0 53.5 35.5 90t91 36.5t91.5 -36.5t36 -90t-36 -89.5t-91.5 -36t-91 36t-35.5 89.5z" /> +<glyph d="M-330 1560.5q0 53.5 36 89.5t91.5 36t91 -36t35.5 -89.5t-35.5 -90t-91 -36.5t-91.5 36.5t-36 90zM-328 1995h316l166 -246h-240zM76 1560.5q0 53.5 35.5 89.5t91 36t91.5 -36t36 -89.5t-36 -90t-91.5 -36.5t-91 36.5t-35.5 90z" /> +<glyph d="M-285 1176l166 262h238l166 -262h-185l-96 133h-8l-96 -133h-185zM219 1323l139 242h224l-195 -242h-168z" /> +<glyph d="M-324 1438l195 233h258l195 -233h-213l-107 112h-8l-107 -112h-213zM231 1577l140 246h233l-203 -246h-170z" /> +<glyph d="M-285 1176l166 262h238l166 -262h-185l-96 133h-8l-96 -133h-185zM147 1565h224l139 -242h-168z" /> +<glyph d="M-324 1438l195 233h258l195 -233h-213l-107 112h-8l-107 -112h-213zM115 1823h231l141 -246h-172z" /> +<glyph d="M-285 1176l166 262h238l166 -262h-185l-96 133h-8l-96 -133h-185zM190 1513l29 127q301 -8 301 -161q0 -92 -62 -134.5t-175 -58.5l-21 103q61 14 62 57q0 31 -29 47t-105 20z" /> +<glyph d="M-324 1438l195 233h258l195 -233h-213l-107 112h-8l-107 -112h-213zM190 1755l27 123q301 -8 301 -164q1 -160 -237 -178l-23 96q66 14 66 56q0 31 -30 46t-104 21z" /> +<glyph d="M-301 1174l164 227h274l164 -227h-195l-102 120h-8l-102 -120h-195zM-299 1475q12 117 63.5 175t122.5 58q61 0 124 -39t85 -39q57 0 72 78h131q-12 -115 -63.5 -174t-122.5 -59q-61 0 -124 38.5t-85 38.5q-58 1 -72 -77h-131z" /> +<glyph d="M-324 1438l195 233h258l195 -233h-213l-107 112h-8l-107 -112h-213zM-305 1745q12 115 62 173t124 58q61 0 131 -37.5t90 -37.5q55 0 74 75h129q-12 -115 -62 -173t-124 -58q-61 0 -131 39t-90 39q-58 0 -74 -78h-129z" /> +<glyph d="M-285 1460h133q23 -137 152 -137t152 137h133q-4 -121 -77 -202.5t-208 -81.5t-208 81.5t-77 202.5zM-94 1417l117 242h217l-183 -242h-151z" /> +<glyph d="M-279 1683h138q27 -111 141.5 -110.5t140.5 110.5h138q-10 -115 -81 -180t-198 -65t-197.5 65.5t-81.5 179.5zM-92 1655l131 243h227l-207 -243h-151z" /> +<glyph d="M-285 1460h133q23 -137 152 -137t152 137h133q-4 -121 -77 -202.5t-208 -81.5t-208 81.5t-77 202.5zM-240 1659h217l117 -242h-151z" /> +<glyph d="M-279 1683h138q27 -111 141.5 -110.5t140.5 110.5h138q-10 -115 -81 -180t-198 -65t-197.5 65.5t-81.5 179.5zM-266 1898h227l131 -243h-151z" /> +<glyph d="M-285 1460h133q23 -137 152 -137t152 137h133q-4 -121 -77 -202.5t-208 -81.5t-208 81.5t-77 202.5zM-162 1657l27 127q303 -10 303 -164q0 -92 -63.5 -134t-176.5 -56l-18 102q61 14 61 57q0 31 -29.5 46.5t-103.5 21.5z" /> +<glyph d="M-279 1683h138q27 -111 141.5 -110.5t140.5 110.5h138q-10 -115 -81 -180t-198 -65t-197.5 65.5t-81.5 179.5zM-158 1870l29 125q299 -10 299 -166q0 -160 -236 -178l-24 96q68 14 67 55q0 57 -135 68z" /> +<glyph d="M-299 1475q12 117 63.5 175t122.5 58q61 0 124 -39t85 -39q57 0 72 78h131q-12 -115 -63.5 -174t-122.5 -59q-61 0 -124 38.5t-85 38.5q-57 0 -72 -77h-131zM-285 1419h142q25 -102 143.5 -102t142.5 102h142q-4 -104 -77 -173.5t-208 -69.5t-208 69.5t-77 173.5z" /> +<glyph d="M-313 1745q12 115 65 174t125 59q51 0 122 -40t93 -40q61 0 76 80h135q-12 -115 -65.5 -174t-124.5 -59q-51 0 -122 39t-93 39q-27 0 -48.5 -20.5t-27.5 -57.5h-135zM-279 1683h138q27 -111 141.5 -110.5t140.5 110.5h138q-10 -115 -81 -180t-198 -65t-197.5 65.5 t-81.5 179.5z" /> +<glyph horiz-adv-x="83" d="M-55 1577h194l-4 -141l-49 -314h-129z" /> +<glyph d="M-176 1286q0 98 102.5 151.5t261.5 61.5l23 -121q-170 -18 -170 -78q0 -53 88 -73l-57 -111q-135 12 -191.5 52t-56.5 118z" /> +<glyph horiz-adv-x="284" /> +<glyph horiz-adv-x="284" /> +</font> +</defs></svg> \ No newline at end of file diff --git a/themes/yunohost-docs/fonts/SourceSansPro-Bold-webfont.ttf b/themes/yunohost-docs/fonts/SourceSansPro-Bold-webfont.ttf new file mode 100644 index 00000000..8da080cf Binary files /dev/null and b/themes/yunohost-docs/fonts/SourceSansPro-Bold-webfont.ttf differ diff --git a/themes/yunohost-docs/fonts/SourceSansPro-Bold-webfont.woff b/themes/yunohost-docs/fonts/SourceSansPro-Bold-webfont.woff new file mode 100644 index 00000000..19644594 Binary files /dev/null and b/themes/yunohost-docs/fonts/SourceSansPro-Bold-webfont.woff differ diff --git a/themes/yunohost-docs/images/favicon.ico b/themes/yunohost-docs/images/favicon.ico new file mode 100644 index 00000000..49ffcee4 Binary files /dev/null and b/themes/yunohost-docs/images/favicon.ico differ diff --git a/themes/yunohost-docs/images/favicon.png b/themes/yunohost-docs/images/favicon.png new file mode 100644 index 00000000..1981a6c7 Binary files /dev/null and b/themes/yunohost-docs/images/favicon.png differ diff --git a/themes/yunohost-docs/js/darkMode.js b/themes/yunohost-docs/js/darkMode.js new file mode 100644 index 00000000..7df345a2 --- /dev/null +++ b/themes/yunohost-docs/js/darkMode.js @@ -0,0 +1,52 @@ + +/** + * Custom dark mode + */ + +// Get user preference +const prefersDarkScheme = window.matchMedia("(prefers-color-scheme: dark)").matches; + +// Select the theme preference from localStorage +const currentTheme = localStorage.getItem("theme") ? localStorage.getItem("theme") : null; + +// If the current theme in localStorage is "dark" or user prefer dark, apply it +if (currentTheme == "dark" || (currentTheme == null && prefersDarkScheme)) { + document.body.classList.add("dark-mode"); +} +else +{ + document.body.classList.add("light-mode"); +} + +// Get all elements with switch class +const switches = document.querySelectorAll(".dark-mode-switcher"); + +// Apply event function to each element +for (var i = 0; i < switches.length; i++) { + switches[i].addEventListener('click', darkModeSwith); +} + +function darkModeSwith(event) { + + // Prevent href action + event.preventDefault(); + + // Toggle the .dark-theme class + document.body.classList.toggle("dark-mode"); + document.body.classList.toggle("light-mode"); + + // If the body contains the .dark-theme class... + // Then save the choice in localStorage + if (document.body.classList.contains("dark-mode")) { + localStorage.setItem("theme", "dark"); + } else { + localStorage.setItem("theme", "light"); + } + + // Close mobile menu + if (toggle = document.querySelector('#toggle')) + toggle.classList.remove('active'); + if (overlay = document.querySelector('#overlay')) + overlay.classList.remove('open'); + document.body.classList.remove('mobile-nav-open'); +} \ No newline at end of file diff --git a/themes/yunohost-docs/js/simplebar.min.js b/themes/yunohost-docs/js/simplebar.min.js new file mode 100644 index 00000000..f016bf68 --- /dev/null +++ b/themes/yunohost-docs/js/simplebar.min.js @@ -0,0 +1,10 @@ +/** + * SimpleBar.js - v4.0.0-alpha.3 + * Scrollbars, simpler. + * https://grsmto.github.io/simplebar/ + * + * Made by Adrien Denat from a fork by Jonathan Nicol + * Under MIT License + */ + +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).SimpleBar=e()}(this,function(){"use strict";var t=function(t){if("function"!=typeof t)throw TypeError(String(t)+" is not a function");return t},e=function(t){try{return!!t()}catch(t){return!0}},i={}.toString,r=function(t){return i.call(t).slice(8,-1)},n="".split,s=e(function(){return!Object("z").propertyIsEnumerable(0)})?function(t){return"String"==r(t)?n.call(t,""):Object(t)}:Object,o=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t},a=function(t){return Object(o(t))},l=Math.ceil,c=Math.floor,u=function(t){return isNaN(t=+t)?0:(t>0?c:l)(t)},h=Math.min,f=function(t){return t>0?h(u(t),9007199254740991):0},d=function(t){return"object"==typeof t?null!==t:"function"==typeof t},p=Array.isArray||function(t){return"Array"==r(t)},v="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function g(t,e){return t(e={exports:{}},e.exports),e.exports}var b,m,y,x,E="object"==typeof window&&window&&window.Math==Math?window:"object"==typeof self&&self&&self.Math==Math?self:Function("return this")(),w=!e(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),O=E.document,_=d(O)&&d(O.createElement),S=!w&&!e(function(){return 7!=Object.defineProperty((t="div",_?O.createElement(t):{}),"a",{get:function(){return 7}}).a;var t}),L=function(t){if(!d(t))throw TypeError(String(t)+" is not an object");return t},A=function(t,e){if(!d(t))return t;var i,r;if(e&&"function"==typeof(i=t.toString)&&!d(r=i.call(t)))return r;if("function"==typeof(i=t.valueOf)&&!d(r=i.call(t)))return r;if(!e&&"function"==typeof(i=t.toString)&&!d(r=i.call(t)))return r;throw TypeError("Can't convert object to primitive value")},M=Object.defineProperty,k={f:w?M:function(t,e,i){if(L(t),e=A(e,!0),L(i),S)try{return M(t,e,i)}catch(t){}if("get"in i||"set"in i)throw TypeError("Accessors not supported");return"value"in i&&(t[e]=i.value),t}},W=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}},T=w?function(t,e,i){return k.f(t,e,W(1,i))}:function(t,e,i){return t[e]=i,t},j=function(t,e){try{T(E,t,e)}catch(i){E[t]=e}return e},R=g(function(t){var e=E["__core-js_shared__"]||j("__core-js_shared__",{});(t.exports=function(t,i){return e[t]||(e[t]=void 0!==i?i:{})})("versions",[]).push({version:"3.0.1",mode:"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})}),N=0,z=Math.random(),C=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++N+z).toString(36))},V=!e(function(){return!String(Symbol())}),D=R("wks"),B=E.Symbol,I=function(t){return D[t]||(D[t]=V&&B[t]||(V?B:C)("Symbol."+t))},P=I("species"),H=function(t,e){var i;return p(t)&&("function"!=typeof(i=t.constructor)||i!==Array&&!p(i.prototype)?d(i)&&null===(i=i[P])&&(i=void 0):i=void 0),new(void 0===i?Array:i)(0===e?0:e)},q=function(e,i){var r=1==e,n=2==e,o=3==e,l=4==e,c=6==e,u=5==e||c,h=i||H;return function(i,d,p){for(var v,g,b=a(i),m=s(b),y=function(e,i,r){if(t(e),void 0===i)return e;switch(r){case 0:return function(){return e.call(i)};case 1:return function(t){return e.call(i,t)};case 2:return function(t,r){return e.call(i,t,r)};case 3:return function(t,r,n){return e.call(i,t,r,n)}}return function(){return e.apply(i,arguments)}}(d,p,3),x=f(m.length),E=0,w=r?h(i,x):n?h(i,0):void 0;x>E;E++)if((u||E in m)&&(g=y(v=m[E],E,b),e))if(r)w[E]=g;else if(g)switch(e){case 3:return!0;case 5:return v;case 6:return E;case 2:w.push(v)}else if(l)return!1;return c?-1:o||l?l:w}},F=I("species"),$={}.propertyIsEnumerable,X=Object.getOwnPropertyDescriptor,Y={f:X&&!$.call({1:2},1)?function(t){var e=X(this,t);return!!e&&e.enumerable}:$},G=function(t){return s(o(t))},K={}.hasOwnProperty,U=function(t,e){return K.call(t,e)},J=Object.getOwnPropertyDescriptor,Q={f:w?J:function(t,e){if(t=G(t),e=A(e,!0),S)try{return J(t,e)}catch(t){}if(U(t,e))return W(!Y.f.call(t,e),t[e])}},Z=R("native-function-to-string",Function.toString),tt=E.WeakMap,et="function"==typeof tt&&/native code/.test(Z.call(tt)),it=R("keys"),rt={},nt=E.WeakMap;if(et){var st=new nt,ot=st.get,at=st.has,lt=st.set;b=function(t,e){return lt.call(st,t,e),e},m=function(t){return ot.call(st,t)||{}},y=function(t){return at.call(st,t)}}else{var ct=it[x="state"]||(it[x]=C(x));rt[ct]=!0,b=function(t,e){return T(t,ct,e),e},m=function(t){return U(t,ct)?t[ct]:{}},y=function(t){return U(t,ct)}}var ut,ht,ft={set:b,get:m,has:y,enforce:function(t){return y(t)?m(t):b(t,{})},getterFor:function(t){return function(e){var i;if(!d(e)||(i=m(e)).type!==t)throw TypeError("Incompatible receiver, "+t+" required");return i}}},dt=g(function(t){var e=ft.get,i=ft.enforce,r=String(Z).split("toString");R("inspectSource",function(t){return Z.call(t)}),(t.exports=function(t,e,n,s){var o=!!s&&!!s.unsafe,a=!!s&&!!s.enumerable,l=!!s&&!!s.noTargetGet;"function"==typeof n&&("string"!=typeof e||U(n,"name")||T(n,"name",e),i(n).source=r.join("string"==typeof e?e:"")),t!==E?(o?!l&&t[e]&&(a=!0):delete t[e],a?t[e]=n:T(t,e,n)):a?t[e]=n:j(e,n)})(Function.prototype,"toString",function(){return"function"==typeof this&&e(this).source||Z.call(this)})}),pt=Math.max,vt=Math.min,gt=(ut=!1,function(t,e,i){var r,n=G(t),s=f(n.length),o=function(t,e){var i=u(t);return i<0?pt(i+e,0):vt(i,e)}(i,s);if(ut&&e!=e){for(;s>o;)if((r=n[o++])!=r)return!0}else for(;s>o;o++)if((ut||o in n)&&n[o]===e)return ut||o||0;return!ut&&-1}),bt=function(t,e){var i,r=G(t),n=0,s=[];for(i in r)!U(rt,i)&&U(r,i)&&s.push(i);for(;e.length>n;)U(r,i=e[n++])&&(~gt(s,i)||s.push(i));return s},mt=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],yt=mt.concat("length","prototype"),xt={f:Object.getOwnPropertyNames||function(t){return bt(t,yt)}},Et={f:Object.getOwnPropertySymbols},wt=E.Reflect,Ot=wt&&wt.ownKeys||function(t){var e=xt.f(L(t)),i=Et.f;return i?e.concat(i(t)):e},_t=function(t,e){for(var i=Ot(e),r=k.f,n=Q.f,s=0;s<i.length;s++){var o=i[s];U(t,o)||r(t,o,n(e,o))}},St=/#|\.prototype\./,Lt=function(t,i){var r=Mt[At(t)];return r==Wt||r!=kt&&("function"==typeof i?e(i):!!i)},At=Lt.normalize=function(t){return String(t).replace(St,".").toLowerCase()},Mt=Lt.data={},kt=Lt.NATIVE="N",Wt=Lt.POLYFILL="P",Tt=Lt,jt=Q.f,Rt=function(t,e){var i,r,n,s,o,a=t.target,l=t.global,c=t.stat;if(i=l?E:c?E[a]||j(a,{}):(E[a]||{}).prototype)for(r in e){if(s=e[r],n=t.noTargetGet?(o=jt(i,r))&&o.value:i[r],!Tt(l?r:a+(c?".":"#")+r,t.forced)&&void 0!==n){if(typeof s==typeof n)continue;_t(s,n)}(t.sham||n&&n.sham)&&T(s,"sham",!0),dt(i,r,s,t)}},Nt=q(2);Rt({target:"Array",proto:!0,forced:!(ht="filter",!e(function(){var t=[];return(t.constructor={})[F]=function(){return{foo:1}},1!==t[ht](Boolean).foo}))},{filter:function(t){return Nt(this,t,arguments[1])}});var zt=function(t,i){var r=[][t];return!r||!e(function(){r.call(null,i||function(){throw 1},1)})},Ct=[].forEach,Vt=q(0),Dt=zt("forEach")?function(t){return Vt(this,t,arguments[1])}:Ct;Rt({target:"Array",proto:!0,forced:[].forEach!=Dt},{forEach:Dt});Rt({target:"Array",proto:!0,forced:zt("reduce")},{reduce:function(e){return function(e,i,r,n,o){t(i);var l=a(e),c=s(l),u=f(l.length),h=o?u-1:0,d=o?-1:1;if(r<2)for(;;){if(h in c){n=c[h],h+=d;break}if(h+=d,o?h<0:u<=h)throw TypeError("Reduce of empty array with no initial value")}for(;o?h>=0:u>h;h+=d)h in c&&(n=i(n,c[h],h,l));return n}(this,e,arguments.length,arguments[1],!1)}});var Bt=k.f,It=Function.prototype,Pt=It.toString,Ht=/^\s*function ([^ (]*)/;!w||"name"in It||Bt(It,"name",{configurable:!0,get:function(){try{return Pt.call(this).match(Ht)[1]}catch(t){return""}}});var qt=Object.keys||function(t){return bt(t,mt)},Ft=Object.assign,$t=!Ft||e(function(){var t={},e={},i=Symbol();return t[i]=7,"abcdefghijklmnopqrst".split("").forEach(function(t){e[t]=t}),7!=Ft({},t)[i]||"abcdefghijklmnopqrst"!=qt(Ft({},e)).join("")})?function(t,e){for(var i=a(t),r=arguments.length,n=1,o=Et.f,l=Y.f;r>n;)for(var c,u=s(arguments[n++]),h=o?qt(u).concat(o(u)):qt(u),f=h.length,d=0;f>d;)l.call(u,c=h[d++])&&(i[c]=u[c]);return i}:Ft;Rt({target:"Object",stat:!0,forced:Object.assign!==$t},{assign:$t});var Xt="\t\n\v\f\r \u2028\u2029\ufeff",Yt="["+Xt+"]",Gt=RegExp("^"+Yt+Yt+"*"),Kt=RegExp(Yt+Yt+"*$"),Ut=E.parseInt,Jt=/^[-+]?0[xX]/,Qt=8!==Ut(Xt+"08")||22!==Ut(Xt+"0x16")?function(t,e){var i=function(t,e){return t=String(o(t)),1&e&&(t=t.replace(Gt,"")),2&e&&(t=t.replace(Kt,"")),t}(String(t),3);return Ut(i,e>>>0||(Jt.test(i)?16:10))}:Ut;Rt({global:!0,forced:parseInt!=Qt},{parseInt:Qt});var Zt,te,ee=RegExp.prototype.exec,ie=String.prototype.replace,re=ee,ne=(Zt=/a/,te=/b*/g,ee.call(Zt,"a"),ee.call(te,"a"),0!==Zt.lastIndex||0!==te.lastIndex),se=void 0!==/()??/.exec("")[1];(ne||se)&&(re=function(t){var e,i,r,n,s=this;return se&&(i=new RegExp("^"+s.source+"$(?!\\s)",function(){var t=L(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}.call(s))),ne&&(e=s.lastIndex),r=ee.call(s,t),ne&&r&&(s.lastIndex=s.global?r.index+r[0].length:e),se&&r&&r.length>1&&ie.call(r[0],i,function(){for(n=1;n<arguments.length-2;n++)void 0===arguments[n]&&(r[n]=void 0)}),r});var oe=re;Rt({target:"RegExp",proto:!0,forced:/./.exec!==oe},{exec:oe});var ae=function(t,e,i){return e+(i?function(t,e,i){var r,n,s=String(o(t)),a=u(e),l=s.length;return a<0||a>=l?i?"":void 0:(r=s.charCodeAt(a))<55296||r>56319||a+1===l||(n=s.charCodeAt(a+1))<56320||n>57343?i?s.charAt(a):r:i?s.slice(a,a+2):n-56320+(r-55296<<10)+65536}(t,e,!0).length:1)},le=function(t,e){var i=t.exec;if("function"==typeof i){var n=i.call(t,e);if("object"!=typeof n)throw TypeError("RegExp exec method returned something other than an Object or null");return n}if("RegExp"!==r(t))throw TypeError("RegExp#exec called on incompatible receiver");return oe.call(t,e)},ce=I("species"),ue=!e(function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$<a>")}),he=!e(function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var i="ab".split(t);return 2!==i.length||"a"!==i[0]||"b"!==i[1]}),fe=function(t,i,r,n){var s=I(t),o=!e(function(){var e={};return e[s]=function(){return 7},7!=""[t](e)}),a=o&&!e(function(){var e=!1,i=/a/;return i.exec=function(){return e=!0,null},"split"===t&&(i.constructor={},i.constructor[ce]=function(){return i}),i[s](""),!e});if(!o||!a||"replace"===t&&!ue||"split"===t&&!he){var l=/./[s],c=r(s,""[t],function(t,e,i,r,n){return e.exec===oe?o&&!n?{done:!0,value:l.call(e,i,r)}:{done:!0,value:t.call(i,e,r)}:{done:!1}}),u=c[0],h=c[1];dt(String.prototype,t,u),dt(RegExp.prototype,s,2==i?function(t,e){return h.call(t,this,e)}:function(t){return h.call(t,this)}),n&&T(RegExp.prototype[s],"sham",!0)}};fe("match",1,function(t,e,i){return[function(e){var i=o(this),r=null==e?void 0:e[t];return void 0!==r?r.call(e,i):new RegExp(e)[t](String(i))},function(t){var r=i(e,t,this);if(r.done)return r.value;var n=L(t),s=String(this);if(!n.global)return le(n,s);var o=n.unicode;n.lastIndex=0;for(var a,l=[],c=0;null!==(a=le(n,s));){var u=String(a[0]);l[c]=u,""===u&&(n.lastIndex=ae(s,f(n.lastIndex),o)),c++}return 0===c?null:l}]});var de=Math.max,pe=Math.min,ve=Math.floor,ge=/\$([$&`']|\d\d?|<[^>]*>)/g,be=/\$([$&`']|\d\d?)/g;fe("replace",2,function(t,e,i){return[function(i,r){var n=o(this),s=null==i?void 0:i[t];return void 0!==s?s.call(i,n,r):e.call(String(n),i,r)},function(t,n){var s=i(e,t,this,n);if(s.done)return s.value;var o=L(t),a=String(this),l="function"==typeof n;l||(n=String(n));var c=o.global;if(c){var h=o.unicode;o.lastIndex=0}for(var d=[];;){var p=le(o,a);if(null===p)break;if(d.push(p),!c)break;""===String(p[0])&&(o.lastIndex=ae(a,f(o.lastIndex),h))}for(var v,g="",b=0,m=0;m<d.length;m++){p=d[m];for(var y=String(p[0]),x=de(pe(u(p.index),a.length),0),E=[],w=1;w<p.length;w++)E.push(void 0===(v=p[w])?v:String(v));var O=p.groups;if(l){var _=[y].concat(E,x,a);void 0!==O&&_.push(O);var S=String(n.apply(void 0,_))}else S=r(y,a,x,E,O,n);x>=b&&(g+=a.slice(b,x)+S,b=x+y.length)}return g+a.slice(b)}];function r(t,i,r,n,s,o){var l=r+t.length,c=n.length,u=be;return void 0!==s&&(s=a(s),u=ge),e.call(o,u,function(e,o){var a;switch(o.charAt(0)){case"$":return"$";case"&":return t;case"`":return i.slice(0,r);case"'":return i.slice(l);case"<":a=s[o.slice(1,-1)];break;default:var u=+o;if(0===u)return e;if(u>c){var h=ve(u/10);return 0===h?e:h<=c?void 0===n[h-1]?o.charAt(1):n[h-1]+o.charAt(1):e}a=n[u-1]}return void 0===a?"":a})}});for(var me in{CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}){var ye=E[me],xe=ye&&ye.prototype;if(xe&&xe.forEach!==Dt)try{T(xe,"forEach",Dt)}catch(t){xe.forEach=Dt}}var Ee=g(function(t,e){t.exports=function(){if("undefined"==typeof document)return 0;var t,e=document.body,i=document.createElement("div"),r=i.style;return r.position="absolute",r.top=r.left="-9999px",r.width=r.height="100px",r.overflow="scroll",e.appendChild(i),t=i.offsetWidth-i.clientWidth,e.removeChild(i),t}}),we="Expected a function",Oe=NaN,_e="[object Symbol]",Se=/^\s+|\s+$/g,Le=/^[-+]0x[0-9a-f]+$/i,Ae=/^0b[01]+$/i,Me=/^0o[0-7]+$/i,ke=parseInt,We="object"==typeof v&&v&&v.Object===Object&&v,Te="object"==typeof self&&self&&self.Object===Object&&self,je=We||Te||Function("return this")(),Re=Object.prototype.toString,Ne=Math.max,ze=Math.min,Ce=function(){return je.Date.now()};function Ve(t,e,i){var r,n,s,o,a,l,c=0,u=!1,h=!1,f=!0;if("function"!=typeof t)throw new TypeError(we);function d(e){var i=r,s=n;return r=n=void 0,c=e,o=t.apply(s,i)}function p(t){var i=t-l;return void 0===l||i>=e||i<0||h&&t-c>=s}function v(){var t=Ce();if(p(t))return g(t);a=setTimeout(v,function(t){var i=e-(t-l);return h?ze(i,s-(t-c)):i}(t))}function g(t){return a=void 0,f&&r?d(t):(r=n=void 0,o)}function b(){var t=Ce(),i=p(t);if(r=arguments,n=this,l=t,i){if(void 0===a)return function(t){return c=t,a=setTimeout(v,e),u?d(t):o}(l);if(h)return a=setTimeout(v,e),d(l)}return void 0===a&&(a=setTimeout(v,e)),o}return e=Be(e)||0,De(i)&&(u=!!i.leading,s=(h="maxWait"in i)?Ne(Be(i.maxWait)||0,e):s,f="trailing"in i?!!i.trailing:f),b.cancel=function(){void 0!==a&&clearTimeout(a),c=0,r=l=n=a=void 0},b.flush=function(){return void 0===a?o:g(Ce())},b}function De(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function Be(t){if("number"==typeof t)return t;if(function(t){return"symbol"==typeof t||function(t){return!!t&&"object"==typeof t}(t)&&Re.call(t)==_e}(t))return Oe;if(De(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=De(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(Se,"");var i=Ae.test(t);return i||Me.test(t)?ke(t.slice(2),i?2:8):Le.test(t)?Oe:+t}var Ie=function(t,e,i){var r=!0,n=!0;if("function"!=typeof t)throw new TypeError(we);return De(i)&&(r="leading"in i?!!i.leading:r,n="trailing"in i?!!i.trailing:n),Ve(t,e,{leading:r,maxWait:e,trailing:n})},Pe="Expected a function",He=NaN,qe="[object Symbol]",Fe=/^\s+|\s+$/g,$e=/^[-+]0x[0-9a-f]+$/i,Xe=/^0b[01]+$/i,Ye=/^0o[0-7]+$/i,Ge=parseInt,Ke="object"==typeof v&&v&&v.Object===Object&&v,Ue="object"==typeof self&&self&&self.Object===Object&&self,Je=Ke||Ue||Function("return this")(),Qe=Object.prototype.toString,Ze=Math.max,ti=Math.min,ei=function(){return Je.Date.now()};function ii(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function ri(t){if("number"==typeof t)return t;if(function(t){return"symbol"==typeof t||function(t){return!!t&&"object"==typeof t}(t)&&Qe.call(t)==qe}(t))return He;if(ii(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=ii(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(Fe,"");var i=Xe.test(t);return i||Ye.test(t)?Ge(t.slice(2),i?2:8):$e.test(t)?He:+t}var ni=function(t,e,i){var r,n,s,o,a,l,c=0,u=!1,h=!1,f=!0;if("function"!=typeof t)throw new TypeError(Pe);function d(e){var i=r,s=n;return r=n=void 0,c=e,o=t.apply(s,i)}function p(t){var i=t-l;return void 0===l||i>=e||i<0||h&&t-c>=s}function v(){var t=ei();if(p(t))return g(t);a=setTimeout(v,function(t){var i=e-(t-l);return h?ti(i,s-(t-c)):i}(t))}function g(t){return a=void 0,f&&r?d(t):(r=n=void 0,o)}function b(){var t=ei(),i=p(t);if(r=arguments,n=this,l=t,i){if(void 0===a)return function(t){return c=t,a=setTimeout(v,e),u?d(t):o}(l);if(h)return a=setTimeout(v,e),d(l)}return void 0===a&&(a=setTimeout(v,e)),o}return e=ri(e)||0,ii(i)&&(u=!!i.leading,s=(h="maxWait"in i)?Ze(ri(i.maxWait)||0,e):s,f="trailing"in i?!!i.trailing:f),b.cancel=function(){void 0!==a&&clearTimeout(a),c=0,r=l=n=a=void 0},b.flush=function(){return void 0===a?o:g(ei())},b},si="Expected a function",oi="__lodash_hash_undefined__",ai="[object Function]",li="[object GeneratorFunction]",ci=/^\[object .+?Constructor\]$/,ui="object"==typeof v&&v&&v.Object===Object&&v,hi="object"==typeof self&&self&&self.Object===Object&&self,fi=ui||hi||Function("return this")();var di=Array.prototype,pi=Function.prototype,vi=Object.prototype,gi=fi["__core-js_shared__"],bi=function(){var t=/[^.]+$/.exec(gi&&gi.keys&&gi.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}(),mi=pi.toString,yi=vi.hasOwnProperty,xi=vi.toString,Ei=RegExp("^"+mi.call(yi).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),wi=di.splice,Oi=Ti(fi,"Map"),_i=Ti(Object,"create");function Si(t){var e=-1,i=t?t.length:0;for(this.clear();++e<i;){var r=t[e];this.set(r[0],r[1])}}function Li(t){var e=-1,i=t?t.length:0;for(this.clear();++e<i;){var r=t[e];this.set(r[0],r[1])}}function Ai(t){var e=-1,i=t?t.length:0;for(this.clear();++e<i;){var r=t[e];this.set(r[0],r[1])}}function Mi(t,e){for(var i,r,n=t.length;n--;)if((i=t[n][0])===(r=e)||i!=i&&r!=r)return n;return-1}function ki(t){return!(!Ri(t)||(e=t,bi&&bi in e))&&(function(t){var e=Ri(t)?xi.call(t):"";return e==ai||e==li}(t)||function(t){var e=!1;if(null!=t&&"function"!=typeof t.toString)try{e=!!(t+"")}catch(t){}return e}(t)?Ei:ci).test(function(t){if(null!=t){try{return mi.call(t)}catch(t){}try{return t+""}catch(t){}}return""}(t));var e}function Wi(t,e){var i,r,n=t.__data__;return("string"==(r=typeof(i=e))||"number"==r||"symbol"==r||"boolean"==r?"__proto__"!==i:null===i)?n["string"==typeof e?"string":"hash"]:n.map}function Ti(t,e){var i=function(t,e){return null==t?void 0:t[e]}(t,e);return ki(i)?i:void 0}function ji(t,e){if("function"!=typeof t||e&&"function"!=typeof e)throw new TypeError(si);var i=function(){var r=arguments,n=e?e.apply(this,r):r[0],s=i.cache;if(s.has(n))return s.get(n);var o=t.apply(this,r);return i.cache=s.set(n,o),o};return i.cache=new(ji.Cache||Ai),i}function Ri(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}Si.prototype.clear=function(){this.__data__=_i?_i(null):{}},Si.prototype.delete=function(t){return this.has(t)&&delete this.__data__[t]},Si.prototype.get=function(t){var e=this.__data__;if(_i){var i=e[t];return i===oi?void 0:i}return yi.call(e,t)?e[t]:void 0},Si.prototype.has=function(t){var e=this.__data__;return _i?void 0!==e[t]:yi.call(e,t)},Si.prototype.set=function(t,e){return this.__data__[t]=_i&&void 0===e?oi:e,this},Li.prototype.clear=function(){this.__data__=[]},Li.prototype.delete=function(t){var e=this.__data__,i=Mi(e,t);return!(i<0||(i==e.length-1?e.pop():wi.call(e,i,1),0))},Li.prototype.get=function(t){var e=this.__data__,i=Mi(e,t);return i<0?void 0:e[i][1]},Li.prototype.has=function(t){return Mi(this.__data__,t)>-1},Li.prototype.set=function(t,e){var i=this.__data__,r=Mi(i,t);return r<0?i.push([t,e]):i[r][1]=e,this},Ai.prototype.clear=function(){this.__data__={hash:new Si,map:new(Oi||Li),string:new Si}},Ai.prototype.delete=function(t){return Wi(this,t).delete(t)},Ai.prototype.get=function(t){return Wi(this,t).get(t)},Ai.prototype.has=function(t){return Wi(this,t).has(t)},Ai.prototype.set=function(t,e){return Wi(this,t).set(t,e),this},ji.Cache=Ai;var Ni=ji,zi=function(){if("undefined"!=typeof Map)return Map;function t(t,e){var i=-1;return t.some(function(t,r){return t[0]===e&&(i=r,!0)}),i}return function(){function e(){this.__entries__=[]}return Object.defineProperty(e.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),e.prototype.get=function(e){var i=t(this.__entries__,e),r=this.__entries__[i];return r&&r[1]},e.prototype.set=function(e,i){var r=t(this.__entries__,e);~r?this.__entries__[r][1]=i:this.__entries__.push([e,i])},e.prototype.delete=function(e){var i=this.__entries__,r=t(i,e);~r&&i.splice(r,1)},e.prototype.has=function(e){return!!~t(this.__entries__,e)},e.prototype.clear=function(){this.__entries__.splice(0)},e.prototype.forEach=function(t,e){void 0===e&&(e=null);for(var i=0,r=this.__entries__;i<r.length;i++){var n=r[i];t.call(e,n[1],n[0])}},e}()}(),Ci="undefined"!=typeof window&&"undefined"!=typeof document&&window.document===document,Vi="undefined"!=typeof global&&global.Math===Math?global:"undefined"!=typeof self&&self.Math===Math?self:"undefined"!=typeof window&&window.Math===Math?window:Function("return this")(),Di="function"==typeof requestAnimationFrame?requestAnimationFrame.bind(Vi):function(t){return setTimeout(function(){return t(Date.now())},1e3/60)},Bi=2;var Ii=20,Pi=["top","right","bottom","left","width","height","size","weight"],Hi="undefined"!=typeof MutationObserver,qi=function(){function t(){this.connected_=!1,this.mutationEventsAdded_=!1,this.mutationsObserver_=null,this.observers_=[],this.onTransitionEnd_=this.onTransitionEnd_.bind(this),this.refresh=function(t,e){var i=!1,r=!1,n=0;function s(){i&&(i=!1,t()),r&&a()}function o(){Di(s)}function a(){var t=Date.now();if(i){if(t-n<Bi)return;r=!0}else i=!0,r=!1,setTimeout(o,e);n=t}return a}(this.refresh.bind(this),Ii)}return t.prototype.addObserver=function(t){~this.observers_.indexOf(t)||this.observers_.push(t),this.connected_||this.connect_()},t.prototype.removeObserver=function(t){var e=this.observers_,i=e.indexOf(t);~i&&e.splice(i,1),!e.length&&this.connected_&&this.disconnect_()},t.prototype.refresh=function(){this.updateObservers_()&&this.refresh()},t.prototype.updateObservers_=function(){var t=this.observers_.filter(function(t){return t.gatherActive(),t.hasActive()});return t.forEach(function(t){return t.broadcastActive()}),t.length>0},t.prototype.connect_=function(){Ci&&!this.connected_&&(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),Hi?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},t.prototype.disconnect_=function(){Ci&&this.connected_&&(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},t.prototype.onTransitionEnd_=function(t){var e=t.propertyName,i=void 0===e?"":e;Pi.some(function(t){return!!~i.indexOf(t)})&&this.refresh()},t.getInstance=function(){return this.instance_||(this.instance_=new t),this.instance_},t.instance_=null,t}(),Fi=function(t,e){for(var i=0,r=Object.keys(e);i<r.length;i++){var n=r[i];Object.defineProperty(t,n,{value:e[n],enumerable:!1,writable:!1,configurable:!0})}return t},$i=function(t){return t&&t.ownerDocument&&t.ownerDocument.defaultView||Vi},Xi=Qi(0,0,0,0);function Yi(t){return parseFloat(t)||0}function Gi(t){for(var e=[],i=1;i<arguments.length;i++)e[i-1]=arguments[i];return e.reduce(function(e,i){return e+Yi(t["border-"+i+"-width"])},0)}function Ki(t){var e=t.clientWidth,i=t.clientHeight;if(!e&&!i)return Xi;var r=$i(t).getComputedStyle(t),n=function(t){for(var e={},i=0,r=["top","right","bottom","left"];i<r.length;i++){var n=r[i],s=t["padding-"+n];e[n]=Yi(s)}return e}(r),s=n.left+n.right,o=n.top+n.bottom,a=Yi(r.width),l=Yi(r.height);if("border-box"===r.boxSizing&&(Math.round(a+s)!==e&&(a-=Gi(r,"left","right")+s),Math.round(l+o)!==i&&(l-=Gi(r,"top","bottom")+o)),!function(t){return t===$i(t).document.documentElement}(t)){var c=Math.round(a+s)-e,u=Math.round(l+o)-i;1!==Math.abs(c)&&(a-=c),1!==Math.abs(u)&&(l-=u)}return Qi(n.left,n.top,a,l)}var Ui="undefined"!=typeof SVGGraphicsElement?function(t){return t instanceof $i(t).SVGGraphicsElement}:function(t){return t instanceof $i(t).SVGElement&&"function"==typeof t.getBBox};function Ji(t){return Ci?Ui(t)?function(t){var e=t.getBBox();return Qi(0,0,e.width,e.height)}(t):Ki(t):Xi}function Qi(t,e,i,r){return{x:t,y:e,width:i,height:r}}var Zi=function(){function t(t){this.broadcastWidth=0,this.broadcastHeight=0,this.contentRect_=Qi(0,0,0,0),this.target=t}return t.prototype.isActive=function(){var t=Ji(this.target);return this.contentRect_=t,t.width!==this.broadcastWidth||t.height!==this.broadcastHeight},t.prototype.broadcastRect=function(){var t=this.contentRect_;return this.broadcastWidth=t.width,this.broadcastHeight=t.height,t},t}(),tr=function(){return function(t,e){var i,r,n,s,o,a,l,c=(r=(i=e).x,n=i.y,s=i.width,o=i.height,a="undefined"!=typeof DOMRectReadOnly?DOMRectReadOnly:Object,l=Object.create(a.prototype),Fi(l,{x:r,y:n,width:s,height:o,top:n,right:r+s,bottom:o+n,left:r}),l);Fi(this,{target:t,contentRect:c})}}(),er=function(){function t(t,e,i){if(this.activeObservations_=[],this.observations_=new zi,"function"!=typeof t)throw new TypeError("The callback provided as parameter 1 is not a function.");this.callback_=t,this.controller_=e,this.callbackCtx_=i}return t.prototype.observe=function(t){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if("undefined"!=typeof Element&&Element instanceof Object){if(!(t instanceof $i(t).Element))throw new TypeError('parameter 1 is not of type "Element".');var e=this.observations_;e.has(t)||(e.set(t,new Zi(t)),this.controller_.addObserver(this),this.controller_.refresh())}},t.prototype.unobserve=function(t){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if("undefined"!=typeof Element&&Element instanceof Object){if(!(t instanceof $i(t).Element))throw new TypeError('parameter 1 is not of type "Element".');var e=this.observations_;e.has(t)&&(e.delete(t),e.size||this.controller_.removeObserver(this))}},t.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},t.prototype.gatherActive=function(){var t=this;this.clearActive(),this.observations_.forEach(function(e){e.isActive()&&t.activeObservations_.push(e)})},t.prototype.broadcastActive=function(){if(this.hasActive()){var t=this.callbackCtx_,e=this.activeObservations_.map(function(t){return new tr(t.target,t.broadcastRect())});this.callback_.call(t,e,t),this.clearActive()}},t.prototype.clearActive=function(){this.activeObservations_.splice(0)},t.prototype.hasActive=function(){return this.activeObservations_.length>0},t}(),ir="undefined"!=typeof WeakMap?new WeakMap:new zi,rr=function(){return function t(e){if(!(this instanceof t))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var i=qi.getInstance(),r=new er(e,i,this);ir.set(this,r)}}();["observe","unobserve","disconnect"].forEach(function(t){rr.prototype[t]=function(){var e;return(e=ir.get(this))[t].apply(e,arguments)}});var nr=void 0!==Vi.ResizeObserver?Vi.ResizeObserver:rr,sr=!("undefined"==typeof window||!window.document||!window.document.createElement),or=function(){function t(e,i){var r=this;this.onScroll=function(){r.scrollXTicking||(window.requestAnimationFrame(r.scrollX),r.scrollXTicking=!0),r.scrollYTicking||(window.requestAnimationFrame(r.scrollY),r.scrollYTicking=!0)},this.scrollX=function(){r.axis.x.isOverflowing&&(r.showScrollbar("x"),r.positionScrollbar("x")),r.scrollXTicking=!1},this.scrollY=function(){r.axis.y.isOverflowing&&(r.showScrollbar("y"),r.positionScrollbar("y")),r.scrollYTicking=!1},this.onMouseEnter=function(){r.showScrollbar("x"),r.showScrollbar("y")},this.onMouseMove=function(t){r.mouseX=t.clientX,r.mouseY=t.clientY,(r.axis.x.isOverflowing||r.axis.x.forceVisible)&&r.onMouseMoveForAxis("x"),(r.axis.y.isOverflowing||r.axis.y.forceVisible)&&r.onMouseMoveForAxis("y")},this.onMouseLeave=function(){r.onMouseMove.cancel(),(r.axis.x.isOverflowing||r.axis.x.forceVisible)&&r.onMouseLeaveForAxis("x"),(r.axis.y.isOverflowing||r.axis.y.forceVisible)&&r.onMouseLeaveForAxis("y"),r.mouseX=-1,r.mouseY=-1},this.onWindowResize=function(){r.scrollbarWidth=Ee(),r.hideNativeScrollbar()},this.hideScrollbars=function(){r.axis.x.track.rect=r.axis.x.track.el.getBoundingClientRect(),r.axis.y.track.rect=r.axis.y.track.el.getBoundingClientRect(),r.isWithinBounds(r.axis.y.track.rect)||(r.axis.y.scrollbar.el.classList.remove(r.classNames.visible),r.axis.y.isVisible=!1),r.isWithinBounds(r.axis.x.track.rect)||(r.axis.x.scrollbar.el.classList.remove(r.classNames.visible),r.axis.x.isVisible=!1)},this.onPointerEvent=function(t){var e,i;r.axis.x.scrollbar.rect=r.axis.x.scrollbar.el.getBoundingClientRect(),r.axis.y.scrollbar.rect=r.axis.y.scrollbar.el.getBoundingClientRect(),(r.axis.x.isOverflowing||r.axis.x.forceVisible)&&(i=r.isWithinBounds(r.axis.x.scrollbar.rect)),(r.axis.y.isOverflowing||r.axis.y.forceVisible)&&(e=r.isWithinBounds(r.axis.y.scrollbar.rect)),(e||i)&&(t.preventDefault(),t.stopPropagation(),"mousedown"===t.type&&(e&&r.onDragStart(t,"y"),i&&r.onDragStart(t,"x")))},this.drag=function(e){var i=r.axis[r.draggedAxis].track,n=i.rect[r.axis[r.draggedAxis].sizeAttr],s=r.axis[r.draggedAxis].scrollbar;e.preventDefault(),e.stopPropagation();var o=(("y"===r.draggedAxis?e.pageY:e.pageX)-i.rect[r.axis[r.draggedAxis].offsetAttr]-r.axis[r.draggedAxis].dragOffset)/i.rect[r.axis[r.draggedAxis].sizeAttr]*r.contentWrapperEl[r.axis[r.draggedAxis].scrollSizeAttr];"x"===r.draggedAxis&&(o=r.isRtl&&t.getRtlHelpers().isRtlScrollbarInverted?o-(n+s.size):o,o=r.isRtl&&t.getRtlHelpers().isRtlScrollingInverted?-o:o),r.contentWrapperEl[r.axis[r.draggedAxis].scrollOffsetAttr]=o},this.onEndDrag=function(t){t.preventDefault(),t.stopPropagation(),r.el.classList.remove(r.classNames.dragging),document.removeEventListener("mousemove",r.drag),document.removeEventListener("mouseup",r.onEndDrag)},this.el=e,this.flashTimeout,this.contentEl,this.contentWrapperEl,this.offsetEl,this.maskEl,this.globalObserver,this.mutationObserver,this.resizeObserver,this.scrollbarWidth,this.minScrollbarWidth=20,this.options=Object.assign({},t.defaultOptions,i),this.classNames=Object.assign({},t.defaultOptions.classNames,this.options.classNames),this.isRtl,this.axis={x:{scrollOffsetAttr:"scrollLeft",sizeAttr:"width",scrollSizeAttr:"scrollWidth",offsetAttr:"left",overflowAttr:"overflowX",dragOffset:0,isOverflowing:!0,isVisible:!1,forceVisible:!1,track:{},scrollbar:{}},y:{scrollOffsetAttr:"scrollTop",sizeAttr:"height",scrollSizeAttr:"scrollHeight",offsetAttr:"top",overflowAttr:"overflowY",dragOffset:0,isOverflowing:!0,isVisible:!1,forceVisible:!1,track:{},scrollbar:{}}},this.el.SimpleBar||(this.recalculate=Ie(this.recalculate.bind(this),64),this.onMouseMove=Ie(this.onMouseMove.bind(this),64),this.hideScrollbars=ni(this.hideScrollbars.bind(this),this.options.timeout),this.onWindowResize=ni(this.onWindowResize.bind(this),64,{leading:!0}),t.getRtlHelpers=Ni(t.getRtlHelpers),this.getContentElement=this.getScrollElement,this.init())}t.getRtlHelpers=function(){var e=document.createElement("div");e.innerHTML='<div class="hs-dummy-scrollbar-size"><div style="height: 200%; width: 200%; margin: 10px 0;"></div></div>';var i=e.firstElementChild;document.body.appendChild(i);var r=i.firstElementChild;i.scrollLeft=0;var n=t.getOffset(i),s=t.getOffset(r);i.scrollLeft=999;var o=t.getOffset(r);return{isRtlScrollingInverted:n.left!==s.left&&s.left-o.left!=0,isRtlScrollbarInverted:n.left!==s.left}},t.initHtmlApi=function(){this.initDOMLoadedElements=this.initDOMLoadedElements.bind(this),"undefined"!=typeof MutationObserver&&(this.globalObserver=new MutationObserver(function(e){e.forEach(function(e){Array.prototype.forEach.call(e.addedNodes,function(e){1===e.nodeType&&(e.dataset.simplebar?!e.SimpleBar&&new t(e,t.getElOptions(e)):Array.prototype.forEach.call(e.querySelectorAll("[data-simplebar]"),function(e){!e.SimpleBar&&new t(e,t.getElOptions(e))}))}),Array.prototype.forEach.call(e.removedNodes,function(t){1===t.nodeType&&(t.dataset.simplebar&&"init"!==t.dataset.simplebar?t.SimpleBar&&t.SimpleBar.unMount():Array.prototype.forEach.call(t.querySelectorAll("[data-simplebar]"),function(t){t.SimpleBar&&t.SimpleBar.unMount()}))})})}),this.globalObserver.observe(document,{childList:!0,subtree:!0})),"complete"===document.readyState||"loading"!==document.readyState&&!document.documentElement.doScroll?window.setTimeout(this.initDOMLoadedElements):(document.addEventListener("DOMContentLoaded",this.initDOMLoadedElements),window.addEventListener("load",this.initDOMLoadedElements))},t.getElOptions=function(t){return Array.prototype.reduce.call(t.attributes,function(t,e){var i=e.name.match(/data-simplebar-(.+)/);if(i){var r=i[1].replace(/\W+(.)/g,function(t,e){return e.toUpperCase()});switch(e.value){case"true":t[r]=!0;break;case"false":t[r]=!1;break;case void 0:t[r]=!0;break;default:t[r]=e.value}}return t},{})},t.removeObserver=function(){this.globalObserver.disconnect()},t.initDOMLoadedElements=function(){document.removeEventListener("DOMContentLoaded",this.initDOMLoadedElements),window.removeEventListener("load",this.initDOMLoadedElements),Array.prototype.forEach.call(document.querySelectorAll("[data-simplebar]"),function(e){e.SimpleBar||new t(e,t.getElOptions(e))})},t.getOffset=function(t){var e=t.getBoundingClientRect();return{top:e.top+(window.pageYOffset||document.documentElement.scrollTop),left:e.left+(window.pageXOffset||document.documentElement.scrollLeft)}};var e=t.prototype;return e.init=function(){this.el.SimpleBar=this,sr&&(this.initDOM(),this.scrollbarWidth=Ee(),this.recalculate(),this.initListeners())},e.initDOM=function(){var t=this;if(Array.prototype.filter.call(this.el.children,function(e){return e.classList.contains(t.classNames.wrapper)}).length)this.wrapperEl=this.el.querySelector("."+this.classNames.wrapper),this.contentWrapperEl=this.el.querySelector("."+this.classNames.contentWrapper),this.offsetEl=this.el.querySelector("."+this.classNames.offset),this.maskEl=this.el.querySelector("."+this.classNames.mask),this.contentEl=this.el.querySelector("."+this.classNames.contentEl),this.placeholderEl=this.el.querySelector("."+this.classNames.placeholder),this.heightAutoObserverWrapperEl=this.el.querySelector("."+this.classNames.heightAutoObserverWrapperEl),this.heightAutoObserverEl=this.el.querySelector("."+this.classNames.heightAutoObserverEl),this.axis.x.track.el=this.el.querySelector("."+this.classNames.track+"."+this.classNames.horizontal),this.axis.y.track.el=this.el.querySelector("."+this.classNames.track+"."+this.classNames.vertical);else{for(this.wrapperEl=document.createElement("div"),this.contentWrapperEl=document.createElement("div"),this.offsetEl=document.createElement("div"),this.maskEl=document.createElement("div"),this.contentEl=document.createElement("div"),this.placeholderEl=document.createElement("div"),this.heightAutoObserverWrapperEl=document.createElement("div"),this.heightAutoObserverEl=document.createElement("div"),this.wrapperEl.classList.add(this.classNames.wrapper),this.contentWrapperEl.classList.add(this.classNames.contentWrapper),this.offsetEl.classList.add(this.classNames.offset),this.maskEl.classList.add(this.classNames.mask),this.contentEl.classList.add(this.classNames.contentEl),this.placeholderEl.classList.add(this.classNames.placeholder),this.heightAutoObserverWrapperEl.classList.add(this.classNames.heightAutoObserverWrapperEl),this.heightAutoObserverEl.classList.add(this.classNames.heightAutoObserverEl);this.el.firstChild;)this.contentEl.appendChild(this.el.firstChild);this.contentWrapperEl.appendChild(this.contentEl),this.offsetEl.appendChild(this.contentWrapperEl),this.maskEl.appendChild(this.offsetEl),this.heightAutoObserverWrapperEl.appendChild(this.heightAutoObserverEl),this.wrapperEl.appendChild(this.heightAutoObserverWrapperEl),this.wrapperEl.appendChild(this.maskEl),this.wrapperEl.appendChild(this.placeholderEl),this.el.appendChild(this.wrapperEl)}if(!this.axis.x.track.el||!this.axis.y.track.el){var e=document.createElement("div"),i=document.createElement("div");e.classList.add(this.classNames.track),i.classList.add(this.classNames.scrollbar),e.appendChild(i),this.axis.x.track.el=e.cloneNode(!0),this.axis.x.track.el.classList.add(this.classNames.horizontal),this.axis.y.track.el=e.cloneNode(!0),this.axis.y.track.el.classList.add(this.classNames.vertical),this.el.appendChild(this.axis.x.track.el),this.el.appendChild(this.axis.y.track.el)}this.axis.x.scrollbar.el=this.axis.x.track.el.querySelector("."+this.classNames.scrollbar),this.axis.y.scrollbar.el=this.axis.y.track.el.querySelector("."+this.classNames.scrollbar),this.options.autoHide||(this.axis.x.scrollbar.el.classList.add(this.classNames.visible),this.axis.y.scrollbar.el.classList.add(this.classNames.visible)),this.el.setAttribute("data-simplebar","init")},e.initListeners=function(){var t=this;this.options.autoHide&&this.el.addEventListener("mouseenter",this.onMouseEnter),["mousedown","click","dblclick","touchstart","touchend","touchmove"].forEach(function(e){t.el.addEventListener(e,t.onPointerEvent,!0)}),this.el.addEventListener("mousemove",this.onMouseMove),this.el.addEventListener("mouseleave",this.onMouseLeave),this.contentWrapperEl.addEventListener("scroll",this.onScroll),window.addEventListener("resize",this.onWindowResize),this.resizeObserver=new nr(this.recalculate),this.resizeObserver.observe(this.el),this.resizeObserver.observe(this.contentEl)},e.recalculate=function(){var t=this.heightAutoObserverEl.offsetHeight<=1,e=this.heightAutoObserverEl.offsetWidth<=1;this.elStyles=window.getComputedStyle(this.el),this.isRtl="rtl"===this.elStyles.direction,this.contentEl.style.padding=this.elStyles.paddingTop+" "+this.elStyles.paddingRight+" "+this.elStyles.paddingBottom+" "+this.elStyles.paddingLeft,this.wrapperEl.style.margin="-"+this.elStyles.paddingTop+" -"+this.elStyles.paddingRight+" -"+this.elStyles.paddingBottom+" -"+this.elStyles.paddingLeft,this.contentWrapperEl.style.height=t?"auto":"100%",this.placeholderEl.style.width=e?this.contentEl.offsetWidth+"px":"auto",this.placeholderEl.style.height=this.contentEl.scrollHeight+"px",this.axis.x.isOverflowing=this.contentWrapperEl.scrollWidth>this.contentWrapperEl.offsetWidth,this.axis.y.isOverflowing=this.contentWrapperEl.scrollHeight>this.contentWrapperEl.offsetHeight,this.axis.x.isOverflowing="hidden"!==this.elStyles.overflowX&&this.axis.x.isOverflowing,this.axis.y.isOverflowing="hidden"!==this.elStyles.overflowY&&this.axis.y.isOverflowing,this.axis.x.forceVisible="x"===this.options.forceVisible||!0===this.options.forceVisible,this.axis.y.forceVisible="y"===this.options.forceVisible||!0===this.options.forceVisible,this.hideNativeScrollbar(),this.axis.x.track.rect=this.axis.x.track.el.getBoundingClientRect(),this.axis.y.track.rect=this.axis.y.track.el.getBoundingClientRect(),this.axis.x.scrollbar.size=this.getScrollbarSize("x"),this.axis.y.scrollbar.size=this.getScrollbarSize("y"),this.axis.x.scrollbar.el.style.width=this.axis.x.scrollbar.size+"px",this.axis.y.scrollbar.el.style.height=this.axis.y.scrollbar.size+"px",this.positionScrollbar("x"),this.positionScrollbar("y"),this.toggleTrackVisibility("x"),this.toggleTrackVisibility("y")},e.getScrollbarSize=function(t){void 0===t&&(t="y");var e,i=this.scrollbarWidth?this.contentWrapperEl[this.axis[t].scrollSizeAttr]:this.contentWrapperEl[this.axis[t].scrollSizeAttr]-this.minScrollbarWidth,r=this.axis[t].track.rect[this.axis[t].sizeAttr];if(this.axis[t].isOverflowing){var n=r/i;return e=Math.max(~~(n*r),this.options.scrollbarMinSize),this.options.scrollbarMaxSize&&(e=Math.min(e,this.options.scrollbarMaxSize)),e}},e.positionScrollbar=function(e){void 0===e&&(e="y");var i=this.contentWrapperEl[this.axis[e].scrollSizeAttr],r=this.axis[e].track.rect[this.axis[e].sizeAttr],n=parseInt(this.elStyles[this.axis[e].sizeAttr],10),s=this.axis[e].scrollbar,o=this.contentWrapperEl[this.axis[e].scrollOffsetAttr],a=(o="x"===e&&this.isRtl&&t.getRtlHelpers().isRtlScrollingInverted?-o:o)/(i-n),l=~~((r-s.size)*a);l="x"===e&&this.isRtl&&t.getRtlHelpers().isRtlScrollbarInverted?l+(r-s.size):l,s.el.style.transform="x"===e?"translate3d("+l+"px, 0, 0)":"translate3d(0, "+l+"px, 0)"},e.toggleTrackVisibility=function(t){void 0===t&&(t="y");var e=this.axis[t].track.el,i=this.axis[t].scrollbar.el;this.axis[t].isOverflowing||this.axis[t].forceVisible?(e.style.visibility="visible",this.contentWrapperEl.style[this.axis[t].overflowAttr]="scroll"):(e.style.visibility="hidden",this.contentWrapperEl.style[this.axis[t].overflowAttr]="hidden"),this.axis[t].isOverflowing?i.style.display="block":i.style.display="none"},e.hideNativeScrollbar=function(){if(this.offsetEl.style[this.isRtl?"left":"right"]=this.axis.y.isOverflowing||this.axis.y.forceVisible?"-"+(this.scrollbarWidth||this.minScrollbarWidth)+"px":0,this.offsetEl.style.bottom=this.axis.x.isOverflowing||this.axis.x.forceVisible?"-"+(this.scrollbarWidth||this.minScrollbarWidth)+"px":0,!this.scrollbarWidth){var t=[this.isRtl?"paddingLeft":"paddingRight"];this.contentWrapperEl.style[t]=this.axis.y.isOverflowing||this.axis.y.forceVisible?this.minScrollbarWidth+"px":0,this.contentWrapperEl.style.paddingBottom=this.axis.x.isOverflowing||this.axis.x.forceVisible?this.minScrollbarWidth+"px":0}},e.onMouseMoveForAxis=function(t){void 0===t&&(t="y"),this.axis[t].track.rect=this.axis[t].track.el.getBoundingClientRect(),this.axis[t].scrollbar.rect=this.axis[t].scrollbar.el.getBoundingClientRect(),this.isWithinBounds(this.axis[t].scrollbar.rect)?this.axis[t].scrollbar.el.classList.add(this.classNames.hover):this.axis[t].scrollbar.el.classList.remove(this.classNames.hover),this.isWithinBounds(this.axis[t].track.rect)?(this.showScrollbar(t),this.axis[t].track.el.classList.add(this.classNames.hover)):this.axis[t].track.el.classList.remove(this.classNames.hover)},e.onMouseLeaveForAxis=function(t){void 0===t&&(t="y"),this.axis[t].track.el.classList.remove(this.classNames.hover),this.axis[t].scrollbar.el.classList.remove(this.classNames.hover)},e.showScrollbar=function(t){void 0===t&&(t="y");var e=this.axis[t].scrollbar.el;this.axis[t].isVisible||(e.classList.add(this.classNames.visible),this.axis[t].isVisible=!0),this.options.autoHide&&this.hideScrollbars()},e.onDragStart=function(t,e){void 0===e&&(e="y");var i=this.axis[e].scrollbar.el,r="y"===e?t.pageY:t.pageX;this.axis[e].dragOffset=r-i.getBoundingClientRect()[this.axis[e].offsetAttr],this.draggedAxis=e,this.el.classList.add(this.classNames.dragging),document.addEventListener("mousemove",this.drag),document.addEventListener("mouseup",this.onEndDrag)},e.getScrollElement=function(){return this.contentEl},e.removeListeners=function(){var t=this;this.options.autoHide&&this.el.removeEventListener("mouseenter",this.onMouseEnter),["mousedown","click","dblclick","touchstart","touchend","touchmove"].forEach(function(e){t.el.removeEventListener(e,t.onPointerEvent)}),this.el.removeEventListener("mousemove",this.onMouseMove),this.el.removeEventListener("mouseleave",this.onMouseLeave),this.contentWrapperEl.removeEventListener("scroll",this.onScroll),window.removeEventListener("resize",this.onWindowResize),this.mutationObserver&&this.mutationObserver.disconnect(),this.resizeObserver.disconnect(),this.recalculate.cancel(),this.onMouseMove.cancel(),this.hideScrollbars.cancel(),this.onWindowResize.cancel()},e.unMount=function(){this.removeListeners(),this.el.SimpleBar=null},e.isChildNode=function(t){return null!==t&&(t===this.el||this.isChildNode(t.parentNode))},e.isWithinBounds=function(t){return this.mouseX>=t.left&&this.mouseX<=t.left+t.width&&this.mouseY>=t.top&&this.mouseY<=t.top+t.height},t}();return or.defaultOptions={autoHide:!0,forceVisible:!1,classNames:{contentEl:"simplebar-content",contentWrapper:"simplebar-content-wrapper",offset:"simplebar-offset",mask:"simplebar-mask",wrapper:"simplebar-wrapper",placeholder:"simplebar-placeholder",scrollbar:"simplebar-scrollbar",track:"simplebar-track",heightAutoObserverWrapperEl:"simplebar-height-auto-observer-wrapper",heightAutoObserverEl:"simplebar-height-auto-observer",visible:"simplebar-visible",horizontal:"simplebar-horizontal",vertical:"simplebar-vertical",hover:"simplebar-hover",dragging:"simplebar-dragging"},scrollbarMinSize:25,scrollbarMaxSize:0,timeout:1e3},sr&&or.initHtmlApi(),or}); diff --git a/themes/yunohost-docs/languages.yaml b/themes/yunohost-docs/languages.yaml new file mode 100644 index 00000000..77f045b0 --- /dev/null +++ b/themes/yunohost-docs/languages.yaml @@ -0,0 +1,44 @@ +en: + THEME_LEARN4_GITHUB_EDIT: Edit + THEME_LEARN4_GITHUB_NOTE: "Found errors? Think you can improve this documentation? Simply click the <strong><i class=\"fa fa-pencil-square\"></i> Edit</strong> link at the top of the page, and then the <strong><i class=\"fa fa-pencil\"></i></strong> icon on Github to suggest changes." + THEME_LEARN4_CLEAR_HISTORY: Clear History + THEME_LEARN4_BUILT_WITH_GRAV: Built with <a href="http://getgrav.org">Grav</a> - The Modern Flat File CMS + THEME_LEARN4_SEARCH_DOCUMENTATION: Search... + THEME_LEARN4_SEARCH_ADVANCED: Advanced search +cn: + THEME_LEARN4_GITHUB_NOTE: "发现错误?请帮忙改进,谢谢! Simply click the <strong><i class=\"fa fa-pencil-square\"></i> Edit</strong> link at the top of the page, and then the <strong><i class=\"fa fa-pencil\"></i></strong> icon on Github to suggest changes." + THEME_LEARN4_CLEAR_HISTORY: 清除历史 + THEME_LEARN4_BUILT_WITH_GRAV: Built with <a href="http://getgrav.org">Grav</a> - The Modern Flat File CMS + THEME_LEARN4_SEARCH_DOCUMENTATION: 搜索文档 +cs: + THEME_LEARN4_GITHUB_NOTE: "Našli jste chybu? Myslíte, že můžete vylepšit tuto dokumentaci? Simply click the <strong><i class=\"fa fa-pencil-square\"></i> Edit</strong> link at the top of the page, and then the <strong><i class=\"fa fa-pencil\"></i></strong> icon on Github to suggest changes." + THEME_LEARN4_CLEAR_HISTORY: Smazat historii + THEME_LEARN4_BUILT_WITH_GRAV: Postaveno na <a href="http://getgrav.org">Grav</a> - Moderní správce obsahu pomocí souborů prostých textů + THEME_LEARN4_SEARCH_DOCUMENTATION: Vyhledat v dokumentaci +de: + THEME_LEARN4_GITHUB_NOTE: "Fehler gefunden? Möchten Sie diese Seite verbessern? Simply click the <strong><i class=\"fa fa-pencil-square\"></i> Edit</strong> link at the top of the page, and then the <strong><i class=\"fa fa-pencil\"></i></strong> icon on Github to suggest changes." + THEME_LEARN4_CLEAR_HISTORY: Verlauf löschen + THEME_LEARN4_BUILT_WITH_GRAV: Seite erstellt mit <a href="http://getgrav.org">Grav</a> - The Modern Flat File CMS + THEME_LEARN4_SEARCH_DOCUMENTATION: Dokumentation durchsuchen +es: + THEME_LEARN4_GITHUB_NOTE: "¿Encontraste errores? ¿Crees que puedes mejorar esta documentación? Simply click the <strong><i class=\"fa fa-pencil-square\"></i> Edit</strong> link at the top of the page, and then the <strong><i class=\"fa fa-pencil\"></i></strong> icon on Github to suggest changes." + THEME_LEARN4_CLEAR_HISTORY: Limpiar historial + THEME_LEARN4_BUILT_WITH_GRAV: Hecho con <a href="http://getgrav.org">Grav</a> - El CMS moderno de archivos planos + THEME_LEARN4_SEARCH_DOCUMENTATION: Buscar en la documentación +fr: + THEME_LEARN4_GITHUB_EDIT: Éditer + THEME_LEARN4_GITHUB_NOTE: "Vous avez découvert des erreurs ? Vous pensez pouvoir améliorer cette documentation ? Cliquez sur <strong><i class=\"fa fa-pencil-square\"></i> Éditer</strong> en haut de la page, puis sur l'icone <strong><i class=\"fa fa-pencil\"></i></strong> crayon sur Github pour proposer vos changements." + THEME_LEARN4_CLEAR_HISTORY: Effacer l'historique + THEME_LEARN4_BUILT_WITH_GRAV: Créé avec <a href="http://getgrav.org">Grav</a> - Le CMS moderne sans base de données + THEME_LEARN4_SEARCH_DOCUMENTATION: Recherche... + THEME_LEARN4_SEARCH_ADVANCED: Recherche avancée +it: + THEME_LEARN4_GITHUB_NOTE: "Hai trovato degli errori? Pensi di poter migliorare questa documentazione? Simply click the <strong><i class=\"fa fa-pencil-square\"></i> Edit</strong> link at the top of the page, and then the <strong><i class=\"fa fa-pencil\"></i></strong> icon on Github to suggest changes." + THEME_LEARN4_CLEAR_HISTORY: Cancella Cronologia + THEME_LEARN4_BUILT_WITH_GRAV: Built with <a href="http://getgrav.org">Grav</a> - The Modern Flat File CMS + THEME_LEARN4_SEARCH_DOCUMENTATION: Cerca nella Documentatione +ru: + THEME_LEARN4_GITHUB_NOTE: "Нашли ошибки? Думаете, что можете улучшить документацию? Simply click the <strong><i class=\"fa fa-pencil-square\"></i> Edit</strong> link at the top of the page, and then the <strong><i class=\"fa fa-pencil\"></i></strong> icon on Github to suggest changes." + THEME_LEARN4_CLEAR_HISTORY: Очистить историю + THEME_LEARN4_BUILT_WITH_GRAV: Сделано на <a href="http://getgrav.org">Grav</a> — современной файловой CMS + THEME_LEARN4_SEARCH_DOCUMENTATION: Поиск по документации diff --git a/themes/yunohost-docs/screenshot.jpg b/themes/yunohost-docs/screenshot.jpg new file mode 100644 index 00000000..5205ca51 Binary files /dev/null and b/themes/yunohost-docs/screenshot.jpg differ diff --git a/themes/yunohost-docs/scss/custom.scss b/themes/yunohost-docs/scss/custom.scss new file mode 100644 index 00000000..565166eb --- /dev/null +++ b/themes/yunohost-docs/scss/custom.scss @@ -0,0 +1,11 @@ +/*######################################## +########################################## + PLEASE DO NOT MODIFY THE CSS FILE +IF YOU WANT TO CHANGE THE CSS, DO IT IN THE + SCSS FILES AND "COMPILE" THEM: + https://sass-lang.com/guide +########################################## +########################################*/ +@import "theme/light/custom"; +@import "theme/dark/custom"; +@import "theme/global"; diff --git a/themes/yunohost-docs/scss/theme/_global.scss b/themes/yunohost-docs/scss/theme/_global.scss new file mode 100644 index 00000000..cb38b708 --- /dev/null +++ b/themes/yunohost-docs/scss/theme/_global.scss @@ -0,0 +1,303 @@ +.learn-sidebar:before { + background: none !important; +} + +#chapter { + max-width: 80%; +} + +/* Images helper classes */ +img.inline { + display: inline; + margin: 5px 15px 5px 5px; + vertical-align: middle; +} + +img.center { + display: block; + margin: 5px 15px 5px 5px; + margin-left: auto; + margin-right: auto; +} + +td img { + margin: 0.2rem auto; +} + +/* Figures and caption */ +figure img { + margin: auto; +} + +figure figcaption { + font-style: italic; +} + +/* List spacing */ +ul li, +ol li { + margin-top: 0; +} + +ul, +ol { + margin-bottom: 0; +} + +li p { + margin: inherit; +} + +/* Paragraphs */ +p { + margin: 0 0 1rem; +} + +.notices p { + margin: 0 0 0 0.5rem; +} + +/* Flex */ +.flex-container { + display: flex; + justify-content: space-around; + flex-wrap: wrap; +} + +.flex-child { + display: inline-flex; + text-align: center; +} + +.nomargin * { + margin: 0px auto; +} + +/* Fonts and headings */ + +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: "Source Sans Pro", "Metropolis", "Helvetica Neue", sans-serif; + margin-top: 1rem; + margin-bottom: 1rem; +} + +.simplebar-content h5 .fa { + font-size: 0.75em; + margin-right: 0.2em; + margin-left: 0.4em; +} + +.simplebar-content h5 { + letter-spacing: 0em; + border-top: 1px solid; + padding: 0.8em 0; + margin: 0; +} + +@font-face { + font-family: "Source Sans Pro"; + src: url("../fonts/SourceSansPro-Bold-webfont.eot"); + src: url("../fonts/SourceSansPro-Bold-webfont.eot?#iefix") format("embedded-opentype"), + url("../fonts/SourceSansPro-Bold-webfont.woff") format("woff"), + url("../fonts/SourceSansPro-Bold-webfont.ttf") format("truetype"), + url("../fonts/SourceSansPro-Bold-webfont.svg#fonts/SourceSansProBold") format("svg"); + font-weight: 700; + font-style: normal; +} + +/*================================================= + TOP BAR +=================================================*/ + +body #top-bar { + background: none; + border-bottom: none; +} + +body #top-bar #navigation > a, +body #top-bar #navigation > span { + border-left: none; +} + +body #top-bar .progress { + display: none; +} + +body #top-bar #navigation { + margin-left: auto; + margin-right: 0; +} + +/*================================================= + SIDE BAR +=================================================*/ + +body .off-canvas .learn-sidebar .learn-brand { + box-shadow: none; +} + +body .off-canvas .learn-sidebar .learn-nav ul li ul li.active > a { + background-color: rgba(0, 0, 0, 0.1); + border-left: 4px solid mediumturquoise; +} + +/*================================================= + SHORTCODE UI +=================================================*/ + +.tabs-wrapper.ui-theme-lite .tab { + background-color: inherit !important; +} + +/* +############################################################################### + Style sheet for the cards +############################################################################### +*/ + +.hardware.active { + box-shadow: 0 0 15px #bbb; + border-radius: 5px; +} + +.hardware-image #cards-list:after { + content: ""; + display: block; + clear: both; +} + +.hardware-image .card { + margin-bottom: 20px; + width: 270px; + float: left; + min-height: 1px; + margin-right: 10px; + margin-left: 10px; +} + +.hardware-image .card .panel-body > h3 { + margin-top: 0; + margin-bottom: 5px; + font-size: 1.2em; +} + +.hardware-image .card-desc { + height: 135px; + overflow: hidden; +} + +.hardware-image .card .btn-group { + width: 100%; + margin-left: 0px; +} +.hardware-image .card > .btn-group > .btn { + border-bottom: 0; +} +.hardware-image .card > .btn-group { + border-left: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; + margin-left: 0px; +} +.hardware-image .card-comment { + font-size: 0.8em; + margin-top: -5px; +} +.hardware-image .card > .annotations { + text-align: center; + font-size: small; +} +.hardware-image .card img { + margin: 1rem auto; +} + +.hardware-image .btn-group .btn.btn-info { + background-color: #5bc0de; + border-color: #46b8da; +} + +.hardware-image .btn-group .btn.btn-info:hover, +.btn.btn-info:focus { + background-color: #39b3d7; + border-color: #269abc; +} + +/*================================================= + App catalog +=================================================*/ + +#filter-app-icon, +#filter-app-cards { + padding: 6px 12px; + margin-right: -2px; + border: none; +} + +#filter-app-cards, +#app-cards-list { + width: 100%; +} + +#app-cards-list:after { + content: ""; + display: block; + clear: both; +} + +#app-cards-list .app-card { + margin-bottom: 30px; + width: 28%; + float: left; + min-height: 1px; + margin-right: 15px; + margin-left: 15px; + border-radius: 3px; + position: relative; + height: 230px; +} + +#app-cards-list .app-title { + margin-top: 0; + margin-bottom: 5px; + font-size: 1.2em; + font-weight: 700; + line-height: 1.1; + padding: 1rem 1rem; + padding-bottom: 0; +} + +#app-cards-list .app-title .label { + font-size: 0.5em; + display: inline-block; + vertical-align: middle; + padding: 0.5em 0.6em; + padding-bottom: 0.3em; +} + +#app-cards-list .app-descr { + height: 120px; + overflow: hidden; + padding: 0.2rem 1rem; +} + +#app-cards-list .app-footer { + width: 100%; + position: absolute; + bottom: 0; +} + +#app-cards-list .app-buttons { + width: 100%; +} + +#app-cards-list .app-buttons > .btn { + border: 0; + font-size: 0.9em; + line-height: 1.58; + -webkit-appearance: none; +} diff --git a/themes/yunohost-docs/scss/theme/dark/_custom.scss b/themes/yunohost-docs/scss/theme/dark/_custom.scss new file mode 100644 index 00000000..7731ea8d --- /dev/null +++ b/themes/yunohost-docs/scss/theme/dark/_custom.scss @@ -0,0 +1,304 @@ +/*! + * Dark Mode Theme + * + * Inspired by Louis Charette + * https://github.com/lcharette/website/blob/cc855a6eb29693613e5e4e1d589a17ba7faf4aa9/themes/quark-custom/css/darkMode.scss + */ + +body.dark-mode { + // Variables + $background-color: rgb(23, 27, 33); + $text-color: rgb(232, 233, 235); + $text-accent-color: white; + $text-darker-color: rgb(165, 169, 175); + $card-bg-color: rgb(17, 20, 24); + $border-color: rgb(63, 71, 85); + $link-color: rgb(114, 182, 236); + + $danger: rgb(113, 44, 44); + $warning: rgb(132, 88, 4); + $success: rgb(51, 87, 35); + + // Main body background + background-color: $background-color; + + ::selection { + background-color: $border-color; + } + + // Page wrapper + #body-wrapper, + #page-wrapper { + background-color: $background-color; + color: $text-color; + } + + // Darker blue for links + a { + color: $link-color; + } + + // Card, header and dropdown have darker background + .card, + #footer, + .dropmenu ul ul { + background-color: $card-bg-color !important; + } + + // Headers have whiter color + h1, + h2, + h3, + h4, + h5, + h6, + #header a { + color: $text-accent-color; + } + + // Labels are grey + .label.label-primary { + color: $text-accent-color; + background-color: $link-color; + } + .label.label-secondary { + color: $text-color; + background-color: $border-color; + } + + // Pagination border is slighly different than the text + .pagination li { + border-color: $border-color; + background: $card-bg-color; + } + + #sidebar-id { + background: $background-color; + } + // Sidebar menu use darker text color for focus + .menu, + .learn-brand, + .learn-nav { + color: $text-darker-color; + } + + .menu .menu-item > a:focus, + .menu .menu-item > a:hover, + #top-bar #navigation > a:hover { + background: $card-bg-color; + } + + #sidebar ul.related-pages li { + border-bottom-color: $border-color; + } + + // Form background + .form-input, + .search-input, + [data-grav-field="array"] input, + [data-grav-field="array"] textarea { + background: $card-bg-color; + } + + /*================================================= + Side Bar + =================================================*/ + // Change logo color + .off-canvas .learn-sidebar .learn-brand #logo path { + fill: $text-color !important; + } + + // Sidebar separator + .simplebar-content h5 { + border-top-color: $border-color; + } + + .off-canvas #sidebar-id { + border-right: 0.05rem solid $border-color; + } + + // Text in the sidebar during a search + .off-canvas .learn-sidebar .learn-nav ul.searched a, + .off-canvas .learn-sidebar .searchbox input { + color: $text-color; + } + + // Selected text in the sidebar + .off-canvas .learn-sidebar .learn-nav ul li.active > a, + // Placeholder of the searching bar + .off-canvas .learn-sidebar .searchbox ::placeholder { + color: $text-darker-color; + background-color: transparent; + } + + // Matching text in the sidebar + .off-canvas .learn-sidebar .learn-nav ul.searched .search-match a:hover, + .off-canvas .learn-sidebar .learn-nav ul.searched .search-match a { + color: $link-color; + } + + // Background for selected submenu in the navbar + .off-canvas .learn-sidebar .learn-nav ul.topics > li.active, + .off-canvas .learn-sidebar .learn-nav ul.topics > li.parent { + background-color: rgba(255, 255, 255, 0.1); + } + + // Icons + .off-canvas .learn-sidebar .learn-nav .read-icon, + .off-canvas .learn-sidebar .searchbox { + color: $text-color; + } + + // Language selector + .off-canvas .learn-sidebar .search-options .version-chooser select { + color: $text-color; + } + + // Default text color + .off-canvas .learn-sidebar a, + .off-canvas .learn-sidebar .learn-nav ul li a, + .off-canvas .learn-sidebar .learn-nav ul li a > i, + .off-canvas .learn-sidebar .learn-nav ul li a > span > b { + color: $text-color; + } + + .off-canvas .learn-sidebar a:hover { + color: $text-darker-color; + } + + /*================================================= + App catalog + =================================================*/ + + #filter-app-icon, + #filter-app-cards { + color: $text-color; + background-color: $card-bg-color; + } + + #app-cards-list .app-title { + color: $text-accent-color; + } + + #app-cards-list .app-buttons { + border-top: 0.05rem solid $card-bg-color; + } + + #app-cards-list .app-buttons > .btn-default { + color: $text-accent-color; + background-color: $border-color; + } + + #app-cards-list .app-buttons > .btn:first-child { + border-right: 0.1rem solid $card-bg-color; + } + + #app-cards-list .app-card { + border-color: $border-color; + } + + #app-cards-list .label { + color: black; + } + + /*================================================= + Hardware image + =================================================*/ + + .hardware-image .card { + background-color: $background-color !important; + border-color: $border-color; + } + + .hardware-image .btn-group .btn.btn-info { + color: $card-bg-color; + } + + .hardware-image .btn-group .btn.btn-info:hover, + .btn.btn-info:focus { + color: $card-bg-color; + } + + /*================================================= + Other + =================================================*/ + + // Html tables + table tbody tr:nth-of-type(2n + 1) { + background: $card-bg-color; + } + + table td, + table th { + border-bottom-color: $border-color; + } + + // Color utils + .danger { + background-color: $danger; + } + .warning { + background-color: $warning; + } + .success { + background-color: $success; + } + + .page-toc { + background-color: $card-bg-color; + } + + .page-toc li, + .page-toc li > a { + color: $text-accent-color; + } +} + +/*================================================= + Dark mode specific +=================================================*/ +body.dark-mode { + // Dim images + img { + filter: brightness(0.85) contrast(1.2); + } + + img#whitelogo { + background-color: unset; + padding: 10px; + } + + #ynhlogo { + filter: invert(1); + } + + .notices.yellow { + border-left-color: rgb(147, 91, 12); + background-color: rgb(49, 34, 11); + color: rgb(238, 160, 52); + } + + .notices.red { + border-left-color: rgb(137, 33, 30); + background-color: rgb(46, 11, 11); + color: rgb(219, 90, 86); + } + + .notices.blue, + .notices.note { + border-left-color: rgb(27, 110, 134); + background-color: rgb(19, 34, 42); + color: rgb(75, 185, 218); + } + + .notices.green { + border-left-color: rgb(52, 120, 52); + background-color: rgb(25, 44, 19); + color: rgb(122, 197, 122); + } + + code { + background: rgb(58, 58, 58); + color: rgb(236, 229, 173); + } +} diff --git a/themes/yunohost-docs/scss/theme/light/_custom.scss b/themes/yunohost-docs/scss/theme/light/_custom.scss new file mode 100644 index 00000000..6b4e7717 --- /dev/null +++ b/themes/yunohost-docs/scss/theme/light/_custom.scss @@ -0,0 +1,258 @@ +body.light-mode { + // Variables + $background-color: rgb(255, 255, 255); + $text-color: rgb(23, 27, 33); + $text-accent-color: rgb(36, 41, 49); + $text-darker-color: rgb(17, 20, 24); + $card-bg-color: rgb(240, 240, 240); + $border-color: rgb(221, 221, 221); + $link-color: rgb(0, 112, 211); + + $danger: rgb(242, 222, 222); + $warning: rgb(252, 248, 227); + $success: rgb(223, 240, 216); + + // Main body background + background-color: $background-color; + + ::selection { + background-color: $border-color; + } + // Page wrapper + #body-wrapper, + #page-wrapper { + background-color: $background-color; + color: $text-color; + } + + // Darker blue for links + a { + color: $link-color; + } + + // Card, header and dropdown have darker background + .card, + #footer, + .dropmenu ul ul { + background-color: $card-bg-color !important; + } + + // Headers have whiter color + h1, + h2, + h3, + h4, + h5, + h6, + #header a { + color: $text-accent-color; + } + + // Labels are grey + .label.label-primary { + color: $text-accent-color; + background-color: $link-color; + } + .label.label-secondary { + color: $text-color; + background-color: $border-color; + } + + // Pagination border is slighly different than the text + .pagination li { + border-color: $border-color; + background: $card-bg-color; + } + + #sidebar-id { + background: $background-color; + } + // Sidebar menu use darker text color for focus + .menu, + .learn-brand, + .learn-nav { + color: $text-darker-color; + } + + .menu .menu-item > a:focus, + .menu .menu-item > a:hover, + #top-bar #navigation > a:hover { + background: $card-bg-color; + } + + #sidebar ul.related-pages li { + border-bottom-color: $border-color; + } + + // Form background + .form-input, + .search-input, + [data-grav-field="array"] input, + [data-grav-field="array"] textarea { + background: $card-bg-color; + } + + /*================================================= + Side Bar + =================================================*/ + // Change logo color + .off-canvas .learn-sidebar .learn-brand #logo path { + fill: $text-color !important; + } + + // Sidebar separator + .simplebar-content h5 { + border-top-color: $border-color; + } + + .off-canvas #sidebar-id { + border-right: 0.05rem solid $border-color; + } + + // Text in the sidebar during a search + .off-canvas .learn-sidebar .learn-nav ul.searched a, + .off-canvas .learn-sidebar .searchbox input { + color: $text-color; + } + + // Selected text in the sidebar + .off-canvas .learn-sidebar .learn-nav ul li.active > a, + // Placeholder of the searching bar + .off-canvas .learn-sidebar .searchbox ::placeholder { + color: $text-darker-color; + background-color: transparent; + } + + // Matching text in the sidebar + .off-canvas .learn-sidebar .learn-nav ul.searched .search-match a:hover, + .off-canvas .learn-sidebar .learn-nav ul.searched .search-match a { + color: $link-color; + } + + // Background for selected submenu in the navbar + .off-canvas .learn-sidebar .learn-nav ul.topics > li.active, + .off-canvas .learn-sidebar .learn-nav ul.topics > li.parent { + background-color: rgba(0, 0, 0, 0.1); + } + + // Icons + .off-canvas .learn-sidebar .learn-nav .read-icon, + .off-canvas .learn-sidebar .searchbox { + color: $text-color; + } + + // Language selector + .off-canvas .learn-sidebar .search-options .version-chooser select { + color: $text-color; + } + + // Default text color + .off-canvas .learn-sidebar a, + .off-canvas .learn-sidebar .learn-nav ul li a, + .off-canvas .learn-sidebar .learn-nav ul li a > i, + .off-canvas .learn-sidebar .learn-nav ul li a > span > b { + color: $text-color; + } + + .off-canvas .learn-sidebar a:hover { + color: $text-darker-color; + } + + /*================================================= + App catalog + =================================================*/ + + #filter-app-icon, + #filter-app-cards { + color: $text-color; + background-color: $card-bg-color; + } + + #app-cards-list .app-title { + color: $text-accent-color; + } + + #app-cards-list .app-buttons { + border-top: 0.05rem solid $card-bg-color; + } + + #app-cards-list .app-buttons > .btn-default { + color: $text-accent-color; + background-color: $border-color; + } + + #app-cards-list .app-buttons > .btn:first-child { + border-right: 0.1rem solid $card-bg-color; + } + + #app-cards-list .app-card { + border-color: $border-color; + } + + #app-cards-list .label { + color: black; + } + + /*================================================= + Hardware image + =================================================*/ + + .hardware-image .card { + background-color: $background-color !important; + border-color: $border-color; + } + + .hardware-image .btn-group .btn.btn-info { + color: $card-bg-color; + } + + .hardware-image .btn-group .btn.btn-info:hover, + .btn.btn-info:focus { + color: $card-bg-color; + } + + /*================================================= + Other + =================================================*/ + + // Html tables + table tbody tr:nth-of-type(2n + 1) { + background: $card-bg-color; + } + + table td, + table th { + border-bottom-color: $border-color; + } + + // Color utils + .danger { + background-color: $danger; + } + .warning { + background-color: $warning; + } + .success { + background-color: $success; + } + + .page-toc { + background-color: $card-bg-color; + } + + .page-toc li, + .page-toc li > a { + color: $text-accent-color; + } +} + +/*================================================= + Light mode specific +=================================================*/ +body.light-mode { + /* Give a gray background to the white logo*/ + img#whitelogo { + background-color: gray; + padding: 10px; + } +} diff --git a/themes/yunohost-docs/templates/macros/macros.html.twig b/themes/yunohost-docs/templates/macros/macros.html.twig new file mode 100644 index 00000000..9102f785 --- /dev/null +++ b/themes/yunohost-docs/templates/macros/macros.html.twig @@ -0,0 +1,35 @@ +{% macro loop(page, parent_loop) %} + {% import _self as macros %} + {% if parent_loop|length > 0 %} + {% set data_level = parent_loop %} + {% else %} + {% set data_level = 0 %} + {% endif %} + {% for p in page.children.visible %} + {% set parent_page = p.activeChild ? ' parent' : '' %} + {% set current_page = p.active ? ' active' : '' %} + <li class="dd-item{{ parent_page }}{{ current_page }}" data-nav-id="{{ p.route }}"> + <a href="{{ p.url }}" {% if p.header.class %}class="{{ p.header.class }}"{% endif %}> + <i class="fa fa-check-square read-icon"></i> + <span><b>{% if data_level == 0 %}{{ loop.index }}. {% endif %}</b>{{ p.menu }}</span> + </a> + {% if p.children.count > 0 %} + <ul> + {{ macros.loop(p, parent_loop|default(0)+loop.index) }} + </ul> + {% endif %} + </li> + {% endfor %} +{% endmacro %} + +{% macro version(p) %} + {% set parent_page = p.activeChild ? ' parent' : '' %} + {% set current_page = p.active ? ' active' : '' %} + <h5 class="{{ parent_page }}{{ current_page }}"> + {% if p.activeChild or p.active %} + <a href="{{ p.url }}"><i class="fa fa-chevron-down fa-fw"></i>{{ p.menu }}</a> + {% else %} + <a href="{{ p.url }}"><i class="fa fa-plus fa-fw"></i>{{ p.menu }}</a> + {% endif %} + </h5> +{% endmacro %} diff --git a/themes/yunohost-docs/templates/partials/base.html.twig b/themes/yunohost-docs/templates/partials/base.html.twig new file mode 100644 index 00000000..b4989e8c --- /dev/null +++ b/themes/yunohost-docs/templates/partials/base.html.twig @@ -0,0 +1,81 @@ +{% set theme_config = attribute(config.themes, config.system.pages.theme) %} +{% set github_config = theme_var('github') %} +{% set grid_size = theme_var('grid-size') %} +{% set compress = theme_var('production-mode') ? '.min.css' : '.css' %} +<!DOCTYPE html> +<html lang="{{ grav.language.getActive ?: grav.config.site.default_lang }}"> +<head> +{% block head deferred %} + <meta charset="utf-8" /> + <title>{% if page.title %}{{ page.title|e('html') }} | {% endif %}{{ site.title|e('html') }}</title> + + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + {% include 'partials/metadata.html.twig' %} + + <link rel="icon" type="image/png" href="{{ url('theme://images/favicon.png') }}" /> + <link rel="canonical" href="{{ page.url(true, true) }}" /> +{% endblock head %} + +{% block stylesheets %} + {% do assets.addCss('theme://css/fork-awesome.min.css') %} + {% do assets.addCss('theme://css-compiled/spectre'~compress) %} + {% do assets.addCss('theme://css-compiled/theme'~compress) %} + {% do assets.addCss('theme://css/custom.css') %} +{% endblock %} + +{% block javascripts %} + {% do assets.addJs('jquery', 101) %} + {% do assets.addJs('theme://js/simplebar.min.js', { group:'bottom' }) %} + {% do assets.addJs('theme://js/learn4.js', { group:'bottom' }) %} + {% do assets.addJs('theme://js/darkMode.js', { group:'bottom' }) %} +{% endblock %} + +{% block assets deferred %} + {{ assets.css()|raw }} + {{ assets.js()|raw }} +{% endblock %} +</head> +<body id="top" class="{{ sidebar_color }} {% block body_classes %}{{ body_classes|trim }}{% endblock %}" data-url="{{ page.route }}"> + <div id="page-wrapper" class="off-canvas off-canvas-sidebar-show"> + <!-- off-screen toggle button --> + <a class="off-canvas-toggle btn btn-primary btn-action" href="#sidebar-id"> + <i class="fa fa-bars"></i> + </a> + + <div id="sidebar-id" class="learn-sidebar off-canvas-sidebar"> + <!-- off-screen sidebar --> + {% include 'partials/sidebar.html.twig' %} + </div> + + <a class="off-canvas-overlay" href="#close"></a> + + <div class="learn-content off-canvas-content"> + {% block topbar %} + {% include 'partials/topbar.html.twig' %} + {% endblock %} + + <section id="start"> + {% block body %} + <section id="body-wrapper" class="section"> + <section class="container {{ grid_size }}"> + {% block messages %} + {% include 'partials/messages.html.twig' ignore missing %} + {% endblock %} + {% block content %}{% endblock %} + </section> + </section> + {% endblock %} + </section> + + {% block footer %} + {% include 'partials/footer.html.twig' %} + {% endblock %} + </div> + </div> + + {% block bottom %} + {{ assets.js('bottom')|raw }} + {% endblock %} +</body> +</html> diff --git a/themes/yunohost-docs/templates/partials/darkmodeswitcher.html.twig b/themes/yunohost-docs/templates/partials/darkmodeswitcher.html.twig new file mode 100644 index 00000000..99e7911f --- /dev/null +++ b/themes/yunohost-docs/templates/partials/darkmodeswitcher.html.twig @@ -0,0 +1,3 @@ +<a href="#" class="dark-mode-switcher"> + <i class="fa fa-moon-o"></i> +</a> \ No newline at end of file diff --git a/themes/yunohost-docs/templates/partials/logo.html.twig b/themes/yunohost-docs/templates/partials/logo.html.twig new file mode 100644 index 00000000..fb42c3fb --- /dev/null +++ b/themes/yunohost-docs/templates/partials/logo.html.twig @@ -0,0 +1,67 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + inkscape:version="1.0 (4035a4fb49, 2020-05-01)" + id="svg58" + version="1.1" + viewBox="0 0 263.25989 58.999805" + height="100%" + width="100%"> + <defs + id="defs52" /> + <sodipodi:namedview + inkscape:window-maximized="0" + inkscape:window-y="0" + inkscape:window-x="160" + inkscape:window-height="1030" + inkscape:window-width="1424" + fit-margin-bottom="0" + fit-margin-right="0" + fit-margin-left="0" + fit-margin-top="0" + showgrid="false" + inkscape:document-rotation="0" + inkscape:current-layer="layer1" + inkscape:document-units="mm" + inkscape:cy="41.790529" + inkscape:cx="441.04996" + inkscape:zoom="0.7" + inkscape:pageshadow="2" + inkscape:pageopacity="0.0" + borderopacity="1.0" + bordercolor="#666666" + pagecolor="#ffffff" + id="base" /> + <metadata + id="metadata55"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + transform="translate(-2.7614142,-147.72677)" + id="layer1" + inkscape:groupmode="layer" + inkscape:label="Layer 1"> + <g + transform="translate(-2.1219714,54.42857)" + id="g74"> + <path + id="path76" + d="m 144.84887,151.62424 c -2.63432,-1.45699 -4.5299,-3.63776 -6.44293,-7.41228 -1.06728,-2.10579 -3.02342,-4.67603 -4.34698,-5.71164 -2.74081,-2.14452 -4.32914,-4.76522 -4.32914,-7.14294 0,-2.20453 1.03456,-2.91837 5.74141,-3.96153 l 4.00198,-0.88694 0.49128,-5.02512 c 1.25869,-12.8747 2.36085,-16.78438 4.73162,-16.78438 2.40751,0 5.86749,1.98628 7.24523,4.1593 1.28369,2.02466 1.37768,2.90277 1.04729,9.78382 -0.33012,6.87539 -0.2571,7.55952 0.8068,7.55952 1.72963,0 4.02098,-1.82034 5.22701,-4.15254 0.64564,-1.24852 1.20356,-4.59501 1.42156,-8.52667 0.36193,-6.52733 1.51144,-10.42679 3.27297,-11.10275 1.53106,-0.58753 6.93271,0.66416 8.33231,1.93078 2.24898,2.03531 2.23385,4.37316 -0.0699,10.80562 -2.29741,6.41464 -2.7593,12.79727 -1.28526,17.7607 0.84762,2.85417 0.90501,12.07485 0.0832,13.37265 -0.86676,1.36883 -4.31924,-0.94641 -9.05826,-6.07448 l -3.83538,-4.15025 -2.34045,1.11609 c -1.28726,0.61385 -2.92433,1.11609 -3.63794,1.11609 -1.90868,0 -2.68868,2.04686 -2.68868,7.05556 0,6.41089 -1.14443,8.05413 -4.36772,6.27139 z M 17.689105,149.57216 c -2.81163,-2.99285 -4.438806,-7.86055 -4.442829,-13.29074 -0.0021,-2.78658 0.375562,-5.7436 0.844665,-6.61418 1.307133,-2.42582 0.344769,-4.6216 -3.927088,-8.96023 l -3.9213728,-3.98266 -0.832285,-7.72652 c -0.935277,-8.68265 -0.651533,-12.53585 1.0626007,-14.42994 1.8697561,-2.06606 4.2255211,-1.61038 7.0557501,1.36481 2.305489,2.42357 2.631406,3.25231 3.715957,9.44888 0.653851,3.73576 1.53393,7.26426 1.955733,7.84111 1.174302,1.60596 3.266527,0.56648 6.405141,-3.18225 3.405036,-4.06694 5.055314,-4.26376 7.964895,-0.94993 3.487721,3.9723 2.716076,7.10812 -3.287638,13.36037 l -4.011058,4.1771 -1.016706,7.68254 c -1.430203,10.80703 -3.019308,16.36467 -4.750445,16.61392 -0.752252,0.10831 -2.011307,-0.49645 -2.81532,-1.35228 z m 28.046358,-1.95042 c -2.386301,-0.95155 -4.624135,-3.20188 -6.156967,-6.19136 -1.547341,-3.01779 -3.252488,-11.31102 -3.246823,-15.79141 0.0054,-4.22626 1.808294,-15.94375 2.713485,-17.63511 0.717187,-1.34008 0.762901,-1.34188 2.867153,-0.11293 1.176091,0.68687 2.841972,2.29085 3.701957,3.56438 1.503878,2.22707 1.545784,2.63938 1.096947,10.79311 -0.339532,6.16807 -0.253448,8.60935 0.315991,8.96128 2.040708,1.26123 4.894015,-3.94885 8.446431,-15.42299 1.373059,-4.43492 2.730227,-8.31358 3.015929,-8.61923 0.86317,-0.92345 5.326633,4.24682 5.787627,6.70413 0.960052,5.11751 -2.072323,20.47205 -5.300116,26.83731 -1.966112,3.8772 -3.329713,5.22874 -6.693382,6.63417 -2.812878,1.1753 -4.156255,1.23246 -6.548232,0.27865 z m 22.947034,-1.26517 c -1.533757,-1.11105 -2.79356,-2.24498 -2.799563,-2.51984 -0.006,-0.27487 0.587401,-3.82595 1.318673,-7.89129 0.731273,-4.06535 1.793458,-11.72763 2.36041,-17.02729 0.566958,-5.29967 1.200923,-9.91098 1.408813,-10.24736 0.788468,-1.27577 3.704529,-0.53009 6.078609,1.55438 1.624693,1.42649 3.462504,4.31104 5.383066,8.449 1.603882,3.45567 3.190348,6.11357 3.52548,5.90645 0.335132,-0.20713 0.967451,-2.87525 1.405157,-5.92917 1.305688,-9.11003 2.749106,-15.40424 4.172326,-18.19397 l 1.341194,-2.62896 1.978613,1.89563 c 3.362906,3.22187 3.639269,5.45219 2.384912,19.24676 -0.613692,6.74895 -1.114099,15.5413 -1.112023,19.53854 0.0047,8.68661 -0.46101,9.86885 -3.883619,9.86278 -2.946669,-0.005 -4.846817,-1.18587 -9.074405,-5.63831 -3.660079,-3.85475 -4.19022,-3.69787 -6.805083,2.01373 -1.996594,4.36114 -3.460118,4.66764 -7.68256,1.60892 z M 213.63229,145.2526 c -2.44242,-2.77378 -3.93951,-6.88784 -3.93951,-10.8259 0,-5.61446 1.05532,-6.33764 4.07767,-2.79431 2.13786,2.50638 2.55582,2.72651 3.85582,2.03077 1.96325,-1.0507 2.48271,-3.52998 1.23131,-5.87683 -0.56315,-1.05614 -3.158,-4.47033 -5.76631,-7.58709 -4.21061,-5.03138 -4.74241,-5.98097 -4.74241,-8.46809 0,-5.32817 4.792,-9.71957 10.60622,-9.71957 5.06618,0 9.59365,3.47156 9.7831,7.50147 0.10413,2.21522 0.0654,2.24591 -3.2544,2.57789 -2.75899,0.2759 -3.39551,0.58599 -3.5596,1.73413 -0.1099,0.76899 0.38067,2.11503 1.09015,2.99121 l 1.28997,1.59304 1.93365,-2.10849 c 2.22527,-2.42646 4.74153,-3.53793 8.00954,-3.53793 2.67514,0 3.59045,-1.14699 5.36231,-6.71958 1.81864,-5.71976 2.84922,-7.39153 4.55654,-7.39153 3.12751,0 5.75474,2.99603 6.48168,7.39153 l 0.38895,2.35185 5.82879,0.39954 c 6.16158,0.42235 8.40703,1.35228 10.32186,4.27468 3.06971,4.68496 -0.85185,7.08201 -17.68135,10.80769 -1.47104,0.32565 -1.51197,0.56595 -1.51442,8.88936 -0.002,7.34263 -0.19116,8.86407 -1.33404,10.73852 -1.50567,2.46949 -3.48934,2.83014 -5.97818,1.08689 -2.69285,-1.88614 -4.07736,-6.00343 -4.09379,-12.17419 l -0.0148,-5.54365 h -2.29452 -2.29452 l -0.42527,5.20767 c -0.5525,6.7655 -1.59837,8.97498 -5.52829,11.67883 -2.57338,1.77054 -4.04896,2.27398 -7.26517,2.47877 -3.29462,0.20979 -4.23707,0.0286 -5.13102,-0.98668 z m -104.25811,-1.26585 c -1.40182,-0.51449 -3.47884,-1.59771 -4.61561,-2.40716 -2.78558,-1.98351 -5.938799,-7.10346 -5.938799,-9.64297 0,-5.86272 6.400399,-21.79974 9.842159,-24.50703 2.25453,-1.77341 8.57313,-3.64811 10.58982,-3.14195 2.39227,0.60042 5.0159,2.98355 6.51098,5.91415 1.22857,2.4082 1.28573,3.02044 0.55001,5.89108 -0.63025,2.45909 -0.64092,3.91896 -0.0459,6.28197 1.19496,4.74564 0.94067,8.79159 -0.79895,12.71149 -3.79053,8.54124 -9.08871,11.47133 -16.09371,8.90042 z m 7.06878,-17.44872 c 1.0077,-1.84788 1.83925,-4.19134 1.84789,-5.20767 0.0134,-1.58361 -0.25586,-1.84789 -1.88305,-1.84789 -3.61294,0 -6.88819,5.36668 -5.42745,8.89321 1.20803,2.91644 3.24348,2.23171 5.46261,-1.83765 z m 68.43539,15.69863 c -1.63669,-0.83089 -4.78198,-3.20839 -6.98953,-5.28333 -3.80388,-3.57539 -4.02977,-3.96622 -4.32079,-7.4755 -0.95549,-11.5219 5.40217,-22.09059 13.28873,-22.09059 3.61079,0 10.67616,3.20246 15.02205,6.80893 l 2.60137,2.15877 -0.29743,7.21887 c -0.26592,6.45413 -0.5279,7.68701 -2.47296,11.638 -1.73308,3.52039 -2.79049,4.77952 -5.19925,6.19115 -4.20282,2.46302 -7.90069,2.72805 -11.63219,0.8337 z m 5.78973,-13.51477 c 4.20311,-4.64425 0.56459,-10.88476 -3.69977,-6.34556 -0.84514,0.89961 -1.63746,2.87319 -1.88836,4.7037 l -0.43227,3.15377 h 2.32605 c 1.55881,0 2.77738,-0.4987 3.69435,-1.51191 z" + style="fill:#333333;fill-opacity:1;stroke-width:0.671958" /> + </g> + </g> +</svg> diff --git a/themes/yunohost-docs/templates/partials/page.html.twig b/themes/yunohost-docs/templates/partials/page.html.twig new file mode 100644 index 00000000..77854430 --- /dev/null +++ b/themes/yunohost-docs/templates/partials/page.html.twig @@ -0,0 +1,6 @@ +<div id="body-inner" dir="auto" class="highlightable"> + <h1>{{ page.title }}</h1> + <p> + {{ page.content|raw }} + </p> +</div> diff --git a/themes/yunohost-docs/templates/partials/sidebar.html.twig b/themes/yunohost-docs/templates/partials/sidebar.html.twig new file mode 100644 index 00000000..5741079c --- /dev/null +++ b/themes/yunohost-docs/templates/partials/sidebar.html.twig @@ -0,0 +1,34 @@ +{% import 'macros/macros.html.twig' as macros %} + +<div class="learn-brand"> + <div id="header"> + <a id="logo" href="{{ base_url_absolute }}">{% include 'partials/logo.html.twig' %}</a> + <div class="searchbox"> + <label for="search-by"><i class="fa fa-search"></i></label> + <input id="search-by" type="text" placeholder="{{ 'THEME_LEARN4_SEARCH_DOCUMENTATION'|t }}" + data-search-input="{{ base_url_relative }}/s/q"/> + <span data-search-clear><i class="fa fa-close"></i></span> + </div> + <div class="search-options columns"> + <div class="adv-search column col-8"><i class="fa fa-sliders"></i> <a href="/search?q=">{{ 'THEME_LEARN4_SEARCH_ADVANCED'|t }}</a></div> + {% include 'partials/versions.html.twig' %} + </div> + </div> +</div> +<div class="learn-nav" data-simplebar> + <div class="highlightable"> + {% for slug, ver in pages.children.visible %} + {{ macros.version(ver) }} + <ul id="{{ slug }}" class="topics"> + {% if ver.activeChild or ver.active %} + {{ macros.loop(ver, '') }} + {% endif %} + </ul> + {% endfor %} + <hr /> + + <a class="side-tools padding" href="#" data-clear-history-toggle> + <i class="fa fa-fw fa-history"></i> {{ 'THEME_LEARN4_CLEAR_HISTORY'|t }} + </a><br/> + </div> +</div> diff --git a/themes/yunohost-docs/templates/partials/topbar.html.twig b/themes/yunohost-docs/templates/partials/topbar.html.twig new file mode 100644 index 00000000..87734f15 --- /dev/null +++ b/themes/yunohost-docs/templates/partials/topbar.html.twig @@ -0,0 +1,27 @@ +<div id="top-bar"> + {% if github_link_position == 'top' %} + <div id="top-github-link"> + {% include 'partials/github-link.html.twig' %} + </div> + {% endif %} + + <div id="navigation"> + {% if theme_var('github.link') %} + {% include 'partials/github-link.html.twig' %} + {% endif %} + {% include 'partials/darkmodeswitcher.html.twig' %} + {% if not progress.isFirst(page.path) %} + <a class="nav-prev tooltip tooltip-bottom" data-tooltip="Previous Page [←]" href="{{ progress.nextSibling(page.path).url }}"> <i class="fa fa-angle-left"></i></a> + {% else %} + <span class="disabled"><i class="fa fa-angle-left"></i></span> + {% endif %} + {% if not progress.isLast(page.path) %} + <a class="nav-next tooltip tooltip-bottom" data-tooltip="Next Page [→]" href="{{ progress.prevSibling(page.path).url }}"><i class="fa fa-angle-right"></i></a> + {% else %} + <span class="disabled"><i class="fa fa-angle-right"></i></span> + {% endif %} + </div> + <div class="progress"></div> +</div> + + diff --git a/themes/yunohost-docs/templates/partials/versions.html.twig b/themes/yunohost-docs/templates/partials/versions.html.twig new file mode 100644 index 00000000..9559697e --- /dev/null +++ b/themes/yunohost-docs/templates/partials/versions.html.twig @@ -0,0 +1,18 @@ +<div class="version-chooser column col-4 text-right"> + <select id="switch-version"> + {% set langobj = grav['language'] %} + {% for key in langswitcher.languages %} + {% if key == langswitcher.current %} + {% set lang_url = page.url %} + {% set active = ' selected="selected"' %} + {% else %} + {% set lang_url = base_url_simple ~ langobj.getLanguageURLPrefix(key)~langswitcher.page_route ?: '/' %} + {% set active = '' %} + {% endif %} + <option value="{{ lang_url ~ uri.params }}"{{ active }}>{{ key }}</option> + {% endfor %} + </select> +</div> +<script> +jQuery(document).on('change', '#switch-version', function() { window.location.href = this.value }); +</script> diff --git a/themes/yunohost-docs/thumbnail.jpg b/themes/yunohost-docs/thumbnail.jpg new file mode 100644 index 00000000..e82d66ec Binary files /dev/null and b/themes/yunohost-docs/thumbnail.jpg differ diff --git a/themes/yunohost-docs/yunohost-docs.php b/themes/yunohost-docs/yunohost-docs.php new file mode 100644 index 00000000..42f87fc3 --- /dev/null +++ b/themes/yunohost-docs/yunohost-docs.php @@ -0,0 +1,9 @@ +<?php +namespace Grav\Theme; + +use Grav\Common\Theme; + +class YunoHostDocs extends Learn4 +{ + // Access plugin events in this class +} diff --git a/themes/yunohost-docs/yunohost-docs.yaml b/themes/yunohost-docs/yunohost-docs.yaml new file mode 100644 index 00000000..02273d8e --- /dev/null +++ b/themes/yunohost-docs/yunohost-docs.yaml @@ -0,0 +1,8 @@ +streams: + schemes: + theme: + type: ReadOnlyStream + prefixes: + '': + - user/themes/yunohost-docs + - user/themes/learn4 diff --git a/try.md b/try.md deleted file mode 100644 index 58dac84a..00000000 --- a/try.md +++ /dev/null @@ -1,27 +0,0 @@ -#Try YunoHost - -<div class="alert alert-warning" markdown="1"> -**Note:** This demo server could be down from time to time. -<br> - -</div> - -<br> - - <div class="row text-center"> - <div class="col-md-6"> - <a href="https://demo.yunohost.org/" target="_blank" class="btn btn-success btn-lg"><span class="glyphicon glyphicon-user"></span> User interface</a> - <p class="text-muted">Username: demo<br>Password: demo</p> - </div> - <div class="col-md-5"> - <a href="https://demo.yunohost.org/yunohost/admin" target="_blank" class="btn btn-primary btn-lg"><span class="glyphicon glyphicon-lock"></span> Administration interface</a> - <p class="text-muted">Password: demo</p> - </div> - </div> - -<br> - -<p class="text-center" markdown="1"> -***Demo server gracefully provided by -<a href="https://www.gitoyen.net" target="_blank">Gitoyen</a>*** -</p> diff --git a/try_ar.md b/try_ar.md deleted file mode 100644 index 4ab216e4..00000000 --- a/try_ar.md +++ /dev/null @@ -1,29 +0,0 @@ -#<div dir="auto">تجريب YunoHost</div> - -<div dir=rtl class="alert alert-warning" markdown="1"> -**ملاحظة :** يمكن لهذا السيرفر التجريبي أن يتوقف من وقت إلى آخر. -<br> - -</div> - -<br> - - <div dir=rtl class="row text-center"> - <div dir=rtl class="col-md-6"> - <a href="https://demo.yunohost.org/" target="_blank" class="btn btn-success btn-lg"><span class="glyphicon glyphicon-user"></span> واجهة المستخدم</a> - <p class="text-muted">إسم المستخدم : demo<br>كلمة السر : demo</p> - </div> - <div dir=rtl class="col-md-5"> - <a href="https://demo.yunohost.org/yunohost/admin" target="_blank" class="btn btn-primary btn-lg"><span class="glyphicon glyphicon-lock"></span> واجهة الإدارة</a> - <p dir=rtl class="text-muted">كلمة السر : demo</p> - </div> - </div> - -<br> - -<p dir=rtl class="text-center" markdown="1"> -***تم توفير الخادم التجريبي بفضل -<a href="https://www.gitoyen.net" target="_blank">Gitoyen</a>*** -</p> - - diff --git a/try_de.md b/try_de.md deleted file mode 100644 index 5fc341ff..00000000 --- a/try_de.md +++ /dev/null @@ -1,27 +0,0 @@ -# YunoHost ausprobieren - -<div class="alert alert-warning" markdown="1"> -**Hinweis:** Dieser Demo-Server könnte zeitweilig nicht erreichbar sein. -<br> - -</div> - -<br> - - <div class="row text-center"> - <div class="col-md-6"> - <a href="https://demo.yunohost.org/" target="_blank" class="btn btn-success btn-lg"><span class="glyphicon glyphicon-user"></span> Anwendungen</a> - <p class="text-muted">Username: demo<br>Password: demo</p> - </div> - <div class="col-md-5"> - <a href="https://demo.yunohost.org/yunohost/admin" target="_blank" class="btn btn-primary btn-lg"><span class="glyphicon glyphicon-lock"></span> Verwaltung</a> - <p class="text-muted">Password: demo</p> - </div> - </div> - -<br> - -<p class="text-center" markdown="1"> -***Demo-Server freundlicherweise zur Verfügung gestellt von -<a href="https://www.gitoyen.net" target="_blank">Gitoyen</a>*** -</p> diff --git a/try_es.md b/try_es.md deleted file mode 100644 index 99a3f063..00000000 --- a/try_es.md +++ /dev/null @@ -1,29 +0,0 @@ -#Probar YunoHost - -<div class="alert alert-warning" markdown="1"> -**Nota :** Este demo puede dejar de functionar de vez en cuando. -<br> - -</div> - -<br> - - <div class="row text-center"> - <div class="col-md-6"> - <a href="https://demo.yunohost.org/" target="_blank" class="btn btn-success btn-lg"><span class="glyphicon glyphicon-user"></span> Interfaz de usuario</a> - <p class="text-muted">Usuario : demo<br>Contraseña : demo</p> - </div> - <div class="col-md-5"> - <a href="https://demo.yunohost.org/yunohost/admin" target="_blank" class="btn btn-primary btn-lg"><span class="glyphicon glyphicon-lock"></span> Interfaz de administración</a> - <p class="text-muted">Contraseña : demo</p> - </div> - </div> - -<br> - -<p class="text-center" markdown="1"> -***El servidor de demo es ofrecido generosamente por -<a href="https://www.gitoyen.net" target="_blank">Gitoyen</a>*** -</p> - - diff --git a/try_fr.md b/try_fr.md deleted file mode 100644 index 65ad6711..00000000 --- a/try_fr.md +++ /dev/null @@ -1,29 +0,0 @@ -#Essayer YunoHost - -<div class="alert alert-warning" markdown="1"> -**Note :** Cette démo peut cesser de fonctionner de temps en temps. -<br> - -</div> - -<br> - - <div class="row text-center"> - <div class="col-md-6"> - <a href="https://demo.yunohost.org/" target="_blank" class="btn btn-success btn-lg"><span class="glyphicon glyphicon-user"></span> Interface utilisateur</a> - <p class="text-muted">Utilisateur : demo<br>Mot de passe : demo</p> - </div> - <div class="col-md-5"> - <a href="https://demo.yunohost.org/yunohost/admin" target="_blank" class="btn btn-primary btn-lg"><span class="glyphicon glyphicon-lock"></span> Interface d’administration</a> - <p class="text-muted">Mot de passe : demo</p> - </div> - </div> - -<br> - -<p class="text-center" markdown="1"> -***Le serveur de démo est fourni généreusement par -<a href="https://www.gitoyen.net" target="_blank">Gitoyen</a>*** -</p> - - diff --git a/try_it.md b/try_it.md deleted file mode 100644 index b69e00c9..00000000 --- a/try_it.md +++ /dev/null @@ -1,27 +0,0 @@ -#Prova YunoHost - -<div class="alert alert-warning" markdown="1"> -**Nota:** A volte questo server demo può essere irraggiungibile -<br> - -</div> - -<br> - - <div class="row text-center"> - <div class="col-md-6"> - <a href="https://demo.yunohost.org/" target="_blank" class="btn btn-success btn-lg"><span class="glyphicon glyphicon-user"></span> Interfaccia utente</a> - <p class="text-muted">Nome utente: demo<br>Password: demo</p> - </div> - <div class="col-md-5"> - <a href="https://demo.yunohost.org/yunohost/admin" target="_blank" class="btn btn-primary btn-lg"><span class="glyphicon glyphicon-lock"></span> Interfaccia amministrazione</a> - <p class="text-muted">Password: demo</p> - </div> - </div> - -<br> - -<p class="text-center" markdown="1"> -***Il server demo è gentilmente fornito da -<a href="https://www.gitoyen.net" target="_blank">Gitoyen</a>*** -</p> diff --git a/update.md b/update.md deleted file mode 100644 index b67f6f18..00000000 --- a/update.md +++ /dev/null @@ -1,18 +0,0 @@ -# How to update the system - -## From the webadmin - -On the administraton panel, click on Upgrade the system. - -The application search for updates and propose it if so. - -If so, click on green update button and updates are applied. - -## From the command line - -From the command line, you can run: - -``` bash -yunohost tools update -yunohost tools upgrade --system -``` diff --git a/update_fr.md b/update_fr.md deleted file mode 100644 index c025cdef..00000000 --- a/update_fr.md +++ /dev/null @@ -1,19 +0,0 @@ -# Mettre à jour le système - -## Depuis la webadmin - -Dans la partie administration, choisir Mettre à jour le système. - -L’application recherche les mises à jour et les propose s’il y en a. - -Si c’est le cas, cliquer sur le bouton vert « Mettre à jour » et les mises à -jour se font. - -## Depuis la ligne de commande - -Depuis la ligne de commande, vous pouvez utiliser : - -``` bash -yunohost tools update -yunohost tools upgrade --system -``` diff --git a/vpn_advantage.md b/vpn_advantage.md deleted file mode 100644 index d2244385..00000000 --- a/vpn_advantage.md +++ /dev/null @@ -1 +0,0 @@ -Unfortunately, this page only exists [in french here](vpn_advantage_fr) for now. diff --git a/whatsyunohost.md b/whatsyunohost.md deleted file mode 100644 index 6ed0efd3..00000000 --- a/whatsyunohost.md +++ /dev/null @@ -1,58 +0,0 @@ -What is YunoHost? -================= - -<img src="/images/YunoHost_logo_vertical.png" width=400> - -YunoHost is an **operating system** aiming for the simplest administration of a **server**, and therefore democratize [self-hosting](selfhosting), while making sure it stays reliable, secure, ethical and lightweight. It is a copylefted libre software project maintained exclusively by volunteers. Technically, it can be seen as a distribution based on [Debian GNU/Linux](https://debian.org) and can be installed on [many kinds of hardware](install). - -Features --------- - -- <img src="/images/icon-debian.png" width=32 style="margin-right:5px"> Based on Debian ; -- <img src="/images/icon-tools.png" width=32 style="margin-right:5px" width=64> Administrate your server through a **friendly web interface** ; -- <img src="/images/icon-package.png" width=32 style="margin-right:5px"> Deploy **apps in just a few clicks** ; -- <img src="/images/icon-users.png" width=32 style="margin-right:5px"> Manage **users** <small>(based on LDAP)</small>; -- <img src="/images/icon-globe.png" width=32 style="margin-right:5px"> Manage **domain names** ; -- <img src="/images/icon-medic.png" width=32 style="margin-right:5px"> Create and restore **backups** ; -- <img src="/images/icon-door.png" width=32 style="margin-right:5px"> Connect to all apps simultaneously through the **user portal** <small>(NGINX, SSOwat)</small> ; -- <img src="/images/icon-mail.png" width=32 style="margin-right:5px"> Includes a **full e-mail stack** <small>(Postfix, Dovecot, Rspamd, DKIM)</small> ; -- <img src="/images/icon-messaging.png" width=32 style="margin-right:5px"> … as well as **an instant messaging server** <small>(XMPP)</small> ; -- <img src="/images/icon-lock.png" width=32 style="margin-right:5px"> Manages **SSL certificates** <small>(based on Let's Encrypt)</small> ; -- <img src="/images/icon-shield.png" width=32 style="margin-right:5px"> … and **security systems** <small>(fail2ban, yunohost-firewall)</small> ; - -Origin ------- - -YunoHost was created in February 2012 after something like this: - - <blockquote><p>"Shit, I'm too lazy to reconfigure my mail server… Beudbeud, how were you able to get your little server running with LDAP?"</p> -<small>Kload, February 2012</small></blockquote> - -All that was needed was an admin interface for Beudbeud's server to make something usable, so Kload decided to develop one. Finally, after automating several configs and packaging in some web apps, YunoHost v1 was finished. - -Noting the growing enthusiasm around YunoHost and around self-hosting in general, the original developers along with new contributors decided to start work on version 2, a more extensible, more powerful, more easy-to-use, and at that, one that makes a nice cup of fair-trade coffee for the elves of Lapland. - -The name **YunoHost** comes from the jargon "Y U NO Host". The [Internet meme](https://en.wikipedia.org/wiki/Internet_meme) should illustrate it: -<div class="text-center"><img style="border-radius: 5px; box-shadow: 0 5px 15px rgba(0,0,0,0.15);" src="/images/dude_yunohost.jpg"></div> - -What YunoHost is not? ---------------------- - -Even if YunoHost can handle multiple domains and multiple users, it is **not meant to be a mutualized system**. - -First, the software is too young, not tested at scale and thus probably not optimized well enough for hundreds of users at the same time. With that said, we do not want to lead the software in that direction. Virtualization democratizes, and its usage is recommended since it is a more watertight way to achieve mutualization than a "full-stack" system like YunoHost. - -You can host your friends, your family and your company safely and with ease, but you must **trust your users**, and they must trust you above all. If you want to provide YunoHost services for unknown persons anyway, a full VPS per user will be just fine, and we believe a better way to go. - -Artworks ---------- - -Black and white YunoHost PNG logo by ToZz (400 × 400 px): - -<a href="/images/ynh_logo_black_300dpi.png"><img src="/images/ynh_logo_black_300dpi.png" width=220></a> - -<a href="/images/ynh_logo_white_300dpi.png"><img src="/images/ynh_logo_white_300dpi.png" width=220></a> - -Click to download. - -Licence: CC-BY-SA 4.0 diff --git a/whatsyunohost_de.md b/whatsyunohost_de.md deleted file mode 100644 index 226b6a0f..00000000 --- a/whatsyunohost_de.md +++ /dev/null @@ -1,57 +0,0 @@ -Was ist YunoHost? -================= - -<img src="/images/YunoHost_logo_vertical.png" width=400> - -YunoHost ist ein **Betriebssystem**, das auf die einfachste Verwaltung eines **Servers** abzielt und daher das [Self-Hosting](selfhosting) demokratisiert, wobei sichergestellt wird, dass es zuverlässig, sicher, ethisch einwandfrei und leichtgewichtig bleibt. Es ist ein Copylefted-Libre-Softwareprojekt, das ausschließlich von Freiwilligen betrieben wird. Technisch gesehen kann es als eine Distribution angesehen werden, die auf [Debian GNU / Linux](https://debian.org) basiert und auf [vielen Arten von Hardware](install) installiert werden kann. - -Features --------- - -- <img src="/images/icon-debian.png" width=32 style="margin-right:5px"> Basierend auf Debian ; -- <img src="/images/icon-tools.png" width=32 style="margin-right:5px" width=64> Verwalten Sie Ihren Server über eine **benutzerfreundliche Weboberfläche** ; -- <img src="/images/icon-package.png" width=32 style="margin-right:5px"> Bereitstellen von **Apps mit nur wenigen Klicks** ; -- <img src="/images/icon-users.png" width=32 style="margin-right:5px"> Verwalten Sie **Benutzer** <small>(basierend auf LDAP)</small> ; -- <img src="/images/icon-globe.png" width=32 style="margin-right:5px"> Verwalten Sie Ihre **Domainnamen** ; -- <img src="/images/icon-medic.png" width=32 style="margin-right:5px"> Erstellen und Wiederherstellen von **Backups** ; -- <img src="/images/icon-door.png" width=32 style="margin-right:5px"> Stellen Sie über das **Benutzerportal** <small>(NGINX, SSOwat)</small> gleichzeitig eine Verbindung zu allen Apps her ; -- <img src="/images/icon-mail.png" width=32 style="margin-right:5px"> Enthält einen **vollständigen E-Mail-Stack** <small>(Postfix, Dovecot, Rspamd, DKIM)</small> ; -- <img src="/images/icon-messaging.png" width=32 style="margin-right:5px"> … sowie **einen Instant Messaging Server** <small>(XMPP)</small> ; -- <img src="/images/icon-lock.png" width=32 style="margin-right:5px"> Verwaltet **SSL-Zertifikate** <small>(basierend auf Let's Encrypt)</small> ; -- <img src="/images/icon-shield.png" width=32 style="margin-right:5px"> … und **Sicherheitssysteme** <small>(fail2ban, yunohost-firewall)</small> ; - -Ursprung ------- - -YunoHost wurde im Februar 2012 aus folgender Situation heraus erstellt: - - <blockquote><p>"Scheiße, ich bin zu faul, um meinen Mailserver neu zu konfigurieren ... Beudbeud, wie hast Du deinen kleinen Server mit LDAP zum Laufen gebracht?"</p><small> Kload, Februar 2012</small></blockquote> - -Alles, was benötigt wurde, war eine Administrationsoberfläche für Beudbeud's Server, um etwas nutzbar zu machen, also entschied sich Kload, eine zu entwickeln. Schließlich wurde YunoHost v1, nach der Automatisierung mehrerer Konfigurationen und der Paketierung in einigen Webanwendungen, fertiggestellt. - -Angesichts der wachsenden Begeisterung für YunoHost und für das Selbst-Hosting im Allgemeinen beschlossen die ursprünglichen Entwickler zusammen mit neuen Mitarbeitern, mit der Arbeit an Version 2 zu beginnen, einer erweiterbaren, leistungsfähigeren, benutzerfreundlicheren und damit einfacheren Version eine schöne Tasse Fairtrade-Kaffee für die Elfen von Lappland. - -Der Name **YunoHost** stammt aus dem Jargon "Y U NO Host". Das [Internet meme](https://en.wikipedia.org/wiki/Internet_meme) sollte dies veranschaulichen: -<div class="text-center"><img style="border-radius: 5px; box-shadow: 0 5px 15px rgba(0,0,0,0.15);" src="/images/dude_yunohost.jpg"></div> - -Was YunoHost nicht ist? ---------------------- - -Selbst wenn YunoHost mehrere Domains und mehrere Benutzer verwalten kann, ist es **nicht als ein mutualisiertes System gedacht**. - -Erstens ist die Software noch sehr jung, nicht auf ihre Skalierbarkeit getestet und daher wahrscheinlich nicht gut genug optimiert für Hunderte von Benutzern gleichzeitig. Vor diesem Hintergrund möchten wir die Software nicht in diese Richtung lenken. Die Virtualisierung demokratisiert sich und ihre Verwendung wird empfohlen, da sie eine wasserdichtere Methode zur Erzielung von Gegenseitigkeit darstellt als ein "Full-Stack"-System wie YunoHost. - -Sie können Ihre Freunde, Ihre Familie und Ihr Unternehmen sicher und problemlos aufnehmen, aber Sie müssen **Ihren Benutzern vertrauen**, und diese müssen vor allem Ihnen vertrauen. Wenn Sie ohnehin YunoHost-Dienste für unbekannte Personen bereitstellen möchten, ist ein vollständiger VPS pro Benutzer in Ordnung, und wir glauben, dass dies ein besserer Weg ist. - -Artworks ---------- - -Schwarz und Weiss YunoHost PNG logo by ToZz (400 × 400 px): - -<a href="/images/ynh_logo_black_300dpi.png"><img src="/images/ynh_logo_black_300dpi.png" width=220></a> - -<a href="/images/ynh_logo_white_300dpi.png"><img src="/images/ynh_logo_white_300dpi.png" width=220></a> - -Zum download Klicken. - -Licence: CC-BY-SA 4.0 diff --git a/write_documentation.md b/write_documentation.md deleted file mode 100644 index 0d4937f7..00000000 --- a/write_documentation.md +++ /dev/null @@ -1,21 +0,0 @@ -# Write documentation - -## Online - -This site allows to edit content directly online. - -You can edit any page by pressing `ESC` on your keyboard or by clicking the "Edit" button on the bottom-right side of your screen. You will be able to preview your changes by pressing `ESC` again or by clicking the "preview" button. - -To create a new page, you can enter the URL and edit the page from there. - -Once edited, you are able to submit your change by filling an email address. - -## Via GitHub - -The YunoHost documentation is managed through a [git repository](https://github.com/YunoHost/doc). You can send pull-requests, and do not forget to report your issues. - -Because the online editor doesn't support uploading files, using git is the prefered way if you need to upload media (e.g. images). - -## Syntax - -This page uses the markdown syntax, please refer to the [documentation](https://guides.github.com/features/mastering-markdown/) for further information. diff --git a/write_documentation_fr.md b/write_documentation_fr.md deleted file mode 100644 index 2c280f83..00000000 --- a/write_documentation_fr.md +++ /dev/null @@ -1,17 +0,0 @@ -# Rédaction de la documentation - -## Sur le site - -Ce site permet d’éditer le contenu directement en ligne. - -Pour éditer une page, appuyez sur la touche `Échap` ou cliquez sur le bouton « Éditer » en bas à droite de la page. Vous pourrez visualiser vos modifications en appuyant de nouveau sur `Échap`, ou en cliquant sur le bouton « Aperçu » en bas à droite de la page. - -Une fois l’édition effectuée, vous pouvez soumettre vos modifications en renseignant un mail. - -## Via GitHub - -La documentation de YunoHost est gérée par un [dépot Git](https://github.com/YunoHost/doc). Vous pouvez envoyer des pull-requests. - -## Syntaxe - -La documentation utilise la syntaxe Markdown. Veuillez vous référer à la [documentation](https://guides.github.com/features/mastering-markdown/) (en) pour plus d’informations.