Files
grin-web-wallet/index.html
2024-12-20 18:08:44 -08:00

2780 lines
156 KiB
HTML
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
// Included files
require_once __DIR__ . "/backend/common.php";
require_once __DIR__ . "/backend/language.php";
require_once __DIR__ . "/backend/resources.php";
// Constants
// Language
$language = getLanguage();
// Year
$year = getYear();
// Is crawler
$isCrawler = array_key_exists("HTTP_USER_AGENT", $_SERVER) === TRUE && is_string($_SERVER["HTTP_USER_AGENT"]) === TRUE && mb_stristr($_SERVER["HTTP_USER_AGENT"], "googlebot") !== FALSE;
// Main function
// Set content language header
header("Content-Language: " . $language);
?><!DOCTYPE html>
<html class="translatable" lang="<?= encodeString($language); ?>" dir="<?= encodeString(getConstant("Direction")); ?>">
<head>
<meta charset="UTF-8">
<?php
// Go through all available languages
foreach(getAvailableLanguages() as $languageIdentifier => $availableLanguage) {
// Display language alternative page
echo "<link rel=\"alternate\" hreflang=\"" . encodeString($languageIdentifier) . "\" href=\"http" . ((array_key_exists("HTTPS", $_SERVER) === TRUE && $_SERVER["HTTPS"] === "on") ? "s" : "") . "://" . rawurlencode($_SERVER["SERVER_NAME"]) . "/?" . urlencode("Language") . "=" . urlencode($languageIdentifier) . "\">";
// Check if available language has an extension locale code that's not the same as its language identifier
if(array_key_exists("Constants", $availableLanguage) === TRUE && array_key_exists("Extension Locale Code", $availableLanguage["Constants"]) === TRUE && $availableLanguage["Constants"]["Extension Locale Code"] !== $languageIdentifier) {
// Display language alternative page
echo "<link rel=\"alternate\" hreflang=\"" . encodeString($availableLanguage["Constants"]["Extension Locale Code"]) . "\" href=\"http" . ((array_key_exists("HTTPS", $_SERVER) === TRUE && $_SERVER["HTTPS"] === "on") ? "s" : "") . "://" . rawurlencode($_SERVER["SERVER_NAME"]) . "/?" . urlencode("Language") . "=" . urlencode($languageIdentifier) . "\">";
}
}
?>
<link rel="alternate" hreflang="x-default" href="<?= "http" . ((array_key_exists("HTTPS", $_SERVER) === TRUE && $_SERVER["HTTPS"] === "on") ? "s" : "") . "://" . rawurlencode($_SERVER["SERVER_NAME"]) . "/"; ?>">
<link rel="canonical" href="<?= "http" . ((array_key_exists("HTTPS", $_SERVER) === TRUE && $_SERVER["HTTPS"] === "on") ? "s" : "") . "://" . rawurlencode($_SERVER["SERVER_NAME"]) . "/" . (($language !== DEFAULT_LANGUAGE) ? "?" . urlencode("Language") . "=" . urlencode($language) : ""); ?>">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<script>
// Use strict
"use strict";
// Constants
// Index not found
var INDEX_NOT_FOUND = -1;
// Scroll tolerance
var SCROLL_TOLERANCE = 2;
// Show loading delay milliseconds
var SHOW_LOADING_DELAY_MILLISECONDS = 100;
// Global variables
// Loading error occurred
var loadingErrorOccurred = false;
// Script error occurred
var scriptErrorOccurred = false;
// DOM content loaded
var domContentLoaded = false;
// Error shown
var errorShown = false;
// Use application error handler
var useApplicationErrorHandler = false;
// Supporting function implementation
// Array index
function arrayIndex(array, value) {
// Go through all values in the array
for(var i = 0; i < array["length"]; ++i)
// Check if array value matches the value
if(array[i] === value)
// Return index
return i;
// Return index not found
return INDEX_NOT_FOUND;
}
// Add event
function addEvent(element, event, callback) {
// Check if element add event listener is supported
if(typeof element.addEventListener !== "undefined")
// Add event listener to the element
element.addEventListener(event, callback);
// Otherwise check if element attach event is supported
else if(typeof element.attachEvent !== "undefined")
// Attach event to the element
element.attachEvent("on" + event, callback);
}
// Add class
function addClass(element, className) {
// Check if element has no classes
if(typeof element["className"] === "undefined" || element["className"] === null || element["className"]["length"] === 0)
// Set element's classes to class
element["className"] = className;
// Otherwise
else {
// Get all of the element's classes
var classes = element["className"].split(" ");
// Check if element doesn't already have the class
if(arrayIndex(classes, className) === INDEX_NOT_FOUND)
// Append class to element's classes
element["className"] += " " + className;
}
}
// Remove class
function removeClass(element, className) {
// Check if element has classes
if(typeof element["className"] !== "undefined" && element["className"] !== null && element["className"]["length"] !== 0) {
// Get all of the element's classes
var classes = element["className"].split(" ");
// Check if element has the class
var classIndex = arrayIndex(classes, className);
if(classIndex !== INDEX_NOT_FOUND) {
// Remove class from classes
classes.splice(classIndex, 1);
// Set element's classes to changed classes
element["className"] = classes.join(" ");
}
}
}
// Has class
function hasClass(element, className) {
// Check if element has classes
if(typeof element["className"] !== "undefined" && element["className"] !== null && element["className"]["length"] !== 0) {
// Get all of the element's classes
var classes = element["className"].split(" ");
// Check if element has the class
var classIndex = arrayIndex(classes, className);
if(classIndex !== INDEX_NOT_FOUND)
// Return true
return true;
}
// Return false
return false;
}
// Get element
function getElement(parent, tagName, className) {
// Get all elements with the tag name
var elements = parent.getElementsByTagName(tagName);
// Go through all elements with the tag name
for(var i = 0; i < elements["length"]; ++i)
// Check if element has the class
if(hasClass(elements[i], className) === true)
// Return element
return elements[i];
}
// Escape HTML
function escapeHtml(string) {
// Initialize result
var result = "";
// Go through all characters in the string
for(var i = 0; i < string["length"]; ++i) {
// Check if character is a less than
if(string.charAt(i) === "<")
// Append less than HTML entity to result
result += "&lt;";
// Otherwise check if character is a greater than
else if(string.charAt(i) === ">")
// Append greater than HTML entity to result
result += "&gt;";
// Otherwise check if character is an ampersand
else if(string.charAt(i) === "&")
// Append ampersand HTML entity to result
result += "&amp;";
// Otherwise
else
// Append character to result
result += string.charAt(i);
}
// Return result
return result;
}
// On resize
function onResize() {
// Get message display
var messageDisplay = getElement(document, "aside", "message");
// Get message display text
var messageDisplayText = messageDisplay.getElementsByTagName("p")[0];
// Check if message display is shown
if(hasClass(messageDisplay, "hide") === false || hasClass(messageDisplay, "noScriptShow") === true) {
// Check if message display text has scroll bars
if(messageDisplayText["scrollHeight"] > messageDisplayText["clientHeight"]) {
// Add message display text separator
addClass(messageDisplayText["parentNode"], "separate");
// Check if message display text's offset width is supported
if(typeof messageDisplayText["offsetWidth"] !== "undefined" && messageDisplayText["offsetWidth"] !== null) {
// Get scrollbar width
var scrollbarWidth = messageDisplayText["offsetWidth"] - messageDisplayText["clientWidth"] + "px";
// Set message display arrows margin to scrollbar width
getElement(messageDisplay, "span", "upArrow")["style"]["marginRight"] = scrollbarWidth;
getElement(messageDisplay, "span", "downArrow")["style"]["marginRight"] = scrollbarWidth;
}
// Otherwise
else {
// Set message display arrows margin to a safe value
addClass(getElement(messageDisplay, "span", "upArrow"), "safeMargin");
addClass(getElement(messageDisplay, "span", "downArrow"), "safeMargin");
}
}
// Otherwise
else
// Remove message display text separator
removeClass(messageDisplayText["parentNode"], "separate");
}
// Otherwise
else
// Remove message display text separator
removeClass(messageDisplayText["parentNode"], "separate");
// Scroll message display text to add or remove arrows
onScroll();
}
// On scroll
function onScroll() {
// Get message display text
var messageDisplayText = getElement(document, "aside", "message").getElementsByTagName("p")[0];
// Check if message display text's scroll top is supported
if(typeof messageDisplayText["scrollTop"] !== "undefined" && messageDisplayText["scrollTop"] !== null) {
// Check if scrolled to the top
if(messageDisplayText["scrollTop"] <= 0)
// Hide scroll up arrow
removeClass(messageDisplayText["parentNode"], "scrollUp");
// Otherwise
else
// Show scroll up arrow
addClass(messageDisplayText["parentNode"], "scrollUp");
// Check if scrolled to the bottom
if(Math.abs(messageDisplayText["scrollHeight"] - messageDisplayText["clientHeight"] - messageDisplayText["scrollTop"]) <= SCROLL_TOLERANCE || messageDisplayText["scrollHeight"] - messageDisplayText["scrollTop"] <= messageDisplayText["clientHeight"]) {
// Hide scroll down arrow
removeClass(messageDisplayText["parentNode"], "scrollDown");
}
// Otherwise
else {
// Show scroll down arrow
addClass(messageDisplayText["parentNode"], "scrollDown");
}
}
// Otherwise
else {
// Hide scroll up arrow
removeClass(messageDisplayText["parentNode"], "scrollUp");
// Hide scroll down arrow
removeClass(messageDisplayText["parentNode"], "scrollDown");
}
}
// Is extension
function isExtension() {
// Return if extension
return typeof location !== "undefined" && location["protocol"]["length"] > "-extension:"["length"] && location["protocol"].substring(location["protocol"]["length"] - "-extension:"["length"]) === "-extension:";
}
// Is app
function isApp() {
// Return if app
return isExtension() === false && ((typeof navigator === "object" && navigator !== null && "standalone" in navigator === true && navigator["standalone"] === true) || (typeof matchMedia === "function" && matchMedia("(display-mode: standalone)")["matches"] === true));
}
// Show error
function showError() {
// Check if error hasn't been shown and not using the application error handler
if(errorShown === false && useApplicationErrorHandler === false) {
// Set error shown
errorShown = true;
// Get body
var body = getElement(document, "body", "loading");
// Hide loading
removeClass(body, "loading");
// Get message display
var messageDisplay = getElement(document, "aside", "message");
// Get message display text
var messageDisplayText = messageDisplay.getElementsByTagName("p")[0];
// Window resize event
addEvent(window, "resize", onResize);
// Message display text scroll event
addEvent(messageDisplayText, "scroll", onScroll);
// Resize window
onResize();
// Check if a loading error occurred
if(loadingErrorOccurred === true) {
<?php
// Check if crawler
if($isCrawler === TRUE) {
?>
// Set header message
var headerMessage = "<?= escapeString(getTranslation('MWC Wallet')); ?>";
// Set header text
var headerText = "<?= escapeString(getDefaultTranslation('MWC Wallet')); ?>";
// Set text message
var textMessage = "<?= escapeString(getTranslation('MWC Wallet is a self-custodial web wallet that allows you to manage your MimbleWimble Coin in your web browser.')); ?>";
// Set text text
var textText = "<?= escapeString(getDefaultTranslation('MWC Wallet is a self-custodial web wallet that allows you to manage your MimbleWimble Coin in your web browser.')); ?>";
<?php
}
// Otherwise
else {
?>
// Set header message
var headerMessage = "<?= escapeString(getTranslation('Loading Error')); ?>";
// Set header text
var headerText = "<?= escapeString(getDefaultTranslation('Loading Error')); ?>";
// Check if is an app
if(isApp() === true) {
// Set text message
var textMessage = "<?= escapeString(getTranslation('Failed to load resources. Restart this app to try again.')); ?>";
// Set text text
var textText = "<?= escapeString(getDefaultTranslation('Failed to load resources. Restart this app to try again.')); ?>";
}
// Otherwise
else {
// Set text message
var textMessage = "<?= escapeString(getTranslation('Failed to load resources. Refresh this site to try again.')); ?>";
// Set text text
var textText = "<?= escapeString(getDefaultTranslation('Failed to load resources. Refresh this site to try again.')); ?>";
}
<?php
}
?>
}
// Otherwise check if a script error occurred
else if(scriptErrorOccurred === true) {
// Set header message
var headerMessage = "<?= escapeString(getTranslation('Compatibility Error')); ?>";
// Set header text
var headerText = "<?= escapeString(getDefaultTranslation('Compatibility Error')); ?>";
// Set text message
var textMessage = "<?= escapeString(getTranslation('Your browser isn\'t compatible. Update your browser to continue.')); ?>";
// Set text text
var textText = "<?= escapeString(getDefaultTranslation('Your browser isn\'t compatible. Update your browser to continue.')); ?>";
}
// Get loading display
var loadingDisplay = getElement(document, "div", "loading");
// Get message display header
var messageDisplayHeader = messageDisplay.getElementsByTagName("h2")[0];
// Set message display header message
messageDisplayHeader["innerHTML"] = escapeHtml(headerMessage);
// Check if message display header dataset is supported
if(typeof messageDisplayHeader["dataset"] !== "undefined")
// Set message display header dataset text
messageDisplayHeader["dataset"]["text"] = headerText;
// Get message display text content
var messageDisplayTextContent = getElement(messageDisplayText, "span", "text").getElementsByTagName("span")[0];
// Set message display text content message
messageDisplayTextContent["innerHTML"] = escapeHtml(textMessage);
// Check if message display text content dataset is supported
if(typeof messageDisplayTextContent["dataset"] !== "undefined")
// Set message display text content dataset text
messageDisplayTextContent["dataset"]["text"] = textText;
// Set timeout
setTimeout(function() {
// Check if message display text's scroll top is supported
if(typeof messageDisplayText["scrollTop"] !== "undefined" && messageDisplayText["scrollTop"] !== null)
// Scroll to the top of message display text
messageDisplayText["scrollTop"] = 0;
// Show message display
removeClass(messageDisplay, "hide");
// Prevent message display arrows from fading
addClass(messageDisplay, "noArrowTransition");
// Resize window to add or remove text separator
onResize();
// Allow message display arrows to fade
removeClass(messageDisplay, "noArrowTransition");
// Hide loading display spinner
addClass(getElement(loadingDisplay, "div", "spinner"), "hide");
}, SHOW_LOADING_DELAY_MILLISECONDS);
// Check if history is supported and URL query string exists
if(typeof history === "object" && history !== null && typeof URL_QUERY_STRING !== "undefined") {
// Change displayed URL to include the query string
history.replaceState(NO_STATE, document["title"], ((location["protocol"] === "file:") ? location["protocol"] + "//" : "") + location["pathname"] + URL_QUERY_STRING);
}
}
}
// Startup error occurred
function startupErrorOccurred() {
// Return if a loading or script error occurred
return loadingErrorOccurred === true || scriptErrorOccurred === true;
}
// Process loading error
function processLoadingError(element, failed) {
// Check if resource failed to load
if(failed === true || (typeof element["sheet"] !== "undefined" && element["sheet"] !== null && typeof element["sheet"]["cssRules"] !== "undefined" && element["sheet"]["cssRules"] !== null && element["sheet"]["cssRules"]["length"] === 0)) {
// Check if not using the application error handler
if(useApplicationErrorHandler === false) {
// Set loading error occurred
loadingErrorOccurred = true;
}
// Check if DOM content was already loaded
if(domContentLoaded === true)
// Show error
showError();
}
}
// Enable application error handler
function enableApplicationErrorHandler() {
// Set use application error handler
useApplicationErrorHandler = true;
}
// Using application error handler
function usingApplicationErrorHandler() {
// Return if using application error handler
return useApplicationErrorHandler === true;
}
// Main function
// Log message
console.log("%c%s", "color: red; font-size: 30px; text-transform: uppercase;", "<?= escapeString(getTranslation('If someone asked you to copy/paste something here you are being scammed!!!')); ?>");
// Make older browsers aware of newer tags
document.createElement("aside");
document.createElement("section");
// Window error event
addEvent(window, "error", function() {
// Check if not using the application error handler
if(useApplicationErrorHandler === false) {
// Set script error occurred
scriptErrorOccurred = true;
}
// Check if DOM content was already loaded
if(domContentLoaded === true)
// Show error
showError();
});
// Document ready state change event
addEvent(document, "readystatechange", function(event) {
// Check if document is complete
if(document["readyState"] === "complete") {
// Check if DOM content hasn't already loaded
if(domContentLoaded === false) {
// Set DOM content loaded
domContentLoaded = true;
// Check if a startup error occurred
if(startupErrorOccurred() === true)
// Show error
showError();
}
}
});
</script>
<link rel="preload" as="image" href="<?= encodeString(getResource("./images/logo_big.svg")); ?>" onerror="processLoadingError(this, true);" type="image/svg+xml">
<link rel="preload" as="image" href="<?= encodeString(getResource("./images/logo_small.svg")); ?>" onerror="processLoadingError(this, true);" type="image/svg+xml">
<link rel="preload" as="font" href="<?= encodeString(getResource("./fonts/open_sans/open_sans-1.10.woff2")); ?>" onerror="processLoadingError(this, true);" type="font/woff2" crossorigin="anonymous">
<link rel="preload" as="font" href="<?= encodeString(getResource("./fonts/open_sans/open_sans_semibold-1.10.woff2")); ?>" onerror="processLoadingError(this, true);" type="font/woff2" crossorigin="anonymous">
<link rel="preload" as="font" href="<?= encodeString(getResource("./fonts/mwc/mwc.woff2")); ?>" onerror="processLoadingError(this, true);" type="font/woff2" crossorigin="anonymous">
<link rel="preload" as="font" href="<?= encodeString(getResource("./fonts/grin/grin.woff2")); ?>" onerror="processLoadingError(this, true);" type="font/woff2" crossorigin="anonymous">
<link rel="preload" as="font" href="<?= encodeString(getResource("./fonts/epic/epic.woff2")); ?>" onerror="processLoadingError(this, true);" type="font/woff2" crossorigin="anonymous">
<link rel="preload" as="font" href="<?= encodeString(getResource("./fonts/btc/btc.woff2")); ?>" onerror="processLoadingError(this, true);" type="font/woff2" crossorigin="anonymous">
<link rel="preload" as="font" href="<?= encodeString(getResource("./fonts/eth/eth.woff2")); ?>" onerror="processLoadingError(this, true);" type="font/woff2" crossorigin="anonymous">
<link rel="preload" as="image" href="<?= encodeString(getResource("./images/circle.svg")); ?>" onerror="processLoadingError(this, true);" type="image/svg+xml">
<link rel="preload" as="image" href="<?= encodeString(getResource("./images/down_arrow.svg")); ?>" onerror="processLoadingError(this, true);" type="image/svg+xml">
<link rel="stylesheet" type="text/css" href="<?= encodeString(getResource("./styles/normalize.css-8.0.1.css")); ?>" integrity="<?= encodeString(getChecksum("./styles/normalize.css-8.0.1.css")); ?>" onerror="processLoadingError(this, true);" onload="processLoadingError(this);">
<link rel="stylesheet" type="text/css" href="<?= encodeString(getResource("./fonts/open_sans/open_sans.css")); ?>" integrity="<?= encodeString(getChecksum("./fonts/open_sans/open_sans.css")); ?>" onerror="processLoadingError(this, true);" onload="processLoadingError(this);">
<link rel="stylesheet" type="text/css" href="<?= encodeString(getResource("./fonts/font_awesome/font_awesome.css")); ?>" integrity="<?= encodeString(getChecksum("./fonts/font_awesome/font_awesome.css")); ?>" onerror="processLoadingError(this, true);" onload="processLoadingError(this);">
<style>
.hide {
display: none;
}
* {
touch-action: none;
}
p, li, h2, h3 {
cursor: default;
}
::selection {
background: #D4B7F2;
}
.scrollable, .scrollable * {
touch-action: pan-y;
}
:focus {
outline: none !important;
}
::-ms-reveal, ::-ms-clear {
display: none !important;
}
::-webkit-caps-lock-indicator, ::-webkit-credentials-auto-fill-button {
display: none !important;
width: 0 !important;
margin: 0 !important;
}
::-moz-focus-inner {
border: 0 !important;
}
select:-moz-focusring {
color: transparent !important;
-moz-text-shadow: 0 0 0 white !important;
text-shadow: 0 0 0 white !important;
}
[draggable] {
-ms-user-select: none;
-mox-user-select: none;
-webkit-user-select: none;
-o-user-select: none;
user-select: none;
cursor: move;
}
@viewport {
zoom: 1.0;
width: device-width;
}
html {
margin: 0;
padding: 0;
height: 100%;
}
body {
white-space: normal;
white-space: break-spaces;
padding: 0;
width: 100%;
margin: auto;
font-family: "Open Sans", Arial, sans-serif;
height: 100%;
position: fixed;
-moz-user-select: none;
-webkit-user-select: none;
-o-user-select: none;
-ms-user-select: none;
user-select: none;
-webkit-tap-highlight-color: transparent;
-webkit-touch-callout: none;
top: 0;
left: 0;
background: #7A00D9;
background: linear-gradient(to right, #9E00E7, #3600C9);
min-width: 250px;
min-height: 350px;
overflow: hidden;
font-size: 100%;
-webkit-font-smoothing: antialiased;
}
body.loading, body.loading * {
cursor: wait !important;
}
body > div {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
position: relative;
min-height: 0;
align-items: center;
}
body > div > div {
align-items: center;
height: 100%;
position: relative;
top: 0;
left: 0;
padding: 0;
margin: 0 auto;
flex-grow: 0;
display: flex;
flex-direction: column;
width: 100%;
justify-content: center;
min-height: 0;
}
main {
height: 100%;
width: 100%;
overflow: hidden;
display: flex;
flex-direction: column;
align-items: center;
position: relative;
}
main > div {
height: 100%;
display: flex;
justify-content: center;
flex-direction: column;
width: calc(100% - 4em);
margin: auto;
max-height: 900px;
align-items: center;
position: relative;
}
main > div > div {
height: 100%;
display: flex;
justify-content: center;
flex-direction: column;
width: 100%;
max-width: 30em;
margin: auto;
}
main > div > div > div.logo {
background-image: url("<?= encodeString(getResource("./images/logo_big.svg")); ?>");
background-size: 100%;
background-repeat: no-repeat;
background-position: center;
flex-grow: 1;
visibility: visible;
opacity: 1;
transition: opacity 0.15s ease-in-out, visibility 0.15s ease-in-out;
}
main > div > div > div.logo.hide {
display: block;
visibility: hidden;
opacity: 0;
}
@media only screen and (max-width: 500px) {
main > div > div > div.logo {
background-image: url("<?= encodeString(getResource("./images/logo_small.svg")); ?>");
background-size: 59%;
}
}
@media only screen and (max-width: 450px) {
main > div > div > div.logo {
background-image: url("<?= encodeString(getResource("./images/logo_small.svg")); ?>");
background-size: 50%;
}
}
@media only screen and (max-height: 800px) {
main > div > div > div.logo {
background-image: url("<?= encodeString(getResource("./images/logo_small.svg")); ?>");
background-size: 50%;
}
}
@media only screen and (min-width: 451px) and (max-height: 800px) {
main > div > div > div.logo {
background-image: url("<?= encodeString(getResource("./images/logo_small.svg")); ?>");
background-size: 40%;
}
}
@media only screen and (max-width: 350px) {
main > div > div > div.logo {
background-size: 0%;
}
}
@media only screen and (max-height: 600px) {
main > div > div > div.logo {
background-size: 0%;
}
}
div.loading > div.spinner {
display: none;
display: flex;
flex-direction: column;
height: 50%;
visibility: visible;
opacity: 1;
transition: opacity 0.15s ease-in-out, visibility 0.15s ease-in-out;
align-items: center;
}
div.loading > div.spinner.hide {
display: flex;
visibility: hidden;
opacity: 0;
}
@media only screen and (max-height: 800px) {
div.loading > div.spinner {
height: 60%;
}
}
@media only screen and (max-width: 450px) {
div.loading > div.spinner {
height: 60%;
}
}
@media only screen and (max-height: 750px) {
div.loading > div.spinner {
height: 68%;
}
}
@media only screen and (max-width: 350px) {
div.loading > div.spinner {
height: 100%;
justify-content: center;
}
}
@media only screen and (max-height: 600px) {
div.loading > div.spinner {
height: 100%;
justify-content: center;
}
}
@keyframes spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
div.loading > div.spinner > div {
border: 0.7em solid white;
border-bottom: 0.7em solid #6D00D7;
border-bottom: 0.7em solid transparent;
border-right: 0.7em solid #6D00D7;
border-right: 0.7em solid transparent;
border-radius: 50%;
width: 4em;
height: 4em;
animation: spin 1.3s linear infinite;
margin-top: 7em;
}
@media only screen and (max-width: 350px) {
div.loading > div.spinner > div {
margin-top: 0;
}
}
@media only screen and (max-height: 600px) {
div.loading > div.spinner > div {
margin-top: 0;
}
}
div.loading > div.spinner > p {
text-overflow: ellipsis;
white-space: nowrap;
white-space: pre;
text-align: center;
overflow: hidden;
width: 100%;
margin: 0.6em 2em 0 2em;
color: white;
font-family: "Open Sans", Arial, sans-serif;
font-size: 19pt;
padding-bottom: 0.2em;
}
aside.message {
width: 100%;
height: 100%;
position: absolute;
z-index: 4;
top: 0;
left: 0;
display: table;
display: flex;
align-items: center;
background: rgba(0, 0, 0, 0.31);
visibility: visible;
opacity: 1;
transition: opacity 0.15s ease-in-out, visibility 0.15s ease-in-out;
}
aside.message.hide {
display: flex;
visibility: hidden;
opacity: 0;
pointer-events: none;
}
aside.message.hide * {
pointer-events: none;
}
aside.message > div {
width: calc(100% - 4em);
margin: auto;
padding: 0 2em;
display: table-cell;
vertical-align: middle;
display: flex;
max-width: 55em;
height: 100%;
align-items: center;
visibility: visible;
opacity: 1;
transition: opacity 0.15s ease-in-out, visibility 0.15s ease-in-out;
}
aside.message.noMessage > div {
visibility: hidden;
opacity: 0;
}
aside.message > div > div {
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-around;
margin: auto;
background: white;
box-shadow: 0 0 10px 3px rgba(0, 0, 0, 0.2);
width: 100%;
max-height: 70%;
max-width: 51em;
overflow: hidden;
}
@media only screen and (max-width: 500px) {
aside.message > div > div {
max-height: calc(100% - 4em);
}
}
@media only screen and (max-height: 600px) {
aside.message > div > div {
max-height: calc(100% - 4em);
}
}
aside.message > div > div > h2 {
font-weight: normal;
color: #3600C9;
font-size: 20pt;
margin: 0 2em 0.7em 2em;
padding-top: 1em;
white-space: nowrap;
white-space: pre;
overflow: hidden;
text-overflow: ellipsis;
max-width: calc(100% - 4em);
flex-shrink: 0;
line-height: 1.4em;
cursor: default;
text-align: center;
}
@media only screen and (max-width: 600px) {
aside.message > div > div > h2 {
font-size: 19pt;
}
}
@media only screen and (max-height: 400px) {
aside.message > div > div > h2 {
font-size: 19pt;
}
}
aside.message > div > div > p {
overflow-y: auto;
overflow-x: hidden;
min-height: 5.5em;
color: #3600C9;
font-size: 16pt;
text-align: center;
margin: 0;
width: 100%;
padding: 0.3em 0;
cursor: default;
flex-grow: 1;
position: relative;
z-index: 5;
scrollbar-width: thin;
}
@media only screen and (max-width: 600px) {
aside.message > div > div > p {
font-size: 15pt;
}
}
@media only screen and (max-height: 400px) {
aside.message > div > div > p {
min-height: 0.5em;
max-height: 5.5em;
font-size: 15pt;
height: 5.5em;
}
}
@media only screen and (max-width: 500px) {
aside.message > div > div > p {
font-size: 14pt;
}
}
aside.message.noButtons > div > div > p {
min-height: 2em;
}
aside.message > div > div.separate > p {
border-top: 0.15em solid #3600C9;
border-bottom: 0.15em solid #3600C9;
}
aside.message > div > div > span.upArrow, aside.message > div > div > span.downArrow {
font-family: "Font Awesome";
font-weight: bold;
position: relative;
align-self: stretch;
color: #3600C9;
display: none;
visibility: hidden;
opacity: 0;
transition: opacity 0.14s ease-in-out, visibility 0.14s ease-in-out;
margin-right: 0;
}
aside.message > div > div > span.upArrow.safeMargin, aside.message > div > div > span.downArrow.safeMargin {
margin-right: 20px;
}
aside.message.noArrowTransition > div > div > span.upArrow, aside.message.noArrowTransition > div > div > span.downArrow {
transition: none;
}
aside.message > div > div.separate > span.upArrow, aside.message > div > div.separate > span.downArrow {
display: block;
}
@media only screen and (max-height: 350px) {
aside.message > div > div.separate > span.upArrow {
display: none;
}
aside.message.noButtons > div > div.separate > span.upArrow {
display: block;
}
}
aside.message > div > div.scrollUp > span.upArrow, aside.message > div > div.scrollDown > span.downArrow {
visibility: visible;
opacity: 1;
}
@keyframes moveDown {
0% {
margin-top: 0;
}
50% {
margin-top: 3px;
}
100% {
margin-top: 0;
}
}
aside.message > div > div > span.upArrow::before, aside.message > div > div > span.downArrow::before {
content: "\F0DE";
position: absolute;
right: 0.3em;
top: 0.2em;
font-size: 26pt;
animation: moveDown 0.7s linear infinite;
}
@keyframes moveUp {
0% {
margin-top: 0;
}
50% {
margin-top: -3px;
}
100% {
margin-top: 0;
}
}
aside.message > div > div > span.downArrow::before {
top: -0.2em;
transform: rotateZ(180deg) translateY(100%);
animation: moveUp 0.7s linear infinite;
}
@media only screen and (max-width: 600px) {
aside.message > div > div.separate > span.upArrow::before, aside.message > div > div.separate > span.downArrow::before {
font-size: 23pt;
}
}
@media only screen and (max-height: 400px) {
aside.message > div > div.separate > span.upArrow::before, aside.message > div > div.separate > span.downArrow::before {
font-size: 23pt;
}
}
@media only screen and (max-width: 500px) {
aside.message > div > div.separate > span.upArrow::before, aside.message > div > div.separate > span.downArrow::before {
font-size: 20pt;
padding-top: 1px;
}
}
@media only screen and (max-width: 350px) {
aside.message > div > div.separate > span.upArrow::before, aside.message > div > div.separate > span.downArrow::before {
right: 0.1em;
}
}
aside.message > div > div > p > span.text {
margin: 0 2em;
display: block;
line-height: 1.4em;
padding: 0;
word-break: break-word;
}
@media only screen and (max-width: 350px) {
aside.message > div > div > p > span.text {
margin: 0 1em;
}
}
aside.message > div > div > p > span.text span.lineBreak {
display: block;
height: 0.5em;
}
aside.message > div > div > div {
display: flex;
flex-wrap: wrap;
justify-content: center;
margin: 0.6em 1em 0 1em;
flex-shrink: 0;
font-size: 16pt;
max-width: 100%;
}
aside.message.noButtons > div > div > div {
flex-wrap: nowrap;
height: 2em;
margin: 0;
padding: 0;
}
aside.message > div > div > div > button {
color: #3600C9;
margin: 0 1em 0.6em 1em;
background: white;
border: 0.15em solid #3600C9;
min-width: 7em;
line-height: 2.2em;
white-space: nowrap;
white-space: pre;
max-width: calc(100% - 4em);
flex-shrink: 0;
font-size: 16pt;
}
aside.message > div > div > div > button:disabled {
pointer-events: auto;
}
aside.message.hide > div > div > div > button {
pointer-events: none;
}
aside.message.noButtons > div > div > div > button {
display: block;
visibility: hidden;
margin: 0;
height: 2em;
padding: 0;
cursor: default;
}
@media only screen and (max-width: 500px) {
aside.message > div > div > div, aside.message > div > div > div > button {
font-size: 15pt;
}
}
@media only screen and (max-height: 400px) {
aside.message > div > div > div, aside.message > div > div > div > button {
font-size: 15pt;
}
}
</style>
<!--[if lt IE 8]>
<style>
div.loading {
display: none;
}
aside.message {
overflow: hidden;
}
aside.message > div > div {
margin-top: 10%;
}
aside.message.noScriptShow, aside.message.errorShow {
display: block;
}
button {
visibility: hidden;
}
</style>
<![endif]-->
<!--[if lte IE 8]>
<noscript>
<style>
body {
background: white;
}
body > div > div > div {
display: none;
}
div.maintenanceNotification, div.cookieAcceptance, div.installApp {
display: none;
}
body > div > div > div.message {
display: block;
margin: 1em;
}
body > div > div > div.message button {
display: none;
}
</style>
</noscript>
<![endif]-->
<noscript>
<style>
.noScriptHide {
display: none !important;
}
.noScriptShow {
display: flex !important;
visibility: visible !important;
opacity: 1 !important;
pointer-events: auto !important;
}
.noScriptShow * {
pointer-events: auto !important;
}
body.loading, body.loading * {
cursor: default !important;
}
</style>
</noscript>
<link class="translatable" rel="manifest" href="<?= encodeString(getResource("./site.webmanifest")); ?>" crossorigin="use-credentials">
<meta name="msapplication-config" content="<?= encodeString(getResource("./browserconfig.xml")); ?>">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-touch-fullscreen" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="default">
<meta name="msapplication-TileColor" content="<?= encodeString(BACKGROUND_COLOR); ?>">
<link rel="mask-icon" color="<?= encodeString(BACKGROUND_COLOR); ?>" href="<?= encodeString(getResource(MASK_IMAGE)); ?>">
<title class="translatable" data-text="<?= encodeString(getDefaultTranslation('MWC Wallet')); ?>"><?= encodeString(getTranslation('MWC Wallet')); ?></title>
<meta class="translatable" name="apple-mobile-web-app-title" data-text="<?= encodeString(getDefaultTranslation('MWC Wallet')); ?>" content="<?= encodeString(getTranslation('MWC Wallet')); ?>">
<meta class="translatable" name="application-name" data-text="<?= encodeString(getDefaultTranslation('MWC Wallet')); ?>" content="<?= encodeString(getTranslation('MWC Wallet')); ?>">
<meta class="translatable" name="msapplication-tooltip" data-text="<?= encodeString(getDefaultTranslation('MWC Wallet')); ?>" content="<?= encodeString(getTranslation('MWC Wallet')); ?>">
<meta name="msapplication-starturl" content="<?= "http" . ((array_key_exists("HTTPS", $_SERVER) === TRUE && $_SERVER["HTTPS"] === "on") ? "s" : "") . "://" . rawurlencode($_SERVER["SERVER_NAME"]) . "/"; ?>">
<meta class="translatable" name="description" data-text="<?= encodeString(getDefaultTranslation('MWC Wallet is a self-custodial web wallet that allows you to manage your MimbleWimble Coin in your web browser.')); ?>" content="<?= encodeString(getTranslation('MWC Wallet is a self-custodial web wallet that allows you to manage your MimbleWimble Coin in your web browser.')); ?>">
<meta class="translatable" name="author" data-text="<?= encodeString(getDefaultTranslation('Nicolas Flamel')); ?>" content="<?= encodeString(getTranslation('Nicolas Flamel')); ?>">
<link rel="schema.dcterms" href="http://purl.org/dc/terms/">
<meta class="translatable" name="dcterms.rightsHolder" data-text="<?= encodeString(getDefaultTranslation('Nicolas Flamel')); ?>" content="<?= encodeString(getTranslation('Nicolas Flamel')); ?>">
<?php
// Check if copyright year is newer than the copyright year
if($year > COPYRIGHT_YEAR) {
// Display copyright information with the current year
echo "<meta class=\"translatable\" name=\"dcterms.dateCopyrighted\" data-text=\"" . encodeString(getDefaultTranslation('%1$s%2$s')) . "\" data-arguments='" . escapeData([sprintf("%.0F", COPYRIGHT_YEAR), sprintf("%.0F", $year)]) . "' content=\"" . encodeString(getTranslation('%1$s%2$s', [getNumberTranslation(COPYRIGHT_YEAR), getNumberTranslation($year)])) . "\">";
echo "<meta class=\"translatable\" name=\"dcterms.rights\" data-text=\"" . encodeString(getDefaultTranslation('© %1$s%2$s Nicolas Flamel.')) . "\" data-arguments='" . escapeData([sprintf("%.0F", COPYRIGHT_YEAR), sprintf("%.0F", $year)]) . "' content=\"" . encodeString(getTranslation('© %1$s%2$s Nicolas Flamel.', [getNumberTranslation(COPYRIGHT_YEAR), getNumberTranslation($year)])) . "\">";
}
// Otherwise
else {
// Display copyright information with the copyright year
echo "<meta class=\"translatable\" name=\"dcterms.dateCopyrighted\" data-text=\"" . encodeString("%1\$s") . "\" data-arguments='" . escapeData([sprintf("%.0F", COPYRIGHT_YEAR)]) . "' content=\"" . encodeString(getTranslation("%1\$s", [getNumberTranslation(COPYRIGHT_YEAR)])) . "\">";
echo "<meta class=\"translatable\" name=\"dcterms.rights\" data-text=\"" . encodeString(getDefaultTranslation('© %1$s Nicolas Flamel.')) . "\" data-arguments='" . escapeData([sprintf("%.0F", COPYRIGHT_YEAR)]) . "' content=\"" . encodeString(getTranslation('© %1$s Nicolas Flamel.', [getNumberTranslation(COPYRIGHT_YEAR)])) . "\">";
}
// Display theme color
echo "<meta name=\"theme-color\" content=\"" . encodeString(THEME_COLOR) . "\">";
// Check if not crawler
if($isCrawler === FALSE) {
// Go through all touch icons
foreach(TOUCH_ICONS as $touchIcon) {
// Check if touch icon's parts aren't provided
if(count($touchIcon) !== count(TOUCH_ICON_PARTS))
// Display touch icon
echo "<link rel=\"apple-touch-icon\" href=\"" . encodeString(getResource($touchIcon[0])) . "\">";
// Otherwise
else
// Display touch icon
echo "<link rel=\"apple-touch-icon\" sizes=\"" . encodeString($touchIcon[TOUCH_ICON_PARTS["X Dimension"]]) . "x" . encodeString($touchIcon[TOUCH_ICON_PARTS["Y Dimension"]]) . "\" href=\"" . encodeString(getResource($touchIcon[TOUCH_ICON_PARTS["File Path"]])) . "\">";
}
}
// Go through all favicons
foreach(FAVICONS as $favicon) {
// Check if favicon's parts aren't provided
if(count($favicon) !== count(FAVICON_PARTS))
// Display favicon
echo "<link rel=\"icon\" type=\"image/x-icon\" href=\"" . encodeString(getResource($favicon[0])) . "\">";
// Otherwise
else
// Display favicon
echo "<link rel=\"icon\" type=\"image/png\" sizes=\"" . encodeString($favicon[FAVICON_PARTS["X Dimension"]]) . "x" . encodeString($favicon[FAVICON_PARTS["Y Dimension"]]) . "\" href=\"" . encodeString(getResource($favicon[FAVICON_PARTS["File Path"]])) . "\">";
}
// Go through all app icons
foreach(APP_ICONS as $appIcon) {
// Check if app icon's parts aren't provided
if(count($appIcon) !== count(APP_ICON_PARTS))
// Display app icon
echo "<link rel=\"icon\" type=\"image/svg+xml\" href=\"" . encodeString(getResource($appIcon[0])) . "\">";
// Otherwise check if app icon can be used as a favicon
else if($appIcon[APP_ICON_PARTS["Use As Favicon"]] === TRUE)
// Display app icon
echo "<link rel=\"icon\" type=\"image/png\" sizes=\"" . encodeString($appIcon[APP_ICON_PARTS["X Dimension"]]) . "x" . encodeString($appIcon[APP_ICON_PARTS["Y Dimension"]]) . "\" href=\"" . encodeString(getResource($appIcon[APP_ICON_PARTS["File Path"]])) . "\">";
}
// Go through all tile images
foreach(TILE_IMAGES as $tileImage)
// Display tile image
echo "<meta name=\"msapplication-" . encodeString(mb_strtolower($tileImage[TILE_IMAGE_PARTS["Ratio"]])) . encodeString($tileImage[TILE_IMAGE_PARTS["X Dimension"]]) . "x" . encodeString($tileImage[TILE_IMAGE_PARTS["Y Dimension"]]) . "logo\" content=\"" . encodeString(getResource($tileImage[TILE_IMAGE_PARTS["File Path"]])) . "\">";
?>
</head>
<body class="loading" spellcheck="false"><!--
--><div><!--
--><div><!--
--><section class="maintenanceNotification hide noFocus"><!--
--><div class="maintenanceNotification"><!--
--><span></span><!--
--><button><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('OK')); ?>"><?= encodeString(getTranslation('OK')); ?></span><!--
--></button><!--
--></div><!--
--></section><!--
--><main><!--
--><div class="language normalTransitionSpeed hide"><!--
--><div><!--
--><select tabindex="-1"><!--
--><?php
// Go through all available languages
foreach(getAvailableLanguages() as $languageIdentifier => $availableLanguage) {
// Display language currency option
echo "<option value=\"" . encodeString($languageIdentifier) . "\"" . (($language === $languageIdentifier) ? " selected=\"selected\" disabled=\"disabled\"" : "") . ">" . encodeString($availableLanguage["Constants"]["Language"]) . "</option>";
}
?><!--
--></select><!--
--><button><!--
--><span class="icon"></span><!--
--><span><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Language')); ?>"><?= encodeString(getTranslation('Language')); ?></span><!--
--></span><!--
--></button><!--
--><div class="scrollable hide"><!--
--><?php
// Go through all available languages
foreach(getAvailableLanguages() as $languageIdentifier => $availableLanguage) {
// Display available language button
echo "<button data-language=\"" . encodeString($languageIdentifier) . "\"" . (($language === $languageIdentifier) ? " disabled=\"disabled\"" : "") . "><img src=\"" . encodeString(getResource($availableLanguage["Constants"]["Image"])) . "\"><span>" . encodeString($availableLanguage["Constants"]["Language"]) . "</span></button>";
}
?><!--
--></div><!--
--></div><!--
--></div><!--
--><div class="locked"><!--
--><div class="logo hide notLoaded"><!--
--><canvas></canvas><!--
--></div><!--
--><div class="loading"><!--
--><div class="logo"></div><!--
--><div class="spinner"><!--
--><div class="noScriptHide"></div><!--
--><p class="noScriptHide translatable" data-text="<?= encodeString(getDefaultTranslation('Loading…')); ?>"><?= encodeString(getTranslation('Loading…')); ?></p><!--
--></div><!--
--></div><!--
--><div class="info hide"><!--
--></div><!--
--><div class="create hide"><!--
--><div class="logo"></div><!--
--><form class="hide"><!--
--><p class="verifySource translatable" data-text="<?= encodeString(getDefaultTranslation('If you paid to access MWC Wallet or received this wallet as part of a paid service then you\'ve been scammed and should demand your money back')); ?>"><?= encodeString(getTranslation('If you paid to access MWC Wallet or received this wallet as part of a paid service then you\'ve been scammed and should demand your money back')); ?></p><!--
--><input class="hide translatable" data-text="<?= encodeString(getDefaultTranslation('MWC Wallet')); ?>" type="hidden" name="Username" value="<?= encodeString(getTranslation('MWC Wallet')); ?>" autocomplete="off" autocapitalize="off" spellcheck="false"><!--
--><div><!--
--><span class="show translatable" data-text="<?= encodeString(getDefaultTranslation('Show')); ?>" title="<?= encodeString(getTranslation('Show')); ?>"></span><!--
--><input class="translatable" data-text="<?= encodeString(getDefaultTranslation('Password')); ?>" type="password" name="Password" placeholder="<?= encodeString(getTranslation('Password')); ?>" autocomplete="new-password" autocapitalize="off" spellcheck="false"><!--
--><span class="capsLock hide"></span><!--
--></div><!--
--><div><!--
--><span class="show translatable" data-text="<?= encodeString(getDefaultTranslation('Show')); ?>" title="<?= encodeString(getTranslation('Show')); ?>"></span><!--
--><input class="translatable" data-text="<?= encodeString(getDefaultTranslation('Confirm Password')); ?>" type="password" name="Confirm Password" placeholder="<?= encodeString(getTranslation('Confirm Password')); ?>" autocomplete="new-password" autocapitalize="off" spellcheck="false"><!--
--><span class="capsLock hide"></span><!--
--></div><!--
--><button type="submit"><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Create')); ?>"><?= encodeString(getTranslation('Create')); ?></span><!--
--><span class="dots"><!--
--><span></span><!--
--><span></span><!--
--><span></span><!--
--></span><!--
--></button><!--
--></form><!--
--></div><!--
--><div class="unlock hide"><!--
--><div class="logo"></div><!--
--><form class="hide"><!--
--><p class="verifySource translatable" data-text="<?= encodeString(getDefaultTranslation('If you paid to access MWC Wallet or received this wallet as part of a paid service then you\'ve been scammed and should demand your money back')); ?>"><?= encodeString(getTranslation('If you paid to access MWC Wallet or received this wallet as part of a paid service then you\'ve been scammed and should demand your money back')); ?></p><!--
--><input class="hide translatable" data-text="<?= encodeString(getDefaultTranslation('MWC Wallet')); ?>" type="hidden" name="Username" value="<?= encodeString(getTranslation('MWC Wallet')); ?>" autocomplete="off" autocapitalize="off" spellcheck="false"><!--
--><div><!--
--><span class="show translatable" data-text="<?= encodeString(getDefaultTranslation('Show')); ?>" title="<?= encodeString(getTranslation('Show')); ?>"></span><!--
--><input class="translatable" data-text="<?= encodeString(getDefaultTranslation('Password')); ?>" type="password" name="Password" placeholder="<?= encodeString(getTranslation('Password')); ?>" autocomplete="current-password" autocapitalize="off" spellcheck="false"><!--
--><span class="capsLock hide"></span><!--
--></div><!--
--><button type="submit"><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Unlock')); ?>"><?= encodeString(getTranslation('Unlock')); ?></span><!--
--><span class="dots"><!--
--><span></span><!--
--><span></span><!--
--><span></span><!--
--></span><!--
--></button><!--
--><div class="status"><!--
--><p class="node translatable" data-text="<?= encodeString(getDefaultTranslation('Node disconnected')); ?>" title="<?= encodeString(getTranslation('Node disconnected')); ?>"><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Node')); ?>"><?= encodeString(getTranslation('Node')); ?></span><!--
--></p><!--
--><p class="listener translatable" data-text="<?= encodeString(getDefaultTranslation('Listener disconnected')); ?>" title="<?= encodeString(getTranslation('Listener disconnected')); ?>"><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Listener')); ?>"><?= encodeString(getTranslation('Listener')); ?></span><!--
--></p><!--
--></div><!--
--></form><!--
--><div class="deleteAllWallets hide"><!--
--><button><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Delete All Wallets')); ?>"><?= encodeString(getTranslation('Delete All Wallets')); ?></span><!--
--></button><!--
--></div><!--
--></div><!--
--></div><!--
--><div class="unlocked hide"><!--
--><div class="hide"><!--
--><div class="menu"><!--
--><div><!--
--><button class="about translatable" data-text="<?= encodeString(getDefaultTranslation('About')); ?>" title="<?= encodeString(getTranslation('About')); ?>"><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('About')); ?>"><?= encodeString(getTranslation('About')); ?></span><!--
--></button><!--
--><button class="account translatable" data-text="<?= encodeString(getDefaultTranslation('Account')); ?>" title="<?= encodeString(getTranslation('Account')); ?>"><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Account')); ?>"><?= encodeString(getTranslation('Account')); ?></span><!--
--></button><!--
--><button class="settings translatable" data-text="<?= encodeString(getDefaultTranslation('Settings')); ?>" title="<?= encodeString(getTranslation('Settings')); ?>"><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Settings')); ?>"><?= encodeString(getTranslation('Settings')); ?></span><!--
--></button><!--
--><button class="log translatable" data-text="<?= encodeString(getDefaultTranslation('Log')); ?>" title="<?= encodeString(getTranslation('Log')); ?>"><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Log')); ?>"><?= encodeString(getTranslation('Log')); ?></span><!--
--></button><!--
--><button class="lock translatable" data-text="<?= encodeString(getDefaultTranslation('Lock')); ?>" title="<?= encodeString(getTranslation('Lock')); ?>"><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Lock')); ?>"><?= encodeString(getTranslation('Lock')); ?></span><!--
--></button><!--
--></div><!--
--></div><!--
--><div><!--
--><div class="wallets"><!--
--><div class="hide"><!--
--><h2 class="translatable" data-text="<?= encodeString(getDefaultTranslation('Wallets')); ?>"><?= encodeString(getTranslation('Wallets')); ?></h2><!--
--><div class="new"><!--
--><button class="create translatable" data-text="<?= encodeString(getDefaultTranslation('Create')); ?>" title="<?= encodeString(getTranslation('Create')); ?>"><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Create')); ?>"><?= encodeString(getTranslation('Create')); ?></span><!--
--></button><!--
--><button class="recover translatable" data-text="<?= encodeString(getDefaultTranslation('Recover')); ?>" title="<?= encodeString(getTranslation('Recover')); ?>"><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Recover')); ?>"><?= encodeString(getTranslation('Recover')); ?></span><!--
--></button><!--
--><button class="hardware translatable" data-text="<?= encodeString(getDefaultTranslation('Hardware')); ?>" title="<?= encodeString(getTranslation('Hardware')); ?>"><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Hardware')); ?>"><?= encodeString(getTranslation('Hardware')); ?></span><!--
--></button><!--
--></div><!--
--><div class="list scrollable"></div><!--
--><div class="order"><!--
--><button class="up translatable" data-text="<?= encodeString(getDefaultTranslation('Up')); ?>" title="<?= encodeString(getTranslation('Up')); ?>"></button><!--
--><button class="down translatable" data-text="<?= encodeString(getDefaultTranslation('Down')); ?>" title="<?= encodeString(getTranslation('Down')); ?>"></button><!--
--></div><!--
--><div class="loading hide"><!--
--><div class="overlay"><!--
--></div><!--
--><div class="spinner"><!--
--></div><!--
--></div><!--
--></div><!--
--><button class="expand"><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Wallets')); ?>"><?= encodeString(getTranslation('Wallets')); ?></span><!--
--></button><!--
--></div><!--
--><div class="sections"><!--
--><div><!--
--><div class="wallet scrollable hide"><!--
--><div><!--
--><div class="navigation"><!--
--><button class="back hide translatable" data-text="<?= encodeString(getDefaultTranslation('Back')); ?>" title="<?= encodeString(getTranslation('Back')); ?>" data-private></button><!--
--><button class="forward hide translatable" data-text="<?= encodeString(getDefaultTranslation('Forward')); ?>" title="<?= encodeString(getTranslation('Forward')); ?>" data-private></button><!--
--></div><!--
--><h3 class="address translatable" data-text="<?= encodeString(getDefaultTranslation('Address')); ?>"><?= encodeString(getTranslation('Address')); ?></h3><!--
--><div class="address"><!--
--><img width="74" height="74"><!--
--><p><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Address:')); ?>"><?= encodeString(getTranslation('Address:')); ?></span><!--
--></p><!--
--><button class="changeAddressSuffix" data-private><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Change Address Suffix')); ?>"><?= encodeString(getTranslation('Change Address Suffix')); ?></span><!--
--></button><!--
--><div class="loading"><!--
--><div><!--
--></div><!--
--></div><!--
--></div><!--
--><h3 class="translatable" data-text="<?= encodeString(getDefaultTranslation('Balance')); ?>"><?= encodeString(getTranslation('Balance')); ?></h3><!--
--><div class="balance"><!--
--><button class="sendPayment" data-private><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Send Payment')); ?>"><?= encodeString(getTranslation('Send Payment')); ?></span><!--
--></button><!--
--><div class="syncStatus"><!--
--><svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><!--
--><circle class="background" cx="50" cy="50" r="50" pathLength="100"/><!--
--><circle class="foreground" cx="50" cy="50" r="50" pathLength="100"/><!--
--></svg><!--
--><p class="translatable" data-text="<?= encodeString(getDefaultTranslation('Syncing…')); ?>"><?= encodeString(getTranslation('Syncing…')); ?></p><!--
--><p class="translatable syncingFailed" data-text="<?= encodeString(getDefaultTranslation('Syncing failed')); ?>"><?= encodeString(getTranslation('Syncing failed')); ?></p><!--
--></div><!--
--></div><!--
--><h3 class="translatable" data-text="<?= encodeString(getDefaultTranslation('Utilities')); ?>"><?= encodeString(getTranslation('Utilities')); ?></h3><!--
--><div class="merge"><!--
--><button class="getPassphrase" data-private><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Get Passphrase')); ?>"><?= encodeString(getTranslation('Get Passphrase')); ?></span><!--
--></button><!--
--></div><!--
--><div class="merge"><!--
--><button class="getPaymentProofAddress" data-private><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Get Payment Proof Address')); ?>"><?= encodeString(getTranslation('Get Payment Proof Address')); ?></span><!--
--><span class="dots"><!--
--><span></span><!--
--><span></span><!--
--><span></span><!--
--></span><!--
--></button><!--
--></div><!--
--><div class="merge hide"><!--
--><button class="setPaymentProofAddressIndex" data-private><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Set Payment Proof Address Index')); ?>"><?= encodeString(getTranslation('Set Payment Proof Address Index')); ?></span><!--
--></button><!--
--></div><!--
--><div class="merge"><!--
--><button class="resync" data-private><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Resync')); ?>"><?= encodeString(getTranslation('Resync')); ?></span><!--
--></button><!--
--></div><!--
--><div class="merge"><!--
--><button class="rename" data-private><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Rename')); ?>"><?= encodeString(getTranslation('Rename')); ?></span><!--
--></button><!--
--></div><!--
--><div class="merge hide"><!--
--><button class="loginWithWallet" data-private><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Login With Wallet')); ?>"><?= encodeString(getTranslation('Login With Wallet')); ?></span><!--
--></button><!--
--></div><!--
--><div class="merge"><!--
--><button class="receivePaymentAsFile" data-private><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Receive Payment As File')); ?>"><?= encodeString(getTranslation('Receive Payment As File')); ?></span><!--
--><span class="dots"><!--
--><span></span><!--
--><span></span><!--
--><span></span><!--
--></span><!--
--></button><!--
--></div><!--
--><div><!--
--><button class="delete" data-private><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Delete')); ?>"><?= encodeString(getTranslation('Delete')); ?></span><!--
--></button><!--
--></div><!--
--><h3 class="translatable" data-text="<?= encodeString(getDefaultTranslation('Transactions')); ?>"><?= encodeString(getTranslation('Transactions')); ?></h3><!--
--><div class="transactions empty merge"><!--
--></div><!--
--><div class="merge"><!--
--><p class="translatable noTransactions" data-text="<?= encodeString(getDefaultTranslation('No transactions exist for this wallet.')); ?>"><?= encodeString(getTranslation('No transactions exist for this wallet.')); ?></p><!--
--></div><!--
--><div class="transactionsNavigation"><!--
--><button class="first translatable" data-text="<?= encodeString(getDefaultTranslation('First')); ?>" title="<?= encodeString(getTranslation('First')); ?>" data-private></button><!--
--><button class="previous translatable" data-text="<?= encodeString(getDefaultTranslation('Previous')); ?>" title="<?= encodeString(getTranslation('Previous')); ?>" data-private></button><!--
--><button class="next translatable" data-text="<?= encodeString(getDefaultTranslation('Next')); ?>" title="<?= encodeString(getTranslation('Next')); ?>" data-private></button><!--
--><button class="last translatable" data-text="<?= encodeString(getDefaultTranslation('Last')); ?>" title="<?= encodeString(getTranslation('Last')); ?>" data-private></button><!--
--></div><!--
--></div><!--
--></div><!--
--><div class="sendPayment scrollable hide"><!--
--><div><!--
--><div class="navigation"><!--
--><button class="back hide translatable" data-text="<?= encodeString(getDefaultTranslation('Back')); ?>" title="<?= encodeString(getTranslation('Back')); ?>" data-private></button><!--
--><h2 class="translatable" data-text="<?= encodeString(getDefaultTranslation('Send Payment')); ?>"><?= encodeString(getTranslation('Send Payment')); ?></h2><!--
--><button class="forward translatable" data-text="<?= encodeString(getDefaultTranslation('Forward')); ?>" title="<?= encodeString(getTranslation('Forward')); ?>" data-private></button><!--
--></div><!--
--><h3 class="translatable" data-text="<?= encodeString(getDefaultTranslation('Payment Details')); ?>"><?= encodeString(getTranslation('Payment Details')); ?></h3><!--
--><div class="merge"><!--
--><p><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Recipient address')); ?>"><?= encodeString(getTranslation('Recipient address')); ?></span><!--
--></p><!--
--><span class="dots"></span><!--
--><div class="value" data-type="url"><!--
--><input class="recipientAddress translatable" data-text="<?= encodeString(getDefaultTranslation('URL')); ?>" type="text" placeholder="<?= encodeString(getTranslation('URL')); ?>" autocomplete="url" autocapitalize="off" spellcheck="false" inputmode="url"><!--
--><span></span><!--
--><span class="capsLock hide"></span><!--
--></div><!--
--></div><!--
--><div><!--
--><button class="scan" data-private><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Scan QR Code')); ?>"><?= encodeString(getTranslation('Scan QR Code')); ?></span><!--
--><span class="dots"><!--
--><span></span><!--
--><span></span><!--
--><span></span><!--
--></span><!--
--></button><!--
--></div><!--
--><div class="fromWallet merge"><!--
--><p><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('From wallet')); ?>"><?= encodeString(getTranslation('From wallet')); ?></span><!--
--></p><!--
--><span class="dots"></span><!--
--><div class="value" data-type="select"><!--
--><select class="fromWallet"><!--
--></select><!--
--><span></span><!--
--></div><!--
--></div><!--
--><div class="merge"><!--
--><p><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Amount')); ?>"><?= encodeString(getTranslation('Amount')); ?></span><!--
--></p><!--
--><span class="dots"></span><!--
--><div class="value" data-type="number"><!--
--><input class="amount" type="number" autocomplete="off" autocapitalize="off" spellcheck="false" inputmode="decimal"><!--
--><span></span><!--
--></div><!--
--></div><!--
--><div class="merge"><!--
--><button class="all" data-private><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('All')); ?>"><?= encodeString(getTranslation('All')); ?></span><!--
--><span class="dots"><!--
--><span></span><!--
--><span></span><!--
--><span></span><!--
--></span><!--
--></button><!--
--></div><!--
--><div><!--
--><p><!--
--><span></span><!--
--></p><!--
--><span class="dots"></span><!--
--><div class="value" data-type="number"><!--
--><input class="value" type="number" min="0" autocomplete="off" autocapitalize="off" spellcheck="false" inputmode="decimal"><!--
--><span></span><!--
--></div><!--
--></div><!--
--><div class="merge"><!--
--><p><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Base fee')); ?>"><?= encodeString(getTranslation('Base fee')); ?></span><!--
--></p><!--
--><span class="dots"></span><!--
--><div class="value" data-type="number"><!--
--><input class="baseFee" type="number" autocomplete="off" autocapitalize="off" spellcheck="false" inputmode="decimal"><!--
--><span></span><!--
--></div><!--
--></div><!--
--><div><!--
--><button class="defaultBaseFee" data-private><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Default Base Fee')); ?>"><?= encodeString(getTranslation('Default Base Fee')); ?></span><!--
--><span class="dots"><!--
--><span></span><!--
--><span></span><!--
--><span></span><!--
--></span><!--
--></button><!--
--></div><!--
--><div><!--
--><p><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Optional message')); ?>"><?= encodeString(getTranslation('Optional message')); ?></span><!--
--></p><!--
--><span class="dots"></span><!--
--><div class="value" data-type="text"><!--
--><input class="message" type="text" autocomplete="on" autocapitalize="on" spellcheck="true"><!--
--><span></span><!--
--><span class="capsLock hide"></span><!--
--></div><!--
--></div><!--
--><div class="sendAsFile"><!--
--><p><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Send as file')); ?>"><?= encodeString(getTranslation('Send as file')); ?></span><!--
--></p><!--
--><span class="dots"></span><!--
--><div class="value" data-type="boolean"><!--
--><button class="sendAsFile"><!--
--><span></span><!--
--></button><!--
--></div><!--
--></div><!--
--><div class="send"><!--
--><button class="send" data-private><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Send')); ?>"><?= encodeString(getTranslation('Send')); ?></span><!--
--><span class="dots"><!--
--><span></span><!--
--><span></span><!--
--><span></span><!--
--></span><!--
--></button><!--
--></div><!--
--><div class="cancel"><!--
--><button class="cancel" data-private><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Cancel')); ?>"><?= encodeString(getTranslation('Cancel')); ?></span><!--
--></button><!--
--></div><!--
--></div><!--
--></div><!--
--><div class="account scrollable hide"><!--
--><div><!--
--><div class="navigation"><!--
--><button class="back hide translatable" data-text="<?= encodeString(getDefaultTranslation('Back')); ?>" title="<?= encodeString(getTranslation('Back')); ?>" data-private></button><!--
--><h2 class="translatable" data-text="<?= encodeString(getDefaultTranslation('Account')); ?>"><?= encodeString(getTranslation('Account')); ?></h2><!--
--><button class="forward hide translatable" data-text="<?= encodeString(getDefaultTranslation('Forward')); ?>" title="<?= encodeString(getTranslation('Forward')); ?>" data-private></button><!--
--></div><!--
--><h3 class="translatable" data-text="<?= encodeString(getDefaultTranslation('Change Password')); ?>"><?= encodeString(getTranslation('Change Password')); ?></h3><!--
--><div><!--
--><p><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Current password')); ?>"><?= encodeString(getTranslation('Current password')); ?></span><!--
--></p><!--
--><span class="dots"></span><!--
--><div class="value" data-type="text"><!--
--><span class="show translatable" data-text="<?= encodeString(getDefaultTranslation('Show')); ?>" title="<?= encodeString(getTranslation('Show')); ?>"></span><!--
--><input class="currentPassword" type="password" autocomplete="current-password" autocapitalize="off" spellcheck="false" data-private><!--
--><span></span><!--
--><span class="capsLock hide"></span><!--
--></div><!--
--></div><!--
--><div><!--
--><p><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('New password')); ?>"><?= encodeString(getTranslation('New password')); ?></span><!--
--></p><!--
--><span class="dots"></span><!--
--><div class="value" data-type="text"><!--
--><span class="show translatable" data-text="<?= encodeString(getDefaultTranslation('Show')); ?>" title="<?= encodeString(getTranslation('Show')); ?>"></span><!--
--><input class="newPassword" type="password" autocomplete="new-password" autocapitalize="off" spellcheck="false" data-private><!--
--><span></span><!--
--><span class="capsLock hide"></span><!--
--></div><!--
--></div><!--
--><div><!--
--><p><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Confirm new password')); ?>"><?= encodeString(getTranslation('Confirm new password')); ?></span><!--
--></p><!--
--><span class="dots"></span><!--
--><div class="value" data-type="text"><!--
--><span class="show translatable" data-text="<?= encodeString(getDefaultTranslation('Show')); ?>" title="<?= encodeString(getTranslation('Show')); ?>"></span><!--
--><input class="confirmNewPassword" type="password" autocomplete="new-password" autocapitalize="off" spellcheck="false" data-private><!--
--><span></span><!--
--><span class="capsLock hide"></span><!--
--></div><!--
--></div><!--
--><div><!--
--><button class="changePassword" data-private><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Change Password')); ?>"><?= encodeString(getTranslation('Change Password')); ?></span><!--
--><span class="dots"><!--
--><span></span><!--
--><span></span><!--
--><span></span><!--
--></span><!--
--></button><!--
--></div><!--
--><h3 class="translatable" data-text="<?= encodeString(getDefaultTranslation('Utilities')); ?>"><?= encodeString(getTranslation('Utilities')); ?></h3><!--
--><div><!--
--><button class="deleteAllWallets" data-private><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Delete All Wallets')); ?>"><?= encodeString(getTranslation('Delete All Wallets')); ?></span><!--
--></button><!--
--></div><!--
--></div><!--
--></div><!--
--><div class="settings scrollable hide"><!--
--><div><!--
--><div class="navigation"><!--
--><button class="back hide translatable" data-text="<?= encodeString(getDefaultTranslation('Back')); ?>" title="<?= encodeString(getTranslation('Back')); ?>" data-private></button><!--
--><h2 class="translatable" data-text="<?= encodeString(getDefaultTranslation('Settings')); ?>"><?= encodeString(getTranslation('Settings')); ?></h2><!--
--><button class="forward hide translatable" data-text="<?= encodeString(getDefaultTranslation('Forward')); ?>" title="<?= encodeString(getTranslation('Forward')); ?>" data-private></button><!--
--></div><!--
--><h3 class="translatable" data-text="<?= encodeString(getDefaultTranslation('Wallet Settings')); ?>"><?= encodeString(getTranslation('Wallet Settings')); ?></h3><!--
--><div class="translatable" data-text="<?= encodeString(getDefaultTranslation('Sets the wallet type to use')); ?>" title="<?= encodeString(getTranslation('Sets the wallet type to use')); ?>"><!--
--><p><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Wallet type')); ?>"><?= encodeString(getTranslation('Wallet type')); ?></span><!--
--></p><!--
--><span class="dots"></span><!--
--><div class="value" data-type="select"><!--
--><select data-private class="walletType"><!--
--><option class="translatable" data-text="<?= encodeString(getDefaultTranslation('MimbleWimble Coin')); ?>" value="0"><?= encodeString(getTranslation('MimbleWimble Coin')); ?></option><!--
--><option class="translatable" data-text="<?= encodeString(getDefaultTranslation('Grin')); ?>" value="1"><?= encodeString(getTranslation('Grin')); ?></option><!--
--><option class="translatable" data-text="<?= encodeString(getDefaultTranslation('Epic Cash')); ?>" value="2"><?= encodeString(getTranslation('Epic Cash')); ?></option><!--
--></select><!--
--><span></span><!--
--></div><!--
--></div><!--
--><div class="translatable" data-text="<?= encodeString(getDefaultTranslation('Sets the network type to use')); ?>" title="<?= encodeString(getTranslation('Sets the network type to use')); ?>"><!--
--><p><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Network type')); ?>"><?= encodeString(getTranslation('Network type')); ?></span><!--
--></p><!--
--><span class="dots"></span><!--
--><div class="value" data-type="select"><!--
--><select data-private class="networkType"><!--
--><option class="translatable" data-text="<?= encodeString(getDefaultTranslation('Mainnet')); ?>" value="0"><?= encodeString(getTranslation('Mainnet')); ?></option><!--
--><option class="translatable" data-text="<?= encodeString(getDefaultTranslation('Floonet/testnet')); ?>" value="1"><?= encodeString(getTranslation('Floonet/testnet')); ?></option><!--
--></select><!--
--><span></span><!--
--></div><!--
--></div><!--
--><div class="setting translatable" data-setting="<?= encodeString("Number Of Confirmations"); ?>" data-text="<?= encodeString(getDefaultTranslation('Sets the number of confirmations required for a new output to be spendable')); ?>" title="<?= encodeString(getTranslation('Sets the number of confirmations required for a new output to be spendable')); ?>"><!--
--><p><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Number of confirmations required to spend an output')); ?>"><?= encodeString(getTranslation('Number of confirmations required to spend an output')); ?></span><!--
--></p><!--
--><span class="dots"></span><!--
--><div class="value" data-type="number"><!--
--><input type="number" min="1" max="<?= MINUTES_IN_AN_HOUR * HOURS_IN_A_DAY; ?>" autocomplete="off" autocapitalize="off" spellcheck="false" data-private inputmode="numeric"><!--
--><span></span><!--
--></div><!--
--></div><!--
--><h3 class="translatable" data-text="<?= encodeString(getDefaultTranslation('Interface Settings')); ?>"><?= encodeString(getTranslation('Interface Settings')); ?></h3><!--
--><div class="setting translatable" data-setting="<?= encodeString("Enable Node Connection Error Messages"); ?>" data-text="<?= encodeString(getDefaultTranslation('Displays a message when not able to connect to a node, when a connected node is incompatible, or when disconnected from a node')); ?>" title="<?= encodeString(getTranslation('Displays a message when not able to connect to a node, when a connected node is incompatible, or when disconnected from a node')); ?>"><!--
--><p><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Show node connection error messages')); ?>"><?= encodeString(getTranslation('Show node connection error messages')); ?></span><!--
--></p><!--
--><span class="dots"></span><!--
--><div class="value" data-type="boolean"><!--
--><button data-private><!--
--><span></span><!--
--></button><!--
--></div><!--
--></div><!--
--><div class="setting translatable" data-setting="<?= encodeString("Enable Listener Connection Error Messages"); ?>" data-text="<?= encodeString(getDefaultTranslation('Displays a message when not able to connect to a listener or when disconnected from a listener')); ?>" title="<?= encodeString(getTranslation('Displays a message when not able to connect to a listener or when disconnected from a listener')); ?>"><!--
--><p><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Show listener connection error messages')); ?>"><?= encodeString(getTranslation('Show listener connection error messages')); ?></span><!--
--></p><!--
--><span class="dots"></span><!--
--><div class="value" data-type="boolean"><!--
--><button data-private><!--
--><span></span><!--
--></button><!--
--></div><!--
--></div><!--
--><div class="setting translatable" data-setting="<?= encodeString("Enable Automatic Lock"); ?>" data-text="<?= encodeString(getDefaultTranslation('Automatically lock after a set duration of inactivity')); ?>" title="<?= encodeString(getTranslation('Automatically lock after a set duration of inactivity')); ?>"><!--
--><p><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Automatically lock after a set duration of inactivity')); ?>"><?= encodeString(getTranslation('Automatically lock after a set duration of inactivity')); ?></span><!--
--></p><!--
--><span class="dots"></span><!--
--><div class="value" data-type="boolean"><!--
--><button data-private><!--
--><span></span><!--
--></button><!--
--></div><!--
--></div><!--
--><div class="setting translatable" data-setting="<?= encodeString("No Interaction Lock Timeout Minutes"); ?>" data-dependencies='<?= escapeData([["Enable Automatic Lock", TRUE]]); ?>' data-text="<?= encodeString(getDefaultTranslation('Sets the duration of inactivity required for the automatic lock to occur')); ?>" title="<?= encodeString(getTranslation('Sets the duration of inactivity required for the automatic lock to occur')); ?>"><!--
--><p><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Minutes of inactivity required for automatic lock')); ?>"><?= encodeString(getTranslation('Minutes of inactivity required for automatic lock')); ?></span><!--
--></p><!--
--><span class="dots"></span><!--
--><div class="value" data-type="number"><!--
--><input type="number" min="1" max="<?= MINUTES_IN_AN_HOUR; ?>" autocomplete="off" autocapitalize="off" spellcheck="false" data-private inputmode="numeric"><!--
--><span></span><!--
--></div><!--
--></div><!--
--><div class="setting translatable" data-setting="<?= encodeString("Enable Lock On Inactive"); ?>" data-text="<?= encodeString(getDefaultTranslation('Automatically lock when not focused')); ?>" title="<?= encodeString(getTranslation('Automatically lock when not focused')); ?>"><!--
--><p><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Lock if not focused')); ?>"><?= encodeString(getTranslation('Lock if not focused')); ?></span><!--
--></p><!--
--><span class="dots"></span><!--
--><div class="value" data-type="boolean"><!--
--><button data-private><!--
--><span></span><!--
--></button><!--
--></div><!--
--></div><!--
--><div class="setting translatable" data-setting="<?= encodeString("Enable Price"); ?>" data-text="<?= encodeString(getDefaultTranslation('Displays prices for amounts')); ?>" title="<?= encodeString(getTranslation('Displays prices for amounts')); ?>"><!--
--><p><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Display prices')); ?>"><?= encodeString(getTranslation('Display prices')); ?></span><!--
--></p><!--
--><span class="dots"></span><!--
--><div class="value" data-type="boolean"><!--
--><button data-private><!--
--><span></span><!--
--></button><!--
--></div><!--
--></div><!--
--><div class="setting translatable" data-setting="<?= encodeString("Currency Display"); ?>" data-dependencies='<?= escapeData([["Enable Price", TRUE]]); ?>' data-text="<?= encodeString(getDefaultTranslation('Sets the currency of the displayed prices')); ?>" title="<?= encodeString(getTranslation('Sets the currency of the displayed prices')); ?>"><!--
--><p><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Currency of the displayed prices')); ?>"><?= encodeString(getTranslation('Currency of the displayed prices')); ?></span><!--
--></p><!--
--><span class="dots"></span><!--
--><div class="value" data-type="select"><!--
--><select data-private><!--
--><option class="translatable" data-text="<?= encodeString(getDefaultTranslation('Language\'s currency')); ?>" value="Language's Currency"><?= encodeString(getTranslation('Language\'s currency')); ?></option><!--
--><?php
// Go through all language currencies
foreach(getLanguageCurrencies() as $languageCurrency) {
// Display language currency option
echo "<option value=\"" . encodeString($languageCurrency) . "\">" . encodeString($languageCurrency) . "</option>";
}
?><!--
--></select><!--
--><span></span><!--
--></div><!--
--></div><!--
--><div class="setting translatable" data-setting="<?= encodeString("Update Price Interval Minutes"); ?>" data-dependencies='<?= escapeData([["Enable Price", TRUE]]); ?>' data-text="<?= encodeString(getDefaultTranslation('Sets the duration of time between price updates')); ?>" title="<?= encodeString(getTranslation('Sets the duration of time between price updates')); ?>"><!--
--><p><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Minutes between price updates')); ?>"><?= encodeString(getTranslation('Minutes between price updates')); ?></span><!--
--></p><!--
--><span class="dots"></span><!--
--><div class="value" data-type="number"><!--
--><input type="number" min="1" max="<?= MINUTES_IN_AN_HOUR * HOURS_IN_A_DAY; ?>" autocomplete="off" autocapitalize="off" spellcheck="false" data-private inputmode="numeric"><!--
--><span></span><!--
--></div><!--
--></div><!--
--><div class="setting translatable" data-setting="<?= encodeString("Displayed Address Type"); ?>" data-dependencies='<?= escapeData([["Use Custom Listener", FALSE]]); ?>' data-text="<?= encodeString(getDefaultTranslation('Sets the address type to display for each wallet')); ?>" title="<?= encodeString(getTranslation('Sets the address type to display for each wallet')); ?>"><!--
--><p><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Displayed address type')); ?>"><?= encodeString(getTranslation('Displayed address type')); ?></span><!--
--></p><!--
--><span class="dots"></span><!--
--><div class="value" data-type="select"><!--
--><select data-private><!--
--><option class="translatable" data-text="<?= encodeString(getDefaultTranslation('Match connection')); ?>" value="Match Connection"><?= encodeString(getTranslation('Match connection')); ?></option><!--
--><option class="translatable" data-text="<?= encodeString(((array_key_exists("HTTPS", $_SERVER) === TRUE && $_SERVER["HTTPS"] === "on") || array_key_exists("HTTPS_SERVER_ADDRESS", $_SERVER) === TRUE) ? getDefaultTranslation('HTTPS') : getDefaultTranslation('HTTP')); ?>" value="HTTP"><?= encodeString(((array_key_exists("HTTPS", $_SERVER) === TRUE && $_SERVER["HTTPS"] === "on") || array_key_exists("HTTPS_SERVER_ADDRESS", $_SERVER) === TRUE) ? getTranslation('HTTPS') : getTranslation('HTTP')); ?></option><!--
--><option class="translatable" data-text="<?= encodeString(getDefaultTranslation('Onion Service')); ?>" value="Tor"><?= encodeString(getTranslation('Onion Service')); ?></option><!--
--></select><!--
--><span></span><!--
--></div><!--
--></div><!--
--><div class="setting translatable" data-setting="<?= encodeString("Displayed Amount Type"); ?>" data-text="<?= encodeString(getDefaultTranslation('Sets the amount type to display in the wallets list')); ?>" title="<?= encodeString(getTranslation('Sets the amount type to display in the wallets list')); ?>"><!--
--><p><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Displayed amount type')); ?>"><?= encodeString(getTranslation('Displayed amount type')); ?></span><!--
--></p><!--
--><span class="dots"></span><!--
--><div class="value" data-type="select"><!--
--><select data-private><!--
--><option class="translatable" data-text="<?= encodeString(getDefaultTranslation('Spendable')); ?>" value="Spendable"><?= encodeString(getTranslation('Spendable')); ?></option><!--
--><option class="translatable" data-text="<?= encodeString(getDefaultTranslation('Confirmed')); ?>" value="Confirmed"><?= encodeString(getTranslation('Confirmed')); ?></option><!--
--><option class="translatable" data-text="<?= encodeString(getDefaultTranslation('Confirmed and unconfirmed')); ?>" value="Confirmed And Unconfirmed"><?= encodeString(getTranslation('Confirmed and unconfirmed')); ?></option><!--
--></select><!--
--><span></span><!--
--></div><!--
--></div><!--
--><div class="setting translatable" data-setting="<?= encodeString("Allow Changing Base Fee"); ?>" data-text="<?= encodeString(getDefaultTranslation('Allows changing a transaction\'s base fee when sending a payment')); ?>" title="<?= encodeString(getTranslation('Allows changing a transaction\'s base fee when sending a payment')); ?>"><!--
--><p><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Allow changing base fee')); ?>"><?= encodeString(getTranslation('Allow changing base fee')); ?></span><!--
--></p><!--
--><span class="dots"></span><!--
--><div class="value" data-type="boolean"><!--
--><button data-private><!--
--><span></span><!--
--></button><!--
--></div><!--
--></div><!--
--><div class="setting translatable" data-setting="<?= encodeString("Maximum Number Of Messages"); ?>" data-text="<?= encodeString(getDefaultTranslation('Sets the maximum number of messages that the log can display. Earlier messages will be removed once this limit is reached')); ?>" title="<?= encodeString(getTranslation('Sets the maximum number of messages that the log can display. Earlier messages will be removed once this limit is reached')); ?>"><!--
--><p><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Maximum number of messages that the log can display')); ?>"><?= encodeString(getTranslation('Maximum number of messages that the log can display')); ?></span><!--
--></p><!--
--><span class="dots"></span><!--
--><div class="value" data-type="number"><!--
--><input type="number" min="10" max="1000" autocomplete="off" autocapitalize="off" spellcheck="false" data-private inputmode="numeric"><!--
--><span></span><!--
--></div><!--
--></div><!--
--><h3 class="translatable" data-text="<?= encodeString(getDefaultTranslation('Node Settings')); ?>"><?= encodeString(getTranslation('Node Settings')); ?></h3><!--
--><div class="setting translatable" data-setting="<?= encodeString("Use Custom Node"); ?>" data-text="<?= encodeString(getDefaultTranslation('Uses a custom node instead of the default nodes')); ?>" title="<?= encodeString(getTranslation('Uses a custom node instead of the default nodes')); ?>"><!--
--><p><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Use custom node')); ?>"><?= encodeString(getTranslation('Use custom node')); ?></span><!--
--></p><!--
--><span class="dots"></span><!--
--><div class="value" data-type="boolean"><!--
--><button data-private><!--
--><span></span><!--
--></button><!--
--></div><!--
--></div><!--
--><div class="setting translatable" data-setting="<?= encodeString("Custom Node Address"); ?>" data-dependencies='<?= escapeData([["Use Custom Node", TRUE]]); ?>' data-text="<?= encodeString(getDefaultTranslation('Sets the address for the custom node')); ?>" title="<?= encodeString(getTranslation('Sets the address for the custom node')); ?>"><!--
--><p><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Custom node address')); ?>"><?= encodeString(getTranslation('Custom node address')); ?></span><!--
--></p><!--
--><span class="dots"></span><!--
--><div class="value" data-type="url"><!--
--><input class="translatable" data-text="<?= encodeString(getDefaultTranslation('URL')); ?>" type="text" placeholder="<?= encodeString(getTranslation('URL')); ?>" autocomplete="url" autocapitalize="off" spellcheck="false" data-private inputmode="url"><!--
--><span></span><!--
--><span class="capsLock hide"></span><!--
--></div><!--
--></div><!--
--><div class="setting translatable" data-setting="<?= encodeString("Custom Node Secret"); ?>" data-sensitive data-dependencies='<?= escapeData([["Use Custom Node", TRUE]]); ?>' data-text="<?= encodeString(getDefaultTranslation('Sets the foreign API secret for the custom node. Leave this empty if the custom node doesn\'t require a foreign API secret')); ?>" title="<?= encodeString(getTranslation('Sets the foreign API secret for the custom node. Leave this empty if the custom node doesn\'t require a foreign API secret')); ?>"><!--
--><p><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Custom node foreign API secret')); ?>"><?= encodeString(getTranslation('Custom node foreign API secret')); ?></span><!--
--></p><!--
--><span class="dots"></span><!--
--><div class="value" data-type="text"><!--
--><input type="text" autocomplete="off" autocapitalize="off" spellcheck="false" data-private><!--
--><span></span><!--
--><span class="capsLock hide"></span><!--
--></div><!--
--></div><!--
--><h3 class="translatable" data-text="<?= encodeString(getDefaultTranslation('API Settings')); ?>"><?= encodeString(getTranslation('API Settings')); ?></h3><!--
--><div class="setting translatable" data-setting="<?= encodeString("Enable Mining API"); ?>" data-text="<?= encodeString(getDefaultTranslation('Allows processing mining related API requests')); ?>" title="<?= encodeString(getTranslation('Allows processing mining related API requests')); ?>"><!--
--><p><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Enable mining API')); ?>"><?= encodeString(getTranslation('Enable mining API')); ?></span><!--
--></p><!--
--><span class="dots"></span><!--
--><div class="value" data-type="boolean"><!--
--><button data-private><!--
--><span></span><!--
--></button><!--
--></div><!--
--></div><!--
--><div class="setting translatable" data-setting="<?= encodeString("Require Payment Proof"); ?>" data-text="<?= encodeString(getDefaultTranslation('Requires all new transactions to have a payment proof')); ?>" title="<?= encodeString(getTranslation('Requires all new transactions to have a payment proof')); ?>"><!--
--><p><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Require payment proof')); ?>"><?= encodeString(getTranslation('Require payment proof')); ?></span><!--
--></p><!--
--><span class="dots"></span><!--
--><div class="value" data-type="boolean"><!--
--><button data-private><!--
--><span></span><!--
--></button><!--
--></div><!--
--></div><!--
--><div class="setting translatable" data-setting="<?= encodeString("Automatically Approve Receiving Payments"); ?>" data-text="<?= encodeString(getDefaultTranslation('Automatically approves all received payments without requiring manual approval')); ?>" title="<?= encodeString(getTranslation('Automatically approves all received payments without requiring manual approval')); ?>"><!--
--><p><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Automatically approve receiving payments')); ?>"><?= encodeString(getTranslation('Automatically approve receiving payments')); ?></span><!--
--></p><!--
--><span class="dots"></span><!--
--><div class="value" data-type="boolean"><!--
--><button data-private><!--
--><span></span><!--
--></button><!--
--></div><!--
--></div><!--
--><h3 class="translatable" data-text="<?= encodeString(getDefaultTranslation('Tor Proxy Settings')); ?>"><?= encodeString(getTranslation('Tor Proxy Settings')); ?></h3><!--
--><div class="setting translatable" data-setting="<?= encodeString("Use Custom Tor Proxy"); ?>" data-text="<?= encodeString(getDefaultTranslation('Uses a custom Tor proxy instead of the default Tor proxy')); ?>" title="<?= encodeString(getTranslation('Uses a custom Tor proxy instead of the default Tor proxy')); ?>"><!--
--><p><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Use custom Tor proxy')); ?>"><?= encodeString(getTranslation('Use custom Tor proxy')); ?></span><!--
--></p><!--
--><span class="dots"></span><!--
--><div class="value" data-type="boolean"><!--
--><button data-private><!--
--><span></span><!--
--></button><!--
--></div><!--
--></div><!--
--><div class="setting translatable" data-setting="<?= encodeString("Custom Tor Proxy Address"); ?>" data-dependencies='<?= escapeData([["Use Custom Tor Proxy", TRUE]]); ?>' data-text="<?= encodeString(getDefaultTranslation('Sets the address for the custom Tor proxy')); ?>" title="<?= encodeString(getTranslation('Sets the address for the custom Tor proxy')); ?>"><!--
--><p><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Custom Tor proxy address')); ?>"><?= encodeString(getTranslation('Custom Tor proxy address')); ?></span><!--
--></p><!--
--><span class="dots"></span><!--
--><div class="value" data-type="url"><!--
--><input class="translatable" data-text="<?= encodeString(getDefaultTranslation('URL')); ?>" type="text" placeholder="<?= encodeString(getTranslation('URL')); ?>" autocomplete="url" autocapitalize="off" spellcheck="false" data-private inputmode="url"><!--
--><span></span><!--
--><span class="capsLock hide"></span><!--
--></div><!--
--></div><!--
--><h3 class="translatable" data-text="<?= encodeString(getDefaultTranslation('Listener Settings')); ?>"><?= encodeString(getTranslation('Listener Settings')); ?></h3><!--
--><div class="setting translatable" data-setting="<?= encodeString("Use Custom Listener"); ?>" data-text="<?= encodeString(getDefaultTranslation('Uses a custom listener instead of the default listener')); ?>" title="<?= encodeString(getTranslation('Uses a custom listener instead of the default listener')); ?>"><!--
--><p><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Use custom listener')); ?>"><?= encodeString(getTranslation('Use custom listener')); ?></span><!--
--></p><!--
--><span class="dots"></span><!--
--><div class="value" data-type="boolean"><!--
--><button data-private><!--
--><span></span><!--
--></button><!--
--></div><!--
--></div><!--
--><div class="setting translatable" data-setting="<?= encodeString("Custom Listener Address"); ?>" data-dependencies='<?= escapeData([["Use Custom Listener", TRUE]]); ?>' data-text="<?= encodeString(getDefaultTranslation('Sets the address for the custom listener')); ?>" title="<?= encodeString(getTranslation('Sets the address for the custom listener')); ?>"><!--
--><p><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Custom listener address')); ?>"><?= encodeString(getTranslation('Custom listener address')); ?></span><!--
--></p><!--
--><span class="dots"></span><!--
--><div class="value" data-type="url"><!--
--><input class="translatable" data-text="<?= encodeString(getDefaultTranslation('URL')); ?>" type="text" placeholder="<?= encodeString(getTranslation('URL')); ?>" autocomplete="url" autocapitalize="off" spellcheck="false" data-private inputmode="url"><!--
--><span></span><!--
--><span class="capsLock hide"></span><!--
--></div><!--
--></div><!--
--><h3 class="translatable" data-text="<?= encodeString(getDefaultTranslation('Utilities')); ?>"><?= encodeString(getTranslation('Utilities')); ?></h3><!--
--><div><!--
--><button class="resetSettings" data-private><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Reset Settings')); ?>"><?= encodeString(getTranslation('Reset Settings')); ?></span><!--
--></button><!--
--></div><!--
--></div><!--
--></div><!--
--><div class="about scrollable hide"><!--
--><div><!--
--><div class="navigation"><!--
--><button class="back hide translatable" data-text="<?= encodeString(getDefaultTranslation('Back')); ?>" title="<?= encodeString(getTranslation('Back')); ?>" data-private></button><!--
--><h2 class="translatable" data-text="<?= encodeString(getDefaultTranslation('About')); ?>"><?= encodeString(getTranslation('About')); ?></h2><!--
--><button class="forward hide translatable" data-text="<?= encodeString(getDefaultTranslation('Forward')); ?>" title="<?= encodeString(getTranslation('Forward')); ?>" data-private></button><!--
--></div><!--
--><h3 class="translatable" data-text="<?= encodeString(getDefaultTranslation('Description')); ?>"><?= encodeString(getTranslation('Description')); ?></h3><!--
--><div class="description"><!--
--><p class="translatable" data-text="<?= encodeString(getDefaultTranslation('MWC Wallet is an open-source, self-custodial wallet that allows you to easily send and receive MimbleWimble Coin. Designed with ease of use and accessibility in mind, this wallet runs on everything from smartwatches to mainframes while providing an intuitive interface that makes using it a breeze.')); ?>"><?= encodeString(getTranslation('MWC Wallet is an open-source, self-custodial wallet that allows you to easily send and receive MimbleWimble Coin. Designed with ease of use and accessibility in mind, this wallet runs on everything from smartwatches to mainframes while providing an intuitive interface that makes using it a breeze.')); ?></p><!--
--><p class="translatable" data-text="<?= encodeString(getDefaultTranslation('This wallet is available free of charge and should not be sold in any format. If you paid to access this wallet or received this wallet as part of a paid service then you\'ve been scammed and should demand your money back.')); ?>"><?= encodeString(getTranslation('This wallet is available free of charge and should not be sold in any format. If you paid to access this wallet or received this wallet as part of a paid service then you\'ve been scammed and should demand your money back.')); ?></p><!--
--></div><!--
--><h3 class="translatable" data-text="<?= encodeString(getDefaultTranslation('Version Information')); ?>"><?= encodeString(getTranslation('Version Information')); ?></h3><!--
--><div class="versionInformation"><!--
--></div><!--
--><h3 class="translatable" data-text="<?= encodeString(getDefaultTranslation('Version Changes')); ?>"><?= encodeString(getTranslation('Version Changes')); ?></h3><!--
--><div><!--
--><ul><!--
--><?php
// Check if there's no version changes
if(count(VERSION_CHANGES) === 0) {
// Display no version change
echo "<li><span class=\"translatable\" data-text=\"" . encodeString(getDefaultTranslation('N/A')) . "\">" . encodeString(getTranslation('N/A')) . "</span></li>";
}
// Otherwise
else {
// Go through all version changes
foreach(VERSION_CHANGES as $versionChange) {
// Display version change
echo "<li><span class=\"translatable contextMenu\" data-text=\"" . encodeString(escapeText($versionChange)) . "\">" . encodeString(getTranslation(escapeText($versionChange))) . "</span></li>";
}
}
?><!--
--></ul><!--
--></div><!--
--><h3 class="translatable" data-text="<?= encodeString(getDefaultTranslation('Donate')); ?>"><?= encodeString(getTranslation('Donate')); ?></h3><!--
--><div class="donate"><!--
--><ul><!--
--><li><span><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Bitcoin:')); ?>"><?= encodeString(getTranslation('Bitcoin:')); ?></span><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('(?<=:) ')); ?>"><?= encodeString(getTranslation('(?<=:) ')); ?></span><span class="contextMenu">bc1qc98nt4huecnd0razjwwngwxa7hfpkng322hg6u</span><span class="translatable copy" data-text="Copy" title="Copy"></span></span></li><!--
--><li><span><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('MimbleWimble Coin:')); ?>"><?= encodeString(getTranslation('MimbleWimble Coin:')); ?></span><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('(?<=:) ')); ?>"><?= encodeString(getTranslation('(?<=:) ')); ?></span><span class="contextMenu">https://mwcwallet.com/donate/mwc</span><span class="translatable copy" data-text="Copy" title="Copy"></span></span></li><!--
--><li><span><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Grin:')); ?>"><?= encodeString(getTranslation('Grin:')); ?></span><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('(?<=:) ')); ?>"><?= encodeString(getTranslation('(?<=:) ')); ?></span><span class="contextMenu">grin1zmf68j2fne0fpdzglry9jtml5ykwauqncqmk0vmqtwzxcr2939jqmc83fz</span><span class="translatable copy" data-text="Copy" title="Copy"></span></span></li><!--
--><li><span><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Epic Cash:')); ?>"><?= encodeString(getTranslation('Epic Cash:')); ?></span><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('(?<=:) ')); ?>"><?= encodeString(getTranslation('(?<=:) ')); ?></span><span class="contextMenu">https://mwcwallet.com/donate/epic</span><span class="translatable copy" data-text="Copy" title="Copy"></span></span></li><!--
--></ul><!--
--></div><!--
--><h3 class="translatable" data-text="<?= encodeString(getDefaultTranslation('Copyright')); ?>"><?= encodeString(getTranslation('Copyright')); ?></h3><!--
--><div><!--
--><?php
// Check if copyright year is newer than the copyright year
if($year > COPYRIGHT_YEAR) {
// Display copyright information with the current year
echo "<p class=\"copyright translatable\" data-text=\"" . encodeString(getDefaultTranslation('© %1$s%2$s Nicolas Flamel.')) . "\" data-arguments='" . escapeData([sprintf("%.0F", COPYRIGHT_YEAR), sprintf("%.0F", $year)]) . "'>" . encodeString(getTranslation('© %1$s%2$s Nicolas Flamel.', [getNumberTranslation(COPYRIGHT_YEAR), getNumberTranslation($year)])) . "</p>";
}
// Otherwise
else {
// Display copyright information with the copyright year
echo "<p class=\"copyright translatable\" data-text=\"" . encodeString(getDefaultTranslation('© %1$s Nicolas Flamel.')) . "\" data-arguments='" . escapeData([sprintf("%.0F", COPYRIGHT_YEAR)]) . "'>" . encodeString(getTranslation('© %1$s Nicolas Flamel.', [getNumberTranslation(COPYRIGHT_YEAR)])) . "</p>";
}
?><!--
--></div><!--
--><h3 class="translatable" data-text="<?= encodeString(getDefaultTranslation('Disclaimer')); ?>"><?= encodeString(getTranslation('Disclaimer')); ?></h3><!--
--><div class="disclaimer"><!--
--></div><!--
--><h3 class="translatable" data-text="<?= encodeString(getDefaultTranslation('Translation Contributors')); ?>"><?= encodeString(getTranslation('Translation Contributors')); ?></h3><!--
--><div class="translationContributors"><!--
--><ul><!--
--><?php
// Check if there's no translation contributors
if(count(getTransactionContributors()) === 0) {
// Display no translation contributors
echo "<li><span class=\"translatable\" data-text=\"" . encodeString(getDefaultTranslation('N/A')) . "\">" . encodeString(getTranslation('N/A')) . "</span></li>";
}
// Otherwise
else {
// Go through all translation contributors
foreach(getTransactionContributors() as $link => $translationContributor) {
// Check if contributor doesn't have a link
if(is_int($link) === TRUE) {
// Display translation contributor
echo "<li><span class=\"contextMenu\">" . encodeString($translationContributor) . "</span></li>";
}
// Otherwise
else {
// Display translation contributor
echo "<li><a class=\"contextMenu\" href=\"" . encodeString($link) . "\" referrerpolicy=\"same-origin\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">" . encodeString($translationContributor) . "</a></li>";
}
}
}
?><!--
--></ul><!--
--></div><!--
--><h3 class="translatable" data-text="<?= encodeString(getDefaultTranslation('Attributions')); ?>"><?= encodeString(getTranslation('Attributions')); ?></h3><!--
--><div class="attributions"><!--
--><ul><!--
--><?php
// Check if there's no attributions
if(count(ATTRIBUTIONS) === 0) {
// Display no attributions
echo "<li><span class=\"translatable\" data-text=\"" . encodeString(getDefaultTranslation('N/A')) . "\">" . encodeString(getTranslation('N/A')) . "</span></li>";
}
?><!--
--></ul><!--
--></div><!--
--></div><!--
--></div><!--
--><div class="log scrollable hide"><!--
--><div><!--
--><div class="navigation"><!--
--><button class="back hide translatable" data-text="<?= encodeString(getDefaultTranslation('Back')); ?>" title="<?= encodeString(getTranslation('Back')); ?>" data-private></button><!--
--><h2 class="translatable" data-text="<?= encodeString(getDefaultTranslation('Log')); ?>"><?= encodeString(getTranslation('Log')); ?></h2><!--
--><button class="forward translatable" data-text="<?= encodeString(getDefaultTranslation('Forward')); ?>" title="<?= encodeString(getTranslation('Forward')); ?>" data-private></button><!--
--></div><!--
--><div class="messages"><!--
--></div><!--
--></div><!--
--></div><!--
--><div class="transaction scrollable hide"><!--
--><div><!--
--><div class="navigation"><!--
--><button class="back hide translatable" data-text="<?= encodeString(getDefaultTranslation('Back')); ?>" title="<?= encodeString(getTranslation('Back')); ?>" data-private></button><!--
--><button class="forward translatable" data-text="<?= encodeString(getDefaultTranslation('Forward')); ?>" title="<?= encodeString(getTranslation('Forward')); ?>" data-private></button><!--
--></div><!--
--><h3 class="translatable" data-text="<?= encodeString(getDefaultTranslation('Information')); ?>"><?= encodeString(getTranslation('Information')); ?></h3><!--
--><div class="transactionInformation"><!--
--></div><!--
--><h3 class="translatable" data-text="<?= encodeString(getDefaultTranslation('Payment Proof')); ?>"><?= encodeString(getTranslation('Payment Proof')); ?></h3><!--
--><div class="paymentProof"><!--
--></div><!--
--><h3 class="translatable" data-text="<?= encodeString(getDefaultTranslation('Utilities')); ?>"><?= encodeString(getTranslation('Utilities')); ?></h3><!--
--><div class="merge"><!--
--><button class="rebroadcastTransaction" data-private><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Rebroadcast')); ?>"><?= encodeString(getTranslation('Rebroadcast')); ?></span><!--
--><span class="dots"><!--
--><span></span><!--
--><span></span><!--
--><span></span><!--
--></span><!--
--></button><!--
--></div><!--
--><div class="merge"><!--
--><button class="getTransactionFileResponse" data-private><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Get File Response')); ?>"><?= encodeString(getTranslation('Get File Response')); ?></span><!--
--><span class="dots"><!--
--><span></span><!--
--><span></span><!--
--><span></span><!--
--></span><!--
--></button><!--
--></div><!--
--><div><!--
--><button class="cancelTransaction" data-private><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Cancel')); ?>"><?= encodeString(getTranslation('Cancel')); ?></span><!--
--></button><!--
--></div><!--
--></div><!--
--></div><!--
--></div><!--
--></div><!--
--></div><!--
--><div class="status"><!--
--><p class="node translatable" data-text="<?= encodeString(getDefaultTranslation('Node disconnected')); ?>" title="<?= encodeString(getTranslation('Node disconnected')); ?>"><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Node')); ?>"><?= encodeString(getTranslation('Node')); ?></span><!--
--></p><!--
--><p class="listener translatable" data-text="<?= encodeString(getDefaultTranslation('Listener disconnected')); ?>" title="<?= encodeString(getTranslation('Listener disconnected')); ?>"><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Listener')); ?>"><?= encodeString(getTranslation('Listener')); ?></span><!--
--></p><!--
--></div><!--
--></div><!--
--></div><!--
--></main><!--
--><aside class="message noButtons hide noScriptShow"><!--
--><div class="message"><!--
--><div><!--
--><h2 class="translatable" data-text="<?= encodeString(getDefaultTranslation('JavaScript Error')); ?>"><?= encodeString(getTranslation('JavaScript Error')); ?></h2><!--
--><span class="upArrow"></span><!--
--><p class="scrollable"><!--
--><span class="text"><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Your browser doesn\'t support JavaScript. Update your browser and/or enable JavaScript to continue.')); ?>"><?= encodeString(getTranslation('Your browser doesn\'t support JavaScript. Update your browser and/or enable JavaScript to continue.')); ?></span><!--
--></span><!--
--></p><!--
--><span class="downArrow"></span><!--
--><div><!--
--><button><!--
--><span class="translatable"></span><!--
--><span class="dots"><!--
--><span></span><!--
--><span></span><!--
--><span></span><!--
--></span><!--
--></button><!--
--><button><!--
--><span class="translatable"></span><!--
--><span class="dots"><!--
--><span></span><!--
--><span></span><!--
--><span></span><!--
--></span><!--
--></button><!--
--></div><!--
--></div><!--
--></div><!--
--></aside><!--
--><section class="tetris hide"><!--
--><canvas><!--
--></canvas><!--
--></section><!--
--><section class="cookieAcceptance hide noFocus"><!--
--><div class="cookieAcceptance"><!--
--><span></span><!--
--><p class="translatable" data-text="<?= encodeString(getDefaultTranslation('This site uses cookies that are essential to its functionality. By using this site\'s services or clicking OK, you agree to this site\'s use of cookies.')); ?>"><?= encodeString(getTranslation('This site uses cookies that are essential to its functionality. By using this site\'s services or clicking OK, you agree to this site\'s use of cookies.')); ?></p><!--
--><button><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('OK')); ?>"><?= encodeString(getTranslation('OK')); ?></span><!--
--></button><!--
--></div><!--
--></section><!--
--><section class="installApp hide noFocus"><!--
--><div class="installApp"><!--
--><img src="<?= encodeString(getResource("./images/app_icons/app_icon.svg")); ?>" integrity="<?= encodeString(getChecksum("./images/app_icons/app_icon.svg")); ?>"><!--
--><p class="translatable" data-text="<?= encodeString(getDefaultTranslation('Install the MWC Wallet app?')); ?>"><?= encodeString(getTranslation('Install the MWC Wallet app?')); ?></p><!--
--><button class="installNow"><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Install Now')); ?>"><?= encodeString(getTranslation('Install Now')); ?></span><!--
--></button><!--
--><button class="remindMeLater translatable" data-text="<?= encodeString(getDefaultTranslation('Remind me later')); ?>" title="<?= encodeString(getTranslation('Remind me later')); ?>"><!--
--><span class="translatable" data-text="<?= encodeString(getDefaultTranslation('Remind me later')); ?>"><?= encodeString(getTranslation('Remind me later')); ?></span><!--
--></button><!--
--></div><!--
--></section><!--
--></div><!--
--></div><!--
--><link rel="prefetch" as="font" href="<?= encodeString(getResource("./fonts/font_awesome/font_awesome-5.15.4.woff2")); ?>" onerror="processLoadingError(this, true);" type="font/woff2" crossorigin="anonymous"><!--
--><link rel="prefetch" as="font" href="<?= encodeString(getResource("./fonts/font_awesome/font_awesome_solid-5.15.4.woff2")); ?>" onerror="processLoadingError(this, true);" type="font/woff2" crossorigin="anonymous"><!--
--><link rel="stylesheet" type="text/css" href="<?= encodeString(getResource("./styles/common.css")); ?>" integrity="<?= encodeString(getChecksum("./styles/common.css")); ?>" onerror="processLoadingError(this, true);" onload="processLoadingError(this);"><!--
--><link rel="stylesheet" type="text/css" href="<?= encodeString(getResource("./fonts/mwc/mwc.css")); ?>" integrity="<?= encodeString(getChecksum("./fonts/mwc/mwc.css")); ?>" onerror="processLoadingError(this, true);" onload="processLoadingError(this);"><!--
--><link rel="stylesheet" type="text/css" href="<?= encodeString(getResource("./fonts/grin/grin.css")); ?>" integrity="<?= encodeString(getChecksum("./fonts/grin/grin.css")); ?>" onerror="processLoadingError(this, true);" onload="processLoadingError(this);"><!--
--><link rel="stylesheet" type="text/css" href="<?= encodeString(getResource("./fonts/epic/epic.css")); ?>" integrity="<?= encodeString(getChecksum("./fonts/epic/epic.css")); ?>" onerror="processLoadingError(this, true);" onload="processLoadingError(this);"><!--
--><link rel="stylesheet" type="text/css" href="<?= encodeString(getResource("./fonts/btc/btc.css")); ?>" integrity="<?= encodeString(getChecksum("./fonts/btc/btc.css")); ?>" onerror="processLoadingError(this, true);" onload="processLoadingError(this);"><!--
--><link rel="stylesheet" type="text/css" href="<?= encodeString(getResource("./fonts/eth/eth.css")); ?>" integrity="<?= encodeString(getChecksum("./fonts/eth/eth.css")); ?>" onerror="processLoadingError(this, true);" onload="processLoadingError(this);"><!--
--><link rel="stylesheet" type="text/css" href="<?= encodeString(getResource("./styles/tetris.css")); ?>" integrity="<?= encodeString(getChecksum("./styles/tetris.css")); ?>" onerror="processLoadingError(this, true);" onload="processLoadingError(this);"><!--
--><link rel="stylesheet" type="text/css" href="<?= encodeString(getResource("./styles/logo.css")); ?>" integrity="<?= encodeString(getChecksum("./styles/logo.css")); ?>" onerror="processLoadingError(this, true);" onload="processLoadingError(this);"><!--
--><link rel="stylesheet" type="text/css" href="<?= encodeString(getResource("./styles/application.css")); ?>" integrity="<?= encodeString(getChecksum("./styles/application.css")); ?>" onerror="processLoadingError(this, true);" onload="processLoadingError(this);"><!--
--><link rel="stylesheet" type="text/css" href="<?= encodeString(getResource("./styles/unlocked.css")); ?>" integrity="<?= encodeString(getChecksum("./styles/unlocked.css")); ?>" onerror="processLoadingError(this, true);" onload="processLoadingError(this);"><!--
--><link rel="stylesheet" type="text/css" href="<?= encodeString(getResource("./styles/sections.css")); ?>" integrity="<?= encodeString(getChecksum("./styles/sections.css")); ?>" onerror="processLoadingError(this, true);" onload="processLoadingError(this);"><!--
--><link rel="stylesheet" type="text/css" href="<?= encodeString(getResource("./styles/section.css")); ?>" integrity="<?= encodeString(getChecksum("./styles/section.css")); ?>" onerror="processLoadingError(this, true);" onload="processLoadingError(this);"><!--
--><link rel="stylesheet" type="text/css" href="<?= encodeString(getResource("./styles/settings_section.css")); ?>" integrity="<?= encodeString(getChecksum("./styles/settings_section.css")); ?>" onerror="processLoadingError(this, true);" onload="processLoadingError(this);"><!--
--><link rel="stylesheet" type="text/css" href="<?= encodeString(getResource("./styles/about_section.css")); ?>" integrity="<?= encodeString(getChecksum("./styles/about_section.css")); ?>" onerror="processLoadingError(this, true);" onload="processLoadingError(this);"><!--
--><link rel="stylesheet" type="text/css" href="<?= encodeString(getResource("./styles/transaction_section.css")); ?>" integrity="<?= encodeString(getChecksum("./styles/transaction_section.css")); ?>" onerror="processLoadingError(this, true);" onload="processLoadingError(this);"><!--
--><link rel="stylesheet" type="text/css" href="<?= encodeString(getResource("./styles/account_section.css")); ?>" integrity="<?= encodeString(getChecksum("./styles/account_section.css")); ?>" onerror="processLoadingError(this, true);" onload="processLoadingError(this);"><!--
--><link rel="stylesheet" type="text/css" href="<?= encodeString(getResource("./styles/wallet_section.css")); ?>" integrity="<?= encodeString(getChecksum("./styles/wallet_section.css")); ?>" onerror="processLoadingError(this, true);" onload="processLoadingError(this);"><!--
--><link rel="stylesheet" type="text/css" href="<?= encodeString(getResource("./styles/send_payment_section.css")); ?>" integrity="<?= encodeString(getChecksum("./styles/send_payment_section.css")); ?>" onerror="processLoadingError(this, true);" onload="processLoadingError(this);"><!--
--><link rel="stylesheet" type="text/css" href="<?= encodeString(getResource("./styles/log_section.css")); ?>" integrity="<?= encodeString(getChecksum("./styles/log_section.css")); ?>" onerror="processLoadingError(this, true);" onload="processLoadingError(this);"><!--
--><link rel="stylesheet" type="text/css" href="<?= encodeString(getResource("./styles/message.css")); ?>" integrity="<?= encodeString(getChecksum("./styles/message.css")); ?>" onerror="processLoadingError(this, true);" onload="processLoadingError(this);"><!--
--><link rel="stylesheet" type="text/css" href="<?= encodeString(getResource("./styles/install_app.css")); ?>" integrity="<?= encodeString(getChecksum("./styles/install_app.css")); ?>" onerror="processLoadingError(this, true);" onload="processLoadingError(this);"><!--
--><link rel="stylesheet" type="text/css" href="<?= encodeString(getResource("./styles/cookie_acceptance.css")); ?>" integrity="<?= encodeString(getChecksum("./styles/cookie_acceptance.css")); ?>" onerror="processLoadingError(this, true);" onload="processLoadingError(this);"><!--
--><link rel="stylesheet" type="text/css" href="<?= encodeString(getResource("./styles/maintenance_notification.css")); ?>" integrity="<?= encodeString(getChecksum("./styles/maintenance_notification.css")); ?>" onerror="processLoadingError(this, true);" onload="processLoadingError(this);"><!--
--><link rel="stylesheet" type="text/css" href="<?= encodeString(getResource("./styles/language.css")); ?>" integrity="<?= encodeString(getChecksum("./styles/language.css")); ?>" onerror="processLoadingError(this, true);" onload="processLoadingError(this);"><!--
--><script>
// Use strict
"use strict";
// Constants
// HTTPS server address
var HTTPS_SERVER_ADDRESS = <?= (array_key_exists("HTTPS_SERVER_ADDRESS", $_SERVER) === TRUE) ? "\"" . escapeString($_SERVER["HTTPS_SERVER_ADDRESS"]) . "\"" : "\"http\" + ((location[\"protocol\"] === \"https:\") ? \"s\" : \"\") + \"://\" + location[\"hostname\"]"; ?>;
// Tor server address
var TOR_SERVER_ADDRESS = <?= (array_key_exists("TOR_SERVER_ADDRESS", $_SERVER) === TRUE) ? "\"" . escapeString($_SERVER["TOR_SERVER_ADDRESS"]) . "\"" : "\"http\" + ((location[\"protocol\"] === \"https:\") ? \"s\" : \"\") + \"://\" + location[\"hostname\"]"; ?>;
// Files
var FILES = <?= json_encode($files); ?>;
// Copyright year
var COPYRIGHT_YEAR = <?= COPYRIGHT_YEAR; ?>;
// Default language
var DEFAULT_LANGUAGE = "<?= escapeString(DEFAULT_LANGUAGE); ?>";
// Maintenance start time
var MAINTENANCE_START_TIME = "<?= escapeString(MAINTENANCE_START_TIME); ?>";
// Version number
var VERSION_NUMBER = "<?= escapeString(VERSION_NUMBER); ?>";
// Version release date
var VERSION_RELEASE_DATE = "<?= escapeString(VERSION_RELEASE_DATE); ?>";
// Version changes
var VERSION_CHANGES = [
<?php
// Go through all version changes
foreach(VERSION_CHANGES as $versionChange) {
// Display version change
echo "\"" . escapeString($versionChange) . "\",";
}
?>
];
// Attributions
var ATTRIBUTIONS = <?= json_encode(ATTRIBUTIONS); ?>;
// Access timestamp
var ACCESS_TIMESTAMP = Date.now();
// URL query string
var URL_QUERY_STRING = location["search"];
// No state
var NO_STATE = null;
// Language change event
var LANGUAGE_CHANGE_EVENT = "LanguageChangeEvent";
// Main function
// Check if history is supported
if(typeof history === "object" && history !== null) {
// Check if a startup error didn't occur
if(startupErrorOccurred() === false) {
// Change displayed URL to remove query string
history.replaceState(NO_STATE, document["title"], ((location["protocol"] === "file:") ? location["protocol"] + "//" : "") + location["pathname"]);
}
// Title language change event
addEvent(getElement(document, "title", "translatable"), LANGUAGE_CHANGE_EVENT, function() {
// Set timeout
setTimeout(function() {
// Check if a startup error didn't occur
if(startupErrorOccurred() === false) {
// Change displayed URL to remove query string
history.replaceState(NO_STATE, document["title"], ((location["protocol"] === "file:") ? location["protocol"] + "//" : "") + location["pathname"]);
}
}, 0);
});
}
// Supporting function implementation
// Add minified suffix
function addMinifiedSuffix(file) {
// Get file's suffix offset
var suffixOffset = file.lastIndexOf(".");
// Check if file contains no suffix
if(suffixOffset === INDEX_NOT_FOUND || suffixOffset < "./"["length"])
// Return file with minified suffix at the end
return file + ".min";
// Otherwise
else
// Return file with minified suffix insert before its suffix
return file.substring(0, suffixOffset) + ".min" + file.substring(suffixOffset);
}
// Get resource
function getResource(file) {
// Return resource with version
return ((file in FILES === true && FILES[file]["Minified"] === true) ? addMinifiedSuffix(file) : file) + ((file in FILES === true && FILES[file]["Version"] !== 0) ? "?" + FILES[file]["Version"] : "");
}
</script><!--
--><script src="<?= encodeString(getResource("./scripts/jQuery-3.6.4.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/jQuery-3.6.4.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);"></script><!--
--><script src="<?= encodeString(getResource("./scripts/bignumber.js-9.1.1.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/bignumber.js-9.1.1.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);"></script><!--
--><script src="<?= encodeString(getResource("./scripts/common.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/common.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);"></script><!--
--><script src="<?= encodeString(getResource("./scripts/consensus.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/consensus.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);"></script><!--
--><script src="<?= encodeString(getResource("./scripts/languages.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/languages.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);"></script><!--
--><script src="<?= encodeString(getResource("./scripts/language.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/language.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);"></script><!--
--><script src="<?= encodeString(getResource("./scripts/extension.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/extension.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);"></script><!--
--><script src="<?= encodeString(getResource("./scripts/JSONBigNumber-1.1.1.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/JSONBigNumber-1.1.1.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/glMatrix-3.4.1.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/glMatrix-3.4.1.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/BLAKE2b-0.0.2.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/BLAKE2b-0.0.2.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/Ed25519-0.0.22.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/Ed25519-0.0.22.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/X25519-0.0.23.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/X25519-0.0.23.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/js-sha3-0.8.0.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/js-sha3-0.8.0.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/js-sha256-0.10.0.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/js-sha256-0.10.0.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/ChaCha-2.1.0.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/ChaCha-2.1.0.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/secp256k1-zkp-0.0.29.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/secp256k1-zkp-0.0.29.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/SMAZ-0.0.31.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/SMAZ-0.0.31.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/hi-base32-0.5.1.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/hi-base32-0.5.1.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/bech32-2.0.0.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/bech32-2.0.0.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/base58.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/base58.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/base64.js-3.7.5.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/base64.js-3.7.5.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/crc32-1.2.0.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/crc32-1.2.0.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/bit_reader.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/bit_reader.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/bit_writer.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/bit_writer.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/fatal_error.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/fatal_error.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/startup_images_creator.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/startup_images_creator.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/scroll.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/scroll.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/copyright.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/copyright.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/protocol_handler.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/protocol_handler.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/settings.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/settings.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/crypto.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/crypto.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/json_rpc.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/json_rpc.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/tor.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/tor.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/mqs.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/mqs.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/slatepack.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/slatepack.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/uuid.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/uuid.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/hash.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/hash.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/slate.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/slate.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/slate_participant.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/slate_participant.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/slate_input.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/slate_input.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/slate_output.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/slate_output.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/slate_kernel.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/slate_kernel.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/proof_builder.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/proof_builder.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/legacy_proof_builder.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/legacy_proof_builder.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/new_proof_builder.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/new_proof_builder.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/view_proof_builder.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/view_proof_builder.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/protocol_buffers.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/protocol_buffers.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/hardware_wallet_definitions.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/hardware_wallet_definitions.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/hardware_wallet_usb_transport.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/hardware_wallet_usb_transport.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/hardware_wallet_bluetooth_transport.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/hardware_wallet_bluetooth_transport.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/hardware_wallet.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/hardware_wallet.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/api.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/api.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/instance.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/instance.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/service_worker_installer.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/service_worker_installer.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/wallet.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/wallet.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/identifier.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/identifier.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/database_transaction.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/database_transaction.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/database.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/database.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/transaction.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/transaction.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/transactions.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/transactions.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/height.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/height.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/initial_heights_obtained.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/initial_heights_obtained.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/recent_heights.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/recent_heights.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/output.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/output.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/output_information.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/output_information.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/tor_proxy.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/tor_proxy.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/node.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/node.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/seed.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/seed.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/wallets.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/wallets.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/listener.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/listener.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/interaction.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/interaction.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/install_app.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/install_app.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/focus.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/focus.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/caps_lock.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/caps_lock.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/message.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/message.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/prices.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/prices.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/log.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/log.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/clipboard.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/clipboard.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/sections.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/sections.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/section.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/section.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/settings_section.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/settings_section.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/about_section.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/about_section.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/transaction_section.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/transaction_section.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/account_section.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/account_section.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/wallet_section.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/wallet_section.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/send_payment_section.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/send_payment_section.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/log_section.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/log_section.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/unlocked.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/unlocked.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/version.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/version.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/cookie_acceptance.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/cookie_acceptance.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/maintenance_notification.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/maintenance_notification.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/tetris.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/tetris.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/logo.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/logo.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/qrcode-generator-1.4.4.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/qrcode-generator-1.4.4.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/automatic_lock.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/automatic_lock.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/wake_lock.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/wake_lock.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/camera.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/camera.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/emoji.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/emoji.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--><script src="<?= encodeString(getResource("./scripts/application.js")); ?>" integrity="<?= encodeString(getChecksum("./scripts/application.js")); ?>" type="application/javascript" charset="UTF-8" onerror="processLoadingError(this, true);" defer="true"></script><!--
--></body>
</html>