whois.handle: ADI2
whois.name: Telecom Argentina S.A.
whois.cidrs: 190.246.0.0/15
whois.created: 2008-06-03T00:00:00.000000
whois.updated: 2018-05-29T00:00:00.000000
services.protocol: SSH
services.transport_protocol: TCP
services.scan_time: 2025-07-27T23:48:12.849163
services.banner: SSH-2.0-OpenSSH_9.2p1 Debian-2+deb12u5
services.source: OSI_TRANSPORT_LAYER
services.part: o
services.product: linux
services.cpe: cpe:2.3:o:*:linux:*:*:*:*:*:*:*:*
services.value: remote-access
services.raw: SSH-2.0-OpenSSH_9.2p1 Debian-2+deb12u5
services.protocol_version: 2.0
services.software_version: OpenSSH_9.2p1
services.comment: Debian-2+deb12u5
services.kex_algorithms: sntrup761x25519-sha512 sntrup761x25519-sha512@openssh.com curve25519-sha256 curve25519-sha256@libssh.org ecdh-sha2-nistp256 ecdh-sha2-nistp384 ecdh-sha2-nistp521 diffie-hellman-group-exchange-sha256 diffie-hellman-group16-sha512 diffie-hellman-group18-sha512 diffie-hellman-group14-sha256 kex-strict-s-v00@openssh.com
services.host_key_algorithms: rsa-sha2-512 rsa-sha2-256 ecdsa-sha2-nistp256 ssh-ed25519
services.client_to_server_ciphers: chacha20-poly1305@openssh.com aes128-ctr aes192-ctr aes256-ctr aes128-gcm@openssh.com aes256-gcm@openssh.com
services.server_to_client_ciphers: chacha20-poly1305@openssh.com aes128-ctr aes192-ctr aes256-ctr aes128-gcm@openssh.com aes256-gcm@openssh.com
services.client_to_server_macs: umac-64-etm@openssh.com umac-128-etm@openssh.com hmac-sha2-256-etm@openssh.com hmac-sha2-512-etm@openssh.com hmac-sha1-etm@openssh.com umac-64@openssh.com umac-128@openssh.com hmac-sha2-256 hmac-sha2-512 hmac-sha1
services.server_to_client_macs: umac-64-etm@openssh.com umac-128-etm@openssh.com hmac-sha2-256-etm@openssh.com hmac-sha2-512-etm@openssh.com hmac-sha1-etm@openssh.com umac-64@openssh.com umac-128@openssh.com hmac-sha2-256 hmac-sha2-512 hmac-sha1
services.client_to_server_compression: none zlib@openssh.com
services.server_to_client_compression: none zlib@openssh.com
services.kex_algorithm: curve25519-sha256@libssh.org
services.host_key_algorithm: ecdsa-sha2-nistp256
services.cipher: aes128-ctr
services.mac: hmac-sha2-256
services.compression: none
services.cipher: aes128-ctr
services.mac: hmac-sha2-256
services.compression: none
services.curve: P-256
services.hassh_fingerprint: 425d29fe50d8e4f5e37efb6e24bcf660
services.protocol: HTTP
services.transport_protocol: TCP
services.scan_time: 2025-07-27T23:48:16.129338
services.banner: HTTP/1.1 200 OK
  Server: openresty
  Date:  <REDACTED>
  Content-Type: text/html
  Last-Modified: Fri, 10 May 2024 17:32:26 GMT
  Transfer-Encoding: chunked
  Connection: keep-alive
  ETag: W/"663e5a2a-1a"
  Content-Encoding: gzip
  
services.source: OSI_APPLICATION_LAYER
services.part: a
services.vendor: OpenResty
services.product: OpenResty
services.cpe: cpe:2.3:a:openresty:openresty:*:*:*:*:*:*:*:*
services.source: OSI_TRANSPORT_LAYER
services.part: o
services.product: linux
services.cpe: cpe:2.3:o:*:linux:*:*:*:*:*:*:*:*
services.path: /
services.endpoint_type: HTTP
services.scan_time: 2025-07-27T23:48:16.129338
services.uri: http://190.247.11.127/
services.protocol: HTTP/1.1
services.status_reason: OK
services.key: Server
services.headers: openresty
services.key: Content-Type
services.headers: text/html
services.key: Date
services.headers: <REDACTED>
services.key: ETag
services.headers: W/"663e5a2a-1a"
services.key: Transfer-Encoding
services.headers: chunked
services.key: Last-Modified
services.headers: Fri, 10 May 2024 17:32:26 GMT
services.key: Content-Encoding
services.headers: gzip
services.key: Connection
services.headers: keep-alive
services.body: Educabit: en mantenimiento
services.body_hash_sha1: sha1:4666718ee55df8d1b8a27821dc9bfe8c82eb8595
services.supported_versions: HTTP/1.1
services.protocol: HTTP
services.transport_protocol: TCP
services.scan_time: 2025-07-27T23:48:24.035220
services.banner: HTTP/1.1 200 OK
  Content-Type: text/html
  Content-Length: 2284
  Content-Encoding: gzip
  
