diff --git a/cmd/skywire-visor/static/5.265280f3d0f4895d526f.js b/cmd/skywire-visor/static/5.265280f3d0f4895d526f.js
new file mode 100644
index 0000000000..fbae82c868
--- /dev/null
+++ b/cmd/skywire-visor/static/5.265280f3d0f4895d526f.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[5],{"K+GZ":function(e){e.exports=JSON.parse('{"common":{"save":"Speichern","cancel":"Abbrechen","downloaded":"Heruntergeladen","uploaded":"Hochgeladen","loading-error":"Beim Laden der Daten ist ein Fehler aufgetreten. Versuche es erneut...","operation-error":"Beim Ausf\xfchren der Aktion ist ein Fehler aufgetreten.","no-connection-error":"Es ist keine Internetverbindung oder Verbindung zum Hypervisor vorhanden.","error":"Fehler:","refreshed":"Daten aktualisiert.","options":"Optionen","logout":"Abmelden","logout-error":"Fehler beim Abmelden.","logout-confirmation":"Wirklich abmelden?","time-in-ms":"{{ time }}ms","ok":"Ok","unknown":"Unbekannt","close":"Schlie\xdfen"},"labeled-element":{"edit-label":"Bezeichnung \xe4ndern","remove-label":"Bezeichnung l\xf6schen","copy":"Kopieren","remove-label-confirmation":"Bezeichnung wirklich l\xf6schen?","unnamed-element":"Unbenannt","unnamed-local-visor":"Lokaler Visor","local-element":"Lokal","tooltip":"Klicken um Eintrag zu kopieren oder Bezeichnung zu \xe4ndern","tooltip-with-text":"{{ text }} (Klicken um Eintrag zu kopieren oder Bezeichnung zu \xe4ndern)"},"labels":{"title":"Bezeichnung","info":"Bezeichnungen, die eingegeben wurden um Visor, Transporte und andere Elemente einfach wiederzuerkennen.","list-title":"Bezeichnunen Liste","label":"Bezeichnung","id":"Element ID","type":"Typ","delete-confirmation":"Diese Bezeichnung wirklich l\xf6schen?","delete-selected-confirmation":"Ausgew\xe4hlte Bezeichnungen wirklich l\xf6schen?","delete":"Bezeichnung l\xf6schen","deleted":"Bezeichnung gel\xf6scht.","empty":"Keine gespeicherten Bezeichnungen vorhanden.","empty-with-filter":"Keine Bezeichnung erf\xfcllt die gew\xe4hlten Filterkriterien.","filter-dialog":{"label":"Die Bezeichnung muss beinhalten","id":"Die ID muss beinhalten","type":"Der Typ muss sein","type-options":{"any":"Jeder","visor":"Visor","dmsg-server":"DMSG Server","transport":"Transport"}}},"filters":{"filter-action":"Filter","press-to-remove":"(Dr\xfccken um Filter zu l\xf6schen)","remove-confirmation":"Filter wirkliche l\xf6schen?"},"tables":{"title":"Ordnen nach","sorting-title":"Geordnet nach:","sort-by-value":"Wert","sort-by-label":"Bezeichnung","label":"(Bezeichnung)","inverted-order":"(Umgekehrt)"},"start":{"title":"Start"},"node":{"title":"Visor Details","not-found":"Visor nicht gefunden.","statuses":{"online":"Online","online-tooltip":"Visor ist online","partially-online":"Online mit Problemen","partially-online-tooltip":"Visor ist online, aber nicht alle Dienste laufen. F\xfcr Informationen bitte die Details Seite \xf6ffnen und die \\"Zustand Info\\" \xfcberpr\xfcfen.","offline":"Offline","offline-tooltip":"Visor ist offline"},"details":{"node-info":{"title":"Visor Info","label":"Bezeichnung:","public-key":"\xd6ffentlicher Schl\xfcssel:","dmsg-server":"DMSG Server:","ping":"Ping:","node-version":"Visor Version:","time":{"title":"Online seit:","seconds":"ein paar Sekunden","minute":"1 Minute","minutes":"{{ time }} Minuten","hour":"1 Stunde","hours":"{{ time }} Stunden","day":"1 Tag","days":"{{ time }} Tage","week":"1 Woche","weeks":"{{ time }} Wochen"}},"node-health":{"title":"Zustand Info","status":"Status:","transport-discovery":"Transport Entdeckung:","route-finder":"Route Finder:","setup-node":"Setup Visor:","uptime-tracker":"Verf\xfcgbarkeitsmonitor:","address-resolver":"Addressaufl\xf6ser:","element-offline":"offline"},"node-traffic-data":"Datenverkehr"},"tabs":{"info":"Info","apps":"Anwendungen","routing":"Routing"},"error-load":"Beim Aktualisieren der Visordaten ist ein Fehler aufgetreten."},"nodes":{"title":"Visor Liste","dmsg-title":"DMSG","update-all":"Alle Visor aktualisieren","hypervisor":"Hypervisor","state":"Status","state-tooltip":"Aktueller Status","label":"Bezeichnung","key":"Schl\xfcssel","dmsg-server":"DMSG Server","ping":"Ping","hypervisor-info":"Dieser Visor ist der aktuelle Hypervisor.","copy-key":"Schl\xfcssel kopieren","copy-dmsg":"DMSG Server Schl\xfcssel kopieren","copy-data":"Daten kopieren","view-node":"Visor betrachten","delete-node":"Visor l\xf6schen","delete-all-offline":"Alle offline Visor l\xf6schen","error-load":"Beim Aktualisieren der Visor-Liste ist ein Fehler aufgetreten.","empty":"Es ist kein Visor zu diesem Hypervisor verbunden.","empty-with-filter":"Kein Visor erf\xfcllt die gew\xe4hlten Filterkriterien","delete-node-confirmation":"Visor wirklich von der Liste l\xf6schen?","delete-all-offline-confirmation":"Wirklich alle offline Visor von der Liste l\xf6schen?","delete-all-filtered-offline-confirmation":"Alle offline Visor, welche die Filterkriterien erf\xfcllen werden von der Liste gel\xf6scht. Wirklich fortfahren?","deleted":"Visor gel\xf6scht.","deleted-singular":"Ein offline Visor gel\xf6scht.","deleted-plural":"{{ number }} offline Visor gel\xf6scht.","no-visors-to-update":"Kein Visor zum Aktualiseren vorhanden.","filter-dialog":{"online":"Der Visor muss","label":"Der Bezeichner muss enthalten","key":"Der \xf6ffentliche Schl\xfcssel muss enthalten","dmsg":"Der DMSG Server Schl\xfcssel muss enthalten","online-options":{"any":"Online oder offline","online":"Online","offline":"Offline"}}},"edit-label":{"label":"Bezeichnung","done":"Bezeichnung gespeichert.","label-removed-warning":"Die Bezeichnung wurde gel\xf6scht."},"settings":{"title":"Einstellungen","password":{"initial-config-help":"Diese Option wird verwendet, um das erste Passwort festzulegen. Nachdem ein Passwort festgelegt wurde, ist es nicht m\xf6glich dieses, mit dieser Option zu \xe4ndern.","help":"Optionen um das Passwort zu \xe4ndern.","old-password":"Altes Passwort","new-password":"Neues Passwort","repeat-password":"Neues Passwort wiederholen","password-changed":"Passwort wurde ge\xe4ndert.","error-changing":"Fehler beim \xc4ndern des Passworts aufgetreten.","initial-config":{"title":"Erstes Passwort festlegen","password":"Passwort","repeat-password":"Passwort wiederholen","set-password":"Passwort \xe4ndern","done":"Passwort wurde ge\xe4ndert.","error":"Fehler. Es scheint ein erstes Passwort wurde schon gew\xe4hlt."},"errors":{"bad-old-password":"Altes Passwort falsch","old-password-required":"Altes Passwort wird ben\xf6tigt","new-password-error":"Passwort muss 6-64 Zeichen lang sein.","passwords-not-match":"Passw\xf6rter stimmen nicht \xfcberein.","default-password":"Das Standardpasswort darf nicht verwendet werden (1234)."}},"updater-config":{"open-link":"Aktualisierungseinstellungen anzeigen","open-confirmation":"Es wird nur erfahrenen Benutzern empfohlen, die Aktualisierungseinstellungen zu modifizieren. Wirkich fortfahren?","help":"Dieses Formular benutzen um Einstellungen f\xfcr die Aktualisierung zu \xfcberschreiben. Alle leeren Felder werden ignoriert. Die Einstellungen werden f\xfcr alle Aktualisierungen \xfcbernommen. Dies geschieht unabh\xe4ngig davon, welches Element aktualisiert wird. Bitte Vorsicht wahren.","channel":"Kanal","version":"Version","archive-url":"Archiv-URL","checksum-url":"Pr\xfcfsummen-URL","not-saved":"Die \xc4nderungen wurden noch nicht gespeichert.","save":"\xc4nderungen speichern","remove-settings":"Einstellungen l\xf6schen","saved":"Die benutzerdefinierten Einstellungen wurden gespeichert.","removed":"Die benutzerdefinierten Einstellungen wurden gel\xf6scht.","save-confirmation":"Wirklich die benutzerdefinierten Einstellungen anwenden?","remove-confirmation":"Wirklich die benutzerdefinierten Einstellungen l\xf6schen?"},"change-password":"Passwort \xe4ndern","refresh-rate":"Aktualisierungsintervall","refresh-rate-help":"Zeit, bis das System die Daten automatisch aktualisiert.","refresh-rate-confirmation":"Aktualisierungsintervall ge\xe4ndert.","seconds":"Sekunden"},"login":{"password":"Passwort","incorrect-password":"Falsches Passwort.","initial-config":"Erste Konfiguration"},"actions":{"menu":{"terminal":"Terminal","config":"Konfiguration","update":"Aktualisieren","reboot":"Neustart"},"reboot":{"confirmation":"Den Visor wirklich neustarten?","done":"Der Visor wird neu gestartet."},"terminal-options":{"full":"Terminal","simple":"Einfaches Terminal"},"terminal":{"title":"Terminal","input-start":"Skywire Terminal f\xfcr {{address}}","error":"Bei der Ausf\xfchrung des Befehls ist ein Fehler aufgetreten."}},"update":{"title":"Aktualisierung","error-title":"Error","processing":"Suche nach Aktualisierungen...","no-update":"Keine Aktualisierung vorhanden.
Installierte Version:","no-updates":"Keine neuen Aktualisierungen gefunden.","already-updating":"Einige Visor werden schon aktualisiert:","update-available":"Folgende Aktualisierungen wurden gefunden:","update-available-singular":"Folgende Aktualisierungen wurden f\xfcr einen Visor gefunden:","update-available-plural":"Folgende Aktualisierungen wurden f\xfcr {{ number }} Visor gefunden:","update-available-additional-singular":"Folgende zus\xe4tzliche Aktualisierungen f\xfcr einen Visor wurden gefunden:","update-available-additional-plural":"Folgende zus\xe4tzliche Aktualisierungen f\xfcr {{ number }} Visor wurden gefunden:","update-instructions":"\'Aktualisierungen installieren\' klicken um fortzufahren.","updating":"Die Aktualisierung wurde gestartet. Das Fenster kann erneut ge\xf6ffnet werden um den Fortschritt zu sehen:","version-change":"Von {{ currentVersion }} auf {{ newVersion }}","selected-channel":"Gew\xe4hlter Kanal:","downloaded-file-name-prefix":"Herunterladen: ","speed-prefix":"Geschwindigkeit: ","time-downloading-prefix":"Dauer: ","time-left-prefix":"Dauert ungef\xe4hr noch: ","starting":"Aktualisierung wird vorbereitet","finished":"Status Verbindung beendet","install":"Aktualisierungen installieren"},"apps":{"log":{"title":"Log","empty":"Im ausgew\xe4hlten Intervall sind keine Logs vorhanden","filter-button":"Log-Intervall:","filter":{"title":"Filter","filter":"Zeige generierte Logs","7-days":"der letzten 7 Tagen","1-month":"der letzten 30 Tagen","3-months":"der letzten 3 Monaten","6-months":"der letzten 6 Monaten","1-year":"des letzten Jahres","all":"Zeige alle"}},"apps-list":{"title":"Anwendungen","list-title":"Anwendungsliste","app-name":"Name","port":"Port","state":"Status","state-tooltip":"Aktueller Status","auto-start":"Auto-Start","empty":"Visor hat keine Anwendungen.","empty-with-filter":"Keine Anwendung erf\xfcllt die Filterkriterien","disable-autostart":"Autostart ausschalten","enable-autostart":"Autostart einschalten","autostart-disabled":"Autostart aus","autostart-enabled":"Autostart ein","unavailable-logs-error":"Kann Logs nicht zeigen, solange die Anwendung gestoppt ist.","filter-dialog":{"state":"Der Status muss sein","name":"Der Name muss enthalten","port":"Der Port muss enthalten","autostart":"Autostart muss sein","state-options":{"any":"L\xe4uft oder gestoppt","running":"L\xe4uft","stopped":"Gestoppt"},"autostart-options":{"any":"An oder Aus","enabled":"An","disabled":"Aus"}}},"vpn-socks-server-settings":{"socks-title":"Skysocks Einstellungen","vpn-title":"VPN-Server Einstellungen","new-password":"Neues Passwort (Um Passwort zu entfernen leer lassen)","repeat-password":"Passwort wiederholen","passwords-not-match":"Passw\xf6rter stimmen nicht \xfcberein.","secure-mode-check":"Sicherheitsmodus benutzen","secure-mode-info":"Wenn aktiv, erlaubt der Server kein Client/Server SSH und erlaubt kein Datenverkehr vom VPN-Client zum lokalen Netzwerk des Servers.","save":"Speichern","remove-passowrd-confirmation":"Kein Passwort eingegeben. Wirklich Passwort entfernen?","change-passowrd-confirmation":"Passwort wirklich \xe4ndern?","changes-made":"\xc4nderungen wurden gespeichert."},"vpn-socks-client-settings":{"socks-title":"Skysocks-Client Einstellungen","vpn-title":"VPN-Client Einstellungen","discovery-tab":"Suche","remote-visor-tab":"Manuelle Eingabe","history-tab":"Verlauf","settings-tab":"Einstellungen","use":"Diese Daten benutzen","change-note":"Notiz \xe4ndern","remove-entry":"Eintrag l\xf6schen","note":"Notiz:","note-entered-manually":"Manuell eingegeben","note-obtained":"Von Discovery-Service erhalten","key":"Schl\xfcssel:","port":"Port:","location":"Ort:","state-available":"Verf\xfcgbar","state-offline":"Offline","public-key":"Remote Visor \xf6ffentlicher Schl\xfcssel","password":"Passwort","password-history-warning":"Achtung: Das Passwort wird nicht im Verlauf gespeichert.","copy-pk-info":"\xd6ffentlichen Schl\xfcssel kopieren.","copied-pk-info":"\xd6ffentlicher Schl\xfcssel wurde kopiert","copy-pk-error":"Beim Kopieren des \xf6ffentlichen Schl\xfcssels ist ein Problem aufgetreten.","no-elements":"Derzeit k\xf6nnen keine Elemente angezeigt werden. Bitte sp\xe4ter versuchen.","no-elements-for-filters":"Keine Elemente, welche die Filterkriterien erf\xfcllen.","no-filter":"Es wurde kein Filter gew\xe4hlt.","click-to-change":"Zum \xc4ndern klicken","remote-key-length-error":"Der \xf6ffentliche Schl\xfcssel muss 66 Zeichen lang sein.","remote-key-chars-error":"Der \xf6ffentliche Schl\xfcssel darf nur hexadezimale Zeichen enthalten.","save":"Speichern","remove-from-history-confirmation":"Eintrag wirklich aus dem Verlauf l\xf6schen?","change-key-confirmation":"Wirklich den \xf6ffentlichen Schl\xfcssel des remote Visors \xe4ndern?","changes-made":"\xc4nderungen wurden gespeichert.","no-history":"Dieser Tab zeigt die letzten {{ number }} \xf6ffentlichen Schl\xfcssel, die benutzt wurden.","default-note-warning":"Die Standardnotiz wurde nicht benutzt.","pagination-info":"{{ currentElementsRange }} von {{ totalElements }}","killswitch-check":"Killswitch aktivieren","killswitch-info":"Wenn aktiv, werden alle Netzwerkverbindungen deaktiviert falls die Anwendung l\xe4uft aber der VPN Schutz unterbrochen wird (f\xfcr tempor\xe4re Fehler oder andere Probleme).","settings-changed-alert":"Die \xc4nderungen wurden noch nicht gespeichert.","save-settings":"Einstellungen speichern","change-note-dialog":{"title":"Notiz \xe4ndern","note":"Notiz"},"password-dialog":{"title":"Passwort eingeben","password":"Passwort","info":"Ein Passwort wird abgefragt, da bei der Erstellung des gew\xe4hlten Eintrags ein Passwort gesetzt wurde, aus Sicherheitsgr\xfcnden aber nicht gespeichert wurde. Das Passwort kann frei gelassen werden.","continue-button":"Fortfahren"},"filter-dialog":{"title":"Filter","country":"Das Land muss sein","any-country":"Jedes","location":"Der Ort muss enthalten","pub-key":"Der \xf6ffentliche Schl\xfcssel muss enthalten","apply":"Anwenden"}},"stop-app":"Stopp","start-app":"Start","view-logs":"Zeige Logs","settings":"Einstellungen","error":"Ein Fehler ist aufgetreten.","stop-confirmation":"Anwendung wirklich anhalten?","stop-selected-confirmation":"Ausgew\xe4hlte Anwendung wirklich anhalten?","disable-autostart-confirmation":"Auto-Start f\xfcr diese Anwendung wirklich ausschalten?","enable-autostart-confirmation":"Auto-Start f\xfcr diese Anwendung wirklich einschalten?","disable-autostart-selected-confirmation":"Auto-Start f\xfcr ausgew\xe4hlte Anwendungen wirklich ausschalten?","enable-autostart-selected-confirmation":"Auto-Start f\xfcr ausgew\xe4hlte Anwendungen wirklich einschalten","operation-completed":"Operation ausgef\xfchrt","operation-unnecessary":"Gew\xfcnschte Einstellungen schon aktiv.","status-running":"L\xe4uft","status-stopped":"Gestoppt","status-failed":"Fehler","status-running-tooltip":"Anwendung l\xe4uft","status-stopped-tooltip":"Anwendung gestoppt","status-failed-tooltip":"Ein Fehler ist aufgetreten. Log der Anwendung \xfcberpr\xfcfen."},"transports":{"title":"Transporte","remove-all-offline":"Alle offline Transporte l\xf6schen","remove-all-offline-confirmation":"Wirkliche alle offline Transporte l\xf6schen?","remove-all-filtered-offline-confirmation":"Alle offline Transporte, welche die Filterkriterien erf\xfcllen werden gel\xf6scht. Wirklich fortfahren?","info":"Verbindungen mit remote Skywire Visor, um lokalen Skywire Anwendungen zu erlauben mit diesen remote Visor zu kommunizieren.","list-title":"Transport-Liste","state":"Status","state-tooltip":"Aktueller Status","id":"ID","remote-node":"Remote","type":"Typ","create":"Transport erstellen","delete-confirmation":"Transport wirklich entfernen?","delete-selected-confirmation":"Ausgew\xe4hlte Transporte wirklich entfernen?","delete":"Transport entfernen","deleted":"Transport erfolgreich entfernt.","empty":"Visor hat keine Transporte.","empty-with-filter":"Kein Transport erf\xfcllt die gew\xe4hlten Filterkriterien.","statuses":{"online":"Online","online-tooltip":"Transport ist online","offline":"Offline","offline-tooltip":"Transport ist offline"},"details":{"title":"Details","basic":{"title":"Basis Info","state":"Status:","id":"ID:","local-pk":"Lokaler \xf6ffentlicher Schl\xfcssel:","remote-pk":"Remote \xf6ffentlicher Schl\xfcssel:","type":"Typ:"},"data":{"title":"Daten\xfcbertragung","uploaded":"Hochgeladen:","downloaded":"Heruntergeladen:"}},"dialog":{"remote-key":"Remote \xf6ffentlicher Schl\xfcssel:","label":"Bezeichnung (optional)","transport-type":"Transport-Typ","success":"Transport erstellt.","success-without-label":"Der Transport wurde erstellt, aber die Bezeichnung konnte nicht gespeichert werden.","errors":{"remote-key-length-error":"Der remote \xf6ffentliche Schl\xfcssel muss 66 Zeichen lang sein.","remote-key-chars-error":"Der remote \xf6ffentliche Schl\xfcssel darf nur hexadezimale Zeichen enthalten.","transport-type-error":"Ein Transport-Typ wird ben\xf6tigt."}},"filter-dialog":{"online":"Der Transport muss sein","id":"Die ID muss enthalten","remote-node":"Der remote Schl\xfcssel muss enthalten","online-options":{"any":"Online oder offline","online":"Online","offline":"Offline"}}},"routes":{"title":"Routen","info":"Netzwerkpfade zum Erreichen von remote Visor. Routen werden bei Bedarf automatisch generiert.","list-title":"Routen-Liste","key":"Schl\xfcssel","type":"Typ","source":"Quelle","destination":"Ziel","delete-confirmation":"Diese Route wirklich entfernen?","delete-selected-confirmation":"Ausgew\xe4hlte Routen wirklich entfernen?","delete":"Route entfernen","deleted":"Route erfolgreich entfernt.","empty":"Visor hat keine Routen.","empty-with-filter":"Keine Route erf\xfcllt die gew\xe4hlten Filterkriterien.","details":{"title":"Details","basic":{"title":"Basis Info","key":"Schl\xfcssel:","rule":"Regel:"},"summary":{"title":"Regel Zusammenfassung","keep-alive":"Keep alive:","type":"Typ:","key-route-id":"Schl\xfcssel-Route ID:"},"specific-fields-titles":{"app":"Anwendung","forward":"Weiterleitung","intermediary-forward":"Vermittelte Weiterleitung"},"specific-fields":{"route-id":"N\xe4chste Routen ID:","transport-id":"N\xe4chste Transport ID:","destination-pk":"Ziel \xf6ffentlicher Schl\xfcssel:","source-pk":"Quelle \xf6ffentlicher Schl\xfcssel:","destination-port":"Ziel Port:","source-port":"Quelle Port:"}},"filter-dialog":{"key":"Der Schl\xfcssel muss enthalten","type":"Der Typ muss sein","source":"Die Quelle muss enhalten","destination":"Das Ziel muss enthalten","any-type-option":"Egal"}},"copy":{"tooltip":"In Zwischenablage kopieren","tooltip-with-text":"{{ text }} (In Zwischenablage kopieren)","copied":"In Zwischenablage kopiert!"},"selection":{"select-all":"Alle ausw\xe4hlen","unselect-all":"Alle abw\xe4hlen","delete-all":"Alle ausgew\xe4hlten Elemente entfernen","start-all":"Starte ausgew\xe4hlte Anwendung","stop-all":"Stoppe ausgew\xe4hlte Anwendung","enable-autostart-all":"Auto-Start f\xfcr ausgew\xe4hlte Anwendungen einschalten","disable-autostart-all":"Auto-Start f\xfcr ausgew\xe4hlte Anwendungen ausschalten"},"refresh-button":{"seconds":"K\xfcrzlich aktualisiert","minute":"Vor einer Minute aktualisiert","minutes":"Vor {{ time }} Minuten aktualisiert","hour":"Vor einer Stunde aktualisiert","hours":"Vor {{ time }} Stunden aktualisert","day":"Vor einem Tag aktualisiert","days":"Vor {{ time }} Tagen aktualisert","week":"Vor einer Woche aktualisiert","weeks":"Vor {{ time }} Wochen aktualisert","error-tooltip":"Fehler beim Aktualiseren aufgetreten. Versuche erneut alle {{ time }} Sekunden..."},"view-all-link":{"label":"Zeige alle {{ number }} Elemente"},"paginator":{"first":"Erste","last":"Letzte","total":"Insgesamt: {{ number }} Seiten","select-page-title":"Seite ausw\xe4hlen"},"confirmation":{"header-text":"Best\xe4tigung","confirm-button":"Ja","cancel-button":"Nein","close":"Schlie\xdfen","error-header-text":"Fehler","done-header-text":"Fertig"},"language":{"title":"Sprache ausw\xe4hlen"},"tabs-window":{"title":"Tab wechseln"}}')}}]);
\ No newline at end of file
diff --git a/cmd/skywire-visor/static/5.c827112cf0298fe67479.js b/cmd/skywire-visor/static/5.c827112cf0298fe67479.js
deleted file mode 100644
index 44ee210b58..0000000000
--- a/cmd/skywire-visor/static/5.c827112cf0298fe67479.js
+++ /dev/null
@@ -1 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[5],{"K+GZ":function(e){e.exports=JSON.parse('{"common":{"save":"Speichern","edit":"\xc4ndern","cancel":"Abbrechen","node-key":"Visor Schl\xfcssel","app-key":"Anwendungs-Schl\xfcssel","discovery":"Discovery","downloaded":"Heruntergeladen","uploaded":"Hochgeladen","delete":"L\xf6schen","none":"Nichts","loading-error":"Beim Laden der Daten ist ein Fehler aufgetreten. Versuche es erneut...","operation-error":"Beim Ausf\xfchren der Aktion ist ein Fehler aufgetreten.","no-connection-error":"Es ist keine Internetverbindung oder Verbindung zum Hypervisor vorhanden.","error":"Fehler:","refreshed":"Daten aktualisiert.","options":"Optionen","logout":"Abmelden","logout-error":"Fehler beim Abmelden."},"tables":{"title":"Ordnen nach","sorting-title":"Geordnet nach:","ascending-order":"(aufsteigend)","descending-order":"(absteigend)"},"inputs":{"errors":{"key-required":"Schl\xfcssel wird ben\xf6tigt.","key-length":"Schl\xfcssel muss 66 Zeichen lang sein."}},"start":{"title":"Start"},"node":{"title":"Visor Details","not-found":"Visor nicht gefunden.","statuses":{"online":"Online","online-tooltip":"Visor ist online","offline":"Offline","offline-tooltip":"Visor ist offline"},"details":{"node-info":{"title":"Visor Info","label":"Bezeichnung:","public-key":"\xd6ffentlicher Schl\xfcssel:","port":"Port:","node-version":"Visor Version:","app-protocol-version":"Anwendungsprotokollversion:","time":{"title":"Online seit:","seconds":"ein paar Sekunden","minute":"1 Minute","minutes":"{{ time }} Minuten","hour":"1 Stunde","hours":"{{ time }} Stunden","day":"1 Tag","days":"{{ time }} Tage","week":"1 Woche","weeks":"{{ time }} Wochen"}},"node-health":{"title":"Zustand Info","status":"Status:","transport-discovery":"Transport Entdeckung:","route-finder":"Route Finder:","setup-node":"Setup Visor:","uptime-tracker":"Verf\xfcgbarkeitsmonitor:","address-resolver":"Addressaufl\xf6ser:","element-offline":"offline"},"node-traffic-data":"Datenverkehr"},"tabs":{"info":"Info","apps":"Anwendungen","routing":"Routing"},"error-load":"Beim Aktualisieren der Visordaten ist ein Fehler aufgetreten."},"nodes":{"title":"Visor Liste","state":"Status","label":"Bezeichnung","key":"Schl\xfcssel","view-node":"Visor betrachten","delete-node":"Visor l\xf6schen","error-load":"Beim Aktualisieren der Visor-Liste ist ein Fehler aufgetreten.","empty":"Es ist kein Visor zu diesem Hypervisor verbunden.","delete-node-confirmation":"Visor wirklich von der Liste l\xf6schen?","deleted":"Visor gel\xf6scht."},"edit-label":{"title":"Bezeichnung \xe4ndern","label":"Bezeichnung","done":"Bezeichnung gespeichert.","default-label-warning":"Die Standardbezeichnung wurde verwendet."},"settings":{"title":"Einstellungen","password":{"initial-config-help":"Diese Option wird verwendet, um das erste Passwort festzulegen. Nachdem ein Passwort festgelegt wurde, ist es nicht m\xf6glich dieses, mit dieser Option zu \xe4ndern.","help":"Optionen um das Passwort zu \xe4ndern.","old-password":"Altes Passwort","new-password":"Neues Passwort","repeat-password":"Neues Passwort wiederholen","password-changed":"Passwort wurde ge\xe4ndert.","error-changing":"Fehler beim \xc4ndern des Passworts aufgetreten.","initial-config":{"title":"Erstes Passwort festlegen","password":"Passwort","repeat-password":"Passwort wiederholen","set-password":"Passwort \xe4ndern","done":"Passwort wurde ge\xe4ndert.","error":"Fehler. Es scheint ein erstes Passwort wurde schon gew\xe4hlt."},"errors":{"bad-old-password":"Altes Passwort falsch","old-password-required":"Altes Passwort wird ben\xf6tigt","new-password-error":"Passwort muss 6-64 Zeichen lang sein.","passwords-not-match":"Passw\xf6rter stimmen nicht \xfcberein.","default-password":"Das Standardpasswort darf nicht verwendet werden (1234)."}},"change-password":"Passwort \xe4ndern","refresh-rate":"Aktualisierungsintervall","refresh-rate-help":"Zeit, bis das System die Daten automatisch aktualisiert.","refresh-rate-confirmation":"Aktualisierungsintervall ge\xe4ndert.","seconds":"Sekunden"},"login":{"password":"Passwort","incorrect-password":"Falsches Passwort.","initial-config":"Erste Konfiguration"},"actions":{"menu":{"terminal":"Terminal","config":"Konfiguration","update":"Aktualisieren","reboot":"Neustart"},"reboot":{"confirmation":"Den Visor wirklich neustarten?","done":"Der Visor wird neu gestartet."},"config":{"title":"Discovery Konfiguration","header":"Discovery Addresse","remove":"Addresse entfernen","add":"Addresse hinzuf\xfcgen","cant-store":"Konfiguration kann nicht gespeichert werden.","success":"Discovery Konfiguration wird durch Neustart angewendet."},"terminal-options":{"full":"Terminal","simple":"Einfaches Terminal"},"terminal":{"title":"Terminal","input-start":"Skywire Terminal f\xfcr {{address}}","error":"Bei der Ausf\xfchrung des Befehls ist ein Fehler aufgetreten."},"update":{"title":"Update","processing":"Suche nach Updates...","processing-button":"Bitte warten","no-update":"Kein Update vorhanden.
Installierte Version: {{ version }}.","update-available":"Es ist ein Update m\xf6glich.
Installierte Version: {{ currentVersion }}
Neue Version: {{ newVersion }}.","done":"Ein Update f\xfcr den Visor wird installiert.","update-error":"Update konnte nicht installiert werden.","install":"Update installieren"}},"apps":{"socksc":{"title":"Mit Visor verbinden","connect-keypair":"Schl\xfcsselpaar eingeben","connect-search":"Visor suchen","connect-history":"Verlauf","versions":"Versionen","location":"Standort","connect":"Verbinden","next-page":"N\xe4chste Seite","prev-page":"Vorherige Seite","auto-startup":"Automatisch mit Visor verbinden"},"sshc":{"title":"SSH Client","connect":"Verbinde mit SSH Server","auto-startup":"Starte SSH client automatisch","connect-keypair":"Schl\xfcsselpaar eingeben","connect-history":"Verlauf"},"sshs":{"title":"SSH-Server","whitelist":{"title":"SSH-Server Whitelist","header":"Schl\xfcssel","add":"Zu Liste hinzuf\xfcgen","remove":"Schl\xfcssel entfernen","enter-key":"Node Schl\xfcssel eingeben","errors":{"cant-save":"\xc4nderungen an der Whitelist konnten nicht gespeichert werden."},"saved-correctly":"\xc4nderungen an der Whitelist gespeichert"},"auto-startup":"Starte SSH-Server automatisch"},"log":{"title":"Log","empty":"Im ausgew\xe4hlten Intervall sind keine Logs vorhanden","filter-button":"Log-Intervall:","filter":{"title":"Filter","filter":"Zeige generierte Logs","7-days":"der letzten 7 Tagen","1-month":"der letzten 30 Tagen","3-months":"der letzten 3 Monaten","6-months":"der letzten 6 Monaten","1-year":"des letzten Jahres","all":"Zeige alle"}},"config":{"title":"Startup Konfiguration"},"menu":{"startup-config":"Startup Konfiguration","log":"Log Nachrichten","whitelist":"Whitelist"},"apps-list":{"title":"Anwendungen","list-title":"Anwendungsliste","app-name":"Name","port":"Port","status":"Status","auto-start":"Auto-Start","empty":"Visor hat keine Anwendungen.","disable-autostart":"Autostart ausschalten","enable-autostart":"Autostart einschalten","autostart-disabled":"Autostart aus","autostart-enabled":"Autostart ein"},"skysocks-settings":{"title":"Skysocks Einstellungen","new-password":"Neues Passwort (Um Passwort zu entfernen leer lassen)","repeat-password":"Passwort wiederholen","passwords-not-match":"Passw\xf6rter stimmen nicht \xfcberein.","save":"Speichern","remove-passowrd-confirmation":"Kein Passwort eingegeben. Wirklich Passwort entfernen?","change-passowrd-confirmation":"Passwort wirklich \xe4ndern?","changes-made":"\xc4nderungen wurden gespeichert."},"skysocks-client-settings":{"title":"Skysocks-Client Einstellungen","remote-visor-tab":"Remote Visor","history-tab":"Verlauf","public-key":"Remote Visor \xf6ffentlicher Schl\xfcssel","remote-key-length-error":"Der \xf6ffentliche Schl\xfcssel muss 66 Zeichen lang sein.","remote-key-chars-error":"Der \xf6ffentliche Schl\xfcssel darf nur hexadezimale Zeichen enthalten.","save":"Speichern","change-key-confirmation":"Wirklich den \xf6ffentlichen Schl\xfcssel des Remote Visors \xe4ndern?","changes-made":"\xc4nderungen wurden gespeichert.","no-history":"Dieser Tab zeigt die letzten {{ number }} \xf6ffentlichen Schl\xfcssel, die benutzt wurden."},"stop-app":"Stopp","start-app":"Start","view-logs":"Zeige Logs","settings":"Einstellungen","error":"Ein Fehler ist aufgetreten.","stop-confirmation":"Anwendung wirklich anhalten?","stop-selected-confirmation":"Ausgew\xe4hlte Anwendung wirklich anhalten?","disable-autostart-confirmation":"Auto-Start f\xfcr diese Anwendung wirklich ausschalten?","enable-autostart-confirmation":"Auto-Start f\xfcr diese Anwendung wirklich einschalten?","disable-autostart-selected-confirmation":"Auto-Start f\xfcr ausgew\xe4hlte Anwendungen wirklich ausschalten?","enable-autostart-selected-confirmation":"Auto-Start f\xfcr ausgew\xe4hlte Anwendungen wirklich einschalten","operation-completed":"Operation ausgef\xfchrt","operation-unnecessary":"Gew\xfcnschte Einstellungen schon aktiv.","status-running":"L\xe4uft","status-stopped":"Gestoppt","status-failed":"Fehler","status-running-tooltip":"Anwendung l\xe4uft","status-stopped-tooltip":"Anwendung gestoppt","status-failed-tooltip":"Ein Fehler ist aufgetreten. Log der Anwendung \xfcberpr\xfcfen."},"transports":{"title":"Transporte","list-title":"Transport-Liste","id":"ID","remote-node":"Remote","type":"Typ","create":"Transport erstellen","delete-confirmation":"Transport wirklich entfernen?","delete-selected-confirmation":"Ausgew\xe4hlte Transporte wirklich entfernen?","delete":"Transport entfernen","deleted":"Transport erfolgreich entfernt.","empty":"Visor hat keine Transporte.","details":{"title":"Details","basic":{"title":"Basis Info","id":"ID:","local-pk":"Lokaler \xf6ffentlicher Schl\xfcssel:","remote-pk":"Remote \xf6ffentlicher Schl\xfcssel:","type":"Typ:"},"data":{"title":"Daten\xfcbertragung","uploaded":"Hochgeladen:","downloaded":"Heruntergeladen:"}},"dialog":{"remote-key":"Remote \xf6ffentlicher Schl\xfcssel:","transport-type":"Transport-Typ","success":"Transport erstellt.","errors":{"remote-key-length-error":"Der remote \xf6ffentliche Schl\xfcssel muss 66 Zeichen lang sein.","remote-key-chars-error":"Der remote \xf6ffentliche Schl\xfcssel darf nur hexadezimale Zeichen enthalten.","transport-type-error":"Ein Transport-Typ wird ben\xf6tigt."}}},"routes":{"title":"Routen","list-title":"Routen-Liste","key":"Schl\xfcssel","rule":"Regel","delete-confirmation":"Diese Route wirklich entfernen?","delete-selected-confirmation":"Ausgew\xe4hlte Routen wirklich entfernen?","delete":"Route entfernen","deleted":"Route erfolgreich entfernt.","empty":"Visor hat keine Routen.","details":{"title":"Details","basic":{"title":"Basis Info","key":"Schl\xfcssel:","rule":"Regel:"},"summary":{"title":"Regel Zusammenfassung","keep-alive":"Keep alive:","type":"Typ:","key-route-id":"Schl\xfcssel-Route ID:"},"specific-fields-titles":{"app":"Anwendung","forward":"Weiterleitung","intermediary-forward":"Vermittelte Weiterleitung"},"specific-fields":{"route-id":"N\xe4chste Routen ID:","transport-id":"N\xe4chste Transport ID:","destination-pk":"Ziel \xf6ffentlicher Schl\xfcssel:","source-pk":"Quelle \xf6ffentlicher Schl\xfcssel:","destination-port":"Ziel Port:","source-port":"Quelle Port:"}}},"copy":{"tooltip":"In Zwischenablage kopieren","tooltip-with-text":"{{ text }} (In Zwischenablage kopieren)","copied":"In Zwischenablage kopiert!"},"selection":{"select-all":"Alle ausw\xe4hlen","unselect-all":"Alle abw\xe4hlen","delete-all":"Alle ausgew\xe4hlten Elemente entfernen","start-all":"Starte ausgew\xe4hlte Anwendung","stop-all":"Stoppe ausgew\xe4hlte Anwendung","enable-autostart-all":"Auto-Start f\xfcr ausgew\xe4hlte Anwendungen einschalten","disable-autostart-all":"Auto-Start f\xfcr ausgew\xe4hlte Anwendungen ausschalten"},"refresh-button":{"seconds":"K\xfcrzlich aktualisiert","minute":"Vor einer Minute aktualisiert","minutes":"Vor {{ time }} Minuten aktualisiert","hour":"Vor einer Stunde aktualisiert","hours":"Vor {{ time }} Stunden aktualisert","day":"Vor einem Tag aktualisiert","days":"Vor {{ time }} Tagen aktualisert","week":"Vor einer Woche aktualisiert","weeks":"Vor {{ time }} Wochen aktualisert","error-tooltip":"Fehler beim Aktualiseren aufgetreten. Versuche erneut alle {{ time }} Sekunden..."},"view-all-link":{"label":"Zeige alle {{ number }} Elemente"},"paginator":{"first":"Erste","last":"Letzte","total":"Insgesamt: {{ number }} Seiten","select-page-title":"Seite ausw\xe4hlen"},"confirmation":{"header-text":"Best\xe4tigung","confirm-button":"Ja","cancel-button":"Nein","close":"Schlie\xdfen","error-header-text":"Fehler"},"language":{"title":"Sprache ausw\xe4hlen"},"tabs-window":{"title":"Tab wechseln"}}')}}]);
\ No newline at end of file
diff --git a/cmd/skywire-visor/static/6.ca7f5530547226bc4317.js b/cmd/skywire-visor/static/6.ca7f5530547226bc4317.js
deleted file mode 100644
index 07e048ddec..0000000000
--- a/cmd/skywire-visor/static/6.ca7f5530547226bc4317.js
+++ /dev/null
@@ -1 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[6],{KPjT:function(e){e.exports=JSON.parse('{"common":{"save":"Save","edit":"Edit","cancel":"Cancel","node-key":"Node Key","app-key":"App Key","discovery":"Discovery","downloaded":"Downloaded","uploaded":"Uploaded","delete":"Delete","none":"None","loading-error":"There was an error getting the data. Retrying...","operation-error":"There was an error trying to complete the operation.","no-connection-error":"There is no internet connection or connection to the Hypervisor.","error":"Error:","refreshed":"Data refreshed.","options":"Options","logout":"Logout","logout-error":"Error logging out."},"tables":{"title":"Order by","sorting-title":"Ordered by:","ascending-order":"(ascending)","descending-order":"(descending)"},"inputs":{"errors":{"key-required":"Key is required.","key-length":"Key must be 66 characters long."}},"start":{"title":"Start"},"node":{"title":"Visor details","not-found":"Visor not found.","statuses":{"online":"Online","online-tooltip":"Visor is online","offline":"Offline","offline-tooltip":"Visor is offline"},"details":{"node-info":{"title":"Visor Info","label":"Label:","public-key":"Public key:","port":"Port:","node-version":"Visor version:","app-protocol-version":"App protocol version:","time":{"title":"Time online:","seconds":"a few seconds","minute":"1 minute","minutes":"{{ time }} minutes","hour":"1 hour","hours":"{{ time }} hours","day":"1 day","days":"{{ time }} days","week":"1 week","weeks":"{{ time }} weeks"}},"node-health":{"title":"Health info","status":"Status:","transport-discovery":"Transport discovery:","route-finder":"Route finder:","setup-node":"Setup node:","uptime-tracker":"Uptime tracker:","address-resolver":"Address resolver:","element-offline":"offline"},"node-traffic-data":"Traffic data"},"tabs":{"info":"Info","apps":"Apps","routing":"Routing"},"error-load":"An error occurred while refreshing the data. Retrying..."},"nodes":{"title":"Visor list","state":"State","label":"Label","key":"Key","view-node":"View visor","delete-node":"Remove visor","error-load":"An error occurred while refreshing the list. Retrying...","empty":"There aren\'t any visors connected to this hypervisor.","delete-node-confirmation":"Are you sure you want to remove the visor from the list?","deleted":"Visor removed."},"edit-label":{"title":"Edit label","label":"Label","done":"Label saved.","default-label-warning":"The default label has been used."},"settings":{"title":"Settings","password":{"initial-config-help":"Use this option for setting the initial password. After a password has been set, it is not possible to use this option to modify it.","help":"Options for changing your password.","old-password":"Old password","new-password":"New password","repeat-password":"Repeat password","password-changed":"Password changed.","error-changing":"Error changing password.","initial-config":{"title":"Set initial password","password":"Password","repeat-password":"Repeat password","set-password":"Set password","done":"Password set. Please use it to access the system.","error":"Error. Please make sure you have not already set the password."},"errors":{"bad-old-password":"The provided old password is not correct.","old-password-required":"Old password is required.","new-password-error":"Password must be 6-64 characters long.","passwords-not-match":"Passwords do not match.","default-password":"Don\'t use the default password (1234)."}},"change-password":"Change password","refresh-rate":"Refresh rate","refresh-rate-help":"Time the system waits to update the data automatically.","refresh-rate-confirmation":"Refresh rate changed.","seconds":"seconds"},"login":{"password":"Password","incorrect-password":"Incorrect password.","initial-config":"Configure initial launch"},"actions":{"menu":{"terminal":"Terminal","config":"Configuration","update":"Update","reboot":"Reboot"},"reboot":{"confirmation":"Are you sure you want to reboot the visor?","done":"The visor is restarting."},"config":{"title":"Discovery configuration","header":"Discovery address","remove":"Remove address","add":"Add address","cant-store":"Unable to store node configuration.","success":"Applying discovery configuration by restarting node process."},"terminal-options":{"full":"Full terminal","simple":"Simple terminal"},"terminal":{"title":"Terminal","input-start":"Skywire terminal for {{address}}","error":"Unexpected error while trying to execute the command."},"update":{"title":"Update","processing":"Looking for updates...","processing-button":"Please wait","no-update":"Currently, there is no update for the visor. The currently installed version is {{ version }}.","update-available":"There is an update available for the visor. Click the \'Install update\' button to continue. The currently installed version is {{ currentVersion }} and the new version is {{ newVersion }}.","done":"The visor is updated.","update-error":"Could not install the update. Please, try again later.","install":"Install update"}},"apps":{"socksc":{"title":"Connect to Node","connect-keypair":"Enter keypair","connect-search":"Search node","connect-history":"History","versions":"Versions","location":"Location","connect":"Connect","next-page":"Next page","prev-page":"Previous page","auto-startup":"Automatically connect to Node"},"sshc":{"title":"SSH Client","connect":"Connect to SSH Server","auto-startup":"Automatically start SSH client","connect-keypair":"Enter keypair","connect-history":"History"},"sshs":{"title":"SSH Server","whitelist":{"title":"SSH Server Whitelist","header":"Key","add":"Add to list","remove":"Remove key","enter-key":"Enter node key","errors":{"cant-save":"Could not save whitelist changes."},"saved-correctly":"Whitelist changes saved successfully."},"auto-startup":"Automatically start SSH server"},"log":{"title":"Log","empty":"There are no log messages for the selected time range.","filter-button":"Only showing logs generated since:","filter":{"title":"Filter","filter":"Only show logs generated since","7-days":"The last 7 days","1-month":"The last 30 days","3-months":"The last 3 months","6-months":"The last 6 months","1-year":"The last year","all":"Show all"}},"config":{"title":"Startup configuration"},"menu":{"startup-config":"Startup configuration","log":"Log messages","whitelist":"Whitelist"},"apps-list":{"title":"Applications","list-title":"Application list","app-name":"Name","port":"Port","status":"Status","auto-start":"Auto start","empty":"Visor doesn\'t have any applications.","disable-autostart":"Disable autostart","enable-autostart":"Enable autostart","autostart-disabled":"Autostart disabled","autostart-enabled":"Autostart enabled"},"skysocks-settings":{"title":"Skysocks Settings","new-password":"New password (Leave empty to remove the password)","repeat-password":"Repeat password","passwords-not-match":"Passwords do not match.","save":"Save","remove-passowrd-confirmation":"You left the password field empty. Are you sure you want to remove the password?","change-passowrd-confirmation":"Are you sure you want to change the password?","changes-made":"The changes have been made."},"skysocks-client-settings":{"title":"Skysocks-Client Settings","remote-visor-tab":"Remote Visor","history-tab":"History","public-key":"Remote visor public key","remote-key-length-error":"The public key must be 66 characters long.","remote-key-chars-error":"The public key must only contain hexadecimal characters.","save":"Save","change-key-confirmation":"Are you sure you want to change the remote visor public key?","changes-made":"The changes have been made.","no-history":"This tab will show the last {{ number }} public keys used."},"stop-app":"Stop","start-app":"Start","view-logs":"View logs","settings":"Settings","error":"An error has occured and it was not possible to perform the operation.","stop-confirmation":"Are you sure you want to stop the app?","stop-selected-confirmation":"Are you sure you want to stop the selected apps?","disable-autostart-confirmation":"Are you sure you want to disable autostart for the app?","enable-autostart-confirmation":"Are you sure you want to enable autostart for the app?","disable-autostart-selected-confirmation":"Are you sure you want to disable autostart for the selected apps?","enable-autostart-selected-confirmation":"Are you sure you want to enable autostart for the selected apps?","operation-completed":"Operation completed.","operation-unnecessary":"The selection already has the requested setting.","status-running":"Running","status-stopped":"Stopped","status-failed":"Failed","status-running-tooltip":"App is currently running","status-stopped-tooltip":"App is currently stopped","status-failed-tooltip":"Something went wrong. Check the app\'s messages for more information"},"transports":{"title":"Transports","list-title":"Transport list","id":"ID","remote-node":"Remote","type":"Type","create":"Create transport","delete-confirmation":"Are you sure you want to delete the transport?","delete-selected-confirmation":"Are you sure you want to delete the selected transports?","delete":"Delete transport","deleted":"Delete operation completed.","empty":"Visor doesn\'t have any transports.","details":{"title":"Details","basic":{"title":"Basic info","id":"ID:","local-pk":"Local public key:","remote-pk":"Remote public key:","type":"Type:"},"data":{"title":"Data transmission","uploaded":"Uploaded data:","downloaded":"Downloaded data:"}},"dialog":{"remote-key":"Remote public key","transport-type":"Transport type","success":"Transport created.","errors":{"remote-key-length-error":"The remote public key must be 66 characters long.","remote-key-chars-error":"The remote public key must only contain hexadecimal characters.","transport-type-error":"The transport type is required."}}},"routes":{"title":"Routes","list-title":"Route list","key":"Key","rule":"Rule","delete-confirmation":"Are you sure you want to delete the route?","delete-selected-confirmation":"Are you sure you want to delete the selected routes?","delete":"Delete route","deleted":"Delete operation completed.","empty":"Visor doesn\'t have any routes.","details":{"title":"Details","basic":{"title":"Basic info","key":"Key:","rule":"Rule:"},"summary":{"title":"Rule summary","keep-alive":"Keep alive:","type":"Rule type:","key-route-id":"Key route ID:"},"specific-fields-titles":{"app":"App fields","forward":"Forward fields","intermediary-forward":"Intermediary forward fields"},"specific-fields":{"route-id":"Next route ID:","transport-id":"Next transport ID:","destination-pk":"Destination public key:","source-pk":"Source public key:","destination-port":"Destination port:","source-port":"Source port:"}}},"copy":{"tooltip":"Click to copy","tooltip-with-text":"{{ text }} (Click to copy)","copied":"Copied!"},"selection":{"select-all":"Select all","unselect-all":"Unselect all","delete-all":"Delete all selected elements","start-all":"Start all selected apps","stop-all":"Stop all selected apps","enable-autostart-all":"Enable autostart for all selected apps","disable-autostart-all":"Disable autostart for all selected apps"},"refresh-button":{"seconds":"Updated a few seconds ago","minute":"Updated 1 minute ago","minutes":"Updated {{ time }} minutes ago","hour":"Updated 1 hour ago","hours":"Updated {{ time }} hours ago","day":"Updated 1 day ago","days":"Updated {{ time }} days ago","week":"Updated 1 week ago","weeks":"Updated {{ time }} weeks ago","error-tooltip":"There was an error updating the data. Retrying automatically every {{ time }} seconds..."},"view-all-link":{"label":"View all {{ number }} elements"},"paginator":{"first":"First","last":"Last","total":"Total: {{ number }} pages","select-page-title":"Select page"},"confirmation":{"header-text":"Confirmation","confirm-button":"Yes","cancel-button":"No","close":"Close","error-header-text":"Error"},"language":{"title":"Select language"},"tabs-window":{"title":"Change tab"}}')}}]);
\ No newline at end of file
diff --git a/cmd/skywire-visor/static/6.d7f14812f0504c4532c0.js b/cmd/skywire-visor/static/6.d7f14812f0504c4532c0.js
new file mode 100644
index 0000000000..cc91b44e29
--- /dev/null
+++ b/cmd/skywire-visor/static/6.d7f14812f0504c4532c0.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[6],{KPjT:function(e){e.exports=JSON.parse('{"common":{"save":"Save","cancel":"Cancel","downloaded":"Downloaded","uploaded":"Uploaded","loading-error":"There was an error getting the data. Retrying...","operation-error":"There was an error trying to complete the operation.","no-connection-error":"There is no internet connection or connection to the Hypervisor.","error":"Error:","refreshed":"Data refreshed.","options":"Options","logout":"Logout","logout-error":"Error logging out.","logout-confirmation":"Are you sure you want to log out?","time-in-ms":"{{ time }}ms","ok":"Ok","unknown":"Unknown","close":"Close"},"labeled-element":{"edit-label":"Edit label","remove-label":"Remove label","copy":"Copy","remove-label-confirmation":"Do you really want to remove the label?","unnamed-element":"Unnamed","unnamed-local-visor":"Local visor","local-element":"Local","tooltip":"Click to copy the entry or change the label","tooltip-with-text":"{{ text }} (Click to copy the entry or change the label)"},"labels":{"title":"Labels","info":"Labels you have entered to easily identify visors, transports and other elements, instead of having to read machine generated identifiers.","list-title":"Label list","label":"Label","id":"Element ID","type":"Type","delete-confirmation":"Are you sure you want to delete the label?","delete-selected-confirmation":"Are you sure you want to delete the selected labels?","delete":"Delete label","deleted":"Delete operation completed.","empty":"There aren\'t any saved labels.","empty-with-filter":"No label matches the selected filtering criteria.","filter-dialog":{"label":"The label must contain","id":"The id must contain","type":"The type must be","type-options":{"any":"Any","visor":"Visor","dmsg-server":"DMSG server","transport":"Transport"}}},"filters":{"filter-action":"Filter","press-to-remove":"(Press to remove the filters)","remove-confirmation":"Are you sure you want to remove the filters?"},"tables":{"title":"Order by","sorting-title":"Ordered by:","sort-by-value":"Value","sort-by-label":"Label","label":"(label)","inverted-order":"(inverted)"},"start":{"title":"Start"},"node":{"title":"Visor details","not-found":"Visor not found.","statuses":{"online":"Online","online-tooltip":"Visor is online.","partially-online":"Online with problems","partially-online-tooltip":"Visor is online but not all services are working. For more information, open the details page and check the \\"Health info\\" section.","offline":"Offline","offline-tooltip":"Visor is offline."},"details":{"node-info":{"title":"Visor Info","label":"Label:","public-key":"Public key:","dmsg-server":"DMSG server:","ping":"Ping:","node-version":"Visor version:","time":{"title":"Time online:","seconds":"a few seconds","minute":"1 minute","minutes":"{{ time }} minutes","hour":"1 hour","hours":"{{ time }} hours","day":"1 day","days":"{{ time }} days","week":"1 week","weeks":"{{ time }} weeks"}},"node-health":{"title":"Health info","status":"Status:","transport-discovery":"Transport discovery:","route-finder":"Route finder:","setup-node":"Setup node:","uptime-tracker":"Uptime tracker:","address-resolver":"Address resolver:","element-offline":"Offline"},"node-traffic-data":"Traffic data"},"tabs":{"info":"Info","apps":"Apps","routing":"Routing"},"error-load":"An error occurred while refreshing the data. Retrying..."},"nodes":{"title":"Visor list","dmsg-title":"DMSG","update-all":"Update all visors","hypervisor":"Hypervisor","state":"State","state-tooltip":"Current state","label":"Label","key":"Key","dmsg-server":"DMSG server","ping":"Ping","hypervisor-info":"This visor is the current Hypervisor.","copy-key":"Copy key","copy-dmsg":"Copy DMSG server key","copy-data":"Copy data","view-node":"View visor","delete-node":"Remove visor","delete-all-offline":"Remove all offline visors","error-load":"An error occurred while refreshing the list. Retrying...","empty":"There aren\'t any visors connected to this hypervisor.","empty-with-filter":"No visor matches the selected filtering criteria.","delete-node-confirmation":"Are you sure you want to remove the visor from the list?","delete-all-offline-confirmation":"Are you sure you want to remove all offline visors from the list?","delete-all-filtered-offline-confirmation":"All offline visors satisfying the current filtering criteria will be removed from the list. Are you sure you want to continue?","deleted":"Visor removed.","deleted-singular":"1 offline visor removed.","deleted-plural":"{{ number }} offline visors removed.","no-visors-to-update":"There are no visors to update.","filter-dialog":{"online":"The visor must be","label":"The label must contain","key":"The public key must contain","dmsg":"The DMSG server key must contain","online-options":{"any":"Online or offline","online":"Online","offline":"Offline"}}},"edit-label":{"label":"Label","done":"Label saved.","label-removed-warning":"The label was removed."},"settings":{"title":"Settings","password":{"initial-config-help":"Use this option for setting the initial password. After a password has been set, it is not possible to use this option to modify it.","help":"Options for changing your password.","old-password":"Old password","new-password":"New password","repeat-password":"Repeat password","password-changed":"Password changed.","error-changing":"Error changing password.","initial-config":{"title":"Set initial password","password":"Password","repeat-password":"Repeat password","set-password":"Set password","done":"Password set. Please use it to access the system.","error":"Error. Please make sure you have not already set the password."},"errors":{"bad-old-password":"The provided old password is not correct.","old-password-required":"Old password is required.","new-password-error":"Password must be 6-64 characters long.","passwords-not-match":"Passwords do not match.","default-password":"Don\'t use the default password (1234)."}},"updater-config":{"open-link":"Show updater settings","open-confirmation":"The updater settings are for experienced users only. Are you sure you want to continue?","help":"Use this form for overriding the settings that will be used by the updater. All empty fields will be ignored. The settings will be used for all updating operations, no mater which element is being updated, so please be careful.","channel":"Channel","version":"Version","archive-url":"Archive URL","checksum-url":"Checksum URL","not-saved":"The changes have not been saved yet.","save":"Save changes","remove-settings":"Remove the settings","saved":"The custom settings have been saved.","removed":"The custom settings have been removed.","save-confirmation":"Are you sure you want to apply the custom settings?","remove-confirmation":"Are you sure you want to remove the custom settings?"},"change-password":"Change password","refresh-rate":"Refresh rate","refresh-rate-help":"Time the system waits to update the data automatically.","refresh-rate-confirmation":"Refresh rate changed.","seconds":"seconds"},"login":{"password":"Password","incorrect-password":"Incorrect password.","initial-config":"Configure initial launch"},"actions":{"menu":{"terminal":"Terminal","config":"Configuration","update":"Update","reboot":"Reboot"},"reboot":{"confirmation":"Are you sure you want to reboot the visor?","done":"The visor is restarting."},"terminal-options":{"full":"Full terminal","simple":"Simple terminal"},"terminal":{"title":"Terminal","input-start":"Skywire terminal for {{address}}","error":"Unexpected error while trying to execute the command."}},"update":{"title":"Update","error-title":"Error","processing":"Looking for updates...","no-update":"There is no update for the visor. The currently installed version is:","no-updates":"No new updates were found.","already-updating":"Some visors are already being updated:","update-available":"The following updates were found:","update-available-singular":"The following updates for 1 visor were found:","update-available-plural":"The following updates for {{ number }} visors were found:","update-available-additional-singular":"The following additional updates for 1 visor were found:","update-available-additional-plural":"The following additional updates for {{ number }} visors were found:","update-instructions":"Click the \'Install updates\' button to continue.","updating":"The update operation has been started, you can open this window again for checking the progress:","version-change":"From {{ currentVersion }} to {{ newVersion }}","selected-channel":"Selected channel:","downloaded-file-name-prefix":"Downloading: ","speed-prefix":"Speed: ","time-downloading-prefix":"Time downloading: ","time-left-prefix":"Aprox. time left: ","starting":"Preparing to update","finished":"Status connection finished","install":"Install updates"},"apps":{"log":{"title":"Log","empty":"There are no log messages for the selected time range.","filter-button":"Only showing logs generated since:","filter":{"title":"Filter","filter":"Only show logs generated since","7-days":"The last 7 days","1-month":"The last 30 days","3-months":"The last 3 months","6-months":"The last 6 months","1-year":"The last year","all":"Show all"}},"apps-list":{"title":"Applications","list-title":"Application list","app-name":"Name","port":"Port","state":"State","state-tooltip":"Current state","auto-start":"Auto start","empty":"Visor doesn\'t have any applications.","empty-with-filter":"No app matches the selected filtering criteria.","disable-autostart":"Disable autostart","enable-autostart":"Enable autostart","autostart-disabled":"Autostart disabled","autostart-enabled":"Autostart enabled","unavailable-logs-error":"Unable to show the logs while the app is not running.","filter-dialog":{"state":"The state must be","name":"The name must contain","port":"The port must contain","autostart":"The autostart must be","state-options":{"any":"Running or stopped","running":"Running","stopped":"Stopped"},"autostart-options":{"any":"Enabled or disabled","enabled":"Enabled","disabled":"Disabled"}}},"vpn-socks-server-settings":{"socks-title":"Skysocks Settings","vpn-title":"VPN-Server Settings","new-password":"New password (Leave empty to remove the password)","repeat-password":"Repeat password","passwords-not-match":"Passwords do not match.","secure-mode-check":"Use secure mode","secure-mode-info":"When active, the server doesn\'t allow client/server SSH and doesn\'t allow any traffic from VPN clients to the server local network.","save":"Save","remove-passowrd-confirmation":"You left the password field empty. Are you sure you want to remove the password?","change-passowrd-confirmation":"Are you sure you want to change the password?","changes-made":"The changes have been made."},"vpn-socks-client-settings":{"socks-title":"Skysocks-Client Settings","vpn-title":"VPN-Client Settings","discovery-tab":"Search","remote-visor-tab":"Enter manually","history-tab":"History","settings-tab":"Settings","use":"Use this data","change-note":"Change note","remove-entry":"Remove entry","note":"Note:","note-entered-manually":"Entered manually","note-obtained":"Obtained from the discovery service","key":"Key:","port":"Port:","location":"Location:","state-available":"Available","state-offline":"Offline","public-key":"Remote visor public key","password":"Password","password-history-warning":"Note: the password will not be saved in the history.","copy-pk-info":"Copy public key.","copied-pk-info":"The public key has been copied.","copy-pk-error":"There was a problem copying the public key.","no-elements":"Currently there are no elements to show. Please try again later.","no-elements-for-filters":"There are no elements that meet the filter criteria.","no-filter":"No filter has been selected","click-to-change":"Click to change","remote-key-length-error":"The public key must be 66 characters long.","remote-key-chars-error":"The public key must only contain hexadecimal characters.","save":"Save","remove-from-history-confirmation":"Are you sure you want to remove the entry from the history?","change-key-confirmation":"Are you sure you want to change the remote visor public key?","changes-made":"The changes have been made.","no-history":"This tab will show the last {{ number }} public keys used.","default-note-warning":"The default note has been used.","pagination-info":"{{ currentElementsRange }} of {{ totalElements }}","killswitch-check":"Activate killswitch","killswitch-info":"When active, all network connections will be disabled if the app is running but the VPN protection is interrupted (for temporary errors or any other problem).","settings-changed-alert":" The changes have not been saved yet.","save-settings":"Save settings","change-note-dialog":{"title":"Change Note","note":"Note"},"password-dialog":{"title":"Enter Password","password":"Password","info":"You are being asked for a password because a password was set when the selected entry was created, but the it was not saved for security reasons. You can leave the password empty if needed.","continue-button":"Continue"},"filter-dialog":{"title":"Filters","country":"The country must be","any-country":"Any","location":"The location must contain","pub-key":"The public key must contain","apply":"Apply"}},"stop-app":"Stop","start-app":"Start","view-logs":"View logs","settings":"Settings","error":"An error has occured and it was not possible to perform the operation.","stop-confirmation":"Are you sure you want to stop the app?","stop-selected-confirmation":"Are you sure you want to stop the selected apps?","disable-autostart-confirmation":"Are you sure you want to disable autostart for the app?","enable-autostart-confirmation":"Are you sure you want to enable autostart for the app?","disable-autostart-selected-confirmation":"Are you sure you want to disable autostart for the selected apps?","enable-autostart-selected-confirmation":"Are you sure you want to enable autostart for the selected apps?","operation-completed":"Operation completed.","operation-unnecessary":"The selection already has the requested setting.","status-running":"Running","status-stopped":"Stopped","status-failed":"Failed","status-running-tooltip":"App is currently running","status-stopped-tooltip":"App is currently stopped","status-failed-tooltip":"Something went wrong. Check the app\'s messages for more information"},"transports":{"title":"Transports","remove-all-offline":"Remove all offline transports","remove-all-offline-confirmation":"Are you sure you want to remove all offline transports?","remove-all-filtered-offline-confirmation":"All offline transports satisfying the current filtering criteria will be removed. Are you sure you want to continue?","info":"Connections you have with remote Skywire visors, to allow local Skywire apps to communicate with apps running on those remote visors.","list-title":"Transport list","state":"State","state-tooltip":"Current state","id":"ID","remote-node":"Remote","type":"Type","create":"Create transport","delete-confirmation":"Are you sure you want to delete the transport?","delete-selected-confirmation":"Are you sure you want to delete the selected transports?","delete":"Delete transport","deleted":"Delete operation completed.","empty":"Visor doesn\'t have any transports.","empty-with-filter":"No transport matches the selected filtering criteria.","statuses":{"online":"Online","online-tooltip":"Transport is online","offline":"Offline","offline-tooltip":"Transport is offline"},"details":{"title":"Details","basic":{"title":"Basic info","state":"State:","id":"ID:","local-pk":"Local public key:","remote-pk":"Remote public key:","type":"Type:"},"data":{"title":"Data transmission","uploaded":"Uploaded data:","downloaded":"Downloaded data:"}},"dialog":{"remote-key":"Remote public key","label":"Identification name (optional)","transport-type":"Transport type","success":"Transport created.","success-without-label":"The transport was created, but it was not possible to save the label.","errors":{"remote-key-length-error":"The remote public key must be 66 characters long.","remote-key-chars-error":"The remote public key must only contain hexadecimal characters.","transport-type-error":"The transport type is required."}},"filter-dialog":{"online":"The transport must be","id":"The id must contain","remote-node":"The remote key must contain","online-options":{"any":"Online or offline","online":"Online","offline":"Offline"}}},"routes":{"title":"Routes","info":"Paths used to reach the remote visors to which transports have been established. Routes are automatically generated as needed.","list-title":"Route list","key":"Key","type":"Type","source":"Source","destination":"Destination","delete-confirmation":"Are you sure you want to delete the route?","delete-selected-confirmation":"Are you sure you want to delete the selected routes?","delete":"Delete route","deleted":"Delete operation completed.","empty":"Visor doesn\'t have any routes.","empty-with-filter":"No route matches the selected filtering criteria.","details":{"title":"Details","basic":{"title":"Basic info","key":"Key:","rule":"Rule:"},"summary":{"title":"Rule summary","keep-alive":"Keep alive:","type":"Rule type:","key-route-id":"Key route ID:"},"specific-fields-titles":{"app":"App fields","forward":"Forward fields","intermediary-forward":"Intermediary forward fields"},"specific-fields":{"route-id":"Next route ID:","transport-id":"Next transport ID:","destination-pk":"Destination public key:","source-pk":"Source public key:","destination-port":"Destination port:","source-port":"Source port:"}},"filter-dialog":{"key":"The key must contain","type":"The type must be","source":"The source must contain","destination":"The destination must contain","any-type-option":"Any"}},"copy":{"tooltip":"Click to copy","tooltip-with-text":"{{ text }} (Click to copy)","copied":"Copied!"},"selection":{"select-all":"Select all","unselect-all":"Unselect all","delete-all":"Delete all selected elements","start-all":"Start all selected apps","stop-all":"Stop all selected apps","enable-autostart-all":"Enable autostart for all selected apps","disable-autostart-all":"Disable autostart for all selected apps"},"refresh-button":{"seconds":"Updated a few seconds ago","minute":"Updated 1 minute ago","minutes":"Updated {{ time }} minutes ago","hour":"Updated 1 hour ago","hours":"Updated {{ time }} hours ago","day":"Updated 1 day ago","days":"Updated {{ time }} days ago","week":"Updated 1 week ago","weeks":"Updated {{ time }} weeks ago","error-tooltip":"There was an error updating the data. Retrying automatically every {{ time }} seconds..."},"view-all-link":{"label":"View all {{ number }} elements"},"paginator":{"first":"First","last":"Last","total":"Total: {{ number }} pages","select-page-title":"Select page"},"confirmation":{"header-text":"Confirmation","confirm-button":"Yes","cancel-button":"No","close":"Close","error-header-text":"Error","done-header-text":"Done"},"language":{"title":"Select language"},"tabs-window":{"title":"Change tab"}}')}}]);
\ No newline at end of file
diff --git a/cmd/skywire-visor/static/7.1c17a3e5e903dcd94774.js b/cmd/skywire-visor/static/7.1c17a3e5e903dcd94774.js
deleted file mode 100644
index 900dc5fa88..0000000000
--- a/cmd/skywire-visor/static/7.1c17a3e5e903dcd94774.js
+++ /dev/null
@@ -1 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{amrp:function(e){e.exports=JSON.parse('{"common":{"save":"Save","cancel":"Cancel","downloaded":"Downloaded","uploaded":"Uploaded","loading-error":"There was an error getting the data. Retrying...","operation-error":"There was an error trying to complete the operation.","no-connection-error":"There is no internet connection or connection to the Hypervisor.","error":"Error:","refreshed":"Data refreshed.","options":"Options","logout":"Logout","logout-error":"Error logging out.","logout-confirmation":"Are you sure you want to log out?","time-in-ms":"{{ time }}ms","ok":"Ok","unknown":"Unknown","close":"Close"},"labeled-element":{"edit-label":"Edit label","remove-label":"Remove label","copy":"Copy","remove-label-confirmation":"Do you really want to remove the label?","unnamed-element":"Unnamed","unnamed-local-visor":"Local visor","local-element":"Local","tooltip":"Click to copy the entry or change the label","tooltip-with-text":"{{ text }} (Click to copy the entry or change the label)"},"labels":{"title":"Labels","info":"Labels you have entered to easily identify visors, transports and other elements, instead of having to read machine generated identifiers.","list-title":"Label list","label":"Label","id":"Element ID","type":"Type","delete-confirmation":"Are you sure you want to delete the label?","delete-selected-confirmation":"Are you sure you want to delete the selected labels?","delete":"Delete label","deleted":"Delete operation completed.","empty":"There aren\'t any saved labels.","empty-with-filter":"No label matches the selected filtering criteria.","filter-dialog":{"label":"The label must contain","id":"The id must contain","type":"The type must be","type-options":{"any":"Any","visor":"Visor","dmsg-server":"DMSG server","transport":"Transport"}}},"filters":{"filter-action":"Filter","press-to-remove":"(Press to remove the filters)","remove-confirmation":"Are you sure you want to remove the filters?"},"tables":{"title":"Order by","sorting-title":"Ordered by:","sort-by-value":"Value","sort-by-label":"Label","label":"(label)","inverted-order":"(inverted)"},"start":{"title":"Start"},"node":{"title":"Visor details","not-found":"Visor not found.","statuses":{"online":"Online","online-tooltip":"Visor is online.","partially-online":"Online with problems","partially-online-tooltip":"Visor is online but not all services are working. For more information, open the details page and check the \\"Health info\\" section.","offline":"Offline","offline-tooltip":"Visor is offline."},"details":{"node-info":{"title":"Visor Info","label":"Label:","public-key":"Public key:","port":"Port:","dmsg-server":"DMSG server:","ping":"Ping:","node-version":"Visor version:","time":{"title":"Time online:","seconds":"a few seconds","minute":"1 minute","minutes":"{{ time }} minutes","hour":"1 hour","hours":"{{ time }} hours","day":"1 day","days":"{{ time }} days","week":"1 week","weeks":"{{ time }} weeks"}},"node-health":{"title":"Health info","status":"Status:","transport-discovery":"Transport discovery:","route-finder":"Route finder:","setup-node":"Setup node:","uptime-tracker":"Uptime tracker:","address-resolver":"Address resolver:","element-offline":"Offline"},"node-traffic-data":"Traffic data"},"tabs":{"info":"Info","apps":"Apps","routing":"Routing"},"error-load":"An error occurred while refreshing the data. Retrying..."},"nodes":{"title":"Visor list","dmsg-title":"DMSG","update-all":"Update all visors","hypervisor":"Hypervisor","state":"State","state-tooltip":"Current state","label":"Label","key":"Key","dmsg-server":"DMSG server","ping":"Ping","hypervisor-info":"This visor is the current Hypervisor.","copy-key":"Copy key","copy-dmsg":"Copy DMSG server key","copy-data":"Copy data","view-node":"View visor","delete-node":"Remove visor","delete-all-offline":"Remove all offline visors","error-load":"An error occurred while refreshing the list. Retrying...","empty":"There aren\'t any visors connected to this hypervisor.","empty-with-filter":"No visor matches the selected filtering criteria.","delete-node-confirmation":"Are you sure you want to remove the visor from the list?","delete-all-offline-confirmation":"Are you sure you want to remove all offline visors from the list?","delete-all-filtered-offline-confirmation":"All offline visors satisfying the current filtering criteria will be removed from the list. Are you sure you want to continue?","deleted":"Visor removed.","deleted-singular":"1 offline visor removed.","deleted-plural":"{{ number }} offline visors removed.","no-visors-to-update":"There are no visors to update.","filter-dialog":{"online":"The visor must be","label":"The label must contain","key":"The public key must contain","dmsg":"The DMSG server key must contain","online-options":{"any":"Online or offline","online":"Online","offline":"Offline"}}},"edit-label":{"label":"Label","done":"Label saved.","label-removed-warning":"The label was removed."},"settings":{"title":"Settings","password":{"initial-config-help":"Use this option for setting the initial password. After a password has been set, it is not possible to use this option to modify it.","help":"Options for changing your password.","old-password":"Old password","new-password":"New password","repeat-password":"Repeat password","password-changed":"Password changed.","error-changing":"Error changing password.","initial-config":{"title":"Set initial password","password":"Password","repeat-password":"Repeat password","set-password":"Set password","done":"Password set. Please use it to access the system.","error":"Error. Please make sure you have not already set the password."},"errors":{"bad-old-password":"The provided old password is not correct.","old-password-required":"Old password is required.","new-password-error":"Password must be 6-64 characters long.","passwords-not-match":"Passwords do not match.","default-password":"Don\'t use the default password (1234)."}},"updater-config":{"open-link":"Show updater settings","open-confirmation":"The updater settings are for experienced users only. Are you sure you want to continue?","help":"Use this form for overriding the settings that will be used by the updater. All empty fields will be ignored. The settings will be used for all updating operations, no mater which element is being updated, so please be careful.","channel":"Channel","version":"Version","archive-url":"Archive URL","checksum-url":"Checksum URL","not-saved":"The changes have not been saved yet.","save":"Save changes","remove-settings":"Remove the settings","saved":"The custom settings have been saved.","removed":"The custom settings have been removed.","save-confirmation":"Are you sure you want to apply the custom settings?","remove-confirmation":"Are you sure you want to remove the custom settings?"},"change-password":"Change password","refresh-rate":"Refresh rate","refresh-rate-help":"Time the system waits to update the data automatically.","refresh-rate-confirmation":"Refresh rate changed.","seconds":"seconds"},"login":{"password":"Password","incorrect-password":"Incorrect password.","initial-config":"Configure initial launch"},"actions":{"menu":{"terminal":"Terminal","config":"Configuration","update":"Update","reboot":"Reboot"},"reboot":{"confirmation":"Are you sure you want to reboot the visor?","done":"The visor is restarting."},"terminal-options":{"full":"Full terminal","simple":"Simple terminal"},"terminal":{"title":"Terminal","input-start":"Skywire terminal for {{address}}","error":"Unexpected error while trying to execute the command."}},"update":{"title":"Update","error-title":"Error","processing":"Looking for updates...","no-update":"There is no update for the visor. The currently installed version is:","no-updates":"No new updates were found.","already-updating":"Some visors are already being updated:","update-available":"The following updates were found:","update-available-singular":"The following updates for 1 visor were found:","update-available-plural":"The following updates for {{ number }} visors were found:","update-available-additional-singular":"The following additional updates for 1 visor were found:","update-available-additional-plural":"The following additional updates for {{ number }} visors were found:","update-instructions":"Click the \'Install updates\' button to continue.","updating":"The update operation has been started, you can open this window again for checking the progress:","version-change":"From {{ currentVersion }} to {{ newVersion }}","selected-channel":"Selected channel:","downloaded-file-name-prefix":"Downloading: ","speed-prefix":"Speed: ","time-downloading-prefix":"Time downloading: ","time-left-prefix":"Aprox. time left: ","starting":"Preparing to update","finished":"Status connection finished","install":"Install updates"},"apps":{"log":{"title":"Log","empty":"There are no log messages for the selected time range.","filter-button":"Only showing logs generated since:","filter":{"title":"Filter","filter":"Only show logs generated since","7-days":"The last 7 days","1-month":"The last 30 days","3-months":"The last 3 months","6-months":"The last 6 months","1-year":"The last year","all":"Show all"}},"apps-list":{"title":"Applications","list-title":"Application list","app-name":"Name","port":"Port","state":"State","state-tooltip":"Current state","auto-start":"Auto start","empty":"Visor doesn\'t have any applications.","empty-with-filter":"No app matches the selected filtering criteria.","disable-autostart":"Disable autostart","enable-autostart":"Enable autostart","autostart-disabled":"Autostart disabled","autostart-enabled":"Autostart enabled","unavailable-logs-error":"Unable to show the logs while the app is not running.","filter-dialog":{"state":"The state must be","name":"The name must contain","port":"The port must contain","autostart":"The autostart must be","state-options":{"any":"Running or stopped","running":"Running","stopped":"Stopped"},"autostart-options":{"any":"Enabled or disabled","enabled":"Enabled","disabled":"Disabled"}}},"vpn-socks-server-settings":{"socks-title":"Skysocks Settings","vpn-title":"VPN-Server Settings","new-password":"New password (Leave empty to remove the password)","repeat-password":"Repeat password","passwords-not-match":"Passwords do not match.","secure-mode-check":"Use secure mode","secure-mode-info":"When active, the server doesn\'t allow client/server SSH and doesn\'t allow any traffic from VPN clients to the server local network.","save":"Save","remove-passowrd-confirmation":"You left the password field empty. Are you sure you want to remove the password?","change-passowrd-confirmation":"Are you sure you want to change the password?","changes-made":"The changes have been made."},"vpn-socks-client-settings":{"socks-title":"Skysocks-Client Settings","vpn-title":"VPN-Client Settings","discovery-tab":"Search","remote-visor-tab":"Enter manually","history-tab":"History","settings-tab":"Settings","use":"Use this data","change-note":"Change note","remove-entry":"Remove entry","note":"Note:","note-entered-manually":"Entered manually","note-obtained":"Obtained from the discovery service","key":"Key:","port":"Port:","location":"Location:","state-available":"Available","state-offline":"Offline","public-key":"Remote visor public key","password":"Password","password-history-warning":"Note: the password will not be saved in the history.","copy-pk-info":"Copy public key.","copied-pk-info":"The public key has been copied.","copy-pk-error":"There was a problem copying the public key.","no-elements":"Currently there are no elements to show. Please try again later.","no-elements-for-filters":"There are no elements that meet the filter criteria.","no-filter":"No filter has been selected","click-to-change":"Click to change","remote-key-length-error":"The public key must be 66 characters long.","remote-key-chars-error":"The public key must only contain hexadecimal characters.","save":"Save","remove-from-history-confirmation":"Are you sure you want to remove the entry from the history?","change-key-confirmation":"Are you sure you want to change the remote visor public key?","changes-made":"The changes have been made.","no-history":"This tab will show the last {{ number }} public keys used.","default-note-warning":"The default note has been used.","pagination-info":"{{ currentElementsRange }} of {{ totalElements }}","killswitch-check":"Activate killswitch","killswitch-info":"When active, all network connections will be disabled if the app is running but the VPN protection is interrupted (for temporary errors or any other problem).","settings-changed-alert":" The changes have not been saved yet.","save-settings":"Save settings","change-note-dialog":{"title":"Change Note","note":"Note"},"password-dialog":{"title":"Enter Password","password":"Password","info":"You are being asked for a password because a password was set when the selected entry was created, but the it was not saved for security reasons. You can leave the password empty if needed.","continue-button":"Continue"},"filter-dialog":{"title":"Filters","country":"The country must be","any-country":"Any","location":"The location must contain","pub-key":"The public key must contain","apply":"Apply"}},"stop-app":"Stop","start-app":"Start","view-logs":"View logs","settings":"Settings","error":"An error has occured and it was not possible to perform the operation.","stop-confirmation":"Are you sure you want to stop the app?","stop-selected-confirmation":"Are you sure you want to stop the selected apps?","disable-autostart-confirmation":"Are you sure you want to disable autostart for the app?","enable-autostart-confirmation":"Are you sure you want to enable autostart for the app?","disable-autostart-selected-confirmation":"Are you sure you want to disable autostart for the selected apps?","enable-autostart-selected-confirmation":"Are you sure you want to enable autostart for the selected apps?","operation-completed":"Operation completed.","operation-unnecessary":"The selection already has the requested setting.","status-running":"Running","status-stopped":"Stopped","status-failed":"Failed","status-running-tooltip":"App is currently running","status-stopped-tooltip":"App is currently stopped","status-failed-tooltip":"Something went wrong. Check the app\'s messages for more information"},"transports":{"title":"Transports","remove-all-offline":"Remove all offline transports","remove-all-offline-confirmation":"Are you sure you want to remove all offline transports?","remove-all-filtered-offline-confirmation":"All offline transports satisfying the current filtering criteria will be removed. Are you sure you want to continue?","info":"Connections you have with remote Skywire visors, to allow local Skywire apps to communicate with apps running on those remote visors.","list-title":"Transport list","state":"State","state-tooltip":"Current state","id":"ID","remote-node":"Remote","type":"Type","create":"Create transport","delete-confirmation":"Are you sure you want to delete the transport?","delete-selected-confirmation":"Are you sure you want to delete the selected transports?","delete":"Delete transport","deleted":"Delete operation completed.","empty":"Visor doesn\'t have any transports.","empty-with-filter":"No transport matches the selected filtering criteria.","statuses":{"online":"Online","online-tooltip":"Transport is online","offline":"Offline","offline-tooltip":"Transport is offline"},"details":{"title":"Details","basic":{"title":"Basic info","state":"State:","id":"ID:","local-pk":"Local public key:","remote-pk":"Remote public key:","type":"Type:"},"data":{"title":"Data transmission","uploaded":"Uploaded data:","downloaded":"Downloaded data:"}},"dialog":{"remote-key":"Remote public key","label":"Identification name (optional)","transport-type":"Transport type","success":"Transport created.","success-without-label":"The transport was created, but it was not possible to save the label.","errors":{"remote-key-length-error":"The remote public key must be 66 characters long.","remote-key-chars-error":"The remote public key must only contain hexadecimal characters.","transport-type-error":"The transport type is required."}},"filter-dialog":{"online":"The transport must be","id":"The id must contain","remote-node":"The remote key must contain","online-options":{"any":"Online or offline","online":"Online","offline":"Offline"}}},"routes":{"title":"Routes","info":"Paths used to reach the remote visors to which transports have been established. Routes are automatically generated as needed.","list-title":"Route list","key":"Key","type":"Type","source":"Source","destination":"Destination","delete-confirmation":"Are you sure you want to delete the route?","delete-selected-confirmation":"Are you sure you want to delete the selected routes?","delete":"Delete route","deleted":"Delete operation completed.","empty":"Visor doesn\'t have any routes.","empty-with-filter":"No route matches the selected filtering criteria.","details":{"title":"Details","basic":{"title":"Basic info","key":"Key:","rule":"Rule:"},"summary":{"title":"Rule summary","keep-alive":"Keep alive:","type":"Rule type:","key-route-id":"Key route ID:"},"specific-fields-titles":{"app":"App fields","forward":"Forward fields","intermediary-forward":"Intermediary forward fields"},"specific-fields":{"route-id":"Next route ID:","transport-id":"Next transport ID:","destination-pk":"Destination public key:","source-pk":"Source public key:","destination-port":"Destination port:","source-port":"Source port:"}},"filter-dialog":{"key":"The key must contain","type":"The type must be","source":"The source must contain","destination":"The destination must contain","any-type-option":"Any"}},"copy":{"tooltip":"Click to copy","tooltip-with-text":"{{ text }} (Click to copy)","copied":"Copied!"},"selection":{"select-all":"Select all","unselect-all":"Unselect all","delete-all":"Delete all selected elements","start-all":"Start all selected apps","stop-all":"Stop all selected apps","enable-autostart-all":"Enable autostart for all selected apps","disable-autostart-all":"Disable autostart for all selected apps"},"refresh-button":{"seconds":"Updated a few seconds ago","minute":"Updated 1 minute ago","minutes":"Updated {{ time }} minutes ago","hour":"Updated 1 hour ago","hours":"Updated {{ time }} hours ago","day":"Updated 1 day ago","days":"Updated {{ time }} days ago","week":"Updated 1 week ago","weeks":"Updated {{ time }} weeks ago","error-tooltip":"There was an error updating the data. Retrying automatically every {{ time }} seconds..."},"view-all-link":{"label":"View all {{ number }} elements"},"paginator":{"first":"First","last":"Last","total":"Total: {{ number }} pages","select-page-title":"Select page"},"confirmation":{"header-text":"Confirmation","confirm-button":"Yes","cancel-button":"No","close":"Close","error-header-text":"Error","done-header-text":"Done"},"language":{"title":"Select language"},"tabs-window":{"title":"Change tab"}}')}}]);
\ No newline at end of file
diff --git a/cmd/skywire-visor/static/7.72a6169da00a1ffee18d.js b/cmd/skywire-visor/static/7.72a6169da00a1ffee18d.js
new file mode 100644
index 0000000000..1f558ed8b7
--- /dev/null
+++ b/cmd/skywire-visor/static/7.72a6169da00a1ffee18d.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{amrp:function(e){e.exports=JSON.parse('{"common":{"save":"Save","cancel":"Cancel","downloaded":"Downloaded","uploaded":"Uploaded","loading-error":"There was an error getting the data. Retrying...","operation-error":"There was an error trying to complete the operation.","no-connection-error":"There is no internet connection or connection to the Hypervisor.","error":"Error:","refreshed":"Data refreshed.","options":"Options","logout":"Logout","logout-error":"Error logging out.","logout-confirmation":"Are you sure you want to log out?","time-in-ms":"{{ time }}ms.","time-in-segs":"{{ time }}s.","ok":"Ok","unknown":"Unknown","close":"Close","window-size-error":"The window is too narrow for the content."},"labeled-element":{"edit-label":"Edit label","remove-label":"Remove label","copy":"Copy","remove-label-confirmation":"Do you really want to remove the label?","unnamed-element":"Unnamed","unnamed-local-visor":"Local visor","local-element":"Local","tooltip":"Click to copy the entry or change the label","tooltip-with-text":"{{ text }} (Click to copy the entry or change the label)"},"labels":{"title":"Labels","info":"Labels you have entered to easily identify visors, transports and other elements, instead of having to read machine generated identifiers.","list-title":"Label list","label":"Label","id":"Element ID","type":"Type","delete-confirmation":"Are you sure you want to delete the label?","delete-selected-confirmation":"Are you sure you want to delete the selected labels?","delete":"Delete label","deleted":"Delete operation completed.","empty":"There aren\'t any saved labels.","empty-with-filter":"No label matches the selected filtering criteria.","filter-dialog":{"label":"The label must contain","id":"The id must contain","type":"The type must be","type-options":{"any":"Any","visor":"Visor","dmsg-server":"DMSG server","transport":"Transport"}}},"filters":{"filter-action":"Filter","filter-info":"Filter list.","press-to-remove":"(Press to remove the filters)","remove-confirmation":"Are you sure you want to remove the filters?"},"tables":{"title":"Order by","sorting-title":"Ordered by:","sort-by-value":"Value","sort-by-label":"Label","label":"(label)","inverted-order":"(inverted)"},"start":{"title":"Start"},"node":{"title":"Visor details","not-found":"Visor not found.","statuses":{"online":"Online","online-tooltip":"Visor is online.","partially-online":"Online with problems","partially-online-tooltip":"Visor is online but not all services are working. For more information, open the details page and check the \\"Health info\\" section.","offline":"Offline","offline-tooltip":"Visor is offline."},"details":{"node-info":{"title":"Visor Info","label":"Label:","public-key":"Public key:","ip":"IP:","dmsg-server":"DMSG server:","ping":"Ping:","node-version":"Visor version:","time":{"title":"Time online:","seconds":"a few seconds","minute":"1 minute","minutes":"{{ time }} minutes","hour":"1 hour","hours":"{{ time }} hours","day":"1 day","days":"{{ time }} days","week":"1 week","weeks":"{{ time }} weeks"}},"router-info":{"title":"Router Info","min-hops":"Min hops:","max-hops":"Max hops:","change-config-button":"Change configuration"},"node-health":{"title":"Health Info","status":"Status:","transport-discovery":"Transport discovery:","route-finder":"Route finder:","setup-node":"Setup node:","uptime-tracker":"Uptime tracker:","address-resolver":"Address resolver:","element-offline":"Offline"},"node-traffic-data":"Traffic data"},"tabs":{"info":"Info","apps":"Apps","routing":"Routing"},"error-load":"An error occurred while refreshing the data. Retrying..."},"router-config":{"title":"Router Configuration","info":"Here you can configure how many hops the connections must pass through other Skywire visors before reaching the final destination. NOTE: the changes will not affect the existing routes.","min-hops":"Min hops","save-config-button":"Save configuration","done":"Changes saved."},"nodes":{"title":"Visor list","dmsg-title":"DMSG","update-all":"Update all online visors","hypervisor":"Hypervisor","state":"State","state-tooltip":"Current state","label":"Label","key":"Key","dmsg-server":"DMSG server","ping":"Ping","hypervisor-info":"This visor is the current Hypervisor.","copy-key":"Copy key","copy-dmsg":"Copy DMSG server key","copy-data":"Copy data","view-node":"View visor","delete-node":"Remove visor","delete-all-offline":"Remove all offline visors","error-load":"An error occurred while refreshing the list. Retrying...","empty":"There aren\'t any visors connected to this hypervisor.","empty-with-filter":"No visor matches the selected filtering criteria.","delete-node-confirmation":"Are you sure you want to remove the visor from the list?","delete-all-offline-confirmation":"Are you sure you want to remove all offline visors from the list?","delete-all-filtered-offline-confirmation":"All offline visors satisfying the current filtering criteria will be removed from the list. Are you sure you want to continue?","deleted":"Visor removed.","deleted-singular":"1 offline visor removed.","deleted-plural":"{{ number }} offline visors removed.","no-visors-to-update":"There are no visors to update.","filter-dialog":{"online":"The visor must be","label":"The label must contain","key":"The public key must contain","dmsg":"The DMSG server key must contain","online-options":{"any":"Online or offline","online":"Online","offline":"Offline"}}},"edit-label":{"label":"Label","done":"Label saved.","label-removed-warning":"The label was removed."},"settings":{"title":"Settings","password":{"initial-config-help":"Use this option for setting the initial password. After a password has been set, it is not possible to use this option to modify it.","help":"Options for changing your password.","old-password":"Old password","new-password":"New password","repeat-password":"Repeat password","password-changed":"Password changed.","error-changing":"Error changing password.","initial-config":{"title":"Set initial password","password":"Password","repeat-password":"Repeat password","set-password":"Set password","done":"Password set. Please use it to access the system.","error":"Error. Please make sure you have not already set the password."},"errors":{"bad-old-password":"The provided old password is not correct.","old-password-required":"Old password is required.","new-password-error":"Password must be 6-64 characters long.","passwords-not-match":"Passwords do not match.","default-password":"Don\'t use the default password (1234)."}},"updater-config":{"open-link":"Show updater settings","open-confirmation":"The updater settings are for experienced users only. Are you sure you want to continue?","help":"Use this form for overriding the settings that will be used by the updater. All empty fields will be ignored. The settings will be used for all updating operations, no mater which element is being updated, so please be careful.","channel":"Channel","version":"Version","archive-url":"Archive URL","checksum-url":"Checksum URL","not-saved":"The changes have not been saved yet.","save":"Save changes","remove-settings":"Remove the settings","saved":"The custom settings have been saved.","removed":"The custom settings have been removed.","save-confirmation":"Are you sure you want to apply the custom settings?","remove-confirmation":"Are you sure you want to remove the custom settings?"},"change-password":"Change password","refresh-rate":"Refresh rate","refresh-rate-help":"Time the system waits to update the data automatically.","refresh-rate-confirmation":"Refresh rate changed.","seconds":"seconds"},"login":{"password":"Password","incorrect-password":"Incorrect password.","initial-config":"Configure initial launch"},"actions":{"menu":{"terminal":"Terminal","config":"Configuration","update":"Update","reboot":"Reboot","logs":"View logs"},"reboot":{"confirmation":"Are you sure you want to reboot the visor?","done":"The visor is restarting."},"terminal-options":{"full":"Full terminal","simple":"Simple terminal"},"terminal":{"title":"Terminal","input-start":"Skywire terminal for {{address}}","error":"Unexpected error while trying to execute the command."}},"update":{"title":"Update","error-title":"Error","processing":"Looking for updates...","no-update":"There is no update for the visor. The currently installed version is:","no-updates":"No new updates were found.","already-updating":"Some visors are already being updated:","update-available":"The following updates were found:","update-available-singular":"The following updates for 1 visor were found:","update-available-plural":"The following updates for {{ number }} visors were found:","update-available-additional-singular":"The following additional updates for 1 visor were found:","update-available-additional-plural":"The following additional updates for {{ number }} visors were found:","update-instructions":"Click the \'Install updates\' button to continue.","updating":"The update operation has been started, you can open this window again for checking the progress:","version-change":"From {{ currentVersion }} to {{ newVersion }}","selected-channel":"Selected channel:","downloaded-file-name-prefix":"Downloading: ","speed-prefix":"Speed: ","time-downloading-prefix":"Time downloading: ","time-left-prefix":"Aprox. time left: ","starting":"Preparing to update","finished":"Status connection finished","install":"Install updates"},"apps":{"log":{"title":"Log","empty":"There are no log messages for the selected time range.","filter-button":"Only showing logs generated since:","filter":{"title":"Filter","filter":"Only show logs generated since","7-days":"The last 7 days","1-month":"The last 30 days","3-months":"The last 3 months","6-months":"The last 6 months","1-year":"The last year","all":"Show all"}},"apps-list":{"title":"Applications","list-title":"Application list","app-name":"Name","port":"Port","state":"State","state-tooltip":"Current state","auto-start":"Auto start","empty":"Visor doesn\'t have any applications.","empty-with-filter":"No app matches the selected filtering criteria.","disable-autostart":"Disable autostart","enable-autostart":"Enable autostart","autostart-disabled":"Autostart disabled","autostart-enabled":"Autostart enabled","unavailable-logs-error":"Unable to show the logs while the app is not running.","filter-dialog":{"state":"The state must be","name":"The name must contain","port":"The port must contain","autostart":"The autostart must be","state-options":{"any":"Running or stopped","running":"Running","stopped":"Stopped"},"autostart-options":{"any":"Enabled or disabled","enabled":"Enabled","disabled":"Disabled"}}},"vpn-socks-server-settings":{"socks-title":"Skysocks Settings","vpn-title":"VPN-Server Settings","new-password":"New password (Leave empty to remove the password)","repeat-password":"Repeat password","passwords-not-match":"Passwords do not match.","secure-mode-check":"Use secure mode","secure-mode-info":"When active, the server doesn\'t allow client/server SSH and doesn\'t allow any traffic from VPN clients to the server local network.","save":"Save","remove-passowrd-confirmation":"You left the password field empty. Are you sure you want to remove the password?","change-passowrd-confirmation":"Are you sure you want to change the password?","changes-made":"The changes have been made."},"vpn-socks-client-settings":{"socks-title":"Skysocks-Client Settings","vpn-title":"VPN-Client Settings","discovery-tab":"Search","remote-visor-tab":"Enter manually","history-tab":"History","settings-tab":"Settings","use":"Use this data","change-note":"Change note","remove-entry":"Remove entry","note":"Note:","note-entered-manually":"Entered manually","note-obtained":"Obtained from the discovery service","key":"Key:","port":"Port:","location":"Location:","state-available":"Available","state-offline":"Offline","public-key":"Remote visor public key","password":"Password","password-history-warning":"Note: the password will not be saved in the history.","copy-pk-info":"Copy public key.","copied-pk-info":"The public key has been copied.","copy-pk-error":"There was a problem copying the public key.","no-elements":"Currently there are no elements to show. Please try again later.","no-elements-for-filters":"There are no elements that meet the filter criteria.","no-filter":"No filter has been selected","click-to-change":"Click to change","remote-key-length-error":"The public key must be 66 characters long.","remote-key-chars-error":"The public key must only contain hexadecimal characters.","save":"Save","remove-from-history-confirmation":"Are you sure you want to remove the entry from the history?","change-key-confirmation":"Are you sure you want to change the remote visor public key?","changes-made":"The changes have been made.","no-history":"This tab will show the last {{ number }} public keys used.","default-note-warning":"The default note has been used.","pagination-info":"{{ currentElementsRange }} of {{ totalElements }}","killswitch-check":"Activate killswitch","killswitch-info":"When active, all network connections will be disabled if the app is running but the VPN protection is interrupted (for temporary errors or any other problem). This avoids data leaks.","settings-changed-alert":" The changes have not been saved yet.","save-settings":"Save settings","change-note-dialog":{"title":"Change Note","note":"Note"},"password-dialog":{"title":"Enter Password","password":"Password","info":"You are being asked for a password because a password was set when the selected entry was created, but the it was not saved for security reasons. You can leave the password empty if needed.","continue-button":"Continue"},"filter-dialog":{"title":"Filters","country":"The country must be","any-country":"Any","location":"The location must contain","pub-key":"The public key must contain","apply":"Apply"}},"stop-app":"Stop","start-app":"Start","view-logs":"View logs","settings":"Settings","open":"Open","error":"An error has occured and it was not possible to perform the operation.","stop-confirmation":"Are you sure you want to stop the app?","stop-selected-confirmation":"Are you sure you want to stop the selected apps?","disable-autostart-confirmation":"Are you sure you want to disable autostart for the app?","enable-autostart-confirmation":"Are you sure you want to enable autostart for the app?","disable-autostart-selected-confirmation":"Are you sure you want to disable autostart for the selected apps?","enable-autostart-selected-confirmation":"Are you sure you want to enable autostart for the selected apps?","operation-completed":"Operation completed.","operation-unnecessary":"The selection already has the requested setting.","status-running":"Running","status-stopped":"Stopped","status-failed":"Failed","status-running-tooltip":"App is currently running","status-stopped-tooltip":"App is currently stopped","status-failed-tooltip":"Something went wrong. Check the app\'s messages for more information"},"transports":{"title":"Transports","remove-all-offline":"Remove all offline transports","remove-all-offline-confirmation":"Are you sure you want to remove all offline transports?","remove-all-filtered-offline-confirmation":"All offline transports satisfying the current filtering criteria will be removed. Are you sure you want to continue?","info":"Connections you have with remote Skywire visors, to allow local Skywire apps to communicate with apps running on those remote visors.","list-title":"Transport list","state":"State","state-tooltip":"Current state","id":"ID","remote-node":"Remote","type":"Type","create":"Create transport","delete-confirmation":"Are you sure you want to delete the transport?","delete-selected-confirmation":"Are you sure you want to delete the selected transports?","delete":"Delete transport","deleted":"Delete operation completed.","empty":"Visor doesn\'t have any transports.","empty-with-filter":"No transport matches the selected filtering criteria.","statuses":{"online":"Online","online-tooltip":"Transport is online","offline":"Offline","offline-tooltip":"Transport is offline"},"details":{"title":"Details","basic":{"title":"Basic info","state":"State:","id":"ID:","local-pk":"Local public key:","remote-pk":"Remote public key:","type":"Type:"},"data":{"title":"Data transmission","uploaded":"Uploaded data:","downloaded":"Downloaded data:"}},"dialog":{"remote-key":"Remote public key","label":"Identification name (optional)","transport-type":"Transport type","success":"Transport created.","success-without-label":"The transport was created, but it was not possible to save the label.","errors":{"remote-key-length-error":"The remote public key must be 66 characters long.","remote-key-chars-error":"The remote public key must only contain hexadecimal characters.","transport-type-error":"The transport type is required."}},"filter-dialog":{"online":"The transport must be","id":"The id must contain","remote-node":"The remote key must contain","online-options":{"any":"Online or offline","online":"Online","offline":"Offline"}}},"routes":{"title":"Routes","info":"Paths used to reach the remote visors to which transports have been established. Routes are automatically generated as needed.","list-title":"Route list","key":"Key","type":"Type","source":"Source","destination":"Destination","delete-confirmation":"Are you sure you want to delete the route?","delete-selected-confirmation":"Are you sure you want to delete the selected routes?","delete":"Delete route","deleted":"Delete operation completed.","empty":"Visor doesn\'t have any routes.","empty-with-filter":"No route matches the selected filtering criteria.","details":{"title":"Details","basic":{"title":"Basic info","key":"Key:","rule":"Rule:"},"summary":{"title":"Rule summary","keep-alive":"Keep alive:","type":"Rule type:","key-route-id":"Key route ID:"},"specific-fields-titles":{"app":"App fields","forward":"Forward fields","intermediary-forward":"Intermediary forward fields"},"specific-fields":{"route-id":"Next route ID:","transport-id":"Next transport ID:","destination-pk":"Destination public key:","source-pk":"Source public key:","destination-port":"Destination port:","source-port":"Source port:"}},"filter-dialog":{"key":"The key must contain","type":"The type must be","source":"The source must contain","destination":"The destination must contain","any-type-option":"Any"}},"copy":{"tooltip":"Click to copy","tooltip-with-text":"{{ text }} (Click to copy)","copied":"Copied!"},"selection":{"select-all":"Select all","unselect-all":"Unselect all","delete-all":"Delete all selected elements","start-all":"Start all selected apps","stop-all":"Stop all selected apps","enable-autostart-all":"Enable autostart for all selected apps","disable-autostart-all":"Disable autostart for all selected apps"},"refresh-button":{"seconds":"Updated a few seconds ago","minute":"Updated 1 minute ago","minutes":"Updated {{ time }} minutes ago","hour":"Updated 1 hour ago","hours":"Updated {{ time }} hours ago","day":"Updated 1 day ago","days":"Updated {{ time }} days ago","week":"Updated 1 week ago","weeks":"Updated {{ time }} weeks ago","error-tooltip":"There was an error updating the data. Retrying automatically every {{ time }} seconds..."},"view-all-link":{"label":"View all {{ number }} elements"},"paginator":{"first":"First","last":"Last","total":"Total: {{ number }} pages","select-page-title":"Select page"},"confirmation":{"header-text":"Confirmation","confirm-button":"Yes","cancel-button":"No","close":"Close","error-header-text":"Error","done-header-text":"Done"},"language":{"title":"Select language"},"tabs-window":{"title":"Change tab"},"vpn":{"title":"VPN Control Panel","start":"Start","servers":"Servers","settings":"Settings","starting-blocked-server-error":"Unable to connect to the selected server because it has been added to the blocked servers list.","unexpedted-error":"An unexpected error occurred and the operation could not be completed.","remote-access-title":"It appears that you are accessing the system remotely","remote-access-text":"This application only allows you to manage the VPN protection of the device on which it was installed. Changes made with it will not affect remote devices like the one you seem to be using. Also, the displayed IP data may be incorrect.","server-change":{"busy-error":"The system is busy. Please wait.","backend-error":"It was not possible to change the server. Please make sure the public key is correct and the VPN app is running.","already-selected-warning":"The selected server is already being used.","change-server-while-connected-confirmation":"The VPN protection will be interrupted while changing the server and some data may be transmitted unprotected during the process. Do you want to continue?","start-same-server-confirmation":"You had already selected that server. Do you want to connect to it?"},"error-page":{"text":"The VPN client app is not available.","more-info":"It was not possible to connect to the VPN client app. This may be due to a configuration error, an unexpected problem with the visor or because you used an invalid public key in the URL.","text-pk":"Invalid configuration.","more-info-pk":"The application cannot be started because you have not specified the visor public key.","text-storage":"Error saving data.","more-info-storage":"There has been a conflict when trying to save the data and the application has been closed to prevent errors. This could happen if you open the application in more than one tab or window.","text-pk-change":"Invalid operation.","more-info-pk-change":"Please use this application to manage only one VPN client."},"connection-info":{"state-connecting":"Connecting","state-connecting-info":"The VPN protection is being activated.","state-connected":"Connected","state-connected-info":"The VPN protection is on.","state-disconnecting":"Disconnecting","state-disconnecting-info":"The VPN protection is being deactivated.","state-reconnecting":"Reconnecting","state-reconnecting-info":"The VPN protection is being restored.","state-disconnected":"Disconnected","state-disconnected-info":"The VPN protection is off.","state-info":"Current connection status.","latency-info":"Current latency.","upload-info":"Upload speed.","download-info":"Download speed."},"status-page":{"start-title":"Start VPN","no-server":"No server selected!","disconnect":"Disconnect","disconnect-confirmation":"Are you sure you want to stop the VPN protection?","entered-manually":"Entered manually","upload-info":"Uploaded data stats.","download-info":"Downloaded data stats.","latency-info":"Latency stats.","total-data-label":"total","problem-connecting-error":"It was not possible to connect to the server. The server may be invalid or temporarily down.","problem-starting-error":"It was not possible to start the VPN. Please make sure the base VPN client app is running.","problem-stopping-error":"It was not possible to stop the VPN. Please make sure the base VPN client app is running.","generic-problem-error":"It was not possible to perform the operation. Please make sure the base VPN client app is running.","select-server-warning":"Please select a server first.","data":{"ip":"IP address:","ip-problem-info":"There was a problem trying to get the IP. Please verify it using an external service.","ip-country-problem-info":"There was a problem trying to get the country. Please verify it using an external service.","ip-refresh-info":"Refresh","ip-refresh-time-warning":"Please wait {{ seconds }} second(s) before refreshing the data.","ip-refresh-loading-warning":"Please wait for the previous operation to finish.","country":"Country:","server":"Server:","server-note":"Server note:","original-server-note":"Original server note:","local-pk":"Local visor public key:","remote-pk":"Remote visor public key:","unavailable":"Unavailable"}},"server-options":{"tooltip":"Options","connect-without-password":"Connect without password","connect-without-password-confirmation":"The connection will be made without the password. Are you sure you want to continue?","connect-using-password":"Connect using a password","edit-name":"Custom name","edit-label":"Custom note","make-favorite":"Make favorite","make-favorite-confirmation":"Are you sure you want to mark this server as favorite? It will be removed from the blocked list.","make-favorite-done":"Added to the favorites list.","remove-from-favorites":"Remove from favorites","remove-from-favorites-done":"Removed from the favorites list.","block":"Block server","block-done":"Added to the blocked list.","block-confirmation":"Are you sure you want to block this server? It will be removed from the favorites list.","block-selected-confirmation":"Are you sure you want to block the currently selected server? All connections will be closed.","block-selected-favorite-confirmation":"Are you sure you want to block the currently selected server? All connections will be closed and it will be removed from the favorites list.","unblock":"Unblock server","unblock-done":"Removed from the blocked list.","remove-from-history":"Remove from history","remove-from-history-confirmation":"Are you sure you want to remove this server from the history?","remove-from-history-done":"Removed from history.","edit-value":{"name-title":"Custom Name","note-title":"Custom Note","name-label":"Custom name","note-label":"Custom note","apply-button":"Apply","changes-made-confirmation":"The change has been made."}},"server-conditions":{"selected-info":"This is the currently selected server.","blocked-info":"This server is in the blocked list.","favorite-info":"This server is in the favorites list.","history-info":"This server is in the server history.","has-password-info":"A password was set for connecting with this server."},"server-list":{"date-small-table-label":"Date","date-info":"Last time you used this server.","country-small-table-label":"Country","country-info":"Country where the server is located.","name-small-table-label":"Name","location-small-table-label":"Location","public-key-small-table-label":"Pk","public-key-info":"Server public key.","congestion-rating-small-table-label":"Congestion rating","congestion-rating-info":"Rating of the server related to how congested it tends to be.","congestion-small-table-label":"Congestion","congestion-info":"Current server congestion.","latency-rating-small-table-label":"Latency rating","latency-rating-info":"Rating of the server related to how much latency it tends to have.","latency-small-table-label":"Latency","latency-info":"Current server latency.","hops-small-table-label":"Hops","hops-info":"How many hops are needed for connecting with the server.","note-small-table-label":"Note","note-info":"Note about the server.","gold-rating-info":"Gold","silver-rating-info":"Silver","bronze-rating-info":"Bronze","notes-info":"Custom note: {{ custom }} - Original note: {{ original }}","empty-discovery":"Currently there are no VPN servers to show. Please try again later.","empty-history":"There is no history to show.","empty-favorites":"There are no favorite servers to show.","empty-blocked":"There are no blocked servers to show.","empty-with-filter":"No VPN server matches the selected filtering criteria.","add-manually-info":"Add server manually.","current-filters":"Current filters (press to remove)","none":"None","unknown":"Unknown","tabs":{"public":"Public","history":"History","favorites":"Favorites","blocked":"Blocked"},"add-server-dialog":{"title":"Enter manually","pk-label":"Server public key","password-label":"Server password (if any)","name-label":"Server name (optional)","note-label":"Personal note (optional)","pk-length-error":"The public key must be 66 characters long.","pk-chars-error":"The public key must only contain hexadecimal characters.","use-server-button":"Use server"},"password-dialog":{"title":"Enter Password","password-if-any-label":"Server password (if any)","password-label":"Server password","continue-button":"Continue"},"filter-dialog":{"country":"The country must be","name":"The name must contain","location":"The location must contain","public-key":"The public key must contain","congestion-rating":"The congestion rating must be","latency-rating":"The latency rating must be","rating-options":{"any":"Any","gold":"Gold","silver":"Silver","bronze":"Bronze"},"country-options":{"any":"Any"}}},"settings-page":{"setting-small-table-label":"Setting","value-small-table-label":"Value","killswitch":"Killswitch","killswitch-info":"When active, all network connections will be disabled if the app is running but the VPN protection is interrupted (for temporary errors or any other problem). This avoids data leaks.","get-ip":"Get IP info","get-ip-info":"When active, the application will use external services to obtain information about the current IP.","data-units":"Data units","data-units-info":"Allows to select the units that will be used to display the data transmission statistics.","setting-on":"On","setting-off":"Off","working-warning":"The system is busy. Please wait for the previous operation to finish.","change-while-connected-confirmation":"The VPN protection will be interrupted while changing the setting. Do you want to continue?","data-units-modal":{"title":"Data Units","only-bits":"Bits for all stats","only-bytes":"Bytes for all stats","bits-speed-and-bytes-volume":"Bits for speed and bytes for volume (default)"}}}}')}}]);
\ No newline at end of file
diff --git a/cmd/skywire-visor/static/8.2df6eecb0737fbac3a92.js b/cmd/skywire-visor/static/8.2df6eecb0737fbac3a92.js
new file mode 100644
index 0000000000..b619e52e67
--- /dev/null
+++ b/cmd/skywire-visor/static/8.2df6eecb0737fbac3a92.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[8],{"ZF/7":function(e){e.exports=JSON.parse('{"common":{"save":"Guardar","cancel":"Cancelar","downloaded":"Recibido","uploaded":"Enviado","loading-error":"Hubo un error obteniendo los datos. Reintentando...","operation-error":"Hubo un error al intentar completar la operaci\xf3n.","no-connection-error":"No hay conexi\xf3n a Internet o conexi\xf3n con el hipervisor.","error":"Error:","refreshed":"Datos refrescados.","options":"Opciones","logout":"Cerrar sesi\xf3n","logout-error":"Error cerrando la sesi\xf3n.","logout-confirmation":"Are you sure you want to log out?","time-in-ms":"{{ time }}ms.","time-in-segs":"{{ time }}s.","ok":"Ok","unknown":"Desconocido","close":"Cerrar","window-size-error":"La ventana es demasiado estrecha para el contenido."},"labeled-element":{"edit-label":"Editar etiqueta","remove-label":"Remover etiqueta","copy":"Copiar","remove-label-confirmation":"\xbfRealmente desea eliminar la etiqueta?","unnamed-element":"Sin nombre","unnamed-local-visor":"Visor local","local-element":"Local","tooltip":"Haga clic para copiar la entrada o cambiar la etiqueta","tooltip-with-text":"{{ text }} (Haga clic para copiar la entrada o cambiar la etiqueta)"},"labels":{"title":"Etiquetas","info":"Etiquetas que ha introducido para identificar f\xe1cilmente visores, transportes y otros elementos, en lugar de tener que leer identificadores generados por una m\xe1quina.","list-title":"Lista de etiquetas","label":"Etiqueta","id":"ID del elemento","type":"Tipo","delete-confirmation":"\xbfSeguro que desea borrar la etiqueta?","delete-selected-confirmation":"\xbfSeguro que desea borrar las etiquetas seleccionados?","delete":"Borrar etiqueta","deleted":"Operaci\xf3n de borrado completada.","empty":"No hay etiquetas guardadas.","empty-with-filter":"Ninguna etiqueta coincide con los criterios de filtrado seleccionados.","filter-dialog":{"label":"La etiqueta debe contener","id":"El id debe contener","type":"El tipo debe ser","type-options":{"any":"Cualquiera","visor":"Visor","dmsg-server":"Servidor DMSG","transport":"Transporte"}}},"filters":{"filter-action":"Filtrar","filter-info":"Lista de filtros.","press-to-remove":"(Presione para remover los filtros)","remove-confirmation":"\xbfSeguro que desea remover los filtros?"},"tables":{"title":"Ordenar por","sorting-title":"Ordenado por:","sort-by-value":"Valor","sort-by-label":"Etiqueta","label":"(etiqueta)","inverted-order":"(invertido)"},"start":{"title":"Inicio"},"node":{"title":"Detalles del visor","not-found":"Visor no encontrado.","statuses":{"online":"Online","online-tooltip":"El visor se encuentra online.","partially-online":"Online con problemas","partially-online-tooltip":"El visor se encuentra online pero no todos los servicios est\xe1n funcionando. Para m\xe1s informaci\xf3n, abra la p\xe1gina de detalles y consulte la secci\xf3n \\"Informaci\xf3n de salud\\".","offline":"Offline","offline-tooltip":"El visor se encuentra offline."},"details":{"node-info":{"title":"Informaci\xf3n del visor","label":"Etiqueta:","public-key":"Llave p\xfablica:","ip":"IP:","dmsg-server":"Servidor DMSG:","ping":"Ping:","node-version":"Versi\xf3n del visor:","time":{"title":"Tiempo online:","seconds":"unos segundos","minute":"1 minuto","minutes":"{{ time }} minutos","hour":"1 hora","hours":"{{ time }} horas","day":"1 d\xeda","days":"{{ time }} d\xedas","week":"1 semana","weeks":"{{ time }} semanas"}},"router-info":{"title":"Informaci\xf3n del Enrutador","min-hops":"Saltos m\xednimos:","max-hops":"Saltos m\xe1ximos:","change-config-button":"Cambiar configuraci\xf3n"},"node-health":{"title":"Informaci\xf3n de Salud","status":"Estatus:","transport-discovery":"Transport discovery:","route-finder":"Route finder:","setup-node":"Setup node:","uptime-tracker":"Uptime tracker:","address-resolver":"Address resolver:","element-offline":"Offline"},"node-traffic-data":"Datos de tr\xe1fico"},"tabs":{"info":"Info","apps":"Apps","routing":"Enrutamiento"},"error-load":"Hubo un error al intentar refrescar los datos. Reintentando..."},"router-config":{"title":"Configuraci\xf3n del Enrutador","info":"Aqu\xed podr\xe1 configurar cuantos saltos la conexi\xf3n deber\xe1 realizar a trav\xe9s de otros visores de Skywire antes de alcanzar el destino final. NOTA: los cambios no afectar\xe1n a las rutas ya existentes.","min-hops":"Saltos m\xednimos","save-config-button":"Guardar configuraci\xf3n","done":"Cambios guardados."},"nodes":{"title":"Lista de visores","dmsg-title":"DMSG","update-all":"Actualizar todos los visores online","hypervisor":"Hypervisor","state":"Estado","state-tooltip":"Estado actual","label":"Etiqueta","key":"Llave","dmsg-server":"Servidor DMSG","ping":"Ping","hypervisor-info":"Este visor es el Hypervisor actual.","copy-key":"Copiar llave","copy-dmsg":"Copiar llave DMSG","copy-data":"Copiar datos","view-node":"Ver visor","delete-node":"Remover visor","delete-all-offline":"Remover todos los visores offline","error-load":"Hubo un error al intentar refrescar la lista. Reintentando...","empty":"No hay ning\xfan visor conectado a este hypervisor.","empty-with-filter":"Ningun visor coincide con los criterios de filtrado seleccionados.","delete-node-confirmation":"\xbfSeguro que desea remover el visor de la lista?","delete-all-offline-confirmation":"\xbfSeguro que desea remover todos los visores offline de la lista?","delete-all-filtered-offline-confirmation":"Todos los visores offline que satisfagan los criterios de filtrado actuales ser\xe1n removidos de la lista. \xbfSeguro que desea continuar?","deleted":"Visor removido.","deleted-singular":"1 visor offline removido.","deleted-plural":"{{ number }} visores offline removidos.","no-visors-to-update":"No hay visores para actualizar.","filter-dialog":{"online":"El visor debe estar","label":"La etiqueta debe contener","key":"La llave debe contener","dmsg":"La llave del servidor DMSG debe contener","online-options":{"any":"Online u offline","online":"Online","offline":"Offline"}}},"edit-label":{"label":"Etiqueta","done":"Etiqueta guardada.","label-removed-warning":"La etiqueta fue removida."},"settings":{"title":"Configuraci\xf3n","password":{"initial-config-help":"Use esta opci\xf3n para establecer la contrase\xf1a inicial. Despu\xe9s de establecer una contrase\xf1a no es posible usar esta opci\xf3n para modificarla.","help":"Opciones para cambiar la contrase\xf1a.","old-password":"Contrase\xf1a actual","new-password":"Nueva contrase\xf1a","repeat-password":"Repita la contrase\xf1a","password-changed":"Contrase\xf1a cambiada.","error-changing":"Error cambiando la contrase\xf1a.","initial-config":{"title":"Establecer contrase\xf1a inicial","password":"Contrase\xf1a","repeat-password":"Repita la contrase\xf1a","set-password":"Establecer contrase\xf1a","done":"Contrase\xf1a establecida. Por favor \xfasela para acceder al sistema.","error":"Error. Por favor aseg\xfarese de que no hubiese establecido la contrase\xf1a anteriormente."},"errors":{"bad-old-password":"La contrase\xf1a actual introducida no es correcta.","old-password-required":"La contrase\xf1a actual es requerida.","new-password-error":"La contrase\xf1a debe tener entre 6 y 64 caracteres.","passwords-not-match":"Las contrase\xf1as no coinciden.","default-password":"No utilice la contrase\xf1a por defecto (1234)."}},"updater-config":{"open-link":"Mostrar la configuraci\xf3n del actualizador","open-confirmation":"La configuraci\xf3n del actualizador es s\xf3lo para usuarios experimentados. Seguro que desea continuar?","help":"Utilice este formulario para modificar la configuraci\xf3n que utilizar\xe1 el actualizador. Se ignorar\xe1n todos los campos vac\xedos. La configuraci\xf3n se utilizar\xe1 para todas las operaciones de actualizaci\xf3n, sin importar qu\xe9 elemento se est\xe9 actualizando, as\xed que por favor tenga cuidado.","channel":"Canal","version":"Versi\xf3n","archive-url":"URL del archivo","checksum-url":"URL del checksum","not-saved":"Los cambios a\xfan no se han guardado.","save":"Guardar cambios","remove-settings":"Remover la configuraci\xf3n","saved":"Las configuracion personalizada ha sido guardada.","removed":"Las configuracion personalizada ha sido removida.","save-confirmation":"\xbfSeguro que desea aplicar la configuraci\xf3n personalizada?","remove-confirmation":"\xbfSeguro que desea remover la configuraci\xf3n personalizada?"},"change-password":"Cambiar contrase\xf1a","refresh-rate":"Frecuencia de refrescado","refresh-rate-help":"Tiempo que el sistema espera para actualizar autom\xe1ticamente los datos.","refresh-rate-confirmation":"Frecuencia de refrescado cambiada.","seconds":"segundos"},"login":{"password":"Contrase\xf1a","incorrect-password":"Contrase\xf1a incorrecta.","initial-config":"Configurar lanzamiento inicial"},"actions":{"menu":{"terminal":"Terminal","config":"Configuraci\xf3n","update":"Actualizar","reboot":"Reiniciar","logs":"Ver logs"},"reboot":{"confirmation":"\xbfSeguro que desea reiniciar el visor?","done":"El visor se est\xe1 reiniciando."},"terminal-options":{"full":"Terminal completa","simple":"Terminal simple"},"terminal":{"title":"Terminal","input-start":"Terminal de Skywire para {{address}}","error":"Error inesperado mientras se intentaba ejecutar el comando."}},"update":{"title":"Actualizar","error-title":"Error","processing":"Buscando actualizaciones...","no-update":"No hay ninguna actualizaci\xf3n para el visor. La versi\xf3n instalada actualmente es:","no-updates":"No se encontraron nuevas actualizaciones.","already-updating":"Algunos visores ya est\xe1n siendo actualizandos:","update-available":"Las siguientes actualizaciones fueron encontradas:","update-available-singular":"Las siguientes actualizaciones para 1 visor fueron encontradas:","update-available-plural":"Las siguientes actualizaciones para {{ number }} visores fueron encontradas:","update-available-additional-singular":"Las siguientes actualizaciones adicionales para 1 visor fueron encontradas:","update-available-additional-plural":"Las siguientes actualizaciones adicionales para {{ number }} visores fueron encontradas:","update-instructions":"Haga clic en el bot\xf3n \'Instalar actualizaciones\' para continuar.","updating":"La operaci\xf3n de actualizaci\xf3n se ha iniciado, puede abrir esta ventana nuevamente para verificar el progreso:","version-change":"De {{ currentVersion }} a {{ newVersion }}","selected-channel":"Canal seleccionado:","downloaded-file-name-prefix":"Descargando: ","speed-prefix":"Velocidad: ","time-downloading-prefix":"Tiempo descargando: ","time-left-prefix":"Tiempo aprox. faltante: ","starting":"Preparando para actualizar","finished":"Conexi\xf3n de estado terminada","install":"Instalar actualizaciones"},"apps":{"log":{"title":"Log","empty":"No hay mensajes de log para el rango de fecha seleccionado.","filter-button":"Mostrando s\xf3lo logs generados desde:","filter":{"title":"Filtro","filter":"Mostrar s\xf3lo logs generados desde","7-days":"Los \xfaltimos 7 d\xedas","1-month":"Los \xfaltimos 30 d\xedas","3-months":"Los \xfaltimos 3 meses","6-months":"Los \xfaltimos 6 meses","1-year":"El \xfaltimo a\xf1o","all":"mostrar todos"}},"apps-list":{"title":"Aplicaciones","list-title":"Lista de aplicaciones","app-name":"Nombre","port":"Puerto","state":"Estado","state-tooltip":"Estado actual","auto-start":"Autoinicio","empty":"El visor no tiene ninguna aplicaci\xf3n.","empty-with-filter":"Ninguna app coincide con los criterios de filtrado seleccionados.","disable-autostart":"Deshabilitar autoinicio","enable-autostart":"Habilitar autoinicio","autostart-disabled":"Autoinicio deshabilitado","autostart-enabled":"Autoinicio habilitado","unavailable-logs-error":"No es posible mostrar los logs mientras la aplicaci\xf3n no se est\xe1 ejecutando.","filter-dialog":{"state":"El estado debe ser","name":"El nombre debe contener","port":"El puerto debe contener","autostart":"El autoinicio debe estar","state-options":{"any":"Iniciada o detenida","running":"Iniciada","stopped":"Detenida"},"autostart-options":{"any":"Activado or desactivado","enabled":"Activado","disabled":"Desactivado"}}},"vpn-socks-server-settings":{"socks-title":"Configuraci\xf3n de Skysocks","vpn-title":"Configuraci\xf3n de VPN-Server","new-password":"Nueva contrase\xf1a (dejar en blanco para eliminar la contrase\xf1a)","repeat-password":"Repita la contrase\xf1a","passwords-not-match":"Las contrase\xf1as no coinciden.","secure-mode-check":"Usar modo seguro","secure-mode-info":"Cuando est\xe1 activo, el servidor no permite SSH con los clientes y no permite ning\xfan tr\xe1fico de clientes VPN a la red local del servidor.","save":"Guardar","remove-passowrd-confirmation":"Ha dejado el campo de contrase\xf1a vac\xedo. \xbfSeguro que desea eliminar la contrase\xf1a?","change-passowrd-confirmation":"\xbfSeguro que desea cambiar la contrase\xf1a?","changes-made":"Los cambios han sido realizados."},"vpn-socks-client-settings":{"socks-title":"Configuraci\xf3n de Skysocks-Client","vpn-title":"Configuraci\xf3n de VPN-Client","discovery-tab":"Buscar","remote-visor-tab":"Introducir manualmente","settings-tab":"Configuracion","history-tab":"Historial","use":"Usar estos datos","change-note":"Cambiar nota","remove-entry":"Remover entrada","note":"Nota:","note-entered-manually":"Introducido manualmente","note-obtained":"Obtenido del servicio de descubrimiento","key":"Llave:","port":"Puerto:","location":"Ubicaci\xf3n:","state-available":"Disponible","state-offline":"Offline","public-key":"Llave p\xfablica del visor remoto","password":"Contrase\xf1a","password-history-warning":"Nota: la contrase\xf1a no se guardar\xe1 en el historial.","copy-pk-info":"Copiar la llave p\xfablica.","copied-pk-info":"La llave p\xfablica ha sido copiada.","copy-pk-error":"Hubo un problema al intentar cambiar la llave p\xfablica.","no-elements":"Actualmente no hay elementos para mostrar. Por favor, int\xe9ntelo de nuevo m\xe1s tarde.","no-elements-for-filters":"No hay elementos que cumplan los criterios de filtro.","no-filter":"No se ha seleccionado ning\xfan filtro","click-to-change":"Haga clic para cambiar","remote-key-length-error":"La llave p\xfablica debe tener 66 caracteres.","remote-key-chars-error":"La llave p\xfablica s\xf3lo debe contener caracteres hexadecimales.","save":"Guardar","remove-from-history-confirmation":"\xbfSeguro de que desea eliminar la entrada del historial?","change-key-confirmation":"\xbfSeguro que desea cambiar la llave p\xfablica del visor remoto?","changes-made":"Los cambios han sido realizados.","no-history":"Esta pesta\xf1a mostrar\xe1 las \xfaltimas {{ number }} llaves p\xfablicas usadas.","default-note-warning":"La nota por defecto ha sido utilizada.","pagination-info":"{{ currentElementsRange }} de {{ totalElements }}","killswitch-check":"Activar killswitch","killswitch-info":"Cuando est\xe1 activo, todas las conexiones de red se desactivar\xe1n si la aplicaci\xf3n se est\xe1 ejecutando pero la protecci\xf3n VPN est\xe1 interrumpida (por errores temporales o cualquier otro problema). Esto evita fugas de datos.","settings-changed-alert":"Los cambios a\xfan no se han guardado.","save-settings":"Guardar configuracion","change-note-dialog":{"title":"Cambiar Nota","note":"Nota"},"password-dialog":{"title":"Introducir Contrase\xf1a","password":"Contrase\xf1a","info":"Se le solicita una contrase\xf1a porque una contrase\xf1a fue utilizada cuando se cre\xf3 la entrada seleccionada, pero no fue guardada por razones de seguridad. Puede dejar la contrase\xf1a vac\xeda si es necesario.","continue-button":"Continuar"},"filter-dialog":{"title":"Filtros","country":"El pa\xeds debe ser","any-country":"Cualquiera","location":"La ubicaci\xf3n debe contener","pub-key":"La llave p\xfablica debe contener","apply":"Aplicar"}},"stop-app":"Detener","start-app":"Iniciar","view-logs":"Ver logs","settings":"Configuraci\xf3n","open":"Abrir","error":"Se produjo un error y no fue posible realizar la operaci\xf3n.","stop-confirmation":"\xbfSeguro que desea detener la aplicaci\xf3n?","stop-selected-confirmation":"\xbfSeguro que desea detener las aplicaciones seleccionadas?","disable-autostart-confirmation":"\xbfSeguro que desea deshabilitar el autoinicio de la aplicaci\xf3n?","enable-autostart-confirmation":"\xbfSeguro que desea habilitar el autoinicio de la aplicaci\xf3n?","disable-autostart-selected-confirmation":"\xbfSeguro que desea deshabilitar el autoinicio de las aplicaciones seleccionadas?","enable-autostart-selected-confirmation":"\xbfSeguro que desea habilitar el autoinicio de las aplicaciones seleccionadas?","operation-completed":"Operaci\xf3n completada.","operation-unnecessary":"La selecci\xf3n ya tiene la configuraci\xf3n solicitada.","status-running":"Corriendo","status-stopped":"Detenida","status-failed":"Fallida","status-running-tooltip":"La aplicaci\xf3n est\xe1 actualmente corriendo","status-stopped-tooltip":"La aplicaci\xf3n est\xe1 actualmente detenida","status-failed-tooltip":"Algo sali\xf3 mal. Revise los mensajes de la aplicaci\xf3n para m\xe1s informaci\xf3n"},"transports":{"title":"Transportes","remove-all-offline":"Remover todos los transportes offline","remove-all-offline-confirmation":"\xbfSeguro que desea remover todos los transportes offline?","remove-all-filtered-offline-confirmation":"Todos los transportes offline que satisfagan los criterios de filtrado actuales ser\xe1n removidos. \xbfSeguro que desea continuar?","info":"Conexiones que tiene con visores remotos de Skywire, para permitir que las aplicaciones Skywire locales se comuniquen con las aplicaciones que se ejecutan en esos visores remotos.","list-title":"Lista de transportes","state":"Estado","state-tooltip":"Estado actual","id":"ID","remote-node":"Remoto","type":"Tipo","create":"Crear transporte","delete-confirmation":"\xbfSeguro que desea borrar el transporte?","delete-selected-confirmation":"\xbfSeguro que desea borrar los transportes seleccionados?","delete":"Borrar transporte","deleted":"Operaci\xf3n de borrado completada.","empty":"El visor no tiene ning\xfan transporte.","empty-with-filter":"Ningun transporte coincide con los criterios de filtrado seleccionados.","statuses":{"online":"Online","online-tooltip":"El transporte est\xe1 online","offline":"Offline","offline-tooltip":"El transporte est\xe1 offline"},"details":{"title":"Detalles","basic":{"title":"Informaci\xf3n b\xe1sica","state":"Estado:","id":"ID:","local-pk":"Llave p\xfablica local:","remote-pk":"Llave p\xfablica remota:","type":"Tipo:"},"data":{"title":"Transmisi\xf3n de datos","uploaded":"Datos enviados:","downloaded":"Datos recibidos:"}},"dialog":{"remote-key":"Llave p\xfablica remota","label":"Nombre del transporte (opcional)","transport-type":"Tipo de transporte","success":"Transporte creado.","success-without-label":"El transporte fue creado, pero no fue posible guardar la etiqueta.","errors":{"remote-key-length-error":"La llave p\xfablica remota debe tener 66 caracteres.","remote-key-chars-error":"La llave p\xfablica remota s\xf3lo debe contener caracteres hexadecimales.","transport-type-error":"El tipo de transporte es requerido."}},"filter-dialog":{"online":"El transporte debe estar","id":"El id debe contener","remote-node":"La llave remota debe contener","online-options":{"any":"Online u offline","online":"Online","offline":"Offline"}}},"routes":{"title":"Rutas","info":"Caminos utilizados para llegar a los visores remotos con los que se han establecido transportes. Las rutas se generan autom\xe1ticamente seg\xfan sea necesario.","list-title":"Lista de rutas","key":"Llave","type":"Tipo","source":"Inicio","destination":"Destino","delete-confirmation":"\xbfSeguro que desea borrar la ruta?","delete-selected-confirmation":"\xbfSeguro que desea borrar las rutas seleccionadas?","delete":"Borrar ruta","deleted":"Operaci\xf3n de borrado completada.","empty":"El visor no tiene ninguna ruta.","empty-with-filter":"Ninguna ruta coincide con los criterios de filtrado seleccionados.","details":{"title":"Detalles","basic":{"title":"Informaci\xf3n b\xe1sica","key":"Llave:","rule":"Regla:"},"summary":{"title":"Resumen de regla","keep-alive":"Keep alive:","type":"Tipo de regla:","key-route-id":"ID de la llave de la ruta:"},"specific-fields-titles":{"app":"Campos de applicaci\xf3n","forward":"Campos de reenv\xedo","intermediary-forward":"Campos de reenv\xedo intermedio"},"specific-fields":{"route-id":"ID de la siguiente ruta:","transport-id":"ID del siguiente transporte:","destination-pk":"Llave p\xfablica de destino:","source-pk":"Llave p\xfablica de origen:","destination-port":"Puerto de destino:","source-port":"Puerto de origen:"}},"filter-dialog":{"key":"La llave debe contener","type":"El tipo debe ser","source":"El inicio debe contener","destination":"El destino debe contener","any-type-option":"Cualquiera"}},"copy":{"tooltip":"Presione para copiar","tooltip-with-text":"{{ text }} (Presione para copiar)","copied":"\xa1Copiado!"},"selection":{"select-all":"Seleccionar todo","unselect-all":"Deseleccionar todo","delete-all":"Borrar los elementos seleccionados","start-all":"Iniciar las apps seleccionadas","stop-all":"Detener las apps seleccionadas","enable-autostart-all":"Habilitar el autoinicio de las apps seleccionadas","disable-autostart-all":"Deshabilitar el autoinicio de las apps seleccionadas"},"refresh-button":{"seconds":"Refrescado hace unos segundos","minute":"Refrescado hace un minuto","minutes":"Refrescado hace {{ time }} minutos","hour":"Refrescado hace una hora","hours":"Refrescado hace {{ time }} horas","day":"Refrescado hace un d\xeda","days":"Refrescado hace {{ time }} d\xedas","week":"Refrescado hace una semana","weeks":"Refrescado hace {{ time }} semanas","error-tooltip":"Hubo un error al intentar refrescar los datos. Reintentando autom\xe1ticamente cada {{ time }} segundos..."},"view-all-link":{"label":"Ver todos los {{ number }} elementos"},"paginator":{"first":"Primera","last":"\xdaltima","total":"Total: {{ number }} p\xe1ginas","select-page-title":"Seleccionar p\xe1gina"},"confirmation":{"header-text":"Confirmaci\xf3n","confirm-button":"S\xed","cancel-button":"No","close":"Cerrar","error-header-text":"Error","done-header-text":"Hecho"},"language":{"title":"Seleccionar lenguaje"},"tabs-window":{"title":"Cambiar pesta\xf1a"},"vpn":{"title":"Panel de Control de VPN","start":"Inicio","servers":"Servidores","settings":"Configuracion","starting-blocked-server-error":"No se puede conectar con el servidor seleccionado porque se ha agregado a la lista de servidores bloqueados.","unexpedted-error":"Se produjo un error inesperado y no se pudo completar la operaci\xf3n.","remote-access-title":"Parece que est\xe1 accediendo al sistema de manera remota","remote-access-text":"Esta aplicaci\xf3n s\xf3lo permite administrar la protecci\xf3n VPN del dispositivo en el que fue instalada. Los cambios hechos con ella no afectar\xe1n a dispositivos remotos como el que parece estar usando. Tambi\xe9n es posible que los datos de IP que se muestren sean incorrectos.","server-change":{"busy-error":"El sistema est\xe1 ocupado. Por favor, espere.","backend-error":"No fue posible cambiar el servidor. Por favor, aseg\xfarese de que la clave p\xfablica sea correcta y de que la aplicaci\xf3n VPN se est\xe9 ejecutando.","already-selected-warning":"El servidor seleccionado ya est\xe1 siendo utilizando.","change-server-while-connected-confirmation":"La protecci\xf3n VPN se interrumpir\xe1 mientras se cambia el servidor y algunos datos pueden transmitirse sin protecci\xf3n durante el proceso. \xbfDesea continuar?","start-same-server-confirmation":"Ya hab\xeda seleccionado ese servidor. \xbfDesea conectarte a \xe9l?"},"error-page":{"text":"La aplicaci\xf3n de cliente VPN no est\xe1 disponible.","more-info":"No fue posible conectarse a la aplicaci\xf3n cliente VPN. Esto puede deberse a un error de configuraci\xf3n, un problema inesperado con el visor o porque utiliz\xf3 una clave p\xfablica no v\xe1lida en la URL.","text-pk":"Configuraci\xf3n inv\xe1lida.","more-info-pk":"La aplicaci\xf3n no puede ser iniciada porque no ha especificado la clave p\xfablica del visor.","text-storage":"Error al guardar los datos.","more-info-storage":"Ha habido un conflicto al intentar guardar los datos y la aplicaci\xf3n se ha cerrado para prevenir errores. Esto puede suceder si abre la aplicaci\xf3n en m\xe1s de una pesta\xf1a o ventana.","text-pk-change":"Operaci\xf3n inv\xe1lida.","more-info-pk-change":"Por favor, utilice esta aplicaci\xf3n para administrar s\xf3lo un cliente VPN."},"connection-info":{"state-connecting":"Conectando","state-connecting-info":"Se est\xe1 activando la protecci\xf3n VPN.","state-connected":"Conectado","state-connected-info":"La protecci\xf3n VPN est\xe1 activada.","state-disconnecting":"Desconectando","state-disconnecting-info":"Se est\xe1 desactivando la protecci\xf3n VPN.","state-reconnecting":"Reconectando","state-reconnecting-info":"Se est\xe1 restaurando la protecci\xf3n de VPN.","state-disconnected":"Desconectado","state-disconnected-info":"La protecci\xf3n VPN est\xe1 desactivada.","state-info":"Estado actual de la conexi\xf3n.","latency-info":"Latencia actual.","upload-info":"Velocidad de subida.","download-info":"Velocidad de descarga."},"status-page":{"start-title":"Iniciar VPN","no-server":"\xa1Ning\xfan servidor seleccionado!","disconnect":"Desconectar","disconnect-confirmation":"\xbfRealmente desea detener la protecci\xf3n VPN?","entered-manually":"Ingresado manualmente","upload-info":"Estad\xedsticas de datos subidos.","download-info":"Estad\xedsticas de datos descargados.","latency-info":"Estad\xedsticas de latencia.","total-data-label":"total","problem-connecting-error":"No fue posible conectarse al servidor. El servidor puede no ser v\xe1lido o estar temporalmente inactivo.","problem-starting-error":"No fue posible iniciar la VPN. Por favor, aseg\xfarese de que la aplicaci\xf3n base de cliente VPN est\xe9 ejecutandose.","problem-stopping-error":"No fue posible detener la VPN. Por favor, aseg\xfarese de que la aplicaci\xf3n base de cliente VPN est\xe9 ejecutandose.","generic-problem-error":"No fue posible realizar la operaci\xf3n. Por favor, aseg\xfarese de que la aplicaci\xf3n base de cliente VPN est\xe9 ejecutandose.","select-server-warning":"Por favor, seleccione un servidor primero.","data":{"ip":"Direcci\xf3n IP:","ip-problem-info":"Hubo un problema al intentar obtener la IP. Por favor, verif\xedquela utilizando un servicio externo.","ip-country-problem-info":"Hubo un problema al intentar obtener el pa\xeds. Por favor, verif\xedquelo utilizando un servicio externo.","ip-refresh-info":"Refrescar","ip-refresh-time-warning":"Por favor, espere {{ seconds }} segundo(s) antes de refrescar los datos.","ip-refresh-loading-warning":"Por favor, espere a que finalice la operaci\xf3n anterior.","country":"Pa\xeds:","server":"Servidor:","server-note":"Nota del servidor:","original-server-note":"Nota original del servidor:","local-pk":"Llave p\xfablica del visor local:","remote-pk":"Llave p\xfablica del visor remoto:","unavailable":"No disponible"}},"server-options":{"tooltip":"Opciones","connect-without-password":"Conectarse sin contrase\xf1a","connect-without-password-confirmation":"La conexi\xf3n se realizar\xe1 sin la contrase\xf1a. \xbfSeguro que desea continuar?","connect-using-password":"Conectarse usando una contrase\xf1a","edit-name":"Nombre personalizado","edit-label":"Nota personalizada","make-favorite":"Hacer favorito","make-favorite-confirmation":"\xbfRealmente desea marcar este servidor como favorito? Se eliminar\xe1 de la lista de bloqueados.","make-favorite-done":"Agregado a la lista de favoritos.","remove-from-favorites":"Quitar de favoritos","remove-from-favorites-done":"Eliminado de la lista de favoritos.","block":"Bloquear servidor","block-done":"Agregado a la lista de bloqueados.","block-confirmation":"\xbfRealmente desea bloquear este servidor? Se eliminar\xe1 de la lista de favoritos.","block-selected-confirmation":"\xbfRealmente desea bloquear el servidor actualmente seleccionado? Se cerrar\xe1n todas las conexiones.","block-selected-favorite-confirmation":"\xbfRealmente desea bloquear el servidor actualmente seleccionado? Se cerrar\xe1n todas las conexiones y se eliminar\xe1 de la lista de favoritos.","unblock":"Desbloquear servidor","unblock-done":"Eliminado de la lista de bloqueados.","remove-from-history":"Quitar del historial","remove-from-history-confirmation":"\xbfRealmente desea quitar del historial el servidor?","remove-from-history-done":"Eliminado del historial.","edit-value":{"name-title":"Nombre Personalizado","note-title":"Nota Personalizada","name-label":"Nombre personalizado","note-label":"Nota personalizada","apply-button":"Aplicar","changes-made-confirmation":"Se ha realizado el cambio."}},"server-conditions":{"selected-info":"Este es el servidor actualmente seleccionado.","blocked-info":"Este servidor est\xe1 en la lista de bloqueados.","favorite-info":"Este servidor est\xe1 en la lista de favoritos.","history-info":"Este servidor est\xe1 en el historial de servidores.","has-password-info":"Se estableci\xf3 una contrase\xf1a para conectarse con este servidor."},"server-list":{"date-small-table-label":"Fecha","date-info":"\xdaltima vez en la que us\xf3 este servidor.","country-small-table-label":"Pa\xeds","country-info":"Pa\xeds donde se encuentra el servidor.","name-small-table-label":"Nombre","location-small-table-label":"Ubicaci\xf3n","public-key-small-table-label":"Lp","public-key-info":"Llave p\xfablica del servidor.","congestion-rating-small-table-label":"Calificaci\xf3n de congesti\xf3n","congestion-rating-info":"Calificaci\xf3n del servidor relacionada con lo congestionado que suele estar.","congestion-small-table-label":"Congesti\xf3n","congestion-info":"Congesti\xf3n actual del servidor.","latency-rating-small-table-label":"Calificaci\xf3n de latencia","latency-rating-info":"Calificaci\xf3n del servidor relacionada con la latencia que suele tener.","latency-small-table-label":"Latencia","latency-info":"Latencia actual del servidor.","hops-small-table-label":"Saltos","hops-info":"Cu\xe1ntos saltos se necesitan para conectarse con el servidor.","note-small-table-label":"Nota","note-info":"Nota acerca del servidor.","gold-rating-info":"Oro","silver-rating-info":"Plata","bronze-rating-info":"Bronce","notes-info":"Nota personalizada: {{ custom }} - Nota original: {{ original }}","empty-discovery":"Actualmente no hay servidores VPN para mostrar. Por favor, int\xe9ntelo de nuevo m\xe1s tarde.","empty-history":"No hay historial que mostrar.","empty-favorites":"No hay servidores favoritos para mostrar.","empty-blocked":"No hay servidores bloqueados para mostrar.","empty-with-filter":"Ning\xfan servidor VPN coincide con los criterios de filtrado seleccionados.","add-manually-info":"Agregar el servidor manualmente.","current-filters":"Filtros actuales (presione para eliminar)","none":"Ninguno","unknown":"Desconocido","tabs":{"public":"P\xfablicos","history":"Historial","favorites":"Favoritos","blocked":"Bloqueados"},"add-server-dialog":{"title":"Ingresar manualmente","pk-label":"Llave p\xfablica del servidor","password-label":"Contrase\xf1a del servidor (si tiene)","name-label":"Nombre del servidor (opcional)","note-label":"Nota personal (opcional)","pk-length-error":"La llave p\xfablica debe tener 66 caracteres.","pk-chars-error":"La llave p\xfablica s\xf3lo debe contener caracteres hexadecimales.","use-server-button":"Usar servidor"},"password-dialog":{"title":"Introducir Contrase\xf1a","password-if-any-label":"Contrase\xf1a del servidor (si tiene)","password-label":"Contrase\xf1a del servidor","continue-button":"Continuar"},"filter-dialog":{"country":"El pa\xeds debe ser","name":"El nombre debe contener","location":"La ubicaci\xf3n debe contener","public-key":"La llave p\xfablica debe contener","congestion-rating":"La calificaci\xf3n de congesti\xf3n debe ser","latency-rating":"La calificaci\xf3n de latencia debe ser","rating-options":{"any":"Cualquiera","gold":"Oro","silver":"Plata","bronze":"Bronce"},"country-options":{"any":"Cualquiera"}}},"settings-page":{"setting-small-table-label":"Ajuste","value-small-table-label":"Valor","killswitch":"Killswitch","killswitch-info":"Cuando est\xe1 activo, todas las conexiones de red se desactivar\xe1n si la aplicaci\xf3n se est\xe1 ejecutando pero la protecci\xf3n VPN es interrumpida (por errores temporales o cualquier otro problema). Esto evita fugas de datos.","get-ip":"Obtener informaci\xf3n de IP","get-ip-info":"Cuando est\xe1 activa, la aplicaci\xf3n utilizar\xe1 servicios externos para obtener informaci\xf3n sobre la IP actual.","data-units":"Unidades de datos","data-units-info":"Permite seleccionar las unidades que se utilizar\xe1n para mostrar las estad\xedsticas de transmisi\xf3n de datos.","setting-on":"Encendido","setting-off":"Apagado","working-warning":"El sistema est\xe1 ocupado. Por favor, espere a que finalice la operaci\xf3n anterior.","change-while-connected-confirmation":"La protecci\xf3n VPN se interrumpir\xe1 mientras se realiza el cambio. \xbfDesea continuar?","data-units-modal":{"title":"Unidades de Datos","only-bits":"Bits para todas las estad\xedsticas","only-bytes":"Bytes para todas las estad\xedsticas","bits-speed-and-bytes-volume":"Bits para velocidad y bytes para volumen (predeterminado)"}}}}')}}]);
\ No newline at end of file
diff --git a/cmd/skywire-visor/static/8.bcc884fb2e3b89427677.js b/cmd/skywire-visor/static/8.bcc884fb2e3b89427677.js
deleted file mode 100644
index 28370366a5..0000000000
--- a/cmd/skywire-visor/static/8.bcc884fb2e3b89427677.js
+++ /dev/null
@@ -1 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[8],{"ZF/7":function(e){e.exports=JSON.parse('{"common":{"save":"Guardar","cancel":"Cancelar","downloaded":"Recibido","uploaded":"Enviado","loading-error":"Hubo un error obteniendo los datos. Reintentando...","operation-error":"Hubo un error al intentar completar la operaci\xf3n.","no-connection-error":"No hay conexi\xf3n a Internet o conexi\xf3n con el hipervisor.","error":"Error:","refreshed":"Datos refrescados.","options":"Opciones","logout":"Cerrar sesi\xf3n","logout-error":"Error cerrando la sesi\xf3n.","time-in-ms":"{{ time }}ms","ok":"Ok","unknown":"Desconocido","close":"Cerrar"},"labeled-element":{"edit-label":"Editar etiqueta","remove-label":"Remover etiqueta","copy":"Copiar","remove-label-confirmation":"\xbfRealmente desea eliminar la etiqueta?","unnamed-element":"Sin nombre","unnamed-local-visor":"Visor local","local-element":"Local","tooltip":"Haga clic para copiar la entrada o cambiar la etiqueta","tooltip-with-text":"{{ text }} (Haga clic para copiar la entrada o cambiar la etiqueta)"},"labels":{"title":"Etiquetas","list-title":"Lista de etiquetas","label":"Etiqueta","id":"ID del elemento","type":"Tipo","delete-confirmation":"\xbfSeguro que desea borrar la etiqueta?","delete-selected-confirmation":"\xbfSeguro que desea borrar las etiquetas seleccionados?","delete":"Borrar etiqueta","deleted":"Operaci\xf3n de borrado completada.","empty":"No hay etiquetas guardadas.","empty-with-filter":"Ninguna etiqueta coincide con los criterios de filtrado seleccionados.","filter-dialog":{"label":"La etiqueta debe contener","id":"El id debe contener","type":"El tipo debe ser","type-options":{"any":"Cualquiera","visor":"Visor","dmsg-server":"Servidor DMSG","transport":"Transporte"}}},"filters":{"filter-action":"Filtrar","active-filters":"Filtros activos: ","press-to-remove":"(Presione para remover)","remove-confirmation":"\xbfSeguro que desea remover los filtros?"},"tables":{"title":"Ordenar por","sorting-title":"Ordenado por:","ascending-order":"(ascendente)","descending-order":"(descendente)"},"start":{"title":"Inicio"},"node":{"title":"Detalles del visor","not-found":"Visor no encontrado.","statuses":{"online":"Online","online-tooltip":"El visor se encuentra online.","partially-online":"Online con problemas","partially-online-tooltip":"El visor se encuentra online pero no todos los servicios est\xe1n funcionando. Para m\xe1s informaci\xf3n, abra la p\xe1gina de detalles y consulte la secci\xf3n \\"Informaci\xf3n de salud\\".","offline":"Offline","offline-tooltip":"El visor se encuentra offline."},"details":{"node-info":{"title":"Informaci\xf3n del visor","label":"Etiqueta:","public-key":"Llave p\xfablica:","port":"Puerto:","dmsg-server":"Servidor DMSG:","ping":"Ping:","node-version":"Versi\xf3n del visor:","time":{"title":"Tiempo online:","seconds":"unos segundos","minute":"1 minuto","minutes":"{{ time }} minutos","hour":"1 hora","hours":"{{ time }} horas","day":"1 d\xeda","days":"{{ time }} d\xedas","week":"1 semana","weeks":"{{ time }} semanas"}},"node-health":{"title":"Informaci\xf3n de salud","status":"Estatus:","transport-discovery":"Transport discovery:","route-finder":"Route finder:","setup-node":"Setup node:","uptime-tracker":"Uptime tracker:","address-resolver":"Address resolver:","element-offline":"Offline"},"node-traffic-data":"Datos de tr\xe1fico"},"tabs":{"info":"Info","apps":"Apps","routing":"Enrutamiento"},"error-load":"Hubo un error al intentar refrescar los datos. Reintentando..."},"nodes":{"title":"Lista de visores","dmsg-title":"DMSG","update-all":"Actualizar todos los visores","hypervisor":"Hypervisor","state":"Estado","state-tooltip":"Estado actual","label":"Etiqueta","key":"Llave","dmsg-server":"Servidor DMSG","ping":"Ping","hypervisor-info":"Este visor es el Hypervisor actual.","copy-key":"Copiar llave","copy-dmsg":"Copiar llave DMSG","copy-data":"Copiar datos","view-node":"Ver visor","delete-node":"Remover visor","delete-all-offline":"Remover todos los visores offline","error-load":"Hubo un error al intentar refrescar la lista. Reintentando...","empty":"No hay ning\xfan visor conectado a este hypervisor.","empty-with-filter":"Ningun visor coincide con los criterios de filtrado seleccionados.","delete-node-confirmation":"\xbfSeguro que desea remover el visor de la lista?","delete-all-offline-confirmation":"\xbfSeguro que desea remover todos los visores offline de la lista?","delete-all-filtered-offline-confirmation":"Todos los visores offline que satisfagan los criterios de filtrado actuales ser\xe1n removidos de la lista. \xbfSeguro que desea continuar?","deleted":"Visor removido.","deleted-singular":"1 visor offline removido.","deleted-plural":"{{ number }} visores offline removidos.","no-offline-nodes":"No se encontraron visores offline.","no-visors-to-update":"No hay visores para actualizar.","filter-dialog":{"online":"El visor debe estar","label":"La etiqueta debe contener","key":"La llave debe contener","dmsg":"La llave del servidor DMSG debe contener","online-options":{"any":"Online u offline","online":"Online","offline":"Offline"}}},"edit-label":{"label":"Etiqueta","done":"Etiqueta guardada.","label-removed-warning":"La etiqueta fue removida."},"settings":{"title":"Configuraci\xf3n","password":{"initial-config-help":"Use esta opci\xf3n para establecer la contrase\xf1a inicial. Despu\xe9s de establecer una contrase\xf1a no es posible usar esta opci\xf3n para modificarla.","help":"Opciones para cambiar la contrase\xf1a.","old-password":"Contrase\xf1a actual","new-password":"Nueva contrase\xf1a","repeat-password":"Repita la contrase\xf1a","password-changed":"Contrase\xf1a cambiada.","error-changing":"Error cambiando la contrase\xf1a.","initial-config":{"title":"Establecer contrase\xf1a inicial","password":"Contrase\xf1a","repeat-password":"Repita la contrase\xf1a","set-password":"Establecer contrase\xf1a","done":"Contrase\xf1a establecida. Por favor \xfasela para acceder al sistema.","error":"Error. Por favor aseg\xfarese de que no hubiese establecido la contrase\xf1a anteriormente."},"errors":{"bad-old-password":"La contrase\xf1a actual introducida no es correcta.","old-password-required":"La contrase\xf1a actual es requerida.","new-password-error":"La contrase\xf1a debe tener entre 6 y 64 caracteres.","passwords-not-match":"Las contrase\xf1as no coinciden.","default-password":"No utilice la contrase\xf1a por defecto (1234)."}},"updater-config":{"open-link":"Mostrar la configuraci\xf3n del actualizador","open-confirmation":"La configuraci\xf3n del actualizador es s\xf3lo para usuarios experimentados. Seguro que desea continuar?","help":"Utilice este formulario para modificar la configuraci\xf3n que utilizar\xe1 el actualizador. Se ignorar\xe1n todos los campos vac\xedos. La configuraci\xf3n se utilizar\xe1 para todas las operaciones de actualizaci\xf3n, sin importar qu\xe9 elemento se est\xe9 actualizando, as\xed que por favor tenga cuidado.","channel":"Canal","version":"Versi\xf3n","archive-url":"URL del archivo","checksum-url":"URL del checksum","not-saved":"Los cambios a\xfan no se han guardado.","save":"Guardar cambios","remove-settings":"Remover la configuraci\xf3n","saved":"Las configuracion personalizada ha sido guardada.","removed":"Las configuracion personalizada ha sido removida.","save-confirmation":"\xbfSeguro que desea aplicar la configuraci\xf3n personalizada?","remove-confirmation":"\xbfSeguro que desea remover la configuraci\xf3n personalizada?"},"change-password":"Cambiar contrase\xf1a","refresh-rate":"Frecuencia de refrescado","refresh-rate-help":"Tiempo que el sistema espera para actualizar autom\xe1ticamente los datos.","refresh-rate-confirmation":"Frecuencia de refrescado cambiada.","seconds":"segundos"},"login":{"password":"Contrase\xf1a","incorrect-password":"Contrase\xf1a incorrecta.","initial-config":"Configurar lanzamiento inicial"},"actions":{"menu":{"terminal":"Terminal","config":"Configuraci\xf3n","update":"Actualizar","reboot":"Reiniciar"},"reboot":{"confirmation":"\xbfSeguro que desea reiniciar el visor?","done":"El visor se est\xe1 reiniciando."},"terminal-options":{"full":"Terminal completa","simple":"Terminal simple"},"terminal":{"title":"Terminal","input-start":"Terminal de Skywire para {{address}}","error":"Error inesperado mientras se intentaba ejecutar el comando."}},"update":{"title":"Actualizar","error-title":"Error","processing":"Buscando actualizaciones...","no-update":"No hay ninguna actualizaci\xf3n para el visor. La versi\xf3n instalada actualmente es:","no-updates":"No se encontraron nuevas actualizaciones.","already-updating":"Algunos visores ya est\xe1n siendo actualizandos:","update-available":"Las siguientes actualizaciones fueron encontradas:","update-available-singular":"Las siguientes actualizaciones para 1 visor fueron encontradas:","update-available-plural":"Las siguientes actualizaciones para {{ number }} visores fueron encontradas:","update-available-additional-singular":"Las siguientes actualizaciones adicionales para 1 visor fueron encontradas:","update-available-additional-plural":"Las siguientes actualizaciones adicionales para {{ number }} visores fueron encontradas:","update-instructions":"Haga clic en el bot\xf3n \'Instalar actualizaciones\' para continuar.","updating":"La operaci\xf3n de actualizaci\xf3n se ha iniciado, puede abrir esta ventana nuevamente para verificar el progreso:","version-change":"De {{ currentVersion }} a {{ newVersion }}","selected-channel":"Canal seleccionado:","downloaded-file-name-prefix":"Descargando: ","speed-prefix":"Velocidad: ","time-downloading-prefix":"Tiempo descargando: ","time-left-prefix":"Tiempo aprox. faltante: ","starting":"Preparando para actualizar","finished":"Conexi\xf3n de estado terminada","install":"Instalar actualizaciones"},"apps":{"log":{"title":"Log","empty":"No hay mensajes de log para el rango de fecha seleccionado.","filter-button":"Mostrando s\xf3lo logs generados desde:","filter":{"title":"Filtro","filter":"Mostrar s\xf3lo logs generados desde","7-days":"Los \xfaltimos 7 d\xedas","1-month":"Los \xfaltimos 30 d\xedas","3-months":"Los \xfaltimos 3 meses","6-months":"Los \xfaltimos 6 meses","1-year":"El \xfaltimo a\xf1o","all":"mostrar todos"}},"apps-list":{"title":"Aplicaciones","list-title":"Lista de aplicaciones","app-name":"Nombre","port":"Puerto","state":"Estado","state-tooltip":"Estado actual","auto-start":"Autoinicio","empty":"El visor no tiene ninguna aplicaci\xf3n.","empty-with-filter":"Ninguna app coincide con los criterios de filtrado seleccionados.","disable-autostart":"Deshabilitar autoinicio","enable-autostart":"Habilitar autoinicio","autostart-disabled":"Autoinicio deshabilitado","autostart-enabled":"Autoinicio habilitado","unavailable-logs-error":"No es posible mostrar los logs mientras la aplicaci\xf3n no se est\xe1 ejecutando.","filter-dialog":{"state":"El estado debe ser","name":"El nombre debe contener","port":"El puerto debe contener","autostart":"El autoinicio debe estar","state-options":{"any":"Iniciada o detenida","running":"Iniciada","stopped":"Detenida"},"autostart-options":{"any":"Activado or desactivado","enabled":"Activado","disabled":"Desactivado"}}},"vpn-socks-server-settings":{"socks-title":"Configuraci\xf3n de Skysocks","vpn-title":"Configuraci\xf3n de VPN-Server","new-password":"Nueva contrase\xf1a (dejar en blanco para eliminar la contrase\xf1a)","repeat-password":"Repita la contrase\xf1a","passwords-not-match":"Las contrase\xf1as no coinciden.","secure-mode-check":"Usar modo seguro","secure-mode-info":"Cuando est\xe1 activo, el servidor no permite SSH con los clientes y no permite ning\xfan tr\xe1fico de clientes VPN a la red local del servidor.","save":"Guardar","remove-passowrd-confirmation":"Ha dejado el campo de contrase\xf1a vac\xedo. \xbfSeguro que desea eliminar la contrase\xf1a?","change-passowrd-confirmation":"\xbfSeguro que desea cambiar la contrase\xf1a?","changes-made":"Los cambios han sido realizados."},"vpn-socks-client-settings":{"socks-title":"Configuraci\xf3n de Skysocks-Client","vpn-title":"Configuraci\xf3n de VPN-Client","discovery-tab":"Buscar","remote-visor-tab":"Introducir manualmente","settings-tab":"Configuracion","history-tab":"Historial","use":"Usar estos datos","change-note":"Cambiar nota","remove-entry":"Remover entrada","note":"Nota:","note-entered-manually":"Introducido manualmente","note-obtained":"Obtenido del servicio de descubrimiento","key":"Llave:","port":"Puerto:","location":"Ubicaci\xf3n:","state-available":"Disponible","state-offline":"Offline","public-key":"Llave p\xfablica del visor remoto","password":"Contrase\xf1a","password-history-warning":"Nota: la contrase\xf1a no se guardar\xe1 en el historial.","copy-pk-info":"Copiar la llave p\xfablica.","copied-pk-info":"La llave p\xfablica ha sido copiada.","copy-pk-error":"Hubo un problema al intentar cambiar la llave p\xfablica.","no-elements":"Actualmente no hay elementos para mostrar. Por favor, int\xe9ntelo de nuevo m\xe1s tarde.","no-elements-for-filters":"No hay elementos que cumplan los criterios de filtro.","no-filter":"No se ha seleccionado ning\xfan filtro","click-to-change":"Haga clic para cambiar","remote-key-length-error":"La llave p\xfablica debe tener 66 caracteres.","remote-key-chars-error":"La llave p\xfablica s\xf3lo debe contener caracteres hexadecimales.","save":"Guardar","remove-from-history-confirmation":"\xbfSeguro de que desea eliminar la entrada del historial?","change-key-confirmation":"\xbfSeguro que desea cambiar la llave p\xfablica del visor remoto?","changes-made":"Los cambios han sido realizados.","no-history":"Esta pesta\xf1a mostrar\xe1 las \xfaltimas {{ number }} llaves p\xfablicas usadas.","default-note-warning":"La nota por defecto ha sido utilizada.","pagination-info":"{{ currentElementsRange }} de {{ totalElements }}","killswitch-check":"Activar killswitch","killswitch-info":"Cuando est\xe1 activo, todas las conexiones de red se desactivar\xe1n si la aplicaci\xf3n se est\xe1 ejecutando pero la protecci\xf3n VPN est\xe1 interrumpida (por errores temporales o cualquier otro problema).","settings-changed-alert":"Los cambios a\xfan no se han guardado.","save-settings":"Guardar configuracion","change-note-dialog":{"title":"Cambiar Nota","note":"Nota"},"password-dialog":{"title":"Introducir Contrase\xf1a","password":"Contrase\xf1a","info":"Se le solicita una contrase\xf1a porque una contrase\xf1a fue utilizada cuando se cre\xf3 la entrada seleccionada, pero no fue guardada por razones de seguridad. Puede dejar la contrase\xf1a vac\xeda si es necesario.","continue-button":"Continuar"},"filter-dialog":{"title":"Filtros","country":"El pa\xeds debe ser","any-country":"Cualquiera","location":"La ubicaci\xf3n debe contener","pub-key":"La llave p\xfablica debe contener","apply":"Aplicar"}},"stop-app":"Detener","start-app":"Iniciar","view-logs":"Ver logs","settings":"Configuraci\xf3n","error":"Se produjo un error y no fue posible realizar la operaci\xf3n.","stop-confirmation":"\xbfSeguro que desea detener la aplicaci\xf3n?","stop-selected-confirmation":"\xbfSeguro que desea detener las aplicaciones seleccionadas?","disable-autostart-confirmation":"\xbfSeguro que desea deshabilitar el autoinicio de la aplicaci\xf3n?","enable-autostart-confirmation":"\xbfSeguro que desea habilitar el autoinicio de la aplicaci\xf3n?","disable-autostart-selected-confirmation":"\xbfSeguro que desea deshabilitar el autoinicio de las aplicaciones seleccionadas?","enable-autostart-selected-confirmation":"\xbfSeguro que desea habilitar el autoinicio de las aplicaciones seleccionadas?","operation-completed":"Operaci\xf3n completada.","operation-unnecessary":"La selecci\xf3n ya tiene la configuraci\xf3n solicitada.","status-running":"Corriendo","status-stopped":"Detenida","status-failed":"Fallida","status-running-tooltip":"La aplicaci\xf3n est\xe1 actualmente corriendo","status-stopped-tooltip":"La aplicaci\xf3n est\xe1 actualmente detenida","status-failed-tooltip":"Algo sali\xf3 mal. Revise los mensajes de la aplicaci\xf3n para m\xe1s informaci\xf3n"},"transports":{"title":"Transportes","remove-all-offline":"Remover todos los transportes offline","remove-all-offline-confirmation":"\xbfSeguro que desea remover todos los transportes offline?","remove-all-filtered-offline-confirmation":"Todos los transportes offline que satisfagan los criterios de filtrado actuales ser\xe1n removidos. \xbfSeguro que desea continuar?","list-title":"Lista de transportes","state":"Estado","state-tooltip":"Estado actual","id":"ID","remote-node":"Remoto","type":"Tipo","create":"Crear transporte","delete-confirmation":"\xbfSeguro que desea borrar el transporte?","delete-selected-confirmation":"\xbfSeguro que desea borrar los transportes seleccionados?","delete":"Borrar transporte","deleted":"Operaci\xf3n de borrado completada.","empty":"El visor no tiene ning\xfan transporte.","empty-with-filter":"Ningun transporte coincide con los criterios de filtrado seleccionados.","statuses":{"online":"Online","online-tooltip":"El transporte est\xe1 online","offline":"Offline","offline-tooltip":"El transporte est\xe1 offline"},"details":{"title":"Detalles","basic":{"title":"Informaci\xf3n b\xe1sica","state":"Estado:","id":"ID:","local-pk":"Llave p\xfablica local:","remote-pk":"Llave p\xfablica remota:","type":"Tipo:"},"data":{"title":"Transmisi\xf3n de datos","uploaded":"Datos enviados:","downloaded":"Datos recibidos:"}},"dialog":{"remote-key":"Llave p\xfablica remota","label":"Nombre del transporte (opcional)","transport-type":"Tipo de transporte","success":"Transporte creado.","success-without-label":"El transporte fue creado, pero no fue posible guardar la etiqueta.","errors":{"remote-key-length-error":"La llave p\xfablica remota debe tener 66 caracteres.","remote-key-chars-error":"La llave p\xfablica remota s\xf3lo debe contener caracteres hexadecimales.","transport-type-error":"El tipo de transporte es requerido."}},"filter-dialog":{"online":"El transporte debe estar","id":"El id debe contener","remote-node":"La llave remota debe contener","online-options":{"any":"Online u offline","online":"Online","offline":"Offline"}}},"routes":{"title":"Rutas","list-title":"Lista de rutas","key":"Llave","type":"Tipo","source":"Inicio","destination":"Destino","delete-confirmation":"\xbfSeguro que desea borrar la ruta?","delete-selected-confirmation":"\xbfSeguro que desea borrar las rutas seleccionadas?","delete":"Borrar ruta","deleted":"Operaci\xf3n de borrado completada.","empty":"El visor no tiene ninguna ruta.","empty-with-filter":"Ninguna ruta coincide con los criterios de filtrado seleccionados.","details":{"title":"Detalles","basic":{"title":"Informaci\xf3n b\xe1sica","key":"Llave:","rule":"Regla:"},"summary":{"title":"Resumen de regla","keep-alive":"Keep alive:","type":"Tipo de regla:","key-route-id":"ID de la llave de la ruta:"},"specific-fields-titles":{"app":"Campos de applicaci\xf3n","forward":"Campos de reenv\xedo","intermediary-forward":"Campos de reenv\xedo intermedio"},"specific-fields":{"route-id":"ID de la siguiente ruta:","transport-id":"ID del siguiente transporte:","destination-pk":"Llave p\xfablica de destino:","source-pk":"Llave p\xfablica de origen:","destination-port":"Puerto de destino:","source-port":"Puerto de origen:"}},"filter-dialog":{"key":"La llave debe contener","type":"El tipo debe ser","source":"El inicio debe contener","destination":"El destino debe contener","any-type-option":"Cualquiera"}},"copy":{"tooltip":"Presione para copiar","tooltip-with-text":"{{ text }} (Presione para copiar)","copied":"\xa1Copiado!"},"selection":{"select-all":"Seleccionar todo","unselect-all":"Deseleccionar todo","delete-all":"Borrar los elementos seleccionados","start-all":"Iniciar las apps seleccionadas","stop-all":"Detener las apps seleccionadas","enable-autostart-all":"Habilitar el autoinicio de las apps seleccionadas","disable-autostart-all":"Deshabilitar el autoinicio de las apps seleccionadas"},"refresh-button":{"seconds":"Refrescado hace unos segundos","minute":"Refrescado hace un minuto","minutes":"Refrescado hace {{ time }} minutos","hour":"Refrescado hace una hora","hours":"Refrescado hace {{ time }} horas","day":"Refrescado hace un d\xeda","days":"Refrescado hace {{ time }} d\xedas","week":"Refrescado hace una semana","weeks":"Refrescado hace {{ time }} semanas","error-tooltip":"Hubo un error al intentar refrescar los datos. Reintentando autom\xe1ticamente cada {{ time }} segundos..."},"view-all-link":{"label":"Ver todos los {{ number }} elementos"},"paginator":{"first":"Primera","last":"\xdaltima","total":"Total: {{ number }} p\xe1ginas","select-page-title":"Seleccionar p\xe1gina"},"confirmation":{"header-text":"Confirmaci\xf3n","confirm-button":"S\xed","cancel-button":"No","close":"Cerrar","error-header-text":"Error","done-header-text":"Hecho"},"language":{"title":"Seleccionar lenguaje"},"tabs-window":{"title":"Cambiar pesta\xf1a"}}')}}]);
\ No newline at end of file
diff --git a/cmd/skywire-visor/static/9.28280a196edf9818e2b5.js b/cmd/skywire-visor/static/9.28280a196edf9818e2b5.js
deleted file mode 100644
index 7c2bb57f43..0000000000
--- a/cmd/skywire-visor/static/9.28280a196edf9818e2b5.js
+++ /dev/null
@@ -1 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[9],{bIFx:function(e){e.exports=JSON.parse('{"common":{"save":"Save","cancel":"Cancel","downloaded":"Downloaded","uploaded":"Uploaded","loading-error":"There was an error getting the data. Retrying...","operation-error":"There was an error trying to complete the operation.","no-connection-error":"There is no internet connection or connection to the Hypervisor.","error":"Error:","refreshed":"Data refreshed.","options":"Options","logout":"Logout","logout-error":"Error logging out.","time-in-ms":"{{ time }}ms","ok":"Ok","unknown":"Unknown","close":"Close"},"labeled-element":{"edit-label":"Edit label","remove-label":"Remove label","copy":"Copy","remove-label-confirmation":"Do you really want to remove the label?","unnamed-element":"Unnamed","unnamed-local-visor":"Local visor","local-element":"Local","tooltip":"Click to copy the entry or change the label","tooltip-with-text":"{{ text }} (Click to copy the entry or change the label)"},"labels":{"title":"Labels","list-title":"Label list","label":"Label","id":"Element ID","type":"Type","delete-confirmation":"Are you sure you want to delete the label?","delete-selected-confirmation":"Are you sure you want to delete the selected labels?","delete":"Delete label","deleted":"Delete operation completed.","empty":"There aren\'t any saved labels.","empty-with-filter":"No label matches the selected filtering criteria.","filter-dialog":{"label":"The label must contain","id":"The id must contain","type":"The type must be","type-options":{"any":"Any","visor":"Visor","dmsg-server":"DMSG server","transport":"Transport"}}},"filters":{"filter-action":"Filter","active-filters":"Active filters: ","press-to-remove":"(Press to remove)","remove-confirmation":"Are you sure you want to remove the filters?"},"tables":{"title":"Order by","sorting-title":"Ordered by:","ascending-order":"(ascending)","descending-order":"(descending)"},"start":{"title":"Start"},"node":{"title":"Visor details","not-found":"Visor not found.","statuses":{"online":"Online","online-tooltip":"Visor is online.","partially-online":"Online with problems","partially-online-tooltip":"Visor is online but not all services are working. For more information, open the details page and check the \\"Health info\\" section.","offline":"Offline","offline-tooltip":"Visor is offline."},"details":{"node-info":{"title":"Visor Info","label":"Label:","public-key":"Public key:","port":"Port:","dmsg-server":"DMSG server:","ping":"Ping:","node-version":"Visor version:","time":{"title":"Time online:","seconds":"a few seconds","minute":"1 minute","minutes":"{{ time }} minutes","hour":"1 hour","hours":"{{ time }} hours","day":"1 day","days":"{{ time }} days","week":"1 week","weeks":"{{ time }} weeks"}},"node-health":{"title":"Health info","status":"Status:","transport-discovery":"Transport discovery:","route-finder":"Route finder:","setup-node":"Setup node:","uptime-tracker":"Uptime tracker:","address-resolver":"Address resolver:","element-offline":"Offline"},"node-traffic-data":"Traffic data"},"tabs":{"info":"Info","apps":"Apps","routing":"Routing"},"error-load":"An error occurred while refreshing the data. Retrying..."},"nodes":{"title":"Visor list","dmsg-title":"DMSG","update-all":"Update all visors","hypervisor":"Hypervisor","state":"State","state-tooltip":"Current state","label":"Label","key":"Key","dmsg-server":"DMSG server","ping":"Ping","hypervisor-info":"This visor is the current Hypervisor.","copy-key":"Copy key","copy-dmsg":"Copy DMSG server key","copy-data":"Copy data","view-node":"View visor","delete-node":"Remove visor","delete-all-offline":"Remove all offline visors","error-load":"An error occurred while refreshing the list. Retrying...","empty":"There aren\'t any visors connected to this hypervisor.","empty-with-filter":"No visor matches the selected filtering criteria.","delete-node-confirmation":"Are you sure you want to remove the visor from the list?","delete-all-offline-confirmation":"Are you sure you want to remove all offline visors from the list?","delete-all-filtered-offline-confirmation":"All offline visors satisfying the current filtering criteria will be removed from the list. Are you sure you want to continue?","deleted":"Visor removed.","deleted-singular":"1 offline visor removed.","deleted-plural":"{{ number }} offline visors removed.","no-offline-nodes":"No offline visors found.","no-visors-to-update":"There are no visors to update.","filter-dialog":{"online":"The visor must be","label":"The label must contain","key":"The public key must contain","dmsg":"The DMSG server key must contain","online-options":{"any":"Online or offline","online":"Online","offline":"Offline"}}},"edit-label":{"label":"Label","done":"Label saved.","label-removed-warning":"The label was removed."},"settings":{"title":"Settings","password":{"initial-config-help":"Use this option for setting the initial password. After a password has been set, it is not possible to use this option to modify it.","help":"Options for changing your password.","old-password":"Old password","new-password":"New password","repeat-password":"Repeat password","password-changed":"Password changed.","error-changing":"Error changing password.","initial-config":{"title":"Set initial password","password":"Password","repeat-password":"Repeat password","set-password":"Set password","done":"Password set. Please use it to access the system.","error":"Error. Please make sure you have not already set the password."},"errors":{"bad-old-password":"The provided old password is not correct.","old-password-required":"Old password is required.","new-password-error":"Password must be 6-64 characters long.","passwords-not-match":"Passwords do not match.","default-password":"Don\'t use the default password (1234)."}},"updater-config":{"open-link":"Show updater settings","open-confirmation":"The updater settings are for experienced users only. Are you sure you want to continue?","help":"Use this form for overriding the settings that will be used by the updater. All empty fields will be ignored. The settings will be used for all updating operations, no mater which element is being updated, so please be careful.","channel":"Channel","version":"Version","archive-url":"Archive URL","checksum-url":"Checksum URL","not-saved":"The changes have not been saved yet.","save":"Save changes","remove-settings":"Remove the settings","saved":"The custom settings have been saved.","removed":"The custom settings have been removed.","save-confirmation":"Are you sure you want to apply the custom settings?","remove-confirmation":"Are you sure you want to remove the custom settings?"},"change-password":"Change password","refresh-rate":"Refresh rate","refresh-rate-help":"Time the system waits to update the data automatically.","refresh-rate-confirmation":"Refresh rate changed.","seconds":"seconds"},"login":{"password":"Password","incorrect-password":"Incorrect password.","initial-config":"Configure initial launch"},"actions":{"menu":{"terminal":"Terminal","config":"Configuration","update":"Update","reboot":"Reboot"},"reboot":{"confirmation":"Are you sure you want to reboot the visor?","done":"The visor is restarting."},"terminal-options":{"full":"Full terminal","simple":"Simple terminal"},"terminal":{"title":"Terminal","input-start":"Skywire terminal for {{address}}","error":"Unexpected error while trying to execute the command."}},"update":{"title":"Update","error-title":"Error","processing":"Looking for updates...","no-update":"There is no update for the visor. The currently installed version is:","no-updates":"No new updates were found.","already-updating":"Some visors are already being updated:","update-available":"The following updates were found:","update-available-singular":"The following updates for 1 visor were found:","update-available-plural":"The following updates for {{ number }} visors were found:","update-available-additional-singular":"The following additional updates for 1 visor were found:","update-available-additional-plural":"The following additional updates for {{ number }} visors were found:","update-instructions":"Click the \'Install updates\' button to continue.","updating":"The update operation has been started, you can open this window again for checking the progress:","version-change":"From {{ currentVersion }} to {{ newVersion }}","selected-channel":"Selected channel:","downloaded-file-name-prefix":"Downloading: ","speed-prefix":"Speed: ","time-downloading-prefix":"Time downloading: ","time-left-prefix":"Aprox. time left: ","starting":"Preparing to update","finished":"Status connection finished","install":"Install updates"},"apps":{"log":{"title":"Log","empty":"There are no log messages for the selected time range.","filter-button":"Only showing logs generated since:","filter":{"title":"Filter","filter":"Only show logs generated since","7-days":"The last 7 days","1-month":"The last 30 days","3-months":"The last 3 months","6-months":"The last 6 months","1-year":"The last year","all":"Show all"}},"apps-list":{"title":"Applications","list-title":"Application list","app-name":"Name","port":"Port","state":"State","state-tooltip":"Current state","auto-start":"Auto start","empty":"Visor doesn\'t have any applications.","empty-with-filter":"No app matches the selected filtering criteria.","disable-autostart":"Disable autostart","enable-autostart":"Enable autostart","autostart-disabled":"Autostart disabled","autostart-enabled":"Autostart enabled","unavailable-logs-error":"Unable to show the logs while the app is not running.","filter-dialog":{"state":"The state must be","name":"The name must contain","port":"The port must contain","autostart":"The autostart must be","state-options":{"any":"Running or stopped","running":"Running","stopped":"Stopped"},"autostart-options":{"any":"Enabled or disabled","enabled":"Enabled","disabled":"Disabled"}}},"vpn-socks-server-settings":{"socks-title":"Skysocks Settings","vpn-title":"VPN-Server Settings","new-password":"New password (Leave empty to remove the password)","repeat-password":"Repeat password","passwords-not-match":"Passwords do not match.","secure-mode-check":"Use secure mode","secure-mode-info":"When active, the server doesn\'t allow client/server SSH and doesn\'t allow any traffic from VPN clients to the server local network.","save":"Save","remove-passowrd-confirmation":"You left the password field empty. Are you sure you want to remove the password?","change-passowrd-confirmation":"Are you sure you want to change the password?","changes-made":"The changes have been made."},"vpn-socks-client-settings":{"socks-title":"Skysocks-Client Settings","vpn-title":"VPN-Client Settings","discovery-tab":"Search","remote-visor-tab":"Enter manually","history-tab":"History","settings-tab":"Settings","use":"Use this data","change-note":"Change note","remove-entry":"Remove entry","note":"Note:","note-entered-manually":"Entered manually","note-obtained":"Obtained from the discovery service","key":"Key:","port":"Port:","location":"Location:","state-available":"Available","state-offline":"Offline","public-key":"Remote visor public key","password":"Password","password-history-warning":"Note: the password will not be saved in the history.","copy-pk-info":"Copy public key.","copied-pk-info":"The public key has been copied.","copy-pk-error":"There was a problem copying the public key.","no-elements":"Currently there are no elements to show. Please try again later.","no-elements-for-filters":"There are no elements that meet the filter criteria.","no-filter":"No filter has been selected","click-to-change":"Click to change","remote-key-length-error":"The public key must be 66 characters long.","remote-key-chars-error":"The public key must only contain hexadecimal characters.","save":"Save","remove-from-history-confirmation":"Are you sure you want to remove the entry from the history?","change-key-confirmation":"Are you sure you want to change the remote visor public key?","changes-made":"The changes have been made.","no-history":"This tab will show the last {{ number }} public keys used.","default-note-warning":"The default note has been used.","pagination-info":"{{ currentElementsRange }} of {{ totalElements }}","killswitch-check":"Activate killswitch","killswitch-info":"When active, all network connections will be disabled if the app is running but the VPN protection is interrupted (for temporary errors or any other problem).","settings-changed-alert":" The changes have not been saved yet.","save-settings":"Save settings","change-note-dialog":{"title":"Change Note","note":"Note"},"password-dialog":{"title":"Enter Password","password":"Password","info":"You are being asked for a password because a password was set when the selected entry was created, but the it was not saved for security reasons. You can leave the password empty if needed.","continue-button":"Continue"},"filter-dialog":{"title":"Filters","country":"The country must be","any-country":"Any","location":"The location must contain","pub-key":"The public key must contain","apply":"Apply"}},"stop-app":"Stop","start-app":"Start","view-logs":"View logs","settings":"Settings","error":"An error has occured and it was not possible to perform the operation.","stop-confirmation":"Are you sure you want to stop the app?","stop-selected-confirmation":"Are you sure you want to stop the selected apps?","disable-autostart-confirmation":"Are you sure you want to disable autostart for the app?","enable-autostart-confirmation":"Are you sure you want to enable autostart for the app?","disable-autostart-selected-confirmation":"Are you sure you want to disable autostart for the selected apps?","enable-autostart-selected-confirmation":"Are you sure you want to enable autostart for the selected apps?","operation-completed":"Operation completed.","operation-unnecessary":"The selection already has the requested setting.","status-running":"Running","status-stopped":"Stopped","status-failed":"Failed","status-running-tooltip":"App is currently running","status-stopped-tooltip":"App is currently stopped","status-failed-tooltip":"Something went wrong. Check the app\'s messages for more information"},"transports":{"title":"Transports","remove-all-offline":"Remove all offline transports","remove-all-offline-confirmation":"Are you sure you want to remove all offline transports?","remove-all-filtered-offline-confirmation":"All offline transports satisfying the current filtering criteria will be removed. Are you sure you want to continue?","list-title":"Transport list","state":"State","state-tooltip":"Current state","id":"ID","remote-node":"Remote","type":"Type","create":"Create transport","delete-confirmation":"Are you sure you want to delete the transport?","delete-selected-confirmation":"Are you sure you want to delete the selected transports?","delete":"Delete transport","deleted":"Delete operation completed.","empty":"Visor doesn\'t have any transports.","empty-with-filter":"No transport matches the selected filtering criteria.","statuses":{"online":"Online","online-tooltip":"Transport is online","offline":"Offline","offline-tooltip":"Transport is offline"},"details":{"title":"Details","basic":{"title":"Basic info","state":"State:","id":"ID:","local-pk":"Local public key:","remote-pk":"Remote public key:","type":"Type:"},"data":{"title":"Data transmission","uploaded":"Uploaded data:","downloaded":"Downloaded data:"}},"dialog":{"remote-key":"Remote public key","label":"Identification name (optional)","transport-type":"Transport type","success":"Transport created.","success-without-label":"The transport was created, but it was not possible to save the label.","errors":{"remote-key-length-error":"The remote public key must be 66 characters long.","remote-key-chars-error":"The remote public key must only contain hexadecimal characters.","transport-type-error":"The transport type is required."}},"filter-dialog":{"online":"The transport must be","id":"The id must contain","remote-node":"The remote key must contain","online-options":{"any":"Online or offline","online":"Online","offline":"Offline"}}},"routes":{"title":"Routes","list-title":"Route list","key":"Key","type":"Type","source":"Source","destination":"Destination","delete-confirmation":"Are you sure you want to delete the route?","delete-selected-confirmation":"Are you sure you want to delete the selected routes?","delete":"Delete route","deleted":"Delete operation completed.","empty":"Visor doesn\'t have any routes.","empty-with-filter":"No route matches the selected filtering criteria.","details":{"title":"Details","basic":{"title":"Basic info","key":"Key:","rule":"Rule:"},"summary":{"title":"Rule summary","keep-alive":"Keep alive:","type":"Rule type:","key-route-id":"Key route ID:"},"specific-fields-titles":{"app":"App fields","forward":"Forward fields","intermediary-forward":"Intermediary forward fields"},"specific-fields":{"route-id":"Next route ID:","transport-id":"Next transport ID:","destination-pk":"Destination public key:","source-pk":"Source public key:","destination-port":"Destination port:","source-port":"Source port:"}},"filter-dialog":{"key":"The key must contain","type":"The type must be","source":"The source must contain","destination":"The destination must contain","any-type-option":"Any"}},"copy":{"tooltip":"Click to copy","tooltip-with-text":"{{ text }} (Click to copy)","copied":"Copied!"},"selection":{"select-all":"Select all","unselect-all":"Unselect all","delete-all":"Delete all selected elements","start-all":"Start all selected apps","stop-all":"Stop all selected apps","enable-autostart-all":"Enable autostart for all selected apps","disable-autostart-all":"Disable autostart for all selected apps"},"refresh-button":{"seconds":"Updated a few seconds ago","minute":"Updated 1 minute ago","minutes":"Updated {{ time }} minutes ago","hour":"Updated 1 hour ago","hours":"Updated {{ time }} hours ago","day":"Updated 1 day ago","days":"Updated {{ time }} days ago","week":"Updated 1 week ago","weeks":"Updated {{ time }} weeks ago","error-tooltip":"There was an error updating the data. Retrying automatically every {{ time }} seconds..."},"view-all-link":{"label":"View all {{ number }} elements"},"paginator":{"first":"First","last":"Last","total":"Total: {{ number }} pages","select-page-title":"Select page"},"confirmation":{"header-text":"Confirmation","confirm-button":"Yes","cancel-button":"No","close":"Close","error-header-text":"Error","done-header-text":"Done"},"language":{"title":"Select language"},"tabs-window":{"title":"Change tab"}}')}}]);
\ No newline at end of file
diff --git a/cmd/skywire-visor/static/9.5338194eab44f674bbd0.js b/cmd/skywire-visor/static/9.5338194eab44f674bbd0.js
new file mode 100644
index 0000000000..162a44e6fd
--- /dev/null
+++ b/cmd/skywire-visor/static/9.5338194eab44f674bbd0.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[9],{bIFx:function(e){e.exports=JSON.parse('{"common":{"save":"Save","cancel":"Cancel","downloaded":"Downloaded","uploaded":"Uploaded","loading-error":"There was an error getting the data. Retrying...","operation-error":"There was an error trying to complete the operation.","no-connection-error":"There is no internet connection or connection to the Hypervisor.","error":"Error:","refreshed":"Data refreshed.","options":"Options","logout":"Logout","logout-error":"Error logging out.","logout-confirmation":"Are you sure you want to log out?","time-in-ms":"{{ time }}ms.","time-in-segs":"{{ time }}s.","ok":"Ok","unknown":"Unknown","close":"Close","window-size-error":"The window is too narrow for the content."},"labeled-element":{"edit-label":"Edit label","remove-label":"Remove label","copy":"Copy","remove-label-confirmation":"Do you really want to remove the label?","unnamed-element":"Unnamed","unnamed-local-visor":"Local visor","local-element":"Local","tooltip":"Click to copy the entry or change the label","tooltip-with-text":"{{ text }} (Click to copy the entry or change the label)"},"labels":{"title":"Labels","info":"Labels you have entered to easily identify visors, transports and other elements, instead of having to read machine generated identifiers.","list-title":"Label list","label":"Label","id":"Element ID","type":"Type","delete-confirmation":"Are you sure you want to delete the label?","delete-selected-confirmation":"Are you sure you want to delete the selected labels?","delete":"Delete label","deleted":"Delete operation completed.","empty":"There aren\'t any saved labels.","empty-with-filter":"No label matches the selected filtering criteria.","filter-dialog":{"label":"The label must contain","id":"The id must contain","type":"The type must be","type-options":{"any":"Any","visor":"Visor","dmsg-server":"DMSG server","transport":"Transport"}}},"filters":{"filter-action":"Filter","filter-info":"Filter list.","press-to-remove":"(Press to remove the filters)","remove-confirmation":"Are you sure you want to remove the filters?"},"tables":{"title":"Order by","sorting-title":"Ordered by:","sort-by-value":"Value","sort-by-label":"Label","label":"(label)","inverted-order":"(inverted)"},"start":{"title":"Start"},"node":{"title":"Visor details","not-found":"Visor not found.","statuses":{"online":"Online","online-tooltip":"Visor is online.","partially-online":"Online with problems","partially-online-tooltip":"Visor is online but not all services are working. For more information, open the details page and check the \\"Health info\\" section.","offline":"Offline","offline-tooltip":"Visor is offline."},"details":{"node-info":{"title":"Visor Info","label":"Label:","public-key":"Public key:","ip":"IP:","dmsg-server":"DMSG server:","ping":"Ping:","node-version":"Visor version:","time":{"title":"Time online:","seconds":"a few seconds","minute":"1 minute","minutes":"{{ time }} minutes","hour":"1 hour","hours":"{{ time }} hours","day":"1 day","days":"{{ time }} days","week":"1 week","weeks":"{{ time }} weeks"}},"router-info":{"title":"Router Info","min-hops":"Min hops:","max-hops":"Max hops:","change-config-button":"Change configuration"},"node-health":{"title":"Health Info","status":"Status:","transport-discovery":"Transport discovery:","route-finder":"Route finder:","setup-node":"Setup node:","uptime-tracker":"Uptime tracker:","address-resolver":"Address resolver:","element-offline":"Offline"},"node-traffic-data":"Traffic data"},"tabs":{"info":"Info","apps":"Apps","routing":"Routing"},"error-load":"An error occurred while refreshing the data. Retrying..."},"router-config":{"title":"Router Configuration","info":"Here you can configure how many hops the connections must pass through other Skywire visors before reaching the final destination. NOTE: the changes will not affect the existing routes.","min-hops":"Min hops","save-config-button":"Save configuration","done":"Changes saved."},"nodes":{"title":"Visor list","dmsg-title":"DMSG","update-all":"Update all online visors","hypervisor":"Hypervisor","state":"State","state-tooltip":"Current state","label":"Label","key":"Key","dmsg-server":"DMSG server","ping":"Ping","hypervisor-info":"This visor is the current Hypervisor.","copy-key":"Copy key","copy-dmsg":"Copy DMSG server key","copy-data":"Copy data","view-node":"View visor","delete-node":"Remove visor","delete-all-offline":"Remove all offline visors","error-load":"An error occurred while refreshing the list. Retrying...","empty":"There aren\'t any visors connected to this hypervisor.","empty-with-filter":"No visor matches the selected filtering criteria.","delete-node-confirmation":"Are you sure you want to remove the visor from the list?","delete-all-offline-confirmation":"Are you sure you want to remove all offline visors from the list?","delete-all-filtered-offline-confirmation":"All offline visors satisfying the current filtering criteria will be removed from the list. Are you sure you want to continue?","deleted":"Visor removed.","deleted-singular":"1 offline visor removed.","deleted-plural":"{{ number }} offline visors removed.","no-visors-to-update":"There are no visors to update.","filter-dialog":{"online":"The visor must be","label":"The label must contain","key":"The public key must contain","dmsg":"The DMSG server key must contain","online-options":{"any":"Online or offline","online":"Online","offline":"Offline"}}},"edit-label":{"label":"Label","done":"Label saved.","label-removed-warning":"The label was removed."},"settings":{"title":"Settings","password":{"initial-config-help":"Use this option for setting the initial password. After a password has been set, it is not possible to use this option to modify it.","help":"Options for changing your password.","old-password":"Old password","new-password":"New password","repeat-password":"Repeat password","password-changed":"Password changed.","error-changing":"Error changing password.","initial-config":{"title":"Set initial password","password":"Password","repeat-password":"Repeat password","set-password":"Set password","done":"Password set. Please use it to access the system.","error":"Error. Please make sure you have not already set the password."},"errors":{"bad-old-password":"The provided old password is not correct.","old-password-required":"Old password is required.","new-password-error":"Password must be 6-64 characters long.","passwords-not-match":"Passwords do not match.","default-password":"Don\'t use the default password (1234)."}},"updater-config":{"open-link":"Show updater settings","open-confirmation":"The updater settings are for experienced users only. Are you sure you want to continue?","help":"Use this form for overriding the settings that will be used by the updater. All empty fields will be ignored. The settings will be used for all updating operations, no mater which element is being updated, so please be careful.","channel":"Channel","version":"Version","archive-url":"Archive URL","checksum-url":"Checksum URL","not-saved":"The changes have not been saved yet.","save":"Save changes","remove-settings":"Remove the settings","saved":"The custom settings have been saved.","removed":"The custom settings have been removed.","save-confirmation":"Are you sure you want to apply the custom settings?","remove-confirmation":"Are you sure you want to remove the custom settings?"},"change-password":"Change password","refresh-rate":"Refresh rate","refresh-rate-help":"Time the system waits to update the data automatically.","refresh-rate-confirmation":"Refresh rate changed.","seconds":"seconds"},"login":{"password":"Password","incorrect-password":"Incorrect password.","initial-config":"Configure initial launch"},"actions":{"menu":{"terminal":"Terminal","config":"Configuration","update":"Update","reboot":"Reboot","logs":"View logs"},"reboot":{"confirmation":"Are you sure you want to reboot the visor?","done":"The visor is restarting."},"terminal-options":{"full":"Full terminal","simple":"Simple terminal"},"terminal":{"title":"Terminal","input-start":"Skywire terminal for {{address}}","error":"Unexpected error while trying to execute the command."}},"update":{"title":"Update","error-title":"Error","processing":"Looking for updates...","no-update":"There is no update for the visor. The currently installed version is:","no-updates":"No new updates were found.","already-updating":"Some visors are already being updated:","update-available":"The following updates were found:","update-available-singular":"The following updates for 1 visor were found:","update-available-plural":"The following updates for {{ number }} visors were found:","update-available-additional-singular":"The following additional updates for 1 visor were found:","update-available-additional-plural":"The following additional updates for {{ number }} visors were found:","update-instructions":"Click the \'Install updates\' button to continue.","updating":"The update operation has been started, you can open this window again for checking the progress:","version-change":"From {{ currentVersion }} to {{ newVersion }}","selected-channel":"Selected channel:","downloaded-file-name-prefix":"Downloading: ","speed-prefix":"Speed: ","time-downloading-prefix":"Time downloading: ","time-left-prefix":"Aprox. time left: ","starting":"Preparing to update","finished":"Status connection finished","install":"Install updates"},"apps":{"log":{"title":"Log","empty":"There are no log messages for the selected time range.","filter-button":"Only showing logs generated since:","filter":{"title":"Filter","filter":"Only show logs generated since","7-days":"The last 7 days","1-month":"The last 30 days","3-months":"The last 3 months","6-months":"The last 6 months","1-year":"The last year","all":"Show all"}},"apps-list":{"title":"Applications","list-title":"Application list","app-name":"Name","port":"Port","state":"State","state-tooltip":"Current state","auto-start":"Auto start","empty":"Visor doesn\'t have any applications.","empty-with-filter":"No app matches the selected filtering criteria.","disable-autostart":"Disable autostart","enable-autostart":"Enable autostart","autostart-disabled":"Autostart disabled","autostart-enabled":"Autostart enabled","unavailable-logs-error":"Unable to show the logs while the app is not running.","filter-dialog":{"state":"The state must be","name":"The name must contain","port":"The port must contain","autostart":"The autostart must be","state-options":{"any":"Running or stopped","running":"Running","stopped":"Stopped"},"autostart-options":{"any":"Enabled or disabled","enabled":"Enabled","disabled":"Disabled"}}},"vpn-socks-server-settings":{"socks-title":"Skysocks Settings","vpn-title":"VPN-Server Settings","new-password":"New password (Leave empty to remove the password)","repeat-password":"Repeat password","passwords-not-match":"Passwords do not match.","secure-mode-check":"Use secure mode","secure-mode-info":"When active, the server doesn\'t allow client/server SSH and doesn\'t allow any traffic from VPN clients to the server local network.","save":"Save","remove-passowrd-confirmation":"You left the password field empty. Are you sure you want to remove the password?","change-passowrd-confirmation":"Are you sure you want to change the password?","changes-made":"The changes have been made."},"vpn-socks-client-settings":{"socks-title":"Skysocks-Client Settings","vpn-title":"VPN-Client Settings","discovery-tab":"Search","remote-visor-tab":"Enter manually","history-tab":"History","settings-tab":"Settings","use":"Use this data","change-note":"Change note","remove-entry":"Remove entry","note":"Note:","note-entered-manually":"Entered manually","note-obtained":"Obtained from the discovery service","key":"Key:","port":"Port:","location":"Location:","state-available":"Available","state-offline":"Offline","public-key":"Remote visor public key","password":"Password","password-history-warning":"Note: the password will not be saved in the history.","copy-pk-info":"Copy public key.","copied-pk-info":"The public key has been copied.","copy-pk-error":"There was a problem copying the public key.","no-elements":"Currently there are no elements to show. Please try again later.","no-elements-for-filters":"There are no elements that meet the filter criteria.","no-filter":"No filter has been selected","click-to-change":"Click to change","remote-key-length-error":"The public key must be 66 characters long.","remote-key-chars-error":"The public key must only contain hexadecimal characters.","save":"Save","remove-from-history-confirmation":"Are you sure you want to remove the entry from the history?","change-key-confirmation":"Are you sure you want to change the remote visor public key?","changes-made":"The changes have been made.","no-history":"This tab will show the last {{ number }} public keys used.","default-note-warning":"The default note has been used.","pagination-info":"{{ currentElementsRange }} of {{ totalElements }}","killswitch-check":"Activate killswitch","killswitch-info":"When active, all network connections will be disabled if the app is running but the VPN protection is interrupted (for temporary errors or any other problem). This avoids data leaks.","settings-changed-alert":" The changes have not been saved yet.","save-settings":"Save settings","change-note-dialog":{"title":"Change Note","note":"Note"},"password-dialog":{"title":"Enter Password","password":"Password","info":"You are being asked for a password because a password was set when the selected entry was created, but the it was not saved for security reasons. You can leave the password empty if needed.","continue-button":"Continue"},"filter-dialog":{"title":"Filters","country":"The country must be","any-country":"Any","location":"The location must contain","pub-key":"The public key must contain","apply":"Apply"}},"stop-app":"Stop","start-app":"Start","view-logs":"View logs","settings":"Settings","open":"Open","error":"An error has occured and it was not possible to perform the operation.","stop-confirmation":"Are you sure you want to stop the app?","stop-selected-confirmation":"Are you sure you want to stop the selected apps?","disable-autostart-confirmation":"Are you sure you want to disable autostart for the app?","enable-autostart-confirmation":"Are you sure you want to enable autostart for the app?","disable-autostart-selected-confirmation":"Are you sure you want to disable autostart for the selected apps?","enable-autostart-selected-confirmation":"Are you sure you want to enable autostart for the selected apps?","operation-completed":"Operation completed.","operation-unnecessary":"The selection already has the requested setting.","status-running":"Running","status-stopped":"Stopped","status-failed":"Failed","status-running-tooltip":"App is currently running","status-stopped-tooltip":"App is currently stopped","status-failed-tooltip":"Something went wrong. Check the app\'s messages for more information"},"transports":{"title":"Transports","remove-all-offline":"Remove all offline transports","remove-all-offline-confirmation":"Are you sure you want to remove all offline transports?","remove-all-filtered-offline-confirmation":"All offline transports satisfying the current filtering criteria will be removed. Are you sure you want to continue?","info":"Connections you have with remote Skywire visors, to allow local Skywire apps to communicate with apps running on those remote visors.","list-title":"Transport list","state":"State","state-tooltip":"Current state","id":"ID","remote-node":"Remote","type":"Type","create":"Create transport","delete-confirmation":"Are you sure you want to delete the transport?","delete-selected-confirmation":"Are you sure you want to delete the selected transports?","delete":"Delete transport","deleted":"Delete operation completed.","empty":"Visor doesn\'t have any transports.","empty-with-filter":"No transport matches the selected filtering criteria.","statuses":{"online":"Online","online-tooltip":"Transport is online","offline":"Offline","offline-tooltip":"Transport is offline"},"details":{"title":"Details","basic":{"title":"Basic info","state":"State:","id":"ID:","local-pk":"Local public key:","remote-pk":"Remote public key:","type":"Type:"},"data":{"title":"Data transmission","uploaded":"Uploaded data:","downloaded":"Downloaded data:"}},"dialog":{"remote-key":"Remote public key","label":"Identification name (optional)","transport-type":"Transport type","success":"Transport created.","success-without-label":"The transport was created, but it was not possible to save the label.","errors":{"remote-key-length-error":"The remote public key must be 66 characters long.","remote-key-chars-error":"The remote public key must only contain hexadecimal characters.","transport-type-error":"The transport type is required."}},"filter-dialog":{"online":"The transport must be","id":"The id must contain","remote-node":"The remote key must contain","online-options":{"any":"Online or offline","online":"Online","offline":"Offline"}}},"routes":{"title":"Routes","info":"Paths used to reach the remote visors to which transports have been established. Routes are automatically generated as needed.","list-title":"Route list","key":"Key","type":"Type","source":"Source","destination":"Destination","delete-confirmation":"Are you sure you want to delete the route?","delete-selected-confirmation":"Are you sure you want to delete the selected routes?","delete":"Delete route","deleted":"Delete operation completed.","empty":"Visor doesn\'t have any routes.","empty-with-filter":"No route matches the selected filtering criteria.","details":{"title":"Details","basic":{"title":"Basic info","key":"Key:","rule":"Rule:"},"summary":{"title":"Rule summary","keep-alive":"Keep alive:","type":"Rule type:","key-route-id":"Key route ID:"},"specific-fields-titles":{"app":"App fields","forward":"Forward fields","intermediary-forward":"Intermediary forward fields"},"specific-fields":{"route-id":"Next route ID:","transport-id":"Next transport ID:","destination-pk":"Destination public key:","source-pk":"Source public key:","destination-port":"Destination port:","source-port":"Source port:"}},"filter-dialog":{"key":"The key must contain","type":"The type must be","source":"The source must contain","destination":"The destination must contain","any-type-option":"Any"}},"copy":{"tooltip":"Click to copy","tooltip-with-text":"{{ text }} (Click to copy)","copied":"Copied!"},"selection":{"select-all":"Select all","unselect-all":"Unselect all","delete-all":"Delete all selected elements","start-all":"Start all selected apps","stop-all":"Stop all selected apps","enable-autostart-all":"Enable autostart for all selected apps","disable-autostart-all":"Disable autostart for all selected apps"},"refresh-button":{"seconds":"Updated a few seconds ago","minute":"Updated 1 minute ago","minutes":"Updated {{ time }} minutes ago","hour":"Updated 1 hour ago","hours":"Updated {{ time }} hours ago","day":"Updated 1 day ago","days":"Updated {{ time }} days ago","week":"Updated 1 week ago","weeks":"Updated {{ time }} weeks ago","error-tooltip":"There was an error updating the data. Retrying automatically every {{ time }} seconds..."},"view-all-link":{"label":"View all {{ number }} elements"},"paginator":{"first":"First","last":"Last","total":"Total: {{ number }} pages","select-page-title":"Select page"},"confirmation":{"header-text":"Confirmation","confirm-button":"Yes","cancel-button":"No","close":"Close","error-header-text":"Error","done-header-text":"Done"},"language":{"title":"Select language"},"tabs-window":{"title":"Change tab"},"vpn":{"title":"VPN Control Panel","start":"Start","servers":"Servers","settings":"Settings","starting-blocked-server-error":"Unable to connect to the selected server because it has been added to the blocked servers list.","unexpedted-error":"An unexpected error occurred and the operation could not be completed.","remote-access-title":"It appears that you are accessing the system remotely","remote-access-text":"This application only allows you to manage the VPN protection of the device on which it was installed. Changes made with it will not affect remote devices like the one you seem to be using. Also, the displayed IP data may be incorrect.","server-change":{"busy-error":"The system is busy. Please wait.","backend-error":"It was not possible to change the server. Please make sure the public key is correct and the VPN app is running.","already-selected-warning":"The selected server is already being used.","change-server-while-connected-confirmation":"The VPN protection will be interrupted while changing the server and some data may be transmitted unprotected during the process. Do you want to continue?","start-same-server-confirmation":"You had already selected that server. Do you want to connect to it?"},"error-page":{"text":"The VPN client app is not available.","more-info":"It was not possible to connect to the VPN client app. This may be due to a configuration error, an unexpected problem with the visor or because you used an invalid public key in the URL.","text-pk":"Invalid configuration.","more-info-pk":"The application cannot be started because you have not specified the visor public key.","text-storage":"Error saving data.","more-info-storage":"There has been a conflict when trying to save the data and the application has been closed to prevent errors. This could happen if you open the application in more than one tab or window.","text-pk-change":"Invalid operation.","more-info-pk-change":"Please use this application to manage only one VPN client."},"connection-info":{"state-connecting":"Connecting","state-connecting-info":"The VPN protection is being activated.","state-connected":"Connected","state-connected-info":"The VPN protection is on.","state-disconnecting":"Disconnecting","state-disconnecting-info":"The VPN protection is being deactivated.","state-reconnecting":"Reconnecting","state-reconnecting-info":"The VPN protection is being restored.","state-disconnected":"Disconnected","state-disconnected-info":"The VPN protection is off.","state-info":"Current connection status.","latency-info":"Current latency.","upload-info":"Upload speed.","download-info":"Download speed."},"status-page":{"start-title":"Start VPN","no-server":"No server selected!","disconnect":"Disconnect","disconnect-confirmation":"Are you sure you want to stop the VPN protection?","entered-manually":"Entered manually","upload-info":"Uploaded data stats.","download-info":"Downloaded data stats.","latency-info":"Latency stats.","total-data-label":"total","problem-connecting-error":"It was not possible to connect to the server. The server may be invalid or temporarily down.","problem-starting-error":"It was not possible to start the VPN. Please make sure the base VPN client app is running.","problem-stopping-error":"It was not possible to stop the VPN. Please make sure the base VPN client app is running.","generic-problem-error":"It was not possible to perform the operation. Please make sure the base VPN client app is running.","select-server-warning":"Please select a server first.","data":{"ip":"IP address:","ip-problem-info":"There was a problem trying to get the IP. Please verify it using an external service.","ip-country-problem-info":"There was a problem trying to get the country. Please verify it using an external service.","ip-refresh-info":"Refresh","ip-refresh-time-warning":"Please wait {{ seconds }} second(s) before refreshing the data.","ip-refresh-loading-warning":"Please wait for the previous operation to finish.","country":"Country:","server":"Server:","server-note":"Server note:","original-server-note":"Original server note:","local-pk":"Local visor public key:","remote-pk":"Remote visor public key:","unavailable":"Unavailable"}},"server-options":{"tooltip":"Options","connect-without-password":"Connect without password","connect-without-password-confirmation":"The connection will be made without the password. Are you sure you want to continue?","connect-using-password":"Connect using a password","edit-name":"Custom name","edit-label":"Custom note","make-favorite":"Make favorite","make-favorite-confirmation":"Are you sure you want to mark this server as favorite? It will be removed from the blocked list.","make-favorite-done":"Added to the favorites list.","remove-from-favorites":"Remove from favorites","remove-from-favorites-done":"Removed from the favorites list.","block":"Block server","block-done":"Added to the blocked list.","block-confirmation":"Are you sure you want to block this server? It will be removed from the favorites list.","block-selected-confirmation":"Are you sure you want to block the currently selected server? All connections will be closed.","block-selected-favorite-confirmation":"Are you sure you want to block the currently selected server? All connections will be closed and it will be removed from the favorites list.","unblock":"Unblock server","unblock-done":"Removed from the blocked list.","remove-from-history":"Remove from history","remove-from-history-confirmation":"Are you sure you want to remove this server from the history?","remove-from-history-done":"Removed from history.","edit-value":{"name-title":"Custom Name","note-title":"Custom Note","name-label":"Custom name","note-label":"Custom note","apply-button":"Apply","changes-made-confirmation":"The change has been made."}},"server-conditions":{"selected-info":"This is the currently selected server.","blocked-info":"This server is in the blocked list.","favorite-info":"This server is in the favorites list.","history-info":"This server is in the server history.","has-password-info":"A password was set for connecting with this server."},"server-list":{"date-small-table-label":"Date","date-info":"Last time you used this server.","country-small-table-label":"Country","country-info":"Country where the server is located.","name-small-table-label":"Name","location-small-table-label":"Location","public-key-small-table-label":"Pk","public-key-info":"Server public key.","congestion-rating-small-table-label":"Congestion rating","congestion-rating-info":"Rating of the server related to how congested it tends to be.","congestion-small-table-label":"Congestion","congestion-info":"Current server congestion.","latency-rating-small-table-label":"Latency rating","latency-rating-info":"Rating of the server related to how much latency it tends to have.","latency-small-table-label":"Latency","latency-info":"Current server latency.","hops-small-table-label":"Hops","hops-info":"How many hops are needed for connecting with the server.","note-small-table-label":"Note","note-info":"Note about the server.","gold-rating-info":"Gold","silver-rating-info":"Silver","bronze-rating-info":"Bronze","notes-info":"Custom note: {{ custom }} - Original note: {{ original }}","empty-discovery":"Currently there are no VPN servers to show. Please try again later.","empty-history":"There is no history to show.","empty-favorites":"There are no favorite servers to show.","empty-blocked":"There are no blocked servers to show.","empty-with-filter":"No VPN server matches the selected filtering criteria.","add-manually-info":"Add server manually.","current-filters":"Current filters (press to remove)","none":"None","unknown":"Unknown","tabs":{"public":"Public","history":"History","favorites":"Favorites","blocked":"Blocked"},"add-server-dialog":{"title":"Enter manually","pk-label":"Server public key","password-label":"Server password (if any)","name-label":"Server name (optional)","note-label":"Personal note (optional)","pk-length-error":"The public key must be 66 characters long.","pk-chars-error":"The public key must only contain hexadecimal characters.","use-server-button":"Use server"},"password-dialog":{"title":"Enter Password","password-if-any-label":"Server password (if any)","password-label":"Server password","continue-button":"Continue"},"filter-dialog":{"country":"The country must be","name":"The name must contain","location":"The location must contain","public-key":"The public key must contain","congestion-rating":"The congestion rating must be","latency-rating":"The latency rating must be","rating-options":{"any":"Any","gold":"Gold","silver":"Silver","bronze":"Bronze"},"country-options":{"any":"Any"}}},"settings-page":{"setting-small-table-label":"Setting","value-small-table-label":"Value","killswitch":"Killswitch","killswitch-info":"When active, all network connections will be disabled if the app is running but the VPN protection is interrupted (for temporary errors or any other problem). This avoids data leaks.","get-ip":"Get IP info","get-ip-info":"When active, the application will use external services to obtain information about the current IP.","data-units":"Data units","data-units-info":"Allows to select the units that will be used to display the data transmission statistics.","setting-on":"On","setting-off":"Off","working-warning":"The system is busy. Please wait for the previous operation to finish.","change-while-connected-confirmation":"The VPN protection will be interrupted while changing the setting. Do you want to continue?","data-units-modal":{"title":"Data Units","only-bits":"Bits for all stats","only-bytes":"Bytes for all stats","bits-speed-and-bytes-volume":"Bits for speed and bytes for volume (default)"}}}}')}}]);
\ No newline at end of file
diff --git a/cmd/skywire-visor/static/assets/i18n/de.json b/cmd/skywire-visor/static/assets/i18n/de.json
index 6e066517fb..63bff53703 100644
--- a/cmd/skywire-visor/static/assets/i18n/de.json
+++ b/cmd/skywire-visor/static/assets/i18n/de.json
@@ -1,15 +1,9 @@
{
"common": {
"save": "Speichern",
- "edit": "Ändern",
"cancel": "Abbrechen",
- "node-key": "Visor Schlüssel",
- "app-key": "Anwendungs-Schlüssel",
- "discovery": "Discovery",
"downloaded": "Heruntergeladen",
"uploaded": "Hochgeladen",
- "delete": "Löschen",
- "none": "Nichts",
"loading-error": "Beim Laden der Daten ist ein Fehler aufgetreten. Versuche es erneut...",
"operation-error": "Beim Ausführen der Aktion ist ein Fehler aufgetreten.",
"no-connection-error": "Es ist keine Internetverbindung oder Verbindung zum Hypervisor vorhanden.",
@@ -17,23 +11,68 @@
"refreshed": "Daten aktualisiert.",
"options": "Optionen",
"logout": "Abmelden",
- "logout-error": "Fehler beim Abmelden."
+ "logout-error": "Fehler beim Abmelden.",
+ "logout-confirmation": "Wirklich abmelden?",
+ "time-in-ms": "{{ time }}ms",
+ "ok": "Ok",
+ "unknown": "Unbekannt",
+ "close": "Schließen"
},
- "tables": {
- "title": "Ordnen nach",
- "sorting-title": "Geordnet nach:",
- "ascending-order": "(aufsteigend)",
- "descending-order": "(absteigend)"
+ "labeled-element": {
+ "edit-label": "Bezeichnung ändern",
+ "remove-label": "Bezeichnung löschen",
+ "copy": "Kopieren",
+ "remove-label-confirmation": "Bezeichnung wirklich löschen?",
+ "unnamed-element": "Unbenannt",
+ "unnamed-local-visor": "Lokaler Visor",
+ "local-element": "Lokal",
+ "tooltip": "Klicken um Eintrag zu kopieren oder Bezeichnung zu ändern",
+ "tooltip-with-text": "{{ text }} (Klicken um Eintrag zu kopieren oder Bezeichnung zu ändern)"
},
- "inputs": {
- "errors": {
- "key-required": "Schlüssel wird benötigt.",
- "key-length": "Schlüssel muss 66 Zeichen lang sein."
+ "labels": {
+ "title": "Bezeichnung",
+ "info": "Bezeichnungen, die eingegeben wurden um Visor, Transporte und andere Elemente einfach wiederzuerkennen.",
+ "list-title": "Bezeichnunen Liste",
+ "label": "Bezeichnung",
+ "id": "Element ID",
+ "type": "Typ",
+ "delete-confirmation": "Diese Bezeichnung wirklich löschen?",
+ "delete-selected-confirmation": "Ausgewählte Bezeichnungen wirklich löschen?",
+ "delete": "Bezeichnung löschen",
+ "deleted": "Bezeichnung gelöscht.",
+ "empty": "Keine gespeicherten Bezeichnungen vorhanden.",
+ "empty-with-filter": "Keine Bezeichnung erfüllt die gewählten Filterkriterien.",
+ "filter-dialog": {
+ "label": "Die Bezeichnung muss beinhalten",
+ "id": "Die ID muss beinhalten",
+ "type": "Der Typ muss sein",
+
+ "type-options": {
+ "any": "Jeder",
+ "visor": "Visor",
+ "dmsg-server": "DMSG Server",
+ "transport": "Transport"
+ }
}
},
+ "filters": {
+ "filter-action": "Filter",
+ "press-to-remove": "(Drücken um Filter zu löschen)",
+ "remove-confirmation": "Filter wirkliche löschen?"
+ },
+
+ "tables": {
+ "title": "Ordnen nach",
+ "sorting-title": "Geordnet nach:",
+ "sort-by-value": "Wert",
+ "sort-by-label": "Bezeichnung",
+ "label": "(Bezeichnung)",
+ "inverted-order": "(Umgekehrt)"
+ },
+
"start": {
"title": "Start"
},
@@ -44,6 +83,8 @@
"statuses": {
"online": "Online",
"online-tooltip": "Visor ist online",
+ "partially-online": "Online mit Problemen",
+ "partially-online-tooltip": "Visor ist online, aber nicht alle Dienste laufen. Für Informationen bitte die Details Seite öffnen und die \"Zustand Info\" überprüfen.",
"offline": "Offline",
"offline-tooltip": "Visor ist offline"
},
@@ -52,9 +93,9 @@
"title": "Visor Info",
"label": "Bezeichnung:",
"public-key": "Öffentlicher Schlüssel:",
- "port": "Port:",
+ "dmsg-server": "DMSG Server:",
+ "ping": "Ping:",
"node-version": "Visor Version:",
- "app-protocol-version": "Anwendungsprotokollversion:",
"time": {
"title": "Online seit:",
"seconds": "ein paar Sekunden",
@@ -90,22 +131,50 @@
"nodes": {
"title": "Visor Liste",
+ "dmsg-title": "DMSG",
+ "update-all": "Alle Visor aktualisieren",
+ "hypervisor": "Hypervisor",
"state": "Status",
+ "state-tooltip": "Aktueller Status",
"label": "Bezeichnung",
"key": "Schlüssel",
+ "dmsg-server": "DMSG Server",
+ "ping": "Ping",
+ "hypervisor-info": "Dieser Visor ist der aktuelle Hypervisor.",
+ "copy-key": "Schlüssel kopieren",
+ "copy-dmsg": "DMSG Server Schlüssel kopieren",
+ "copy-data": "Daten kopieren",
"view-node": "Visor betrachten",
"delete-node": "Visor löschen",
+ "delete-all-offline": "Alle offline Visor löschen",
"error-load": "Beim Aktualisieren der Visor-Liste ist ein Fehler aufgetreten.",
"empty": "Es ist kein Visor zu diesem Hypervisor verbunden.",
+ "empty-with-filter": "Kein Visor erfüllt die gewählten Filterkriterien",
"delete-node-confirmation": "Visor wirklich von der Liste löschen?",
- "deleted": "Visor gelöscht."
+ "delete-all-offline-confirmation": "Wirklich alle offline Visor von der Liste löschen?",
+ "delete-all-filtered-offline-confirmation": "Alle offline Visor, welche die Filterkriterien erfüllen werden von der Liste gelöscht. Wirklich fortfahren?",
+ "deleted": "Visor gelöscht.",
+ "deleted-singular": "Ein offline Visor gelöscht.",
+ "deleted-plural": "{{ number }} offline Visor gelöscht.",
+ "no-visors-to-update": "Kein Visor zum Aktualiseren vorhanden.",
+ "filter-dialog": {
+ "online": "Der Visor muss",
+ "label": "Der Bezeichner muss enthalten",
+ "key": "Der öffentliche Schlüssel muss enthalten",
+ "dmsg": "Der DMSG Server Schlüssel muss enthalten",
+
+ "online-options": {
+ "any": "Online oder offline",
+ "online": "Online",
+ "offline": "Offline"
+ }
+ }
},
"edit-label": {
- "title": "Bezeichnung ändern",
"label": "Bezeichnung",
"done": "Bezeichnung gespeichert.",
- "default-label-warning": "Die Standardbezeichnung wurde verwendet."
+ "label-removed-warning": "Die Bezeichnung wurde gelöscht."
},
"settings": {
@@ -134,6 +203,22 @@
"default-password": "Das Standardpasswort darf nicht verwendet werden (1234)."
}
},
+ "updater-config" : {
+ "open-link": "Aktualisierungseinstellungen anzeigen",
+ "open-confirmation": "Es wird nur erfahrenen Benutzern empfohlen, die Aktualisierungseinstellungen zu modifizieren. Wirkich fortfahren?",
+ "help": "Dieses Formular benutzen um Einstellungen für die Aktualisierung zu überschreiben. Alle leeren Felder werden ignoriert. Die Einstellungen werden für alle Aktualisierungen übernommen. Dies geschieht unabhängig davon, welches Element aktualisiert wird. Bitte Vorsicht wahren.",
+ "channel": "Kanal",
+ "version": "Version",
+ "archive-url": "Archiv-URL",
+ "checksum-url": "Prüfsummen-URL",
+ "not-saved": "Die Änderungen wurden noch nicht gespeichert.",
+ "save": "Änderungen speichern",
+ "remove-settings": "Einstellungen löschen",
+ "saved": "Die benutzerdefinierten Einstellungen wurden gespeichert.",
+ "removed": "Die benutzerdefinierten Einstellungen wurden gelöscht.",
+ "save-confirmation": "Wirklich die benutzerdefinierten Einstellungen anwenden?",
+ "remove-confirmation": "Wirklich die benutzerdefinierten Einstellungen löschen?"
+ },
"change-password": "Passwort ändern",
"refresh-rate": "Aktualisierungsintervall",
"refresh-rate-help": "Zeit, bis das System die Daten automatisch aktualisiert.",
@@ -158,14 +243,6 @@
"confirmation": "Den Visor wirklich neustarten?",
"done": "Der Visor wird neu gestartet."
},
- "config": {
- "title": "Discovery Konfiguration",
- "header": "Discovery Addresse",
- "remove": "Addresse entfernen",
- "add": "Addresse hinzufügen",
- "cant-store": "Konfiguration kann nicht gespeichert werden.",
- "success": "Discovery Konfiguration wird durch Neustart angewendet."
- },
"terminal-options": {
"full": "Terminal",
"simple": "Einfaches Terminal"
@@ -174,54 +251,35 @@
"title": "Terminal",
"input-start": "Skywire Terminal für {{address}}",
"error": "Bei der Ausführung des Befehls ist ein Fehler aufgetreten."
- },
- "update": {
- "title": "Update",
- "processing": "Suche nach Updates...",
- "processing-button": "Bitte warten",
- "no-update": "Kein Update vorhanden.
Installierte Version: {{ version }}.",
- "update-available": "Es ist ein Update möglich.
Installierte Version: {{ currentVersion }}
Neue Version: {{ newVersion }}.",
- "done": "Ein Update für den Visor wird installiert.",
- "update-error": "Update konnte nicht installiert werden.",
- "install": "Update installieren"
}
},
+
+ "update": {
+ "title": "Aktualisierung",
+ "error-title": "Error",
+ "processing": "Suche nach Aktualisierungen...",
+ "no-update": "Keine Aktualisierung vorhanden.
Installierte Version:",
+ "no-updates": "Keine neuen Aktualisierungen gefunden.",
+ "already-updating": "Einige Visor werden schon aktualisiert:",
+ "update-available": "Folgende Aktualisierungen wurden gefunden:",
+ "update-available-singular": "Folgende Aktualisierungen wurden für einen Visor gefunden:",
+ "update-available-plural": "Folgende Aktualisierungen wurden für {{ number }} Visor gefunden:",
+ "update-available-additional-singular": "Folgende zusätzliche Aktualisierungen für einen Visor wurden gefunden:",
+ "update-available-additional-plural": "Folgende zusätzliche Aktualisierungen für {{ number }} Visor wurden gefunden:",
+ "update-instructions": "'Aktualisierungen installieren' klicken um fortzufahren.",
+ "updating": "Die Aktualisierung wurde gestartet. Das Fenster kann erneut geöffnet werden um den Fortschritt zu sehen:",
+ "version-change": "Von {{ currentVersion }} auf {{ newVersion }}",
+ "selected-channel": "Gewählter Kanal:",
+ "downloaded-file-name-prefix": "Herunterladen: ",
+ "speed-prefix": "Geschwindigkeit: ",
+ "time-downloading-prefix": "Dauer: ",
+ "time-left-prefix": "Dauert ungefähr noch: ",
+ "starting": "Aktualisierung wird vorbereitet",
+ "finished": "Status Verbindung beendet",
+ "install": "Aktualisierungen installieren"
+ },
"apps": {
- "socksc": {
- "title": "Mit Visor verbinden",
- "connect-keypair": "Schlüsselpaar eingeben",
- "connect-search": "Visor suchen",
- "connect-history": "Verlauf",
- "versions": "Versionen",
- "location": "Standort",
- "connect": "Verbinden",
- "next-page": "Nächste Seite",
- "prev-page": "Vorherige Seite",
- "auto-startup": "Automatisch mit Visor verbinden"
- },
- "sshc": {
- "title": "SSH Client",
- "connect": "Verbinde mit SSH Server",
- "auto-startup": "Starte SSH client automatisch",
- "connect-keypair": "Schlüsselpaar eingeben",
- "connect-history": "Verlauf"
- },
- "sshs": {
- "title": "SSH-Server",
- "whitelist": {
- "title": "SSH-Server Whitelist",
- "header": "Schlüssel",
- "add": "Zu Liste hinzufügen",
- "remove": "Schlüssel entfernen",
- "enter-key": "Node Schlüssel eingeben",
- "errors": {
- "cant-save": "Änderungen an der Whitelist konnten nicht gespeichert werden."
- },
- "saved-correctly": "Änderungen an der Whitelist gespeichert"
- },
- "auto-startup": "Starte SSH-Server automatisch"
- },
"log": {
"title": "Log",
"empty": "Im ausgewählten Intervall sind keine Logs vorhanden",
@@ -237,48 +295,116 @@
"all": "Zeige alle"
}
},
- "config": {
- "title": "Startup Konfiguration"
- },
- "menu": {
- "startup-config": "Startup Konfiguration",
- "log": "Log Nachrichten",
- "whitelist": "Whitelist"
- },
"apps-list": {
"title": "Anwendungen",
"list-title": "Anwendungsliste",
"app-name": "Name",
"port": "Port",
- "status": "Status",
+ "state": "Status",
+ "state-tooltip": "Aktueller Status",
"auto-start": "Auto-Start",
"empty": "Visor hat keine Anwendungen.",
+ "empty-with-filter": "Keine Anwendung erfüllt die Filterkriterien",
"disable-autostart": "Autostart ausschalten",
"enable-autostart": "Autostart einschalten",
"autostart-disabled": "Autostart aus",
- "autostart-enabled": "Autostart ein"
+ "autostart-enabled": "Autostart ein",
+ "unavailable-logs-error": "Kann Logs nicht zeigen, solange die Anwendung gestoppt ist.",
+
+ "filter-dialog": {
+ "state": "Der Status muss sein",
+ "name": "Der Name muss enthalten",
+ "port": "Der Port muss enthalten",
+ "autostart": "Autostart muss sein",
+
+ "state-options": {
+ "any": "Läuft oder gestoppt",
+ "running": "Läuft",
+ "stopped": "Gestoppt"
+ },
+
+ "autostart-options": {
+ "any": "An oder Aus",
+ "enabled": "An",
+ "disabled": "Aus"
+ }
+ }
},
- "skysocks-settings": {
- "title": "Skysocks Einstellungen",
+ "vpn-socks-server-settings": {
+ "socks-title": "Skysocks Einstellungen",
+ "vpn-title": "VPN-Server Einstellungen",
"new-password": "Neues Passwort (Um Passwort zu entfernen leer lassen)",
"repeat-password": "Passwort wiederholen",
"passwords-not-match": "Passwörter stimmen nicht überein.",
+ "secure-mode-check": "Sicherheitsmodus benutzen",
+ "secure-mode-info": "Wenn aktiv, erlaubt der Server kein Client/Server SSH und erlaubt kein Datenverkehr vom VPN-Client zum lokalen Netzwerk des Servers.",
"save": "Speichern",
"remove-passowrd-confirmation": "Kein Passwort eingegeben. Wirklich Passwort entfernen?",
"change-passowrd-confirmation": "Passwort wirklich ändern?",
"changes-made": "Änderungen wurden gespeichert."
},
- "skysocks-client-settings": {
- "title": "Skysocks-Client Einstellungen",
- "remote-visor-tab": "Remote Visor",
+ "vpn-socks-client-settings": {
+ "socks-title": "Skysocks-Client Einstellungen",
+ "vpn-title": "VPN-Client Einstellungen",
+ "discovery-tab": "Suche",
+ "remote-visor-tab": "Manuelle Eingabe",
"history-tab": "Verlauf",
+ "settings-tab": "Einstellungen",
+ "use": "Diese Daten benutzen",
+ "change-note": "Notiz ändern",
+ "remove-entry": "Eintrag löschen",
+ "note": "Notiz:",
+ "note-entered-manually": "Manuell eingegeben",
+ "note-obtained": "Von Discovery-Service erhalten",
+ "key": "Schlüssel:",
+ "port": "Port:",
+ "location": "Ort:",
+ "state-available": "Verfügbar",
+ "state-offline": "Offline",
"public-key": "Remote Visor öffentlicher Schlüssel",
+ "password": "Passwort",
+ "password-history-warning": "Achtung: Das Passwort wird nicht im Verlauf gespeichert.",
+ "copy-pk-info": "Öffentlichen Schlüssel kopieren.",
+ "copied-pk-info": "Öffentlicher Schlüssel wurde kopiert",
+ "copy-pk-error": "Beim Kopieren des öffentlichen Schlüssels ist ein Problem aufgetreten.",
+ "no-elements": "Derzeit können keine Elemente angezeigt werden. Bitte später versuchen.",
+ "no-elements-for-filters": "Keine Elemente, welche die Filterkriterien erfüllen.",
+ "no-filter": "Es wurde kein Filter gewählt.",
+ "click-to-change": "Zum Ändern klicken",
"remote-key-length-error": "Der öffentliche Schlüssel muss 66 Zeichen lang sein.",
"remote-key-chars-error": "Der öffentliche Schlüssel darf nur hexadezimale Zeichen enthalten.",
"save": "Speichern",
- "change-key-confirmation": "Wirklich den öffentlichen Schlüssel des Remote Visors ändern?",
+ "remove-from-history-confirmation": "Eintrag wirklich aus dem Verlauf löschen?",
+ "change-key-confirmation": "Wirklich den öffentlichen Schlüssel des remote Visors ändern?",
"changes-made": "Änderungen wurden gespeichert.",
- "no-history": "Dieser Tab zeigt die letzten {{ number }} öffentlichen Schlüssel, die benutzt wurden."
+ "no-history": "Dieser Tab zeigt die letzten {{ number }} öffentlichen Schlüssel, die benutzt wurden.",
+ "default-note-warning": "Die Standardnotiz wurde nicht benutzt.",
+ "pagination-info": "{{ currentElementsRange }} von {{ totalElements }}",
+ "killswitch-check": "Killswitch aktivieren",
+ "killswitch-info": "Wenn aktiv, werden alle Netzwerkverbindungen deaktiviert falls die Anwendung läuft aber der VPN Schutz unterbrochen wird (für temporäre Fehler oder andere Probleme).",
+ "settings-changed-alert": "Die Änderungen wurden noch nicht gespeichert.",
+ "save-settings": "Einstellungen speichern",
+
+ "change-note-dialog": {
+ "title": "Notiz ändern",
+ "note": "Notiz"
+ },
+
+ "password-dialog": {
+ "title": "Passwort eingeben",
+ "password": "Passwort",
+ "info": "Ein Passwort wird abgefragt, da bei der Erstellung des gewählten Eintrags ein Passwort gesetzt wurde, aus Sicherheitsgründen aber nicht gespeichert wurde. Das Passwort kann frei gelassen werden.",
+ "continue-button": "Fortfahren"
+ },
+
+ "filter-dialog": {
+ "title": "Filter",
+ "country": "Das Land muss sein",
+ "any-country": "Jedes",
+ "location": "Der Ort muss enthalten",
+ "pub-key": "Der öffentliche Schlüssel muss enthalten",
+ "apply": "Anwenden"
+ }
},
"stop-app": "Stopp",
"start-app": "Start",
@@ -303,7 +429,13 @@
"transports": {
"title": "Transporte",
+ "remove-all-offline": "Alle offline Transporte löschen",
+ "remove-all-offline-confirmation": "Wirkliche alle offline Transporte löschen?",
+ "remove-all-filtered-offline-confirmation": "Alle offline Transporte, welche die Filterkriterien erfüllen werden gelöscht. Wirklich fortfahren?",
+ "info": "Verbindungen mit remote Skywire Visor, um lokalen Skywire Anwendungen zu erlauben mit diesen remote Visor zu kommunizieren.",
"list-title": "Transport-Liste",
+ "state": "Status",
+ "state-tooltip": "Aktueller Status",
"id": "ID",
"remote-node": "Remote",
"type": "Typ",
@@ -313,10 +445,18 @@
"delete": "Transport entfernen",
"deleted": "Transport erfolgreich entfernt.",
"empty": "Visor hat keine Transporte.",
+ "empty-with-filter": "Kein Transport erfüllt die gewählten Filterkriterien.",
+ "statuses": {
+ "online": "Online",
+ "online-tooltip": "Transport ist online",
+ "offline": "Offline",
+ "offline-tooltip": "Transport ist offline"
+ },
"details": {
"title": "Details",
"basic": {
"title": "Basis Info",
+ "state": "Status:",
"id": "ID:",
"local-pk": "Lokaler öffentlicher Schlüssel:",
"remote-pk": "Remote öffentlicher Schlüssel:",
@@ -330,26 +470,43 @@
},
"dialog": {
"remote-key": "Remote öffentlicher Schlüssel:",
+ "label": "Bezeichnung (optional)",
"transport-type": "Transport-Typ",
"success": "Transport erstellt.",
+ "success-without-label": "Der Transport wurde erstellt, aber die Bezeichnung konnte nicht gespeichert werden.",
"errors": {
"remote-key-length-error": "Der remote öffentliche Schlüssel muss 66 Zeichen lang sein.",
"remote-key-chars-error": "Der remote öffentliche Schlüssel darf nur hexadezimale Zeichen enthalten.",
"transport-type-error": "Ein Transport-Typ wird benötigt."
}
+ },
+ "filter-dialog": {
+ "online": "Der Transport muss sein",
+ "id": "Die ID muss enthalten",
+ "remote-node": "Der remote Schlüssel muss enthalten",
+
+ "online-options": {
+ "any": "Online oder offline",
+ "online": "Online",
+ "offline": "Offline"
+ }
}
},
"routes": {
"title": "Routen",
+ "info": "Netzwerkpfade zum Erreichen von remote Visor. Routen werden bei Bedarf automatisch generiert.",
"list-title": "Routen-Liste",
"key": "Schlüssel",
- "rule": "Regel",
+ "type": "Typ",
+ "source": "Quelle",
+ "destination": "Ziel",
"delete-confirmation": "Diese Route wirklich entfernen?",
"delete-selected-confirmation": "Ausgewählte Routen wirklich entfernen?",
"delete": "Route entfernen",
"deleted": "Route erfolgreich entfernt.",
"empty": "Visor hat keine Routen.",
+ "empty-with-filter": "Keine Route erfüllt die gewählten Filterkriterien.",
"details": {
"title": "Details",
"basic": {
@@ -376,6 +533,13 @@
"destination-port": "Ziel Port:",
"source-port": "Quelle Port:"
}
+ },
+ "filter-dialog": {
+ "key": "Der Schlüssel muss enthalten",
+ "type": "Der Typ muss sein",
+ "source": "Die Quelle muss enhalten",
+ "destination": "Das Ziel muss enthalten",
+ "any-type-option": "Egal"
}
},
@@ -424,7 +588,8 @@
"confirm-button": "Ja",
"cancel-button": "Nein",
"close": "Schließen",
- "error-header-text": "Fehler"
+ "error-header-text": "Fehler",
+ "done-header-text": "Fertig"
},
"language" : {
diff --git a/cmd/skywire-visor/static/assets/i18n/de_base.json b/cmd/skywire-visor/static/assets/i18n/de_base.json
index c38c0e826e..00e9012cc2 100644
--- a/cmd/skywire-visor/static/assets/i18n/de_base.json
+++ b/cmd/skywire-visor/static/assets/i18n/de_base.json
@@ -1,15 +1,9 @@
{
"common": {
"save": "Save",
- "edit": "Edit",
"cancel": "Cancel",
- "node-key": "Node Key",
- "app-key": "App Key",
- "discovery": "Discovery",
"downloaded": "Downloaded",
"uploaded": "Uploaded",
- "delete": "Delete",
- "none": "None",
"loading-error": "There was an error getting the data. Retrying...",
"operation-error": "There was an error trying to complete the operation.",
"no-connection-error": "There is no internet connection or connection to the Hypervisor.",
@@ -17,23 +11,68 @@
"refreshed": "Data refreshed.",
"options": "Options",
"logout": "Logout",
- "logout-error": "Error logging out."
+ "logout-error": "Error logging out.",
+ "logout-confirmation": "Are you sure you want to log out?",
+ "time-in-ms": "{{ time }}ms",
+ "ok": "Ok",
+ "unknown": "Unknown",
+ "close": "Close"
},
- "tables": {
- "title": "Order by",
- "sorting-title": "Ordered by:",
- "ascending-order": "(ascending)",
- "descending-order": "(descending)"
+ "labeled-element": {
+ "edit-label": "Edit label",
+ "remove-label": "Remove label",
+ "copy": "Copy",
+ "remove-label-confirmation": "Do you really want to remove the label?",
+ "unnamed-element": "Unnamed",
+ "unnamed-local-visor": "Local visor",
+ "local-element": "Local",
+ "tooltip": "Click to copy the entry or change the label",
+ "tooltip-with-text": "{{ text }} (Click to copy the entry or change the label)"
},
- "inputs": {
- "errors": {
- "key-required": "Key is required.",
- "key-length": "Key must be 66 characters long."
+ "labels": {
+ "title": "Labels",
+ "info": "Labels you have entered to easily identify visors, transports and other elements, instead of having to read machine generated identifiers.",
+ "list-title": "Label list",
+ "label": "Label",
+ "id": "Element ID",
+ "type": "Type",
+ "delete-confirmation": "Are you sure you want to delete the label?",
+ "delete-selected-confirmation": "Are you sure you want to delete the selected labels?",
+ "delete": "Delete label",
+ "deleted": "Delete operation completed.",
+ "empty": "There aren't any saved labels.",
+ "empty-with-filter": "No label matches the selected filtering criteria.",
+ "filter-dialog": {
+ "label": "The label must contain",
+ "id": "The id must contain",
+ "type": "The type must be",
+
+ "type-options": {
+ "any": "Any",
+ "visor": "Visor",
+ "dmsg-server": "DMSG server",
+ "transport": "Transport"
+ }
}
},
+ "filters": {
+ "filter-action": "Filter",
+ "press-to-remove": "(Press to remove the filters)",
+ "remove-confirmation": "Are you sure you want to remove the filters?"
+ },
+
+ "tables": {
+ "title": "Order by",
+ "sorting-title": "Ordered by:",
+ "sort-by-value": "Value",
+ "sort-by-label": "Label",
+ "label": "(label)",
+ "inverted-order": "(inverted)"
+ },
+
"start": {
"title": "Start"
},
@@ -43,18 +82,20 @@
"not-found": "Visor not found.",
"statuses": {
"online": "Online",
- "online-tooltip": "Visor is online",
+ "online-tooltip": "Visor is online.",
+ "partially-online": "Online with problems",
+ "partially-online-tooltip": "Visor is online but not all services are working. For more information, open the details page and check the \"Health info\" section.",
"offline": "Offline",
- "offline-tooltip": "Visor is offline"
+ "offline-tooltip": "Visor is offline."
},
"details": {
"node-info": {
"title": "Visor Info",
"label": "Label:",
"public-key": "Public key:",
- "port": "Port:",
+ "dmsg-server": "DMSG server:",
+ "ping": "Ping:",
"node-version": "Visor version:",
- "app-protocol-version": "App protocol version:",
"time": {
"title": "Time online:",
"seconds": "a few seconds",
@@ -76,7 +117,7 @@
"setup-node": "Setup node:",
"uptime-tracker": "Uptime tracker:",
"address-resolver": "Address resolver:",
- "element-offline": "offline"
+ "element-offline": "Offline"
},
"node-traffic-data": "Traffic data"
},
@@ -90,22 +131,50 @@
"nodes": {
"title": "Visor list",
+ "dmsg-title": "DMSG",
+ "update-all": "Update all visors",
+ "hypervisor": "Hypervisor",
"state": "State",
+ "state-tooltip": "Current state",
"label": "Label",
"key": "Key",
+ "dmsg-server": "DMSG server",
+ "ping": "Ping",
+ "hypervisor-info": "This visor is the current Hypervisor.",
+ "copy-key": "Copy key",
+ "copy-dmsg": "Copy DMSG server key",
+ "copy-data": "Copy data",
"view-node": "View visor",
"delete-node": "Remove visor",
+ "delete-all-offline": "Remove all offline visors",
"error-load": "An error occurred while refreshing the list. Retrying...",
"empty": "There aren't any visors connected to this hypervisor.",
+ "empty-with-filter": "No visor matches the selected filtering criteria.",
"delete-node-confirmation": "Are you sure you want to remove the visor from the list?",
- "deleted": "Visor removed."
+ "delete-all-offline-confirmation": "Are you sure you want to remove all offline visors from the list?",
+ "delete-all-filtered-offline-confirmation": "All offline visors satisfying the current filtering criteria will be removed from the list. Are you sure you want to continue?",
+ "deleted": "Visor removed.",
+ "deleted-singular": "1 offline visor removed.",
+ "deleted-plural": "{{ number }} offline visors removed.",
+ "no-visors-to-update": "There are no visors to update.",
+ "filter-dialog": {
+ "online": "The visor must be",
+ "label": "The label must contain",
+ "key": "The public key must contain",
+ "dmsg": "The DMSG server key must contain",
+
+ "online-options": {
+ "any": "Online or offline",
+ "online": "Online",
+ "offline": "Offline"
+ }
+ }
},
"edit-label": {
- "title": "Edit label",
"label": "Label",
"done": "Label saved.",
- "default-label-warning": "The default label has been used."
+ "label-removed-warning": "The label was removed."
},
"settings": {
@@ -134,6 +203,22 @@
"default-password": "Don't use the default password (1234)."
}
},
+ "updater-config" : {
+ "open-link": "Show updater settings",
+ "open-confirmation": "The updater settings are for experienced users only. Are you sure you want to continue?",
+ "help": "Use this form for overriding the settings that will be used by the updater. All empty fields will be ignored. The settings will be used for all updating operations, no mater which element is being updated, so please be careful.",
+ "channel": "Channel",
+ "version": "Version",
+ "archive-url": "Archive URL",
+ "checksum-url": "Checksum URL",
+ "not-saved": "The changes have not been saved yet.",
+ "save": "Save changes",
+ "remove-settings": "Remove the settings",
+ "saved": "The custom settings have been saved.",
+ "removed": "The custom settings have been removed.",
+ "save-confirmation": "Are you sure you want to apply the custom settings?",
+ "remove-confirmation": "Are you sure you want to remove the custom settings?"
+ },
"change-password": "Change password",
"refresh-rate": "Refresh rate",
"refresh-rate-help": "Time the system waits to update the data automatically.",
@@ -158,14 +243,6 @@
"confirmation": "Are you sure you want to reboot the visor?",
"done": "The visor is restarting."
},
- "config": {
- "title": "Discovery configuration",
- "header": "Discovery address",
- "remove": "Remove address",
- "add": "Add address",
- "cant-store": "Unable to store node configuration.",
- "success": "Applying discovery configuration by restarting node process."
- },
"terminal-options": {
"full": "Full terminal",
"simple": "Simple terminal"
@@ -174,54 +251,35 @@
"title": "Terminal",
"input-start": "Skywire terminal for {{address}}",
"error": "Unexpected error while trying to execute the command."
- },
- "update": {
- "title": "Update",
- "processing": "Looking for updates...",
- "processing-button": "Please wait",
- "no-update": "Currently, there is no update for the visor. The currently installed version is {{ version }}.",
- "update-available": "There is an update available for the visor. Click the 'Install update' button to continue. The currently installed version is {{ currentVersion }} and the new version is {{ newVersion }}.",
- "done": "The visor is updated.",
- "update-error": "Could not install the update. Please, try again later.",
- "install": "Install update"
}
},
+
+ "update": {
+ "title": "Update",
+ "error-title": "Error",
+ "processing": "Looking for updates...",
+ "no-update": "There is no update for the visor. The currently installed version is:",
+ "no-updates": "No new updates were found.",
+ "already-updating": "Some visors are already being updated:",
+ "update-available": "The following updates were found:",
+ "update-available-singular": "The following updates for 1 visor were found:",
+ "update-available-plural": "The following updates for {{ number }} visors were found:",
+ "update-available-additional-singular": "The following additional updates for 1 visor were found:",
+ "update-available-additional-plural": "The following additional updates for {{ number }} visors were found:",
+ "update-instructions": "Click the 'Install updates' button to continue.",
+ "updating": "The update operation has been started, you can open this window again for checking the progress:",
+ "version-change": "From {{ currentVersion }} to {{ newVersion }}",
+ "selected-channel": "Selected channel:",
+ "downloaded-file-name-prefix": "Downloading: ",
+ "speed-prefix": "Speed: ",
+ "time-downloading-prefix": "Time downloading: ",
+ "time-left-prefix": "Aprox. time left: ",
+ "starting": "Preparing to update",
+ "finished": "Status connection finished",
+ "install": "Install updates"
+ },
"apps": {
- "socksc": {
- "title": "Connect to Node",
- "connect-keypair": "Enter keypair",
- "connect-search": "Search node",
- "connect-history": "History",
- "versions": "Versions",
- "location": "Location",
- "connect": "Connect",
- "next-page": "Next page",
- "prev-page": "Previous page",
- "auto-startup": "Automatically connect to Node"
- },
- "sshc": {
- "title": "SSH Client",
- "connect": "Connect to SSH Server",
- "auto-startup": "Automatically start SSH client",
- "connect-keypair": "Enter keypair",
- "connect-history": "History"
- },
- "sshs": {
- "title": "SSH Server",
- "whitelist": {
- "title": "SSH Server Whitelist",
- "header": "Key",
- "add": "Add to list",
- "remove": "Remove key",
- "enter-key": "Enter node key",
- "errors": {
- "cant-save": "Could not save whitelist changes."
- },
- "saved-correctly": "Whitelist changes saved successfully."
- },
- "auto-startup": "Automatically start SSH server"
- },
"log": {
"title": "Log",
"empty": "There are no log messages for the selected time range.",
@@ -237,48 +295,116 @@
"all": "Show all"
}
},
- "config": {
- "title": "Startup configuration"
- },
- "menu": {
- "startup-config": "Startup configuration",
- "log": "Log messages",
- "whitelist": "Whitelist"
- },
"apps-list": {
"title": "Applications",
"list-title": "Application list",
"app-name": "Name",
"port": "Port",
- "status": "Status",
+ "state": "State",
+ "state-tooltip": "Current state",
"auto-start": "Auto start",
"empty": "Visor doesn't have any applications.",
+ "empty-with-filter": "No app matches the selected filtering criteria.",
"disable-autostart": "Disable autostart",
"enable-autostart": "Enable autostart",
"autostart-disabled": "Autostart disabled",
- "autostart-enabled": "Autostart enabled"
+ "autostart-enabled": "Autostart enabled",
+ "unavailable-logs-error": "Unable to show the logs while the app is not running.",
+
+ "filter-dialog": {
+ "state": "The state must be",
+ "name": "The name must contain",
+ "port": "The port must contain",
+ "autostart": "The autostart must be",
+
+ "state-options": {
+ "any": "Running or stopped",
+ "running": "Running",
+ "stopped": "Stopped"
+ },
+
+ "autostart-options": {
+ "any": "Enabled or disabled",
+ "enabled": "Enabled",
+ "disabled": "Disabled"
+ }
+ }
},
- "skysocks-settings": {
- "title": "Skysocks Settings",
+ "vpn-socks-server-settings": {
+ "socks-title": "Skysocks Settings",
+ "vpn-title": "VPN-Server Settings",
"new-password": "New password (Leave empty to remove the password)",
"repeat-password": "Repeat password",
"passwords-not-match": "Passwords do not match.",
+ "secure-mode-check": "Use secure mode",
+ "secure-mode-info": "When active, the server doesn't allow client/server SSH and doesn't allow any traffic from VPN clients to the server local network.",
"save": "Save",
"remove-passowrd-confirmation": "You left the password field empty. Are you sure you want to remove the password?",
"change-passowrd-confirmation": "Are you sure you want to change the password?",
"changes-made": "The changes have been made."
},
- "skysocks-client-settings": {
- "title": "Skysocks-Client Settings",
- "remote-visor-tab": "Remote Visor",
+ "vpn-socks-client-settings": {
+ "socks-title": "Skysocks-Client Settings",
+ "vpn-title": "VPN-Client Settings",
+ "discovery-tab": "Search",
+ "remote-visor-tab": "Enter manually",
"history-tab": "History",
+ "settings-tab": "Settings",
+ "use": "Use this data",
+ "change-note": "Change note",
+ "remove-entry": "Remove entry",
+ "note": "Note:",
+ "note-entered-manually": "Entered manually",
+ "note-obtained": "Obtained from the discovery service",
+ "key": "Key:",
+ "port": "Port:",
+ "location": "Location:",
+ "state-available": "Available",
+ "state-offline": "Offline",
"public-key": "Remote visor public key",
+ "password": "Password",
+ "password-history-warning": "Note: the password will not be saved in the history.",
+ "copy-pk-info": "Copy public key.",
+ "copied-pk-info": "The public key has been copied.",
+ "copy-pk-error": "There was a problem copying the public key.",
+ "no-elements": "Currently there are no elements to show. Please try again later.",
+ "no-elements-for-filters": "There are no elements that meet the filter criteria.",
+ "no-filter": "No filter has been selected",
+ "click-to-change": "Click to change",
"remote-key-length-error": "The public key must be 66 characters long.",
"remote-key-chars-error": "The public key must only contain hexadecimal characters.",
"save": "Save",
+ "remove-from-history-confirmation": "Are you sure you want to remove the entry from the history?",
"change-key-confirmation": "Are you sure you want to change the remote visor public key?",
"changes-made": "The changes have been made.",
- "no-history": "This tab will show the last {{ number }} public keys used."
+ "no-history": "This tab will show the last {{ number }} public keys used.",
+ "default-note-warning": "The default note has been used.",
+ "pagination-info": "{{ currentElementsRange }} of {{ totalElements }}",
+ "killswitch-check": "Activate killswitch",
+ "killswitch-info": "When active, all network connections will be disabled if the app is running but the VPN protection is interrupted (for temporary errors or any other problem).",
+ "settings-changed-alert": " The changes have not been saved yet.",
+ "save-settings": "Save settings",
+
+ "change-note-dialog": {
+ "title": "Change Note",
+ "note": "Note"
+ },
+
+ "password-dialog": {
+ "title": "Enter Password",
+ "password": "Password",
+ "info": "You are being asked for a password because a password was set when the selected entry was created, but the it was not saved for security reasons. You can leave the password empty if needed.",
+ "continue-button": "Continue"
+ },
+
+ "filter-dialog": {
+ "title": "Filters",
+ "country": "The country must be",
+ "any-country": "Any",
+ "location": "The location must contain",
+ "pub-key": "The public key must contain",
+ "apply": "Apply"
+ }
},
"stop-app": "Stop",
"start-app": "Start",
@@ -303,7 +429,13 @@
"transports": {
"title": "Transports",
+ "remove-all-offline": "Remove all offline transports",
+ "remove-all-offline-confirmation": "Are you sure you want to remove all offline transports?",
+ "remove-all-filtered-offline-confirmation": "All offline transports satisfying the current filtering criteria will be removed. Are you sure you want to continue?",
+ "info": "Connections you have with remote Skywire visors, to allow local Skywire apps to communicate with apps running on those remote visors.",
"list-title": "Transport list",
+ "state": "State",
+ "state-tooltip": "Current state",
"id": "ID",
"remote-node": "Remote",
"type": "Type",
@@ -313,10 +445,18 @@
"delete": "Delete transport",
"deleted": "Delete operation completed.",
"empty": "Visor doesn't have any transports.",
+ "empty-with-filter": "No transport matches the selected filtering criteria.",
+ "statuses": {
+ "online": "Online",
+ "online-tooltip": "Transport is online",
+ "offline": "Offline",
+ "offline-tooltip": "Transport is offline"
+ },
"details": {
"title": "Details",
"basic": {
"title": "Basic info",
+ "state": "State:",
"id": "ID:",
"local-pk": "Local public key:",
"remote-pk": "Remote public key:",
@@ -330,26 +470,43 @@
},
"dialog": {
"remote-key": "Remote public key",
+ "label": "Identification name (optional)",
"transport-type": "Transport type",
"success": "Transport created.",
+ "success-without-label": "The transport was created, but it was not possible to save the label.",
"errors": {
"remote-key-length-error": "The remote public key must be 66 characters long.",
"remote-key-chars-error": "The remote public key must only contain hexadecimal characters.",
"transport-type-error": "The transport type is required."
}
+ },
+ "filter-dialog": {
+ "online": "The transport must be",
+ "id": "The id must contain",
+ "remote-node": "The remote key must contain",
+
+ "online-options": {
+ "any": "Online or offline",
+ "online": "Online",
+ "offline": "Offline"
+ }
}
},
"routes": {
"title": "Routes",
+ "info": "Paths used to reach the remote visors to which transports have been established. Routes are automatically generated as needed.",
"list-title": "Route list",
"key": "Key",
- "rule": "Rule",
+ "type": "Type",
+ "source": "Source",
+ "destination": "Destination",
"delete-confirmation": "Are you sure you want to delete the route?",
"delete-selected-confirmation": "Are you sure you want to delete the selected routes?",
"delete": "Delete route",
"deleted": "Delete operation completed.",
"empty": "Visor doesn't have any routes.",
+ "empty-with-filter": "No route matches the selected filtering criteria.",
"details": {
"title": "Details",
"basic": {
@@ -376,6 +533,13 @@
"destination-port": "Destination port:",
"source-port": "Source port:"
}
+ },
+ "filter-dialog": {
+ "key": "The key must contain",
+ "type": "The type must be",
+ "source": "The source must contain",
+ "destination": "The destination must contain",
+ "any-type-option": "Any"
}
},
@@ -424,7 +588,8 @@
"confirm-button": "Yes",
"cancel-button": "No",
"close": "Close",
- "error-header-text": "Error"
+ "error-header-text": "Error",
+ "done-header-text": "Done"
},
"language" : {
diff --git a/cmd/skywire-visor/static/assets/i18n/en.json b/cmd/skywire-visor/static/assets/i18n/en.json
index d274ee959e..240d2a5f38 100644
--- a/cmd/skywire-visor/static/assets/i18n/en.json
+++ b/cmd/skywire-visor/static/assets/i18n/en.json
@@ -13,10 +13,12 @@
"logout": "Logout",
"logout-error": "Error logging out.",
"logout-confirmation": "Are you sure you want to log out?",
- "time-in-ms": "{{ time }}ms",
+ "time-in-ms": "{{ time }}ms.",
+ "time-in-segs": "{{ time }}s.",
"ok": "Ok",
"unknown": "Unknown",
- "close": "Close"
+ "close": "Close",
+ "window-size-error": "The window is too narrow for the content."
},
"labeled-element": {
@@ -60,6 +62,7 @@
"filters": {
"filter-action": "Filter",
+ "filter-info": "Filter list.",
"press-to-remove": "(Press to remove the filters)",
"remove-confirmation": "Are you sure you want to remove the filters?"
},
@@ -93,7 +96,7 @@
"title": "Visor Info",
"label": "Label:",
"public-key": "Public key:",
- "port": "Port:",
+ "ip": "IP:",
"dmsg-server": "DMSG server:",
"ping": "Ping:",
"node-version": "Visor version:",
@@ -110,8 +113,14 @@
"weeks": "{{ time }} weeks"
}
},
+ "router-info": {
+ "title": "Router Info",
+ "min-hops": "Min hops:",
+ "max-hops": "Max hops:",
+ "change-config-button": "Change configuration"
+ },
"node-health": {
- "title": "Health info",
+ "title": "Health Info",
"status": "Status:",
"transport-discovery": "Transport discovery:",
"route-finder": "Route finder:",
@@ -130,10 +139,18 @@
"error-load": "An error occurred while refreshing the data. Retrying..."
},
+ "router-config": {
+ "title": "Router Configuration",
+ "info": "Here you can configure how many hops the connections must pass through other Skywire visors before reaching the final destination. NOTE: the changes will not affect the existing routes.",
+ "min-hops": "Min hops",
+ "save-config-button": "Save configuration",
+ "done": "Changes saved."
+ },
+
"nodes": {
"title": "Visor list",
"dmsg-title": "DMSG",
- "update-all": "Update all visors",
+ "update-all": "Update all online visors",
"hypervisor": "Hypervisor",
"state": "State",
"state-tooltip": "Current state",
@@ -238,7 +255,8 @@
"terminal": "Terminal",
"config": "Configuration",
"update": "Update",
- "reboot": "Reboot"
+ "reboot": "Reboot",
+ "logs": "View logs"
},
"reboot": {
"confirmation": "Are you sure you want to reboot the visor?",
@@ -382,7 +400,7 @@
"default-note-warning": "The default note has been used.",
"pagination-info": "{{ currentElementsRange }} of {{ totalElements }}",
"killswitch-check": "Activate killswitch",
- "killswitch-info": "When active, all network connections will be disabled if the app is running but the VPN protection is interrupted (for temporary errors or any other problem).",
+ "killswitch-info": "When active, all network connections will be disabled if the app is running but the VPN protection is interrupted (for temporary errors or any other problem). This avoids data leaks.",
"settings-changed-alert": " The changes have not been saved yet.",
"save-settings": "Save settings",
@@ -411,6 +429,7 @@
"start-app": "Start",
"view-logs": "View logs",
"settings": "Settings",
+ "open": "Open",
"error": "An error has occured and it was not possible to perform the operation.",
"stop-confirmation": "Are you sure you want to stop the app?",
"stop-selected-confirmation": "Are you sure you want to stop the selected apps?",
@@ -599,5 +618,231 @@
"tabs-window" : {
"title" : "Change tab"
+ },
+
+ "vpn" : {
+ "title": "VPN Control Panel",
+ "start": "Start",
+ "servers": "Servers",
+ "settings": "Settings",
+
+ "starting-blocked-server-error": "Unable to connect to the selected server because it has been added to the blocked servers list.",
+ "unexpedted-error": "An unexpected error occurred and the operation could not be completed.",
+
+ "remote-access-title": "It appears that you are accessing the system remotely",
+ "remote-access-text": "This application only allows you to manage the VPN protection of the device on which it was installed. Changes made with it will not affect remote devices like the one you seem to be using. Also, the displayed IP data may be incorrect.",
+
+ "server-change": {
+ "busy-error": "The system is busy. Please wait.",
+ "backend-error": "It was not possible to change the server. Please make sure the public key is correct and the VPN app is running.",
+ "already-selected-warning": "The selected server is already being used.",
+ "change-server-while-connected-confirmation": "The VPN protection will be interrupted while changing the server and some data may be transmitted unprotected during the process. Do you want to continue?",
+ "start-same-server-confirmation": "You had already selected that server. Do you want to connect to it?"
+ },
+
+ "error-page": {
+ "text": "The VPN client app is not available.",
+ "more-info": "It was not possible to connect to the VPN client app. This may be due to a configuration error, an unexpected problem with the visor or because you used an invalid public key in the URL.",
+ "text-pk": "Invalid configuration.",
+ "more-info-pk": "The application cannot be started because you have not specified the visor public key.",
+ "text-storage": "Error saving data.",
+ "more-info-storage": "There has been a conflict when trying to save the data and the application has been closed to prevent errors. This could happen if you open the application in more than one tab or window.",
+ "text-pk-change": "Invalid operation.",
+ "more-info-pk-change": "Please use this application to manage only one VPN client."
+ },
+
+ "connection-info" : {
+ "state-connecting": "Connecting",
+ "state-connecting-info": "The VPN protection is being activated.",
+ "state-connected": "Connected",
+ "state-connected-info": "The VPN protection is on.",
+ "state-disconnecting": "Disconnecting",
+ "state-disconnecting-info": "The VPN protection is being deactivated.",
+ "state-reconnecting": "Reconnecting",
+ "state-reconnecting-info": "The VPN protection is being restored.",
+ "state-disconnected": "Disconnected",
+ "state-disconnected-info": "The VPN protection is off.",
+ "state-info": "Current connection status.",
+ "latency-info": "Current latency.",
+ "upload-info": "Upload speed.",
+ "download-info": "Download speed."
+ },
+
+ "status-page": {
+ "start-title": "Start VPN",
+ "no-server": "No server selected!",
+ "disconnect": "Disconnect",
+ "disconnect-confirmation": "Are you sure you want to stop the VPN protection?",
+ "entered-manually": "Entered manually",
+ "upload-info": "Uploaded data stats.",
+ "download-info": "Downloaded data stats.",
+ "latency-info": "Latency stats.",
+ "total-data-label": "total",
+ "problem-connecting-error": "It was not possible to connect to the server. The server may be invalid or temporarily down.",
+ "problem-starting-error": "It was not possible to start the VPN. Please make sure the base VPN client app is running.",
+ "problem-stopping-error": "It was not possible to stop the VPN. Please make sure the base VPN client app is running.",
+ "generic-problem-error": "It was not possible to perform the operation. Please make sure the base VPN client app is running.",
+ "select-server-warning": "Please select a server first.",
+
+ "data": {
+ "ip": "IP address:",
+ "ip-problem-info": "There was a problem trying to get the IP. Please verify it using an external service.",
+ "ip-country-problem-info": "There was a problem trying to get the country. Please verify it using an external service.",
+ "ip-refresh-info": "Refresh",
+ "ip-refresh-time-warning": "Please wait {{ seconds }} second(s) before refreshing the data.",
+ "ip-refresh-loading-warning": "Please wait for the previous operation to finish.",
+ "country": "Country:",
+ "server": "Server:",
+ "server-note": "Server note:",
+ "original-server-note": "Original server note:",
+ "local-pk": "Local visor public key:",
+ "remote-pk": "Remote visor public key:",
+ "unavailable": "Unavailable"
+ }
+ },
+
+ "server-options": {
+ "tooltip": "Options",
+ "connect-without-password": "Connect without password",
+ "connect-without-password-confirmation": "The connection will be made without the password. Are you sure you want to continue?",
+ "connect-using-password": "Connect using a password",
+ "edit-name": "Custom name",
+ "edit-label": "Custom note",
+ "make-favorite": "Make favorite",
+ "make-favorite-confirmation": "Are you sure you want to mark this server as favorite? It will be removed from the blocked list.",
+ "make-favorite-done": "Added to the favorites list.",
+ "remove-from-favorites": "Remove from favorites",
+ "remove-from-favorites-done": "Removed from the favorites list.",
+ "block": "Block server",
+ "block-done": "Added to the blocked list.",
+ "block-confirmation": "Are you sure you want to block this server? It will be removed from the favorites list.",
+ "block-selected-confirmation": "Are you sure you want to block the currently selected server? All connections will be closed.",
+ "block-selected-favorite-confirmation": "Are you sure you want to block the currently selected server? All connections will be closed and it will be removed from the favorites list.",
+ "unblock": "Unblock server",
+ "unblock-done": "Removed from the blocked list.",
+ "remove-from-history": "Remove from history",
+ "remove-from-history-confirmation": "Are you sure you want to remove this server from the history?",
+ "remove-from-history-done": "Removed from history.",
+
+ "edit-value": {
+ "name-title": "Custom Name",
+ "note-title": "Custom Note",
+ "name-label": "Custom name",
+ "note-label": "Custom note",
+ "apply-button": "Apply",
+ "changes-made-confirmation": "The change has been made."
+ }
+ },
+
+ "server-conditions": {
+ "selected-info": "This is the currently selected server.",
+ "blocked-info": "This server is in the blocked list.",
+ "favorite-info": "This server is in the favorites list.",
+ "history-info": "This server is in the server history.",
+ "has-password-info": "A password was set for connecting with this server."
+ },
+
+ "server-list" : {
+ "date-small-table-label": "Date",
+ "date-info": "Last time you used this server.",
+ "country-small-table-label": "Country",
+ "country-info": "Country where the server is located.",
+ "name-small-table-label": "Name",
+ "location-small-table-label": "Location",
+ "public-key-small-table-label": "Pk",
+ "public-key-info": "Server public key.",
+ "congestion-rating-small-table-label": "Congestion rating",
+ "congestion-rating-info": "Rating of the server related to how congested it tends to be.",
+ "congestion-small-table-label": "Congestion",
+ "congestion-info": "Current server congestion.",
+ "latency-rating-small-table-label": "Latency rating",
+ "latency-rating-info": "Rating of the server related to how much latency it tends to have.",
+ "latency-small-table-label": "Latency",
+ "latency-info": "Current server latency.",
+ "hops-small-table-label": "Hops",
+ "hops-info": "How many hops are needed for connecting with the server.",
+ "note-small-table-label": "Note",
+ "note-info": "Note about the server.",
+ "gold-rating-info": "Gold",
+ "silver-rating-info": "Silver",
+ "bronze-rating-info": "Bronze",
+ "notes-info": "Custom note: {{ custom }} - Original note: {{ original }}",
+ "empty-discovery": "Currently there are no VPN servers to show. Please try again later.",
+ "empty-history": "There is no history to show.",
+ "empty-favorites": "There are no favorite servers to show.",
+ "empty-blocked": "There are no blocked servers to show.",
+ "empty-with-filter": "No VPN server matches the selected filtering criteria.",
+ "add-manually-info": "Add server manually.",
+ "current-filters": "Current filters (press to remove)",
+ "none": "None",
+ "unknown": "Unknown",
+
+ "tabs": {
+ "public": "Public",
+ "history": "History",
+ "favorites": "Favorites",
+ "blocked": "Blocked"
+ },
+
+ "add-server-dialog": {
+ "title": "Enter manually",
+ "pk-label": "Server public key",
+ "password-label": "Server password (if any)",
+ "name-label": "Server name (optional)",
+ "note-label": "Personal note (optional)",
+ "pk-length-error": "The public key must be 66 characters long.",
+ "pk-chars-error": "The public key must only contain hexadecimal characters.",
+ "use-server-button": "Use server"
+ },
+
+ "password-dialog": {
+ "title": "Enter Password",
+ "password-if-any-label": "Server password (if any)",
+ "password-label": "Server password",
+ "continue-button": "Continue"
+ },
+
+ "filter-dialog": {
+ "country": "The country must be",
+ "name": "The name must contain",
+ "location": "The location must contain",
+ "public-key": "The public key must contain",
+ "congestion-rating": "The congestion rating must be",
+ "latency-rating": "The latency rating must be",
+
+ "rating-options": {
+ "any": "Any",
+ "gold": "Gold",
+ "silver": "Silver",
+ "bronze": "Bronze"
+ },
+
+ "country-options": {
+ "any": "Any"
+ }
+ }
+ },
+
+ "settings-page": {
+ "setting-small-table-label": "Setting",
+ "value-small-table-label": "Value",
+ "killswitch": "Killswitch",
+ "killswitch-info": "When active, all network connections will be disabled if the app is running but the VPN protection is interrupted (for temporary errors or any other problem). This avoids data leaks.",
+ "get-ip": "Get IP info",
+ "get-ip-info": "When active, the application will use external services to obtain information about the current IP.",
+ "data-units": "Data units",
+ "data-units-info": "Allows to select the units that will be used to display the data transmission statistics.",
+ "setting-on": "On",
+ "setting-off": "Off",
+ "working-warning": "The system is busy. Please wait for the previous operation to finish.",
+ "change-while-connected-confirmation": "The VPN protection will be interrupted while changing the setting. Do you want to continue?",
+
+ "data-units-modal": {
+ "title": "Data Units",
+ "only-bits": "Bits for all stats",
+ "only-bytes": "Bytes for all stats",
+ "bits-speed-and-bytes-volume": "Bits for speed and bytes for volume (default)"
+ }
+ }
}
}
diff --git a/cmd/skywire-visor/static/assets/i18n/es.json b/cmd/skywire-visor/static/assets/i18n/es.json
index 41e1b37741..7812802fad 100644
--- a/cmd/skywire-visor/static/assets/i18n/es.json
+++ b/cmd/skywire-visor/static/assets/i18n/es.json
@@ -12,10 +12,13 @@
"options": "Opciones",
"logout": "Cerrar sesión",
"logout-error": "Error cerrando la sesión.",
- "time-in-ms": "{{ time }}ms",
+ "logout-confirmation": "Are you sure you want to log out?",
+ "time-in-ms": "{{ time }}ms.",
+ "time-in-segs": "{{ time }}s.",
"ok": "Ok",
"unknown": "Desconocido",
- "close": "Cerrar"
+ "close": "Cerrar",
+ "window-size-error": "La ventana es demasiado estrecha para el contenido."
},
"labeled-element": {
@@ -32,6 +35,7 @@
"labels": {
"title": "Etiquetas",
+ "info": "Etiquetas que ha introducido para identificar fácilmente visores, transportes y otros elementos, en lugar de tener que leer identificadores generados por una máquina.",
"list-title": "Lista de etiquetas",
"label": "Etiqueta",
"id": "ID del elemento",
@@ -58,16 +62,18 @@
"filters": {
"filter-action": "Filtrar",
- "active-filters": "Filtros activos: ",
- "press-to-remove": "(Presione para remover)",
+ "filter-info": "Lista de filtros.",
+ "press-to-remove": "(Presione para remover los filtros)",
"remove-confirmation": "¿Seguro que desea remover los filtros?"
},
"tables": {
"title": "Ordenar por",
"sorting-title": "Ordenado por:",
- "ascending-order": "(ascendente)",
- "descending-order": "(descendente)"
+ "sort-by-value": "Valor",
+ "sort-by-label": "Etiqueta",
+ "label": "(etiqueta)",
+ "inverted-order": "(invertido)"
},
"start": {
@@ -90,7 +96,7 @@
"title": "Información del visor",
"label": "Etiqueta:",
"public-key": "Llave pública:",
- "port": "Puerto:",
+ "ip": "IP:",
"dmsg-server": "Servidor DMSG:",
"ping": "Ping:",
"node-version": "Versión del visor:",
@@ -107,8 +113,14 @@
"weeks": "{{ time }} semanas"
}
},
+ "router-info": {
+ "title": "Información del Enrutador",
+ "min-hops": "Saltos mÃnimos:",
+ "max-hops": "Saltos máximos:",
+ "change-config-button": "Cambiar configuración"
+ },
"node-health": {
- "title": "Información de salud",
+ "title": "Información de Salud",
"status": "Estatus:",
"transport-discovery": "Transport discovery:",
"route-finder": "Route finder:",
@@ -127,10 +139,18 @@
"error-load": "Hubo un error al intentar refrescar los datos. Reintentando..."
},
+ "router-config": {
+ "title": "Configuración del Enrutador",
+ "info": "Aquà podrá configurar cuantos saltos la conexión deberá realizar a través de otros visores de Skywire antes de alcanzar el destino final. NOTA: los cambios no afectarán a las rutas ya existentes.",
+ "min-hops": "Saltos mÃnimos",
+ "save-config-button": "Guardar configuración",
+ "done": "Cambios guardados."
+ },
+
"nodes": {
"title": "Lista de visores",
"dmsg-title": "DMSG",
- "update-all": "Actualizar todos los visores",
+ "update-all": "Actualizar todos los visores online",
"hypervisor": "Hypervisor",
"state": "Estado",
"state-tooltip": "Estado actual",
@@ -154,7 +174,6 @@
"deleted": "Visor removido.",
"deleted-singular": "1 visor offline removido.",
"deleted-plural": "{{ number }} visores offline removidos.",
- "no-offline-nodes": "No se encontraron visores offline.",
"no-visors-to-update": "No hay visores para actualizar.",
"filter-dialog": {
"online": "El visor debe estar",
@@ -236,7 +255,8 @@
"terminal": "Terminal",
"config": "Configuración",
"update": "Actualizar",
- "reboot": "Reiniciar"
+ "reboot": "Reiniciar",
+ "logs": "Ver logs"
},
"reboot": {
"confirmation": "¿Seguro que desea reiniciar el visor?",
@@ -380,7 +400,7 @@
"default-note-warning": "La nota por defecto ha sido utilizada.",
"pagination-info": "{{ currentElementsRange }} de {{ totalElements }}",
"killswitch-check": "Activar killswitch",
- "killswitch-info": "Cuando está activo, todas las conexiones de red se desactivarán si la aplicación se está ejecutando pero la protección VPN está interrumpida (por errores temporales o cualquier otro problema).",
+ "killswitch-info": "Cuando está activo, todas las conexiones de red se desactivarán si la aplicación se está ejecutando pero la protección VPN está interrumpida (por errores temporales o cualquier otro problema). Esto evita fugas de datos.",
"settings-changed-alert": "Los cambios aún no se han guardado.",
"save-settings": "Guardar configuracion",
@@ -409,6 +429,7 @@
"start-app": "Iniciar",
"view-logs": "Ver logs",
"settings": "Configuración",
+ "open": "Abrir",
"error": "Se produjo un error y no fue posible realizar la operación.",
"stop-confirmation": "¿Seguro que desea detener la aplicación?",
"stop-selected-confirmation": "¿Seguro que desea detener las aplicaciones seleccionadas?",
@@ -431,6 +452,7 @@
"remove-all-offline": "Remover todos los transportes offline",
"remove-all-offline-confirmation": "¿Seguro que desea remover todos los transportes offline?",
"remove-all-filtered-offline-confirmation": "Todos los transportes offline que satisfagan los criterios de filtrado actuales serán removidos. ¿Seguro que desea continuar?",
+ "info": "Conexiones que tiene con visores remotos de Skywire, para permitir que las aplicaciones Skywire locales se comuniquen con las aplicaciones que se ejecutan en esos visores remotos.",
"list-title": "Lista de transportes",
"state": "Estado",
"state-tooltip": "Estado actual",
@@ -493,6 +515,7 @@
"routes": {
"title": "Rutas",
+ "info": "Caminos utilizados para llegar a los visores remotos con los que se han establecido transportes. Las rutas se generan automáticamente según sea necesario.",
"list-title": "Lista de rutas",
"key": "Llave",
"type": "Tipo",
@@ -595,5 +618,231 @@
"tabs-window" : {
"title" : "Cambiar pestaña"
+ },
+
+ "vpn" : {
+ "title": "Panel de Control de VPN",
+ "start": "Inicio",
+ "servers": "Servidores",
+ "settings": "Configuracion",
+
+ "starting-blocked-server-error": "No se puede conectar con el servidor seleccionado porque se ha agregado a la lista de servidores bloqueados.",
+ "unexpedted-error": "Se produjo un error inesperado y no se pudo completar la operación.",
+
+ "remote-access-title": "Parece que está accediendo al sistema de manera remota",
+ "remote-access-text": "Esta aplicación sólo permite administrar la protección VPN del dispositivo en el que fue instalada. Los cambios hechos con ella no afectarán a dispositivos remotos como el que parece estar usando. También es posible que los datos de IP que se muestren sean incorrectos.",
+
+ "server-change": {
+ "busy-error": "El sistema está ocupado. Por favor, espere.",
+ "backend-error": "No fue posible cambiar el servidor. Por favor, asegúrese de que la clave pública sea correcta y de que la aplicación VPN se esté ejecutando.",
+ "already-selected-warning": "El servidor seleccionado ya está siendo utilizando.",
+ "change-server-while-connected-confirmation": "La protección VPN se interrumpirá mientras se cambia el servidor y algunos datos pueden transmitirse sin protección durante el proceso. ¿Desea continuar?",
+ "start-same-server-confirmation": "Ya habÃa seleccionado ese servidor. ¿Desea conectarte a él?"
+ },
+
+ "error-page": {
+ "text": "La aplicación de cliente VPN no está disponible.",
+ "more-info": "No fue posible conectarse a la aplicación cliente VPN. Esto puede deberse a un error de configuración, un problema inesperado con el visor o porque utilizó una clave pública no válida en la URL.",
+ "text-pk": "Configuración inválida.",
+ "more-info-pk": "La aplicación no puede ser iniciada porque no ha especificado la clave pública del visor.",
+ "text-storage": "Error al guardar los datos.",
+ "more-info-storage": "Ha habido un conflicto al intentar guardar los datos y la aplicación se ha cerrado para prevenir errores. Esto puede suceder si abre la aplicación en más de una pestaña o ventana.",
+ "text-pk-change": "Operación inválida.",
+ "more-info-pk-change": "Por favor, utilice esta aplicación para administrar sólo un cliente VPN."
+ },
+
+ "connection-info" : {
+ "state-connecting": "Conectando",
+ "state-connecting-info": "Se está activando la protección VPN.",
+ "state-connected": "Conectado",
+ "state-connected-info": "La protección VPN está activada.",
+ "state-disconnecting": "Desconectando",
+ "state-disconnecting-info": "Se está desactivando la protección VPN.",
+ "state-reconnecting": "Reconectando",
+ "state-reconnecting-info": "Se está restaurando la protección de VPN.",
+ "state-disconnected": "Desconectado",
+ "state-disconnected-info": "La protección VPN está desactivada.",
+ "state-info": "Estado actual de la conexión.",
+ "latency-info": "Latencia actual.",
+ "upload-info": "Velocidad de subida.",
+ "download-info": "Velocidad de descarga."
+ },
+
+ "status-page": {
+ "start-title": "Iniciar VPN",
+ "no-server": "¡Ningún servidor seleccionado!",
+ "disconnect": "Desconectar",
+ "disconnect-confirmation": "¿Realmente desea detener la protección VPN?",
+ "entered-manually": "Ingresado manualmente",
+ "upload-info": "EstadÃsticas de datos subidos.",
+ "download-info": "EstadÃsticas de datos descargados.",
+ "latency-info": "EstadÃsticas de latencia.",
+ "total-data-label": "total",
+ "problem-connecting-error": "No fue posible conectarse al servidor. El servidor puede no ser válido o estar temporalmente inactivo.",
+ "problem-starting-error": "No fue posible iniciar la VPN. Por favor, asegúrese de que la aplicación base de cliente VPN esté ejecutandose.",
+ "problem-stopping-error": "No fue posible detener la VPN. Por favor, asegúrese de que la aplicación base de cliente VPN esté ejecutandose.",
+ "generic-problem-error": "No fue posible realizar la operación. Por favor, asegúrese de que la aplicación base de cliente VPN esté ejecutandose.",
+ "select-server-warning": "Por favor, seleccione un servidor primero.",
+
+ "data": {
+ "ip": "Dirección IP:",
+ "ip-problem-info": "Hubo un problema al intentar obtener la IP. Por favor, verifÃquela utilizando un servicio externo.",
+ "ip-country-problem-info": "Hubo un problema al intentar obtener el paÃs. Por favor, verifÃquelo utilizando un servicio externo.",
+ "ip-refresh-info": "Refrescar",
+ "ip-refresh-time-warning": "Por favor, espere {{ seconds }} segundo(s) antes de refrescar los datos.",
+ "ip-refresh-loading-warning": "Por favor, espere a que finalice la operación anterior.",
+ "country": "PaÃs:",
+ "server": "Servidor:",
+ "server-note": "Nota del servidor:",
+ "original-server-note": "Nota original del servidor:",
+ "local-pk": "Llave pública del visor local:",
+ "remote-pk": "Llave pública del visor remoto:",
+ "unavailable": "No disponible"
+ }
+ },
+
+ "server-options": {
+ "tooltip": "Opciones",
+ "connect-without-password": "Conectarse sin contraseña",
+ "connect-without-password-confirmation": "La conexión se realizará sin la contraseña. ¿Seguro que desea continuar?",
+ "connect-using-password": "Conectarse usando una contraseña",
+ "edit-name": "Nombre personalizado",
+ "edit-label": "Nota personalizada",
+ "make-favorite": "Hacer favorito",
+ "make-favorite-confirmation": "¿Realmente desea marcar este servidor como favorito? Se eliminará de la lista de bloqueados.",
+ "make-favorite-done": "Agregado a la lista de favoritos.",
+ "remove-from-favorites": "Quitar de favoritos",
+ "remove-from-favorites-done": "Eliminado de la lista de favoritos.",
+ "block": "Bloquear servidor",
+ "block-done": "Agregado a la lista de bloqueados.",
+ "block-confirmation": "¿Realmente desea bloquear este servidor? Se eliminará de la lista de favoritos.",
+ "block-selected-confirmation": "¿Realmente desea bloquear el servidor actualmente seleccionado? Se cerrarán todas las conexiones.",
+ "block-selected-favorite-confirmation": "¿Realmente desea bloquear el servidor actualmente seleccionado? Se cerrarán todas las conexiones y se eliminará de la lista de favoritos.",
+ "unblock": "Desbloquear servidor",
+ "unblock-done": "Eliminado de la lista de bloqueados.",
+ "remove-from-history": "Quitar del historial",
+ "remove-from-history-confirmation": "¿Realmente desea quitar del historial el servidor?",
+ "remove-from-history-done": "Eliminado del historial.",
+
+ "edit-value": {
+ "name-title": "Nombre Personalizado",
+ "note-title": "Nota Personalizada",
+ "name-label": "Nombre personalizado",
+ "note-label": "Nota personalizada",
+ "apply-button": "Aplicar",
+ "changes-made-confirmation": "Se ha realizado el cambio."
+ }
+ },
+
+ "server-conditions": {
+ "selected-info": "Este es el servidor actualmente seleccionado.",
+ "blocked-info": "Este servidor está en la lista de bloqueados.",
+ "favorite-info": "Este servidor está en la lista de favoritos.",
+ "history-info": "Este servidor está en el historial de servidores.",
+ "has-password-info": "Se estableció una contraseña para conectarse con este servidor."
+ },
+
+ "server-list" : {
+ "date-small-table-label": "Fecha",
+ "date-info": "Última vez en la que usó este servidor.",
+ "country-small-table-label": "PaÃs",
+ "country-info": "PaÃs donde se encuentra el servidor.",
+ "name-small-table-label": "Nombre",
+ "location-small-table-label": "Ubicación",
+ "public-key-small-table-label": "Lp",
+ "public-key-info": "Llave pública del servidor.",
+ "congestion-rating-small-table-label": "Calificación de congestión",
+ "congestion-rating-info": "Calificación del servidor relacionada con lo congestionado que suele estar.",
+ "congestion-small-table-label": "Congestión",
+ "congestion-info": "Congestión actual del servidor.",
+ "latency-rating-small-table-label": "Calificación de latencia",
+ "latency-rating-info": "Calificación del servidor relacionada con la latencia que suele tener.",
+ "latency-small-table-label": "Latencia",
+ "latency-info": "Latencia actual del servidor.",
+ "hops-small-table-label": "Saltos",
+ "hops-info": "Cuántos saltos se necesitan para conectarse con el servidor.",
+ "note-small-table-label": "Nota",
+ "note-info": "Nota acerca del servidor.",
+ "gold-rating-info": "Oro",
+ "silver-rating-info": "Plata",
+ "bronze-rating-info": "Bronce",
+ "notes-info": "Nota personalizada: {{ custom }} - Nota original: {{ original }}",
+ "empty-discovery": "Actualmente no hay servidores VPN para mostrar. Por favor, inténtelo de nuevo más tarde.",
+ "empty-history": "No hay historial que mostrar.",
+ "empty-favorites": "No hay servidores favoritos para mostrar.",
+ "empty-blocked": "No hay servidores bloqueados para mostrar.",
+ "empty-with-filter": "Ningún servidor VPN coincide con los criterios de filtrado seleccionados.",
+ "add-manually-info": "Agregar el servidor manualmente.",
+ "current-filters": "Filtros actuales (presione para eliminar)",
+ "none": "Ninguno",
+ "unknown": "Desconocido",
+
+ "tabs": {
+ "public": "Públicos",
+ "history": "Historial",
+ "favorites": "Favoritos",
+ "blocked": "Bloqueados"
+ },
+
+ "add-server-dialog": {
+ "title": "Ingresar manualmente",
+ "pk-label": "Llave pública del servidor",
+ "password-label": "Contraseña del servidor (si tiene)",
+ "name-label": "Nombre del servidor (opcional)",
+ "note-label": "Nota personal (opcional)",
+ "pk-length-error": "La llave pública debe tener 66 caracteres.",
+ "pk-chars-error": "La llave pública sólo debe contener caracteres hexadecimales.",
+ "use-server-button": "Usar servidor"
+ },
+
+ "password-dialog": {
+ "title": "Introducir Contraseña",
+ "password-if-any-label": "Contraseña del servidor (si tiene)",
+ "password-label": "Contraseña del servidor",
+ "continue-button": "Continuar"
+ },
+
+ "filter-dialog": {
+ "country": "El paÃs debe ser",
+ "name": "El nombre debe contener",
+ "location": "La ubicación debe contener",
+ "public-key": "La llave pública debe contener",
+ "congestion-rating": "La calificación de congestión debe ser",
+ "latency-rating": "La calificación de latencia debe ser",
+
+ "rating-options": {
+ "any": "Cualquiera",
+ "gold": "Oro",
+ "silver": "Plata",
+ "bronze": "Bronce"
+ },
+
+ "country-options": {
+ "any": "Cualquiera"
+ }
+ }
+ },
+
+ "settings-page": {
+ "setting-small-table-label": "Ajuste",
+ "value-small-table-label": "Valor",
+ "killswitch": "Killswitch",
+ "killswitch-info": "Cuando está activo, todas las conexiones de red se desactivarán si la aplicación se está ejecutando pero la protección VPN es interrumpida (por errores temporales o cualquier otro problema). Esto evita fugas de datos.",
+ "get-ip": "Obtener información de IP",
+ "get-ip-info": "Cuando está activa, la aplicación utilizará servicios externos para obtener información sobre la IP actual.",
+ "data-units": "Unidades de datos",
+ "data-units-info": "Permite seleccionar las unidades que se utilizarán para mostrar las estadÃsticas de transmisión de datos.",
+ "setting-on": "Encendido",
+ "setting-off": "Apagado",
+ "working-warning": "El sistema está ocupado. Por favor, espere a que finalice la operación anterior.",
+ "change-while-connected-confirmation": "La protección VPN se interrumpirá mientras se realiza el cambio. ¿Desea continuar?",
+
+ "data-units-modal": {
+ "title": "Unidades de Datos",
+ "only-bits": "Bits para todas las estadÃsticas",
+ "only-bytes": "Bytes para todas las estadÃsticas",
+ "bits-speed-and-bytes-volume": "Bits para velocidad y bytes para volumen (predeterminado)"
+ }
+ }
}
}
diff --git a/cmd/skywire-visor/static/assets/i18n/es_base.json b/cmd/skywire-visor/static/assets/i18n/es_base.json
index 6a230e43de..1ffce09e32 100644
--- a/cmd/skywire-visor/static/assets/i18n/es_base.json
+++ b/cmd/skywire-visor/static/assets/i18n/es_base.json
@@ -12,10 +12,13 @@
"options": "Options",
"logout": "Logout",
"logout-error": "Error logging out.",
- "time-in-ms": "{{ time }}ms",
+ "logout-confirmation": "Are you sure you want to log out?",
+ "time-in-ms": "{{ time }}ms.",
+ "time-in-segs": "{{ time }}s.",
"ok": "Ok",
"unknown": "Unknown",
- "close": "Close"
+ "close": "Close",
+ "window-size-error": "The window is too narrow for the content."
},
"labeled-element": {
@@ -32,6 +35,7 @@
"labels": {
"title": "Labels",
+ "info": "Labels you have entered to easily identify visors, transports and other elements, instead of having to read machine generated identifiers.",
"list-title": "Label list",
"label": "Label",
"id": "Element ID",
@@ -58,16 +62,18 @@
"filters": {
"filter-action": "Filter",
- "active-filters": "Active filters: ",
- "press-to-remove": "(Press to remove)",
+ "filter-info": "Filter list.",
+ "press-to-remove": "(Press to remove the filters)",
"remove-confirmation": "Are you sure you want to remove the filters?"
},
"tables": {
"title": "Order by",
"sorting-title": "Ordered by:",
- "ascending-order": "(ascending)",
- "descending-order": "(descending)"
+ "sort-by-value": "Value",
+ "sort-by-label": "Label",
+ "label": "(label)",
+ "inverted-order": "(inverted)"
},
"start": {
@@ -90,7 +96,7 @@
"title": "Visor Info",
"label": "Label:",
"public-key": "Public key:",
- "port": "Port:",
+ "ip": "IP:",
"dmsg-server": "DMSG server:",
"ping": "Ping:",
"node-version": "Visor version:",
@@ -107,8 +113,14 @@
"weeks": "{{ time }} weeks"
}
},
+ "router-info": {
+ "title": "Router Info",
+ "min-hops": "Min hops:",
+ "max-hops": "Max hops:",
+ "change-config-button": "Change configuration"
+ },
"node-health": {
- "title": "Health info",
+ "title": "Health Info",
"status": "Status:",
"transport-discovery": "Transport discovery:",
"route-finder": "Route finder:",
@@ -127,10 +139,18 @@
"error-load": "An error occurred while refreshing the data. Retrying..."
},
+ "router-config": {
+ "title": "Router Configuration",
+ "info": "Here you can configure how many hops the connections must pass through other Skywire visors before reaching the final destination. NOTE: the changes will not affect the existing routes.",
+ "min-hops": "Min hops",
+ "save-config-button": "Save configuration",
+ "done": "Changes saved."
+ },
+
"nodes": {
"title": "Visor list",
"dmsg-title": "DMSG",
- "update-all": "Update all visors",
+ "update-all": "Update all online visors",
"hypervisor": "Hypervisor",
"state": "State",
"state-tooltip": "Current state",
@@ -154,7 +174,6 @@
"deleted": "Visor removed.",
"deleted-singular": "1 offline visor removed.",
"deleted-plural": "{{ number }} offline visors removed.",
- "no-offline-nodes": "No offline visors found.",
"no-visors-to-update": "There are no visors to update.",
"filter-dialog": {
"online": "The visor must be",
@@ -236,7 +255,8 @@
"terminal": "Terminal",
"config": "Configuration",
"update": "Update",
- "reboot": "Reboot"
+ "reboot": "Reboot",
+ "logs": "View logs"
},
"reboot": {
"confirmation": "Are you sure you want to reboot the visor?",
@@ -380,7 +400,7 @@
"default-note-warning": "The default note has been used.",
"pagination-info": "{{ currentElementsRange }} of {{ totalElements }}",
"killswitch-check": "Activate killswitch",
- "killswitch-info": "When active, all network connections will be disabled if the app is running but the VPN protection is interrupted (for temporary errors or any other problem).",
+ "killswitch-info": "When active, all network connections will be disabled if the app is running but the VPN protection is interrupted (for temporary errors or any other problem). This avoids data leaks.",
"settings-changed-alert": " The changes have not been saved yet.",
"save-settings": "Save settings",
@@ -409,6 +429,7 @@
"start-app": "Start",
"view-logs": "View logs",
"settings": "Settings",
+ "open": "Open",
"error": "An error has occured and it was not possible to perform the operation.",
"stop-confirmation": "Are you sure you want to stop the app?",
"stop-selected-confirmation": "Are you sure you want to stop the selected apps?",
@@ -431,6 +452,7 @@
"remove-all-offline": "Remove all offline transports",
"remove-all-offline-confirmation": "Are you sure you want to remove all offline transports?",
"remove-all-filtered-offline-confirmation": "All offline transports satisfying the current filtering criteria will be removed. Are you sure you want to continue?",
+ "info": "Connections you have with remote Skywire visors, to allow local Skywire apps to communicate with apps running on those remote visors.",
"list-title": "Transport list",
"state": "State",
"state-tooltip": "Current state",
@@ -493,6 +515,7 @@
"routes": {
"title": "Routes",
+ "info": "Paths used to reach the remote visors to which transports have been established. Routes are automatically generated as needed.",
"list-title": "Route list",
"key": "Key",
"type": "Type",
@@ -595,5 +618,231 @@
"tabs-window" : {
"title" : "Change tab"
+ },
+
+ "vpn" : {
+ "title": "VPN Control Panel",
+ "start": "Start",
+ "servers": "Servers",
+ "settings": "Settings",
+
+ "starting-blocked-server-error": "Unable to connect to the selected server because it has been added to the blocked servers list.",
+ "unexpedted-error": "An unexpected error occurred and the operation could not be completed.",
+
+ "remote-access-title": "It appears that you are accessing the system remotely",
+ "remote-access-text": "This application only allows you to manage the VPN protection of the device on which it was installed. Changes made with it will not affect remote devices like the one you seem to be using. Also, the displayed IP data may be incorrect.",
+
+ "server-change": {
+ "busy-error": "The system is busy. Please wait.",
+ "backend-error": "It was not possible to change the server. Please make sure the public key is correct and the VPN app is running.",
+ "already-selected-warning": "The selected server is already being used.",
+ "change-server-while-connected-confirmation": "The VPN protection will be interrupted while changing the server and some data may be transmitted unprotected during the process. Do you want to continue?",
+ "start-same-server-confirmation": "You had already selected that server. Do you want to connect to it?"
+ },
+
+ "error-page": {
+ "text": "The VPN client app is not available.",
+ "more-info": "It was not possible to connect to the VPN client app. This may be due to a configuration error, an unexpected problem with the visor or because you used an invalid public key in the URL.",
+ "text-pk": "Invalid configuration.",
+ "more-info-pk": "The application cannot be started because you have not specified the visor public key.",
+ "text-storage": "Error saving data.",
+ "more-info-storage": "There has been a conflict when trying to save the data and the application has been closed to prevent errors. This could happen if you open the application in more than one tab or window.",
+ "text-pk-change": "Invalid operation.",
+ "more-info-pk-change": "Please use this application to manage only one VPN client."
+ },
+
+ "connection-info" : {
+ "state-connecting": "Connecting",
+ "state-connecting-info": "The VPN protection is being activated.",
+ "state-connected": "Connected",
+ "state-connected-info": "The VPN protection is on.",
+ "state-disconnecting": "Disconnecting",
+ "state-disconnecting-info": "The VPN protection is being deactivated.",
+ "state-reconnecting": "Reconnecting",
+ "state-reconnecting-info": "The VPN protection is being restored.",
+ "state-disconnected": "Disconnected",
+ "state-disconnected-info": "The VPN protection is off.",
+ "state-info": "Current connection status.",
+ "latency-info": "Current latency.",
+ "upload-info": "Upload speed.",
+ "download-info": "Download speed."
+ },
+
+ "status-page": {
+ "start-title": "Start VPN",
+ "no-server": "No server selected!",
+ "disconnect": "Disconnect",
+ "disconnect-confirmation": "Are you sure you want to stop the VPN protection?",
+ "entered-manually": "Entered manually",
+ "upload-info": "Uploaded data stats.",
+ "download-info": "Downloaded data stats.",
+ "latency-info": "Latency stats.",
+ "total-data-label": "total",
+ "problem-connecting-error": "It was not possible to connect to the server. The server may be invalid or temporarily down.",
+ "problem-starting-error": "It was not possible to start the VPN. Please make sure the base VPN client app is running.",
+ "problem-stopping-error": "It was not possible to stop the VPN. Please make sure the base VPN client app is running.",
+ "generic-problem-error": "It was not possible to perform the operation. Please make sure the base VPN client app is running.",
+ "select-server-warning": "Please select a server first.",
+
+ "data": {
+ "ip": "IP address:",
+ "ip-problem-info": "There was a problem trying to get the IP. Please verify it using an external service.",
+ "ip-country-problem-info": "There was a problem trying to get the country. Please verify it using an external service.",
+ "ip-refresh-info": "Refresh",
+ "ip-refresh-time-warning": "Please wait {{ seconds }} second(s) before refreshing the data.",
+ "ip-refresh-loading-warning": "Please wait for the previous operation to finish.",
+ "country": "Country:",
+ "server": "Server:",
+ "server-note": "Server note:",
+ "original-server-note": "Original server note:",
+ "local-pk": "Local visor public key:",
+ "remote-pk": "Remote visor public key:",
+ "unavailable": "Unavailable"
+ }
+ },
+
+ "server-options": {
+ "tooltip": "Options",
+ "connect-without-password": "Connect without password",
+ "connect-without-password-confirmation": "The connection will be made without the password. Are you sure you want to continue?",
+ "connect-using-password": "Connect using a password",
+ "edit-name": "Custom name",
+ "edit-label": "Custom note",
+ "make-favorite": "Make favorite",
+ "make-favorite-confirmation": "Are you sure you want to mark this server as favorite? It will be removed from the blocked list.",
+ "make-favorite-done": "Added to the favorites list.",
+ "remove-from-favorites": "Remove from favorites",
+ "remove-from-favorites-done": "Removed from the favorites list.",
+ "block": "Block server",
+ "block-done": "Added to the blocked list.",
+ "block-confirmation": "Are you sure you want to block this server? It will be removed from the favorites list.",
+ "block-selected-confirmation": "Are you sure you want to block the currently selected server? All connections will be closed.",
+ "block-selected-favorite-confirmation": "Are you sure you want to block the currently selected server? All connections will be closed and it will be removed from the favorites list.",
+ "unblock": "Unblock server",
+ "unblock-done": "Removed from the blocked list.",
+ "remove-from-history": "Remove from history",
+ "remove-from-history-confirmation": "Are you sure you want to remove this server from the history?",
+ "remove-from-history-done": "Removed from history.",
+
+ "edit-value": {
+ "name-title": "Custom Name",
+ "note-title": "Custom Note",
+ "name-label": "Custom name",
+ "note-label": "Custom note",
+ "apply-button": "Apply",
+ "changes-made-confirmation": "The change has been made."
+ }
+ },
+
+ "server-conditions": {
+ "selected-info": "This is the currently selected server.",
+ "blocked-info": "This server is in the blocked list.",
+ "favorite-info": "This server is in the favorites list.",
+ "history-info": "This server is in the server history.",
+ "has-password-info": "A password was set for connecting with this server."
+ },
+
+ "server-list" : {
+ "date-small-table-label": "Date",
+ "date-info": "Last time you used this server.",
+ "country-small-table-label": "Country",
+ "country-info": "Country where the server is located.",
+ "name-small-table-label": "Name",
+ "location-small-table-label": "Location",
+ "public-key-small-table-label": "Pk",
+ "public-key-info": "Server public key.",
+ "congestion-rating-small-table-label": "Congestion rating",
+ "congestion-rating-info": "Rating of the server related to how congested it tends to be.",
+ "congestion-small-table-label": "Congestion",
+ "congestion-info": "Current server congestion.",
+ "latency-rating-small-table-label": "Latency rating",
+ "latency-rating-info": "Rating of the server related to how much latency it tends to have.",
+ "latency-small-table-label": "Latency",
+ "latency-info": "Current server latency.",
+ "hops-small-table-label": "Hops",
+ "hops-info": "How many hops are needed for connecting with the server.",
+ "note-small-table-label": "Note",
+ "note-info": "Note about the server.",
+ "gold-rating-info": "Gold",
+ "silver-rating-info": "Silver",
+ "bronze-rating-info": "Bronze",
+ "notes-info": "Custom note: {{ custom }} - Original note: {{ original }}",
+ "empty-discovery": "Currently there are no VPN servers to show. Please try again later.",
+ "empty-history": "There is no history to show.",
+ "empty-favorites": "There are no favorite servers to show.",
+ "empty-blocked": "There are no blocked servers to show.",
+ "empty-with-filter": "No VPN server matches the selected filtering criteria.",
+ "add-manually-info": "Add server manually.",
+ "current-filters": "Current filters (press to remove)",
+ "none": "None",
+ "unknown": "Unknown",
+
+ "tabs": {
+ "public": "Public",
+ "history": "History",
+ "favorites": "Favorites",
+ "blocked": "Blocked"
+ },
+
+ "add-server-dialog": {
+ "title": "Enter manually",
+ "pk-label": "Server public key",
+ "password-label": "Server password (if any)",
+ "name-label": "Server name (optional)",
+ "note-label": "Personal note (optional)",
+ "pk-length-error": "The public key must be 66 characters long.",
+ "pk-chars-error": "The public key must only contain hexadecimal characters.",
+ "use-server-button": "Use server"
+ },
+
+ "password-dialog": {
+ "title": "Enter Password",
+ "password-if-any-label": "Server password (if any)",
+ "password-label": "Server password",
+ "continue-button": "Continue"
+ },
+
+ "filter-dialog": {
+ "country": "The country must be",
+ "name": "The name must contain",
+ "location": "The location must contain",
+ "public-key": "The public key must contain",
+ "congestion-rating": "The congestion rating must be",
+ "latency-rating": "The latency rating must be",
+
+ "rating-options": {
+ "any": "Any",
+ "gold": "Gold",
+ "silver": "Silver",
+ "bronze": "Bronze"
+ },
+
+ "country-options": {
+ "any": "Any"
+ }
+ }
+ },
+
+ "settings-page": {
+ "setting-small-table-label": "Setting",
+ "value-small-table-label": "Value",
+ "killswitch": "Killswitch",
+ "killswitch-info": "When active, all network connections will be disabled if the app is running but the VPN protection is interrupted (for temporary errors or any other problem). This avoids data leaks.",
+ "get-ip": "Get IP info",
+ "get-ip-info": "When active, the application will use external services to obtain information about the current IP.",
+ "data-units": "Data units",
+ "data-units-info": "Allows to select the units that will be used to display the data transmission statistics.",
+ "setting-on": "On",
+ "setting-off": "Off",
+ "working-warning": "The system is busy. Please wait for the previous operation to finish.",
+ "change-while-connected-confirmation": "The VPN protection will be interrupted while changing the setting. Do you want to continue?",
+
+ "data-units-modal": {
+ "title": "Data Units",
+ "only-bits": "Bits for all stats",
+ "only-bytes": "Bytes for all stats",
+ "bits-speed-and-bytes-volume": "Bits for speed and bytes for volume (default)"
+ }
+ }
}
}
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ab.png b/cmd/skywire-visor/static/assets/img/big-flags/ab.png
new file mode 100644
index 0000000000..a873bb34c0
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ab.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ad.png b/cmd/skywire-visor/static/assets/img/big-flags/ad.png
new file mode 100644
index 0000000000..c866ebdc6c
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ad.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ae.png b/cmd/skywire-visor/static/assets/img/big-flags/ae.png
new file mode 100644
index 0000000000..115fdd2df8
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ae.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/af.png b/cmd/skywire-visor/static/assets/img/big-flags/af.png
new file mode 100644
index 0000000000..16715473c9
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/af.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ag.png b/cmd/skywire-visor/static/assets/img/big-flags/ag.png
new file mode 100644
index 0000000000..24848a065b
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ag.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ai.png b/cmd/skywire-visor/static/assets/img/big-flags/ai.png
new file mode 100644
index 0000000000..740091d73f
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ai.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/al.png b/cmd/skywire-visor/static/assets/img/big-flags/al.png
new file mode 100644
index 0000000000..e380cb1d0f
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/al.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/am.png b/cmd/skywire-visor/static/assets/img/big-flags/am.png
new file mode 100644
index 0000000000..d415d1a143
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/am.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ao.png b/cmd/skywire-visor/static/assets/img/big-flags/ao.png
new file mode 100644
index 0000000000..adcaa3a214
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ao.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/aq.png b/cmd/skywire-visor/static/assets/img/big-flags/aq.png
new file mode 100644
index 0000000000..72b4032567
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/aq.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ar.png b/cmd/skywire-visor/static/assets/img/big-flags/ar.png
new file mode 100644
index 0000000000..aca9957e09
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ar.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/as.png b/cmd/skywire-visor/static/assets/img/big-flags/as.png
new file mode 100644
index 0000000000..4750e09ab0
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/as.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/at.png b/cmd/skywire-visor/static/assets/img/big-flags/at.png
new file mode 100644
index 0000000000..7987b336f7
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/at.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/au.png b/cmd/skywire-visor/static/assets/img/big-flags/au.png
new file mode 100644
index 0000000000..19080472b9
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/au.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/aw.png b/cmd/skywire-visor/static/assets/img/big-flags/aw.png
new file mode 100644
index 0000000000..db889bed50
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/aw.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ax.png b/cmd/skywire-visor/static/assets/img/big-flags/ax.png
new file mode 100644
index 0000000000..bddb2f02d8
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ax.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/az.png b/cmd/skywire-visor/static/assets/img/big-flags/az.png
new file mode 100644
index 0000000000..65a1c0634e
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/az.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ba.png b/cmd/skywire-visor/static/assets/img/big-flags/ba.png
new file mode 100644
index 0000000000..b0580bde3d
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ba.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/bb.png b/cmd/skywire-visor/static/assets/img/big-flags/bb.png
new file mode 100644
index 0000000000..648b77ca76
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/bb.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/bd.png b/cmd/skywire-visor/static/assets/img/big-flags/bd.png
new file mode 100644
index 0000000000..af372f14eb
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/bd.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/be.png b/cmd/skywire-visor/static/assets/img/big-flags/be.png
new file mode 100644
index 0000000000..ce6b3a6bb4
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/be.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/bf.png b/cmd/skywire-visor/static/assets/img/big-flags/bf.png
new file mode 100644
index 0000000000..f6f203cd82
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/bf.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/bg.png b/cmd/skywire-visor/static/assets/img/big-flags/bg.png
new file mode 100644
index 0000000000..b380ef9775
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/bg.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/bh.png b/cmd/skywire-visor/static/assets/img/big-flags/bh.png
new file mode 100644
index 0000000000..a61dc7034d
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/bh.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/bi.png b/cmd/skywire-visor/static/assets/img/big-flags/bi.png
new file mode 100644
index 0000000000..48b965a134
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/bi.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/bj.png b/cmd/skywire-visor/static/assets/img/big-flags/bj.png
new file mode 100644
index 0000000000..2700b43a90
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/bj.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/bl.png b/cmd/skywire-visor/static/assets/img/big-flags/bl.png
new file mode 100644
index 0000000000..7b00a9808d
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/bl.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/bm.png b/cmd/skywire-visor/static/assets/img/big-flags/bm.png
new file mode 100644
index 0000000000..608c6e740c
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/bm.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/bn.png b/cmd/skywire-visor/static/assets/img/big-flags/bn.png
new file mode 100644
index 0000000000..cbdc6a18bd
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/bn.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/bo.png b/cmd/skywire-visor/static/assets/img/big-flags/bo.png
new file mode 100644
index 0000000000..11abff59f9
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/bo.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/bq.png b/cmd/skywire-visor/static/assets/img/big-flags/bq.png
new file mode 100644
index 0000000000..80f03b7d45
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/bq.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/br.png b/cmd/skywire-visor/static/assets/img/big-flags/br.png
new file mode 100644
index 0000000000..25b4c0bfd6
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/br.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/bs.png b/cmd/skywire-visor/static/assets/img/big-flags/bs.png
new file mode 100644
index 0000000000..e6956eddab
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/bs.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/bt.png b/cmd/skywire-visor/static/assets/img/big-flags/bt.png
new file mode 100644
index 0000000000..a2a4372619
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/bt.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/bv.png b/cmd/skywire-visor/static/assets/img/big-flags/bv.png
new file mode 100644
index 0000000000..613ffabf86
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/bv.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/bw.png b/cmd/skywire-visor/static/assets/img/big-flags/bw.png
new file mode 100644
index 0000000000..b59462e10e
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/bw.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/by.png b/cmd/skywire-visor/static/assets/img/big-flags/by.png
new file mode 100644
index 0000000000..b14681214e
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/by.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/bz.png b/cmd/skywire-visor/static/assets/img/big-flags/bz.png
new file mode 100644
index 0000000000..95c32e815f
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/bz.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ca.png b/cmd/skywire-visor/static/assets/img/big-flags/ca.png
new file mode 100644
index 0000000000..8290d274e8
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ca.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/cc.png b/cmd/skywire-visor/static/assets/img/big-flags/cc.png
new file mode 100644
index 0000000000..028ab11071
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/cc.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/cd.png b/cmd/skywire-visor/static/assets/img/big-flags/cd.png
new file mode 100644
index 0000000000..c10f1a4b8a
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/cd.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/cf.png b/cmd/skywire-visor/static/assets/img/big-flags/cf.png
new file mode 100644
index 0000000000..952b36e86d
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/cf.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/cg.png b/cmd/skywire-visor/static/assets/img/big-flags/cg.png
new file mode 100644
index 0000000000..2c37b87081
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/cg.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ch.png b/cmd/skywire-visor/static/assets/img/big-flags/ch.png
new file mode 100644
index 0000000000..c5930cb3bf
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ch.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ci.png b/cmd/skywire-visor/static/assets/img/big-flags/ci.png
new file mode 100644
index 0000000000..1465759ae3
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ci.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ck.png b/cmd/skywire-visor/static/assets/img/big-flags/ck.png
new file mode 100644
index 0000000000..1d3ef12c02
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ck.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/cl.png b/cmd/skywire-visor/static/assets/img/big-flags/cl.png
new file mode 100644
index 0000000000..2ae0afd674
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/cl.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/cm.png b/cmd/skywire-visor/static/assets/img/big-flags/cm.png
new file mode 100644
index 0000000000..fa47d8f5b6
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/cm.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/cn.png b/cmd/skywire-visor/static/assets/img/big-flags/cn.png
new file mode 100644
index 0000000000..092a781bfa
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/cn.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/co.png b/cmd/skywire-visor/static/assets/img/big-flags/co.png
new file mode 100644
index 0000000000..e36064b7f3
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/co.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/cr.png b/cmd/skywire-visor/static/assets/img/big-flags/cr.png
new file mode 100644
index 0000000000..dbfb8da62f
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/cr.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/cu.png b/cmd/skywire-visor/static/assets/img/big-flags/cu.png
new file mode 100644
index 0000000000..d570c55f2a
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/cu.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/cv.png b/cmd/skywire-visor/static/assets/img/big-flags/cv.png
new file mode 100644
index 0000000000..8f2ff8432e
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/cv.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/cw.png b/cmd/skywire-visor/static/assets/img/big-flags/cw.png
new file mode 100644
index 0000000000..adc08b7f19
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/cw.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/cx.png b/cmd/skywire-visor/static/assets/img/big-flags/cx.png
new file mode 100644
index 0000000000..a5bae219ed
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/cx.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/cy.png b/cmd/skywire-visor/static/assets/img/big-flags/cy.png
new file mode 100644
index 0000000000..2e9ebb6b00
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/cy.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/cz.png b/cmd/skywire-visor/static/assets/img/big-flags/cz.png
new file mode 100644
index 0000000000..fc25af8df5
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/cz.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/de.png b/cmd/skywire-visor/static/assets/img/big-flags/de.png
new file mode 100644
index 0000000000..78279117b4
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/de.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/dj.png b/cmd/skywire-visor/static/assets/img/big-flags/dj.png
new file mode 100644
index 0000000000..76bca585e3
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/dj.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/dk.png b/cmd/skywire-visor/static/assets/img/big-flags/dk.png
new file mode 100644
index 0000000000..365c16d777
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/dk.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/dm.png b/cmd/skywire-visor/static/assets/img/big-flags/dm.png
new file mode 100644
index 0000000000..076c97aa16
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/dm.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/do.png b/cmd/skywire-visor/static/assets/img/big-flags/do.png
new file mode 100644
index 0000000000..4d78c5678b
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/do.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/dz.png b/cmd/skywire-visor/static/assets/img/big-flags/dz.png
new file mode 100644
index 0000000000..ec42172f65
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/dz.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ec.png b/cmd/skywire-visor/static/assets/img/big-flags/ec.png
new file mode 100644
index 0000000000..71f8350d57
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ec.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ee.png b/cmd/skywire-visor/static/assets/img/big-flags/ee.png
new file mode 100644
index 0000000000..6ddaf9e753
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ee.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/eg.png b/cmd/skywire-visor/static/assets/img/big-flags/eg.png
new file mode 100644
index 0000000000..1972894f99
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/eg.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/eh.png b/cmd/skywire-visor/static/assets/img/big-flags/eh.png
new file mode 100644
index 0000000000..03e256f074
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/eh.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/er.png b/cmd/skywire-visor/static/assets/img/big-flags/er.png
new file mode 100644
index 0000000000..e86cfb8e48
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/er.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/es.png b/cmd/skywire-visor/static/assets/img/big-flags/es.png
new file mode 100644
index 0000000000..ddfe09ceed
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/es.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/et.png b/cmd/skywire-visor/static/assets/img/big-flags/et.png
new file mode 100644
index 0000000000..8153dd8a22
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/et.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/fi.png b/cmd/skywire-visor/static/assets/img/big-flags/fi.png
new file mode 100644
index 0000000000..ccad92b17f
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/fi.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/fj.png b/cmd/skywire-visor/static/assets/img/big-flags/fj.png
new file mode 100644
index 0000000000..cf7bbbd7a8
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/fj.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/fk.png b/cmd/skywire-visor/static/assets/img/big-flags/fk.png
new file mode 100644
index 0000000000..dd3f785eb9
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/fk.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/fm.png b/cmd/skywire-visor/static/assets/img/big-flags/fm.png
new file mode 100644
index 0000000000..861b30676d
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/fm.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/fo.png b/cmd/skywire-visor/static/assets/img/big-flags/fo.png
new file mode 100644
index 0000000000..2187ddc1b5
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/fo.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/fr.png b/cmd/skywire-visor/static/assets/img/big-flags/fr.png
new file mode 100644
index 0000000000..6ec1382f75
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/fr.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ga.png b/cmd/skywire-visor/static/assets/img/big-flags/ga.png
new file mode 100644
index 0000000000..ea66ce3615
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ga.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/gb.png b/cmd/skywire-visor/static/assets/img/big-flags/gb.png
new file mode 100644
index 0000000000..ff5fc1a239
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/gb.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/gd.png b/cmd/skywire-visor/static/assets/img/big-flags/gd.png
new file mode 100644
index 0000000000..f56121afef
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/gd.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ge.png b/cmd/skywire-visor/static/assets/img/big-flags/ge.png
new file mode 100644
index 0000000000..28ee7a48b0
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ge.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/gf.png b/cmd/skywire-visor/static/assets/img/big-flags/gf.png
new file mode 100644
index 0000000000..9aab43e70e
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/gf.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/gg.png b/cmd/skywire-visor/static/assets/img/big-flags/gg.png
new file mode 100644
index 0000000000..9f14820183
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/gg.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/gh.png b/cmd/skywire-visor/static/assets/img/big-flags/gh.png
new file mode 100644
index 0000000000..fe5cfa0d4f
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/gh.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/gi.png b/cmd/skywire-visor/static/assets/img/big-flags/gi.png
new file mode 100644
index 0000000000..017aa13c95
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/gi.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/gl.png b/cmd/skywire-visor/static/assets/img/big-flags/gl.png
new file mode 100644
index 0000000000..f5fb1a9954
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/gl.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/gm.png b/cmd/skywire-visor/static/assets/img/big-flags/gm.png
new file mode 100644
index 0000000000..0d9e8e5175
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/gm.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/gn.png b/cmd/skywire-visor/static/assets/img/big-flags/gn.png
new file mode 100644
index 0000000000..90dfab4c3b
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/gn.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/gp.png b/cmd/skywire-visor/static/assets/img/big-flags/gp.png
new file mode 100644
index 0000000000..50ad28c435
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/gp.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/gq.png b/cmd/skywire-visor/static/assets/img/big-flags/gq.png
new file mode 100644
index 0000000000..44e44353b8
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/gq.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/gr.png b/cmd/skywire-visor/static/assets/img/big-flags/gr.png
new file mode 100644
index 0000000000..647ccad60f
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/gr.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/gs.png b/cmd/skywire-visor/static/assets/img/big-flags/gs.png
new file mode 100644
index 0000000000..c001df69df
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/gs.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/gt.png b/cmd/skywire-visor/static/assets/img/big-flags/gt.png
new file mode 100644
index 0000000000..178c39ff4b
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/gt.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/gu.png b/cmd/skywire-visor/static/assets/img/big-flags/gu.png
new file mode 100644
index 0000000000..40cfd76ab1
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/gu.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/gw.png b/cmd/skywire-visor/static/assets/img/big-flags/gw.png
new file mode 100644
index 0000000000..b288802be7
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/gw.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/gy.png b/cmd/skywire-visor/static/assets/img/big-flags/gy.png
new file mode 100644
index 0000000000..dfa08cf155
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/gy.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/hk.png b/cmd/skywire-visor/static/assets/img/big-flags/hk.png
new file mode 100644
index 0000000000..94e3ae175b
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/hk.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/hm.png b/cmd/skywire-visor/static/assets/img/big-flags/hm.png
new file mode 100644
index 0000000000..7b1a1304be
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/hm.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/hn.png b/cmd/skywire-visor/static/assets/img/big-flags/hn.png
new file mode 100644
index 0000000000..9724fe6fe5
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/hn.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/hr.png b/cmd/skywire-visor/static/assets/img/big-flags/hr.png
new file mode 100644
index 0000000000..1de343140f
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/hr.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ht.png b/cmd/skywire-visor/static/assets/img/big-flags/ht.png
new file mode 100644
index 0000000000..5a15bd3c61
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ht.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/hu.png b/cmd/skywire-visor/static/assets/img/big-flags/hu.png
new file mode 100644
index 0000000000..5dad477466
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/hu.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/id.png b/cmd/skywire-visor/static/assets/img/big-flags/id.png
new file mode 100644
index 0000000000..d99c3c25dc
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/id.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ie.png b/cmd/skywire-visor/static/assets/img/big-flags/ie.png
new file mode 100644
index 0000000000..b4186c96b7
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ie.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/il.png b/cmd/skywire-visor/static/assets/img/big-flags/il.png
new file mode 100644
index 0000000000..0a9686ea90
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/il.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/im.png b/cmd/skywire-visor/static/assets/img/big-flags/im.png
new file mode 100644
index 0000000000..13700ac1af
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/im.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/in.png b/cmd/skywire-visor/static/assets/img/big-flags/in.png
new file mode 100644
index 0000000000..bd438a1145
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/in.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/io.png b/cmd/skywire-visor/static/assets/img/big-flags/io.png
new file mode 100644
index 0000000000..832de28430
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/io.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/iq.png b/cmd/skywire-visor/static/assets/img/big-flags/iq.png
new file mode 100644
index 0000000000..b2c1d30353
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/iq.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ir.png b/cmd/skywire-visor/static/assets/img/big-flags/ir.png
new file mode 100644
index 0000000000..e1721ebeae
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ir.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/is.png b/cmd/skywire-visor/static/assets/img/big-flags/is.png
new file mode 100644
index 0000000000..389977171c
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/is.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/it.png b/cmd/skywire-visor/static/assets/img/big-flags/it.png
new file mode 100644
index 0000000000..2ae1d25ac8
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/it.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/je.png b/cmd/skywire-visor/static/assets/img/big-flags/je.png
new file mode 100644
index 0000000000..bb801c0406
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/je.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/jm.png b/cmd/skywire-visor/static/assets/img/big-flags/jm.png
new file mode 100644
index 0000000000..e5a3915870
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/jm.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/jo.png b/cmd/skywire-visor/static/assets/img/big-flags/jo.png
new file mode 100644
index 0000000000..2505dafa4e
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/jo.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/jp.png b/cmd/skywire-visor/static/assets/img/big-flags/jp.png
new file mode 100644
index 0000000000..b274655958
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/jp.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ke.png b/cmd/skywire-visor/static/assets/img/big-flags/ke.png
new file mode 100644
index 0000000000..0e9fe33c08
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ke.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/kg.png b/cmd/skywire-visor/static/assets/img/big-flags/kg.png
new file mode 100644
index 0000000000..03f8a66985
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/kg.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/kh.png b/cmd/skywire-visor/static/assets/img/big-flags/kh.png
new file mode 100644
index 0000000000..3454d266cc
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/kh.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ki.png b/cmd/skywire-visor/static/assets/img/big-flags/ki.png
new file mode 100644
index 0000000000..ad468de99d
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ki.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/km.png b/cmd/skywire-visor/static/assets/img/big-flags/km.png
new file mode 100644
index 0000000000..926cdbfe70
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/km.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/kn.png b/cmd/skywire-visor/static/assets/img/big-flags/kn.png
new file mode 100644
index 0000000000..ae9c238a36
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/kn.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/kp.png b/cmd/skywire-visor/static/assets/img/big-flags/kp.png
new file mode 100644
index 0000000000..b0c0724423
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/kp.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/kr.png b/cmd/skywire-visor/static/assets/img/big-flags/kr.png
new file mode 100644
index 0000000000..885c0e6749
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/kr.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/kw.png b/cmd/skywire-visor/static/assets/img/big-flags/kw.png
new file mode 100644
index 0000000000..2bef28855c
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/kw.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ky.png b/cmd/skywire-visor/static/assets/img/big-flags/ky.png
new file mode 100644
index 0000000000..8327c1389e
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ky.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/kz.png b/cmd/skywire-visor/static/assets/img/big-flags/kz.png
new file mode 100644
index 0000000000..40baf3e9b1
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/kz.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/la.png b/cmd/skywire-visor/static/assets/img/big-flags/la.png
new file mode 100644
index 0000000000..6cc31b5f0e
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/la.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/lb.png b/cmd/skywire-visor/static/assets/img/big-flags/lb.png
new file mode 100644
index 0000000000..841e6a6293
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/lb.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/lc.png b/cmd/skywire-visor/static/assets/img/big-flags/lc.png
new file mode 100644
index 0000000000..9736340329
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/lc.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/li.png b/cmd/skywire-visor/static/assets/img/big-flags/li.png
new file mode 100644
index 0000000000..e79a298987
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/li.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/lk.png b/cmd/skywire-visor/static/assets/img/big-flags/lk.png
new file mode 100644
index 0000000000..5968fbdebe
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/lk.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/lr.png b/cmd/skywire-visor/static/assets/img/big-flags/lr.png
new file mode 100644
index 0000000000..90ea011f64
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/lr.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ls.png b/cmd/skywire-visor/static/assets/img/big-flags/ls.png
new file mode 100644
index 0000000000..de3657af8a
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ls.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/lt.png b/cmd/skywire-visor/static/assets/img/big-flags/lt.png
new file mode 100644
index 0000000000..c690353205
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/lt.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/lu.png b/cmd/skywire-visor/static/assets/img/big-flags/lu.png
new file mode 100644
index 0000000000..55c3e5e5cd
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/lu.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/lv.png b/cmd/skywire-visor/static/assets/img/big-flags/lv.png
new file mode 100644
index 0000000000..86cf3cff5c
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/lv.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ly.png b/cmd/skywire-visor/static/assets/img/big-flags/ly.png
new file mode 100644
index 0000000000..1a04f5f276
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ly.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ma.png b/cmd/skywire-visor/static/assets/img/big-flags/ma.png
new file mode 100644
index 0000000000..8878444cc1
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ma.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/mc.png b/cmd/skywire-visor/static/assets/img/big-flags/mc.png
new file mode 100644
index 0000000000..586fe9def4
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/mc.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/md.png b/cmd/skywire-visor/static/assets/img/big-flags/md.png
new file mode 100644
index 0000000000..1d0985de02
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/md.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/me.png b/cmd/skywire-visor/static/assets/img/big-flags/me.png
new file mode 100644
index 0000000000..0b8c560ba6
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/me.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/mf.png b/cmd/skywire-visor/static/assets/img/big-flags/mf.png
new file mode 100644
index 0000000000..e139e0fde0
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/mf.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/mg.png b/cmd/skywire-visor/static/assets/img/big-flags/mg.png
new file mode 100644
index 0000000000..65a1c3c645
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/mg.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/mh.png b/cmd/skywire-visor/static/assets/img/big-flags/mh.png
new file mode 100644
index 0000000000..fe0fec6712
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/mh.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/mk.png b/cmd/skywire-visor/static/assets/img/big-flags/mk.png
new file mode 100644
index 0000000000..365e8c82e6
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/mk.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ml.png b/cmd/skywire-visor/static/assets/img/big-flags/ml.png
new file mode 100644
index 0000000000..8f22857645
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ml.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/mm.png b/cmd/skywire-visor/static/assets/img/big-flags/mm.png
new file mode 100644
index 0000000000..36d7628a30
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/mm.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/mn.png b/cmd/skywire-visor/static/assets/img/big-flags/mn.png
new file mode 100644
index 0000000000..8f9dd35e3c
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/mn.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/mo.png b/cmd/skywire-visor/static/assets/img/big-flags/mo.png
new file mode 100644
index 0000000000..f5470e2543
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/mo.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/mp.png b/cmd/skywire-visor/static/assets/img/big-flags/mp.png
new file mode 100644
index 0000000000..abac0dd0b7
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/mp.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/mq.png b/cmd/skywire-visor/static/assets/img/big-flags/mq.png
new file mode 100644
index 0000000000..6bf8aaaa77
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/mq.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/mr.png b/cmd/skywire-visor/static/assets/img/big-flags/mr.png
new file mode 100644
index 0000000000..b8ede3eec9
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/mr.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ms.png b/cmd/skywire-visor/static/assets/img/big-flags/ms.png
new file mode 100644
index 0000000000..09d5941ccc
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ms.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/mt.png b/cmd/skywire-visor/static/assets/img/big-flags/mt.png
new file mode 100644
index 0000000000..f01658ac62
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/mt.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/mu.png b/cmd/skywire-visor/static/assets/img/big-flags/mu.png
new file mode 100644
index 0000000000..ea3983e89b
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/mu.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/mv.png b/cmd/skywire-visor/static/assets/img/big-flags/mv.png
new file mode 100644
index 0000000000..9d59b3aaaf
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/mv.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/mw.png b/cmd/skywire-visor/static/assets/img/big-flags/mw.png
new file mode 100644
index 0000000000..64dc94feb3
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/mw.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/mx.png b/cmd/skywire-visor/static/assets/img/big-flags/mx.png
new file mode 100644
index 0000000000..fa53bc0be6
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/mx.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/my.png b/cmd/skywire-visor/static/assets/img/big-flags/my.png
new file mode 100644
index 0000000000..53d08f8f02
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/my.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/mz.png b/cmd/skywire-visor/static/assets/img/big-flags/mz.png
new file mode 100644
index 0000000000..8251ac51b8
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/mz.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/na.png b/cmd/skywire-visor/static/assets/img/big-flags/na.png
new file mode 100644
index 0000000000..223e44c302
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/na.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/nc.png b/cmd/skywire-visor/static/assets/img/big-flags/nc.png
new file mode 100644
index 0000000000..681493e43c
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/nc.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ne.png b/cmd/skywire-visor/static/assets/img/big-flags/ne.png
new file mode 100644
index 0000000000..d331209e17
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ne.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/nf.png b/cmd/skywire-visor/static/assets/img/big-flags/nf.png
new file mode 100644
index 0000000000..1c47167937
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/nf.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ng.png b/cmd/skywire-visor/static/assets/img/big-flags/ng.png
new file mode 100644
index 0000000000..371f76dc58
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ng.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ni.png b/cmd/skywire-visor/static/assets/img/big-flags/ni.png
new file mode 100644
index 0000000000..e5bdb0b668
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ni.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/nl.png b/cmd/skywire-visor/static/assets/img/big-flags/nl.png
new file mode 100644
index 0000000000..6ba414d799
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/nl.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/no.png b/cmd/skywire-visor/static/assets/img/big-flags/no.png
new file mode 100644
index 0000000000..cebf634a0d
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/no.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/np.png b/cmd/skywire-visor/static/assets/img/big-flags/np.png
new file mode 100644
index 0000000000..264d1de4d5
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/np.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/nr.png b/cmd/skywire-visor/static/assets/img/big-flags/nr.png
new file mode 100644
index 0000000000..29f0f25e36
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/nr.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/nu.png b/cmd/skywire-visor/static/assets/img/big-flags/nu.png
new file mode 100644
index 0000000000..e51bcda917
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/nu.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/nz.png b/cmd/skywire-visor/static/assets/img/big-flags/nz.png
new file mode 100644
index 0000000000..c3115432d6
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/nz.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/om.png b/cmd/skywire-visor/static/assets/img/big-flags/om.png
new file mode 100644
index 0000000000..417f48aa0d
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/om.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/pa.png b/cmd/skywire-visor/static/assets/img/big-flags/pa.png
new file mode 100644
index 0000000000..7f8ad1a13d
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/pa.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/pe.png b/cmd/skywire-visor/static/assets/img/big-flags/pe.png
new file mode 100644
index 0000000000..df598a8dd7
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/pe.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/pf.png b/cmd/skywire-visor/static/assets/img/big-flags/pf.png
new file mode 100644
index 0000000000..c754fc1321
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/pf.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/pg.png b/cmd/skywire-visor/static/assets/img/big-flags/pg.png
new file mode 100644
index 0000000000..99fb420507
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/pg.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ph.png b/cmd/skywire-visor/static/assets/img/big-flags/ph.png
new file mode 100644
index 0000000000..1d708012cd
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ph.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/pk.png b/cmd/skywire-visor/static/assets/img/big-flags/pk.png
new file mode 100644
index 0000000000..2714582145
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/pk.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/pl.png b/cmd/skywire-visor/static/assets/img/big-flags/pl.png
new file mode 100644
index 0000000000..b1ab7c6d17
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/pl.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/pm.png b/cmd/skywire-visor/static/assets/img/big-flags/pm.png
new file mode 100644
index 0000000000..4d562f36bc
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/pm.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/pn.png b/cmd/skywire-visor/static/assets/img/big-flags/pn.png
new file mode 100644
index 0000000000..9e351bdc47
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/pn.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/pr.png b/cmd/skywire-visor/static/assets/img/big-flags/pr.png
new file mode 100644
index 0000000000..b08b36b18f
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/pr.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ps.png b/cmd/skywire-visor/static/assets/img/big-flags/ps.png
new file mode 100644
index 0000000000..610967a8ee
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ps.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/pt.png b/cmd/skywire-visor/static/assets/img/big-flags/pt.png
new file mode 100644
index 0000000000..e7f0ea10d7
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/pt.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/pw.png b/cmd/skywire-visor/static/assets/img/big-flags/pw.png
new file mode 100644
index 0000000000..22d1b4e038
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/pw.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/py.png b/cmd/skywire-visor/static/assets/img/big-flags/py.png
new file mode 100644
index 0000000000..8a71312da6
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/py.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/qa.png b/cmd/skywire-visor/static/assets/img/big-flags/qa.png
new file mode 100644
index 0000000000..713007deb7
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/qa.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/re.png b/cmd/skywire-visor/static/assets/img/big-flags/re.png
new file mode 100644
index 0000000000..724f50f0e4
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/re.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ro.png b/cmd/skywire-visor/static/assets/img/big-flags/ro.png
new file mode 100644
index 0000000000..b53769f135
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ro.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/rs.png b/cmd/skywire-visor/static/assets/img/big-flags/rs.png
new file mode 100644
index 0000000000..c990b23628
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/rs.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ru.png b/cmd/skywire-visor/static/assets/img/big-flags/ru.png
new file mode 100644
index 0000000000..0f645fc07d
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ru.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/rw.png b/cmd/skywire-visor/static/assets/img/big-flags/rw.png
new file mode 100644
index 0000000000..4775d0d665
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/rw.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/sa.png b/cmd/skywire-visor/static/assets/img/big-flags/sa.png
new file mode 100644
index 0000000000..998a658e96
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/sa.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/sb.png b/cmd/skywire-visor/static/assets/img/big-flags/sb.png
new file mode 100644
index 0000000000..ee8409d91f
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/sb.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/sc.png b/cmd/skywire-visor/static/assets/img/big-flags/sc.png
new file mode 100644
index 0000000000..c5f9543218
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/sc.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/sd.png b/cmd/skywire-visor/static/assets/img/big-flags/sd.png
new file mode 100644
index 0000000000..4b175fad5c
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/sd.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/se.png b/cmd/skywire-visor/static/assets/img/big-flags/se.png
new file mode 100644
index 0000000000..8982677f20
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/se.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/sg.png b/cmd/skywire-visor/static/assets/img/big-flags/sg.png
new file mode 100644
index 0000000000..b10e9ed976
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/sg.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/sh.png b/cmd/skywire-visor/static/assets/img/big-flags/sh.png
new file mode 100644
index 0000000000..a9b4eb1b6e
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/sh.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/si.png b/cmd/skywire-visor/static/assets/img/big-flags/si.png
new file mode 100644
index 0000000000..e47fb392b5
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/si.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/sj.png b/cmd/skywire-visor/static/assets/img/big-flags/sj.png
new file mode 100644
index 0000000000..28b8aa323f
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/sj.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/sk.png b/cmd/skywire-visor/static/assets/img/big-flags/sk.png
new file mode 100644
index 0000000000..3a2f9cd317
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/sk.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/sl.png b/cmd/skywire-visor/static/assets/img/big-flags/sl.png
new file mode 100644
index 0000000000..2a4289ce96
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/sl.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/sm.png b/cmd/skywire-visor/static/assets/img/big-flags/sm.png
new file mode 100644
index 0000000000..192611433a
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/sm.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/sn.png b/cmd/skywire-visor/static/assets/img/big-flags/sn.png
new file mode 100644
index 0000000000..46153f7b34
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/sn.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/so.png b/cmd/skywire-visor/static/assets/img/big-flags/so.png
new file mode 100644
index 0000000000..23aec2f854
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/so.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/sr.png b/cmd/skywire-visor/static/assets/img/big-flags/sr.png
new file mode 100644
index 0000000000..4194b35e64
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/sr.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ss.png b/cmd/skywire-visor/static/assets/img/big-flags/ss.png
new file mode 100644
index 0000000000..8abec4393d
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ss.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/st.png b/cmd/skywire-visor/static/assets/img/big-flags/st.png
new file mode 100644
index 0000000000..c21db243c1
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/st.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/sv.png b/cmd/skywire-visor/static/assets/img/big-flags/sv.png
new file mode 100644
index 0000000000..6b1211c188
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/sv.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/sx.png b/cmd/skywire-visor/static/assets/img/big-flags/sx.png
new file mode 100644
index 0000000000..e1e4eaa2be
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/sx.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/sy.png b/cmd/skywire-visor/static/assets/img/big-flags/sy.png
new file mode 100644
index 0000000000..8a490965f2
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/sy.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/sz.png b/cmd/skywire-visor/static/assets/img/big-flags/sz.png
new file mode 100644
index 0000000000..8f5f846c10
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/sz.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/tc.png b/cmd/skywire-visor/static/assets/img/big-flags/tc.png
new file mode 100644
index 0000000000..ddcc2429dc
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/tc.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/td.png b/cmd/skywire-visor/static/assets/img/big-flags/td.png
new file mode 100644
index 0000000000..8bbf4d36ee
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/td.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/tf.png b/cmd/skywire-visor/static/assets/img/big-flags/tf.png
new file mode 100644
index 0000000000..3c9ef12c01
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/tf.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/tg.png b/cmd/skywire-visor/static/assets/img/big-flags/tg.png
new file mode 100644
index 0000000000..9c5276ea60
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/tg.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/th.png b/cmd/skywire-visor/static/assets/img/big-flags/th.png
new file mode 100644
index 0000000000..088b9e3dfd
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/th.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/tj.png b/cmd/skywire-visor/static/assets/img/big-flags/tj.png
new file mode 100644
index 0000000000..2d608ce841
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/tj.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/tk.png b/cmd/skywire-visor/static/assets/img/big-flags/tk.png
new file mode 100644
index 0000000000..c7e5739f01
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/tk.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/tl.png b/cmd/skywire-visor/static/assets/img/big-flags/tl.png
new file mode 100644
index 0000000000..68ffb1ddc6
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/tl.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/tm.png b/cmd/skywire-visor/static/assets/img/big-flags/tm.png
new file mode 100644
index 0000000000..89d1f81343
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/tm.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/tn.png b/cmd/skywire-visor/static/assets/img/big-flags/tn.png
new file mode 100644
index 0000000000..73ee71a068
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/tn.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/to.png b/cmd/skywire-visor/static/assets/img/big-flags/to.png
new file mode 100644
index 0000000000..28507eae6e
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/to.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/tr.png b/cmd/skywire-visor/static/assets/img/big-flags/tr.png
new file mode 100644
index 0000000000..ef6da58d05
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/tr.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/tt.png b/cmd/skywire-visor/static/assets/img/big-flags/tt.png
new file mode 100644
index 0000000000..646a519d9c
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/tt.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/tv.png b/cmd/skywire-visor/static/assets/img/big-flags/tv.png
new file mode 100644
index 0000000000..67e8a1e0ee
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/tv.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/tw.png b/cmd/skywire-visor/static/assets/img/big-flags/tw.png
new file mode 100644
index 0000000000..93cca8b4f3
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/tw.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/tz.png b/cmd/skywire-visor/static/assets/img/big-flags/tz.png
new file mode 100644
index 0000000000..6b40c41151
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/tz.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ua.png b/cmd/skywire-visor/static/assets/img/big-flags/ua.png
new file mode 100644
index 0000000000..3e20e1618f
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ua.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ug.png b/cmd/skywire-visor/static/assets/img/big-flags/ug.png
new file mode 100644
index 0000000000..aa762fa1d5
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ug.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/um.png b/cmd/skywire-visor/static/assets/img/big-flags/um.png
new file mode 100644
index 0000000000..f30f21f85d
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/um.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/unknown.png b/cmd/skywire-visor/static/assets/img/big-flags/unknown.png
new file mode 100644
index 0000000000..1193a86d4c
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/unknown.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/us.png b/cmd/skywire-visor/static/assets/img/big-flags/us.png
new file mode 100644
index 0000000000..f30f21f85d
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/us.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/uy.png b/cmd/skywire-visor/static/assets/img/big-flags/uy.png
new file mode 100644
index 0000000000..6df7fdeb17
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/uy.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/uz.png b/cmd/skywire-visor/static/assets/img/big-flags/uz.png
new file mode 100644
index 0000000000..9f66086893
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/uz.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/va.png b/cmd/skywire-visor/static/assets/img/big-flags/va.png
new file mode 100644
index 0000000000..3bebcefbc0
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/va.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/vc.png b/cmd/skywire-visor/static/assets/img/big-flags/vc.png
new file mode 100644
index 0000000000..595487a778
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/vc.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ve.png b/cmd/skywire-visor/static/assets/img/big-flags/ve.png
new file mode 100644
index 0000000000..6ab6c460f0
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ve.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/vg.png b/cmd/skywire-visor/static/assets/img/big-flags/vg.png
new file mode 100644
index 0000000000..377471b8bf
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/vg.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/vi.png b/cmd/skywire-visor/static/assets/img/big-flags/vi.png
new file mode 100644
index 0000000000..442c0a41a5
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/vi.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/vn.png b/cmd/skywire-visor/static/assets/img/big-flags/vn.png
new file mode 100644
index 0000000000..62c8b1f990
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/vn.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/vu.png b/cmd/skywire-visor/static/assets/img/big-flags/vu.png
new file mode 100644
index 0000000000..76d9d78ff1
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/vu.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/wf.png b/cmd/skywire-visor/static/assets/img/big-flags/wf.png
new file mode 100644
index 0000000000..213cab058f
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/wf.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ws.png b/cmd/skywire-visor/static/assets/img/big-flags/ws.png
new file mode 100644
index 0000000000..d3e31c3871
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ws.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/xk.png b/cmd/skywire-visor/static/assets/img/big-flags/xk.png
new file mode 100644
index 0000000000..12fc8ae05e
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/xk.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/ye.png b/cmd/skywire-visor/static/assets/img/big-flags/ye.png
new file mode 100644
index 0000000000..ca8b3c26f2
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/ye.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/yt.png b/cmd/skywire-visor/static/assets/img/big-flags/yt.png
new file mode 100644
index 0000000000..ece0857d0e
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/yt.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/za.png b/cmd/skywire-visor/static/assets/img/big-flags/za.png
new file mode 100644
index 0000000000..8a5ee61d66
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/za.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/zm.png b/cmd/skywire-visor/static/assets/img/big-flags/zm.png
new file mode 100644
index 0000000000..6733beaefc
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/zm.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/zw.png b/cmd/skywire-visor/static/assets/img/big-flags/zw.png
new file mode 100644
index 0000000000..d12c8660b9
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/zw.png differ
diff --git a/cmd/skywire-visor/static/assets/img/big-flags/zz.png b/cmd/skywire-visor/static/assets/img/big-flags/zz.png
new file mode 100644
index 0000000000..1193a86d4c
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/big-flags/zz.png differ
diff --git a/cmd/skywire-visor/static/assets/img/bronze-rating.png b/cmd/skywire-visor/static/assets/img/bronze-rating.png
new file mode 100644
index 0000000000..69db4edda4
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/bronze-rating.png differ
diff --git a/cmd/skywire-visor/static/assets/img/flags/england.png b/cmd/skywire-visor/static/assets/img/flags/england.png
deleted file mode 100644
index 3a7311d561..0000000000
Binary files a/cmd/skywire-visor/static/assets/img/flags/england.png and /dev/null differ
diff --git a/cmd/skywire-visor/static/assets/img/flags/scotland.png b/cmd/skywire-visor/static/assets/img/flags/scotland.png
deleted file mode 100644
index a0e57b4122..0000000000
Binary files a/cmd/skywire-visor/static/assets/img/flags/scotland.png and /dev/null differ
diff --git a/cmd/skywire-visor/static/assets/img/flags/southossetia.png b/cmd/skywire-visor/static/assets/img/flags/southossetia.png
deleted file mode 100644
index 2c0bc3e1b6..0000000000
Binary files a/cmd/skywire-visor/static/assets/img/flags/southossetia.png and /dev/null differ
diff --git a/cmd/skywire-visor/static/assets/img/flags/unitednations.png b/cmd/skywire-visor/static/assets/img/flags/unitednations.png
deleted file mode 100644
index 08b3dd14f9..0000000000
Binary files a/cmd/skywire-visor/static/assets/img/flags/unitednations.png and /dev/null differ
diff --git a/cmd/skywire-visor/static/assets/img/flags/wales.png b/cmd/skywire-visor/static/assets/img/flags/wales.png
deleted file mode 100644
index e0d7cee110..0000000000
Binary files a/cmd/skywire-visor/static/assets/img/flags/wales.png and /dev/null differ
diff --git a/cmd/skywire-visor/static/assets/img/flags/zz.png b/cmd/skywire-visor/static/assets/img/flags/zz.png
deleted file mode 100644
index c785976595..0000000000
Binary files a/cmd/skywire-visor/static/assets/img/flags/zz.png and /dev/null differ
diff --git a/cmd/skywire-visor/static/assets/img/gold-rating.png b/cmd/skywire-visor/static/assets/img/gold-rating.png
new file mode 100644
index 0000000000..59c43cd713
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/gold-rating.png differ
diff --git a/cmd/skywire-visor/static/assets/img/logo-vpn.png b/cmd/skywire-visor/static/assets/img/logo-vpn.png
new file mode 100644
index 0000000000..9ed9c33ba7
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/logo-vpn.png differ
diff --git a/cmd/skywire-visor/static/assets/img/map.png b/cmd/skywire-visor/static/assets/img/map.png
new file mode 100644
index 0000000000..1218ddbc94
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/map.png differ
diff --git a/cmd/skywire-visor/static/assets/img/silver-rating.png b/cmd/skywire-visor/static/assets/img/silver-rating.png
new file mode 100644
index 0000000000..89a0a368f4
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/silver-rating.png differ
diff --git a/cmd/skywire-visor/static/assets/img/size-alert.png b/cmd/skywire-visor/static/assets/img/size-alert.png
new file mode 100644
index 0000000000..49b639c0d8
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/size-alert.png differ
diff --git a/cmd/skywire-visor/static/assets/img/start-button.png b/cmd/skywire-visor/static/assets/img/start-button.png
new file mode 100644
index 0000000000..066cdb7041
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/start-button.png differ
diff --git a/cmd/skywire-visor/static/assets/scss/_backgrounds.scss b/cmd/skywire-visor/static/assets/scss/_backgrounds.scss
index d824c249fe..037b03457d 100644
--- a/cmd/skywire-visor/static/assets/scss/_backgrounds.scss
+++ b/cmd/skywire-visor/static/assets/scss/_backgrounds.scss
@@ -7,6 +7,7 @@
position: fixed;
background: linear-gradient($blue-dark-Background1, $blue-dark-Background2) no-repeat fixed !important;
box-shadow: inset 0 0 200px 0 rgba(96, 141, 205, 0.25);
+ z-index: -1;
}
.no-gradient-for-elevated-box {
@@ -24,11 +25,11 @@
@extend .elevated-box;
border-radius: $mat-dialog-radius;
overflow: hidden;
- padding: 3px;
+ padding: $internal-blue-box-margin;
.box-internal-container {
border-radius: $mat-dialog-radius;
- padding: $containers-padding - 3px;
+ padding: $containers-padding - $internal-blue-box-margin;
border: scale-color($box-border, $alpha: -65%) solid 1px;
overflow: hidden;
}
diff --git a/cmd/skywire-visor/static/assets/scss/_responsive_tables.scss b/cmd/skywire-visor/static/assets/scss/_responsive_tables.scss
index c6f944fd23..cf382edad5 100644
--- a/cmd/skywire-visor/static/assets/scss/_responsive_tables.scss
+++ b/cmd/skywire-visor/static/assets/scss/_responsive_tables.scss
@@ -1,7 +1,7 @@
// Backgrounds for the tables used in the app.
$responsive-table-colors: (
// Background, background:hover, font color
- translucid: (transparent, theme-color(translucid-hover), theme-color(white)),
+ translucid: (transparent, theme-color(translucid-hover), theme-color(white), theme-color(translucid-hover-hard)),
);
// Create styles for the tables. One per background color.
@@ -78,7 +78,13 @@ $responsive-table-colors: (
&:hover
{
- background: nth($colors, 2) !important;
+ background: nth($colors, 2);
+ }
+ }
+
+ .click-effect {
+ &:active {
+ background: nth($colors, 4) !important;
}
}
diff --git a/cmd/skywire-visor/static/assets/scss/_text.scss b/cmd/skywire-visor/static/assets/scss/_text.scss
index 8e653f146d..012e6c80b7 100644
--- a/cmd/skywire-visor/static/assets/scss/_text.scss
+++ b/cmd/skywire-visor/static/assets/scss/_text.scss
@@ -26,10 +26,22 @@ span {
color: $green;
}
+.green-clear-text {
+ color: $green-clear;
+}
+
.yellow-text {
color: $yellow;
}
+.yellow-clear-text {
+ color: $yellow-clear;
+}
+
.red-text {
color: $red;
}
+
+.red-clear-text {
+ color: $red-clear;
+}
diff --git a/cmd/skywire-visor/static/assets/scss/_variables.scss b/cmd/skywire-visor/static/assets/scss/_variables.scss
index 5b13f3b8dd..3b82350318 100644
--- a/cmd/skywire-visor/static/assets/scss/_variables.scss
+++ b/cmd/skywire-visor/static/assets/scss/_variables.scss
@@ -4,6 +4,7 @@
$white: #F8F9F9;
$black: #202226;
+$grey: #bbbbbb;
$blue-medium: #215f9e;
$blue-dark: #154B6C;
@@ -11,11 +12,17 @@ $blue-dark-Background1: #060a10;
$blue-dark-Background2: #0a1421;
$red: #DA3439;
+$red-clear: #ff393f;
$green: #2ECC54;
+$green-clear: #84c826;
$yellow: #d48b05;
+$yellow-clear: #ffa500;
$light-gray: #777;
$lighter-gray: #999;
+$dark-background: rgba(0, 0, 0, 0.7);
+$clear-background: #3d67a226;
+
$modal-background: #e0e5ec;
$modal-separator: scale-color($blue-medium, $alpha: -80%);
@@ -24,12 +31,13 @@ $separator: rgba(255, 255, 255, 0.15);
$grey-separator: rgba(0, 0, 0, 0.12);
$theme-colors: (
- green: $green,
- red: $red,
- yellow: $yellow,
- translucid-hover: rgba(0, 0, 0, 0.2),
- white: $white,
- light-gray: $light-gray
+ green: $green,
+ red: $red,
+ yellow: $yellow,
+ translucid-hover: rgba(0, 0, 0, 0.2),
+ translucid-hover-hard: rgba(0, 0, 0, 0.4),
+ white: $white,
+ light-gray: $light-gray
);
//
@@ -42,6 +50,7 @@ $font-size-sm: ($font-size-base * .875);
$font-size-smaller: ($font-size-base * .8);
$font-size-mini: ($font-size-base * .70);
$font-size-mini-plus: ($font-size-base * .60);
+$font-size-vpn-list: 12px;
$font-weight-light: lighter;
$font-weight-bold: 700;
@@ -62,6 +71,7 @@ $mat-dialog-radius: 10px;
// Container
//
$containers-padding: 15px;
+$internal-blue-box-margin: 3px;
//
// Sizes
diff --git a/cmd/skywire-visor/static/assets/scss/_vpn_client.scss b/cmd/skywire-visor/static/assets/scss/_vpn_client.scss
new file mode 100644
index 0000000000..8c2e991bb5
--- /dev/null
+++ b/cmd/skywire-visor/static/assets/scss/_vpn_client.scss
@@ -0,0 +1,23 @@
+.vpn-small-button {
+ cursor: pointer;
+ user-select: none;
+
+ &:active {
+ transform: scale(0.9);
+ }
+}
+
+.vpn-dark-box-radius {
+ border-radius: 10px;
+}
+
+.vpn-table-container {
+ text-align: center;
+
+ .width-limiter {
+ width: inherit;
+ max-width: 1250px;
+ display: inline-block;
+ text-align: initial;
+ }
+}
diff --git a/cmd/skywire-visor/static/index.html b/cmd/skywire-visor/static/index.html
index 6bbd231f9e..1495d24415 100644
--- a/cmd/skywire-visor/static/index.html
+++ b/cmd/skywire-visor/static/index.html
@@ -2,14 +2,14 @@