EaglerForge/sources/setup/workspace_template/javascript/OfflineDownloadTemplate.txt

509 lines
1.1 MiB
Plaintext
Raw Normal View History

2024-04-01 12:13:50 -05:00
<!DOCTYPE html>
<!--
This file is from ${date}, there is no official eagler download link anymore, check the websites and discords of your favorite eagler servers for new versions
Be aware that some server owners are lazy and do not update their client regularly
Compile it yourself here: https://gitlab.com/lax1dude/eaglercraftx-1.8/
-->
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="EaglercraftX 1.8 Offline" />
<meta name="keywords" content="eaglercraft, eaglercraftx, minecraft, 1.8, 1.8.8" />
<title>EaglercraftX 1.8</title>
<meta property="og:locale" content="en-US" />
<meta property="og:type" content="website" />
<meta property="og:title" content="EaglercraftX 1.8 Offline" />
<meta property="og:description" content="this file is not a website, whoever uploaded it to this URL is a dumbass" />
<script type="text/javascript">
function initAPI(version) {
var ModAPI = {};
ModAPI.events = {};
ModAPI.events.types = ["event"];
ModAPI.events.listeners = { "event": [] };
ModAPI.globals = {};
ModAPI.version = version;
ModAPI.addEventListener = function AddEventListener(name, callback) {
if (!callback) {
throw new Error("Invalid callback!");
}
if (ModAPI.events.types.includes(name)) {
if (!Array.isArray(ModAPI.events.listeners[name])) {
ModAPI.events.listeners[name] = [];
}
ModAPI.events.listeners[name].push(callback);
console.log("Added new event listener.");
} else {
throw new Error("This event does not exist!");
}
};
ModAPI.removeEventListener = function removeEventListener(name, func, slow) {
if (!func) {
throw new Error("Invalid callback!");
}
if (!Array.isArray(ModAPI.events.listeners[name])) {
ModAPI.events.listeners[name] = [];
}
var targetArr = ModAPI.events.listeners[name];
if (!slow) {
if (targetArr.indexOf(func) !== -1) {
targetArr.splice(targetArr.indexOf(func), 1);
console.log("Removed event listener.");
}
} else {
var functionString = func.toString();
targetArr.forEach((f, i) => {
if (f.toString() === functionString) {
targetArr.splice(i, 1);
console.log("Removed event listener.");
}
});
}
};
ModAPI.events.newEvent = function newEvent(name) {
ModAPI.events.types.push(name);
};
ModAPI.events.callEvent = function callEvent(name, data) {
if (
!ModAPI.events.types.includes(name) ||
!Array.isArray(ModAPI.events.listeners[name])
) {
if (!Array.isArray(ModAPI.events.listeners[name])) {
if (ModAPI.events.types.includes(name)) {
ModAPI.events.listeners.event.forEach((func) => {
func({ event: name, data: data });
});
return;
}
return;
}
console.error(
"The ModAPI has been called with an invalid event name: " + name
);
console.error("Please report this bug to the repo.");
return;
}
ModAPI.events.listeners[name].forEach((func) => {
func(data);
});
ModAPI.events.listeners.event.forEach((func) => {
func({ event: name, data: data });
});
ModAPI.globals._initUpdate();
};
ModAPI.updateComponent = function updateComponent(component) {
if (
typeof component !== "string" ||
ModAPI[component] === null ||
ModAPI[component] === undefined
) {
return;
}
if (!ModAPI.globals || !ModAPI.globals.onGlobalsUpdate) {
return;
}
if (!ModAPI.globals.toUpdate) {
ModAPI.globals.toUpdate = [];
}
if (ModAPI.globals.toUpdate.indexOf(component) === -1) {
ModAPI.globals.toUpdate.push(component);
}
};
ModAPI.require = function require(component) {
if (typeof component !== "string") {
return;
}
if (!ModAPI.globals || !ModAPI.globals.onRequire) {
return;
}
ModAPI.globals.onRequire(component);
};
ModAPI.globals._initUpdate = function _initUpdate() {
if (!ModAPI.globals.toUpdate) {
ModAPI.globals.toUpdate = [];
}
ModAPI.globals.toUpdate.forEach((id) => {
ModAPI.globals.onGlobalsUpdate(id);
});
ModAPI.globals.toUpdate = [];
};
window.ModAPI = ModAPI;
}
</script>
<script type="text/javascript">
function loadLoader() {
window.ModLoader = function ModLoader(ModsArr) {
if (!window.eaglerMLoaderMainRun) {
var searchParams = new URLSearchParams(location.search);
searchParams.getAll("Mod").forEach((ModToAdd) => {
console.log(
"EaglerML: Adding Mod to loadlist from search params: " + ModToAdd
);
ModsArr.push(ModToAdd);
});
if (
!!eaglercraftXOpts &&
!!eaglercraftXOpts.Mods &&
Array.isArray(eaglercraftXOpts.Mods)
) {
eaglercraftXOpts.Mods.forEach((ModToAdd) => {
console.log(
"EaglerML: Adding Mod to loadlist from eaglercraftXOpts: " +
ModToAdd
);
ModsArr.push(ModToAdd);
});
}
window.eaglerMLoaderMainRun = true;
}
if (window.noLoadMods === true) {
ModsArr.splice(0, ModsArr.length);
}
function checkModsLoaded(totalLoaded, identifier) {
console.log(
"EaglerML: Checking if Mods are finished :: " +
totalLoaded +
"/" +
ModsArr.length
);
if (totalLoaded >= ModsArr.length) {
clearInterval(identifier);
window.ModGracePeriod = false;
if (
window.eaglerMLoaderMainRun &&
ModAPI &&
ModAPI.events &&
ModAPI.events.callEvent
) {
ModAPI.events.callEvent("load", {});
}
console.log(
"EaglerML: Checking if Mods are finished :: All Mods loaded! Grace period off."
);
}
}
function methodB(currentMod) {
try {
console.log("EaglerML: Loading " + currentMod + " via method B.");
var script = document.createElement("script");
script.src = currentMod;
script.setAttribute("data-Mod", currentMod);
script.setAttribute("data-isMod", true);
script.onerror = () => {
console.log(
"EaglerML: Failed to load " + currentMod + " via method B!"
);
script.remove();
totalLoaded++;
};
script.onload = () => {
console.log(
"EaglerML: Successfully loaded " + currentMod + " via method B."
);
totalLoaded++;
};
document.body.appendChild(script);
} catch (error) {
console.log(
"EaglerML: Oh no! The Mod " + currentMod + " failed to load!"
);
totalLoaded++;
}
}
window.ModGracePeriod = true;
var totalLoaded = 0;
var loaderCheckInterval = null;
ModsArr.forEach((c) => {
let currentMod = c;
console.log("EaglerML: Starting " + currentMod);
try {
var req = new XMLHttpRequest();
req.open("GET", currentMod);
req.onload = function xhrLoadHandler() {
console.log("EaglerML: Loading " + currentMod + " via method A.");
var script = document.createElement("script");
try {
script.src =
"data:text/javascript," + encodeURIComponent(req.responseText);
} catch (error) {
methodB(currentMod);
return;
}
script.setAttribute("data-Mod", currentMod);
script.setAttribute("data-isMod", true);
script.onerror = () => {
console.log(
"EaglerML: Failed to load " + currentMod + " via method A!"
);
script.remove();
totalLoaded++;
};
script.onload = () => {
console.log(
"EaglerML: Successfully loaded " + currentMod + " via method A."
);
totalLoaded++;
};
document.body.appendChild(script);
};
req.onerror = function xhrErrorHandler() {
methodB(currentMod);
};
req.send();
} catch (error) {
methodB(currentMod);
}
});
loaderCheckInterval = setInterval(() => {
checkModsLoaded(totalLoaded, loaderCheckInterval);
}, 500);
console.log(
"EaglerML: Starting to load " + ModsArr.length + " Mods..."
);
window.returntotalloadedmods = function returntotalloadedmods(){
return totalLoaded
}
};
}
</script>
<script type="text/javascript">
function displayGui() {
function gui() {
if (document.querySelector("#eaglerpl_gui")) {
document.querySelector("#eaglerpl_gui").remove();
}
localStorage.setItem(
"ml::Mods",
localStorage.getItem("ml::Mods") || "[]"
);
try {
localStorage.setItem(
"ml::Mods",
JSON.stringify(JSON.parse(localStorage.getItem("ml::Mods")))
);
} catch (error) {
localStorage.setItem("ml::Mods", "[]");
}
var Mods = JSON.parse(localStorage.getItem("ml::Mods"));
var modNumber = 1;
var container = document.createElement("div");
container.id = "eaglerpl_gui";
container.style = '@import "https://eaglerforge.github.io/files/newui.css"';
2024-04-01 12:13:50 -05:00
var modList = document.createElement("div");
modList.style = "height: calc(var(--local-scale) * 80px);";
modList.class = "menucontainer grid";
var buttonContainer = document.createElement("div");
buttonContainer.class = "menucontainer";
var closeButton = document.createElement("a");
closeButton.class = "mcbutton";
closeButton.href = "#";
closeButton.addEventListener("click", () => {
document.querySelector("#eaglerpl_gui").remove();
});
closeButton.innerHTML = "Done";
var removeButton = document.createElement("a");
removeButton.class = "mcbutton";
removeButton.disabled = true;
removeButton.href = "#";
removeButton.style = "background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+CjxzdmcgdmVyc2lvbj0iMS4xIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHNoYXBlLXJlbmRlcmluZz0iY3Jpc3BFZGdlcyI+CjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjEiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjIiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjMiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjQiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjUiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjYiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjciIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjgiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjkiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjEwIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjMDAwMDAwIiAvPgo8cmVjdCB4PSIxMSIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iIzAwMDAwMCIgLz4KPHJlY3QgeD0iMTIiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjEzIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjMDAwMDAwIiAvPgo8cmVjdCB4PSIxNCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iIzAwMDAwMCIgLz4KPHJlY3QgeD0iMTUiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjE2IiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjMDAwMDAwIiAvPgo8cmVjdCB4PSIxNyIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iIzAwMDAwMCIgLz4KPHJlY3QgeD0iMTgiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjE5IiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjMDAwMDAwIiAvPgo8cmVjdCB4PSIyMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iIzAwMDAwMCIgLz4KPHJlY3QgeD0iMjEiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjIyIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjMDAwMDAwIiAvPgo8cmVjdCB4PSIyMyIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iIzAwMDAwMCIgLz4KPHJlY3QgeD0iMjQiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjI1IiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjMDAwMDAwIiAvPgo8cmVjdCB4PSIyNiIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iIzAwMDAwMCIgLz4KPHJlY3QgeD0iMjciIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjI4IiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjMDAwMDAwIiAvPgo8cmVjdCB4PSIyOSIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iIzAwMDAwMCIgLz4KPHJlY3QgeD0iMzAiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjMxIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjMDAwMDAwIiAvPgo8cmVjdCB4PSIzMiIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iIzAwMDAwMCIgLz4KPHJlY3QgeD0iMzMiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjM0IiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjMDAwMDAwIiAvPgo8cmVjdCB4PSIzNSIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iIzAwMDAwMCIgLz4KPHJlY3QgeD0iMzYiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjM3IiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjMDAwMDAwIiAvPgo8cmVjdCB4PSIzOCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iIzAwMDAwMCIgLz4KPHJlY3QgeD0iMzkiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjQwIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjMDAwMDAwIiAvPgo8cmVjdCB4PSI0MSIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iIzAwMDAwMCIgLz4KPHJlY3QgeD0iNDIiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjQzIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjMDAwMDAwIiAvPgo8cmVjdCB4PSI0NCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iIzAwMDAwMCIgLz4KPHJlY3QgeD0iNDUiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjQ2IiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjMDAwMDAwIiAvPgo8cmVjdCB4PSI0NyIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iIzAwMDAwMCIgLz4KPHJlY3QgeD0iNDgiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjQ5IiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0
removeButton.innerHTML = "Remove";
var loadButton = document.createElement("a");
loadButton.class = "mcbutton";
loadButton.href = "#";
loadButton.innerHTML = "Load mod";
var uploadButton = document.createElement("a");
uploadButton.class = "mcbutton";
uploadButton.href = "#";
uploadButton.innerHTML = "Upload mod";
buttonContainer.appendChild(loadButton);
buttonContainer.appendChild(uploadButton);
buttonContainer.appendChild(removeButton);
buttonContainer.appendChild(closeButton);
Mods.forEach((url) => {
var mod = document.createElement("div");
mod.id = "mod" + modNumber;
mod.url = url;
modNumber += 1;
var urlBox = document.createElement("div");
urlBox.class = "url-container";
var urlText = document.createElement("h1");
urlText.innerText = url;
urlBox.append(urlText);
mod.appendChild(urlBox);
mod.addEventListener("click", () => {
modList.forEach(m => m.classList.remove("selected"));
mod.classList.add("selected");
if (mod.classList.contains("selected")) {
removeButton.removeAttribute("disabled");
removeButton.style.backgroundImage = "url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+CjxzdmcgdmVyc2lvbj0iMS4xIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHNoYXBlLXJlbmRlcmluZz0iY3Jpc3BFZGdlcyI+CjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjEiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjIiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjMiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjQiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjUiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjYiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjciIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjgiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjkiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjEwIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjMDAwMDAwIiAvPgo8cmVjdCB4PSIxMSIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iIzAwMDAwMCIgLz4KPHJlY3QgeD0iMTIiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjEzIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjMDAwMDAwIiAvPgo8cmVjdCB4PSIxNCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iIzAwMDAwMCIgLz4KPHJlY3QgeD0iMTUiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjE2IiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjMDAwMDAwIiAvPgo8cmVjdCB4PSIxNyIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iIzAwMDAwMCIgLz4KPHJlY3QgeD0iMTgiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjE5IiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjMDAwMDAwIiAvPgo8cmVjdCB4PSIyMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iIzAwMDAwMCIgLz4KPHJlY3QgeD0iMjEiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjIyIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjMDAwMDAwIiAvPgo8cmVjdCB4PSIyMyIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iIzAwMDAwMCIgLz4KPHJlY3QgeD0iMjQiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjI1IiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjMDAwMDAwIiAvPgo8cmVjdCB4PSIyNiIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iIzAwMDAwMCIgLz4KPHJlY3QgeD0iMjciIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjI4IiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjMDAwMDAwIiAvPgo8cmVjdCB4PSIyOSIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iIzAwMDAwMCIgLz4KPHJlY3QgeD0iMzAiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjMxIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjMDAwMDAwIiAvPgo8cmVjdCB4PSIzMiIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iIzAwMDAwMCIgLz4KPHJlY3QgeD0iMzMiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjM0IiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjMDAwMDAwIiAvPgo8cmVjdCB4PSIzNSIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iIzAwMDAwMCIgLz4KPHJlY3QgeD0iMzYiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjM3IiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjMDAwMDAwIiAvPgo8cmVjdCB4PSIzOCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iIzAwMDAwMCIgLz4KPHJlY3QgeD0iMzkiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjQwIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjMDAwMDAwIiAvPgo8cmVjdCB4PSI0MSIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iIzAwMDAwMCIgLz4KPHJlY3QgeD0iNDIiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjQzIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjMDAwMDAwIiAvPgo8cmVjdCB4PSI0NCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iIzAwMDAwMCIgLz4KPHJlY3QgeD0iNDUiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjQ2IiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjMDAwMDAwIiAvPgo8cmVjdCB4PSI0NyIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iIzAwMDAwMCIgLz4KPHJlY3QgeD0iNDgiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjQ5IiB5PSIwIiB3aWR0aD0iMSIgaG
} else {
removeButton.setAttribute("disabled", true);
removeButton.style.backgroundImage = "url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+CjxzdmcgdmVyc2lvbj0iMS4xIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHNoYXBlLXJlbmRlcmluZz0iY3Jpc3BFZGdlcyI+CjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjEiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjIiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjMiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjQiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjUiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjYiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjciIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjgiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjkiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjEwIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjMDAwMDAwIiAvPgo8cmVjdCB4PSIxMSIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iIzAwMDAwMCIgLz4KPHJlY3QgeD0iMTIiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjEzIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjMDAwMDAwIiAvPgo8cmVjdCB4PSIxNCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iIzAwMDAwMCIgLz4KPHJlY3QgeD0iMTUiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjE2IiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjMDAwMDAwIiAvPgo8cmVjdCB4PSIxNyIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iIzAwMDAwMCIgLz4KPHJlY3QgeD0iMTgiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjE5IiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjMDAwMDAwIiAvPgo8cmVjdCB4PSIyMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iIzAwMDAwMCIgLz4KPHJlY3QgeD0iMjEiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjIyIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjMDAwMDAwIiAvPgo8cmVjdCB4PSIyMyIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iIzAwMDAwMCIgLz4KPHJlY3QgeD0iMjQiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjI1IiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjMDAwMDAwIiAvPgo8cmVjdCB4PSIyNiIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iIzAwMDAwMCIgLz4KPHJlY3QgeD0iMjciIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjI4IiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjMDAwMDAwIiAvPgo8cmVjdCB4PSIyOSIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iIzAwMDAwMCIgLz4KPHJlY3QgeD0iMzAiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjMxIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjMDAwMDAwIiAvPgo8cmVjdCB4PSIzMiIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iIzAwMDAwMCIgLz4KPHJlY3QgeD0iMzMiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjM0IiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjMDAwMDAwIiAvPgo8cmVjdCB4PSIzNSIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iIzAwMDAwMCIgLz4KPHJlY3QgeD0iMzYiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjM3IiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjMDAwMDAwIiAvPgo8cmVjdCB4PSIzOCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iIzAwMDAwMCIgLz4KPHJlY3QgeD0iMzkiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjQwIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjMDAwMDAwIiAvPgo8cmVjdCB4PSI0MSIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iIzAwMDAwMCIgLz4KPHJlY3QgeD0iNDIiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjQzIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjMDAwMDAwIiAvPgo8cmVjdCB4PSI0NCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iIzAwMDAwMCIgLz4KPHJlY3QgeD0iNDUiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjQ2IiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjMDAwMDAwIiAvPgo8cmVjdCB4PSI0NyIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iIzAwMDAwMCIgLz4KPHJlY3QgeD0iNDgiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiMwMDAwMDAiIC8+CjxyZWN0IHg9IjQ5IiB5PSIwIiB3aWR0aD0iMSIgaG
}
});
modList.appendChild(mod);
});
loadButton.addEventListener("click", () => {
var newMod = window.prompt("URL of Mod: ", "http://example.com/example.js");
Mods.push(
newMod
);
localStorage.setItem("ml::Mods", JSON.stringify(Mods));
if(window.ModLoader){
ModLoader([newMod]);
}
gui();
});
uploadButton.addEventListener("click", function uploadBtnListener() {
var filePicker = document.createElement("input");
filePicker.type = "file";
filePicker.accept = ".js";
filePicker.addEventListener("input", function onInput() {
if (filePicker.files[0]) {
var reader = new FileReader();
reader.addEventListener("load", function onModRead() {
var newMod = reader.result.replace(";base64", `;fs=${encodeURIComponent(filePicker.files[0].name) || "unknown"};base64`);
Mods.push(newMod);
localStorage.setItem("ml::Mods", JSON.stringify(Mods));
if(window.ModLoader){
ModLoader([newMod]);
}
gui();
});
reader.readAsDataURL(filePicker.files[0]);
}
});
filePicker.click();
});
removeButton.addEventListener("click", () => {
if (!window.confirm("Delete Mod?") || Mods.indexOf(url) === -1) {
return;
}
Mods.splice(Mods.indexOf(url), 1);
localStorage.setItem("ml::Mods", JSON.stringify(Mods));
gui();
});
container.appendChild(modList);
container.appendChild(buttonContainer);
ModAPI.events.callEvent("gui", {});
document.body.appendChild(container);
}
gui();
}
</script>
<script type="text/javascript">
function displayanvil(){
var img = document.createElement('img');
img.id = 'anvil';
img.src = 'data:image/gif;base64,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
img.draggable = false;
img.style.position = 'fixed';
img.style.bottom = '0';
img.style.right = '0';
img.style.width = '200px';
img.style.height = 'auto';
document.body.appendChild(img);
}
</script>
<script type="text/javascript">
"use strict";
const relayId = Math.floor(Math.random() * 3);
// %%%%%%%%% launch options %%%%%%%%%%%%
window.eaglercraftXOpts = {
container: "game_frame",
worldsDB: "worlds",
relays: [
{ addr: "wss://relay.deev.is/", comment: "lax1dude relay #1", primary: relayId == 0 },
{ addr: "wss://relay.lax1dude.net/", comment: "lax1dude relay #2", primary: relayId == 1 },
{ addr: "wss://relay.shhnowisnottheti.me/", comment: "ayunami relay #1", primary: relayId == 2 }
]
};
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
</script>
<script type="text/javascript">
"use strict";
if(typeof window !== "undefined") window.eaglercraftXClientScriptElement = document.currentScript;
${classes_js}
</script>
<script type="text/javascript">
"use strict";
window.eaglercraftXOpts.assetsURI = ${assets_epk};
var launchInterval = -1;
var launchCounter = 1;
var launchCountdownNumberElement = null;
var launchCountdownProgressElement = null;
function launchTick() {
launchCountdownNumberElement.innerText = "" + Math.floor(6.0 - launchCounter * 0.06);
launchCountdownProgressElement.style.width = "" + launchCounter + "%";
if(++launchCounter > 100) {
clearInterval(launchInterval);
setTimeout(() => { document.getElementById("launch_countdown_screen").remove(); main(); }, 50);
}
}
window.addEventListener("load", () => {
launchCountdownNumberElement = document.getElementById("launchCountdownNumber");
launchCountdownProgressElement = document.getElementById("launchCountdownProgress");
launchInterval = setInterval(launchTick, 50);
});
function safeLaunch() {
window.noLoadMods = true;
clearInterval(launchInterval);
setTimeout(() => { document.getElementById("launch_countdown_screen").remove(); main(); }, 50);
}
</script>
<link type="image/png" rel="shortcut icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAIAAAAiOjnJAAAgr0lEQVR4nOydeWwb593n575JStRt3ZItWbYOy7LkS3Hc6O3WcdvtogGCHmnd5r9Fi7Yo0P+KLBYbvMGiizZ/bLct6nXi3bSLYHe7bd6NEztx7DiODlu2LMmSJVPWZd0kRYn3OfOCMzZFSTyHQ85wqE8Mh555+Mwzmq9+v988x+9BOI4D9ojJ6MOxL/sH4haDIAiGYQIPgmKohqYJguA/MBiO4TjO0DRNUQiCZKTVMpMTN5kKdrv9zr37iZRkeXw+n81uBwBgOVKZtpbm453HQAgCJW+owtgTViz8fv+nn930+XxSVTg6/gjX6AqKiiAQRGAIAsGgnYNACATh4IfgEQxBVCA8cM8VxmB4dLRv4K60deI43v2Vl1AMi1aAxrEinUbai2YeSO4GKBeLZePe/QeSV+vxeCbGx2L8Pjs8XofbK/l1M8yesCLjDwSufXbDK50TDGdxfn5jfT1GAZPN5g8E0nHpjLEnrMgMj4xaLJb01T8/OxPjLMcB63Zn+q6eAfaEFQGzef3ekPROMJzK6prYBZwer83tTmsb0sqesHbi8Xg/+ewGy7Lpu0Tpvn35BQVxi63bHD5/tjrEPWHtpG/gzsbmZvrqJ0iyqaUVBON3KHAcYLLa0yjwdLInrG2srK5NGgzpqx8EwdajHTiOJ1je4/dv2h3pa0/62BPWFv5A4Mv+/rR27FVW1+gTcILhbDrdLm9aXk7Typ6wthgeGTUaTemrH8fxAwcPiviiJQuN1p6wnuH1+8k8fYwO8RQBIai1o0Nc/V5/wOp0paFRaWRPWM9Ytzkpmm5qbk5T/ZVVVQWFRaK/vuFw+QPZFMfvCSuI1ely853sZeUVJaVlktdPkGR9Y2MqNbAcZ7TasmhYd09YgMvrC3VzgyB4+Egbo5FyDBiGkY6u4zhOpFiPx+fPomAr14XFBZ2gPfwIhuFHu47jRKo6CFFbX6/R6SSpyup0u31+SapKN7k+bcZsc9hcEUZOWJb1eoK43S63y+3zeFwup8vpcrmcPq/X70/06Wq02uOnuxEUlarBCASV6XUwpHSLkNPCcnq8a5u2pL7CcZygOZfT6XQ4HA67y+F0OB0uh9Pv39nbBEHQqRfPSutYAQDQkoReQ0tbp+TkrrBYAFgyWyR51eJ4uXm9QRvndrncbpfX7XG5XFqdrqa+XorGbgMEgGKdhsTT1TMiCbkrrA2Hc8ORZZ1DISAQLC/IU7JDVG7L0grf5ZjFk1JYjrMoe8JWLgqL5YC1TSub5aba7va4vMqdwZyLwtp0OLKrFzsaxk27T6kzmHNOWC6PdzObnWA4LMet2xTaZZpbwvIHAkarXe5WSInL63N6lOgQc0tYFrsz20Or3azbHYF0TqQWRw4Jy+nxOhT5y50i/gBrtinODOeKsHyBgEldTjAcj8+vNEucK8Ky2BxK+9FLSKGWgRJYnZFJckJYdpfHmYXTxhOExjEybRNfRaN+YfkDAQWGIFIBAkA+o8QBafULy2xzqNYFAoCOJhFYiQ9RiW2SEJsrK9dOJQiJonk0JXcrIqNmYQVYVuEjtakAgWCBVolOUEC1wuL4oTQVvwnmBZ0gLHcroqJaYdmeL7xRJbbNTVzBqlKtsFiWy95JfHHxeb1Dg3cH7g7K3ZBYqFNYEASSmGTrF5TG9JTB6XA8mpycf7ogd1uiok5hAQCg19AYomhnIY4Ni2V+ZkaYaH/j81s2W3KLQTKGaoUFQ1Bpvk5l2vK43UN37gSeT+5zud03v7id1hxxolGtsIQX8kItI3crpOSJweDxbJuluLi0PPVkWr4WRUXNwgIAAEMQPaPQLsRkWTeZFuZmdx8fuDvocChuHqnKhQUAgJYiNWSiGfQUi9frHb5/L6LXczid6U6aKgL1CwsAgAINk+0viTNTBk/0JMorq2ujY+OZbVEcckJYQW1pGSUv74yNw2Gfm44TSA3eu2+1WjPVovhk6886WRAIKsnTKm02XCJwHDc5NhbX0/n8/o8/ue5VzErDXBEWH8jDhQoetY3G0sLC2spKIiXXLZYHI6Ppb1FC5JCwAACgcDw/q14SnQ7HxNjDxMuPjD5cWV1NZ4sSJbeEBQCAjiJ1lGRJ1dIKx7FjI8O+ZLybPxD46NqnmwoItnJOWAA/lzcrXhLnZ2fNRmOy3/J4PH39d9LToiTIRWEBAFCk0yp8tMdusxkePRL33dn5+bFHE1K3KDlyVFgQCBRpNYp9ReQ47vGj8cQTUu7my94+k9ksaaOSI0eFBQAAisCKTbi4+PRpgm+C0WA57nZvv4xL73NXWAAAaEhCq7xA3uV0jo+OpF7PyuqqwTAlRYvEkNPCAgBAz9CUklZ78k7wEStR1qu794ckqUcEuS4sfrSHRhQz2mNZX19elG5eqHxrSZTyA5URGIJK8jRKGElkWXYyme7QuHR2HJWwtqSQ/6epBFAEKdYx8r4kchw3MfZwc2NDqgorK8oPNjZIVVuy7AnrGTiKyjvd1Gw0CpPZJQECweOdx6SqTUwDZLy20qAJPI8mZbl0wO+fGBuTsMLOYx2FSW7lKi2IjNdWIHk0FQiwLp8vk2mVOY57Ynhst0k2wFdcVNjWkq6NFxNkT1g7KeAdYoBlvf6Az+/3+QPeQCAotLS9YSEQ5I8+OzRZIAg6efw4JPe7SO5ueZIsvkDA5fF5fH6PX2J7Vpqvw2Bo3WIxmcwra2vLyys2u130HPbW5sOnThyXsHni2BOWGLbsWYD18lZNtD3TUeSOKWIcx3k8ns1N6/rGxvq6ZdO6uW6xOBzORJ5UQYH+333zGygivyPaE5Y0+Hh36fX7ecEF/IFAIj9WAkVL87Vxi3Ec5/Z4NjY2LRaLZXPTYtnY2NhwOHdKDYKgb55/uay0JJUbkYo9YaUFluO8fr/H63f7fF5/0KBFLFam1+GirAvHcU6n02yxrCyvrqytmszrXq+3o/2IjD2iO9gTViaIaM/yaUonUe+GPxCw2+waDQMrJrdRLgrL7XbPzMwMDQ319/evrKw0NTV1d3d3dnbm5eVlpgGCPSOk289XgahcWD6fb2VlxWAwTE1NzczMTE5OTk1Nzc/PW63WHTdO03RtbW1bW1tXV1dra2tLS4terwezcLmYQlCbsNxu99zc3NDQ0ODg4PDw8NjY2OrqqohXdwzDGhoauru7X3rppRMnTuzbt085XiYryGJh+Xw+k8k0NTU1PT396NGjqakpg8EwOztrT6ETKCIwDJeVlR09erS9vb2jo+Pw4cOVlZWoqh1Z6mSTsDwez9LS0sDAwH2e8fFxo9GYysRwcUAQVFxcfPLkybNnz544caKtrQ3Hsz7piOQoVFg+n89oNM7MzDx+/PgJz+PHj+fm5jY2NgIK21NUr9c3NDR0dXUdPXq0paXlwIEDGo1G7kbJj/zCCgQCVqt1dnZWCLEnJycfP35sMBgsFks6UvMgCEKSJMUjKMBqtTocDqvV6vF4Uq+fIIiGhoZDhw4d42lqaiosLJR95C7zyCAsn8+3uro6NjbW29sreLTFxUVJHmpEMAyjaVqj0Wh5SJIUHrPwxgc+h+M4t9ttNpuNRqPFYpGqPSiKNjU1nTx58tSpU1/5ylfKysoQBYy3ZID0CotlWYfDMTs7OzEx8Zhnimd9fT0dsREIghiGURRF0zT1HEFJ4TLaoapweYWOOBwOu91u4UdPpNKZ8BLQ3Nzc3t7e2dnZ0tJSXV2t1pcAiYXl9/tXV1dHR0eHh4cHBwdHR0fn5+ddrnSlXAdBEMdxhmHy8/O1Wi1N0xiGRRRNDBntkFRIhcIHwZg5HI7V1dWFhQWj0SiVMQNBsKysrKOj489//nNJiSIG+CREYmGVlZWZTKY0valBEEQQBMMw4QYJRdFwWew2SKHPIQ8Ym93CCofjOLvdLnhMs9lsMplS/7UZHx9vamqS6IekFCT29yuprd/dAQzDFEVptVqdTifoSQhQYqgnEemEdBZNWDEKQBBEUVRJSUlIZxaL
</head>
<body style="margin:0px;width:100vw;height:100vh;overflow:hidden;" id="game_frame">
<div style="margin:0px;width:100%;height:100%;font-family:sans-serif;display:flex;align-items:center;user-select:none;" id="launch_countdown_screen">
<div style="margin:auto;text-align:center;">
<h1>This file is from <span style="color:#AA0000;">${date}</span></h1>
<h2>Game will launch in <span id="launchCountdownNumber">5</span>...</h2>
<div style="border:2px solid black;width:100%;height:15px;padding:1px;margin-bottom:20vh;"><div id="launchCountdownProgress" style="background-color:#555555;width:0%;height:100%;"></div></div>
<a href="javascript:void(0)" onclick="safeLaunch()"><code>[load without mods]</code></a>
</div>
</div>
</body>
</html>