services.version_selected: TLSv1_3
services.cipher_selected: TLS_AES_256_GCM_SHA384
services.ja4s: t130200_1302_a56c5b993250
services.version: TLSv1_3
services.ja4s: t130200_1302_a56c5b993250
services.version: TLSv1_2
services.ja4s: t120200_c030_344b4dce5a52
services.issuer_dn: CN=Alysa
services.common_name: Alysa
services.subject_dn: CN=Alysa
services.common_name: Alysa
services.source: OSI_APPLICATION_LAYER
services.part: a
services.vendor: ShellInABox
services.product: ShellInABox
services.cpe: cpe:2.3:a:shellinabox:shellinabox:*:*:*:*:*:*:*:*
services.value: webshell
services.value: shellinabox
services.path: /
services.endpoint_type: HTTP
services.scan_time: 2025-07-27T23:48:24.035220
services.uri: https://190.247.11.127:82/
services.protocol: HTTP/1.1
services.status_reason: OK
services.key: Content-Type
services.headers: text/html
services.key: Content-Length
services.headers: 2284
services.key: Content-Encoding
services.headers: gzip
services.html_tags: <title>Shell In A Box</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
services.body: <?xml version="1.0" encoding="utf-8"?>
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  <html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml" xml:lang="en" lang="en">
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      <!--
      ShellInABox - Make command line applications available as AJAX web applications
      Copyright (C) 2008-2010 Markus Gutschke markus@shellinabox.com
  
      This program is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License version 2 as
      published by the Free Software Foundation.
  
      This program is distributed in the hope that it will be useful,
      but WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      GNU General Public License for more details.
  
      You should have received a copy of the GNU General Public License along
      with this program; if not, write to the Free Software Foundation, Inc.,
      51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  
      In addition to these license terms, the author grants the following
      additional rights:
  
      If you modify this program, or any covered work, by linking or
      combining it with the OpenSSL project's OpenSSL library (or a
      modified version of that library), containing parts covered by the
      terms of the OpenSSL or SSLeay licenses, the author
      grants you additional permission to convey the resulting work.
      Corresponding Source for a non-source form of such a combination
      shall include the source code for the parts of OpenSSL used as well
      as that of the covered work.
  
      You may at your option choose to remove this additional permission from
      the work, or from any part of it.
  
      It is possible to build this program in a way that it loads OpenSSL
      libraries at run-time. If doing so, the following notices are required
      by the OpenSSL and SSLeay licenses:
  
      This product includes software developed by the OpenSSL Project
      for use in the OpenSSL Toolkit. (http://www.openssl.org/)
  
      This product includes cryptographic software written by Eric Young
      (eay@cryptsoft.com)
  
      The most up-to-date version of this program is always available from
      http://shellinabox.com
      -->
      <title>Shell In A Box</title>
      <script type="text/javascript"><!--
        // Check that our URL is well-formed. Redirect to HTTPS if necessary
        (function() {
          var hasSSL = true;
          var path   = document.location.pathname;
          var proto  = (hasSSL || (document.location.protocol == 'https:'))
                       ? 'https:' : 'http:';
          if (path.match(/plain/)) {
            proto   = 'http:';
          }
          path      = path.replace(/\/+/, '/').replace(/\/$/, '');
          if (!path.match(/(?:\/|\/plain)$/)) {
            path   += '/';
          }
          var url   = proto + '//' + document.location.host + path;
          if (document.location.search != '' &&
              document.location.search != '?') {
            url    += document.location.search;
          }
          if (document.location.hash != '' &&
              document.location.hash != '#') {
            url    += document.location.hash;
          }
          if (url != document.location.href) {
            document.location.replace(url);
          }
        })();
      --></script>
      <link rel="stylesheet" href="styles.css" type="text/css">
      <style type="text/css">
        body {
          margin: 0px;
        }
      </style>
      <script type="text/javascript"><!--
        (function() {
          // We would like to hide overflowing lines as this can lead to
          // visually jarring results if the browser substitutes oversized
          // Unicode characters from different fonts. Unfortunately, a bug
          // in Firefox prevents it from allowing multi-line text
          // selections whenever we change the "overflow" style. So, only
          // do so for non-Netscape browsers.
          if (typeof navigator.appName == 'undefined' ||
              navigator.appName != 'Netscape') {
            document.write('<style type="text/css">' +
                           '#vt100 #console div, #vt100 #alt_console div {' +
                           '  overflow: hidden;' +
                           '}' +
                           '</style>');
          }
        })();
  
        // User warning on window close
        window.onbeforeunload = function(e) {
          if (typeof window.shellinabox.session != "undefined") {
            return "Are you sure you want to leave this page?";
          }
          // Don't use explicit return
        }
  
      --></script>
      <link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
      <script type="text/javascript" src="ShellInABox.js"></script>
    </head>
    <!-- Load ShellInABox from a timer as Konqueror sometimes fails to
         correctly deal with the enclosing frameset (if any), if we do not
         do this
     -->
    <body onload="setTimeout('window.shellinabox = new ShellInABox()', 100)"
          scroll="no"><noscript>JavaScript
      must be enabled for ShellInABox</noscript></body>
  </html>
  
services.name: https://190.247.11.127:82/favicon.ico
services.body_hash_sha1: sha1:d85f6cd7450edc4aa3382ad05c574205122b0380
services.supported_versions: HTTP/1.1
services.protocol: SNMP
services.transport_protocol: UDP
services.scan_time: 2025-07-27T15:56:11.677949
services.value: network-administration
services.versions: v3
services.raw_id: 80001f8880a802ef322a000000
services.organization: net-snmp
services.description: user=,engine=(80001f8880a802ef322a000000),authPass=,privPass=
services.protocol: UNKNOWN
services.transport_protocol: TCP
services.scan_time: 2025-07-27T23:48:17.527765
services.banner: HTTP/1.1 400 Bad Request
  Server: openresty
  Date: Sun, 27 Jul 2025 23:48:25 GMT
  Content-Type: text/html
  Content-Length: 252
  Connection: close
  
  <html>
  <head><title>400 The plain HTTP request was sent to HTTPS port</title></head>
  <body>
  <center><h1>400 Bad Request</h1></center>
  <center>The plain HTTP request was sent to HTTPS port</center>
  <hr><center>openresty</center>
  </body>
  </html>
  
services.source: OSI_TRANSPORT_LAYER
services.part: o
services.product: linux
services.cpe: cpe:2.3:o:*:linux:*:*:*:*:*:*:*:*
services.protocol: HTTP
services.transport_protocol: TCP
services.scan_time: 2025-07-27T23:48:23.532145
services.banner: HTTP/1.1 200 OK
  Accept-Ranges: bytes
  Content-Length: 815
  Content-Type: text/html; charset=utf-8
  Last-Modified: Sun, 27 Jul 2025 16:06:31 GMT
  Date:  <REDACTED>
  
services.path: /
services.endpoint_type: HTTP
services.scan_time: 2025-07-27T23:48:23.532145
services.uri: http://190.247.11.127:3000/
services.protocol: HTTP/1.1
services.status_reason: OK
services.key: Last-Modified
services.headers: Sun, 27 Jul 2025 16:06:31 GMT
services.key: Accept-Ranges
services.headers: bytes
services.key: Content-Length
services.headers: 815
services.key: Content-Type
services.headers: text/html; charset=utf-8
services.key: Date
services.headers: <REDACTED>
services.html_tags: <title>Dashboard - Semaphore UI</title> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width,initial-scale=1.0">
services.body: <!DOCTYPE html>
  <html lang="en">
    <head>
      <base href="/">
      <meta charset="utf-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width,initial-scale=1.0">
      <link rel="icon" href="favicon.png">
      <title>Dashboard - Semaphore UI</title>
    <script defer src="js/chunk-vendors.e81b0940.js"></script><script defer src="js/app.cda38eb3.js"></script><link href="css/chunk-vendors.901a7253.css" rel="stylesheet"><link href="css/app.aa6a8bf1.css" rel="stylesheet"></head>
    <body>
      <noscript>
        <strong>
            We're sorry but web doesn't work properly
            without JavaScript enabled. Please enable it to continue.
        </strong>
      </noscript>
      <div id="app"></div>
      <!-- built files will be auto injected -->
    </body>
  </html>
  
services.name: http://190.247.11.127:3000/favicon.png
services.body_hash_sha1: sha1:1c8b36022568f34ca62c28172d4529bc7c4485f8
services.supported_versions: HTTP/1.1
services.protocol: HTTP
services.transport_protocol: TCP
services.scan_time: 2025-07-27T23:48:24.245688
services.banner: HTTP/1.1 200 OK
  X-Powered-By: Express
  Content-Type: text/html; charset=utf-8
  Content-Length: 1189
  ETag: W/"4a5-SVnoSvukidEz28P8zL4V4Udn8mY"
  Date:  <REDACTED>
  Connection: keep-alive
  Keep-Alive: timeout=5
  
services.source: OSI_APPLICATION_LAYER
services.part: a
services.product: Express
services.cpe: cpe:2.3:a:*:express:*:*:*:*:*:*:*:*
services.path: /
services.endpoint_type: HTTP
services.scan_time: 2025-07-27T23:48:24.245688
services.uri: http://190.247.11.127:5001/
services.protocol: HTTP/1.1
services.status_reason: OK
services.key: Keep-Alive
services.headers: timeout=5
services.key: Content-Type
services.headers: text/html; charset=utf-8
services.key: Date
services.headers: <REDACTED>
services.key: ETag
services.headers: W/"4a5-SVnoSvukidEz28P8zL4V4Udn8mY"
services.key: X-Powered-By
services.headers: Express
services.key: Connection
services.headers: keep-alive
services.key: Content-Length
services.headers: 1189
services.html_tags: <title>Dockge</title> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" /> <meta name="theme-color" id="theme-color" content="" /> <meta name="description" content="" />
services.body: <!DOCTYPE html>
  <html lang="en">
  <head>
      <meta charset="UTF-8" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
      <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
      <link rel="icon" type="image/svg+xml" href="/icon.svg" />
      <link rel="manifest" href="/manifest.json" />
      <meta name="theme-color" id="theme-color" content="" />
      <meta name="description" content="" />
      <title>Dockge</title>
      <style>
          .noscript-message {
              font-size: 20px;
              text-align: center;
              padding: 10px;
              max-width: 500px;
              margin: 0 auto;
          }
      </style>
    <script type="module" crossorigin src="/assets/index-C05rZzxa.js"></script>
    <link rel="stylesheet" crossorigin href="/assets/index-1wBBTXYJ.css">
  </head>
  <body>
  <noscript>
      <div class="noscript-message">
          Sorry, you don't seem to have JavaScript enabled or your browser
          doesn't support it.<br />This website requires JavaScript to function.
          Please enable JavaScript in your browser settings to continue.
      </div>
  </noscript>
  <div id="app"></div>
  </body>
  </html>
  
services.name: http://190.247.11.127:5001/apple-touch-icon.png
services.name: http://190.247.11.127:5001/icon.svg
services.name: http://190.247.11.127:5001/favicon.ico
services.body_hash_sha1: sha1:4959e84afba489d133dbc3fcccbe15e14767f266
services.supported_versions: HTTP/1.1
services.protocol: HTTP
services.transport_protocol: TCP
services.scan_time: 2025-07-27T23:48:24.243554
services.banner: HTTP/1.1 200 OK
  X-Powered-By: Express
  Accept-Ranges: bytes
  Cache-Control: public, max-age=0
  Last-Modified: Sun, 23 Jul 2023 12:41:42 GMT
  ETag: W/"529-18982c51770"
  Content-Type: text/html; charset=UTF-8
  Content-Length: 1321
  Date:  <REDACTED>
  Connection: keep-alive
  Keep-Alive: timeout=5
  
services.source: OSI_APPLICATION_LAYER
services.part: a
services.product: Express
services.cpe: cpe:2.3:a:*:express:*:*:*:*:*:*:*:*
services.path: /
services.endpoint_type: HTTP
services.scan_time: 2025-07-27T23:48:24.243554
services.uri: http://190.247.11.127:5005/
services.protocol: HTTP/1.1
services.status_reason: OK
services.key: Last-Modified
services.headers: Sun, 23 Jul 2023 12:41:42 GMT
services.key: Accept-Ranges
services.headers: bytes
services.key: Keep-Alive
services.headers: timeout=5
services.key: Cache-Control
services.headers: public, max-age=0
services.key: Content-Type
services.headers: text/html; charset=UTF-8
services.key: Date
services.headers: <REDACTED>
services.key: ETag
services.headers: W/"529-18982c51770"
services.key: X-Powered-By
services.headers: Express
services.key: Connection
services.headers: keep-alive
services.key: Content-Length
services.headers: 1321
services.html_tags: <title>Flame</title> <meta charset="utf-8"/> <meta name="viewport" content="width=device-width,initial-scale=1"/> <meta name="description" content="Flame - self-hosted startpage for your server"/>
services.body: <!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/icons/favicon.ico"/><link rel="apple-touch-icon" href="/icons/apple-touch-icon.png"/><link rel="apple-touch-icon" sizes="57x57" href="/icons/apple-touch-icon-57x57.png"/><link rel="apple-touch-icon" sizes="72x72" href="/icons/apple-touch-icon-72x72.png"/><link rel="apple-touch-icon" sizes="76x76" href="/icons/apple-touch-icon-76x76.png"/><link rel="apple-touch-icon" sizes="114x114" href="/icons/apple-touch-icon-114x114.png"/><link rel="apple-touch-icon" sizes="120x120" href="/icons/apple-touch-icon-120x120.png"/><link rel="apple-touch-icon" sizes="144x144" href="/icons/apple-touch-icon-144x144.png"/><link rel="apple-touch-icon" sizes="152x152" href="/icons/apple-touch-icon-152x152.png"/><link rel="apple-touch-icon" sizes="180x180" href="/icons/apple-touch-icon-180x180.png"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="description" content="Flame - self-hosted startpage for your server"/><link rel="stylesheet" href="/flame.css"/><title>Flame</title><script defer="defer" src="/static/js/main.887e49c8.js"></script><link href="/static/css/main.289a6408.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
services.name: http://190.247.11.127:5005/icons/favicon.ico
services.name: http://190.247.11.127:5005/icons/apple-touch-icon.png
services.name: http://190.247.11.127:5005/icons/apple-touch-icon-57x57.png
services.name: http://190.247.11.127:5005/icons/apple-touch-icon-72x72.png
services.name: http://190.247.11.127:5005/icons/apple-touch-icon-76x76.png
services.name: http://190.247.11.127:5005/icons/apple-touch-icon-114x114.png
services.body_hash_sha1: sha1:e4c4de90844fe308d74a4c54877919d1d8c476f1
services.supported_versions: HTTP/1.1
services.protocol: HTTP
services.transport_protocol: TCP
services.scan_time: 2025-07-27T23:48:29.672354
services.banner: HTTP/1.1 404 Not Found
  Date:  <REDACTED>
  Content-Length: 9
  Content-Type: text/plain; charset=utf-8
  
services.path: /
services.endpoint_type: HTTP
services.scan_time: 2025-07-27T23:48:29.672354
services.uri: http://190.247.11.127:8001/
services.protocol: HTTP/1.1
services.status_reason: Not Found
services.key: Date
services.headers: <REDACTED>
services.key: Content-Length
services.headers: 9
services.key: Content-Type
services.headers: text/plain; charset=utf-8
services.body: Not found
services.body_hash_sha1: sha1:475c848673a3f79fa778f01c2bd5a721d4c41707
services.supported_versions: HTTP/1.1
services.protocol: HTTP
services.transport_protocol: TCP
services.scan_time: 2025-07-27T23:48:23.733443
services.banner: HTTP/1.1 200 OK
  Cache-Control: no-cache, no-store, must-revalidate, max-age=0
  Date:  <REDACTED>
  Content-Length: 1906
  Content-Type: text/html; charset=utf-8
  Server: Tiny WebServer
  Connection: close
  Set-Cookie: xsrf-token=nnavsTsOuucD6eQg4ICEa9%2B%2FuzoWOefCaGl6KohomTQ%3D; expires=Sun, 27 Jul 2025 23:58:24 GMT;path=/; 
  
services.path: /
services.endpoint_type: HTTP
services.scan_time: 2025-07-27T23:48:23.733443
services.uri: http://190.247.11.127:8200/
services.protocol: HTTP/1.1
services.status_reason: OK
services.key: Server
services.headers: Tiny WebServer
services.key: Cache-Control
services.headers: no-cache, no-store, must-revalidate, max-age=0
services.key: Content-Type
services.headers: text/html; charset=utf-8
services.key: Date
services.headers: <REDACTED>
services.key: Set-Cookie
services.headers: xsrf-token=nnavsTsOuucD6eQg4ICEa9%2B%2FuzoWOefCaGl6KohomTQ%3D; expires=Sun, 27 Jul 2025 23:58:24 GMT;path=/;
services.key: Connection
services.headers: close
services.key: Content-Length
services.headers: 1906
services.html_tags: <title>Backup</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=9" />
services.body: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  <html>
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=9" />
  <title>Backup</title>
  
  <script type="text/javascript">
      function parseCookies(){
  
          var cookiestrings = document.cookie.split('; ');
          var cookies = {};
  
          for(var i=cookiestrings.length-1; i>=0; i--){
             var parts = cookiestrings[i].split('=');
             cookies[parts[0]] = parts[1];
          }
  
          return cookies;
      }
  
      function setCookieAndRun(theme) {
          var d = new Date();
          d.setTime(d.getTime() + (90*24*60*60*1000));
  
          document.cookie = 'default-theme=' + theme  + '; expires=' + d.toUTCString() + '; path=/';
  
          // Make an absolute path redirect, as relative redirects break if the port is non-standard
          var path = window.location.pathname;
          
          if (path.lastIndexOf('.html') == path.length - '.html'.length)
              path = path.substr(0, path.lastIndexOf('/'));
          
          if (path.lastIndexOf('/') + 1 != path.length)
              path = path + '/';
  
          path += theme +'/index.html';
          window.location.replace(path);
      }
  
      var theme = parseCookies()['default-theme'];
      if ((theme || '').trim().length == 0)
          theme = 'ngax';
      if (theme == 'greeno') // Make sure users are redirected automatically
          theme = 'ngax';
      
      setCookieAndRun(theme); // Refresh
  
  </script>
  
      <script type="text/javascript" src="oem/root/index/oem.js?v=2.0.8.1" ></script>
      <link rel="stylesheet" type="text/css" href="oem/root/index/oem.css?v=2.0.8.1" />
  
  </head>
  
  <body>
  <noscript>
      <p>Duplicati web UI relies on JavaScript</p>
      <p>Please enable scripting on this page or turn off script blockers in your browser.</p>
  </noscript>
  
  </body>
  </html>
  
services.name: http://190.247.11.127:8200/favicon.ico
services.body_hash_sha1: sha1:b76fd9fa60abb79d1fcb4f0f67a490ce8d80b9cd
services.supported_versions: HTTP/1.1
services.protocol: HTTP
services.transport_protocol: TCP
services.scan_time: 2025-07-27T23:48:24.247624
services.banner: HTTP/1.1 200 OK
  Content-Type: text/html; charset=utf-8
  Date:  <REDACTED>
  Transfer-Encoding: chunked
  
services.value: bootstrap
services.path: /
services.endpoint_type: HTTP
services.scan_time: 2025-07-27T23:48:24.247624
services.uri: http://190.247.11.127:8840/
services.protocol: HTTP/1.1
services.status_reason: OK
services.key: Content-Type
services.headers: text/html; charset=utf-8
services.key: Date
services.headers: <REDACTED>
services.key: Transfer-Encoding
services.headers: chunked
services.html_tags: <title>WatchYourLAN</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1">
services.body: 
  
  <!DOCTYPE html>
  <html lang="en" data-bs-theme="dark">
  <head>
      <title>WatchYourLAN</title>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      
      <link rel="icon" type="image/x-icon" href="/fs/public/favicon.png">
      
      
      <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.css">
      
      <link href="https://cdn.jsdelivr.net/npm/aceberg-bootswatch-fork@v5.3.3-2/dist/cerulean/bootstrap.min.css" rel="stylesheet">
      
      <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
      
      
      <link rel="stylesheet" type="text/css" href="/fs/public/css/index.css" />
  </head>
  <body>
      <nav class="navbar navbar-expand-md navbar-dark bg-primary">
          <div class="container-lg">
              <a class="navbar-brand" href="/">
                  <img src="/fs/public/favicon.png" style="width: 2em"/>
              </a>
            <ul class="navbar-nav">
                <li class="nav-item">
                    <button class="btn navbar-toggler nav-link active fs-2" type="button" data-bs-toggle="collapse" data-bs-target="#navbarContent" aria-controls="navbarContent" aria-expanded="false" aria-label="Toggle navigation">
                      <i class="bi bi-list"></i>
                    </button>
                </li>
            </ul>
            <div class="collapse navbar-collapse" id="navbarContent">
              <ul class="navbar-nav me-auto mb-2 mb-md-0">
                  <li class="nav-item">
                    <a class="nav-link active" href="/">Home</a>
                  </li>
                  <li class="nav-item">
                    <a class="nav-link active" href="/config/">Config</a>
                  </li>
                  <li class="nav-item">
                    <a class="nav-link active" href="/history/">History</a>
                  </li>
              </ul>
            </div>
            <ul class="navbar-nav">
                <li class="nav-item">
                    <a class="nav-link active fs-3 ms-md-2" target="_blank" href="https://github.com/aceberg/WatchYourLAN"><i class="bi bi-github"></i></a>
                </li>
            </ul>
          </div>
      </nav>
  
  </head>
  <body>
  <div class="container-lg">
    <div class="row">
      <div class="col-md mt-2">
        <div class="form-check form-switch">
          <input type="hidden" id="ref-timeout" value="120">
          <input class="form-check-input" type="checkbox" id="ref" onclick="toggleRefresh()" title="Auto refresh">
        </div>
      </div>
    </div>
    <div class="row">
      <div class="col-md mt-2 mb-4">
        <div class="card border-primary">
          <div class="card-header">
            <div class="row">
              <div class="col-md mt-1 mb-1">
                <button class="btn btn-outline-primary" disabled>Filter by</button>
                <button class="btn btn-outline-primary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">Iface</button>
                <ul class="dropdown-menu">
                  
                </ul>
                <button class="btn btn-outline-primary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">Known</button>
                <ul class="dropdown-menu">
                  <li><a class="dropdown-item" onclick="filterFunc('known', 1)">Known</a></li>
                  <li><a class="dropdown-item" onclick="filterFunc('known', 0)">Unknown</a></li>
                </ul>
                <button class="btn btn-outline-primary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">Online</button>
                <ul class="dropdown-menu">
                  <li><a class="dropdown-item" onclick="filterFunc('line', 1)">Online</a></li>
                  <li><a class="dropdown-item" onclick="filterFunc('line', 0)">Offline</a></li>
                </ul>
                <button class="btn btn-outline-primary" onclick="resetFilter()">Reset filter</button>
              </div>
              <div class="col-md mt-1 mb-1">
                <div class="d-flex justify-content-between">
                  <input class="form-control" id="search" oninput="searchFunc()" placeholder="Search" style="max-width: 10em;">
                  <button class="btn btn-outline-primary" id="edit" onclick="editClick()">Edit names</button>
                </div>
              </div>
            </div>
          </div>
          <div class="card-body table-responsive">
            <table class="table table-striped">
              <thead>
                <th style="width: 3em;"></th>
                <th>Name <i class="bi bi-sort-down-alt my-btn" onclick="sortBy('Name')"></i></th>
                <th>Iface <i class="bi bi-sort-down-alt my-btn" onclick="sortBy('Iface')"></i></th>
                <th>IP <i class="bi bi-sort-down-alt my-btn" onclick="sortBy('IP')"></i></th>
                <th>MAC <i class="bi bi-sort-down-alt my-btn" onclick="sortBy('Mac')"></i></th>
                <th>Hardware <i class="bi bi-sort-down-alt my-btn" onclick="sortBy('Hw')"></i></th>
                <th>Date <i class="bi bi-sort-down-alt my-btn" onclick="sortBy('Date')"></i></th>
                <th>Known <i class="bi bi-sort-down-alt my-btn" onclick="sortBy('Known')"></i></th>
                <th>Online <i class="bi bi-sort-down-alt my-btn" onclick="sortBy('Now')"></i></th>
              </thead>
              <tbody id="tBody"></tbody> 
              
            </table>
          </div>
        </div>
      </div>
    </div>
  </div>
  <script src="/fs/public/js/index.js"></script>
  <script src="/fs/public/js/sort.js"></script>
  <script src="/fs/public/js/filter-search.js"></script>
  <script src="/fs/public/js/refresh.js"></script>
  
  
  </body>
  </html>
  
  
services.name: http://190.247.11.127:8840/fs/public/favicon.png
services.body_hash_sha1: sha1:e693a61f57774b0cad1af0070fe9b2c840654410
services.supported_versions: HTTP/1.1
services.protocol: HTTP
services.transport_protocol: TCP
services.scan_time: 2025-07-27T23:48:23.546907
services.banner: HTTP/1.1 200 OK
  Cache-Control: max-age=31536000
  Content-Encoding: gzip
  Content-Type: text/html; charset=utf-8
  Last-Modified: Thu, 26 Jun 2025 00:16:20 GMT
  Vary: Accept-Encoding
  X-Content-Type-Options: nosniff
  X-Csrf-Token: 
  Date:  <REDACTED>
  Transfer-Encoding: chunked
  
services.source: OSI_APPLICATION_LAYER
services.part: a
services.vendor: Portainer
services.product: Portainer
services.cpe: cpe:2.3:a:portainer:portainer:*:*:*:*:*:*:*:*
services.value: angularjs
services.path: /
services.endpoint_type: HTTP
services.scan_time: 2025-07-27T23:48:23.546907
services.uri: http://190.247.11.127:9003/
services.protocol: HTTP/1.1
services.status_reason: OK
services.key: Vary
services.headers: Accept-Encoding
services.key: Content-Encoding
services.headers: gzip
services.key: Cache-Control
services.headers: max-age=31536000
services.key: X-Content-Type-Options
services.headers: nosniff
services.key: Content-Type
services.headers: text/html; charset=utf-8
services.key: Date
services.headers: <REDACTED>
services.key: X-Csrf-Token
services.key: Transfer-Encoding
services.headers: chunked
services.key: Last-Modified
services.headers: Thu, 26 Jun 2025 00:16:20 GMT
services.html_tags: <title>Portainer</title> <meta charset="utf-8"/> <meta name="description" content=""/> <meta name="author" content="Portainer.io"/> <meta http-equiv="cache-control" content="no-cache"/> <meta http-equiv="expires" content="0"/> <meta http-equiv="pragma" content="no-cache"/> <meta name="robots" content="noindex"/> <meta name="msapplication-config" content="6d50eaeb9f128c130ed9.xml"/> <meta name="theme-color" content="#ffffff"/>
services.body: <!doctype html><html lang="en" ng-app="portainer" ng-strict-di data-edition="CE"><head><meta charset="utf-8"/><title>Portainer</title><meta name="description" content=""/><meta name="author" content="Portainer.io"/><meta http-equiv="cache-control" content="no-cache"/><meta http-equiv="expires" content="0"/><meta http-equiv="pragma" content="no-cache"/><meta name="robots" content="noindex"/><base id="base"/><!--[if lt IE 9]>
        <script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script>
      <![endif]--><link rel="apple-touch-icon" sizes="180x180" href="63a301f0574f1a696ce6.png"/><link rel="icon" type="image/png" sizes="32x32" href="2dcfc527d067d4ae3424.png"/><link rel="icon" type="image/png" sizes="16x16" href="112a479c093f4729251d.png"/><link rel="mask-icon" href="data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MjAiIGhlaWdodD0iNDIwIiB2aWV3Qm94PSIwIDAgMzE1LjAwMDAwMCAzMTUuMDAwMDAwIj48cGF0aCBkPSJNMTYzIDEzLjN2Ni40bC0zOC4zIDIyLjEtMzguMiAyMi4xaC0zNGMtMi44LjEtMyAuMy0zLjIgNC41LS4yIDMuNC4xIDQuNSAxLjUgNC44LjkuMiAxNiAuMyAzMy41LjIgMTcuNCAwIDMxLjcuMiAzMS44LjUuMS4zLjIgMTAuMy40IDIyLjEuMSAxMS44LjMgMjEuOC40IDIyLjIgMCAuNSA1LjUuOCAxMiAuOGgxMS45bC0uMS0yMi44LS4xLTIyLjcgMTEuMi0uMUgxNjNWMjA0bDMuNS4xYzEuOS4xIDQuMS4yIDQuNy4zIDEgLjEgMS4zLTEzLjcgMS4zLTY1LjNWNzMuN2wzLjMtLjMgMy4yLS4yLjEgNjYuNnY2Ni43bDQuOCAzLjEgNC43IDMuMnYtNjljLS4xLTM4IC4xLTY5LjMuNC02OS43LjMtLjQgMTcuMi0uNyAzNy41LS43aDM3bC4zLTQuNi4zLTQuNi04LjMtLjMtOC4zLS40LTM3LTIxLjRjLTIwLjMtMTEuOC0zNy4yLTIxLjYtMzcuNS0yMS44LS4zLS4zLS41LTIuOC0uNi01LjYtLjEtMi45LS4yLTUuOC0uMy02LjUtLjEtLjctMS43LTEuMi00LjYtMS4ySDE2M3Y2LjN6bTAgMzQuMXYxNi41aC0yOC4yYy0yOCAwLTI4LjMgMC0yNS44LTEuOSAxLjQtMSA0LjMtMi44IDYuNS00IDIuMi0xLjEgMTMuNS03LjYgMjUtMTQuNCAxMS42LTYuOSAyMS4zLTEyLjUgMjEuOC0xMi41LjQtLjEuNyA3LjMuNyAxNi4zem0yOC42LTUuNGM3LjUgNC40IDEzLjcgOCAxMy45IDggLjEgMCA0LjUgMi41IDkuNiA1LjcgNS4yIDMuMSAxMC41IDYuMiAxMS45IDYuOSAyLjEgMS4xLTIgMS4zLTI2IDEuMWwtMjguNS0uMlY0Ny4zbC0uMS0xNi4xIDIuOCAxLjRjMS41LjggOC45IDUgMTYuNCA5LjR6bS01NS40IDQwLjVjMCA0LjktLjEgOS43LS4xIDEwLjUtLjEgMS4zLTEuNSAxLjYtNy4zIDEuNWwtNy4zLS4xLS41LTEwLjUtLjUtMTAuNiA3LjguMSA3LjkuMXY5em0tMTIuMyAyMy45Yy4xIDYuNi0uMiA4LjUtMS40IDktLjguMy0xLjUuMi0xLjYtLjItLjQtMy40LS41LTE1LS4xLTE2IC4yLS42IDEtMS4yIDEuNy0xLjIuOSAwIDEuMyAyLjMgMS40IDguNHptNi43LjRjMCA0LjUtLjMgOC4yLS44IDguMi0uNCAwLTEuMS4xLTEuNS4yLS41LjItLjgtMy43LS45LTguNSAwLTcuNS4yLTguNyAxLjUtOC41IDEuMy4zIDEuNiAxLjkgMS43IDguNnptNi45IDBjLjEgNy4yLS4xIDguMi0xLjYgOC4yLTEuNiAwLTEuOC0xLTEuNy04LjUuMS03LjMuMy04LjUgMS43LTguMyAxLjMuMyAxLjYgMS44IDEuNiA4LjZ6Ii8+PHBhdGggZD0iTTYxLjkgMTA4YzAgLjMtLjEgNS43LS4yIDEybC0uMSAxMS41IDEyLjIuMyAxMi4yLjN2LTI0LjZINzRjLTYuNiAwLTEyIC4yLTEyLjEuNXptNy4xIDExLjRjMCA4LTEgMTEuMS0yLjYgOC41LS41LS45LS44LTguNi0uNS0xNS4yLjEtLjkuOC0xLjcgMS42LTEuNyAxLjIgMCAxLjUgMS42IDEuNSA4LjR6bTctLjFjMCA4LjYtLjMgOS45LTIuMyA5LjEtLjgtLjMtMS4xLTMtMS03LjcuMi0xMCAuMS05LjcgMS44LTkuNyAxLjIgMCAxLjUgMS42IDEuNSA4LjN6bTYuOC0uM2MuMyA4LjQtLjIgMTAuNy0yLjEgOS4yLS45LS43LTEuMi0zLjYtMS4xLTguOS4yLTkuMi4xLTguNiAxLjctOC4xLjguMyAxLjMgMyAxLjUgNy44ek04OS40IDEwNy45Yy0uMi4yLS40IDUuOC0uNCAxMi4zVjEzMmgyNC41bC0uMS0xMS4zYy0uMS02LjEtLjItMTEuNy0uMy0xMi4yLS4xLTEtMjIuNy0xLjUtMjMuNy0uNnptNy4yIDExLjJjLjEgOC42LS4zIDEwLTIuMiA5LjItMS0uNC0xLjQtMi41LTEuNC04LjIgMC00LjMuMy04LjEuNy04LjUgMS44LTEuOCAyLjguNyAyLjkgNy41em02LjUtNy40Yy40IDMuOS4zIDE1LjctLjIgMTYuNS0xLjcgMi43LTIuOS0uOS0yLjktOC44IDAtNi44LjMtOC40IDEuNS04LjQuOCAwIDEuNS4zIDEuNi43em03IC41Yy41IDUuNS4zIDEzLjYtLjQgMTUuMS0xLjYgMy42LTIuNy40LTIuNy03LjkgMC02LjguMy04LjQgMS41LTguNC44IDAgMS41LjYgMS42IDEuMnpNOTQuMyAxMzQuOGwtNS4zLjN2MTJjMCA4LjguMyAxMS45IDEuMyAxMiAxLjcuMSAxNS41LjEgMTkuNyAwbDMuNS0uMS0uMS0xMC44Yy0uMS01LjktLjItMTEuNC0uMy0xMi4yLS4xLTEuNS02LjItMS45LTE4LjgtMS4yem0yLjIgMTIuM2MwIDYuOC0uMyA4LjQtMS41IDguNHMtMS42LTEuNi0xLjgtNy4zYy0uNC04LjEuMS0xMC42IDIuMS05LjkuOC4yIDEuMiAyLjkgMS4yIDguOHptNi42LTcuNGMuNSA1LjkuMyAxNC42LS4yIDE1LjUtLjQuNi0xLjIuNy0xLjguNC0xLjItLjgtMS42LTE1LjgtLjQtMTYuOSAxLjItMS4yIDIuMy0uNyAyLjQgMXptNy0xYzAgLjUuMSA0LjQuMiA4LjggMCA2LjMtLjIgOC0xLjQgOC0xLjEgMC0xLjUtMS45LTEuNy04LjgtLjItNy4zIDAtOC43IDEuMy04LjcuOCAwIDEuNS4zIDEuNi43ek0xMjAgMTM0LjhsLTMuNS4zLS4xIDExLjljMCA3LjYuNCAxMiAxLjEgMTIuMSA0LjYuMyAyMS41IDAgMjIuMy0uNS41LS4zIDEtNS43IDEtMTIuMWwuMS0xMS41LTUuNy0uMWMtMy4xIDAtNy0uMS04LjctLjItMS42LS4xLTQuNi0uMS02LjUuMXptMy40IDQuOGMxIDIuNy43IDE1LjItLjUgMTUuOS0uNi40LTEuMy40LTEuNi4xLS43LS43LTEuMi0xNS43LS42LTE2LjkuNy0xLjIgMi4xLS44IDIuNy45em03LjMgNmMuMiA3LjktLjQgMTAuNy0yIDEwLjEtLjgtLjItMS4yLTMuMi0xLjMtOC4zLS4xLTguNS4xLTkuNyAxLjktOS4xLjcuMiAxLjMgMy4xIDEuNCA3LjN6bTYuOSAwYy4yIDguNS0uMyAxMC41LTIuMiA5LjctMS4xLS40LTEuNC0yLjItMS4zLTguMi4yLTguMy41LTkuNCAyLjItOC44LjguMiAxLjIgMyAxLjMgNy4zek02MS45IDEzNi43Yy0uNCA5LS4zIDIxLjYuMyAyMS45LjcuNCAxMy45LjcgMjEuMS41bDIuNy0uMXYtMjRINzRjLTEwLjcgMC0xMiAuMi0xMi4xIDEuN3pNNjkgMTQ3YzAgNS0uNCA5LS45IDktMS42IDAtMi4yLTEuNy0yLjItNy4yLS4yLTkuNiAwLTEwLjggMS42LTEwLjggMS4yIDAgMS41IDEuNyAxLjUgOXptNi44LS41Yy4zIDcuMi0uNyAxMC45LTIuNCA5LjItLjQtLjQtLjctMy41LS43LTYuOS4xLTEwLjIuMi0xMSAxLjYtMTAuNi44LjMgMS4zIDMuMSAxLjUgOC4zem03IDBjLjIgNC43LS4xIDguMi0uOCA4LjktMS44IDEuOC0yLjYtLjgtMi40LTguNi4yLTkuMy4yLTkgMS43LTguNi44LjMgMS4zIDMuMSAxLjUgOC4zek01OS40IDE2Ni43Yy0zLjEgNy4yLTQuMyAxMy42LTQgMjEuMi41IDEyLjUgNC45IDIyLjQgMTMuNyAzMS4xIDQuMSA0LjEgNS40IDQuOCA3LjIgNC4xIDEuMi0uNCAzLjktLjcgNS45LS42IDMuNi4xIDMuOC0uMSA2LjgtNi4yIDguMi0xNi43IDI5LjEtMjMuMyA0Ny42LTE1LjIgMi40IDEuMSA0LjYgMi40IDQuOSAyLjkgMi41IDQuMSA1LjQtMy4zIDUuOS0xNS4zLjQtOC0uNi0xNC0zLjUtMjAuN2wtMi4xLTVINjFsLTEuNiAzLjd6Ii8+PHBhdGggZD0iTTExOC41IDIwMi44Yy02IC45LTExIDIuOC0xNS4xIDUuNy01LjIgMy43LTExIDExLjMtMTEuOSAxNS42LS42IDIuNC0xLjIgMi45LTMuOCAzLTkuNi4yLTE3LjMgMy41LTIzLjcgMTAtNiA2LjItOC40IDEyLjEtOC42IDIwLjktLjMgMTAuMiAyLjEgMTYuNSA5LjEgMjMuNSA2LjYgNi42IDEyLjUgOSAyMiA5IDYuNyAwIDcuMS4xIDguOSAzIDIuNiA0LjIgNy4zIDguMyAxMy4xIDExLjMgNC4yIDIuMiA2LjMgMi42IDEzIDIuNiA5LjUgMCAxNi45LTIuOSAyMi44LTguOWwzLjctMy44IDYuMSAzLjNjMTMgNi45IDI5LjQgMy43IDM4LjgtNy42IDUuMy02LjUgNy4yLTExLjcgNy4zLTIwLjQuMi03LS4yLTguNi0yLjgtMTMuNy0yLjYtNS0yLjktNi40LTIuMS05LjMgMi4zLTguOS0xLjctMjIuMi04LjktMjkuNC05LjgtOS44LTIyLjgtMTEuNy0zOC4xLTUuNS0zIDEuMi0zLjQgMS4xLTUuOC0xLjQtNS4xLTUtMTcuMS05LTI0LTcuOXoiLz48L3N2Zz4=" color="#5bbad5"/><link rel="shortcut icon" href="data:image/vnd.microsoft.icon;base64,AAABAAIAJTAAAAEAIADIBQAAJgAAACUwAgABAAEAMAMAAO4FAACJUE5HDQoaCgAAAA1JSERSAAAAJQAAADAIBgAAAJaFsysAAAWPSURBVFiF7ZhrbFRFFMd/Z3e7u8VCa28JCiJqfKCg+AiPWBFZqgatH9CIRlGCJj4wBCQYE5WEh4ZHQAJofCRETRWi0fggxAftLYoxGuODArYkSmJ8BMvetpTa9u527/hh7rbbfbV3u37jn0wyM/fOuf+ZOfM/Zy6cwfAgxTJkmDZAGOizIqG+kdjyFYXRAL4HHhypkWKSCgIGUOGuWsEY8fYZZq+AzAVeBKYBPcB2YJOjVEf7vLBnmwWvlNFoY5j2hSDvAp8BxwELOAAsAZp8IosM0w7876RK1+/DaLDLUKwBDgGXAbUJxV1AN7AXmAJ8AOwCTMO0Z1Q2Dn9Lh01KplRjmLZvVHXN3QhNwBPAalFMtyKhL/yCSr5rRUIWyJPAdPR2fi2K1w3THn92fW9xSI1tjFO505wG7AfqgHpgKrA9Oi8UyzbGigRpe/T6JmA+cC8QAY74fLLcaLTDbPgk9wKkNgzTDqNPUSrKgGeBh4FmYBX66GezdRTYit62dIwGlgMrgGOunW8BROiMzg31r3Q/qSozhkJtAx5PM+YHks46lGMEgYRbciHg2uy3J3BuNBJqT32hn52CV4F9Q3x4OlACfAM8BLwPdLrPdgN7gMtdk5uGsJVEVzprAE5GgqCX9Vi+0YZph4CgFQnVG6Z9M/ClFQlZrmD2Ai1ABeATpD4aSfeGoVG4To1QtfOhEFI+YCPaSe8p0EZeZKht1YE+SCSCDByCBAOOmRSjS91mD+AUm1TmLB0HJRxUQqtbnlfCiWQbqCk2iXTkiktlwBi3HnbryQmcAN506zGGlolB8FUvQP12BGP3UaKRIL75iwnNqiUwbiLh62aS6IrlJJUPTYJsSDa8ni7/pMmMWbcH8QcYteVzwtfMRkR7R19rG77SMskg5frMPuBnt+tHtPaIW04r1JXuM8cw7RYrEsonlpkQIRHrofTam3B6u+k9dJD4r4dQsRjlS57LJOWK6G3AFW7XSXTsSm5fG7DUrXcDk9Apizde/gBOZzunXn4KZ39df79Vt97JdZwlpaS3U0vBcuAfG+T0e5sHEUoil1GVo7/Q99JGOSROxilfvDbr44ztc1B+0aerzO36C1jHwKr9DawdeN07p45tK6hYuUMoKck6OptP3QJsZrj5u+CrbIyvQQ1fQ8uXbgRASfaNytZ7x7AJadwpHggBSHgUEgoqAWTq7PykKnWQnerpCzAJpNTjGJQdQwIlVO40kavmgAj4SzBMe/D2iaPAJ4U5r0ck2v6h9IaJxH5xqNp1gFhLCwRKAAbrlFUTxjDtJuDGLHYUOtf6Dh2ILwFmAa3g9Hi9QjqdbcSbxwGI0xVXgfEXkLSRLcx8jL6ppH7lFDpNPgUsBC5G5+svA6Nd2QqA2gEcRl9KzxqKWHRuKDlZfDWLQCmchndUNlIm+nI5Pzkp4H7gduCxFLI1wCNoedgKqhYduJuBN4DWoUilwql/u7+ecfqsSMhB596HgT6X4HlphJIIAi8AK9E51jnAXOAtYGZcvIXEnKQAOnauOiFQjfat14BlWQjlgwCrA8o3o2ikKpZtOV/pa/dBtI9NKcB2AFhY1TA43VKJOMruRcVzp2EZszdMuxydf08ugEg6PkKxwJoX8jQobaUEtPMWgxDA74XE7EGkqrSi31okQgBXIzkCXB4MHiBKAM8hIw/moH8VecIgUu5Phh+KxcjFRV4HZFvaV4B/R86lH1GvAzJIdXf80Qw8AHQUgdBxUfzkdVBWQRzbEMMRNQG4jwGlrvVo2wYWiOLTqEdJGFKl3R8ZIeBDBuJhKvaihfZptFM76EziGRznK6vG+7kZZugQ9y+fWoYOzhOAP4E6QV7q62qP+csqBMQAFQfptCLBgvMyT0mQ0WgjCp/SgTgGOFbE29acQTHxHxn/rPaMFerCAAAAAElFTkSuQmCCKAAAACUAAABgAAAAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"/><meta name="msapplication-config" content="6d50eaeb9f128c130ed9.xml"/><meta name="theme-color" content="#ffffff"/><script defer="defer" src="runtime.61ba793b65ba121ea657.js"></script><script defer="defer" src="vendor.dc703b38d94e18bf53e2.js"></script><script defer="defer" src="main.1b41a0d442eb7abcf09b.js"></script><link href="vendor.3e0fd5bef5722e2dbb72.css" rel="stylesheet"><link href="main.cb90864dbabbc7e4e939.css" rel="stylesheet"></head><body ng-controller="MainController"><react-query-dev-tools></react-query-dev-tools><div id="page-wrapper" ng-class="{
          open: isSidebarOpen() && ['portainer.auth', 'portainer.init.admin'].indexOf($state.current.name) === -1,
          nopadding: ['portainer.auth', 'portainer.init.admin', 'portainer.logout'].indexOf($state.current.name) > -1 || applicationState.loading
        }" ng-cloak><div id="sideview" ui-view="sidebar" ng-if="!applicationState.loading"></div><div id="content-wrapper"><div class="page-content"><div class="page-wrapper" ng-if="applicationState.loading"><div class="simple-box container"><div class="col-md-6 col-md-offset-3 col-sm-6 col-sm-offset-3"><div class="row"><img ng-if="logo" ng-src="{{ logo }}" class="simple-box-logo"/> <img ng-if="!logo" src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyNS4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9IjAgMCA5NDAgMzAwIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA5NDAgMzAwOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDojMTNCRUY5O30NCgkuc3Qxe2ZpbGw6IzEzQkVGOTt9DQo8L3N0eWxlPg0KPGc+DQoJPHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSI4NC4zLDc2LjYgODAuMyw3Ni42IDgwLjMsOTcuMyA4NC4zLDk3LjMgODQuMyw3Ni42IAkiLz4NCgk8cG9seWdvbiBjbGFzcz0ic3QwIiBwb2ludHM9IjEwMS41LDc2LjYgOTcuNSw3Ni42IDk3LjUsOTcuMyAxMDEuNSw5Ny4zIDEwMS41LDc2LjYgCSIvPg0KCTxwb2x5Z29uIGNsYXNzPSJzdDAiIHBvaW50cz0iMTI1LDM3LjEgMTIwLjksMzAgNTIuNSw2OS41IDU2LjYsNzYuNiAxMjUsMzcuMSAJIi8+DQoJPHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSIxMjQuNiwzNy4xIDEyOC43LDMwIDE5Ny4xLDY5LjUgMTkzLDc2LjYgMTI0LjYsMzcuMSAJIi8+DQoJPHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSIyMDkuMiw3Ni43IDIwOS4yLDY4LjUgMjEuOCw2OC41IDIxLjgsNzYuNyAyMDkuMiw3Ni43IAkiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTM1LDE5Mi41VjcxaDguMnYxMjcuNEMxNDEsMTk1LjksMTM4LjIsMTk0LjEsMTM1LDE5Mi41TDEzNSwxOTIuNXoiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTIxLDE5MC40VjE5aDguMnYxNzIuNEMxMjYuOSwxOTAuMywxMjEuMywxOTAuNCwxMjEsMTkwLjRMMTIxLDE5MC40eiIvPg0KCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik00My4zLDIwNy41Yy0xMC03LjQtMTYuNi0xOS4yLTE2LjYtMzIuNmMwLTcuMSwxLjktMTQuMSw1LjQtMjAuMmg3MGMzLjYsNi4xLDUuNCwxMy4xLDUuNCwyMC4yDQoJCWMwLDYuMi0wLjgsMTItMy4zLDE3LjJjLTUuMy01LjEtMTMuMS03LjMtMjEtNy4zYy0xNCwwLTI2LDguNy0yOS4xLDIxLjdjLTEuMS0wLjEtMS44LTAuMi0yLjktMC4yDQoJCUM0OC41LDIwNi40LDQ1LjksMjA2LjgsNDMuMywyMDcuNUw0My4zLDIwNy41eiIvPg0KCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0yMTkuOCwxMTUuNWMtMTAuNiwwLTE5LjksNC45LTI2LjMsMTIuNXYtMTEuNGgtMTAuNnYxMDEuM2gxMC42di00Mi43YzYuMyw3LjgsMTUuNywxMi44LDI2LjMsMTIuOA0KCQljMTkuOCwwLDM2LjEtMTYuOSwzNi4xLTM2LjRDMjU1LjksMTMxLjgsMjM5LjYsMTE1LjUsMjE5LjgsMTE1LjVMMjE5LjgsMTE1LjV6IE0yMjAuMSwxNzcuNWMtMTMuOCwwLTI2LTEyLjItMjYtMjYNCgkJYzAtMTQuMSwxMi4yLTI1LjYsMjYtMjUuNmMxNC4xLDAsMjQuNywxMS41LDI0LjcsMjUuNkMyNDQuOCwxNjUuMywyMzQuMiwxNzcuNSwyMjAuMSwxNzcuNUwyMjAuMSwxNzcuNXoiLz4NCgk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNMzAyLjMsMTg3LjljMTkuOCwwLDM2LjEtMTYuOSwzNi4xLTM2LjRjMC0xOS44LTE2LjMtMzYuMS0zNi4xLTM2LjFjLTE5LjgsMC0zNi4xLDE2LjMtMzYuMSwzNi4xDQoJCUMyNjYuMiwxNzEsMjgyLjUsMTg3LjksMzAyLjMsMTg3LjlMMzAyLjMsMTg3Ljl6IE0zMDIuMywxMjUuOWMxNC4xLDAsMjUsMTEuNSwyNSwyNS42YzAsMTMuOC0xMC45LDI2LTI1LDI2Yy0xNC4xLDAtMjUtMTIuMi0yNS0yNg0KCQlDMjc3LjMsMTM3LjUsMjg4LjIsMTI1LjksMzAyLjMsMTI1LjlMMzAyLjMsMTI1Ljl6Ii8+DQoJPHBhdGggY2xhc3M9InN0MSIgZD0iTTM2NS42LDExNi42SDM1NXY2OS42aDEwLjZ2LTM4LjVjMC0xNC4yLDExLjItMjEuOCwyMy42LTIxLjh2LTEwLjRjLTkuNiwwLTE3LjksNC4xLTIzLjYsMTAuNlYxMTYuNg0KCQlMMzY1LjYsMTE2LjZ6Ii8+DQoJPHBvbHlnb24gY2xhc3M9InN0MSIgcG9pbnRzPSI0MzMuOCwxMjYuMiA0MzMuOCwxMTYuNiA0MTguMSwxMTYuNiA0MTguMSw4OS4yIDQwNy41LDg5LjIgNDA3LjUsMTE2LjYgMzk3LjEsMTE2LjYgMzk3LjEsMTI2LjIgDQoJCTQwNy41LDEyNi4yIDQwNy41LDE4Ni4yIDQxOC4xLDE4Ni4yIDQxOC4xLDEyNi4yIDQzMy44LDEyNi4yIAkiLz4NCgk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNNDc4LjYsMTg3LjljMTAuNiwwLDE5LjktNS4xLDI2LjMtMTIuOHYxMS40aDEwLjZ2LTY5LjloLTEwLjZWMTI4Yy02LjMtNy42LTE1LjctMTIuNS0yNi4zLTEyLjUNCgkJYy0xOS44LDAtMzYuMSwxNi4zLTM2LjEsMzYuMUM0NDIuNSwxNzEsNDU4LjgsMTg3LjksNDc4LjYsMTg3LjlMNDc4LjYsMTg3Ljl6IE00NzguMiwxNzcuNWMtMTQuMSwwLTI0LjctMTIuMi0yNC43LTI2DQoJCWMwLTE0LjEsMTAuNi0yNS42LDI0LjctMjUuNmMxMy44LDAsMjYsMTEuNSwyNiwyNS42QzUwNC4yLDE2NS4zLDQ5MiwxNzcuNSw0NzguMiwxNzcuNUw0NzguMiwxNzcuNXoiLz4NCgk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNNTQzLjYsMTAyLjVjNCwwLDcuNC0zLjMsNy40LTcuNmMwLTMuOC0zLjUtNy4zLTcuNC03LjNjLTQuMywwLTcuNiwzLjUtNy42LDcuMw0KCQlDNTM2LDk5LjIsNTM5LjMsMTAyLjUsNTQzLjYsMTAyLjVMNTQzLjYsMTAyLjV6IE01MzguMiwxODYuMmgxMS4xdi02OS42aC0xMS4xVjE4Ni4yTDUzOC4yLDE4Ni4yeiIvPg0KCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik01NzEuNiwxODYuMmgxMC42di0zN2MwLTE1LjcsOC43LTIzLjYsMjIuOC0yMy4zYzExLjYsMCwxNy45LDYuOCwxNy45LDIwLjZ2MzkuN2gxMC42di0zOS43DQoJCWMwLTIyLjItOC41LTMxLTI4LjUtMzFjLTkuNSwwLTE3LjIsMy41LTIyLjgsOS41di04LjRoLTEwLjZWMTg2LjJMNTcxLjYsMTg2LjJ6Ii8+DQoJPHBhdGggY2xhc3M9InN0MSIgZD0iTTcyMC43LDE1MS41YzAtMTkuOC0xNi4zLTM2LjEtMzYuMS0zNi4xYy0xOS44LDAtMzYuMSwxNi4zLTM2LjEsMzYuMWMwLDE5LjUsMTYuMywzNi40LDM2LjEsMzYuNA0KCQljMTQuMSwwLDI2LjYtOC4xLDMyLjQtMjAuMWgtMTMuMWMtNC40LDUuNy0xMS4yLDkuNy0xOS4zLDkuN2MtMTIuMywwLTIyLjMtOS41LTI0LjUtMjFoNjAuNkw3MjAuNywxNTEuNUw3MjAuNywxNTEuNXoNCgkJIE02ODQuNiwxMjUuOWMxMi4yLDAsMjIuMiw4LjksMjQuNSwyMC40aC00OS4xQzY2Mi40LDEzNC44LDY3Mi4zLDEyNS45LDY4NC42LDEyNS45TDY4NC42LDEyNS45eiIvPg0KCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik03NDcuOSwxMTYuNmgtMTAuNnY2OS42aDEwLjZ2LTM4LjVjMC0xNC4yLDExLjItMjEuOCwyMy42LTIxLjh2LTEwLjRjLTkuNywwLTE3LjksNC4xLTIzLjYsMTAuNlYxMTYuNg0KCQlMNzQ3LjksMTE2LjZ6Ii8+DQoJPHBhdGggY2xhc3M9InN0MSIgZD0iTTc4Ny41LDE4N2M0LjcsMCw4LjctNCw4LjctOC45YzAtNC43LTQtOC43LTguNy04LjdjLTQuOSwwLTguOSw0LTguOSw4LjdDNzc4LjYsMTgzLDc4Mi42LDE4Nyw3ODcuNSwxODcNCgkJTDc4Ny41LDE4N3oiLz4NCgk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNODIzLjUsMTAyLjVjNCwwLDcuNC0zLjMsNy40LTcuNmMwLTMuOC0zLjUtNy4zLTcuNC03LjNjLTQuMywwLTcuNiwzLjUtNy42LDcuMw0KCQlDODE2LDk5LjIsODE5LjMsMTAyLjUsODIzLjUsMTAyLjVMODIzLjUsMTAyLjV6IE04MTguMiwxODYuMmgxMS4xdi02OS42aC0xMS4xVjE4Ni4yTDgxOC4yLDE4Ni4yeiIvPg0KCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik04ODIuMSwxODcuOWMxOS44LDAsMzYuMS0xNi45LDM2LjEtMzYuNGMwLTE5LjgtMTYuMy0zNi4xLTM2LjEtMzYuMWMtMTkuOCwwLTM2LjEsMTYuMy0zNi4xLDM2LjENCgkJQzg0NiwxNzEsODYyLjMsMTg3LjksODgyLjEsMTg3LjlMODgyLjEsMTg3Ljl6IE04ODIuMSwxMjUuOWMxNC4xLDAsMjUsMTEuNSwyNSwyNS42YzAsMTMuOC0xMC45LDI2LTI1LDI2Yy0xNC4xLDAtMjUtMTIuMi0yNS0yNg0KCQlDODU3LjEsMTM3LjUsODY4LDEyNS45LDg4Mi4xLDEyNS45TDg4Mi4xLDEyNS45eiIvPg0KCTxwb2x5Z29uIGNsYXNzPSJzdDAiIHBvaW50cz0iNzcuNywxMDYuNSA1Ni41LDEwNi41IDU2LjUsMTI3LjggNzcuNywxMjcuOCA3Ny43LDEwNi41IAkiLz4NCgk8cG9seWdvbiBjbGFzcz0ic3QwIiBwb2ludHM9IjUzLjgsMTA2LjUgMzIuNiwxMDYuNSAzMi42LDEyNy44IDUzLjgsMTI3LjggNTMuOCwxMDYuNSAJIi8+DQoJPHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSI1My44LDEzMC4yIDMyLjYsMTMwLjIgMzIuNiwxNTEuNSA1My44LDE1MS41IDUzLjgsMTMwLjIgCSIvPg0KCTxwb2x5Z29uIGNsYXNzPSJzdDAiIHBvaW50cz0iNzcuNywxMzAuMiA1Ni41LDEzMC4yIDU2LjUsMTUxLjUgNzcuNywxNTEuNSA3Ny43LDEzMC4yIAkiLz4NCgk8cG9seWdvbiBjbGFzcz0ic3QwIiBwb2ludHM9IjEwMS41LDEzMC4yIDgwLjMsMTMwLjIgODAuMywxNTEuNSAxMDEuNSwxNTEuNSAxMDEuNSwxMzAuMiAJIi8+DQoJPHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSIxMDEuNSw5NS4xIDgwLjMsOTUuMSA4MC4zLDExNi40IDEwMS41LDExNi40IDEwMS41LDk1LjEgCSIvPg0KCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik01Ny42LDIxMC43YzIuOS0xMi4zLDE0LTIxLjUsMjcuMi0yMS41YzguNSwwLDE2LjEsMy44LDIxLjMsOS44YzQuNS0zLjEsOS45LTQuOSwxNS44LTQuOQ0KCQljMTUuNCwwLDI3LjksMTIuNSwyNy45LDI3LjljMCwzLjItMC41LDYuMi0xLjUsOS4xYzMuNCw0LjYsNS41LDEwLjQsNS41LDE2LjZjMCwxNS40LTEyLjUsMjcuOS0yNy45LDI3LjljLTYuOCwwLTEzLTIuNC0xNy44LTYuNA0KCQljLTUuMSw3LjEtMTMuNCwxMS44LTIyLjgsMTEuOGMtMTAuOCwwLTIwLjItNi4yLTI0LjktMTUuMmMtMS45LDAuNC0zLjgsMC42LTUuOCwwLjZjLTE1LjQsMC0yOC0xMi41LTI4LTI3LjlzMTIuNS0yNy45LDI4LTI3LjkNCgkJQzU1LjYsMjEwLjUsNTYuNiwyMTAuNSw1Ny42LDIxMC43TDU3LjYsMjEwLjd6Ii8+DQo8L2c+DQo8L3N2Zz4NCg==" class="simple-box-logo" alt="Portainer"/></div><div class="ml-0 mr-0 flex items-center justify-center text-center">Loading Portainer... <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="!ml-1 inline animate-spin-slow"><circle cx="12" cy="12" r="3"></circle><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"></path></svg></div></div></div></div><div id="view" ui-view="content" ng-if="!applicationState.loading"></div></div></div></div></body></html>
services.name: http://190.247.11.127:9003/63a301f0574f1a696ce6.png
services.name: http://190.247.11.127:9003/2dcfc527d067d4ae3424.png
services.name: http://190.247.11.127:9003/112a479c093f4729251d.png
services.name: data:image/vnd.microsoft.icon;base64,AAABAAIAJTA...AAAAAAAAAAAAAAAAAAAAAAAA
services.body_hash_sha1: sha1:77c18b719a6fcaa4b6eea589ab4849a86f33a429
services.supported_versions: HTTP/1.1
services.protocol: SSH
services.transport_protocol: TCP
services.scan_time: 2025-07-27T23:48:23.155604
services.banner: SSH-2.0-OpenSSH_8.4p1 Raspbian-5+deb11u5
services.value: remote-access
services.raw: SSH-2.0-OpenSSH_8.4p1 Raspbian-5+deb11u5
services.protocol_version: 2.0
services.software_version: OpenSSH_8.4p1
services.comment: Raspbian-5+deb11u5
services.kex_algorithms: curve25519-sha256 curve25519-sha256@libssh.org ecdh-sha2-nistp256 ecdh-sha2-nistp384 ecdh-sha2-nistp521 diffie-hellman-group-exchange-sha256 diffie-hellman-group16-sha512 diffie-hellman-group18-sha512 diffie-hellman-group14-sha256 kex-strict-s-v00@openssh.com
services.host_key_algorithms: rsa-sha2-512 rsa-sha2-256 ssh-rsa ecdsa-sha2-nistp256 ssh-ed25519
services.client_to_server_ciphers: chacha20-poly1305@openssh.com aes128-ctr aes192-ctr aes256-ctr aes128-gcm@openssh.com aes256-gcm@openssh.com
services.server_to_client_ciphers: chacha20-poly1305@openssh.com aes128-ctr aes192-ctr aes256-ctr aes128-gcm@openssh.com aes256-gcm@openssh.com
services.client_to_server_macs: umac-64-etm@openssh.com umac-128-etm@openssh.com hmac-sha2-256-etm@openssh.com hmac-sha2-512-etm@openssh.com hmac-sha1-etm@openssh.com umac-64@openssh.com umac-128@openssh.com hmac-sha2-256 hmac-sha2-512 hmac-sha1
services.server_to_client_macs: umac-64-etm@openssh.com umac-128-etm@openssh.com hmac-sha2-256-etm@openssh.com hmac-sha2-512-etm@openssh.com hmac-sha1-etm@openssh.com umac-64@openssh.com umac-128@openssh.com hmac-sha2-256 hmac-sha2-512 hmac-sha1
services.client_to_server_compression: none zlib@openssh.com
services.server_to_client_compression: none zlib@openssh.com
services.kex_algorithm: curve25519-sha256@libssh.org
services.host_key_algorithm: ecdsa-sha2-nistp256
services.cipher: aes128-ctr
services.mac: hmac-sha2-256
services.compression: none
services.cipher: aes128-ctr
services.mac: hmac-sha2-256
services.compression: none
services.curve: P-256
services.hassh_fingerprint: 779664e66160bf75999f091fce5edb5a
services.protocol: SSH
services.transport_protocol: TCP
services.scan_time: 2025-07-27T23:48:19.578858
services.banner: SSH-2.0-OpenSSH_9.2p1 Debian-2+deb12u6
services.value: remote-access
services.raw: SSH-2.0-OpenSSH_9.2p1 Debian-2+deb12u6
services.protocol_version: 2.0
services.software_version: OpenSSH_9.2p1
services.comment: Debian-2+deb12u6
services.kex_algorithms: sntrup761x25519-sha512 sntrup761x25519-sha512@openssh.com curve25519-sha256 curve25519-sha256@libssh.org ecdh-sha2-nistp256 ecdh-sha2-nistp384 ecdh-sha2-nistp521 diffie-hellman-group-exchange-sha256 diffie-hellman-group16-sha512 diffie-hellman-group18-sha512 diffie-hellman-group14-sha256 kex-strict-s-v00@openssh.com
services.host_key_algorithms: rsa-sha2-512 rsa-sha2-256 ecdsa-sha2-nistp256 ssh-ed25519
services.client_to_server_ciphers: chacha20-poly1305@openssh.com aes128-ctr aes192-ctr aes256-ctr aes128-gcm@openssh.com aes256-gcm@openssh.com
services.server_to_client_ciphers: chacha20-poly1305@openssh.com aes128-ctr aes192-ctr aes256-ctr aes128-gcm@openssh.com aes256-gcm@openssh.com
services.client_to_server_macs: umac-64-etm@openssh.com umac-128-etm@openssh.com hmac-sha2-256-etm@openssh.com hmac-sha2-512-etm@openssh.com hmac-sha1-etm@openssh.com umac-64@openssh.com umac-128@openssh.com hmac-sha2-256 hmac-sha2-512 hmac-sha1
services.server_to_client_macs: umac-64-etm@openssh.com umac-128-etm@openssh.com hmac-sha2-256-etm@openssh.com hmac-sha2-512-etm@openssh.com hmac-sha1-etm@openssh.com umac-64@openssh.com umac-128@openssh.com hmac-sha2-256 hmac-sha2-512 hmac-sha1
services.client_to_server_compression: none zlib@openssh.com
services.server_to_client_compression: none zlib@openssh.com
services.kex_algorithm: curve25519-sha256@libssh.org
services.host_key_algorithm: ecdsa-sha2-nistp256
services.cipher: aes128-ctr
services.mac: hmac-sha2-256
services.compression: none
services.cipher: aes128-ctr
services.mac: hmac-sha2-256
services.compression: none
services.curve: P-256
services.hassh_fingerprint: 425d29fe50d8e4f5e37efb6e24bcf660
services.protocol: SSH
services.transport_protocol: TCP
services.scan_time: 2025-07-27T23:48:19.512458
services.banner: SSH-2.0-OpenSSH_9.2p1 Debian-2+deb12u6
services.value: remote-access
services.raw: SSH-2.0-OpenSSH_9.2p1 Debian-2+deb12u6
services.protocol_version: 2.0
services.software_version: OpenSSH_9.2p1
services.comment: Debian-2+deb12u6
services.kex_algorithms: sntrup761x25519-sha512 sntrup761x25519-sha512@openssh.com curve25519-sha256 curve25519-sha256@libssh.org ecdh-sha2-nistp256 ecdh-sha2-nistp384 ecdh-sha2-nistp521 diffie-hellman-group-exchange-sha256 diffie-hellman-group16-sha512 diffie-hellman-group18-sha512 diffie-hellman-group14-sha256 kex-strict-s-v00@openssh.com
services.host_key_algorithms: rsa-sha2-512 rsa-sha2-256 ecdsa-sha2-nistp256 ssh-ed25519
services.client_to_server_ciphers: chacha20-poly1305@openssh.com aes128-ctr aes192-ctr aes256-ctr aes128-gcm@openssh.com aes256-gcm@openssh.com
services.server_to_client_ciphers: chacha20-poly1305@openssh.com aes128-ctr aes192-ctr aes256-ctr aes128-gcm@openssh.com aes256-gcm@openssh.com
services.client_to_server_macs: umac-64-etm@openssh.com umac-128-etm@openssh.com hmac-sha2-256-etm@openssh.com hmac-sha2-512-etm@openssh.com hmac-sha1-etm@openssh.com umac-64@openssh.com umac-128@openssh.com hmac-sha2-256 hmac-sha2-512 hmac-sha1
services.server_to_client_macs: umac-64-etm@openssh.com umac-128-etm@openssh.com hmac-sha2-256-etm@openssh.com hmac-sha2-512-etm@openssh.com hmac-sha1-etm@openssh.com umac-64@openssh.com umac-128@openssh.com hmac-sha2-256 hmac-sha2-512 hmac-sha1
services.client_to_server_compression: none zlib@openssh.com
services.server_to_client_compression: none zlib@openssh.com
services.kex_algorithm: curve25519-sha256@libssh.org
services.host_key_algorithm: ecdsa-sha2-nistp256
services.cipher: aes128-ctr
services.mac: hmac-sha2-256
services.compression: none
services.cipher: aes128-ctr
services.mac: hmac-sha2-256
services.compression: none
services.curve: P-256
services.hassh_fingerprint: 425d29fe50d8e4f5e37efb6e24bcf660
services.protocol: HTTP
services.transport_protocol: TCP
services.scan_time: 2025-07-27T23:48:25.858118
services.banner: HTTP/1.1 200 OK
  content-type: text/html; charset=utf-8
  cache-control: public, max-age=600
  expires: Sun, 27 Jul 2025 23:58:26 GMT
  server: Rocket
  x-content-type-options: nosniff
  permissions-policy: accelerometer=(), ambient-light-sensor=(), autoplay=(), battery=(), camera=(), display-capture=(), document-domain=(), encrypted-media=(), execution-while-not-rendered=(), execution-while-out-of-viewport=(), fullscreen=(), geolocation=(), gyroscope=(), keyboard-map=(), magnetometer=(), microphone=(), midi=(), payment=(), picture-in-picture=(), screen-wake-lock=(), sync-xhr=(), usb=(), web-share=(), xr-spatial-tracking=()
  x-frame-options: SAMEORIGIN
  referrer-policy: same-origin
  x-xss-protection: 0
  content-security-policy: default-src 'self'; base-uri 'self'; form-action 'self'; object-src 'self' blob:; script-src 'self' 'wasm-unsafe-eval'; style-src 'self' 'unsafe-inline'; child-src 'self' https://*.duosecurity.com https://*.duofederal.com; frame-src 'self' https://*.duosecurity.com https://*.duofederal.com; frame-ancestors 'self' chrome-extension://nngceckbapebfimnlniiiahkandclblb chrome-extension://jbkfoedolllekgbhcbcoahefnbanhhlh moz-extension://* ; img-src 'self' data: https://haveibeenpwned.com ; connect-src 'self' https://api.pwnedpasswords.com https://api.2fa.directory https://app.simplelogin.io/api/ https://app.addy.io/api/ https://api.fastmail.com/ https://api.forwardemail.net ;
  content-length: 1241
  date:  <REDACTED>
  
services.source: OSI_APPLICATION_LAYER
services.part: a
services.vendor: Vaultwarden
services.product: Vaultwarden
services.cpe: cpe:2.3:a:vaultwarden:vaultwarden:*:*:*:*:*:*:*:*
services.path: /
services.endpoint_type: HTTP
services.scan_time: 2025-07-27T23:48:25.858118
services.uri: http://190.247.11.127:10380/
services.protocol: HTTP/1.1
services.status_reason: OK
services.key: expires
services.headers: Sun, 27 Jul 2025 23:58:26 GMT
services.key: server
services.headers: Rocket
services.key: permissions-policy
services.headers: accelerometer=(), ambient-light-sensor=(), autoplay=(), battery=(), camera=(), display-capture=(), document-domain=(), encrypted-media=(), execution-while-not-rendered=(), execution-while-out-of-viewport=(), fullscreen=(), geolocation=(), gyroscope=(), keyboard-map=(), magnetometer=(), microphone=(), midi=(), payment=(), picture-in-picture=(), screen-wake-lock=(), sync-xhr=(), usb=(), web-share=(), xr-spatial-tracking=()
services.key: x-xss-protection
services.headers: 0
services.key: cache-control
services.headers: public, max-age=600
services.key: content-security-policy
services.headers: default-src 'self'; base-uri 'self'; form-action 'self'; object-src 'self' blob:; script-src 'self' 'wasm-unsafe-eval'; style-src 'self' 'unsafe-inline'; child-src 'self' https://*.duosecurity.com https://*.duofederal.com; frame-src 'self' https://*.duosecurity.com https://*.duofederal.com; frame-ancestors 'self' chrome-extension://nngceckbapebfimnlniiiahkandclblb chrome-extension://jbkfoedolllekgbhcbcoahefnbanhhlh moz-extension://* ; img-src 'self' data: https://haveibeenpwned.com ; connect-src 'self' https://api.pwnedpasswords.com https://api.2fa.directory https://app.simplelogin.io/api/ https://app.addy.io/api/ https://api.fastmail.com/ https://api.forwardemail.net ;
services.key: content-length
services.headers: 1241
services.key: referrer-policy
services.headers: same-origin
services.key: date
services.headers: <REDACTED>
services.key: content-type
services.headers: text/html; charset=utf-8
services.key: x-frame-options
services.headers: SAMEORIGIN
services.key: x-content-type-options
services.headers: nosniff
services.html_tags: <title page-title>Vaultwarden Web</title> <meta charset="utf-8"/> <meta name="viewport" content="width=1010"/> <meta name="theme-color" content="#175DDC"/>
services.body: <!doctype html><html class="theme_light"><head><meta charset="utf-8"/><meta name="viewport" content="width=1010"/><meta name="theme-color" content="#175DDC"/><title page-title>Vaultwarden Web</title><link rel="apple-touch-icon" sizes="180x180" href="images/apple-touch-icon.png"/><link rel="icon" type="image/png" sizes="32x32" href="images/favicon-32x32.png"/><link rel="icon" type="image/png" sizes="16x16" href="images/favicon-16x16.png"/><link rel="mask-icon" href="images/safari-pinned-tab.svg" color="#175DDC"/><link rel="manifest" href="cca56971e438d22818d6.json"/><script defer="defer" src="theme_head.1df11f603fda400762b7.js"></script><link href="app/main.a5d3a3a9125fcf07f286.css" rel="stylesheet"></head><body class="layout_frontend"><app-root><div class="mt-5 d-flex justify-content-center"><div><img class="mb-4 logo logo-themed" alt="Vaultwarden logo"/><p class="text-center"><i class="bwi bwi-spinner bwi-spin bwi-2x text-muted" title="Loading" aria-hidden="true"></i></p></div></div></app-root><script defer="defer" src="app/polyfills.4275a7f2798b637a6613.js"></script><script defer="defer" src="app/vendor.351bf938ddfd5e202e99.js"></script><script defer="defer" src="app/main.b193f247301cc37bf60b.js"></script></body></html>
services.name: http://190.247.11.127:10380/images/apple-touch-icon.png
services.name: http://190.247.11.127:10380/images/favicon-32x32.png
services.name: http://190.247.11.127:10380/images/favicon-16x16.png
services.name: http://190.247.11.127:10380/favicon.ico
services.body_hash_sha1: sha1:44cbaed036f1b95e827a26bca0483a7bb2d00aea
services.supported_versions: HTTP/1.1 HTTP/2
services.protocol: HTTP
services.transport_protocol: TCP
services.scan_time: 2025-07-27T23:48:30.308192
services.banner: HTTP/1.1 200 OK
  Connection: close
  Server: Netdata Embedded HTTP Server v2.5.4
  Access-Control-Allow-Origin: *
  Access-Control-Allow-Credentials: true
  Date:  <REDACTED>
  Content-Type: text/html; charset=utf-8
  Cache-Control: public
  Expires: Mon, 28 Jul 2025 23:48:30 GMT
  Content-Encoding: gzip
  Transfer-Encoding: chunked
  X-Transaction-ID: 43e735fee9224a0aba5f65dde66bf0f2
  
services.source: OSI_APPLICATION_LAYER
services.part: a
services.vendor: NetData
services.product: NetData
services.version: 2.5.4
services.cpe: cpe:2.3:a:netdata:netdata:2.5.4:*:*:*:*:*:*:*
services.value: google-tag-manager
services.path: /
services.endpoint_type: HTTP
services.scan_time: 2025-07-27T23:48:30.308192
services.uri: http://190.247.11.127:19999/
services.protocol: HTTP/1.1
services.status_reason: OK
services.key: Access-Control-Allow-Origin
services.headers: *
services.key: Transfer-Encoding
services.headers: chunked
services.key: Server
services.headers: Netdata Embedded HTTP Server v2.5.4
services.key: Access-Control-Allow-Credentials
services.headers: true
services.key: Expires
services.headers: Mon, 28 Jul 2025 23:48:30 GMT
services.key: Cache-Control
services.headers: public
services.key: Date
services.headers: <REDACTED>
services.key: Content-Encoding
services.headers: gzip
services.key: Connection
services.headers: close
services.key: Content-Type
services.headers: text/html; charset=utf-8
services.key: X-Transaction-ID
services.headers: 43e735fee9224a0aba5f65dde66bf0f2
services.html_tags: <title>Netdata</title> <meta charset="utf-8"/>
services.body: <!doctype html><html lang="en" dir="ltr"><head><meta charset="utf-8"/><title>Netdata</title><script>const CONFIG = {
        cache: {
          agentInfo: false,
          cloudToken: true,
          agentToken: true,
        }
      }
  
      // STATE MANAGEMENT ======================================================================== //
      const state = {
        loading: {
          spaces: false,
          rooms: false,
          claimingToken: false,
          claimingAgent: false
        },
        claim: {
          status: {},
          response: {},
          shouldClaim: false,
          step: 1,
          selectedSpaceIds: [],
          selectedRoomIds: [],
          privateKey: ""
        },
        cache: {
          spaces: undefined,
          rooms: {},
          claimingTokensPerSpace: {}
        }
      }
  
      const getSelectedRooms = state => {
        const spaceId = state.claim.selectedSpaceIds.length ? state.claim.selectedSpaceIds[0] : null;
        if (!spaceId) return [];
        if (state.claim.selectedRoomIds.length) {
          return state.cache?.rooms?.[spaceId]?.filter(({ id }) => state.claim.selectedRoomIds.includes(id)) || [];
        }
        return [];
      }
  
      const syncUI = () => {
        // Elements
        const splashMessage = document.getElementById("splashMessageContainer");
        const claiming = document.getElementById("claimingContentsContainer");
        const step1 = document.getElementById("connectionStep-1");
        const step2 = document.getElementById("connectionStep-2");
        const btnPrev = document.getElementById("btnConnectionStepPrev");
        const btnNext = document.getElementById("btnConnectionStepNext");
        const btnClaim = document.getElementById("btnClaim");
        const roomsSelector = document.getElementById("roomsSelector");
        const claimErrorMessage = document.getElementById("claimErrorMessage");
  
        // State
        const { spaces: spacesLoading, rooms: roomsLoading, claimingToken: claimingTokenLoading, claimingAgent: claimingAgentLoading } = state.loading;
        const { shouldClaim, step, selectedSpaceIds, selectedRoomIds, privateKey } = state.claim;
        const claimingTokenExists = state.claim.selectedSpaceIds.length ? !!state.cache.claimingTokensPerSpace[state.claim.selectedSpaceIds[0]] : false;
  
        splashMessage.style.display = !shouldClaim ? "initial" : "none";
        claiming.style.display = shouldClaim ? "initial" : "none";
  
        // Loading spaces
        if (step1) {
          const spacesLoader = step1.querySelector(".loader");
          if (spacesLoader) {
            spacesLoader.style.display = spacesLoading ? "initial" : "none";
          }
        }
  
        // Loading rooms
        if (roomsSelector) {
          const message = roomsSelector.querySelector(".selected-items");
          const selectedRoomNames = getSelectedRooms(state).map(({ name }) => name).join(", ");
          if (message) {
            message.innerText = roomsLoading ? "Loading rooms..." : (selectedRoomNames || "Select room");
          }
        }
  
        // Steps visibility
        step1.style.display = step == 1 ? "initial" : "none";
        step2.style.display = step == 2 ? "initial" : "none";
  
        // Rooms
        if (step == 1) {
          // Reset rooms
          const checkboxes = document.getElementById("roomsSelectorOptionsContainer").querySelectorAll('input[type="checkbox"]');
          checkboxes.forEach((checkbox) => {
            if (checkbox.checked) {
              checkbox.checked = false;
              checkbox.dispatchEvent(new Event("change"));
            }
          });
        }
  
        if (claimErrorMessage) {
          claimErrorMessage.style.display = state.claim?.response?.error ? "initial" : "none";
          claimErrorMessage.innerText = state.claim?.response?.error ? state.claim.response.error : "";
        }
  
        // Footer
        btnPrev.style.opacity = step == 1 ? "0" : "1";
        btnPrev.style.cursor = step == 1 ? "default" : "pointer";
        btnPrev.disabled = step == 1;
        btnNext.style.display = step == 1 ? "initial" : "none";
        btnNext.disabled = !selectedSpaceIds.length;
        btnClaim.style.display = step == 2 ? "initial" : "none";
        btnClaim.disabled = !selectedRoomIds.length || !privateKey || !claimingTokenExists || claimingTokenLoading || claimingAgentLoading;
        btnClaim.textContent = claimingAgentLoading ? "Claiming..." : "Claim";
  
        return Promise.resolve();
      }
  
      const toggleSpacesLoadingState = isLoading => {
        state.loading = { ...state.loading, spaces: isLoading };
        return syncUI();
      }
  
      const toggleRoomsLoadingState = isLoading => {
        state.loading = { ...state.loading, rooms: isLoading };
        return syncUI();
      }
  
      const toggleClaimingTokenLoadingState = isLoading => {
        state.loading = { ...state.loading, claimingToken: isLoading };
        return syncUI();
      }
  
      const toggleClaimingAgentLoadingState = isLoading => {
        state.loading = { ...state.loading, claimingAgent: isLoading };
        return syncUI();
      }
  
      const setShouldClaimStatus = shouldClaim => {
        state.claim = { ...state.claim, shouldClaim };
        return syncUI();
      }
  
      const setClaimStatusState = status => {
        state.claim = { ...state.claim, status };
        return syncUI();
      }
  
      const setClaimResponseState = response => {
        state.claim = { ...state.claim, response };
        return syncUI();
      }
  
      const setClaimingStep = async arg => {
        const nextStep = typeof arg == "function" ? arg(state.claim.step) : arg;
        state.claim = { ...state.claim, step: nextStep, ...(nextStep == 1 ? { selectedRoomIds: [], privateKey: "" } : {}) };
        await syncUI();
        return Promise.resolve(nextStep);
      }
  
      const setSelectedSpacesStatus = arg => {
        const spaceIds = typeof arg == "function" ? arg(state.claim.selectedSpaceIds) : Array.isArray(arg) ? arg : [arg];
        state.claim = { ...state.claim, selectedSpaceIds: spaceIds, selectedRoomIds: [], privateKey: "" };
        return syncUI();
      }
  
      const setSelectedRoomsStatus = arg => {
        const roomIds = typeof arg == "function" ? arg(state.claim.selectedRoomIds) : Array.isArray(arg) ? arg : [arg];
        state.claim = { ...state.claim, selectedRoomIds: roomIds };
        return syncUI();
      }
  
      const setClaimingPrivateKeyState = (value = "") => {
        state.claim = { ...state.claim, privateKey: value };
        return syncUI();
      }
  
      const cacheSpaces = (spaces) => {
        if (!spaces) return Promise.resolve([]);
        state.cache.spaces = spaces;
        return Promise.resolve(spaces);
      }
  
      const cacheRooms = (spaceId, rooms) => {
        if (!spaceId) return Promise.resolve([]);
        state.cache.rooms = { ...state.cache.rooms, [spaceId]: rooms };
        return Promise.resolve(rooms);
      }
  
      const cacheClaimingToken = (spaceId, token) => {
        if (!spaceId || !token) return Promise.resolve();
        state.cache.claimingTokensPerSpace = { ...state.cache.claimingTokensPerSpace, [spaceId]: token };
        return Promise.resolve(token);
      }
  
      // ========================================================================================= //
  
      const pathsRegex = /\/(spaces|nodes|overview|alerts|dashboards|anomalies|events|cloud|v3)\/?.*/;
      function getBasename() {
        return window.location.origin + window.location.pathname.replace(pathsRegex, "")
      }
  
      let goToOld = function(path) {
        let goToUrl = getBasename() + path;
        if (path !== "/v3") {
          let pathsRegex = /(\/(spaces|nodes|overview|alerts|dashboards|anomalies|events|cloud|v3)\/?.*)/
          if (pathsRegex.test(window.location.origin + window.location.pathname)) {
            goToUrl = (window.location.origin + window.location.pathname).replace(pathsRegex, "/v3$1")
          }
        }
        window.location.replace(ensureOneSlash(goToUrl + window.location.search))
      }
  
      const searchParams = new URLSearchParams(location.search);
      window.envSettings = {
        isAgent: true,
        apiUrl: "https://app.netdata.cloud",
        cloudUrl: "https://app.netdata.cloud",
        demoSlug: "netdata-demo",
        demoFavourites: {"postgresql":["Applications-0_Postgres-1"],"redis":["Applications-0_Redis-1"],"dns-query":["Applications-0_CoreDNS-1"],"http-endpoints":["Applications-0_HTTP_Checks-1"],"nginx":["Applications-0_web_log-1","Applications-0_Nginx-1"],"apache":["Applications-0_Apache-1"],"host-reachability":["Synthetic_Checks-0"],"cassandra":["Applications-0_Cassandra-1"],"coredns":["Applications-0_CoreDNS-1"],"logind":["Applications-0_systemd_LoginD-1"],"iis":["Applications-0_MS_IIS-1"],"active-directory":["Applications-0_MS_Active_Directory-1"],"windows":["Applications-0_Windows-1","Applications-0_MS_Active_Directory-1","Applications-0_MS_IIS-1","Applications-0_MS_SQL-1","Applications-0_MS_Exchange-1","Applications-0__NET_Framework-1"],"docker":["Containers___VMs-0"],"ups":["Hardware___Sensors-0_NUT_UPS-1"]},
        webpackPublicPath: "https://app.netdata.cloud" || (getBasename() + "/v3"),
        agentApiUrl: searchParams.get("agent") || getBasename(),
        posthogToken: "phc_hnhlqe6D2Q4IcQNrFItaqdXJAxQ8RcHkPAFAp74pubv",
        version: "7.57.8",
        tracking: !false,
        cookieDomain: ".netdata.cloud",
        onprem: false,
        isLocal: false,
        nodeEnv: "production"
      }
  
      const getHashValueByKey = key => {
        return location.hash.substr(1).split("&").find(pair => pair.split("=")[0] == key)?.split("=")[1]
      }
  
      // Check cloud token
      const CLOUD_TOKEN_KEY = "netdataJWT"
      const redirectUri = getHashValueByKey("redirect_uri")
      const token = getHashValueByKey("token")
      if (token) {
        localStorage.setItem(CLOUD_TOKEN_KEY, token)
      }
      if (redirectUri) {
        try {
          const decodedUrl = decodeURIComponent(redirectUri)
          const parsedUrl = new URL(decodedUrl, window.location.origin)
  
          if (parsedUrl.origin === window.location.origin) {
            window.location.href = parsedUrl.href
          } else {
            console.error("Blocked potentially unsafe redirect to: ", decodedUrl)
          }
        } catch (error) {
          console.error("Invalid URL detected: ", error.message)
        }
      }</script><style>body.netdata-splash {
        height: 100%;
        overflow: hidden;
        background: var(--main-bg);
        margin: 0;
        padding: 0;
        color: var(--text);
        font-family: system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif,
          "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
      }
  
      :root {
        --scrollbar-thumb: #fcfffd;
        --primary: #00ab44;
        --text: #93a4a4;
        --text-dark: #001107;
        --text-light: #fcfffd;
        --menu-item: #5b6c6c;
        --main-bg: #000;
        --highlight: #00ef5f;
        --tab-active: #ddffeb;
        --tab-hover: #d2d9d9;
        --panel-bg: transparent;
        --font-small: 14px;
        --font-medium: 16px;
        --row-2n: #101313;
        --border: #00ab4436;
        --border-neutral: #252c2c;
        --key-value-table: #93a4a4;
        --accent: #ddffeb;
        --module-height: 45vh;
        --list-option-bg: rgba(12, 15, 15, 0.5);
        --list-option-selected-bg: #000;
        --list-option-hover-bg: rgba(12, 15, 15, 1);
        --footer-height: 70px;
        --code-bg: #00220e;
        --progress-bar-height: 2px;
        background-color: var(--main-bg);
      }
  
      :root iframe {
        border-width: 0;
      }
  
      body.netdata-splash.loading .frame-right {
        display: none;
      }
  
      body.netdata-splash.loading .frame-left {
        grid-column: auto / span 12;
      }
  
      body.netdata-splash.loading .sphere-stats-container,
      body.netdata-splash.loading .head-summary,
      body.netdata-splash.loading .tabs {
        display: none;
      }
  
      body.netdata-splash.loading .loading-message {
        display: flex;
        position: absolute;
        inset: 0;
        margin: auto;
        align-items: center;
        justify-content: center;
        color: var(--accent);
      }
  
      body.netdata-splash .error {
        color: #DB162F;
      }
  
      body.netdata-splash .loading-message {
        display: none;
      }
  
      body.netdata-splash h1 {
        font-size: 36px;
        margin-top: 8px;
        margin-bottom: 8px;
        color: var(--text-light);
        filter: blur(0.6px);
      }
  
      body.netdata-splash h2 {
        font-size: 16px;
      }
  
      body.netdata-splash h4 {
        font-size: 12px;
        margin-bottom: 12px;
        margin-top: 8px;
      }
  
      body.netdata-splash a:link,
      body.netdata-splash a:visited,
      body.netdata-splash a:active {
        text-decoration: none;
        color: var(--primary);
      }
  
      body.netdata-splash a:hover {
        color: var(--highlight);
      }
  
      body.netdata-splash canvas {
        display: block;
      }
  
      body.netdata-splash code {
        background: var(--code-bg);
        color: var(--highlight);
        border: 1px solid var(--border);
        border-radius: 2px;
        padding: 12px;
        line-break: anywhere;
        word-break: break-all;
      }
  
      body.netdata-splash .text-small {
        font-size: 12px;
      }
  
      body.netdata-splash .logo {
        filter: drop-shadow(2px 2px 32px rgba(255, 255, 255, 0.7)) blur(1px);
        opacity: 0.9;
        width: 150px;
        height: 150px;
      }
  
      body.netdata-splash .claim-message .logo {
        width: 100px;
        height: 100px;
      }
  
      body.netdata-splash .grid {
        display: grid;
        grid-column-gap: 16px;
        grid-row-gap: 16px;
        grid-template-columns: repeat(12, 1fr);
        grid-template-rows: repeat(12, 1fr);
        grid-auto-rows: min-content;
      }
  
      body.netdata-splash .grid-columns-10 {
        display: grid;
        grid-column-gap: 16px;
        grid-row-gap: 16px;
        grid-template-columns: repeat(10, 1fr);
      }
  
      body.netdata-splash .col-span-1 {
        grid-column: auto / span 1;
      }
  
      body.netdata-splash .col-span-2 {
        grid-column: auto / span 2;
      }
  
      body.netdata-splash .col-span-3 {
        grid-column: auto / span 3;
      }
  
      body.netdata-splash .col-span-4 {
        grid-column: auto / span 4;
      }
  
      body.netdata-splash .col-span-5 {
        grid-column: auto / span 5;
      }
  
      body.netdata-splash .col-span-6 {
        grid-column: auto / span 6;
      }
  
      body.netdata-splash .col-span-7 {
        grid-column: auto / span 7;
      }
  
      body.netdata-splash .col-span-8 {
        grid-column: auto / span 8;
      }
  
      body.netdata-splash .col-span-9 {
        grid-column: auto / span 9;
      }
  
      body.netdata-splash .col-span-10 {
        grid-column: auto / span 10;
      }
  
      body.netdata-splash .col-span-11 {
        grid-column: auto / span 11;
      }
  
      body.netdata-splash .col-span-12 {
        grid-column: auto / span 12;
      }
  
      body.netdata-splash .col-start-1 {
        grid-column-start: 1;
      }
  
      body.netdata-splash .col-start-2 {
        grid-column-start: 2;
      }
  
      body.netdata-splash .col-start-3 {
        grid-column-start: 3;
      }
  
      body.netdata-splash .col-start-4 {
        grid-column-start: 4;
      }
  
      body.netdata-splash .col-start-5 {
        grid-column-start: 5;
      }
  
      body.netdata-splash .col-start-6 {
        grid-column-start: 6;
      }
  
      body.netdata-splash .col-start-7 {
        grid-column-start: 7;
      }
  
      body.netdata-splash .col-start-8 {
        grid-column-start: 8;
      }
  
      body.netdata-splash .col-start-9 {
        grid-column-start: 9;
      }
  
      body.netdata-splash .col-start-10 {
        grid-column-start: 10;
      }
  
      body.netdata-splash .col-start-12 {
        grid-column-start: 11;
      }
  
      body.netdata-splash .col-start-12 {
        grid-column-start: 12;
      }
  
      @media screen and (max-width: 1280px) {
        body.netdata-splash .md-grid-columns-12 {
          display: grid;
          grid-column-gap: 16px;
          grid-row-gap: 16px;
          grid-template-columns: repeat(12, 1fr);
        }
  
        body.netdata-splash .md-col-span-1 {
          grid-column: auto / span 1;
        }
  
        body.netdata-splash .md-col-span-2 {
          grid-column: auto / span 2;
        }
  
        body.netdata-splash .md-col-span-3 {
          grid-column: auto / span 3;
        }
  
        body.netdata-splash .md-col-span-4 {
          grid-column: auto / span 4;
        }
  
        body.netdata-splash .md-col-span-5 {
          grid-column: auto / span 5;
        }
  
        body.netdata-splash .md-col-span-6 {
          grid-column: auto / span 6;
        }
  
        body.netdata-splash .md-col-span-7 {
          grid-column: auto / span 7;
        }
  
        body.netdata-splash .md-col-span-8 {
          grid-column: auto / span 8;
        }
  
        body.netdata-splash .md-col-span-9 {
          grid-column: auto / span 9;
        }
  
        body.netdata-splash .md-col-span-10 {
          grid-column: auto / span 10;
        }
  
        body.netdata-splash .md-col-span-11 {
          grid-column: auto / span 11;
        }
  
        body.netdata-splash .md-col-span-12 {
          grid-column: auto / span 12;
        }
      }
  
      body.netdata-splash .row-span-1 {
        grid-row: auto / span 1;
      }
  
      body.netdata-splash .row-span-2 {
        grid-row: auto / span 2;
      }
  
      body.netdata-splash .row-span-3 {
        grid-row: auto / span 3;
      }
  
      body.netdata-splash .row-span-4 {
        grid-row: auto / span 4;
      }
  
      body.netdata-splash .row-span-5 {
        grid-row: auto / span 5;
      }
  
      body.netdata-splash .row-span-6 {
        grid-row: auto / span 6;
      }
  
      body.netdata-splash .row-span-7 {
        grid-row: auto / span 7;
      }
  
      body.netdata-splash .row-span-8 {
        grid-row: auto / span 8;
      }
  
      body.netdata-splash .row-span-9 {
        grid-row: auto / span 9;
      }
  
      body.netdata-splash .row-span-10 {
        grid-row: auto / span 10;
      }
  
      body.netdata-splash .row-span-11 {
        grid-row: auto / span 11;
      }
  
      body.netdata-splash .row-span-12 {
        grid-row: auto / span 12;
      }
  
      body.netdata-splash .relative {
        position: relative;
      }
  
      body.netdata-splash .absolute {
        position: absolute;
      }
  
      body.netdata-splash .index-10 {
        z-index: 10;
      }
  
      body.netdata-splash .m-auto {
        margin: auto;
      }
  
      body.netdata-splash .full-h {
        height: 100%;
      }
  
      body.netdata-splash .flex {
        display: flex;
      }
  
      body.netdata-splash .flex-col {
        flex-direction: column;
      }
  
      body.netdata-splash .space-between {
        justify-content: space-between;
      }
  
      body.netdata-splash .align-center {
        align-items: center;
      }
  
      body.netdata-splash .container {
        background: var(--main-bg);
        height: 100vh;
        column-gap: 0;
      }
  
      body.netdata-splash .frame {
        height: 100vh;
      }
  
      body.netdata-splash .light-beam:after {
        content: "";
        position: absolute;
        top: 0;
        bottom: 0;
        left: 0;
        width: 1px;
        box-shadow: 20px 0px 110px 55px rgb(0 255 100 / 10%);
      }
  
      body.netdata-splash #setupGrid {
        opacity: 0.15;
        position: absolute;
        inset: 0;
      }
  
      body.netdata-splash #monitorGrid {
        opacity: 0.4;
        transition: 1s ease;
      }
  
      body.netdata-splash #monitorGrid.hovered {
        opacity: 0.7;
      }
  
      body.netdata-splash #sphereContainer {
        height: calc(100vh);
        position: relative;
      }
  
      body.netdata-splash #sphereContainer h4 {
        display: none;
      }
  
      body.netdata-splash .setup {
        z-index: 10;
        position: relative;
        box-shadow: 20px 0px 160px 5px #012f13c2;
        background: linear-gradient(90deg,
            rgba(0, 0, 0, 1) 0%,
            rgb(0 19 7 / 76%) 100%);
      }
  
      body.netdata-splash .setup>.stats {
        padding: 16px;
        overflow: auto;
        height: 100%;
        position: absolute;
        top: 65px;
        left: 0;
        right: 0;
        bottom: 0;
      }
  
      body.netdata-splash .setup .header {
        position: sticky;
        top: 0;
        padding: 8px 16px;
        margin: 0;
        backdrop-filter: blur(8px);
        background: rgba(0, 0, 0, 0.1);
        /* border-bottom: 1px solid var(--border); */
        display: flex;
        align-items: center;
        justify-content: space-between;
      }
  
      body.netdata-splash .header .title {
        display: flex;
        align-items: center;
        gap: 8px;
      }
  
      body.netdata-splash .header .logo {
        width: 32px;
        height: auto;
      }
  
      body.netdata-splash .splash-message {
        position: absolute;
        inset: 0;
        margin: auto;
        display: flex;
        align-items: center;
        justify-content: center;
        flex-direction: column;
        overflow-y: auto;
      }
  
      body.netdata-splash .splash-message p {
        margin-top: 0;
        margin-bottom: 24px;
        color: var(--text-light);
        filter: blur(0.6px);
      }
  
      body.netdata-splash .tagline {
        position: absolute;
        bottom: 24px;
        font-size: 12px;
        color: var(--text-light);
      }
  
      body.netdata-splash .skip-link {
        font-size: 12px;
        color: var(--text-light);
        text-align: center;
      }
  
      body.netdata-splash .license-link {
        padding: 0 16px 4px;
        font-size: 12px;
        color: var(--text-light);
      }
  
      body.netdata-splash .button {
        padding: 8px 12px;
        border-radius: 2px;
        font-size: 16px;
        min-width: 88px;
        text-align: center;
        cursor: pointer;
        transition: 250ms ease;
        border: none;
      }
  
      body.netdata-splash .button-primary {
        background: var(--primary);
        color: var(--text-light);
      }
  
      body.netdata-splash .button-primary:hover {
        background: var(--highlight);
      }
  
      body.netdata-splash a.button {
        color: var(--text-dark);
      }
  
      body.netdata-splash .button-ghost {
        background: transparent;
        color: var(--primary);
      }
  
      body.netdata-splash .button-ghost:hover {
        color: var(--highlight);
      }
  
      body.netdata-splash .clear-button {
        font-size: 12px;
        padding: 0;
        min-width: auto;
      }
  
      body.netdata-splash .tabs {
        display: flex;
        align-items: center;
        justify-content: center;
        border-top: 1px solid var(--border);
        backdrop-filter: blur(4px);
      }
  
      body.netdata-splash button.tab {
        background: rgba(0, 0, 0, 0.2);
        border: none;
        color: var(--menu-item);
        padding: 8px 0 24px;
        border-left: 0;
        cursor: pointer;
        backdrop-filter: blur(2px);
        width: 100%;
        font-size: 12px;
        display: flex;
        flex-direction: column;
        align-items: center;
        gap: 8px;
      }
  
      body.netdata-splash button.tab:first-child {
        /* border-left: 1px solid var(--primary); */
      }
  
      body.netdata-splash button.tab:not(.active):hover {
        color: var(--tab-hover);
        transition: 100ms ease;
      }
  
      body.netdata-splash button.tab.active {
        background: transparent;
        /* border-bottom: 1px solid transparent; */
        backdrop-filter: blur(0);
        color: var(--tab-active);
        cursor: default;
      }
  
      body.netdata-splash .tab-icon {
        width: 24px;
        height: 24px;
      }
  
      body.netdata-splash .tab-icon svg {
        height: 100%;
        width: 100%;
      }
  
      body.netdata-splash .tab-icon svg path {
        fill: var(--menu-item);
        transition: 100ms ease;
      }
  
      body.netdata-splash .tab.active .tab-icon svg path {
        fill: var(--tab-active);
      }
  
      button.tab:not(.active):hover svg path {
        fill: var(--tab-hover);
      }
  
      body.netdata-splash .panel {
        background: var(--panel-bg);
        padding: 16px;
        border-radius: 4px;
        border: 1px solid var(--border);
        backdrop-filter: blur(0px);
      }
  
      body.netdata-splash .panel-tab {
        border-radius: 0 0 4px 4px;
        border-top: 0;
        border-left: 1px solid var(--primary);
        border-bottom: 1px solid var(--primary);
        border-right: 1px solid var(--primary);
        padding: 4px 24px;
        display: none;
        height: 70%;
        overflow: auto;
      }
  
      body.netdata-splash .data-tab {
        display: block;
        opacity: 0;
        transition: 800ms ease;
        pointer-events: none;
      }
  
      body.netdata-splash .data-tab.active {
        opacity: 1;
        pointer-events: all;
      }
  
      body.netdata-splash .data-tab-container {
        position: absolute;
        left: 0;
        right: 0;
        top: 45%;
        /* height: 40vh; */
      }
  
      body.netdata-splash .system-container {
        overflow: auto;
        height: calc(100% - 330px);
        padding: 0 24px 24px;
        margin: 0 -24px;
        scrollbar-color: var(--scrollbar-thumb) #293030;
        scrollbar-width: thin;
      }
  
      body.netdata-splash .data-tab-container .system>div {
        display: flex;
        /* margin-bottom: 24px; */
        /* backdrop-filter: blur(1px); */
        height: auto;
        min-height: 40px;
        overflow: hidden;
      }
  
      body.netdata-splash .data-tab-container .system .key-value {
        flex-direction: column;
        gap: 8px;
        align-items: flex-start;
        justify-content: start;
        width: 100%;
        padding: 0;
      }
  
      body.netdata-splash .data-tab-container .system .key-value span:nth-child(1) {
        padding: 8px 16px;
        border-bottom: 1px solid var(--border);
        width: 100%;
        color: #8eae9b;
        background: rgba(0, 0, 0, 0.8);
      }
  
      body.netdata-splash .data-tab-container .system .key-value span:nth-child(2) {
        /* font-size: 16px; */
        padding: 4px 16px 12px;
        text-align: left;
        color: var(--accent);
      }
  
      body.netdata-splash .panel:hover h4 {
        color: var(--highlight);
      }
  
      body.netdata-splash .hide-title h4 {
        visibility: hidden;
      }
  
      body.netdata-splash .no-key span:first-child {
        display: none;
      }
  
      body.netdata-splash .no-title h4 {
        display: none;
      }
  
      body.netdata-splash .absolute-center {
        position: absolute;
        inset: 0;
        margin: auto;
      }
  
      body.netdata-splash .align-end {
        align-content: flex-end;
      }
  
      body.netdata-splash .panel-tab .separator {
        border-bottom: 1px solid var(--border);
        margin: 8px -24px;
      }
  
      body.netdata-splash .section-image {
        height: 16px;
        width: 16px;
      }
  
      body.netdata-splash .section-image svg {
        width: 100%;
        height: 100%;
      }
  
      body.netdata-splash .section-title {
        font-size: 14px;
        font-weight: bold;
        margin: 8px 0;
        display: inline-block;
      }
  
      body.netdata-splash .sphere-stats-container {
        width: 80%;
        height: 100vh;
        display: flex;
        align-items: center;
        flex-direction: column;
        justify-content: center;
        margin-bottom: 10vmin;
        gap: 16px;
      }
  
      body.netdata-splash .key-value {
        font-size: var(--font-small);
        display: flex;
        justify-content: space-between;
        align-items: center;
        padding: 8px 0;
        color: var(--key-value-table);
      }
  
      /* .key-value:nth-child(2n) {
        background: var(--row-2n);
      } */
      body.netdata-splash .key-value:hover {
        color: var(--highlight);
      }
  
      body.netdata-splash .key-value span:nth-child(2) {
        text-align: right;
      }
  
      body.netdata-splash .metrics-container {
        position: absolute;
        top: 150px;
      }
  
      body.netdata-splash .collected-metrics .key-value {
        flex-direction: column;
        align-items: center;
        justify-content: center;
        background: none;
        text-align: center;
        text-transform: uppercase;
        font-size: 12px;
        color: var(--text);
      }
  
      body.netdata-splash .collected-metrics .key-value span:nth-child(2) {
        font-size: 7vmin;
        font-weight: 700;
        color: rgb(254 254 254 / 80%);
        filter: blur(0.8px);
        text-align: center;
      }
  
      #server .key-value span:first-child,
      #package .key-value span:first-child {
        display: none;
      }
  
      #server .key-value span:nth-child(2),
      #package .key-value span:nth-child(2) {
        font-size: 12px;
        color: var(--primary);
        font-family: monospace;
      }
  
      body.netdata-splash .head-summary {
        left: 0;
        padding: 16px;
        right: 0;
        display: flex;
        flex-direction: row;
        justify-content: space-between;
      }
  
      body.netdata-splash .module {
        border: 2px solid var(--border);
        border-radius: 16px;
        box-shadow: -1px 1px var(--main-bg), -2px 2px var(--main-bg),
          -3px 3px var(--border), -4px 4px 24px var(--border);
        height: var(--module-height);
        overflow: auto;
        scrollbar-color: var(--scrollbar-thumb) #293030;
        scrollbar-width: thin;
        /* backdrop-filter: blur(2px); */
      }
  
      body.netdata-splash .module-header {
        display: flex;
        align-items: center;
        gap: 4px;
        padding: 4px 16px;
        background: rgba(0, 0, 0, 0.8);
        border-radius: 16px 16px 0 0;
        color: #8eae9b;
        border-bottom: 1px solid var(--border);
        position: sticky;
        top: 0;
      }
  
      body.netdata-splash .module-header svg path {
        fill: var(--accent);
      }
  
      body.netdata-splash .modules-container {
        max-height: 100%;
        text-align: center;
        margin: auto;
        column-gap: 24px;
      }
  
      body.netdata-splash .module-content {
        padding: 4px 16px;
      }
  
      body.netdata-splash .db-metrics-container {
        display: flex;
        justify-content: center;
        gap: 16px;
      }
  
      body.netdata-splash .db-metrics-blocks {
        /* display: flex; */
        /* flex-direction: column; */
        /* align-items: center;
        justify-content: center;
        gap: 24px; */
        height: var(--module-height);
        width: 100%;
      }
  
      /* .db-metrics-block {
        display: flex;
        flex-direction: column;
        text-align: center;
        min-width: 15vmax;
        height: 150px;
        padding: 0 24px;
      } */
      body.netdata-splash .db-metrics-blocks .module-content {
        padding: 0;
      }
  
      /* .db-metrics-block:not(:last-child) {
        border-right: 1px solid var(--border);
      } */
      body.netdata-splash .db-metrics-title {
        font-size: 1.5vmin;
      }
  
      body.netdata-splash .db-metrics-block-title {
        font-size: 14px;
        padding: 8px 16px;
        z-index: 100;
        font-weight: bold;
        color: #fff;
      }
  
      body.netdata-splash .db-metrics .key-value {
        display: flex;
        flex-direction: column;
        align-items: flex-start;
      }
  
      body.netdata-splash .db-metrics .key-value span:nth-child(2) {
        font-size: 12px;
        color: var(--accent);
        filter: blur(0.5px);
        text-align: center;
      }
  
      body.netdata-splash .db-metrics {
        padding: 8px 16px;
        border-bottom: 1px solid var(--border);
      }
  
      body.netdata-splash .disk-stats {
        /* border-bottom: 0; */
        padding: 16px;
      }
  
      body.netdata-splash .module-content:last-child .disk-stats {
        padding-bottom: 112px;
      }
  
      body.netdata-splash .disk-max .key-value {
        flex-direction: row;
        font-size: 12px;
        justify-content: space-between;
        padding: 2px 0;
      }
  
      body.netdata-splash .disk-max .key-value span:nth-child(2) {
        font-size: 12px;
        display: flex;
        justify-content: space-between;
        width: 100%;
      }
  
      body.netdata-splash .disk-used .key-value {
        padding: 2px 0;
      }
  
      body.netdata-splash .disk-max .key-value span:nth-child(2):before {
        content: "Disk Size";
      }
  
      body.netdata-splash .disk-used .key-value span:nth-child(2):before {
        content: "Used ";
      }
  
      body.netdata-splash .disk-used .key-value span:nth-child(2) {
        font-size: 12px;
        display: flex;
        justify-content: space-between;
        width: 100%;
      }
  
      body.netdata-splash .db-metrics .key-value span:first-child {
        font-size: 12px;
        color: var(--text);
      }
  
      body.netdata-splash .percentage-container {
        width: 100%;
        background: transparent;
        border: 1px solid var(--primary);
        height: 16px;
        border-radius: 1px;
        position: relative;
      }
  
      body.netdata-splash .percentage-bar {
        background: #016a2b94;
        position: absolute;
        bottom: 0;
        top: 0;
        left: 0;
        backdrop-filter: blur(1px);
      }
  
      body.netdata-splash .percentage-text {
        position: absolute;
        font-size: 12px;
        top: 0;
        padding: 0 2px;
        color: var(--accent);
      }
  
      body.netdata-splash .data-tab-table {
        padding: 16px;
        width: 400px;
        height: var(--module-height);
        margin: auto;
      }
  
      body.netdata-splash .node-info-container {
        display: flex;
        flex-direction: column;
        width: 100%;
        justify-content: center;
        align-items: center;
        gap: 8px;
      }
  
      body.netdata-splash .node-info {
        display: flex;
        justify-content: center;
        width: 100%;
        gap: 8px;
        flex-direction: row;
      }
  
      body.netdata-splash .node-info-container .title {
        font-size: 12px;
      }
  
      body.netdata-splash .node-info .key-value {
        border: 1px solid var(--highlight);
        padding: 2px 8px;
        border-radius: 4px;
        font-size: 12px;
        color: var(--highlight);
        height: 20px;
      }
  
      body.netdata-splash .node-info .key-value span:first-child {
        margin-right: 4px;
        font-weight: normal;
      }
  
      body.netdata-splash .availability {
        text-align: right;
        font-family: monospace;
        display: flex;
        flex-direction: column;
        text-transform: capitalize;
        padding: 8px 16px;
        color: #fff;
        font-size: 12px;
      }
  
      body.netdata-splash .availability .key-valye {
        padding: 4px 0;
      }
  
      body.netdata-splash .sub-module {
        width: 100%;
      }
  
      body.netdata-splash .hardware {
        flex-direction: column;
      }
  
      body.netdata-splash .hardware .module-content {
        padding: 0;
        display: flex;
      }
  
      body.netdata-splash .module.has-title .section-title {
        padding-bottom: 12px;
        margin-bottom: 0;
      }
  
      body.netdata-splash .h-auto {
        height: auto;
      }
  
      body.netdata-splash .none {
        display: none;
      }
  
      body.netdata-splash .claim-message {
        position: absolute;
        top: 0;
        left: 0;
        right: 0;
        margin: auto;
        padding: 0 24px;
        overflow-y: auto;
      }
  
      body.netdata-splash .claim-message .welcome {
        padding: 16px 0;
        text-align: center;
      }
  
      body.netdata-splash .text-center {
        text-align: center;
      }
  
      body.netdata-splash .connection-modal {
        background: rgba(0, 0, 0, 0.4);
        border: 1px solid var(--border);
        padding: 16px 16px;
        display: flex;
        flex-direction: column;
        gap: 12px;
        position: relative;
        font-size: 14px;
      }
  
      body.netdata-splash .connection-step {
        display: flex;
        flex-direction: column;
        gap: 12px;
        position: relative;
        min-height: 300px;
      }
  
      body.netdata-splash .dropdown-custom {
        display: flex;
        flex-direction: column;
        gap: 12px;
        position: relative;
      }
  
      body.netdata-splash .modal-footer {
        height: var(--footer-height);
        padding: 10px 0 0;
        display: flex;
        justify-content: space-between;
      }
  
      body.netdata-splash .modal-footer .button {
        height: 32px;
        font-size: 14px;
      }
  
      body.netdata-splash .list-options {
        margin: 0;
        padding: 0;
        list-style: none;
        height: 300px;
        overflow: auto;
        scrollbar-color: var(--scrollbar-thumb) #293030;
        scrollbar-width: thin;
      }
  
      body.netdata-splash .list-options li {
        padding: 8px 12px;
        background: var(--list-option-bg);
        border: 1px solid var(--border-neutral);
        margin-bottom: 12px;
        cursor: pointer;
      }
  
      body.netdata-splash .list-options li:hover {
        background: var(--list-option-hover-bg);
      }
  
      body.netdata-splash .list-options li.selected {
        background: var(--list-option-selected-bg);
        color: var(--highlight);
        display: flex;
        justify-content: space-between;
      }
  
      body.netdata-splash .list-options li.selected:after {
        content: "\2713";
        margin-left: 2px;
      }
  
      body.netdata-splash input[type="text"] {
        background: #2d3535;
        padding: 4px 8px;
        border: 0;
        font-size: 14px;
        min-height: 28px;
        color: var(--text);
        border-radius: 2px;
      }
  
      body.netdata-splash input[type="text"]:focus {
        outline: 1px solid var(--border);
      }
  
      body.netdata-splash .dropdown {
        position: relative;
        width: auto;
        border: 1px solid var(--border);
        border-radius: 4px;
        padding: 8px;
        cursor: pointer;
      }
  
      body.netdata-splash .dropdown-toggle {
        display: flex;
        justify-content: space-between;
        align-items: center;
      }
  
      body.netdata-splash .checkbox-container {
        display: none;
        position: absolute;
        top: 100%;
        left: 0;
        width: 100%;
        border: 1px solid var(--border);
        background-color: var(--main-bg);
        z-index: 1;
        max-height: 150px;
        overflow-y: auto;
        padding: 8px;
      }
  
      body.netdata-splash .checkbox-container label {
        display: block;
        margin-bottom: 8px;
      }
  
      body.netdata-splash .checkbox-container input {
        margin-right: 5px;
      }
  
      body.netdata-splash .selected-rooms {
        font-size: 14px;
        color: #333;
      }
  
      body.netdata-splash .text-padding {
        padding: 8px 8px 16px;
      }
  
      body.netdata-splash .nd-radio,
      body.netdata-splash .nd-checkbox {
        display: block;
        position: relative;
        padding-left: 32px;
        cursor: pointer;
        font-size: 16px;
        -webkit-user-select: none;
        -moz-user-select: none;
        user-select: none;
        line-height: 20px;
      }
  
      body.netdata-splash .nd-checkbox input {
        position: absolute;
        opacity: 0;
        cursor: pointer;
        height: 0;
        width: 0;
      }
  
      body.netdata-splash .nd-checkbox .checkmark {
        position: absolute;
        top: 0;
        left: 0;
        height: 16px;
        width: 16px;
        background-color: var(--main-bg);
        border: 1px solid var(--primary);
        border-radius: 2px;
      }
  
      body.netdata-splash .nd-checkbox:hover input~.checkmark {
        background-color: var(--border);
      }
  
      body.netdata-splash .nd-checkbox :hover input~.checkmark {
        background-color: #ccc;
      }
  
      body.netdata-splash .nd-checkbox input:checked~.checkmark {
        background-color: var(--boder);
      }
  
      body.netdata-splash .nd-checkbox .checkmark:after {
        content: "";
        position: absolute;
        display: none;
      }
  
      body.netdata-splash .nd-checkbox input:checked~.checkmark:after {
        display: block;
      }
  
      body.netdata-splash .nd-checkbox .checkmark:after {
        inset: 0 0 2px 0;
        margin: auto;
        width: 2px;
        height: 8px;
        border: solid var(--highlight);
        border-width: 0 2px 2px 0;
        transform: rotate(45deg);
      }
  
      /* Retention table */
      #tiers-container {
        height: auto;
      }
  
      #tiers-table {
        width: 100%;
        border-collapse: collapse;
      }
  
      #tiers-table thead tr:nth-of-type(1) th {
        padding-top: 16px;
      }
  
      #tiers-table thead tr:nth-of-type(2) th {
        padding-bottom: 16px;
      }
  
      #tiers-table tbody tr:nth-of-type(1) td {
        border-top: 1px solid var(--border);
        padding-top: 16px;
      }
  
      #tiers-table tbody tr:last-of-type td {
        padding-bottom: 24px;
      }
  
      #tiers-table th {
        font-size: var(--font-small);
        padding: 8px 4px;
      }
  
      #tiers-table td {
        font-size: var(--font-medium);
        text-align: center;
        padding: 12px 4px;
      }
  
      #tiers-table th:first-of-type,
      #tiers-table td:first-of-type {
        padding-left: 12px;
      }
    
      #tiers-table th:last-of-type,  
      #tiers-table td:last-of-type {
        padding-right: 12px;
      }
  
      #tiers-table .section-start {
        border-left: 1px solid var(--border);
      }
  
      .progress-indicator {
        gap: 8px;
        padding: 0 8px;
      }
  
      .progress-bar-container {
        position: relative;
        width: 100%;
        height: var(--progress-bar-height);
        background-color: var(--border-neutral);
        overflow: hidden;
        border-radius: 2px;
      }
  
      .progress-bar {
        position: absolute;
        top: 0;
        left: 0;
        height: var(--progress-bar-height);
        background-color: var(--primary);
      }
  
      #tooltip {
        max-width: 300px;
        background-color: var(--accent);
        color: var(--text-dark);
        border-radius: 4px;
        padding: 8px 16px;
        position: fixed;
        font-size: var(--font-small);
        line-height: 1.5;
        z-index: 9999;
        display: none;
      }</style><script>const toggleTab = tab => {
        const factors = document.querySelectorAll(".data-tab");
        const tabs = document.querySelectorAll(".btn-tab");
  
        factors.forEach(function (factor) {
          let dataTab = parseInt(factor.getAttribute("data-tab"));
          if (dataTab == tab || dataTab === 0) {
            factor.classList.add("active");
          } else {
            factor.classList.remove("active");
          }
        });
  
        // Toggle active class on tab buttons
        tabs.forEach(tabButton => {
          if (tabButton.dataset?.tab == tab) {
            tabButton.classList.add("active");
          } else {
            tabButton.classList.remove("active");
          }
        });
      }
  
      const initGrid = () => {
        const canvas1 = document.getElementById("monitorGrid");
        const context1 = canvas1.getContext("2d");
        const frame = document.querySelector(".frame");
        const cellSize = 4;
        const gapSize = 2;
        const colors = ["#001107", "#003114", "#014420", "#047031", "#049846"];
  
        let grid = [];
  
        const getRandomColor = () => {
          return colors[Math.floor(Math.random() * colors.length)];
        }
  
        const resizeCanvas = (canvas, context) => {
          canvas.width = frame.clientWidth;
          canvas.height = frame.clientHeight;
  
          const cols = Math.floor(canvas.width / (cellSize + gapSize));
          const rows = Math.floor(canvas.height / (cellSize + gapSize));
  
          grid = Array.from({ length: rows }, () =>
            Array.from({ length: cols }, getRandomColor)
          );
  
          drawGrid(context, canvas);
        }
  
        const drawGrid = (context, canvas) => {
          context.clearRect(0, 0, canvas.width, canvas.height);
          const cols = Math.floor(canvas.width / (cellSize + gapSize));
          const rows = Math.floor(canvas.height / (cellSize + gapSize));
  
          for (let row = 0; row < rows; row++) {
            for (let col = 0; col < cols; col++) {
              if (grid[row] && grid[row][col]) {
                context.fillStyle = grid[row][col];
                context.fillRect(
                  col * (cellSize + gapSize),
                  row * (cellSize + gapSize),
                  cellSize,
                  cellSize
                );
              }
            }
          }
        }
  
        resizeCanvas(canvas1, context1);
  
        window.addEventListener("resize", () => resizeCanvas(canvas1, context1));
      }</script></head><body class="loading netdata-splash"><noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-N6CBMJD" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript><div id="app" class="container grid"><div class="frame frame-left col-span-7 grid light-beam relative"><div class="head-summary absolute index-10"><div class="server"><div class="no-title" id="server"></div><div class="no-title" id="package"></div></div><div class="availability h-auto module"><div class="title">Cloud status</div><div class="no-key" id="cloud_status"></div></div></div><div class="col-span-12 row-span-11"><div id="sphereContainer"><div id="loadingMessage" class="loading-message">Loading...</div><div class="hide-title absolute-center sphere-stats-container"><div class="metrics-container"><div class="collected-metrics" id="collectedMetrics"></div><div class="node-info-container"><div class="title">NODES</div><div class="node-info" id="nodes_streaming"></div></div></div><div class="system-container data-tab data-tab-container" data-tab="2"><div class="system grid-columns-10 md-grid-columns-12"><div class="flex-col col-span-5 md-col-span-6"><div class="section-title">Kernel</div><div class="grid-columns-10"><div class="h-auto module col-span-5" id="kernel"></div><div class="h-auto module col-span-5" id="kernelVersion"></div></div></div><div class="flex-col col-span-5 md-col-span-6"><div class="section-title">OS</div><div class="grid-columns-10"><div id="os" class="h-auto module col-span-5"></div><div class="h-auto module col-span-5" id="id"></div></div></div><div class="hardware module-section col-span-10 md-col-span-12"><div class="section-title">Hardware</div><div class="grid-columns-10 md-grid-columns-12"><div class="module h-auto col-span-2 md-col-span-4" id="cpuCores"></div><div class="module h-auto col-span-2 md-col-span-4" id="cpuFrequency"></div><div class="module h-auto col-span-2 md-col-span-4" id="ram"></div><div class="module h-auto col-span-2 md-col-span-4" id="disk"></div><div class="module h-auto col-span-2 md-col-span-4" id="cpuArchitecture"></div><div class="module h-auto col-span-2 md-col-span-4" id="virtualization"></div></div></div></div></div><div class="data-tab data-tab-container" data-tab="1"><div class="db-metrics-container"><div id="tiers-container" class="db-metrics-blocks module"><table id="tiers-table"><thead><tr><th rowspan="2"><span data-tooltip="A database layer that stores metrics at a specific resolution.">Tier</span></th><th rowspan="2">Resolution</th><th colspan="2" class="section-start">Stored</th><th colspan="3" class="section-start">Retention</th><th colspan="2" class="section-start">Disk</th></tr><tr><th class="section-start">Metrics</th><th><span data-tooltip="The total number of measurements stored in the database across all metrics. Each sample represents a recorded value for a specific metric at a given time.">Samples</span></th><th class="section-start">Current</th><th><span data-tooltip="The maximum time data can be kept, based on the configured time and disk space limits.">Effective</span></th><th>Configured</th><th class="section-start">Used</th><th>Configured</th></tr></thead><tbody><tr id="tiers-table-data-placeholder"></tr></tbody></table></div></div></div><div class="data-tab data-tab-container" data-tab="3"><div class="modules-container grid"><div class="module col-span-4"><div class="module-header"><div class="section-image"><svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M16.5299 4.47019C16.2399 4.18019 15.7599 4.18019 15.4699 4.47019L13.5299 6.41019L11.5899 4.47019L13.5299 2.53019C13.8199 2.24019 13.8199 1.76019 13.5299 1.47019C13.2399 1.18019 12.7599 1.18019 12.4699 1.47019L10.5299 3.41019L8.99994 1.88019L5.74994 5.13019C4.93994 5.93019 4.49994 7.01019 4.49994 8.15019V8.38019L3.72994 9.15019C2.53994 10.3302 2.45994 12.2002 3.43994 13.5002L1.96994 14.9702C1.67994 15.2602 1.67994 15.7402 1.96994 16.0302C2.11994 16.1802 2.30994 16.2502 2.49994 16.2502C2.68994 16.2502 2.87994 16.1802 3.02994 16.0302L4.49994 14.5602C5.06994 15.0002 5.76994 15.2402 6.49994 15.2402C7.38994 15.2402 8.21994 14.8902 8.84994 14.2702L9.61994 13.5002H9.84994C10.9899 13.5002 12.0599 13.0602 12.8699 12.2502L16.1199 9.00019L14.5899 7.47019L16.5299 5.53019C16.8199 5.24019 16.8199 4.76019 16.5299 4.47019ZM11.8099 11.1902C11.2899 11.7102 10.5899 12.0002 9.84994 12.0002H8.99994L7.78994 13.2102C7.42994 13.5702 6.96994 13.7402 6.49994 13.7402C6.02994 13.7402 5.56994 13.5602 5.20994 13.2102L4.78994 12.7902C4.07994 12.0802 4.07994 10.9202 4.78994 10.2102L5.46994 9.53019L6.40994 10.4702C6.99994 11.0602 7.94994 11.0602 8.52994 10.4702L6.01994 7.96019C6.06994 7.30019 6.33994 6.67019 6.80994 6.19019L8.99994 4.00019L13.9999 9.00019L11.8099 11.1902Z" fill="var(--text)"/></svg></div><span class="section-title">Plugins</span></div><div class="module-content" id="plugins"></div></div><div class="module col-span-4"><div class="module-header"><div class="section-image"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M7 18C7.55 18 8 17.55 8 17C8 16.45 7.55 16 7 16C6.45 16 6 16.45 6 17C6 17.55 6.45 18 7 18ZM14 17.79C14.28 17.51 14.28 17.07 14 16.79C13.72 16.51 13.28 16.51 13 16.79C12.72 17.07 12.72 17.51 13 17.79C13.28 18.07 13.72 18.07 14 17.79ZM17 8V4H12V2H2V22H22V8H17ZM10 20H4V4H10V20ZM15 20H12V6H15V20ZM20 20H17V10H20V20ZM19 17.79C19.28 17.51 19.28 17.07 19 16.79C18.72 16.51 18.28 16.51 18 16.79C17.72 17.07 17.72 17.51 18 17.79C18.28 18.07 18.72 18.07 19 17.79Z" fill="var(--text)"/></svg></div><span class="section-title">Libraries</span></div><div class="module-content" id="libs"></div></div><div class="module col-span-4"><div class="module-header"><div class="section-image"><svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M4 16.0002H5V14.5002H4V16.0002ZM2 16.0002H3V14.5002H2V16.0002ZM15.28 6.97019L10.25 1.94019L5.22 6.97019C4.927 7.26319 4.927 7.73819 5.22 8.03119C5.513 8.32419 5.988 8.32419 6.281 8.03119L9.5 4.81119V11.8392C9.5 13.3062 8.306 14.5002 6.838 14.5002H6V16.0002H6.838C9.136 16.0002 11 14.1372 11 11.8382V4.81119L14.22 8.03119C14.366 8.17719 14.558 8.25119 14.75 8.25119C14.942 8.25119 15.134 8.17819 15.28 8.03119C15.573 7.73719 15.573 7.26319 15.28 6.97019Z" fill="var(--text)"/></svg></div><span class="section-title">Exporters</span></div><div class="module-content" id="exporters"></div></div></div></div><div class="data-tab data-tab-container" data-tab="4"><div class="module data-tab-table" id="directories"></div></div></div></div></div><div class="relative row-span-1 col-span-12 full-h"><div class="license-link"><a href="https://app.netdata.cloud/LICENSE.txt" target="_blank">Netdata UI License</a></div><div class="tabs full-h"><button type="button" name="button" class="btn-tab tab active" data-tab="1"><div class="tab-icon"><svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9 10C14.153 10 16.5 7.927 16.5 6C16.5 4.073 14.153 2 9 2C3.847 2 1.5 4.073 1.5 6C1.5 7.927 3.847 10 9 10ZM9 3.5C12.313 3.5 15 4.619 15 6C15 7.381 12.313 8.5 9 8.5C5.687 8.5 3 7.381 3 6C3 4.619 5.687 3.5 9 3.5ZM14.566 12.931C13.68 13.85 11.523 14.5 9 14.5C6.477 14.5 4.32 13.85 3.434 12.931C2.639 12.547 2.01 12.081 1.545 11.563C1.518 11.708 1.5 11.854 1.5 12C1.5 13.927 3.847 16 9 16C14.153 16 16.5 13.927 16.5 12C16.5 11.854 16.482 11.708 16.455 11.562C15.99 12.081 15.361 12.546 14.566 12.931ZM14.566 9.931C13.68 10.85 11.523 11.5 9 11.5C6.477 11.5 4.32 10.85 3.434 9.931C2.639 9.547 2.01 9.081 1.545 8.563C1.518 8.708 1.5 8.854 1.5 9C1.5 10.927 3.847 13 9 13C14.153 13 16.5 10.927 16.5 9C16.5 8.854 16.482 8.708 16.455 8.562C15.99 9.081 15.361 9.546 14.566 9.931Z"/></svg></div>Database</button> <button type="button" name="button" class="btn-tab tab" data-tab="2"><div class="tab-icon"><svg width="60" height="60" viewBox="0 0 60 60" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M40.3125 18.75H19.6875C19.1697 18.75 18.75 19.1697 18.75 19.6875V40.3125C18.75 40.8303 19.1697 41.25 19.6875 41.25H40.3125C40.8303 41.25 41.25 40.8303 41.25 40.3125V19.6875C41.25 19.1697 40.8303 18.75 40.3125 18.75Z"/><path d="M54.375 22.5C54.8723 22.5 55.3492 22.3025 55.7008 21.9508C56.0525 21.5992 56.25 21.1223 56.25 20.625C56.25 20.1277 56.0525 19.6508 55.7008 19.2992C55.3492 18.9475 54.8723 18.75 54.375 18.75H52.5V15C52.4978 13.0115 51.707 11.1051 50.3009 9.6991C48.8949 8.29305 46.9885 7.50217 45 7.5H41.25V5.625C41.25 5.12772 41.0525 4.65081 40.7008 4.29917C40.3492 3.94754 39.8723 3.75 39.375 3.75C38.8777 3.75 38.4008 3.94754 38.0492 4.29917C37.6975 4.65081 37.5 5.12772 37.5 5.625V7.5H31.875V5.625C31.875 5.12772 31.6775 4.65081 31.3258 4.29917C30.9742 3.94754 30.4973 3.75 30 3.75C29.5027 3.75 29.0258 3.94754 28.6742 4.29917C28.3225 4.65081 28.125 5.12772 28.125 5.625V7.5H22.5V5.625C22.5 5.12772 22.3025 4.65081 21.9508 4.29917C21.5992 3.94754 21.1223 3.75 20.625 3.75C20.1277 3.75 19.6508 3.94754 19.2992 4.29917C18.9475 4.65081 18.75 5.12772 18.75 5.625V7.5H15C13.0115 7.50217 11.1051 8.29305 9.6991 9.6991C8.29305 11.1051 7.50217 13.0115 7.5 15V18.75H5.625C5.12772 18.75 4.65081 18.9475 4.29917 19.2992C3.94754 19.6508 3.75 20.1277 3.75 20.625C3.75 21.1223 3.94754 21.5992 4.29917 21.9508C4.65081 22.3025 5.12772 22.5 5.625 22.5H7.5V28.125H5.625C5.12772 28.125 4.65081 28.3225 4.29917 28.6742C3.94754 29.0258 3.75 29.5027 3.75 30C3.75 30.4973 3.94754 30.9742 4.29917 31.3258C4.65081 31.6775 5.12772 31.875 5.625 31.875H7.5V37.5H5.625C5.12772 37.5 4.65081 37.6975 4.29917 38.0492C3.94754 38.4008 3.75 38.8777 3.75 39.375C3.75 39.8723 3.94754 40.3492 4.29917 40.7008C4.65081 41.0525 5.12772 41.25 5.625 41.25H7.5V45C7.50217 46.9885 8.29305 48.8949 9.6991 50.3009C11.1051 51.707 13.0115 52.4978 15 52.5H18.75V54.375C18.75 54.8723 18.9475 55.3492 19.2992 55.7008C19.6508 56.0525 20.1277 56.25 20.625 56.25C21.1223 56.25 21.5992 56.0525 21.9508 55.7008C22.3025 55.3492 22.5 54.8723 22.5 54.375V52.5H28.125V54.375C28.125 54.8723 28.3225 55.3492 28.6742 55.7008C29.0258 56.0525 29.5027 56.25 30 56.25C30.4973 56.25 30.9742 56.0525 31.3258 55.7008C31.6775 55.3492 31.875 54.8723 31.875 54.375V52.5H37.5V54.375C37.5 54.8723 37.6975 55.3492 38.0492 55.7008C38.4008 56.0525 38.8777 56.25 39.375 56.25C39.8723 56.25 40.3492 56.0525 40.7008 55.7008C41.0525 55.3492 41.25 54.8723 41.25 54.375V52.5H45C46.9885 52.4978 48.8949 51.707 50.3009 50.3009C51.707 48.8949 52.4978 46.9885 52.5 45V41.25H54.375C54.8723 41.25 55.3492 41.0525 55.7008 40.7008C56.0525 40.3492 56.25 39.8723 56.25 39.375C56.25 38.8777 56.0525 38.4008 55.7008 38.0492C55.3492 37.6975 54.8723 37.5 54.375 37.5H52.5V31.875H54.375C54.8723 31.875 55.3492 31.6775 55.7008 31.3258C56.0525 30.9742 56.25 30.4973 56.25 30C56.25 29.5027 56.0525 29.0258 55.7008 28.6742C55.3492 28.3225 54.8723 28.125 54.375 28.125H52.5V22.5H54.375ZM45 41.25C45 42.2446 44.6049 43.1984 43.9016 43.9016C43.1984 44.6049 42.2446 45 41.25 45H18.75C17.7554 45 16.8016 44.6049 16.0984 43.9016C15.3951 43.1984 15 42.2446 15 41.25V18.75C15 17.7554 15.3951 16.8016 16.0984 16.0984C16.8016 15.3951 17.7554 15 18.75 15H41.25C42.2446 15 43.1984 15.3951 43.9016 16.0984C44.6049 16.8016 45 17.7554 45 18.75V41.25Z"/></svg></div>System</button> <button type="button" name="button" class="btn-tab tab" data-tab="3"><div class="tab-icon"><svg width="60" height="60" viewBox="0 0 60 60" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M59.7937 16.4062C59.7164 16.2322 59.6084 16.0734 59.475 15.9375C59.3495 15.8165 59.2112 15.7097 59.0625 15.6187L30.9 0.224957C30.615 0.0603916 30.2916 -0.0262451 29.9625 -0.0262451C29.6334 -0.0262451 29.31 0.0603916 29.025 0.224957L1.06875 15.525C1.06875 15.525 1.06875 15.6187 0.91875 15.6375C0.762779 15.7334 0.618116 15.8466 0.4875 15.975C0.433211 16.047 0.383128 16.1221 0.3375 16.2C0.244093 16.3333 0.168457 16.4783 0.1125 16.6312C0.1125 16.6312 0.1125 16.6312 0.1125 16.7437C0.103788 16.8435 0.103788 16.9439 0.1125 17.0437C0.1125 17.0437 0.1125 17.1562 0.1125 17.2125V42.7687C0.0613239 42.8827 0.0235706 43.0023 0 43.125L0 43.3875C0.142582 43.8604 0.466002 44.2579 0.9 44.4937L29.025 59.8312H29.1375H29.2875C29.5116 59.9337 29.7537 59.9911 30 60C30.2245 59.9926 30.4462 59.9482 30.6563 59.8687H30.7875H30.9L59.025 44.5312C59.3209 44.3693 59.5676 44.1306 59.7392 43.8402C59.9108 43.5498 60.0009 43.2185 60 42.8812V17.2125C59.9937 16.9939 59.9493 16.7782 59.8688 16.575C59.8516 16.5155 59.8264 16.4588 59.7937 16.4062ZM28.125 54.975L3.75 41.6625V20.3812L28.125 33.75V54.975ZM30 30.4125L5.79375 17.2875L30 4.01246L54.2062 17.1375L30 30.4125ZM56.25 41.6625L31.875 54.975V33.75L56.25 20.4562V41.6625Z"/></svg></div>Modules</button> <button type="button" name="button" class="btn-tab tab" data-tab="4"><div class="tab-icon"><svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M16 10.5V5.5H10V7.25H5.75V6.5H8V1.5H2V6.5H4.25V14.75H10V16.5H16V11.5H10V13.25H5.75V8.75H10V10.5H16ZM11.5 7H14.5V9H11.5V7ZM11.5 13H14.5V15H11.5V13ZM3.5 5V3H6.5V5H3.5Z"/></svg></div>Directories</button></div></div></div><div class="frame relative col-span-5 frame-right"><canvas id="monitorGrid"></canvas><div id="splashMessageContainer" class="splash-message"><svg width="133" height="105" viewBox="0 0 133 105" fill="none" xmlns="http://www.w3.org/2000/svg" class="logo"><path fill-rule="evenodd" clip-rule="evenodd" d="M81.697 105H55.0693L0.5 0.5H77.9598C108.079 0.554913 132.484 24.7711 132.5 54.6451C132.452 82.485 109.73 105 81.697 105Z" fill="#FCFFFD"/></svg><h1 class="text-center">Welcome to Netdata</h1><p id="msgSignIn">Please sign-in to continue</p><a id="btnSignIn" href="javascript:loadDashboard(true);" class="button button-primary">Sign-in</a><div class="tagline skip-link"><a class="opt-out-link" href="javascript:loadDashboard();">Skip and use the dashboard anonymously.</a> <span class="no-anonymous-access"></span></div></div><div id="claimingContentsContainer" class="claim-message" style="display:none;"><div class="welcome"><svg width="133" height="105" viewBox="0 0 133 105" fill="none" xmlns="http://www.w3.org/2000/svg" class="logo"><path fill-rule="evenodd" clip-rule="evenodd" d="M81.697 105H55.0693L0.5 0.5H77.9598C108.079 0.554913 132.484 24.7711 132.5 54.6451C132.452 82.485 109.73 105 81.697 105Z" fill="#FCFFFD"/></svg><h1 class="text-center">Welcome to Netdata</h1><span>Please connect your agent to continue.</span></div><div class="connection-modal"><div id="connectionStep-1"><div class="connection-step"><span class="text-small">Please select the space you want this agent to join:</span> <span class="loader">Loading spaces...</span><ul id="spacesList" class="list-options"></ul></div></div><div id="connectionStep-2" style="display:none;"><div class="connection-step"><div class="dropdown-custom" data-target="claimMessage"><div class="dropdown-custom-input flex space-between align-center"><span class="text-small">Select room(s)</span><button class="text-small button button-ghost clear-button">Clear</button></div><div id="roomsSelector" class="dropdown"><div class="dropdown-toggle"><span id="selectedItems" class="selected-items">Select room</span> <span>▼</span></div><div id="roomsSelectorOptionsContainer" class="checkbox-container"></div></div></div><div id="claimMessage" class="selected-message"></div><div class="">Please run the command below in your terminal:</div><code id="claimCommand"></code><div class="">and paste the generated private key in the field below:</div><input id="claimingPrivateKey" name="claimingPrivateKey" value="" placeholder="Private Key"/></div><div id="claimTip" class="text-padding text-small">Tip: If the command doesn’t work out-of-the-box, locate the {keyFilename} file, open it in your favourite text editor, and copy it to your clipboard.</div><div id="claimErrorMessage" class="text-padding error" style="display:none;"></div></div><div class="modal-footer flex-col"><div class="flex space-between"><button id="btnConnectionStepPrev" class="button button-ghost">&#8592; Back</button> <button id="btnConnectionStepNext" class="button button-primary">Next</button> <button id="btnClaim" class="button button-primary">Claim</button></div><div class="skip-link"><a class="signout-link" href="javascript:signout()">Sign out to switch user</a></div></div></div></div></div><div id="tooltip"></div></div></body><script>const initPrimaryButtonHover = () => {
      const button = document.getElementById("btnSignIn");
      const canvas = document.getElementById("monitorGrid");
  
      if (button) {
        button.addEventListener("mouseover", () => {
          canvas.classList.add("hovered");
        });
      }
  
      if (canvas) {
        button.addEventListener("mouseout", () => {
          canvas.classList.remove("hovered");
        });
      }
    }
  
    const initTabs = () => {
      const btnTabs = document.querySelectorAll(".btn-tab");
      btnTabs.forEach(btn => {
        btn.addEventListener("click", e => {
          const tab = e.currentTarget?.dataset?.tab;
          if (tab) {
            toggleTab(tab);
          }
        })
      })
    }
  
    // =============================================== //
  
    const status = {
      TIMEOUT: 'timeout',
      SUCCESS: 'success',
      SKIPPED: 'skipped'
    };
  
    const getSessionId = () => {
      const key = "telemetrySessionId"
      if (!sessionStorage.getItem(key)) {
        sessionStorage.setItem(key, self.crypto && self.crypto.randomUUID ? self.crypto.randomUUID() : new Date().getTime());
      }
      return sessionStorage.getItem(key) || "";
    }
  
    const defaultErrorMessage = "Something went wrong."
    const agentUri = window.location.origin + window.location.pathname.replace(pathsRegex, "");
    const telemetrySessionId = getSessionId();
    const ensureOneSlash = urlStr => urlStr.replace(/([^:]\/)\/+/g, "$1");
  
    // Utils =============================================================================== //
  
    const createElem = (tag, attrs) => {
      if (!tag) return null
      const elem = document.createElement(tag);
      if (Object.keys(attrs || {}).length) {
        Object.entries(attrs).forEach(([k, v]) => {
          elem[k] = v;
        })
      }
      return elem
    }
  
    const getDOM = ({ tag = "div", children = [], ...rest } = {}) => {
      const element = document.createElement(tag);
  
      Object.entries(rest || {}).forEach(([k, v]) => {
        if (element[k] !== undefined) {
          if (k == "dataset" && Object.keys(v).length == 1) {
            const dataPair = Object.entries(v)[0]
            element[k][dataPair[0]] = dataPair[1]
          } else {
            element[k] = v;
          }
        }
      })
  
      if (!!children?.length) {
        children.filter(({ condition = true }) => !!condition).forEach(childStructure => {
          element.appendChild(getDOM(childStructure));
        });
      }
  
      return element;
    }
  
    // ===================================================================================== //
  
    // Agent info
    const AGENT_INFO_KEY = `agentInfo:${window.envSettings.agentApiUrl}`
    const getAgentInfo = () => {
      const agentInfo = localStorage.getItem(AGENT_INFO_KEY)
      if (agentInfo) {
        try {
          return Promise.resolve(JSON.parse(agentInfo))
        } catch (err) {
          return Promise.resolve()
        }
      }
  
      return fetch(ensureOneSlash(`${window.envSettings.agentApiUrl}/api/v3/info`)).then(response => response.json()).then(data => {
        if (CONFIG.cache.agentInfo) {
          localStorage.setItem(AGENT_INFO_KEY, JSON.stringify(data || {}))
        }
        return data
      }).catch(() => Promise.resolve())
    }
  
    const loadStyle = (url, { media, insertAfter: aref, insertBefore: bref, rel, type } = {}) => {
      rel = rel || 'stylesheet'
      type = type || 'text/css'
      return new Promise(function (resolve, reject) {
        let link = document.createElement('link');
        link.type = type;
        link.rel = rel;
        link.href = url;
        link.media = media || 'all';
  
        link.onerror = function (err) {
          reject(new URIError(`loadStyle: the stylesheet ${err.target.src} is not accessible.`));
        };
  
        link.onload = function () {
          resolve();
        };
  
        if (aref) {
          aref.parentNode.insertBefore(link, aref.nextSibling);
          return;
        }
  
        if (bref) {
          bref.parentNode.insertBefore(link, bref);
          return;
        }
  
        document.head.appendChild(link);
      });
    }
  
    const loadScript = (url, { async = true, defer = false, insertAfter: aref, insertBefore: bref, timeout = 5000, attrs, skipIf } = {}) => {
      return new Promise(function (resolve, reject) {
        if (typeof skipIf === 'function' && skipIf()) {
          resolve(status.SKIPPED);
          return;
        }
  
        let rejectWithTimeout = setTimeout(function () { reject(status.TIMEOUT) }, timeout);
  
        let script = document.createElement('script');
        script.type = 'text/javascript';
        script.src = url;
        script.async = async;
        script.defer = defer;
  
        if (attrs) {
          for (let attr in attrs) {
            script.setAttribute(attr, attrs[attr]);
          }
        }
  
        script.onerror = function (err) {
          reject(new URIError(`loadScript: the script ${err.target.src} is not accessible.`));
        };
  
        script.onload = function () {
          clearTimeout(rejectWithTimeout);
          resolve(status.SUCCESS);
        };
  
        if (aref) {
          aref.parentNode.insertBefore(script, aref.nextSibling);
          return;
        }
  
        if (bref) {
          bref.parentNode.insertBefore(script, bref);
          return;
        }
  
        document.body.appendChild(script);
      });
    }
  
    __webpack_public_path__ = ensureOneSlash(window.envSettings.webpackPublicPath ? (window.envSettings.webpackPublicPath + "/") : (window.envSettings.agentApiUrl + "/v3/"))
  
    const loadLatestUI = () => {
      return fetch(__webpack_public_path__ + "bundlesManifest." + window.envSettings.version.toString().replace(/(\d+)\..+/, "$1") + ".json")
        .then(function (response) { return response.json() })
        .catch(() => goToOld('/v3'))
        .then(function (data) {
          Object.keys(data).forEach(function (k) {
            if (/\.(map|ico|html)$/.test(data[k])) return
            if (/static\//.test(data[k])) return
  
            if (/\.css.*$/.test(data[k])) {
              loadStyle(ensureOneSlash(__webpack_public_path__ + data[k]))
              return
            }
  
            if (/\.js.*$/.test(data[k])) {
              loadScript(ensureOneSlash(__webpack_public_path__ + data[k]), {
                async: false,
              });
            }
        
services.body_hash_sha1: sha1:55797d8e67b8ce8d683748dbbcae397e4ff57091
services.supported_versions: HTTP/1.1
services.protocol: HTTP
services.transport_protocol: TCP
services.scan_time: 2025-07-27T23:48:25.931017
services.banner: HTTP/1.1 200 OK
  Server: openresty
  Date:  <REDACTED>
  Content-Type: text/html
  Last-Modified: Wed, 28 Feb 2024 22:30:35 GMT
  Transfer-Encoding: chunked
  Connection: keep-alive
  ETag: W/"65dfb40b-69d"
  Content-Encoding: gzip
  
services.source: OSI_APPLICATION_LAYER
services.part: a
services.vendor: Nginx Proxy Manager
services.product: Nginx Proxy Manager
services.cpe: cpe:2.3:a:nginxproxymanager:nginx_proxy_manager:*:*:*:*:*:*:*:*
services.source: OSI_APPLICATION_LAYER
services.part: a
services.vendor: OpenResty
services.product: OpenResty
services.cpe: cpe:2.3:a:openresty:openresty:*:*:*:*:*:*:*:*
services.path: /
services.endpoint_type: HTTP
services.scan_time: 2025-07-27T23:48:25.931017
services.uri: http://190.247.11.127:37913/
services.protocol: HTTP/1.1
services.status_reason: OK
services.key: Server
services.headers: openresty
services.key: Content-Type
services.headers: text/html
services.key: Date
services.headers: <REDACTED>
services.key: ETag
services.headers: W/"65dfb40b-69d"
services.key: Transfer-Encoding
services.headers: chunked
services.key: Last-Modified
services.headers: Wed, 28 Feb 2024 22:30:35 GMT
services.key: Content-Encoding
services.headers: gzip
services.key: Connection
services.headers: keep-alive
services.html_tags: <title>Nginx Proxy Manager</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <meta http-equiv="Content-Language" content="en"> <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"> <meta name="apple-mobile-web-app-capable" content="yes"> <meta name="mobile-web-app-capable" content="yes"> <meta name="HandheldFriendly" content="True"> <meta name="MobileOptimized" content="320"> <meta name="robots" content="noindex"> <meta name="msapplication-TileColor" content="#333333"> <meta name="msapplication-config" content="/images/favicons/browserconfig.xml"> <meta name="theme-color" content="#ffffff">
services.body: <!doctype html><html lang="en" dir="ltr"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1"><meta http-equiv="X-UA-Compatible" content="ie=edge"><meta http-equiv="Content-Language" content="en"><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="mobile-web-app-capable" content="yes"><meta name="HandheldFriendly" content="True"><meta name="MobileOptimized" content="320"><meta name="robots" content="noindex"><title>Nginx Proxy Manager</title><link rel="apple-touch-icon" sizes="180x180" href="/images/favicons/apple-touch-icon.png"><link rel="icon" type="image/png" sizes="32x32" href="/images/favicons/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="/images/favicons/favicon-16x16.png"><link rel="manifest" href="/images/favicons/site.webmanifest"><link rel="mask-icon" href="/images/favicons/safari-pinned-tab.svg" color="#5bbad5"><link rel="shortcut icon" href="/images/favicons/favicon.ico"><meta name="msapplication-TileColor" content="#333333"><meta name="msapplication-config" content="/images/favicons/browserconfig.xml"><meta name="theme-color" content="#ffffff"><link href="/css/main.css?v=2.11.1" rel="stylesheet"></head><body><noscript><div class="container no-js-warning"><div class="alert alert-warning text-center"><strong>Warning!</strong> This application requires Javascript and your browser doesn't support it.</div></div></noscript><div id="app" class="page"><span class="loader"></span></div><script src="/js/main.bundle.js?v=2.11.1"></script></body></html>
services.name: http://190.247.11.127:37913/images/favicons/apple-touch-icon.png
services.name: http://190.247.11.127:37913/images/favicons/favicon-32x32.png
services.name: http://190.247.11.127:37913/images/favicons/favicon-16x16.png
services.name: http://190.247.11.127:37913/images/favicons/favicon.ico
services.body_hash_sha1: sha1:a4acaeafba9bcf1f0e6e7153f864bc3b259b8450
services.supported_versions: HTTP/1.1
services.protocol: HTTP
services.transport_protocol: TCP
services.scan_time: 2025-07-27T23:48:26.431379
services.banner: HTTP/1.1 200 OK
  X-Powered-By: Express
  Accept-Ranges: bytes
  Cache-Control: public, max-age=0
  Last-Modified: Sun, 26 Jun 2022 09:30:30 GMT
  ETag: W/"70e6-1819f592af0"
  Content-Type: text/html; charset=UTF-8
  Content-Length: 28902
  Date:  <REDACTED>
  Connection: keep-alive
  Keep-Alive: timeout=5
  
services.source: OSI_APPLICATION_LAYER
services.part: a
services.vendor: WireGuard Easy
services.product: WireGuard Easy
services.cpe: cpe:2.3:a:wg-easy:wg-easy:*:*:*:*:*:*:*:*
services.source: OSI_APPLICATION_LAYER
services.part: a
services.product: Express
services.cpe: cpe:2.3:a:*:express:*:*:*:*:*:*:*:*
services.value: login-page
services.value: vue.js
services.path: /
services.endpoint_type: HTTP
services.scan_time: 2025-07-27T23:48:26.431379
services.uri: http://190.247.11.127:51821/
services.protocol: HTTP/1.1
services.status_reason: OK
services.key: Last-Modified
services.headers: Sun, 26 Jun 2022 09:30:30 GMT
services.key: Accept-Ranges
services.headers: bytes
services.key: Keep-Alive
services.headers: timeout=5
services.key: Cache-Control
services.headers: public, max-age=0
services.key: Content-Type
services.headers: text/html; charset=UTF-8
services.key: Date
services.headers: <REDACTED>
services.key: ETag
services.headers: W/"70e6-1819f592af0"
services.key: X-Powered-By
services.headers: Express
services.key: Connection
services.headers: keep-alive
services.key: Content-Length
services.headers: 28902
services.html_tags: <title>WireGuard</title> <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"> <meta name="apple-mobile-web-app-capable" content="yes">
services.body: <!DOCTYPE html>
  <html>
  
  <head>
    <title>WireGuard</title>
    <link href="./css/vendor/tailwind.min.css" rel="stylesheet">
    <link rel="manifest" href="./manifest.json">
    <link rel="icon" type="image/png" href="./img/favicon.png">
    <link rel="apple-touch-icon" href="./img/apple-touch-icon.png">
    <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
    <meta name="apple-mobile-web-app-capable" content="yes">
  </head>
  
  <style>
    [v-cloak] {
      display: none;
    }
  </style>
  
  <body class="bg-gray-50">
  
    <div id="app">
  
      <div v-cloak class="container mx-auto max-w-3xl">
  
        <div v-if="authenticated === true">
          <span v-if="requiresPassword"
            class="text-sm text-gray-400 mb-10 mr-2 mt-3 cursor-pointer hover:underline float-right" @click="logout">
            Logout
            <svg class="h-3 inline" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"
              stroke="currentColor">
              <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
                d="M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1" />
            </svg>
          </span>
          <h1 class="text-4xl font-medium mt-10 mb-2">
            <img src="./img/logo.png" width="32" class="inline align-middle" />
            <span class="align-middle">WireGuard</span>
          </h1>
          <h2 class="text-sm text-gray-400 mb-10"></h2>
  
          <div v-if="latestRelease" class="bg-red-800 p-4 text-white text-sm font-small mb-10 rounded-md shadow-lg"
            :title="`v${currentRelease} → v${latestRelease.version}`">
            <div class="container mx-auto flex flex-row flex-auto items-center">
              <div class="flex-grow">
                <p class="font-bold">There is an update available!</p>
                <p>{{latestRelease.changelog}}</p>
              </div>
  
              <a href="https://github.com/WeeJeWel/wg-easy#updating" target="_blank"
                class="p-3 rounded-md bg-white float-right font-sm font-semibold text-red-800 flex-shrink-0 border-2 border-red-800 hover:border-white hover:text-white hover:bg-red-800 transition-all">
                Update →
              </a>
            </div>
          </div>
  
          <div class="shadow-md rounded-lg bg-white overflow-hidden">
            <div class="flex flex-row flex-auto items-center p-3 px-5 border border-b-2 border-gray-100">
              <div class="flex-grow">
                <p class="text-2xl font-medium">Clients</p>
              </div>
              <div class="flex-shrink-0">
                <button @click="clientCreate = true; clientCreateName = '';"
                  class="hover:bg-red-800 hover:border-red-800 hover:text-white text-gray-700 border-2 border-gray-100 py-2 px-4 rounded inline-flex items-center transition">
                  <svg class="w-4 mr-2" inline xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"
                    stroke="currentColor">
                    <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
                      d="M12 6v6m0 0v6m0-6h6m-6 0H6" />
                  </svg>
                  <span class="text-sm">New</span>
                </button>
              </div>
            </div>
  
            <div>
              <!-- Client -->
              <div v-if="clients && clients.length > 0" v-for="client in clients" :key="client.id"
                class="relative overflow-hidden border-b border-gray-100 border-solid">
  
                <!-- Chart -->
                <div class="absolute z-0 bottom-0 left-0 right-0" style="width: 100%; height: 20%;">
                  <!-- Bar -->
                  <div v-for="(_, index) in client.transferTxHistory" :style="{
                      display: 'inline-flex',
                      alignItems: 'flex-end',
                      width: '2%', // 1/100th of client.transferTxHistory.length
                      height: '100%',
                      padding: '0 3px',
                      boxSizing: 'border-box',
                      fontSize: 0,
                    }">
  
                    <!-- TX -->
                    <div :style="{
                      minHeight: '0px',
                      minWidth: '2px',
                      maxWidth: '4px',
                      width: '50%',
                      marginRight: '1px',
                      height: Math.round((client.transferTxHistory[index]/client.transferMax)*100) + '%',
                      background: client.hoverTx
                        ? '#992922'
                        : '#F3F4F6',
                      transition: 'all 0.2s',
                      borderRadius: '2px 2px 0 0',
                    }"></div>
  
                    <!-- RX -->
                    <div :style="{
                      minHeight: '0px',
                      minWidth: '2px',
                      maxWidth: '4px',
                      width: '50%',
                      height: Math.round((client.transferRxHistory[index]/client.transferMax)*100) + '%',
                      background: client.hoverRx
                      ? '#992922'
                      : '#F0F1F3',
                      transition: 'all 0.2s',
                      borderRadius: '2px 2px 0 0',
                    }"></div>
                  </div>
                </div>
  
                <div class="relative p-5 z-10 flex flex-row">
                  <div class="h-10 w-10 mr-5 rounded-full bg-gray-50 relative">
                    <svg class="w-6 m-2 text-gray-300" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"
                      fill="currentColor">
                      <path fill-rule="evenodd" d="M10 9a3 3 0 100-6 3 3 0 000 6zm-7 9a7 7 0 1114 0H3z"
                        clip-rule="evenodd" />
                    </svg>
                    <img v-if="client.avatar" :src="client.avatar" class="w-10 rounded-full absolute top-0 left-0" />
  
                    <div
                      v-if="client.latestHandshakeAt && ((new Date() - new Date(client.latestHandshakeAt) < 1000 * 60 * 10))">
                      <div class="animate-ping w-4 h-4 p-1 bg-red-100 rounded-full absolute -bottom-1 -right-1"></div>
                      <div class="w-2 h-2 bg-red-800 rounded-full absolute bottom-0 right-0"></div>
                    </div>
                  </div>
  
                  <div class="flex-grow">
  
                    <!-- Name -->
                    <div class="text-gray-700 group" :title="'Created on ' + dateTime(new Date(client.createdAt))">
  
                      <!-- Show -->
                      <input v-show="clientEditNameId === client.id" v-model="clientEditName"
                        v-on:keyup.enter="updateClientName(client, clientEditName); clientEditName = null; clientEditNameId = null;"
                        v-on:keyup.escape="clientEditName = null; clientEditNameId = null;"
                        :ref="'client-' + client.id + '-name'"
                        class="rounded px-1 border-2 border-gray-100 focus:border-gray-200 outline-none w-30" />
                      <span v-show="clientEditNameId !== client.id"
                        class="inline-block border-t-2 border-b-2 border-transparent">{{client.name}}</span>
  
                      <!-- Edit -->
                      <span v-show="clientEditNameId !== client.id"
                        @click="clientEditName = client.name; clientEditNameId = client.id; setTimeout(() => $refs['client-' + client.id + '-name'][0].select(), 1);"
                        class="cursor-pointer opacity-0 group-hover:opacity-100 transition-opacity">
                        <svg xmlns="http://www.w3.org/2000/svg"
                          class="h-4 w-4 inline align-middle opacity-25 hover:opacity-100" fill="none" viewBox="0 0 24 24"
                          stroke="currentColor">
                          <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
                            d="M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z" />
                        </svg>
                      </span>
                    </div>
  
                    <!-- Info -->
                    <div class="text-gray-400 text-xs">
  
                      <!-- Address -->
                      <span class="group">
  
                        <!-- Show -->
                        <input v-show="clientEditAddressId === client.id" v-model="clientEditAddress"
                          v-on:keyup.enter="updateClientAddress(client, clientEditAddress); clientEditAddress = null; clientEditAddressId = null;"
                          v-on:keyup.escape="clientEditAddress = null; clientEditAddressId = null;"
                          :ref="'client-' + client.id + '-address'"
                          class="rounded border-2 border-gray-100 focus:border-gray-200 outline-none w-20 text-black" />
                        <span v-show="clientEditAddressId !== client.id"
                          class="inline-block border-t-2 border-b-2 border-transparent">{{client.address}}</span>
  
                        <!-- Edit -->
                        <span v-show="clientEditAddressId !== client.id"
                          @click="clientEditAddress = client.address; clientEditAddressId = client.id; setTimeout(() => $refs['client-' + client.id + '-address'][0].select(), 1);"
                          class="cursor-pointer opacity-0 group-hover:opacity-100 transition-opacity">
                          <svg xmlns="http://www.w3.org/2000/svg"
                            class="h-4 w-4 inline align-middle opacity-25 hover:opacity-100" fill="none"
                            viewBox="0 0 24 24" stroke="currentColor">
                            <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
                              d="M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z" />
                          </svg>
                        </span>
                      </span>
  
                      <!-- Transfer TX -->
                      <span v-if="client.transferTx" :title="'Total Download: ' + bytes(client.transferTx)"
                        @mouseover="client.hoverTx = clientsPersist[client.id].hoverTx = true;"
                        @mouseleave="client.hoverTx = clientsPersist[client.id].hoverTx = false;"
                        style="cursor: default;">
                        ·
                        <svg class="align-middle h-3 inline" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"
                          fill="currentColor">
                          <path fill-rule="evenodd"
                            d="M16.707 10.293a1 1 0 010 1.414l-6 6a1 1 0 01-1.414 0l-6-6a1 1 0 111.414-1.414L9 14.586V3a1 1 0 012 0v11.586l4.293-4.293a1 1 0 011.414 0z"
                            clip-rule="evenodd" />
                        </svg>
                        {{client.transferTxCurrent | bytes}}/s
                      </span>
  
                      <!-- Transfer RX -->
                      <span v-if="client.transferRx" :title="'Total Upload: ' + bytes(client.transferRx)"
                        @mouseover="client.hoverRx = clientsPersist[client.id].hoverRx = true;"
                        @mouseleave="client.hoverRx = clientsPersist[client.id].hoverRx = false;"
                        style="cursor: default;">
                        ·
                        <svg class="align-middle h-3 inline" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"
                          fill="currentColor">
                          <path fill-rule="evenodd"
                            d="M3.293 9.707a1 1 0 010-1.414l6-6a1 1 0 011.414 0l6 6a1 1 0 01-1.414 1.414L11 5.414V17a1 1 0 11-2 0V5.414L4.707 9.707a1 1 0 01-1.414 0z"
                            clip-rule="evenodd" />
                        </svg>
                        {{client.transferRxCurrent | bytes}}/s
                      </span>
  
                      <!-- Last seen -->
                      <span v-if="client.latestHandshakeAt"
                        :title="'Last seen on ' + dateTime(new Date(client.latestHandshakeAt))">
                        · {{new Date(client.latestHandshakeAt) | timeago}}
                      </span>
                    </div>
                  </div>
  
                  <div class="text-right">
                    <div class="text-gray-400">
  
                      <!-- Enable/Disable -->
                      <div @click="disableClient(client)" v-if="client.enabled === true" title="Disable Client"
                        class="inline-block align-middle rounded-full w-10 h-6 mr-1 bg-red-800 cursor-pointer hover:bg-red-700 transition-all">
                        <div class="rounded-full w-4 h-4 m-1 ml-5 bg-white"></div>
                      </div>
                      <div @click="enableClient(client)" v-if="client.enabled === false" title="Enable Client"
                        class="inline-block align-middle rounded-full w-10 h-6 mr-1 bg-gray-200 cursor-pointer hover:bg-gray-300 transition-all">
                        <div class="rounded-full w-4 h-4 m-1 bg-white"></div>
                      </div>
  
                      <!-- Show QR-->
                      <button class="align-middle bg-gray-100 hover:bg-red-800 hover:text-white p-2 rounded transition"
                        title="Show QR Code" @click="qrcode = `./api/wireguard/client/${client.id}/qrcode.svg`">
                        <svg class="w-5" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"
                          stroke="currentColor">
                          <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
                            d="M12 4v1m6 11h2m-6 0h-2v4m0-11v3m0 0h.01M12 12h4.01M16 20h4M4 12h4m12 0h.01M5 8h2a1 1 0 001-1V5a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1zm12 0h2a1 1 0 001-1V5a1 1 0 00-1-1h-2a1 1 0 00-1 1v2a1 1 0 001 1zM5 20h2a1 1 0 001-1v-2a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1z" />
                        </svg>
                      </button>
  
                      <!-- Download Config -->
                      <a :href="'./api/wireguard/client/' + client.id + '/configuration'" download
                        class="align-middle inline-block bg-gray-100 hover:bg-red-800 hover:text-white p-2 rounded transition"
                        title="Download Configuration">
                        <svg class="w-5" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"
                          stroke="currentColor">
                          <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
                            d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4" />
                        </svg>
                      </a>
  
                      <!-- Delete -->
                      <button class="align-middle bg-gray-100 hover:bg-red-800 hover:text-white p-2 rounded transition"
                        title="Delete Client" @click="clientDelete = client">
                        <svg class="w-5" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
                          <path fill-rule="evenodd"
                            d="M9 2a1 1 0 00-.894.553L7.382 4H4a1 1 0 000 2v10a2 2 0 002 2h8a2 2 0 002-2V6a1 1 0 100-2h-3.382l-.724-1.447A1 1 0 0011 2H9zM7 8a1 1 0 012 0v6a1 1 0 11-2 0V8zm5-1a1 1 0 00-1 1v6a1 1 0 102 0V8a1 1 0 00-1-1z"
                            clip-rule="evenodd" />
                        </svg>
                      </button>
                    </div>
                  </div>
  
                </div>
  
              </div>
              <div v-if="clients && clients.length === 0">
                <p class="text-center m-10 text-gray-400 text-sm">There are no clients yet.<br /><br />
                  <button @click="clientCreate = true; clientCreateName = '';"
                    class="bg-red-800 text-white hover:bg-red-700 border-2 border-none py-2 px-4 rounded inline-flex items-center transition">
                    <svg class="w-4 mr-2" inline xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"
                      stroke="currentColor">
                      <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
                        d="M12 6v6m0 0v6m0-6h6m-6 0H6" />
                    </svg>
                    <span class="text-sm">New Client</span>
                  </button>
                </p>
              </div>
              <div v-if="clients === null" class="text-gray-200 p-5">
                <svg class="w-5 animate-spin mx-auto" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"
                  fill="currentColor">
                  <circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
                  <path class="opacity-75" fill="currentColor"
                    d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z">
                  </path>
                </svg>
              </div>
            </div>
          </div>
  
          <!-- QR Code-->
          <div v-if="qrcode">
            <div class="bg-black bg-opacity-50 fixed top-0 right-0 left-0 bottom-0 flex items-center justify-center z-20">
              <div class="bg-white rounded-md shadow-lg relative p-8">
                <button @click="qrcode = null" class="absolute right-4 top-4 text-gray-600 hover:text-gray-800">
                  <svg class="w-8" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"
                    stroke="currentColor">
                    <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
                  </svg>
                </button>
                <img :src="qrcode" />
              </div>
            </div>
          </div>
  
          <!-- Create Dialog -->
          <div v-if="clientCreate" class="fixed z-10 inset-0 overflow-y-auto">
            <div class="flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0">
              <!--
          Background overlay, show/hide based on modal state.
  
          Entering: "ease-out duration-300"
            From: "opacity-0"
            To: "opacity-100"
          Leaving: "ease-in duration-200"
            From: "opacity-100"
            To: "opacity-0"
        -->
              <div class="fixed inset-0 transition-opacity" aria-hidden="true">
                <div class="absolute inset-0 bg-gray-500 opacity-75"></div>
              </div>
  
              <!-- This element is to trick the browser into centering the modal contents. -->
              <span class="hidden sm:inline-block sm:align-middle sm:h-screen" aria-hidden="true">&#8203;</span>
              <!--
          Modal panel, show/hide based on modal state.
  
          Entering: "ease-out duration-300"
            From: "opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95"
            To: "opacity-100 translate-y-0 sm:scale-100"
          Leaving: "ease-in duration-200"
            From: "opacity-100 translate-y-0 sm:scale-100"
            To: "opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95"
        -->
              <div
                class="inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full"
                role="dialog" aria-modal="true" aria-labelledby="modal-headline">
                <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4">
                  <div class="sm:flex sm:items-start">
                    <div
                      class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-red-800 sm:mx-0 sm:h-10 sm:w-10">
                      <svg class="h-6 w-6 text-white" inline xmlns="http://www.w3.org/2000/svg" fill="none"
                        viewBox="0 0 24 24" stroke="currentColor">
                        <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
                          d="M12 6v6m0 0v6m0-6h6m-6 0H6" />
                      </svg>
                    </div>
                    <div class="flex-grow mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left">
                      <h3 class="text-lg leading-6 font-medium text-gray-900" id="modal-headline">
                        New Client
                      </h3>
                      <div class="mt-2">
                        <p class="text-sm text-gray-500">
                          <input class="rounded p-2 border-2 border-gray-100 focus:border-gray-200 outline-none w-full"
                            type="text" v-model.trim="clientCreateName" placeholder="Name" />
                        </p>
                      </div>
                    </div>
                  </div>
                </div>
                <div class="bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse">
                  <button v-if="clientCreateName.length" type="button" @click="createClient(); clientCreate = null"
                    class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-800 text-base font-medium text-white hover:bg-red-700 focus:outline-none sm:ml-3 sm:w-auto sm:text-sm">
                    Create
                  </button>
                  <button v-else type="button"
                    class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-gray-200 text-base font-medium text-white sm:ml-3 sm:w-auto sm:text-sm cursor-not-allowed">
                    Create
                  </button>
                  <button type="button" @click="clientCreate = null"
                    class="mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-base font-medium text-gray-700 hover:bg-gray-50 focus:outline-none sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm">
                    Cancel
                  </button>
                </div>
              </div>
            </div>
          </div>
  
          <!-- Delete Dialog -->
          <div v-if="clientDelete" class="fixed z-10 inset-0 overflow-y-auto">
            <div class="flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0">
              <!--
          Background overlay, show/hide based on modal state.
  
          Entering: "ease-out duration-300"
            From: "opacity-0"
            To: "opacity-100"
          Leaving: "ease-in duration-200"
            From: "opacity-100"
            To: "opacity-0"
        -->
              <div class="fixed inset-0 transition-opacity" aria-hidden="true">
                <div class="absolute inset-0 bg-gray-500 opacity-75"></div>
              </div>
  
              <!-- This element is to trick the browser into centering the modal contents. -->
              <span class="hidden sm:inline-block sm:align-middle sm:h-screen" aria-hidden="true">&#8203;</span>
              <!--
          Modal panel, show/hide based on modal state.
  
          Entering: "ease-out duration-300"
            From: "opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95"
            To: "opacity-100 translate-y-0 sm:scale-100"
          Leaving: "ease-in duration-200"
            From: "opacity-100 translate-y-0 sm:scale-100"
            To: "opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95"
        -->
              <div
                class="inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full"
                role="dialog" aria-modal="true" aria-labelledby="modal-headline">
                <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4">
                  <div class="sm:flex sm:items-start">
                    <div
                      class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-red-100 sm:mx-0 sm:h-10 sm:w-10">
                      <!-- Heroicon name: outline/exclamation -->
                      <svg class="h-6 w-6 text-red-600" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"
                        stroke="currentColor" aria-hidden="true">
                        <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
                          d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" />
                      </svg>
                    </div>
                    <div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left">
                      <h3 class="text-lg leading-6 font-medium text-gray-900" id="modal-headline">
                        Delete Client
                      </h3>
                      <div class="mt-2">
                        <p class="text-sm text-gray-500">
                          Are you sure you want to delete <strong>{{clientDelete.name}}</strong>?
                          This action cannot be undone.
                        </p>
                      </div>
                    </div>
                  </div>
                </div>
                <div class="bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse">
                  <button type="button" @click="deleteClient(clientDelete); clientDelete = null"
                    class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 sm:ml-3 sm:w-auto sm:text-sm">
                    Delete
                  </button>
                  <button type="button" @click="clientDelete = null"
                    class="mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-base font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm">
                    Cancel
                  </button>
                </div>
              </div>
            </div>
          </div>
        </div>
  
        <div v-if="authenticated === false">
          <h1 class="text-4xl font-medium my-16 text-gray-700 text-center">WireGuard</h1>
  
          <form @submit="login" class="shadow rounded-md bg-white mx-auto w-64 p-5 overflow-hidden mt-10">
            <!-- Avatar -->
            <div class="h-20 w-20 mb-10 mt-5 mx-auto rounded-full bg-red-800 relative overflow-hidden">
              <svg class="w-10 h-10 m-5 text-white" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"
                fill="currentColor">
                <path fill-rule="evenodd" d="M10 9a3 3 0 100-6 3 3 0 000 6zm-7 9a7 7 0 1114 0H3z" clip-rule="evenodd" />
              </svg>
            </div>
  
            <input type="password" name="password" placeholder="Password" v-model="password"
              class="px-3 py-2 text-sm text-gray-500 mb-5 border-2 border-gray-100 rounded-lg w-full focus:border-red-800 outline-none" />
  
            <button v-if="authenticating"
              class="bg-red-800 w-full rounded shadow py-2 text-sm text-white cursor-not-allowed">
              <svg class="w-5 animate-spin mx-auto" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"
                fill="currentColor">
                <circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
                <path class="opacity-75" fill="currentColor"
                  d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z">
                </path>
              </svg>
            </button>
            <input v-if="!authenticating && password" type="submit"
              class="bg-red-800 w-full rounded shadow py-2 text-sm text-white hover:bg-red-700 transition cursor-pointer"
              value="Sign In">
            <input v-if="!authenticating && !password" type="submit"
              class="bg-gray-200 w-full rounded shadow py-2 text-sm text-white cursor-not-allowed" value="Sign In">
          </form>
        </div>
  
        <div v-if="authenticated === null" class="text-gray-300 pt-24 pb-12">
  
          <svg class="w-5 animate-spin mx-auto" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"
            fill="currentColor">
            <circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
            <path class="opacity-75" fill="currentColor"
              d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z">
            </path>
          </svg>
  
        </div>
  
      </div>
  
      <p v-cloak class="text-center m-10 text-gray-300 text-xs">Made by <a target="_blank" class="hover:underline"
          href="https://emilenijssen.nl/?ref=wg-easy">Emile Nijssen</a> · <a class="hover:underline"
          href="https://github.com/sponsors/WeeJeWel" target="_blank">Donate</a> · <a class="hover:underline"
          href="https://github.com/weejewel/wg-easy" target="_blank">GitHub</a></p>
  
  
    </div>
  
    <script src="./js/vendor/vue.min.js"></script>
    <script src="./js/vendor/md5.min.js"></script>
    <script src="./js/vendor/timeago.min.js"></script>
    <script src="./js/api.js"></script>
    <script src="./js/app.js"></script>
  </body>
  
  </html>
services.name: http://190.247.11.127:51821/./img/favicon.png
services.name: http://190.247.11.127:51821/./img/apple-touch-icon.png
services.body_hash_sha1: sha1:5a593eab46e6eec5f7a6dbd4bab36ed95c9e594a
services.supported_versions: HTTP/1.1
[binary data, 123 values, 3,433 bytes]